diff --git a/.eslintrc.json b/.eslintrc.json index a3c6afbb4..21de30d0c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,247 +1,248 @@ -{ - "root": true, - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "node": true - }, - "plugins": ["pug", "@typescript-eslint"], - "globals": { - "alertify": true, - "dragonBones": true, - "monaco": true, - "nw": true, - "PIXI": true, - "QRCode": true, - "riot": true, - "soundbox": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2018 - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "@typescript-eslint/no-var-requires": "off", - "accessor-pairs": "error", - "array-bracket-spacing": ["error", "never"], - "array-callback-return": "error", - "array-element-newline": ["error", "consistent"], - "arrow-body-style": "error", - "arrow-parens": "off", - "arrow-spacing": ["error", {"after": true, "before": true}], - "block-scoped-var": "error", - "block-spacing": ["error", "never"], - "brace-style": ["error", "1tbs", {"allowSingleLine": false}], - "callback-return": "off", - "camelcase": "error", - "capitalized-comments": ["off", "always"], - "class-methods-use-this": "error", - "comma-dangle": ["warn", "never"], - "comma-spacing": ["error", {"before": false, "after": true}], - "comma-style": ["error", "last"], - "complexity": "error", - "computed-property-spacing": ["error","never"], - "consistent-return": "error", - "consistent-this": "error", - "curly": "error", - "default-case": "error", - "dot-location": "off", - "dot-notation": "error", - "eol-last": ["error", "always"], - "eqeqeq": "error", - "func-call-spacing": ["error", "never"], - "func-name-matching": "error", - "func-names": ["error", "as-needed"], - "func-style": ["error", "expression"], - "function-paren-newline": ["error", "multiline"], - "generator-star-spacing": "error", - "global-require": "off", - "guard-for-in": "off", - "handle-callback-err": "error", - "id-blacklist": ["error", "data", "tag", "element"], - "id-length": ["error", {"min": 1, "max": 24}], - "id-match": "error", - "indent": ["error", 4, {"VariableDeclarator": "first", "MemberExpression": "off", "ignoreComments": true}], - "init-declarations": "off", - "jsx-quotes": "error", - "key-spacing": ["error", {"beforeColon": false, "afterColon": true, "mode": "strict"}], - "keyword-spacing": ["error", {"after": true, "before": true}], - "line-comment-position": "off", - "linebreak-style": ["error", "unix"], - "lines-around-comment": "off", - "max-depth": ["error", 4], - "max-len": ["error", {"code": 100, "ignoreComments": false, "ignoreUrls": true, "ignoreStrings": true, "ignoreTemplateLiterals": true, "ignoreRegExpLiterals": true}], - "max-lines": "off", - "max-lines-per-function": ["error", {"max": 80, "skipBlankLines": true, "skipComments": true}], - "max-nested-callbacks": ["error", 10], - "max-params": ["error", 5], - "max-statements": "off", - "max-statements-per-line": ["error", {"max": 1}], - "multiline-ternary": ["error", "always-multiline"], - "new-cap": "warn", - "new-parens": "error", - "newline-per-chained-call": ["error", {"ignoreChainWithDepth": 2}], - "no-alert": "error", - "no-array-constructor": "error", - "no-await-in-loop": "error", - "no-bitwise": "warn", - "no-caller": "error", - "no-confusing-arrow": "error", - "no-console": ["warn", { - "allow": ["error"] - }], - "no-continue": "off", - "no-div-regex": "error", - "no-duplicate-imports": "error", - "no-else-return": "error", - "no-empty-function": "error", - "no-eq-null": "error", - "no-eval": "error", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-extra-label": "error", - "no-extra-parens": "off", - "no-floating-decimal": "error", - "no-implicit-coercion": "error", - "no-implicit-globals": "error", - "no-implied-eval": "error", - "no-inline-comments": "off", - "no-inner-declarations": [ - "error", - "functions" - ], - "no-invalid-this": "off", - "no-iterator": "error", - "no-label-var": "error", - "no-labels": "error", - "no-lone-blocks": "error", - "no-lonely-if": "error", - "no-loop-func": "error", - "no-magic-numbers": "off", - "no-mixed-operators": [ - "error", - { - "groups": [ - ["&", "|", "^", "~", "<<", ">>", ">>>"], - ["==", "!=", "===", "!==", ">", ">=", "<", "<="], - ["&&", "||"], - ["in", "instanceof"] - ], - "allowSamePrecedence": true - } - ], - "no-mixed-requires": "error", - "no-mixed-spaces-and-tabs": "error", - "no-multi-spaces": "error", - "no-multi-str": "error", - "no-multiple-empty-lines": ["error", {"max": 2, "maxEOF": 1}], - "no-negated-condition": "off", - "no-nested-ternary": "error", - "no-new": "error", - "no-new-func": "error", - "no-new-object": "error", - "no-new-require": "error", - "no-new-wrappers": "error", - "no-octal-escape": "error", - "no-param-reassign": "off", - "no-path-concat": "error", - "no-plusplus": "off", - "no-process-env": "warn", - "no-process-exit": "error", - "no-proto": "error", - "no-prototype-builtins": "error", - "no-restricted-globals": "error", - "no-restricted-imports": "error", - "no-restricted-modules": "error", - "no-restricted-properties": "error", - "no-restricted-syntax": ["error", "WithStatement"], - "no-return-assign": "error", - "no-return-await": "error", - "no-script-url": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-shadow": "off", - "no-shadow-restricted-names": "error", - "no-sync": "off", - "no-tabs": "error", - "no-template-curly-in-string": "error", - "no-ternary": "off", - "no-throw-literal": "error", - "no-trailing-spaces": "error", - "no-undef-init": "error", - "no-undefined": "error", - "no-underscore-dangle": ["error", {"allow": ["__dirname"]}], - "no-unmodified-loop-condition": "error", - "no-unneeded-ternary": "error", - "no-unsafe-negation": "error", - "no-unused-expressions": "error", - "no-use-before-define": "error", - "no-useless-call": "error", - "no-useless-computed-key": "error", - "no-useless-concat": "error", - "no-useless-constructor": "error", - "no-useless-escape": "error", - "no-useless-rename": "error", - "no-useless-return": "error", - "no-var": "off", - "no-void": "off", - "no-warning-comments": "warn", - "no-whitespace-before-property": "error", - "no-with": "error", - "object-curly-newline": ["error", { - "ObjectExpression": {"minProperties": 1}, - "ObjectPattern": "never", - "ImportDeclaration": "never", - "ExportDeclaration": {"multiline": true, "minProperties": 2} - }], - "object-curly-spacing": ["error", "never"], - "object-property-newline": ["error", {"allowAllPropertiesOnSameLine": true}], - "object-shorthand": "error", - "one-var": "off", - "one-var-declaration-per-line": ["error", "initializations"], - "operator-assignment": "error", - "operator-linebreak": ["error", "after"], - "padded-blocks": ["error", "never"], - "prefer-arrow-callback": "off", - "prefer-const": "error", - "prefer-destructuring": "error", - "prefer-exponentiation-operator": "warn", - "prefer-numeric-literals": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "prefer-template": "off", - "quote-props": ["error", "as-needed"], - "quotes": ["error", "single"], - "radix": "error", - "require-atomic-updates": "error", - "require-await": "error", - "rest-spread-spacing": "error", - "semi": ["error", "always"], - "semi-spacing": "error", - "semi-style": ["error", "last"], - "sort-imports": "off", - "sort-keys": "off", - "sort-vars": "off", - "space-before-blocks": ["error", "always"], - "space-before-function-paren": ["error", {"anonymous": "always", "named": "never", "asyncArrow": "always"}], - "space-in-parens": ["error", "never"], - "space-infix-ops": "error", - "space-unary-ops": "error", - "spaced-comment": "error", - "strict": "off", - "symbol-description": "error", - "template-curly-spacing": ["error", "never"], - "template-tag-spacing": ["error", "never"], - "unicode-bom": ["error", "never"], - "vars-on-top": "off", - "wrap-regex": "off", - "yield-star-spacing": "error", - "yoda": ["error", "never"] - } -} +{ + "root": true, + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "plugins": ["pug", "@typescript-eslint"], + "globals": { + "alertify": true, + "dragonBones": true, + "monaco": true, + "nw": true, + "PIXI": true, + "QRCode": true, + "riot": true, + "soundbox": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2018 + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@typescript-eslint/no-var-requires": "off", + "accessor-pairs": "error", + "array-bracket-spacing": ["error", "never"], + "array-callback-return": "error", + "array-element-newline": ["error", "consistent"], + "arrow-body-style": "error", + "arrow-parens": "off", + "arrow-spacing": ["error", {"after": true, "before": true}], + "block-scoped-var": "error", + "block-spacing": ["error", "never"], + "brace-style": ["error", "1tbs", {"allowSingleLine": false}], + "callback-return": "off", + "camelcase": "error", + "capitalized-comments": ["off", "always"], + "class-methods-use-this": "error", + "comma-dangle": ["warn", "never"], + "comma-spacing": ["error", {"before": false, "after": true}], + "comma-style": ["error", "last"], + "complexity": "error", + "computed-property-spacing": ["error","never"], + "consistent-return": "error", + "consistent-this": "error", + "curly": "error", + "default-case": "error", + "dot-location": "off", + "dot-notation": "error", + "eol-last": ["error", "always"], + "eqeqeq": "error", + "func-call-spacing": ["error", "never"], + "func-name-matching": "error", + "func-names": ["error", "as-needed"], + "func-style": ["error", "expression"], + "function-paren-newline": ["error", "multiline"], + "generator-star-spacing": "error", + "global-require": "off", + "guard-for-in": "off", + "handle-callback-err": "error", + "id-blacklist": ["error", "data", "tag", "element"], + "id-length": ["error", {"min": 1, "max": 24}], + "id-match": "error", + "indent": ["error", 4, {"VariableDeclarator": "first", "MemberExpression": "off", "ignoreComments": true}], + "init-declarations": "off", + "jsx-quotes": "error", + "key-spacing": ["error", {"beforeColon": false, "afterColon": true, "mode": "strict"}], + "keyword-spacing": ["error", {"after": true, "before": true}], + "line-comment-position": "off", + "linebreak-style": ["error", "unix"], + "lines-around-comment": "off", + "max-depth": ["error", 4], + "max-len": ["error", {"code": 100, "ignoreComments": false, "ignoreUrls": true, "ignoreStrings": true, "ignoreTemplateLiterals": true, "ignoreRegExpLiterals": true}], + "max-lines": "off", + "max-lines-per-function": ["error", {"max": 80, "skipBlankLines": true, "skipComments": true}], + "max-nested-callbacks": ["error", 10], + "max-params": ["error", 5], + "max-statements": "off", + "max-statements-per-line": ["error", {"max": 1}], + "multiline-ternary": ["error", "always-multiline"], + "new-cap": "warn", + "new-parens": "error", + "newline-per-chained-call": ["error", {"ignoreChainWithDepth": 2}], + "no-alert": "error", + "no-array-constructor": "error", + "no-await-in-loop": "error", + "no-bitwise": "warn", + "no-caller": "error", + "no-confusing-arrow": "error", + "no-console": ["warn", { + "allow": ["error"] + }], + "no-continue": "off", + "no-div-regex": "error", + "no-duplicate-imports": "error", + "no-else-return": "error", + "no-empty-function": "error", + "no-eq-null": "error", + "no-eval": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-extra-parens": "off", + "no-floating-decimal": "error", + "no-implicit-coercion": "error", + "no-implicit-globals": "error", + "no-implied-eval": "error", + "no-inline-comments": "off", + "no-inner-declarations": [ + "error", + "functions" + ], + "no-invalid-this": "off", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": "error", + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-magic-numbers": "off", + "no-mixed-operators": [ + "error", + { + "groups": [ + ["&", "|", "^", "~", "<<", ">>", ">>>"], + ["==", "!=", "===", "!==", ">", ">=", "<", "<="], + ["&&", "||"], + ["in", "instanceof"] + ], + "allowSamePrecedence": true + } + ], + "no-mixed-requires": "error", + "no-mixed-spaces-and-tabs": "error", + "no-multi-spaces": "error", + "no-multi-str": "error", + "no-multiple-empty-lines": ["error", {"max": 2, "maxEOF": 1}], + "no-negated-condition": "off", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-object": "error", + "no-new-require": "error", + "no-new-wrappers": "error", + "no-octal-escape": "error", + "no-param-reassign": "off", + "no-path-concat": "error", + "no-plusplus": "off", + "no-process-env": "warn", + "no-process-exit": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-restricted-globals": "error", + "no-restricted-imports": "error", + "no-restricted-modules": "error", + "no-restricted-properties": "error", + "no-restricted-syntax": ["error", "WithStatement"], + "no-return-assign": "error", + "no-return-await": "error", + "no-script-url": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sync": "off", + "no-tabs": "error", + "no-template-curly-in-string": "error", + "no-ternary": "off", + "no-throw-literal": "error", + "no-trailing-spaces": "error", + "no-undef-init": "error", + "no-undefined": "error", + "no-underscore-dangle": ["error", {"allow": ["__dirname"]}], + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": "error", + "no-unsafe-negation": "error", + "no-unused-expressions": "off", + "@typescript-eslint/no-unused-expressions": "error", + "no-use-before-define": "error", + "no-useless-call": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "off", + "no-void": "off", + "no-warning-comments": "warn", + "no-whitespace-before-property": "error", + "no-with": "error", + "object-curly-newline": ["error", { + "ObjectExpression": {"minProperties": 1}, + "ObjectPattern": "never", + "ImportDeclaration": "never", + "ExportDeclaration": {"multiline": true, "minProperties": 2} + }], + "object-curly-spacing": ["error", "never"], + "object-property-newline": ["error", {"allowAllPropertiesOnSameLine": true}], + "object-shorthand": "error", + "one-var": "off", + "one-var-declaration-per-line": ["error", "initializations"], + "operator-assignment": "error", + "operator-linebreak": ["error", "after"], + "padded-blocks": ["error", "never"], + "prefer-arrow-callback": "off", + "prefer-const": "error", + "prefer-destructuring": "error", + "prefer-exponentiation-operator": "warn", + "prefer-numeric-literals": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "off", + "quote-props": ["error", "as-needed"], + "quotes": ["error", "single"], + "radix": "error", + "require-atomic-updates": "error", + "require-await": "error", + "rest-spread-spacing": "error", + "semi": ["error", "always"], + "semi-spacing": "error", + "semi-style": ["error", "last"], + "sort-imports": "off", + "sort-keys": "off", + "sort-vars": "off", + "space-before-blocks": ["error", "always"], + "space-before-function-paren": ["error", {"anonymous": "always", "named": "never", "asyncArrow": "always"}], + "space-in-parens": ["error", "never"], + "space-infix-ops": "error", + "space-unary-ops": "error", + "spaced-comment": "error", + "strict": "off", + "symbol-description": "error", + "template-curly-spacing": ["error", "never"], + "template-tag-spacing": ["error", "never"], + "unicode-bom": ["error", "never"], + "vars-on-top": "off", + "wrap-regex": "off", + "yield-star-spacing": "error", + "yoda": ["error", "never"] + } +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 7db38230f..d44e202e4 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,2 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: comigo -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] +custom: + - https://boosty.to/comigo diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000..dc8a83080 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,25 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 90 +# Issues with these labels will never be considered stale +exemptLabels: [] +# Label to use when marking an issue as stale +staleLabel: 'state:stale' +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + Hey there 👋 I marked this issue as stale as it hadn't brought much attention for quite a while. + + I do understand that stale issues are still issues, yet here stale issues receive the least attention from maintainers so they can focus on more relevant tasks. + You can help with this issue by checking whether it affects latest versions of ct.js and writing about it if it does, + providing an example project and steps to reproduce. + Or maybe you can close it with a PR! + + Note that some platform-dependent issues can't be resolved by developers due to the absense of such devices :c + We will need help from you for such tasks. + + If this issue won't get attention in three months, it will be closed. + +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: > + This issue is now closed! Please create a new one with a proper template if this issue still affects ct.js. diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 904346516..9016ee514 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,5 @@ default: - image: node:16 + image: cosmomyzrailgorynych/docker-nw-builder:latest # Caching settigns for NPM, according to https://docs.gitlab.com/ee/ci/caching/index.html#cache-nodejs-dependencies before_script: - npm ci --cache .npm --prefer-offline @@ -33,7 +33,6 @@ workflow: preinstall: stage: .pre script: - - "npm i -g gulp-cli" - "npm install" - "gulp -f devSetup.gulpfile.js" @@ -41,23 +40,18 @@ lint: needs: ["preinstall"] stage: test script: - - npm i -g gulp-cli - gulp lint build: needs: ["preinstall"] stage: test script: - - npm i -g gulp-cli - gulp build pack-deploy-release: stage: pack needs: ["lint", "build"] script: - - apt-get update - - apt-get install zip unzip -y - - npm i -g gulp-cli - gulp -f devSetup.gulpfile.js - gulp packages --buildNum=$CI_COMMIT_TAG - gulp deployItchOnly --buildNum=$CI_COMMIT_TAG @@ -72,8 +66,6 @@ pack-deploy-nightly: rules: - if: $CI_COMMIT_BRANCH == "develop" script: - - apt-get update - - apt-get install zip unzip -y - npm i -g gulp-cli - gulp -f devSetup.gulpfile.js - gulp packages --nightly --buildNum=$CI_COMMIT_SHORT_SHA diff --git a/.pug-lintrc b/.pug-lintrc deleted file mode 100644 index e5891fc73..000000000 --- a/.pug-lintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "clock" -} diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 000000000..fecf97b51 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,37 @@ +plugins: + - stylelint-stylus +overrides: + - files: + - '*.stylus' + - '*.styl' + - '**/*.stylus' + - '**/*.styl' + customSyntax: 'postcss-styl' +rules: + color-no-invalid-hex: true + font-family-no-duplicate-names: true + named-grid-areas-no-invalid: true + function-calc-no-unspaced-operator: true + function-linear-gradient-no-nonstandard-direction: true + string-no-newline: true + unit-no-unknown: true + keyframe-declaration-no-important: true + keyframe-block-no-duplicate-selectors: true + declaration-block-no-duplicate-properties: true + declaration-block-no-shorthand-property-overrides: true + declaration-block-no-duplicate-custom-properties: true + block-no-empty: true + media-feature-name-no-unknown: true + comment-no-empty: true + no-duplicate-at-import-rules: true + no-empty-source: true + alpha-value-notation: 'number' + length-zero-no-unit: true + declaration-block-single-line-max-declarations: 1 + selector-attribute-quotes: always + selector-id-pattern: 'the[A-Z][a-zA-Z]*' + no-irregular-whitespace: true + + stylus/pythonic: 'always' + stylus/semicolon: 'never' + stylus/property-no-unknown: true diff --git a/README.md b/README.md index f790bb904..24a0c9a06 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ For bugs, feature requests, developing questions, please use [GitHub issues](htt Ct.js is a project maintained by CoMiGo, and programmed mainly by them as well, with little support from [dear contributors](https://github.com/ct-js/ct-js/graphs/contributors) and translators. And *it sucks!* Ct.js is a good game editor, but can be the best one, and one developer is not enough to transition it from a dream to a reality. -If you are willing to participate in ct.js' future, contact me at Discord (CoMiGo#7821) or Telegram (@CoMiGo). Or jump straightly to the [main dev board](https://github.com/orgs/ct-js/projects/1) for current issues. +If you are willing to participate in ct.js' future, contact me at Discord (CoMiGo#1234) or Telegram (@CoMiGo). Or jump straightly to the [main dev board](https://github.com/orgs/ct-js/projects/1) for current issues. ## Support ct.js on product-hunting sites: diff --git a/app/Changelog.md b/app/Changelog.md index 6b5392527..7d09e0de3 100644 --- a/app/Changelog.md +++ b/app/Changelog.md @@ -1,3 +1,102 @@ +## v3.0.0 + +*Fri Sep 09 2022* + +### ✨ New Features + +* Add a tour-guide tag for making tours in ct.IDE. Add an overview guide to the app-menu. Also simplifies the code of app-menu navigation a bit. +* Add `ct.rooms.restart()` method +* Events framework — more vanilla events and ability to add modded ones! Closes #215 +* New rooms editor! Closes #39, #76, #269 +* New & Updated Themes (Nord & Rosé Pine) (#344 by @EhanAhamed) +* Pride mode with a colorful navigation +* Support for blank textures (#362 by @markmehere) +* :bento: Add a vgui catmod by Firecakes (Textbox component) +* :bento: Desktop features Catmod: New Features & Rewrite of Previous Features (#354 by @EhanAhamed) + +### ⚡️ General Improvements + +* :globe_with_meridians: Update Russian translation +* :globe_with_meridians: Update Dutch translation, translated by GambleBranch from Discord server! +* :globe_with_meridians: Update Debug translation +* :globe_with_meridians: Ukrainian translation by @progzone122 +* :bento: Update `ct.matter`; you can now design gameplay logic with events in the template editor. Also brings an update to the 2DPhysics example +* Add Boosty link to the starting screen; change "Donate" url to boosty page +* Add explanations to ct.js license in the license panel (with suggestions by Shiba). Closes #345 +* Add sanity checks for the texture editor. Closes #361 +* Backgrounds' parallax effect now behaves more natural when zooming in/out +* Re-capture window focus on game's mouseover in ct.pointer +* Remove event listeners on ct.fittoscreen.toggleFullscreen. It is now supposed to be run in new pointer events +* Replace gulp-typescript with @ct.js/gulp-typescript. Allows building ct.js on Node.js v18+ +* Simplify memocats by using built-in pointer event (#360 with @omartek) +* Support for Meta key for Mac as an alternative to Control key during room editor's deleteX interactions +* Visually dim deprecated catmods + +### 🐛 Bug Fixes + +* :globe_with_meridians: Fix Russian "export for web" translation +* Big texture support, above 2k by 2k (#358 by @markmehere) +* Change the "Create a template from it" for skeletal animations so it actually works +* `ct.res` must wait for skeletal animations to finish loading before starting the game +* Fix array editors writing nothing when working with assets +* Fix broken license panel +* Fix `ct.delta` behaving incorrectly if `ct.speed` is changed (It is actually a band-aid over pixi.js' issue, buuut oh well) +* Fix `ct.emitter.follow` rotating around a copy at a wrong angle +* Fix `ct.inherit`'s regression from v1. Closes #337 +* Fix `ct.light` using changed `ct.templates.exists` inappropriately +* Fix event list being shared on newly created templates +* Fix examples and templates not showing when ctjs is run outside of your home directory (#357 by @leedigital) +* Fix freshly-created textures crashing the room editor +* Fix inability to select a preview texture in emitter tandem editor +* Fix node context missing in ct.js debugger. Makes Node.js and ct.fs work again. +* Fix unusable modal window on Linux systems during project creation (#351 by @leedigital) +* Fix the alert about improper web build usage that was popping up in Electron builds +* Remove a reference to a non-existent sourcemap from ct.filters denendency +* Tiny visual fix for collapsible input groups in the template editor +* Truncate long names in resource cards. Closes #353 +* Update Comigo (what?) +* Update coordinates of primary pointer in gameplay coordinates if a user doesn't move the pointer +* `ct.matter`: fix physics breaking when additional rooms are appended to the current one + +### 🍱 Demos, Dependencies and Stuff + +* Update Space Shooter example project +* Pull the latest docs +* Update 2DPhysics example with a restart button and ct.pointer in place of ct.mouse +* Update asset gallery contents +* Update Catformer example +* Update various demos and templates +* Update JettyCat example +* Update memocats example +* Update Platformer example + +### 📝 Docs + +* :clap: Pt-BR documentation translation (100% translated!) (#75 by @leedigital) +* :bug: Fix "Propose edits" link +* :bug: Fix pre-v1 direction value at the JettyCat tutorial +* :bug: JettyCat fixes (#81 by @omartek) +* :zap: Minor edits and fixes for localStorage page. Add a missing comma and a couple of comments +* Content Subsystem Docs: Fixed Grammar Errors +* Corrected Grammar in Basic Concepts Docs +* Fixed Incorrect Grammar ct.inputs Documentation +* Room Class Docs: Fixed Minor Grammar Errors +* Updated ct.styles Documentation + +### 🌐 Website + +* :clap: Italian site translation (#27 by @omartek) +* :zap: Add a link to ct.js cheat-sheet to the "what's next" section, put a little heart in place of the list counter to the patreon section +* :zap: Add a link to web installer for Linux +* :zap: Replace patreon links with boosty ._. +* :zap: Update Downloads page. Add a Windows web installer + +### 🌻 Misc + +* :fire: Remove property `thumbnail` from the rooms objects in project data +* :hankey: Fix `npm ci` problems + + ## v2.0.2 *Sun Apr 17 2022* diff --git a/app/data/Wood_End.wav b/app/data/Wood_End.wav new file mode 100644 index 000000000..2e0b68c85 Binary files /dev/null and b/app/data/Wood_End.wav differ diff --git a/app/data/Wood_Start.wav b/app/data/Wood_Start.wav new file mode 100644 index 000000000..522753469 Binary files /dev/null and b/app/data/Wood_Start.wav differ diff --git a/app/data/ct.libs/desktop/DOCS.md b/app/data/ct.libs/desktop/DOCS.md new file mode 100644 index 000000000..124cad0fb --- /dev/null +++ b/app/data/ct.libs/desktop/DOCS.md @@ -0,0 +1,298 @@ +## ct.desktop.openDevTools(options) + +- `options` object (optional) + - `mode` string - Opens the devtools with specified dock state, can be `left`, `right`, `bottom`, `undocked`, or `detach`. + - `activate` boolean (optional) - Whether to bring the opened devtools window to the foreground. The default is `true`. + +Opens the built-in developer tools pannel/debugger + +### Example: + +```javascript +if (aReasonToOpenDebugger === true) { + ct.desktop.openDevTools({ mode: "right" }); +} +``` + +## ct.desktop.closeDevTools() + +Closes the built-in developer tools pannel/debugger + +### Example: + +```javascript +if (aReasonToCloseDebugger === true) { + ct.desktop.closeDevTools(); +} +``` + +## ct.desktop.isDevToolsOpen() + +Checks whether the built-in developer tools pannel/debugger is open + +Returns `boolean` + +### Example: + +```javascript +if (ct.desktop.isDevToolsOpen() === true) { + /* do something if devtools is open */ +} else if (ct.desktop.isDevToolsOpen() === false) { + /* do something if devtools is not open */ +} +``` + +## ct.desktop.quit() + +Closes the game + +### Example: + +```javascript +if (itsTimeToExitNow === true) { + ct.desktop.quit(); +} +``` + +## ct.desktop.show() + +Shows and focuses on the window + +### Example: + +```javascript +if (reasonToFocusWindow === true) { + ct.desktop.show(); +} +``` + +## ct.desktop.hide() + +Hides the window + +### Warning: + +`.hide()` will make the window completly invisible and will not show the window in any operating system menus (Although the app's process will still show in task manager) It will appear as if the app isnt open at all (even though it is actually running) + +**It's nearly impossible to close the window when it's hidden, so make sure you use `.show()` later in your code to make sure the user can see your app!** The only way to close a window hidden with `.hide()` is to kill it's process. + +### Example: + +```javascript +if (timeToHide === true) { + ct.desktop.hide(); +} +``` + +## ct.desktop.isVisible() + +Checks whether or not the window is visible + +Returns `boolean` + +### Example: + +```javascript +if (ct.desktop.isVisible() === true) { + /* do something if the window is showing */ +} else if (ct.desktop.isVisible() === false) { + /* do something if the window is hidden */ +} +``` + +## ct.desktop.maximize() + +Maximizes the window; this will also show (but not focus) the window if it isn't already visible + +### Example: + +```javascript +if (maximizeMe === true) { + ct.desktop.maximize(); +} +``` + +## ct.desktop.unmaximize() + +Unmaximizes the window + +### Example + +```javascript +if (maximizeMe === false) { + ct.desktop.unmaximize(); +} +``` + +## ct.desktop.isMaximized() + +Checks whether or not the window is maximized + +Returns `boolean` + +### Example: + +```javascript +if (ct.desktop.isMaximized() === true) { + /* do something if the window is maximized */ +} else if (ct.desktop.isMaximized() === false) { + /* do something if the window is maximized */ +} +``` + +## ct.desktop.minimize() + +Minimizes the window + +### Example + +```javascript +if (minimizeMe === true) { + ct.desktop.minimize(); +} +``` + +## ct.desktop.restore() + +Restores the window from to its previous state + +### Example + +```javascript +if (reasonToResetWindow) { + ct.desktop.restore(); +} +``` + +## ct.desktop.isMinimized() + +Checks whether or not the window is maximized + +Returns `boolean` + +### Example: + +```javascript +if (ct.desktop.isMinimized() === true) { + /* do something if the window is minimized */ +} else if (ct.desktop.isMinimized() === false) { + /* do something if the window is minimized */ +} +``` + +## ct.desktop.fullscreen() + +Enters fullscreen mode + +### Example + +```javascript +if (BE_FULLSCREEN === true) { + ct.desktop.fullscreen(); +} +``` + +## ct.desktop.unfullscreen() + +Leaves fullscreen mode + +### Example + +```javascript +if (BE_FULLSCREEN === false) { + ct.desktop.unfullscreen(); +} +``` + +## ct.desktop.isFullscreen() + +Checks whether or not the window is fullscreen + +Returns `boolean` + +### Example: + +```javascript +if (ct.desktop.isFullscreen() === true) { + /* do something if the window is fullscreen */ +} else if (ct.desktop.isFullscreen() === false) { + /* do something if the window is fullscreen */ +} +``` + +## ct.desktop.isDesktop + +Whether or not the game is running as a desktop app + +### Example: + +```javascript +if (ct.desktop.isDesktop === true) { + /* Do something only in the desktop app */ +} else if (ct.desktop.isDesktop === false) { + /* Do something on all platforms other than desktop */ +} +``` + +## ct.desktop.isNw + +Whether or not the game is running as a desktop app using NW.js + +### Example: + +```javascript +if (ct.desktop.isNw === true) { + /* Do something only in nw.js */ +} +``` + +## ct.desktop.isElectron + +Whether or not the game is running as a desktop app using Electron + +### Example: + +```javascript +if (ct.desktop.isElectron === true) { + /* Do something only in Electron */ +} +``` + +## ct.desktop.desktopFeature(feature) + +- `feature` object + - `name` string + - `parameter` string (optional) - Defaults to `undefined` + - `nw` object - Options for NW.js + - `namespace` string + - `method` string (optional) - Defaults to `feature.name` + - `parameter` string (optional) - Defaults to `feature.parameter` + - `electron` object - Options for Electron + - `namespace` string + - `method` string (optional) - Defaults to `feature.name` + - `parameter` string (optional) - Defaults to `feature.parameter` + +Validates environment and runs framework-specific methods depending on detected environment and configured options + +Returns `feature.nw.namespace[feature.nw.method](feature.nw.parameter)` or `feature.electron.namespace[feature.electron.method](feature.electron.parameter)` + +(i.e. Returns the function defined in the `namespace` and `method` properties of the current environment) + +### Example: + +```javascript +ct.desktop.desktopFeature({ + name: 'customDesktopStuff', + parameter: someParameter, + nw: { + namespace: 'win.something', + method: 'someNwFunction' + }, + electron: { + namespace: 'mainWindow.something', + method: 'someElectronFunction' + } +}); +/* Will run win.something.someNwFunction('abc') on NW.js */ +/* Will run mainWindow.something.someElectronFunction('abc') on Electron */ +``` diff --git a/app/data/ct.libs/desktop/README.md b/app/data/ct.libs/desktop/README.md index 94ddd447b..75f792a42 100644 --- a/app/data/ct.libs/desktop/README.md +++ b/app/data/ct.libs/desktop/README.md @@ -1,3 +1,3 @@ -Currently just has a method `ct.desktop.quit()`, which exits the game when packaged into executables. +# Desktop features -Also has variables `ct.desktop.isNw` and `ct.desktop.isElectron` to differentiate between these two platforms. \ No newline at end of file +A module that provides useful desktop-specific features, such as manipulating the window, toggling the debugger/devtools, and more! diff --git a/app/data/ct.libs/desktop/index.js b/app/data/ct.libs/desktop/index.js index f42c68653..3e3312ebc 100644 --- a/app/data/ct.libs/desktop/index.js +++ b/app/data/ct.libs/desktop/index.js @@ -1,27 +1,244 @@ ct.desktop = { - isNw: window.nw && window.nw.App, + /* Initialize Properties */ + isNw: null, isElectron: null, - quit() { + isDesktop: null, + /* Define Main Function */ + //eslint-disable-next-line consistent-return + desktopFeature(feature) { + /* Set Defaults for Undefined Parameters */ + feature.nw.method ||= feature.name.split('.')[feature.name.split('.').length - 1]; + feature.nw.parameter ||= feature.parameter; + feature.electron.method ||= feature.name.split('.')[feature.name.split('.').length - 1]; + feature.electron.parameter ||= feature.parameter; + /* Define Functionality for NW.js */ if (ct.desktop.isNw) { + /* Create Local Variables Based on Parameters */ + const namespace = feature.nw.namespace.split('.'); + /* If running in ct.js's debugger */ if (window.iAmInCtIdeDebugger) { // eslint-disable-next-line no-console - console.warn('We don\'t quit because ct.js would quit as well. Let\'s imagine that the game has exited! :D'); - } else { - nw.App.quit(); + console.warn('[' + feature.name + '] - The game is running inside ct.js\'s debugger, desktop features will only work in desktop exports! :c'); + /* If running in NW.js, not in ct.js's debugger */ + } else if (namespace.length === 1) { + if (namespace[0] === 'win') { + const win = nw.Window.get(); + return win[feature.nw.method](feature.nw.parameter); + } else if (namespace[0] !== 'win') { + return nw[namespace[0]][feature.nw.method](feature.nw.parameter); + } + } else if (namespace.length === 2) { + if (namespace[0] === 'win') { + const win = nw.Window.get(); + return win[namespace[1]][feature.nw.method](feature.nw.parameter); + } else if (namespace[0] !== 'win') { + return nw[namespace[0]][namespace[1]][feature.nw.method](feature.nw.parameter); + } } + /* Define Functionality for Electron */ } else if (ct.desktop.isElectron) { - require('electron').remote.getCurrentWindow().close(); + const {ipcRenderer} = require('electron'); + return ipcRenderer.sendSync('ct.desktop', feature); + /* Define Functionality for Unkown Environments */ } else { - console.error('[ct.desktop/quit] Unknown environment :c Are we in a browser?'); + console.error('[' + feature.name + '] - Unknown environment :c Are we in a browser?'); } + }, + /* Define Methods Using Main Function */ + openDevTools(options) { + ct.desktop.desktopFeature({ + name: 'ct.desktop.openDevTools', + nw: { + namespace: 'win', + method: 'showDevTools' + }, + electron: { + namespace: 'mainWindow.webContents', + parameter: options + } + }); + }, + closeDevTools() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.closeDevTools', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow.webContents' + } + }); + }, + isDevToolsOpen() { + return ct.desktop.desktopFeature({ + name: 'ct.desktop.isDevToolsOpen', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow.webContents', + method: 'isDevToolsOpened' + } + }); + }, + quit() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.quit', + nw: { + namespace: 'App' + }, + electron: { + namespace: 'app' + } + }); + }, + show() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.show', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + hide() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.hide', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + isVisible() { + return ct.desktop.desktopFeature({ + name: 'ct.desktop.isVisible', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + maximize() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.maximize', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + unmaximize() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.unmaximize', + nw: { + namespace: 'win' + } + }); + }, + isMaximized() { + return ct.desktop.desktopFeature({ + name: 'ct.desktop.isMaximized', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + minimize() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.minimize', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + restore() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.restore', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + isMinimized() { + return ct.desktop.desktopFeature({ + name: 'ct.desktop.isMinimized', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow' + } + }); + }, + fullscreen() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.fullscreen', + nw: { + namespace: 'win', + method: 'enterFullscreen' + }, + electron: { + namespace: 'mainWindow', + method: 'setFullScreen', + parameter: true + } + }); + }, + unfullscreen() { + ct.desktop.desktopFeature({ + name: 'ct.desktop.unfullscreen', + nw: { + namespace: 'win', + method: 'leaveFullscreen' + }, + electron: { + namespace: 'mainWindow', + method: 'setFullScreen', + parameter: false + } + }); + }, + isFullscreen() { + return ct.desktop.desktopFeature({ + name: 'ct.desktop.isFullscreen', + nw: { + namespace: 'win' + }, + electron: { + namespace: 'mainWindow', + method: 'isFullScreen' + } + }); } }; - +/* Set Prevously Initialized Properties */ +try { + ct.desktop.isNw = Boolean(nw && nw.App); +} catch (e) { + ct.desktop.isNw = false; +} try { require('electron'); ct.desktop.isElectron = true; } catch (e) { ct.desktop.isElectron = false; } - ct.desktop.isDesktop = ct.desktop.isNw || ct.desktop.isElectron; diff --git a/app/data/ct.libs/desktop/module.json b/app/data/ct.libs/desktop/module.json index 1d709678b..facc8df6a 100644 --- a/app/data/ct.libs/desktop/module.json +++ b/app/data/ct.libs/desktop/module.json @@ -1,11 +1,14 @@ { "main": { "name": "Desktop features", - "tagline": "Currently provides just ct.desktop.quit() method to close a game on desktop.", - "version": "0.0.0", + "tagline": "A module that provides useful desktop-specific features, such as manipulating the window, toggling the debugger/devtools, and more!", + "version": "0.1.0", "authors": [{ "name": "Cosmo Myzrail Gorynych", "mail": "admin@nersta.ru" + }, { + "name": "Ehan Ahamed", + "mail": "ehanahamed@ehan.dev" }], "categories": [ "desktop" diff --git a/app/data/ct.libs/desktop/types.d.ts b/app/data/ct.libs/desktop/types.d.ts new file mode 100644 index 000000000..75a856983 --- /dev/null +++ b/app/data/ct.libs/desktop/types.d.ts @@ -0,0 +1,104 @@ +declare namespace ct { + /** + * A module that provides useful desktop-specific features, + * such as manipulating the window, toggling the debugger/devtools, and more! + */ + namespace desktop { + /** + * Validate environment and run framework-specific methods + */ + function desktopFeature(feature: { + name: string, + parameter?: string, + nw: { + namespace: string, + method?: string, + parameter?: string + }, + electron: { + namespace: string, + method?: string, + parameter?: string + } + }): unknown; + /** + * Open the built-in developer tools pannel/debugger + */ + function openDevTools(options?: { + mode: 'left' | 'right' | 'bottom' | 'undocked' | 'detach', + activate: boolean + }): void; + /** + * Close the built-in developer tools pannel/debugger + */ + function closeDevTools(): void; + /** + * Check whether or not the built-in developer tools pannel/debugger is open + */ + function isDevToolsOpen(): boolean; + /** + * Close the game + */ + function quit(): void; + /** + * Show and focus onto the window + */ + function show(): void; + /** + * Hide the window + */ + function hide(): void; + /** + * Check whether or not the window is visible + */ + function isVisible(): boolean; + /** + * Maximize the window; and also show (but not focus) the window if it isn't already visible + */ + function maximize(): void; + /** + * Unmaximize the window + */ + function unmaximize(): void; + /** + * Check whether or not the window is maximized + */ + function isMaximized(): boolean; + /** + * Minimize the window + */ + function minimize(): void; + /** + * Restore the window to its previous state + */ + function restore(): void; + /** + * Check whether or not the window is minimized + */ + function isMinimized(): boolean; + /** + * Enter fullscreen mode + */ + function fullscreen(): void; + /** + * Leave fullscreen mode + */ + function unfullscreen(): void; + /** + * Check whether or not the window is fullscreen + */ + function isFullscreen(): boolean; + /** + * Whether or not the game is running as a desktop app + */ + var isDesktop: boolean; + /** + * Whether or not the game is running as a desktop app using NW.js + */ + var isNw: boolean; + /** + * Whether or not the game is running as a desktop app using Electron + */ + var isElectron: boolean; + } +} diff --git a/app/data/ct.libs/filters/includes/pixi-filters.js b/app/data/ct.libs/filters/includes/pixi-filters.js index 759f1caa8..56dd7b666 100644 --- a/app/data/ct.libs/filters/includes/pixi-filters.js +++ b/app/data/ct.libs/filters/includes/pixi-filters.js @@ -6,4 +6,3 @@ * http://www.opensource.org/licenses/mit-license */ var __filters=function(e,t,n,r,o,i,l,s){"use strict";var a="attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n}",u="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform float gamma;\nuniform float contrast;\nuniform float saturation;\nuniform float brightness;\nuniform float red;\nuniform float green;\nuniform float blue;\nuniform float alpha;\n\nvoid main(void)\n{\n vec4 c = texture2D(uSampler, vTextureCoord);\n\n if (c.a > 0.0) {\n c.rgb /= c.a;\n\n vec3 rgb = pow(c.rgb, vec3(1. / gamma));\n rgb = mix(vec3(.5), mix(vec3(dot(vec3(.2125, .7154, .0721), rgb)), rgb, saturation), contrast);\n rgb.r *= red;\n rgb.g *= green;\n rgb.b *= blue;\n c.rgb = rgb * brightness;\n\n c.rgb *= c.a;\n }\n\n gl_FragColor = c * alpha;\n}\n",c=function(e){function t(t){e.call(this,a,u),Object.assign(this,{gamma:1,saturation:1,contrast:1,brightness:1,red:1,green:1,blue:1,alpha:1},t)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.apply=function(e,t,n,r){this.uniforms.gamma=Math.max(this.gamma,1e-4),this.uniforms.saturation=this.saturation,this.uniforms.contrast=this.contrast,this.uniforms.brightness=this.brightness,this.uniforms.red=this.red,this.uniforms.green=this.green,this.uniforms.blue=this.blue,this.uniforms.alpha=this.alpha,e.applyFilter(this,t,n,r)},t}(t.Filter),f=a,h="\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec2 uOffset;\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y));\n\n // Sample top right pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y));\n\n // Sample bottom right pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y));\n\n // Sample bottom left pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y));\n\n // Average\n color *= 0.25;\n\n gl_FragColor = color;\n}",p="\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec2 uOffset;\nuniform vec4 filterClamp;\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Sample top right pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Sample bottom right pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Sample bottom left pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Average\n color *= 0.25;\n\n gl_FragColor = color;\n}\n",d=function(e){function t(t,r,o){void 0===t&&(t=4),void 0===r&&(r=3),void 0===o&&(o=!1),e.call(this,f,o?p:h),this.uniforms.uOffset=new Float32Array(2),this._pixelSize=new n.Point,this.pixelSize=1,this._clamp=o,this._kernels=null,Array.isArray(t)?this.kernels=t:(this._blur=t,this.quality=r)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={kernels:{configurable:!0},clamp:{configurable:!0},pixelSize:{configurable:!0},quality:{configurable:!0},blur:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){var o,i=this._pixelSize.x/t._frame.width,l=this._pixelSize.y/t._frame.height;if(1===this._quality||0===this._blur)o=this._kernels[0]+.5,this.uniforms.uOffset[0]=o*i,this.uniforms.uOffset[1]=o*l,e.applyFilter(this,t,n,r);else{for(var s,a=e.getFilterTexture(),u=t,c=a,f=this._quality-1,h=0;h0)for(var r=e,o=e/t,i=1;i0?(this._kernels=e,this._quality=e.length,this._blur=Math.max.apply(Math,e)):(this._kernels=[0],this._quality=1)},r.clamp.get=function(){return this._clamp},r.pixelSize.set=function(e){"number"==typeof e?(this._pixelSize.x=e,this._pixelSize.y=e):Array.isArray(e)?(this._pixelSize.x=e[0],this._pixelSize.y=e[1]):e instanceof n.Point?(this._pixelSize.x=e.x,this._pixelSize.y=e.y):(this._pixelSize.x=1,this._pixelSize.y=1)},r.pixelSize.get=function(){return this._pixelSize},r.quality.get=function(){return this._quality},r.quality.set=function(e){this._quality=Math.max(1,Math.round(e)),this._generateKernels()},r.blur.get=function(){return this._blur},r.blur.set=function(e){this._blur=e,this._generateKernels()},Object.defineProperties(t.prototype,r),t}(t.Filter),m=a,g="\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\n\nuniform float threshold;\n\nvoid main() {\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n // A simple & fast algorithm for getting brightness.\n // It's inaccuracy , but good enought for this feature.\n float _max = max(max(color.r, color.g), color.b);\n float _min = min(min(color.r, color.g), color.b);\n float brightness = (_max + _min) * 0.5;\n\n if(brightness > threshold) {\n gl_FragColor = color;\n } else {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n}\n",v=function(e){function t(t){void 0===t&&(t=.5),e.call(this,m,g),this.threshold=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={threshold:{configurable:!0}};return n.threshold.get=function(){return this.uniforms.threshold},n.threshold.set=function(e){this.uniforms.threshold=e},Object.defineProperties(t.prototype,n),t}(t.Filter),x="uniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\n\nuniform sampler2D bloomTexture;\nuniform float bloomScale;\nuniform float brightness;\n\nvoid main() {\n vec4 color = texture2D(uSampler, vTextureCoord);\n color.rgb *= brightness;\n vec4 bloomColor = vec4(texture2D(bloomTexture, vTextureCoord).rgb, 0.0);\n bloomColor.rgb *= bloomScale;\n gl_FragColor = color + bloomColor;\n}\n",y=function(e){function t(t){e.call(this,m,x),"number"==typeof t&&(t={threshold:t}),t=Object.assign({threshold:.5,bloomScale:1,brightness:1,kernels:null,blur:8,quality:4,pixelSize:1,resolution:r.settings.FILTER_RESOLUTION},t),this.bloomScale=t.bloomScale,this.brightness=t.brightness;var n=t.kernels,o=t.blur,i=t.quality,l=t.pixelSize,s=t.resolution;this._extractFilter=new v(t.threshold),this._extractFilter.resolution=s,this._blurFilter=n?new d(n):new d(o,i),this.pixelSize=l,this.resolution=s}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={resolution:{configurable:!0},threshold:{configurable:!0},kernels:{configurable:!0},blur:{configurable:!0},quality:{configurable:!0},pixelSize:{configurable:!0}};return t.prototype.apply=function(e,t,n,r,o){var i=e.getFilterTexture();this._extractFilter.apply(e,t,i,1,o);var l=e.getFilterTexture();this._blurFilter.apply(e,i,l,1,o),this.uniforms.bloomScale=this.bloomScale,this.uniforms.brightness=this.brightness,this.uniforms.bloomTexture=l,e.applyFilter(this,t,n,r),e.returnFilterTexture(l),e.returnFilterTexture(i)},n.resolution.get=function(){return this._resolution},n.resolution.set=function(e){this._resolution=e,this._extractFilter&&(this._extractFilter.resolution=e),this._blurFilter&&(this._blurFilter.resolution=e)},n.threshold.get=function(){return this._extractFilter.threshold},n.threshold.set=function(e){this._extractFilter.threshold=e},n.kernels.get=function(){return this._blurFilter.kernels},n.kernels.set=function(e){this._blurFilter.kernels=e},n.blur.get=function(){return this._blurFilter.blur},n.blur.set=function(e){this._blurFilter.blur=e},n.quality.get=function(){return this._blurFilter.quality},n.quality.set=function(e){this._blurFilter.quality=e},n.pixelSize.get=function(){return this._blurFilter.pixelSize},n.pixelSize.set=function(e){this._blurFilter.pixelSize=e},Object.defineProperties(t.prototype,n),t}(t.Filter),_=a,b="varying vec2 vTextureCoord;\n\nuniform vec4 filterArea;\nuniform float pixelSize;\nuniform sampler2D uSampler;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= filterArea.xy;\n coord += filterArea.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= filterArea.zw;\n coord /= filterArea.xy;\n\n return coord;\n}\n\nvec2 pixelate(vec2 coord, vec2 size)\n{\n return floor( coord / size ) * size;\n}\n\nvec2 getMod(vec2 coord, vec2 size)\n{\n return mod( coord , size) / size;\n}\n\nfloat character(float n, vec2 p)\n{\n p = floor(p*vec2(4.0, -4.0) + 2.5);\n\n if (clamp(p.x, 0.0, 4.0) == p.x)\n {\n if (clamp(p.y, 0.0, 4.0) == p.y)\n {\n if (int(mod(n/exp2(p.x + 5.0*p.y), 2.0)) == 1) return 1.0;\n }\n }\n return 0.0;\n}\n\nvoid main()\n{\n vec2 coord = mapCoord(vTextureCoord);\n\n // get the rounded color..\n vec2 pixCoord = pixelate(coord, vec2(pixelSize));\n pixCoord = unmapCoord(pixCoord);\n\n vec4 color = texture2D(uSampler, pixCoord);\n\n // determine the character to use\n float gray = (color.r + color.g + color.b) / 3.0;\n\n float n = 65536.0; // .\n if (gray > 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n // get the mod..\n vec2 modd = getMod(coord, vec2(pixelSize));\n\n gl_FragColor = color * character( n, vec2(-1.0) + modd * 2.0);\n\n}\n",C=function(e){function t(t){void 0===t&&(t=8),e.call(this,_,b),this.size=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={size:{configurable:!0}};return n.size.get=function(){return this.uniforms.pixelSize},n.size.set=function(e){this.uniforms.pixelSize=e},Object.defineProperties(t.prototype,n),t}(t.Filter),S=a,F="precision mediump float;\n\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform float transformX;\nuniform float transformY;\nuniform vec3 lightColor;\nuniform float lightAlpha;\nuniform vec3 shadowColor;\nuniform float shadowAlpha;\n\nvoid main(void) {\n vec2 transform = vec2(1.0 / filterArea) * vec2(transformX, transformY);\n vec4 color = texture2D(uSampler, vTextureCoord);\n float light = texture2D(uSampler, vTextureCoord - transform).a;\n float shadow = texture2D(uSampler, vTextureCoord + transform).a;\n\n color.rgb = mix(color.rgb, lightColor, clamp((color.a - light) * lightAlpha, 0.0, 1.0));\n color.rgb = mix(color.rgb, shadowColor, clamp((color.a - shadow) * shadowAlpha, 0.0, 1.0));\n gl_FragColor = vec4(color.rgb * color.a, color.a);\n}\n",z=function(e){function t(t){void 0===t&&(t={}),e.call(this,S,F),this.uniforms.lightColor=new Float32Array(3),this.uniforms.shadowColor=new Float32Array(3),t=Object.assign({rotation:45,thickness:2,lightColor:16777215,lightAlpha:.7,shadowColor:0,shadowAlpha:.7},t),this.rotation=t.rotation,this.thickness=t.thickness,this.lightColor=t.lightColor,this.lightAlpha=t.lightAlpha,this.shadowColor=t.shadowColor,this.shadowAlpha=t.shadowAlpha,this.padding=1}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={rotation:{configurable:!0},thickness:{configurable:!0},lightColor:{configurable:!0},lightAlpha:{configurable:!0},shadowColor:{configurable:!0},shadowAlpha:{configurable:!0}};return t.prototype._updateTransform=function(){this.uniforms.transformX=this._thickness*Math.cos(this._angle),this.uniforms.transformY=this._thickness*Math.sin(this._angle)},r.rotation.get=function(){return this._angle/n.DEG_TO_RAD},r.rotation.set=function(e){this._angle=e*n.DEG_TO_RAD,this._updateTransform()},r.thickness.get=function(){return this._thickness},r.thickness.set=function(e){this._thickness=e,this._updateTransform()},r.lightColor.get=function(){return o.rgb2hex(this.uniforms.lightColor)},r.lightColor.set=function(e){o.hex2rgb(e,this.uniforms.lightColor)},r.lightAlpha.get=function(){return this.uniforms.lightAlpha},r.lightAlpha.set=function(e){this.uniforms.lightAlpha=e},r.shadowColor.get=function(){return o.rgb2hex(this.uniforms.shadowColor)},r.shadowColor.set=function(e){o.hex2rgb(e,this.uniforms.shadowColor)},r.shadowAlpha.get=function(){return this.uniforms.shadowAlpha},r.shadowAlpha.set=function(e){this.uniforms.shadowAlpha=e},Object.defineProperties(t.prototype,r),t}(t.Filter),A=function(e){function t(t,o,a,u){var c,f;void 0===t&&(t=2),void 0===o&&(o=4),void 0===a&&(a=r.settings.FILTER_RESOLUTION),void 0===u&&(u=5),e.call(this),"number"==typeof t?(c=t,f=t):t instanceof n.Point?(c=t.x,f=t.y):Array.isArray(t)&&(c=t[0],f=t[1]),this.blurXFilter=new s.BlurFilterPass(!0,c,o,a,u),this.blurYFilter=new s.BlurFilterPass(!1,f,o,a,u),this.blurYFilter.blendMode=i.BLEND_MODES.SCREEN,this.defaultFilter=new l.AlphaFilter}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var o={blur:{configurable:!0},blurX:{configurable:!0},blurY:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){var o=e.getFilterTexture();this.defaultFilter.apply(e,t,n,r),this.blurXFilter.apply(e,t,o),this.blurYFilter.apply(e,o,n,0),e.returnFilterTexture(o)},o.blur.get=function(){return this.blurXFilter.blur},o.blur.set=function(e){this.blurXFilter.blur=this.blurYFilter.blur=e},o.blurX.get=function(){return this.blurXFilter.blur},o.blurX.set=function(e){this.blurXFilter.blur=e},o.blurY.get=function(){return this.blurYFilter.blur},o.blurY.set=function(e){this.blurYFilter.blur=e},Object.defineProperties(t.prototype,o),t}(t.Filter),T=a,w="uniform float radius;\nuniform float strength;\nuniform vec2 center;\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform vec2 dimensions;\n\nvoid main()\n{\n vec2 coord = vTextureCoord * filterArea.xy;\n coord -= center * dimensions.xy;\n float distance = length(coord);\n if (distance < radius) {\n float percent = distance / radius;\n if (strength > 0.0) {\n coord *= mix(1.0, smoothstep(0.0, radius / distance, percent), strength * 0.75);\n } else {\n coord *= mix(1.0, pow(percent, 1.0 + strength * 0.75) * radius / distance, 1.0 - percent);\n }\n }\n coord += center * dimensions.xy;\n coord /= filterArea.xy;\n vec2 clampedCoord = clamp(coord, filterClamp.xy, filterClamp.zw);\n vec4 color = texture2D(uSampler, clampedCoord);\n if (coord != clampedCoord) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n gl_FragColor = color;\n}\n",O=function(e){function t(t){if(e.call(this,T,w),"object"!=typeof t){var n=arguments[0],r=arguments[1],o=arguments[2];t={},void 0!==n&&(t.center=n),void 0!==r&&(t.radius=r),void 0!==o&&(t.strength=o)}this.uniforms.dimensions=new Float32Array(2),Object.assign(this,{center:[.5,.5],radius:100,strength:1},t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={radius:{configurable:!0},strength:{configurable:!0},center:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.dimensions[0]=t.filterFrame.width,this.uniforms.dimensions[1]=t.filterFrame.height,e.applyFilter(this,t,n,r)},n.radius.get=function(){return this.uniforms.radius},n.radius.set=function(e){this.uniforms.radius=e},n.strength.get=function(){return this.uniforms.strength},n.strength.set=function(e){this.uniforms.strength=e},n.center.get=function(){return this.uniforms.center},n.center.set=function(e){this.uniforms.center=e},Object.defineProperties(t.prototype,n),t}(t.Filter),D=a,P="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform sampler2D colorMap;\nuniform float _mix;\nuniform float _size;\nuniform float _sliceSize;\nuniform float _slicePixelSize;\nuniform float _sliceInnerSize;\nvoid main() {\n vec4 color = texture2D(uSampler, vTextureCoord.xy);\n\n vec4 adjusted;\n if (color.a > 0.0) {\n color.rgb /= color.a;\n float innerWidth = _size - 1.0;\n float zSlice0 = min(floor(color.b * innerWidth), innerWidth);\n float zSlice1 = min(zSlice0 + 1.0, innerWidth);\n float xOffset = _slicePixelSize * 0.5 + color.r * _sliceInnerSize;\n float s0 = xOffset + (zSlice0 * _sliceSize);\n float s1 = xOffset + (zSlice1 * _sliceSize);\n float yOffset = _sliceSize * 0.5 + color.g * (1.0 - _sliceSize);\n vec4 slice0Color = texture2D(colorMap, vec2(s0,yOffset));\n vec4 slice1Color = texture2D(colorMap, vec2(s1,yOffset));\n float zOffset = fract(color.b * innerWidth);\n adjusted = mix(slice0Color, slice1Color, zOffset);\n\n color.rgb *= color.a;\n }\n gl_FragColor = vec4(mix(color, adjusted, _mix).rgb, color.a);\n\n}",M=function(e){function n(t,n,r){void 0===n&&(n=!1),void 0===r&&(r=1),e.call(this,D,P),this._size=0,this._sliceSize=0,this._slicePixelSize=0,this._sliceInnerSize=0,this._scaleMode=null,this._nearest=!1,this.nearest=n,this.mix=r,this.colorMap=t}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var r={colorSize:{configurable:!0},colorMap:{configurable:!0},nearest:{configurable:!0}};return n.prototype.apply=function(e,t,n,r){this.uniforms._mix=this.mix,e.applyFilter(this,t,n,r)},r.colorSize.get=function(){return this._size},r.colorMap.get=function(){return this._colorMap},r.colorMap.set=function(e){e instanceof t.Texture||(e=t.Texture.from(e)),e&&e.baseTexture&&(e.baseTexture.scaleMode=this._scaleMode,e.baseTexture.mipmap=!1,this._size=e.height,this._sliceSize=1/this._size,this._slicePixelSize=this._sliceSize/this._size,this._sliceInnerSize=this._slicePixelSize*(this._size-1),this.uniforms._size=this._size,this.uniforms._sliceSize=this._sliceSize,this.uniforms._slicePixelSize=this._slicePixelSize,this.uniforms._sliceInnerSize=this._sliceInnerSize,this.uniforms.colorMap=e),this._colorMap=e},r.nearest.get=function(){return this._nearest},r.nearest.set=function(e){this._nearest=e,this._scaleMode=e?i.SCALE_MODES.NEAREST:i.SCALE_MODES.LINEAR;var t=this._colorMap;t&&t.baseTexture&&(t.baseTexture._glTextures={},t.baseTexture.scaleMode=this._scaleMode,t.baseTexture.mipmap=!1,t._updateID++,t.baseTexture.emit("update",t.baseTexture))},n.prototype.updateColorMap=function(){var e=this._colorMap;e&&e.baseTexture&&(e._updateID++,e.baseTexture.emit("update",e.baseTexture),this.colorMap=e)},n.prototype.destroy=function(t){this._colorMap&&this._colorMap.destroy(t),e.prototype.destroy.call(this)},Object.defineProperties(n.prototype,r),n}(t.Filter),R=a,k="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec3 color;\nvoid main(void) {\n vec4 currentColor = texture2D(uSampler, vTextureCoord);\n vec3 colorOverlay = color * currentColor.a;\n gl_FragColor = vec4(colorOverlay.r, colorOverlay.g, colorOverlay.b, currentColor.a);\n}\n",j=function(e){function t(t){void 0===t&&(t=0),e.call(this,R,k),this.uniforms.color=new Float32Array(3),this.color=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={color:{configurable:!0}};return n.color.set=function(e){var t=this.uniforms.color;"number"==typeof e?(o.hex2rgb(e,t),this._color=e):(t[0]=e[0],t[1]=e[1],t[2]=e[2],this._color=o.rgb2hex(t))},n.color.get=function(){return this._color},Object.defineProperties(t.prototype,n),t}(t.Filter),E=a,L="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec3 originalColor;\nuniform vec3 newColor;\nuniform float epsilon;\nvoid main(void) {\n vec4 currentColor = texture2D(uSampler, vTextureCoord);\n vec3 colorDiff = originalColor - (currentColor.rgb / max(currentColor.a, 0.0000000001));\n float colorDistance = length(colorDiff);\n float doReplace = step(colorDistance, epsilon);\n gl_FragColor = vec4(mix(currentColor.rgb, (newColor + colorDiff) * currentColor.a, doReplace), currentColor.a);\n}\n",I=function(e){function t(t,n,r){void 0===t&&(t=16711680),void 0===n&&(n=0),void 0===r&&(r=.4),e.call(this,E,L),this.uniforms.originalColor=new Float32Array(3),this.uniforms.newColor=new Float32Array(3),this.originalColor=t,this.newColor=n,this.epsilon=r}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={originalColor:{configurable:!0},newColor:{configurable:!0},epsilon:{configurable:!0}};return n.originalColor.set=function(e){var t=this.uniforms.originalColor;"number"==typeof e?(o.hex2rgb(e,t),this._originalColor=e):(t[0]=e[0],t[1]=e[1],t[2]=e[2],this._originalColor=o.rgb2hex(t))},n.originalColor.get=function(){return this._originalColor},n.newColor.set=function(e){var t=this.uniforms.newColor;"number"==typeof e?(o.hex2rgb(e,t),this._newColor=e):(t[0]=e[0],t[1]=e[1],t[2]=e[2],this._newColor=o.rgb2hex(t))},n.newColor.get=function(){return this._newColor},n.epsilon.set=function(e){this.uniforms.epsilon=e},n.epsilon.get=function(){return this.uniforms.epsilon},Object.defineProperties(t.prototype,n),t}(t.Filter),X=a,B="precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",N=function(e){function t(t,n,r){void 0===n&&(n=200),void 0===r&&(r=200),e.call(this,X,B),this.uniforms.texelSize=new Float32Array(2),this.uniforms.matrix=new Float32Array(9),void 0!==t&&(this.matrix=t),this.width=n,this.height=r}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={matrix:{configurable:!0},width:{configurable:!0},height:{configurable:!0}};return n.matrix.get=function(){return this.uniforms.matrix},n.matrix.set=function(e){var t=this;e.forEach(function(e,n){return t.uniforms.matrix[n]=e})},n.width.get=function(){return 1/this.uniforms.texelSize[0]},n.width.set=function(e){this.uniforms.texelSize[0]=1/e},n.height.get=function(){return 1/this.uniforms.texelSize[1]},n.height.set=function(e){this.uniforms.texelSize[1]=1/e},Object.defineProperties(t.prototype,n),t}(t.Filter),G=a,q="precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n",K=function(e){function t(){e.call(this,G,q)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(t.Filter),W=a,Y="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\nuniform vec2 dimensions;\n\nconst float SQRT_2 = 1.414213;\n\nconst float light = 1.0;\n\nuniform float curvature;\nuniform float lineWidth;\nuniform float lineContrast;\nuniform bool verticalLine;\nuniform float noise;\nuniform float noiseSize;\n\nuniform float vignetting;\nuniform float vignettingAlpha;\nuniform float vignettingBlur;\n\nuniform float seed;\nuniform float time;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main(void)\n{\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\n vec2 dir = vec2(vTextureCoord.xy - vec2(0.5, 0.5)) * filterArea.xy / dimensions;\n\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n vec3 rgb = gl_FragColor.rgb;\n\n if (noise > 0.0 && noiseSize > 0.0)\n {\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\n float _noise = rand(pixelCoord * noiseSize * seed) - 0.5;\n rgb += _noise * noise;\n }\n\n if (lineWidth > 0.0)\n {\n float _c = curvature > 0. ? curvature : 1.;\n float k = curvature > 0. ?(length(dir * dir) * 0.25 * _c * _c + 0.935 * _c) : 1.;\n vec2 uv = dir * k;\n\n float v = (verticalLine ? uv.x * dimensions.x : uv.y * dimensions.y) * min(1.0, 2.0 / lineWidth ) / _c;\n float j = 1. + cos(v * 1.2 - time) * 0.5 * lineContrast;\n rgb *= j;\n float segment = verticalLine ? mod((dir.x + .5) * dimensions.x, 4.) : mod((dir.y + .5) * dimensions.y, 4.);\n rgb *= 0.99 + ceil(segment) * 0.015;\n }\n\n if (vignetting > 0.0)\n {\n float outter = SQRT_2 - vignetting * SQRT_2;\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignettingBlur * SQRT_2), 0.0, 1.0);\n rgb *= darker + (1.0 - darker) * (1.0 - vignettingAlpha);\n }\n\n gl_FragColor.rgb = rgb;\n}\n",Z=function(e){function t(t){e.call(this,W,Y),this.uniforms.dimensions=new Float32Array(2),this.time=0,this.seed=0,Object.assign(this,{curvature:1,lineWidth:1,lineContrast:.25,verticalLine:!1,noise:0,noiseSize:1,seed:0,vignetting:.3,vignettingAlpha:1,vignettingBlur:.3,time:0},t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={curvature:{configurable:!0},lineWidth:{configurable:!0},lineContrast:{configurable:!0},verticalLine:{configurable:!0},noise:{configurable:!0},noiseSize:{configurable:!0},vignetting:{configurable:!0},vignettingAlpha:{configurable:!0},vignettingBlur:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.dimensions[0]=t.filterFrame.width,this.uniforms.dimensions[1]=t.filterFrame.height,this.uniforms.seed=this.seed,this.uniforms.time=this.time,e.applyFilter(this,t,n,r)},n.curvature.set=function(e){this.uniforms.curvature=e},n.curvature.get=function(){return this.uniforms.curvature},n.lineWidth.set=function(e){this.uniforms.lineWidth=e},n.lineWidth.get=function(){return this.uniforms.lineWidth},n.lineContrast.set=function(e){this.uniforms.lineContrast=e},n.lineContrast.get=function(){return this.uniforms.lineContrast},n.verticalLine.set=function(e){this.uniforms.verticalLine=e},n.verticalLine.get=function(){return this.uniforms.verticalLine},n.noise.set=function(e){this.uniforms.noise=e},n.noise.get=function(){return this.uniforms.noise},n.noiseSize.set=function(e){this.uniforms.noiseSize=e},n.noiseSize.get=function(){return this.uniforms.noiseSize},n.vignetting.set=function(e){this.uniforms.vignetting=e},n.vignetting.get=function(){return this.uniforms.vignetting},n.vignettingAlpha.set=function(e){this.uniforms.vignettingAlpha=e},n.vignettingAlpha.get=function(){return this.uniforms.vignettingAlpha},n.vignettingBlur.set=function(e){this.uniforms.vignettingBlur=e},n.vignettingBlur.get=function(){return this.uniforms.vignettingBlur},Object.defineProperties(t.prototype,n),t}(t.Filter),Q=a,U="precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 filterArea;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * filterArea.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",V=function(e){function t(t,n){void 0===t&&(t=1),void 0===n&&(n=5),e.call(this,Q,U),this.scale=t,this.angle=n}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={scale:{configurable:!0},angle:{configurable:!0}};return n.scale.get=function(){return this.uniforms.scale},n.scale.set=function(e){this.uniforms.scale=e},n.angle.get=function(){return this.uniforms.angle},n.angle.set=function(e){this.uniforms.angle=e},Object.defineProperties(t.prototype,n),t}(t.Filter),H=a,$="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform vec3 color;\n\nuniform vec2 shift;\nuniform vec4 inputSize;\n\nvoid main(void){\n vec4 sample = texture2D(uSampler, vTextureCoord - shift * inputSize.zw);\n\n // Premultiply alpha\n sample.rgb = color.rgb * sample.a;\n\n // alpha user alpha\n sample *= alpha;\n\n gl_FragColor = sample;\n}",J=function(e){function t(t){t&&t.constructor!==Object&&(console.warn("DropShadowFilter now uses options instead of (rotation, distance, blur, color, alpha)"),t={rotation:t},void 0!==arguments[1]&&(t.distance=arguments[1]),void 0!==arguments[2]&&(t.blur=arguments[2]),void 0!==arguments[3]&&(t.color=arguments[3]),void 0!==arguments[4]&&(t.alpha=arguments[4])),t=Object.assign({rotation:45,distance:5,color:0,alpha:.5,shadowOnly:!1,kernels:null,blur:2,quality:3,pixelSize:1,resolution:r.settings.FILTER_RESOLUTION},t),e.call(this);var o=t.kernels,i=t.blur,l=t.quality,s=t.pixelSize,a=t.resolution;this._tintFilter=new e(H,$),this._tintFilter.uniforms.color=new Float32Array(4),this._tintFilter.uniforms.shift=new n.Point,this._tintFilter.resolution=a,this._blurFilter=o?new d(o):new d(i,l),this.pixelSize=s,this.resolution=a;var u=t.shadowOnly,c=t.rotation,f=t.distance,h=t.alpha,p=t.color;this.shadowOnly=u,this.rotation=c,this.distance=f,this.alpha=h,this.color=p,this._updatePadding()}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={resolution:{configurable:!0},distance:{configurable:!0},rotation:{configurable:!0},alpha:{configurable:!0},color:{configurable:!0},kernels:{configurable:!0},blur:{configurable:!0},quality:{configurable:!0},pixelSize:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){var o=e.getFilterTexture();this._tintFilter.apply(e,t,o,1),this._blurFilter.apply(e,o,n,r),!0!==this.shadowOnly&&e.applyFilter(this,t,n,0),e.returnFilterTexture(o)},t.prototype._updatePadding=function(){this.padding=this.distance+2*this.blur},t.prototype._updateShift=function(){this._tintFilter.uniforms.shift.set(this.distance*Math.cos(this.angle),this.distance*Math.sin(this.angle))},i.resolution.get=function(){return this._resolution},i.resolution.set=function(e){this._resolution=e,this._tintFilter&&(this._tintFilter.resolution=e),this._blurFilter&&(this._blurFilter.resolution=e)},i.distance.get=function(){return this._distance},i.distance.set=function(e){this._distance=e,this._updatePadding(),this._updateShift()},i.rotation.get=function(){return this.angle/n.DEG_TO_RAD},i.rotation.set=function(e){this.angle=e*n.DEG_TO_RAD,this._updateShift()},i.alpha.get=function(){return this._tintFilter.uniforms.alpha},i.alpha.set=function(e){this._tintFilter.uniforms.alpha=e},i.color.get=function(){return o.rgb2hex(this._tintFilter.uniforms.color)},i.color.set=function(e){o.hex2rgb(e,this._tintFilter.uniforms.color)},i.kernels.get=function(){return this._blurFilter.kernels},i.kernels.set=function(e){this._blurFilter.kernels=e},i.blur.get=function(){return this._blurFilter.blur},i.blur.set=function(e){this._blurFilter.blur=e,this._updatePadding()},i.quality.get=function(){return this._blurFilter.quality},i.quality.set=function(e){this._blurFilter.quality=e},i.pixelSize.get=function(){return this._blurFilter.pixelSize},i.pixelSize.set=function(e){this._blurFilter.pixelSize=e},Object.defineProperties(t.prototype,i),t}(t.Filter),ee=a,te="precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float strength;\nuniform vec4 filterArea;\n\n\nvoid main(void)\n{\n\tvec2 onePixel = vec2(1.0 / filterArea);\n\n\tvec4 color;\n\n\tcolor.rgb = vec3(0.5);\n\n\tcolor -= texture2D(uSampler, vTextureCoord - onePixel) * strength;\n\tcolor += texture2D(uSampler, vTextureCoord + onePixel) * strength;\n\n\tcolor.rgb = vec3((color.r + color.g + color.b) / 3.0);\n\n\tfloat alpha = texture2D(uSampler, vTextureCoord).a;\n\n\tgl_FragColor = vec4(color.rgb * alpha, alpha);\n}\n",ne=function(e){function t(t){void 0===t&&(t=5),e.call(this,ee,te),this.strength=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={strength:{configurable:!0}};return n.strength.get=function(){return this.uniforms.strength},n.strength.set=function(e){this.uniforms.strength=e},Object.defineProperties(t.prototype,n),t}(t.Filter),re=a,oe="// precision highp float;\n\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform vec2 dimensions;\nuniform float aspect;\n\nuniform sampler2D displacementMap;\nuniform float offset;\nuniform float sinDir;\nuniform float cosDir;\nuniform int fillMode;\n\nuniform float seed;\nuniform vec2 red;\nuniform vec2 green;\nuniform vec2 blue;\n\nconst int TRANSPARENT = 0;\nconst int ORIGINAL = 1;\nconst int LOOP = 2;\nconst int CLAMP = 3;\nconst int MIRROR = 4;\n\nvoid main(void)\n{\n vec2 coord = (vTextureCoord * filterArea.xy) / dimensions;\n\n if (coord.x > 1.0 || coord.y > 1.0) {\n return;\n }\n\n float cx = coord.x - 0.5;\n float cy = (coord.y - 0.5) * aspect;\n float ny = (-sinDir * cx + cosDir * cy) / aspect + 0.5;\n\n // displacementMap: repeat\n // ny = ny > 1.0 ? ny - 1.0 : (ny < 0.0 ? 1.0 + ny : ny);\n\n // displacementMap: mirror\n ny = ny > 1.0 ? 2.0 - ny : (ny < 0.0 ? -ny : ny);\n\n vec4 dc = texture2D(displacementMap, vec2(0.5, ny));\n\n float displacement = (dc.r - dc.g) * (offset / filterArea.x);\n\n coord = vTextureCoord + vec2(cosDir * displacement, sinDir * displacement * aspect);\n\n if (fillMode == CLAMP) {\n coord = clamp(coord, filterClamp.xy, filterClamp.zw);\n } else {\n if( coord.x > filterClamp.z ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.x -= filterClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x = filterClamp.z * 2.0 - coord.x;\n }\n } else if( coord.x < filterClamp.x ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.x += filterClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x *= -filterClamp.z;\n }\n }\n\n if( coord.y > filterClamp.w ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.y -= filterClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y = filterClamp.w * 2.0 - coord.y;\n }\n } else if( coord.y < filterClamp.y ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.y += filterClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y *= -filterClamp.w;\n }\n }\n }\n\n gl_FragColor.r = texture2D(uSampler, coord + red * (1.0 - seed * 0.4) / filterArea.xy).r;\n gl_FragColor.g = texture2D(uSampler, coord + green * (1.0 - seed * 0.3) / filterArea.xy).g;\n gl_FragColor.b = texture2D(uSampler, coord + blue * (1.0 - seed * 0.2) / filterArea.xy).b;\n gl_FragColor.a = texture2D(uSampler, coord).a;\n}\n",ie=function(e){function r(n){void 0===n&&(n={}),e.call(this,re,oe),this.uniforms.dimensions=new Float32Array(2),n=Object.assign({slices:5,offset:100,direction:0,fillMode:0,average:!1,seed:0,red:[0,0],green:[0,0],blue:[0,0],minSize:8,sampleSize:512},n),this.direction=n.direction,this.red=n.red,this.green=n.green,this.blue=n.blue,this.offset=n.offset,this.fillMode=n.fillMode,this.average=n.average,this.seed=n.seed,this.minSize=n.minSize,this.sampleSize=n.sampleSize,this._canvas=document.createElement("canvas"),this._canvas.width=4,this._canvas.height=this.sampleSize,this.texture=t.Texture.from(this._canvas,{scaleMode:i.SCALE_MODES.NEAREST}),this._slices=0,this.slices=n.slices}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var o={sizes:{configurable:!0},offsets:{configurable:!0},slices:{configurable:!0},direction:{configurable:!0},red:{configurable:!0},green:{configurable:!0},blue:{configurable:!0}};return r.prototype.apply=function(e,t,n,r){var o=t.filterFrame.width,i=t.filterFrame.height;this.uniforms.dimensions[0]=o,this.uniforms.dimensions[1]=i,this.uniforms.aspect=i/o,this.uniforms.seed=this.seed,this.uniforms.offset=this.offset,this.uniforms.fillMode=this.fillMode,e.applyFilter(this,t,n,r)},r.prototype._randomizeSizes=function(){var e=this._sizes,t=this._slices-1,n=this.sampleSize,r=Math.min(this.minSize/n,.9/this._slices);if(this.average){for(var o=this._slices,i=1,l=0;l0;t--){var n=Math.random()*t>>0,r=e[t];e[t]=e[n],e[n]=r}},r.prototype._randomizeOffsets=function(){for(var e=0;e0?e:0,a=e<0?-e:0;r.fillStyle="rgba("+s+", "+a+", 0, 1)",r.fillRect(0,o>>0,t,l+1>>0),o+=l}n.baseTexture.update(),this.uniforms.displacementMap=n},o.sizes.set=function(e){for(var t=Math.min(this._slices,e.length),n=0;nthis._maxColors)throw"Length of replacements ("+r+") exceeds the maximum colors length ("+this._maxColors+")";t[3*r]=-1;for(var i=0;i 0.5) then: 1 - 2 * (1 - dst) * (1 - src)\n return vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)),\n (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)),\n (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)));\n}\n\n\nvoid main()\n{\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n vec3 color = gl_FragColor.rgb;\n\n if (sepia > 0.0)\n {\n float gray = (color.x + color.y + color.z) / 3.0;\n vec3 grayscale = vec3(gray);\n\n color = Overlay(SEPIA_RGB, grayscale);\n\n color = grayscale + sepia * (color - grayscale);\n }\n\n vec2 coord = vTextureCoord * filterArea.xy / dimensions.xy;\n\n if (vignetting > 0.0)\n {\n float outter = SQRT_2 - vignetting * SQRT_2;\n vec2 dir = vec2(vec2(0.5, 0.5) - coord);\n dir.y *= dimensions.y / dimensions.x;\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignettingBlur * SQRT_2), 0.0, 1.0);\n color.rgb *= darker + (1.0 - darker) * (1.0 - vignettingAlpha);\n }\n\n if (scratchDensity > seed && scratch != 0.0)\n {\n float phase = seed * 256.0;\n float s = mod(floor(phase), 2.0);\n float dist = 1.0 / scratchDensity;\n float d = distance(coord, vec2(seed * dist, abs(s - seed * dist)));\n if (d < seed * 0.6 + 0.4)\n {\n highp float period = scratchDensity * 10.0;\n\n float xx = coord.x * period + phase;\n float aa = abs(mod(xx, 0.5) * 4.0);\n float bb = mod(floor(xx / 0.5), 2.0);\n float yy = (1.0 - bb) * aa + bb * (2.0 - aa);\n\n float kk = 2.0 * period;\n float dw = scratchWidth / dimensions.x * (0.75 + seed);\n float dh = dw * kk;\n\n float tine = (yy - (2.0 - dh));\n\n if (tine > 0.0) {\n float _sign = sign(scratch);\n\n tine = s * tine / period + scratch + 0.1;\n tine = clamp(tine + 1.0, 0.5 + _sign * 0.5, 1.5 + _sign * 0.5);\n\n color.rgb *= tine;\n }\n }\n }\n\n if (noise > 0.0 && noiseSize > 0.0)\n {\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\n // vec2 d = pixelCoord * noiseSize * vec2(1024.0 + seed * 512.0, 1024.0 - seed * 512.0);\n // float _noise = snoise(d) * 0.5;\n float _noise = rand(pixelCoord * noiseSize * seed) - 0.5;\n color += _noise * noise;\n }\n\n gl_FragColor.rgb = color;\n}\n",be=function(e){function t(t,n){void 0===n&&(n=0),e.call(this,ye,_e),this.uniforms.dimensions=new Float32Array(2),"number"==typeof t?(this.seed=t,t=null):this.seed=n,Object.assign(this,{sepia:.3,noise:.3,noiseSize:1,scratch:.5,scratchDensity:.3,scratchWidth:1,vignetting:.3,vignettingAlpha:1,vignettingBlur:.3},t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={sepia:{configurable:!0},noise:{configurable:!0},noiseSize:{configurable:!0},scratch:{configurable:!0},scratchDensity:{configurable:!0},scratchWidth:{configurable:!0},vignetting:{configurable:!0},vignettingAlpha:{configurable:!0},vignettingBlur:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.dimensions[0]=t.filterFrame.width,this.uniforms.dimensions[1]=t.filterFrame.height,this.uniforms.seed=this.seed,e.applyFilter(this,t,n,r)},n.sepia.set=function(e){this.uniforms.sepia=e},n.sepia.get=function(){return this.uniforms.sepia},n.noise.set=function(e){this.uniforms.noise=e},n.noise.get=function(){return this.uniforms.noise},n.noiseSize.set=function(e){this.uniforms.noiseSize=e},n.noiseSize.get=function(){return this.uniforms.noiseSize},n.scratch.set=function(e){this.uniforms.scratch=e},n.scratch.get=function(){return this.uniforms.scratch},n.scratchDensity.set=function(e){this.uniforms.scratchDensity=e},n.scratchDensity.get=function(){return this.uniforms.scratchDensity},n.scratchWidth.set=function(e){this.uniforms.scratchWidth=e},n.scratchWidth.get=function(){return this.uniforms.scratchWidth},n.vignetting.set=function(e){this.uniforms.vignetting=e},n.vignetting.get=function(){return this.uniforms.vignetting},n.vignettingAlpha.set=function(e){this.uniforms.vignettingAlpha=e},n.vignettingAlpha.get=function(){return this.uniforms.vignettingAlpha},n.vignettingBlur.set=function(e){this.uniforms.vignettingBlur=e},n.vignettingBlur.get=function(){return this.uniforms.vignettingBlur},Object.defineProperties(t.prototype,n),t}(t.Filter),Ce=a,Se="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec2 thickness;\nuniform vec4 outlineColor;\nuniform vec4 filterClamp;\n\nconst float DOUBLE_PI = 3.14159265358979323846264 * 2.;\n\nvoid main(void) {\n vec4 ownColor = texture2D(uSampler, vTextureCoord);\n vec4 curColor;\n float maxAlpha = 0.;\n vec2 displaced;\n for (float angle = 0.; angle <= DOUBLE_PI; angle += ${angleStep}) {\n displaced.x = vTextureCoord.x + thickness.x * cos(angle);\n displaced.y = vTextureCoord.y + thickness.y * sin(angle);\n curColor = texture2D(uSampler, clamp(displaced, filterClamp.xy, filterClamp.zw));\n maxAlpha = max(maxAlpha, curColor.a);\n }\n float resultAlpha = max(maxAlpha, ownColor.a);\n gl_FragColor = vec4((ownColor.rgb + outlineColor.rgb * (1. - ownColor.a)) * resultAlpha, resultAlpha);\n}\n",Fe=function(e){function t(n,r,o){void 0===n&&(n=1),void 0===r&&(r=0),void 0===o&&(o=.1);var i=Math.max(o*t.MAX_SAMPLES,t.MIN_SAMPLES),l=(2*Math.PI/i).toFixed(7);e.call(this,Ce,Se.replace(/\$\{angleStep\}/,l)),this.uniforms.thickness=new Float32Array([0,0]),this.uniforms.outlineColor=new Float32Array([0,0,0,1]),Object.assign(this,{thickness:n,color:r,quality:o})}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={color:{configurable:!0},thickness:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.thickness[0]=this._thickness/t._frame.width,this.uniforms.thickness[1]=this._thickness/t._frame.height,e.applyFilter(this,t,n,r)},n.color.get=function(){return o.rgb2hex(this.uniforms.outlineColor)},n.color.set=function(e){o.hex2rgb(e,this.uniforms.outlineColor)},n.thickness.get=function(){return this._thickness},n.thickness.set=function(e){this._thickness=e,this.padding=e},Object.defineProperties(t.prototype,n),t}(t.Filter);Fe.MIN_SAMPLES=1,Fe.MAX_SAMPLES=100;var ze=a,Ae="precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform vec2 size;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= filterArea.xy;\n coord += filterArea.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= filterArea.zw;\n coord /= filterArea.xy;\n\n return coord;\n}\n\nvec2 pixelate(vec2 coord, vec2 size)\n{\n\treturn floor( coord / size ) * size;\n}\n\nvoid main(void)\n{\n vec2 coord = mapCoord(vTextureCoord);\n\n coord = pixelate(coord, size);\n\n coord = unmapCoord(coord);\n\n gl_FragColor = texture2D(uSampler, coord);\n}\n",Te=function(e){function t(t){void 0===t&&(t=10),e.call(this,ze,Ae),this.size=t}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={size:{configurable:!0}};return n.size.get=function(){return this.uniforms.size},n.size.set=function(e){"number"==typeof e&&(e=[e,e]),this.uniforms.size=e},Object.defineProperties(t.prototype,n),t}(t.Filter),we=a,Oe="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform float uRadian;\nuniform vec2 uCenter;\nuniform float uRadius;\nuniform int uKernelSize;\n\nconst int MAX_KERNEL_SIZE = 2048;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n if (uKernelSize == 0)\n {\n gl_FragColor = color;\n return;\n }\n\n float aspect = filterArea.y / filterArea.x;\n vec2 center = uCenter.xy / filterArea.xy;\n float gradient = uRadius / filterArea.x * 0.3;\n float radius = uRadius / filterArea.x - gradient * 0.5;\n int k = uKernelSize - 1;\n\n vec2 coord = vTextureCoord;\n vec2 dir = vec2(center - coord);\n float dist = length(vec2(dir.x, dir.y * aspect));\n\n float radianStep = uRadian;\n if (radius >= 0.0 && dist > radius) {\n float delta = dist - radius;\n float gap = gradient;\n float scale = 1.0 - abs(delta / gap);\n if (scale <= 0.0) {\n gl_FragColor = color;\n return;\n }\n radianStep *= scale;\n }\n radianStep /= float(k);\n\n float s = sin(radianStep);\n float c = cos(radianStep);\n mat2 rotationMatrix = mat2(vec2(c, -s), vec2(s, c));\n\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\n if (i == k) {\n break;\n }\n\n coord -= center;\n coord.y *= aspect;\n coord = rotationMatrix * coord;\n coord.y /= aspect;\n coord += center;\n\n vec4 sample = texture2D(uSampler, coord);\n\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n\n color += sample;\n }\n\n gl_FragColor = color / float(uKernelSize);\n}\n",De=function(e){function t(t,n,r,o){void 0===t&&(t=0),void 0===n&&(n=[0,0]),void 0===r&&(r=5),void 0===o&&(o=-1),e.call(this,we,Oe),this._angle=0,this.angle=t,this.center=n,this.kernelSize=r,this.radius=o}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={angle:{configurable:!0},center:{configurable:!0},radius:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.uKernelSize=0!==this._angle?this.kernelSize:0,e.applyFilter(this,t,n,r)},n.angle.set=function(e){this._angle=e,this.uniforms.uRadian=e*Math.PI/180},n.angle.get=function(){return this._angle},n.center.get=function(){return this.uniforms.uCenter},n.center.set=function(e){this.uniforms.uCenter=e},n.radius.get=function(){return this.uniforms.uRadius},n.radius.set=function(e){(e<0||e===1/0)&&(e=-1),this.uniforms.uRadius=e},Object.defineProperties(t.prototype,n),t}(t.Filter),Pe=a,Me="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform vec2 dimensions;\n\nuniform bool mirror;\nuniform float boundary;\nuniform vec2 amplitude;\nuniform vec2 waveLength;\nuniform vec2 alpha;\nuniform float time;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main(void)\n{\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\n vec2 coord = pixelCoord / dimensions;\n\n if (coord.y < boundary) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n\n float k = (coord.y - boundary) / (1. - boundary + 0.0001);\n float areaY = boundary * dimensions.y / filterArea.y;\n float v = areaY + areaY - vTextureCoord.y;\n float y = mirror ? v : vTextureCoord.y;\n\n float _amplitude = ((amplitude.y - amplitude.x) * k + amplitude.x ) / filterArea.x;\n float _waveLength = ((waveLength.y - waveLength.x) * k + waveLength.x) / filterArea.y;\n float _alpha = (alpha.y - alpha.x) * k + alpha.x;\n\n float x = vTextureCoord.x + cos(v * 6.28 / _waveLength - time) * _amplitude;\n x = clamp(x, filterClamp.x, filterClamp.z);\n\n vec4 color = texture2D(uSampler, vec2(x, y));\n\n gl_FragColor = color * _alpha;\n}\n",Re=function(e){function t(t){e.call(this,Pe,Me),this.uniforms.amplitude=new Float32Array(2),this.uniforms.waveLength=new Float32Array(2),this.uniforms.alpha=new Float32Array(2),this.uniforms.dimensions=new Float32Array(2),Object.assign(this,{mirror:!0,boundary:.5,amplitude:[0,20],waveLength:[30,100],alpha:[1,1],time:0},t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={mirror:{configurable:!0},boundary:{configurable:!0},amplitude:{configurable:!0},waveLength:{configurable:!0},alpha:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.dimensions[0]=t.filterFrame.width,this.uniforms.dimensions[1]=t.filterFrame.height,this.uniforms.time=this.time,e.applyFilter(this,t,n,r)},n.mirror.set=function(e){this.uniforms.mirror=e},n.mirror.get=function(){return this.uniforms.mirror},n.boundary.set=function(e){this.uniforms.boundary=e},n.boundary.get=function(){return this.uniforms.boundary},n.amplitude.set=function(e){this.uniforms.amplitude[0]=e[0],this.uniforms.amplitude[1]=e[1]},n.amplitude.get=function(){return this.uniforms.amplitude},n.waveLength.set=function(e){this.uniforms.waveLength[0]=e[0],this.uniforms.waveLength[1]=e[1]},n.waveLength.get=function(){return this.uniforms.waveLength},n.alpha.set=function(e){this.uniforms.alpha[0]=e[0],this.uniforms.alpha[1]=e[1]},n.alpha.get=function(){return this.uniforms.alpha},Object.defineProperties(t.prototype,n),t}(t.Filter),ke=a,je="precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\nuniform vec2 red;\nuniform vec2 green;\nuniform vec2 blue;\n\nvoid main(void)\n{\n gl_FragColor.r = texture2D(uSampler, vTextureCoord + red/filterArea.xy).r;\n gl_FragColor.g = texture2D(uSampler, vTextureCoord + green/filterArea.xy).g;\n gl_FragColor.b = texture2D(uSampler, vTextureCoord + blue/filterArea.xy).b;\n gl_FragColor.a = texture2D(uSampler, vTextureCoord).a;\n}\n",Ee=function(e){function t(t,n,r){void 0===t&&(t=[-10,0]),void 0===n&&(n=[0,10]),void 0===r&&(r=[0,0]),e.call(this,ke,je),this.red=t,this.green=n,this.blue=r}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={red:{configurable:!0},green:{configurable:!0},blue:{configurable:!0}};return n.red.get=function(){return this.uniforms.red},n.red.set=function(e){this.uniforms.red=e},n.green.get=function(){return this.uniforms.green},n.green.set=function(e){this.uniforms.green=e},n.blue.get=function(){return this.uniforms.blue},n.blue.set=function(e){this.uniforms.blue=e},Object.defineProperties(t.prototype,n),t}(t.Filter),Le=a,Ie="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\n\nuniform vec2 center;\n\nuniform float amplitude;\nuniform float wavelength;\n// uniform float power;\nuniform float brightness;\nuniform float speed;\nuniform float radius;\n\nuniform float time;\n\nconst float PI = 3.14159;\n\nvoid main()\n{\n float halfWavelength = wavelength * 0.5 / filterArea.x;\n float maxRadius = radius / filterArea.x;\n float currentRadius = time * speed / filterArea.x;\n\n float fade = 1.0;\n\n if (maxRadius > 0.0) {\n if (currentRadius > maxRadius) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n fade = 1.0 - pow(currentRadius / maxRadius, 2.0);\n }\n\n vec2 dir = vec2(vTextureCoord - center / filterArea.xy);\n dir.y *= filterArea.y / filterArea.x;\n float dist = length(dir);\n\n if (dist <= 0.0 || dist < currentRadius - halfWavelength || dist > currentRadius + halfWavelength) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n\n vec2 diffUV = normalize(dir);\n\n float diff = (dist - currentRadius) / halfWavelength;\n\n float p = 1.0 - pow(abs(diff), 2.0);\n\n // float powDiff = diff * pow(p, 2.0) * ( amplitude * fade );\n float powDiff = 1.25 * sin(diff * PI) * p * ( amplitude * fade );\n\n vec2 offset = diffUV * powDiff / filterArea.xy;\n\n // Do clamp :\n vec2 coord = vTextureCoord + offset;\n vec2 clampedCoord = clamp(coord, filterClamp.xy, filterClamp.zw);\n vec4 color = texture2D(uSampler, clampedCoord);\n if (coord != clampedCoord) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n // No clamp :\n // gl_FragColor = texture2D(uSampler, vTextureCoord + offset);\n\n color.rgb *= 1.0 + (brightness - 1.0) * p * fade;\n\n gl_FragColor = color;\n}\n",Xe=function(e){function t(t,n,r){void 0===t&&(t=[0,0]),void 0===n&&(n={}),void 0===r&&(r=0),e.call(this,Le,Ie),this.center=t,Array.isArray(n)&&(console.warn("Deprecated Warning: ShockwaveFilter params Array has been changed to options Object."),n={}),n=Object.assign({amplitude:30,wavelength:160,brightness:1,speed:500,radius:-1},n),this.amplitude=n.amplitude,this.wavelength=n.wavelength,this.brightness=n.brightness,this.speed=n.speed,this.radius=n.radius,this.time=r}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={center:{configurable:!0},amplitude:{configurable:!0},wavelength:{configurable:!0},brightness:{configurable:!0},speed:{configurable:!0},radius:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.time=this.time,e.applyFilter(this,t,n,r)},n.center.get=function(){return this.uniforms.center},n.center.set=function(e){this.uniforms.center=e},n.amplitude.get=function(){return this.uniforms.amplitude},n.amplitude.set=function(e){this.uniforms.amplitude=e},n.wavelength.get=function(){return this.uniforms.wavelength},n.wavelength.set=function(e){this.uniforms.wavelength=e},n.brightness.get=function(){return this.uniforms.brightness},n.brightness.set=function(e){this.uniforms.brightness=e},n.speed.get=function(){return this.uniforms.speed},n.speed.set=function(e){this.uniforms.speed=e},n.radius.get=function(){return this.uniforms.radius},n.radius.set=function(e){this.uniforms.radius=e},Object.defineProperties(t.prototype,n),t}(t.Filter),Be=a,Ne="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform sampler2D uLightmap;\nuniform vec4 filterArea;\nuniform vec2 dimensions;\nuniform vec4 ambientColor;\nvoid main() {\n vec4 diffuseColor = texture2D(uSampler, vTextureCoord);\n vec2 lightCoord = (vTextureCoord * filterArea.xy) / dimensions;\n vec4 light = texture2D(uLightmap, lightCoord);\n vec3 ambient = ambientColor.rgb * ambientColor.a;\n vec3 intensity = ambient + light.rgb;\n vec3 finalColor = diffuseColor.rgb * intensity;\n gl_FragColor = vec4(finalColor, diffuseColor.a);\n}\n",Ge=function(e){function t(t,n,r){void 0===n&&(n=0),void 0===r&&(r=1),e.call(this,Be,Ne),this.uniforms.dimensions=new Float32Array(2),this.uniforms.ambientColor=new Float32Array([0,0,0,r]),this.texture=t,this.color=n}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={texture:{configurable:!0},color:{configurable:!0},alpha:{configurable:!0}};return t.prototype.apply=function(e,t,n,r){this.uniforms.dimensions[0]=t.filterFrame.width,this.uniforms.dimensions[1]=t.filterFrame.height,e.applyFilter(this,t,n,r)},n.texture.get=function(){return this.uniforms.uLightmap},n.texture.set=function(e){this.uniforms.uLightmap=e},n.color.set=function(e){var t=this.uniforms.ambientColor;"number"==typeof e?(o.hex2rgb(e,t),this._color=e):(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],this._color=o.rgb2hex(t))},n.color.get=function(){return this._color},n.alpha.get=function(){return this.uniforms.ambientColor[3]},n.alpha.set=function(e){this.uniforms.ambientColor[3]=e},Object.defineProperties(t.prototype,n),t}(t.Filter),qe=a,Ke="varying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n color /= total;\n color.rgb /= color.a + 0.00001;\n\n gl_FragColor = color;\n}\n",We=function(e){function t(t,r,o,i){void 0===t&&(t=100),void 0===r&&(r=600),void 0===o&&(o=null),void 0===i&&(i=null),e.call(this,qe,Ke),this.uniforms.blur=t,this.uniforms.gradientBlur=r,this.uniforms.start=o||new n.Point(0,window.innerHeight/2),this.uniforms.end=i||new n.Point(600,window.innerHeight/2),this.uniforms.delta=new n.Point(30,30),this.uniforms.texSize=new n.Point(window.innerWidth,window.innerHeight),this.updateDelta()}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={blur:{configurable:!0},gradientBlur:{configurable:!0},start:{configurable:!0},end:{configurable:!0}};return t.prototype.updateDelta=function(){this.uniforms.delta.x=0,this.uniforms.delta.y=0},r.blur.get=function(){return this.uniforms.blur},r.blur.set=function(e){this.uniforms.blur=e},r.gradientBlur.get=function(){return this.uniforms.gradientBlur},r.gradientBlur.set=function(e){this.uniforms.gradientBlur=e},r.start.get=function(){return this.uniforms.start},r.start.set=function(e){this.uniforms.start=e,this.updateDelta()},r.end.get=function(){return this.uniforms.end},r.end.set=function(e){this.uniforms.end=e,this.updateDelta()},Object.defineProperties(t.prototype,r),t}(t.Filter),Ye=function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.updateDelta=function(){var e=this.uniforms.end.x-this.uniforms.start.x,t=this.uniforms.end.y-this.uniforms.start.y,n=Math.sqrt(e*e+t*t);this.uniforms.delta.x=e/n,this.uniforms.delta.y=t/n},t}(We),Ze=function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.updateDelta=function(){var e=this.uniforms.end.x-this.uniforms.start.x,t=this.uniforms.end.y-this.uniforms.start.y,n=Math.sqrt(e*e+t*t);this.uniforms.delta.x=-t/n,this.uniforms.delta.y=e/n},t}(We),Qe=function(e){function t(t,n,r,o){void 0===t&&(t=100),void 0===n&&(n=600),void 0===r&&(r=null),void 0===o&&(o=null),e.call(this),this.tiltShiftXFilter=new Ye(t,n,r,o),this.tiltShiftYFilter=new Ze(t,n,r,o)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={blur:{configurable:!0},gradientBlur:{configurable:!0},start:{configurable:!0},end:{configurable:!0}};return t.prototype.apply=function(e,t,n){var r=e.getFilterTexture();this.tiltShiftXFilter.apply(e,t,r,1),this.tiltShiftYFilter.apply(e,r,n),e.returnFilterTexture(r)},n.blur.get=function(){return this.tiltShiftXFilter.blur},n.blur.set=function(e){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=e},n.gradientBlur.get=function(){return this.tiltShiftXFilter.gradientBlur},n.gradientBlur.set=function(e){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=e},n.start.get=function(){return this.tiltShiftXFilter.start},n.start.set=function(e){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=e},n.end.get=function(){return this.tiltShiftXFilter.end},n.end.set=function(e){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=e},Object.defineProperties(t.prototype,n),t}(t.Filter),Ue=a,Ve="varying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\nuniform vec4 filterArea;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= filterArea.xy;\n coord += filterArea.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= filterArea.zw;\n coord /= filterArea.xy;\n\n return coord;\n}\n\nvec2 twist(vec2 coord)\n{\n coord -= offset;\n\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratioDist = (radius - dist) / radius;\n float angleMod = ratioDist * ratioDist * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n coord += offset;\n\n return coord;\n}\n\nvoid main(void)\n{\n\n vec2 coord = mapCoord(vTextureCoord);\n\n coord = twist(coord);\n\n coord = unmapCoord(coord);\n\n gl_FragColor = texture2D(uSampler, coord );\n\n}\n",He=function(e){function t(t){e.call(this,Ue,Ve),"number"==typeof t&&(t={radius:t},void 0!==arguments[1]&&(t.angle=arguments[1]),void 0!==arguments[2]&&(t.padding=arguments[2])),Object.assign(this,{radius:200,angle:4,padding:20,offset:new n.Point},t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={offset:{configurable:!0},radius:{configurable:!0},angle:{configurable:!0}};return r.offset.get=function(){return this.uniforms.offset},r.offset.set=function(e){this.uniforms.offset=e},r.radius.get=function(){return this.uniforms.radius},r.radius.set=function(e){this.uniforms.radius=e},r.angle.get=function(){return this.uniforms.angle},r.angle.set=function(e){this.uniforms.angle=e},Object.defineProperties(t.prototype,r),t}(t.Filter),$e=a,Je="varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform vec2 uCenter;\nuniform float uStrength;\nuniform float uInnerRadius;\nuniform float uRadius;\n\nconst float MAX_KERNEL_SIZE = ${maxKernelSize};\n\n// author: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand(vec2 co, float seed) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot(co + seed, vec2(a, b)), sn = mod(dt, 3.14159);\n return fract(sin(sn) * c + seed);\n}\n\nvoid main() {\n\n float minGradient = uInnerRadius * 0.3;\n float innerRadius = (uInnerRadius + minGradient * 0.5) / filterArea.x;\n\n float gradient = uRadius * 0.3;\n float radius = (uRadius - gradient * 0.5) / filterArea.x;\n\n float countLimit = MAX_KERNEL_SIZE;\n\n vec2 dir = vec2(uCenter.xy / filterArea.xy - vTextureCoord);\n float dist = length(vec2(dir.x, dir.y * filterArea.y / filterArea.x));\n\n float strength = uStrength;\n\n float delta = 0.0;\n float gap;\n if (dist < innerRadius) {\n delta = innerRadius - dist;\n gap = minGradient;\n } else if (radius >= 0.0 && dist > radius) { // radius < 0 means it's infinity\n delta = dist - radius;\n gap = gradient;\n }\n\n if (delta > 0.0) {\n float normalCount = gap / filterArea.x;\n delta = (normalCount - delta) / normalCount;\n countLimit *= delta;\n strength *= delta;\n if (countLimit < 1.0)\n {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n }\n\n // randomize the lookup values to hide the fixed number of samples\n float offset = rand(vTextureCoord, 0.0);\n\n float total = 0.0;\n vec4 color = vec4(0.0);\n\n dir *= strength;\n\n for (float t = 0.0; t < MAX_KERNEL_SIZE; t++) {\n float percent = (t + offset) / MAX_KERNEL_SIZE;\n float weight = 4.0 * (percent - percent * percent);\n vec2 p = vTextureCoord + dir * percent;\n vec4 sample = texture2D(uSampler, p);\n\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n\n color += sample * weight;\n total += weight;\n\n if (t > countLimit){\n break;\n }\n }\n\n color /= total;\n // switch back from pre-multiplied alpha\n // color.rgb /= color.a + 0.00001;\n\n gl_FragColor = color;\n}\n",et=function(e){function t(t){if("object"!=typeof t){var n=arguments[0],r=arguments[1],o=arguments[2],i=arguments[3];t={},void 0!==n&&(t.strength=n),void 0!==r&&(t.center=r),void 0!==o&&(t.innerRadius=o),void 0!==i&&(t.radius=i)}t=Object.assign({strength:.1,center:[0,0],innerRadius:0,radius:-1,maxKernelSize:32},t),e.call(this,$e,Je.replace("${maxKernelSize}",t.maxKernelSize.toFixed(1))),this.strength=t.strength,this.center=t.center,this.innerRadius=t.innerRadius,this.radius=t.radius}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={center:{configurable:!0},strength:{configurable:!0},innerRadius:{configurable:!0},radius:{configurable:!0}};return n.center.get=function(){return this.uniforms.uCenter},n.center.set=function(e){this.uniforms.uCenter=e},n.strength.get=function(){return this.uniforms.uStrength},n.strength.set=function(e){this.uniforms.uStrength=e},n.innerRadius.get=function(){return this.uniforms.uInnerRadius},n.innerRadius.set=function(e){this.uniforms.uInnerRadius=e},n.radius.get=function(){return this.uniforms.uRadius},n.radius.set=function(e){(e<0||e===1/0)&&(e=-1),this.uniforms.uRadius=e},Object.defineProperties(t.prototype,n),t}(t.Filter);return e.AdjustmentFilter=c,e.AdvancedBloomFilter=y,e.AsciiFilter=C,e.BevelFilter=z,e.BloomFilter=A,e.BulgePinchFilter=O,e.CRTFilter=Z,e.ColorMapFilter=M,e.ColorOverlayFilter=j,e.ColorReplaceFilter=I,e.ConvolutionFilter=N,e.CrossHatchFilter=K,e.DotFilter=V,e.DropShadowFilter=J,e.EmbossFilter=ne,e.GlitchFilter=ie,e.GlowFilter=ae,e.GodrayFilter=he,e.KawaseBlurFilter=d,e.MotionBlurFilter=me,e.MultiColorReplaceFilter=xe,e.OldFilmFilter=be,e.OutlineFilter=Fe,e.PixelateFilter=Te,e.RGBSplitFilter=Ee,e.RadialBlurFilter=De,e.ReflectionFilter=Re,e.ShockwaveFilter=Xe,e.SimpleLightmapFilter=Ge,e.TiltShiftAxisFilter=We,e.TiltShiftFilter=Qe,e.TiltShiftXFilter=Ye,e.TiltShiftYFilter=Ze,e.TwistFilter=He,e.ZoomBlurFilter=et,e}({},PIXI,PIXI,PIXI,PIXI.utils,PIXI,PIXI.filters,PIXI.filters);Object.assign(PIXI.filters,__filters); -//# sourceMappingURL=pixi-filters.js.map diff --git a/app/data/ct.libs/fittoscreen/README.md b/app/data/ct.libs/fittoscreen/README.md index 833b535c5..093e6a7eb 100644 --- a/app/data/ct.libs/fittoscreen/README.md +++ b/app/data/ct.libs/fittoscreen/README.md @@ -6,21 +6,13 @@ It also gives you functions to enter a real fullscreen mode programmatically (se ## `ct.fittoscreen();` -Resizes the canvas immediately. +Resizes the canvas immediately. You usually don't need to call this method as it gets called automatically. ## `ct.fittoscreen.toggleFullscreen();` -Tries to toggle the fullscreen mode. Errors, if any, will be logged to console. Also, this won't work in the internal ct.js debugger. Instead, test it in your browser. +**This method works only in pointer events, like Click, Pointer down and other.** -This should be called on mouse / keyboard press event, not the "release" event, or the actual transition will happen on the next mouse/keyboard interaction. For example, this will work: - -```js -if (ct.mouse.pressed) { - if (ct.u.prect(ct.mouse.x, ct.mouse.y, this)) { - ct.fittoscreen.toggleFullscreen(); - } -} -``` +Tries to toggle the fullscreen mode. The success of it depends on player's browser settings or the environment your project runs in. Errors, if any, will be logged to console. ## `ct.fittoscreen.getIsFullscreen();` @@ -28,4 +20,4 @@ Returns whether the game is in the fullscreen mode (`true`) or not (`false`). ## `ct.fittoscreen.mode` -A string that indicates the current scaling approach. Can be changed at runtime to `'fastScale'`, `'expand'`, `'expandViewport'`, `'scaleFit'`, or `'scaleFill'`. \ No newline at end of file +A string that indicates the current scaling approach. Can be changed at runtime to `'fastScale'`, `'expand'`, `'expandViewport'`, `'scaleFit'`, or `'scaleFill'`. diff --git a/app/data/ct.libs/fittoscreen/index.js b/app/data/ct.libs/fittoscreen/index.js index feb3aac7b..081c1af16 100644 --- a/app/data/ct.libs/fittoscreen/index.js +++ b/app/data/ct.libs/fittoscreen/index.js @@ -101,20 +101,9 @@ exit.call(document); } }; - var queuedFullscreen = function queuedFullscreen() { - toggleFullscreen(); - document.removeEventListener('mouseup', queuedFullscreen); - document.removeEventListener('keyup', queuedFullscreen); - document.removeEventListener('click', queuedFullscreen); - }; - var queueFullscreen = function queueFullscreen() { - document.addEventListener('mouseup', queuedFullscreen); - document.addEventListener('keyup', queuedFullscreen); - document.addEventListener('click', queuedFullscreen); - }; window.addEventListener('resize', resize); ct.fittoscreen = resize; - ct.fittoscreen.toggleFullscreen = queueFullscreen; + ct.fittoscreen.toggleFullscreen = toggleFullscreen; var $mode = '/*%mode%*/'; Object.defineProperty(ct.fittoscreen, 'mode', { configurable: false, diff --git a/app/data/ct.libs/inherit/index.js b/app/data/ct.libs/inherit/index.js index 383ac927f..feedecf9b 100644 --- a/app/data/ct.libs/inherit/index.js +++ b/app/data/ct.libs/inherit/index.js @@ -14,7 +14,8 @@ ct.inherit = { if (!(assertedTemplate in ct.templates.templates)) { throw new Error(`[ct.inherit] The template ${assertedTemplate} does not exist. A typo?`); } - // Well, technically a template is not a child of itself, but I suppose you expect to get `true` + // Well, technically a template is not a child of itself, + // but I suppose you expect to get `true` // while checking whether a copy belongs to a particular class. if (template === assertedTemplate) { return true; @@ -40,7 +41,7 @@ ct.inherit = { // Get a list of all child templates to concat their ct.templates.lists in one go const templates = []; for (const i in ct.templates.list) { - if (i !== 'BACKGROUND' && i !== 'TILELAYER' && ct.inherit.isParent(template, i)) { + if (i !== 'BACKGROUND' && i !== 'TILEMAP' && ct.inherit.isParent(template, i)) { templates.push(i); } } diff --git a/app/data/ct.libs/inherit/module.json b/app/data/ct.libs/inherit/module.json index 1efe27f8f..d15c45675 100644 --- a/app/data/ct.libs/inherit/module.json +++ b/app/data/ct.libs/inherit/module.json @@ -2,7 +2,7 @@ "main": { "name": "Template inheritance", "tagline": "Avoid repeating code by adding parent-child relationships between your templates.", - "version": "1.0.0", + "version": "2.0.0", "authors": [{ "name": "Cosmo Myzrail Gorynych", "mail": "admin@nersta.ru" @@ -14,6 +14,6 @@ "templateExtends": [{ "name": "Parent", "type": "template", - "key": "inheritedType@@template" + "key": "inheritedTemplate@@template" }] } diff --git a/app/data/ct.libs/light/index.js b/app/data/ct.libs/light/index.js index c35ec2187..60677590f 100644 --- a/app/data/ct.libs/light/index.js +++ b/app/data/ct.libs/light/index.js @@ -62,7 +62,7 @@ }, updateOne(light) { if (light.owner) { - if (!ct.templates.exists(light.owner)) { + if (!ct.templates.valid(light.owner)) { ct.light.remove(light); return; } diff --git a/app/data/ct.libs/matter/docs/Creating constraints.md b/app/data/ct.libs/matter/docs/Creating constraints.md index d572113ea..6d9ab39ee 100644 --- a/app/data/ct.libs/matter/docs/Creating constraints.md +++ b/app/data/ct.libs/matter/docs/Creating constraints.md @@ -2,6 +2,8 @@ This module has a couple of methods that simplify the creation of constraints between two copies, or a copy and a position in space. These constraints create a spring, or a rope, that limits a copy's movement. +> Note that you have several options in the template editor that allow making simple joints without using code! + ## `ct.matter.pin(copy)` Pins a copy in place, making it spin around its center of mass but preventing any other movement. @@ -16,4 +18,4 @@ Puts a copy on a rope. It is similar to `ct.matter.tie`, but the length of a rop ## `ct.matter.tieTogether(copy1, copy2, stiffness, damping)` -Ties two copies together with a rope. \ No newline at end of file +Ties two copies together with a rope. diff --git a/app/data/ct.libs/matter/docs/Listening to collision events.md b/app/data/ct.libs/matter/docs/Listening to collision events.md index 332edac24..70ea2d08a 100644 --- a/app/data/ct.libs/matter/docs/Listening to collision events.md +++ b/app/data/ct.libs/matter/docs/Listening to collision events.md @@ -1,5 +1,7 @@ # Listening to collision events +> This is a topic of an advanced usage! You will most likely use regular events in the template editor. + You can listen to collision events with `ct.matter.on(eventName, callback)`. The callback is passed an object that has `pairs` property, which has all the collisions that happened in one frame. Long story short, see this example: ```js @@ -29,7 +31,7 @@ ct.matter.on('collisionStart', e => { }); ``` -> **Warning**: DO NOT write `ct.matter.on` inside copies' code. This will apply large amounts of listeners that do the same thing, which will degrade performance and break your gameplay logic. Instead, write `ct.matter.on` once in room's On Create code. +> **Warning**: DO NOT write `ct.matter.on` inside Frame start / Frame end events. This will apply large amounts of listeners that do the same thing, which will degrade performance and break your gameplay logic. Instead, write `ct.matter.on` once in Room Start code. There are three collision events you can listen to: diff --git a/app/data/ct.libs/matter/docs/Manipulating copies.md b/app/data/ct.libs/matter/docs/Manipulating copies.md index 9e00a74b9..22eaedff5 100644 --- a/app/data/ct.libs/matter/docs/Manipulating copies.md +++ b/app/data/ct.libs/matter/docs/Manipulating copies.md @@ -17,6 +17,8 @@ Moves a copy to a new position without changing its velocity. Applies a force onto a copy. The resulting velocity depends on object's mass and friction. You can optionally define a point from which the force is applied to make the copy spin. +> **Note:** This method does not work during collision events. + | Argument | Type | Description | | ------------------ | -------- | ------------------------------------------------------- | | `copy` | `Copy` | The copy that should be pushed. | diff --git a/app/data/ct.libs/matter/docs/Read this or you will create a black hole.md b/app/data/ct.libs/matter/docs/Read this or you will create a black hole.md index cc70ce4cb..0cbbd95d1 100644 --- a/app/data/ct.libs/matter/docs/Read this or you will create a black hole.md +++ b/app/data/ct.libs/matter/docs/Read this or you will create a black hole.md @@ -27,6 +27,8 @@ This affects how a copy rotates when in contact with other copies. The axis must ## Collision logic is defined differently -Instead of testing for collisions from behalf of a particular copy like it happens in `ct.place`, you will define a rulebook that will listen to all the collisions in a room, and you will filter out these collisions according to your gameplay logic. Due to that, **never** listen to these events in copies, as each your copy will have to loop over all the collision events, hindering performance badly. Instead, set up a listener once in your room's OnCreate code. +Use special events in templates' editor under the Physics category. + +If it for some reason doesn't fit you, define a rulebook that will listen to all the collisions in a room, and you will filter out these collisions according to your gameplay logic. **Never** listen to these events in events like Frame Start / Frame End, as each your copy will have to loop over all the collision events, hindering performance badly. Instead, set up a listener once in your Room Start event. See "Listening to collision events" for more information. diff --git a/app/data/ct.libs/matter/events/matterActiveAny_rootRoomOnCreate.js b/app/data/ct.libs/matter/events/matterActiveAny_rootRoomOnCreate.js new file mode 100644 index 000000000..625534cfe --- /dev/null +++ b/app/data/ct.libs/matter/events/matterActiveAny_rootRoomOnCreate.js @@ -0,0 +1,11 @@ +{ + const [templateName] = [/*%%ENTITY_NAME%%*/]; + ct.matter.rulebookActive.push({ + mainTemplate: templateName, + any: true, + // eslint-disable-next-line no-unused-vars + func: function (other) { + /*%%USER_CODE%%*/ + } + }); +} diff --git a/app/data/ct.libs/matter/events/matterActiveTemplate_rootRoomOnCreate.js b/app/data/ct.libs/matter/events/matterActiveTemplate_rootRoomOnCreate.js new file mode 100644 index 000000000..aad3c6869 --- /dev/null +++ b/app/data/ct.libs/matter/events/matterActiveTemplate_rootRoomOnCreate.js @@ -0,0 +1,11 @@ +{ + const [templateName] = [/*%%ENTITY_NAME%%*/]; + ct.matter.rulebookActive.push({ + mainTemplate: templateName, + otherTemplate: [/*%%template%%*/][0], + // eslint-disable-next-line no-unused-vars + func: function (other) { + /*%%USER_CODE%%*/ + } + }); +} diff --git a/app/data/ct.libs/matter/events/matterImpactAny_rootRoomOnCreate.js b/app/data/ct.libs/matter/events/matterImpactAny_rootRoomOnCreate.js new file mode 100644 index 000000000..14f610e18 --- /dev/null +++ b/app/data/ct.libs/matter/events/matterImpactAny_rootRoomOnCreate.js @@ -0,0 +1,11 @@ +{ + const [templateName] = [/*%%ENTITY_NAME%%*/]; + ct.matter.rulebookStart.push({ + mainTemplate: templateName, + any: true, + // eslint-disable-next-line no-unused-vars + func: function (other, impact) { + /*%%USER_CODE%%*/ + } + }); +} diff --git a/app/data/ct.libs/matter/events/matterImpactTemplate_rootRoomOnCreate.js b/app/data/ct.libs/matter/events/matterImpactTemplate_rootRoomOnCreate.js new file mode 100644 index 000000000..38867115a --- /dev/null +++ b/app/data/ct.libs/matter/events/matterImpactTemplate_rootRoomOnCreate.js @@ -0,0 +1,11 @@ +{ + const [templateName] = [/*%%ENTITY_NAME%%*/]; + ct.matter.rulebookStart.push({ + mainTemplate: templateName, + otherTemplate: [/*%%template%%*/][0], + // eslint-disable-next-line no-unused-vars + func: function (other, impact) { + /*%%USER_CODE%%*/ + } + }); +} diff --git a/app/data/ct.libs/matter/events/matterLeaveAny_rootRoomOnCreate.js b/app/data/ct.libs/matter/events/matterLeaveAny_rootRoomOnCreate.js new file mode 100644 index 000000000..84346ae8a --- /dev/null +++ b/app/data/ct.libs/matter/events/matterLeaveAny_rootRoomOnCreate.js @@ -0,0 +1,11 @@ +{ + const [templateName] = [/*%%ENTITY_NAME%%*/]; + ct.matter.rulebookEnd.push({ + mainTemplate: templateName, + any: true, + // eslint-disable-next-line no-unused-vars + func: function (other) { + /*%%USER_CODE%%*/ + } + }); +} diff --git a/app/data/ct.libs/matter/events/matterLeaveTemplate_rootRoomOnCreate.js b/app/data/ct.libs/matter/events/matterLeaveTemplate_rootRoomOnCreate.js new file mode 100644 index 000000000..8d4cec31d --- /dev/null +++ b/app/data/ct.libs/matter/events/matterLeaveTemplate_rootRoomOnCreate.js @@ -0,0 +1,11 @@ +{ + const [templateName] = [/*%%ENTITY_NAME%%*/]; + ct.matter.rulebookEnd.push({ + mainTemplate: templateName, + otherTemplate: [/*%%template%%*/][0], + // eslint-disable-next-line no-unused-vars + func: function (other) { + /*%%USER_CODE%%*/ + } + }); +} diff --git a/app/data/ct.libs/matter/index.js b/app/data/ct.libs/matter/index.js index e4e99a50b..0af716da2 100644 --- a/app/data/ct.libs/matter/index.js +++ b/app/data/ct.libs/matter/index.js @@ -16,7 +16,7 @@ ct.matter = { }, push(copy, forceX, forceY, fromX, fromY) { if (fromX === void 0) { - Matter.Body.applyForce(copy.matterBody, copy.position, { + Matter.Body.applyForce(copy.matterBody, copy.matterBody.position, { x: forceX, y: forceY }); @@ -159,8 +159,50 @@ ct.matter = { ); } }, + createStaticTilemap(tilemap) { + const options = { + isStatic: true, + isSensor: false, + restitution: tilemap.matterRestitution || 0.1, + friction: tilemap.matterFriction === void 0 ? 1 : tilemap.matterFriction + }; + for (const tile of tilemap.tiles) { + ct.matter.createStaticTile(tile, options); + } + }, + createStaticTile(tile, options) { + const {shape} = tile.sprite; + if (shape.type === 'rect') { + tile.matterBody = Matter.Bodies.rectangle( + tile.x - shape.left, + tile.y - shape.top, + shape.left + shape.right, + shape.top + shape.bottom, + options + ); + } else if (shape.type === 'circle') { + tile.matterBody = Matter.Bodies.circle( + tile.x, + tile.y, + shape.r, + options + ); + } else if (shape.type === 'strip') { + const vertices = Matter.Vertices.create(shape.points); + tile.matterBody = Matter.Bodies.fromVertices(tile.x, tile.y, vertices, options); + } + Matter.Body.setCentre(tile.matterBody, { + x: (tile.sprite.texture.defaultAnchor.x - 0.5) * tile.sprite.texture.width, + y: (tile.sprite.texture.defaultAnchor.y - 0.5) * tile.sprite.texture.height + }, true); + Matter.Body.setPosition(tile.matterBody, tile.sprite.position); + Matter.World.add(ct.room.matterWorld, tile.matterBody); + }, getImpact(pair) { const {bodyA, bodyB} = pair; + if (bodyA.isSensor || bodyB.isSensor) { + return 0; + } // Because static objects are Infinity-ly heavy, and Infinity * 0 returns NaN, // We should compute mass for static objects manually. const massA = bodyA.mass === Infinity ? 0 : bodyA.mass, @@ -173,5 +215,32 @@ ct.matter = { bodyB.velocity.y * massB ); return impact; - } + }, + walkOverWithRulebook(rulebook, pairs) { + if (!pairs.length || !rulebook.length) { + return; + } + for (const pair of pairs) { + const impact = ct.matter.getImpact(pair); + const bodies = [pair.bodyA, pair.bodyB]; + for (const body of bodies) { + if (!body.copy) { + continue; + } + for (const rule of rulebook) { + if (body.copy.template === rule.mainTemplate) { + const otherBody = pair.bodyA === body ? pair.bodyB : pair.bodyA; + // eslint-disable-next-line max-depth + if (rule.any || + (otherBody.copy && rule.otherTemplate === otherBody.copy.template)) { + rule.func.apply(body.copy, [otherBody.copy || otherBody.tile, impact]); + } + } + } + } + } + }, + rulebookStart: [], + rulebookActive: [], + rulebookEnd: [] }; diff --git a/app/data/ct.libs/matter/injections/afterdraw.js b/app/data/ct.libs/matter/injections/afterdraw.js index 4748cf3e3..5c6fd866e 100644 --- a/app/data/ct.libs/matter/injections/afterdraw.js +++ b/app/data/ct.libs/matter/injections/afterdraw.js @@ -2,8 +2,8 @@ if (this.matterEnable) { this.rotation = this.matterBody.angle; this.x = this.matterBody.position.x; this.y = this.matterBody.position.y; - this.speed = this.matterBody.speed; + //this.speed = this.matterBody.speed; this.hspeed = this.matterBody.velocity.x; this.vspeed = this.matterBody.velocity.y; - this.direction = ct.u.pdn(this.hspeed, this.vspeed); + //this.direction = ct.u.pdn(this.hspeed, this.vspeed); } diff --git a/app/data/ct.libs/matter/injections/beforeroomdraw.js b/app/data/ct.libs/matter/injections/beforeroomdraw.js index ab489bd0a..29265212b 100644 --- a/app/data/ct.libs/matter/injections/beforeroomdraw.js +++ b/app/data/ct.libs/matter/injections/beforeroomdraw.js @@ -1,5 +1,7 @@ -if ([/*%matterUseStaticDeltaTime%*/][0] === false) { - Matter.Engine.update(ct.room.matterEngine, 1000 / ct.speed * ct.delta); -} else { - Matter.Engine.update(ct.room.matterEngine, 1000 / ct.speed); +if (this === ct.room) { + if ([/*%matterUseStaticDeltaTime%*/][0] === false) { + Matter.Engine.update(ct.room.matterEngine, 1000 / ct.speed * ct.delta); + } else { + Matter.Engine.update(ct.room.matterEngine, 1000 / ct.speed); + } } diff --git a/app/data/ct.libs/matter/injections/beforeroomoncreate.js b/app/data/ct.libs/matter/injections/beforeroomoncreate.js index 2905bb83b..4da889740 100644 --- a/app/data/ct.libs/matter/injections/beforeroomoncreate.js +++ b/app/data/ct.libs/matter/injections/beforeroomoncreate.js @@ -1,4 +1,9 @@ -ct.room.matterEngine = Matter.Engine.create(); -ct.room.matterWorld = ct.room.matterEngine.world; -ct.room.matterGravity = ct.room.matterGravity || [0, 9.8]; -[ct.room.matterWorld.gravity.x, ct.room.matterWorld.gravity.y] = ct.room.matterGravity; +if (this === ct.room) { + ct.room.matterEngine = Matter.Engine.create(); + ct.room.matterWorld = ct.room.matterEngine.world; + ct.room.matterGravity = ct.room.matterGravity || [0, 9.8]; + [ct.room.matterWorld.gravity.x, ct.room.matterWorld.gravity.y] = ct.room.matterGravity; + ct.matter.rulebookStart = []; + ct.matter.rulebookActive = []; + ct.matter.rulebookEnd = []; +} diff --git a/app/data/ct.libs/matter/injections/roomoncreate.js b/app/data/ct.libs/matter/injections/roomoncreate.js new file mode 100644 index 000000000..1a328d43f --- /dev/null +++ b/app/data/ct.libs/matter/injections/roomoncreate.js @@ -0,0 +1,24 @@ +if (this === ct.room) { + ct.matter.on('collisionStart', e => { + const {pairs} = e; + ct.matter.walkOverWithRulebook(ct.matter.rulebookStart, pairs); + }); + ct.matter.on('collisionActive', e => { + const {pairs} = e; + ct.matter.walkOverWithRulebook(ct.matter.rulebookActive, pairs); + }); + ct.matter.on('collisionEnd', e => { + const {pairs} = e; + ct.matter.walkOverWithRulebook(ct.matter.rulebookEnd, pairs); + }); +} + +for (const layer of this.tileLayers) { + if (!layer.matterMakeStatic) { + continue; + } + if (this.children.indexOf(layer) === -1) { + continue; + } + ct.matter.createStaticTilemap(layer); +} diff --git a/app/data/ct.libs/matter/module.json b/app/data/ct.libs/matter/module.json index 0ea79029f..971383412 100644 --- a/app/data/ct.libs/matter/module.json +++ b/app/data/ct.libs/matter/module.json @@ -4,7 +4,7 @@ "name_Ru": "Matter.js — библиотека физики", "tagline": "Add realtime 2D physics engine to your project.", "tagline_Ru": "Добавляет движок 2D физики в твой проект.", - "version": "1.0.0", + "version": "1.1.0", "authors": [{ "name": "Cosmo Myzrail Gorynych", "mail": "admin@nersta.ru" @@ -41,12 +41,14 @@ "name_Ru": "Сделать неподвижной", "type": "checkbox", "key": "matterStatic", - "default": false + "default": false, + "if": "matterEnable" }, { "name": "Is a sensor", "name_Ru": "Сделать сенсором", "type": "checkbox", "key": "matterSensor", + "if": "matterEnable", "default": false, "help": "When turned on, the copy won't prevent others' movement but will be able to trigger collisions", "help_Ru": "Копия не будет препятствовать передвижению других копий, но будет вызывать события столкновения" @@ -57,7 +59,8 @@ "key": "matterDensity", "help": "How each pixel of this object contributes to its mass. The larger and more dense an object, the more heavy it is.", "help_Ru": "Показывает, как каждый пиксель копии влияет на её массу. Чем выше, тем тяжелее получается копия.", - "default": 0.001 + "default": 0.001, + "if": "matterEnable" }, { "name": "Bounciness", "name_Ru": "Упругость", @@ -66,25 +69,29 @@ "default": 0.1, "min": 0, "max": 1, - "step": 0.1 + "step": 0.1, + "if": "matterEnable" }, { "name": "Friction", "name_Ru": "Трение", "type": "number", "key": "matterFriction", - "default": 1 + "default": 1, + "if": "matterEnable" }, { "name": "Static friction", "name_Ru": "Статичное трение", "type": "number", "key": "matterFrictionStatic", - "default": 0.1 + "default": 0.1, + "if": "matterEnable" }, { "name": "Air friction", "name_Ru": "Трение воздуха", "type": "number", "key": "matterFrictionAir", - "default": 0.01 + "default": 0.01, + "if": "matterEnable" }, { "name": "Fix pivot", "name_Ru": "Исправить ось вращения", @@ -93,7 +100,8 @@ "help": "Shifts the texture. Helps with polygonal shapes where the module cannot align center of mass and texture automatically.", "help_Ru": "Смещает текстуру. Помогает с многоугольниками, которым не получается расчитать центр масс автоматически.", "step": 1, - "default": [0, 0] + "default": [0, 0], + "if": "matterEnable" }] }, { "type": "group", @@ -151,5 +159,182 @@ "key": "matterGravity", "step": 0.1, "default": [0, 9.8] - }] + }], + "tileLayerExtends": [{ + "name": "Convert to static bodies", + "name_Ru": "Сконвертировать в статичные тела", + "type": "checkbox", + "key": "matterMakeStatic" + }, { + "name": "Bounciness", + "name_Ru": "Упругость", + "type": "number", + "key": "matterRestitution", + "default": 0.1, + "min": 0, + "max": 1, + "step": 0.1, + "if": "matterMakeStatic" + }, { + "name": "Friction", + "name_Ru": "Трение", + "type": "number", + "key": "matterFriction", + "default": 1, + "if": "matterMakeStatic" + }], + "eventCategories": { + "physics": { + "name": "Physics", + "name_Ru": "Физика", + "icon": "physics" + } + }, + "events": { + "matterImpactTemplate": { + "name": "Contact with a template", + "name_Ru": "Контакт с шаблоном", + "hint": "Fires when two bodies come into contact.", + "hint_Ru": "Срабатывает, когда два тела входят в контакт.", + "parameterizedName": "Contacts %%template%% template", + "parameterizedName_Ru": "Контакт с шаблоном %%template%%", + "icon": "physics", + "useAssetThumbnail": true, + "applicable": ["template"], + "category": "physics", + "arguments": { + "template": { + "name": "Template", + "name_Ru": "Шаблон", + "type": "template" + } + }, + "repeatable": true, + "codeTargets": ["rootRoomOnCreate"], + "locals": { + "other": { + "type": "Copy", + "description": "What contacts with your copy", + "description_Ru": "То, что коснулось копии" + }, + "impact": { + "type": "number", + "description": "Approximate transferred impact", + "description_Ru": "Примерный импульс" + } + } + }, + "matterImpactAny": { + "name": "Contact with anything", + "name_Ru": "Контакт с чем-либо", + "hint": "Fires when two bodies come into contact.", + "hint_Ru": "Срабатывает, когда два тела входят в контакт.", + "icon": "physics", + "applicable": ["template"], + "category": "physics", + "codeTargets": ["rootRoomOnCreate"], + "locals": { + "other": { + "type": "Copy | PIXI.Sprite", + "description": "What touches with your copy. Can be a tile (PIXI.Sprite)", + "description_Ru": "То, что коснулось копии. Может быть плиткой тайлсета (PIXI.Sprite)" + }, + "impact": { + "type": "number", + "description": "Approximate transferred impact", + "description_Ru": "Примерный импульс" + } + } + }, + "matterActiveTemplate": { + "name": "Collision with a template", + "name_Ru": "Столкновение с шаблоном", + "hint": "Fires every frame during a collision. Useful for sensors.", + "hint_Ru": "Срабатывает каждый кадр во время столкновения. Полезно для сенсоров.", + "parameterizedName": "Collides %%template%% template", + "parameterizedName_Ru": "Столкновение с шаблоном %%template%%", + "icon": "physics", + "useAssetThumbnail": true, + "applicable": ["template"], + "category": "physics", + "arguments": { + "template": { + "name": "Template", + "name_Ru": "Шаблон", + "type": "template" + } + }, + "repeatable": true, + "codeTargets": ["rootRoomOnCreate"], + "locals": { + "other": { + "type": "Copy", + "description": "What collides with your copy", + "description_Ru": "То, что касается копии" + } + } + }, + "matterActiveAny": { + "name": "Collision with anything", + "name_Ru": "Столкновение с чем-либо", + "hint": "Fires every frame during a collision. Useful for sensors.", + "hint_Ru": "Срабатывает каждый кадр во время столкновения. Полезно для сенсоров.", + "icon": "physics", + "applicable": ["template"], + "category": "physics", + "codeTargets": ["rootRoomOnCreate"], + "locals": { + "other": { + "type": "Copy | PIXI.Sprite", + "description": "What is touching your copy. Can be a tile (PIXI.Sprite)", + "description_Ru": "То, что касается копии. Может быть плиткой тайлсета (PIXI.Sprite)" + } + } + }, + "matterLeaveTemplate": { + "name": "Collision end with a template", + "name_Ru": "Конец столкновения с шаблоном", + "hint": "Fires when bodies stop colliding with each other, or when something leaves a sensor.", + "hint_Ru": "Срабатывает тогда, когда тела заканчивают касаться друг друга, или когда что-то покидает сенсор.", + "parameterizedName": "Collision end with %%template%% template", + "parameterizedName_Ru": "Конец столкновения с шаблоном %%template%%", + "icon": "physics", + "useAssetThumbnail": true, + "applicable": ["template"], + "category": "physics", + "arguments": { + "template": { + "name": "Template", + "name_Ru": "Шаблон", + "type": "template" + } + }, + "repeatable": true, + "codeTargets": ["rootRoomOnCreate"], + "locals": { + "other": { + "type": "Copy", + "description": "What collided with your copy", + "description_Ru": "То, что касалось копии" + } + } + }, + "matterLeaveAny": { + "name": "Collision end with anything", + "name_Ru": "Конец столкновения с чем-либо", + "hint": "Fires when bodies stop colliding with each other, or when something leaves a sensor.", + "hint_Ru": "Срабатывает тогда, когда тела заканчивают касаться друг друга, или когда что-то покидает сенсор.", + "icon": "physics", + "applicable": ["template"], + "category": "physics", + "codeTargets": ["rootRoomOnCreate"], + "locals": { + "other": { + "type": "Copy | PIXI.Sprite", + "description": "What touched your copy. Can be a tile (PIXI.Sprite)", + "description_Ru": "То, что касалось копии. Может быть плиткой тайлсета (PIXI.Sprite)" + } + } + } + } } diff --git a/app/data/ct.libs/nakama/src/index.js b/app/data/ct.libs/nakama/src/index.js index 9c50c60c9..4eb17042b 100644 --- a/app/data/ct.libs/nakama/src/index.js +++ b/app/data/ct.libs/nakama/src/index.js @@ -1,6 +1,6 @@ -const NakamaWrapper = require("./nakama").default -const Nakama = new NakamaWrapper("/*%clientHost%*/", "/*%clientPort%*/", [/*%useSSL%*/][0]) - -Nakama.initiate() - +const NakamaWrapper = require("./nakama").default +const Nakama = new NakamaWrapper("/*%clientHost%*/", "/*%clientPort%*/", [/*%useSSL%*/][0]) + +Nakama.initiate() + module.exports = Nakama \ No newline at end of file diff --git a/app/data/ct.libs/nakama/src/logger.js b/app/data/ct.libs/nakama/src/logger.js index bc68126b3..b9e12f3f7 100644 --- a/app/data/ct.libs/nakama/src/logger.js +++ b/app/data/ct.libs/nakama/src/logger.js @@ -1,19 +1,19 @@ -export default class { - static log(msg, emoji = '', colour = 'black') { - if ([/*%debugMode%*/][0]) { - console.log(`%s %c${msg}`, emoji, `color: ${colour}`); - } - } - - static success(msg) { - if ([/*%debugMode%*/][0]) { - console.log(`%s ${msg}`, '✔️'); - } - } - - static warn(msg) { - if ([/*%debugMode%*/][0]) { - console.log(`%s ${msg}`, '⚠️'); - } - } -} +export default class { + static log(msg, emoji = '', colour = 'black') { + if ([/*%debugMode%*/][0]) { + console.log(`%s %c${msg}`, emoji, `color: ${colour}`); + } + } + + static success(msg) { + if ([/*%debugMode%*/][0]) { + console.log(`%s ${msg}`, '✔️'); + } + } + + static warn(msg) { + if ([/*%debugMode%*/][0]) { + console.log(`%s ${msg}`, '⚠️'); + } + } +} diff --git a/app/data/ct.libs/nakama/src/nakama.js b/app/data/ct.libs/nakama/src/nakama.js index 5b281b746..a6b8bb9d7 100644 --- a/app/data/ct.libs/nakama/src/nakama.js +++ b/app/data/ct.libs/nakama/src/nakama.js @@ -1,70 +1,70 @@ -import { Client, Session } from "@heroiclabs/nakama-js"; -import { v4 as uuidv4 } from "uuid"; - -import Logger from "./logger" - -export default class Nakama { - constructor(clientHost, clientPort, useSSL) { - this.useSSL = useSSL; - this.client = new Client("defaultkey", clientHost, clientPort, this.useSSL); - - this.session; - this.socket; - - this.state = {} - } - - initiate = async () => { - await this.checkSessionAndAuthenticate() - await this.establishSocketConnection() - - Logger.log("ct.nakama has loaded!", "✨"); - } - - checkSessionAndAuthenticate = async () => { - // Checks browser for session and authenticates with server - - let nakamaAuthToken = localStorage.getItem("nakamaAuthToken"); - - if (nakamaAuthToken && nakamaAuthToken != "") { - Logger.log("Session Found"); - - let session = Session.restore(nakamaAuthToken); - let currentTimeInSec = new Date() / 1000; - - if (!session.isexpired(currentTimeInSec)) { - // Session valid so restore it - this.session = session - Logger.log("Session Restored"); - } else { - Logger.log("Session Expired"); - await this.createSession() - } - } else { - await this.createSession() - } - - Logger.success("Authenticated Session"); - }; - - establishSocketConnection = async () => { - // Create connection to the server via websockets - const trace = false; // TODO: understand what this does - this.socket = this.client.createSocket(this.useSSL, trace); - await this.socket.connect(this.session); - - Logger.success("Established Websocket Connection"); - }; - - createSession = async () => { - Logger.log("Creating New Session"); - - const newUserId = uuidv4(); - - let nakamaSession = await this.client.authenticateCustom(newUserId, true, newUserId); - localStorage.setItem("nakamaAuthToken", nakamaSession.token); - this.session = nakamaSession - - return this.session - } -} +import { Client, Session } from "@heroiclabs/nakama-js"; +import { v4 as uuidv4 } from "uuid"; + +import Logger from "./logger" + +export default class Nakama { + constructor(clientHost, clientPort, useSSL) { + this.useSSL = useSSL; + this.client = new Client("defaultkey", clientHost, clientPort, this.useSSL); + + this.session; + this.socket; + + this.state = {} + } + + initiate = async () => { + await this.checkSessionAndAuthenticate() + await this.establishSocketConnection() + + Logger.log("ct.nakama has loaded!", "✨"); + } + + checkSessionAndAuthenticate = async () => { + // Checks browser for session and authenticates with server + + let nakamaAuthToken = localStorage.getItem("nakamaAuthToken"); + + if (nakamaAuthToken && nakamaAuthToken != "") { + Logger.log("Session Found"); + + let session = Session.restore(nakamaAuthToken); + let currentTimeInSec = new Date() / 1000; + + if (!session.isexpired(currentTimeInSec)) { + // Session valid so restore it + this.session = session + Logger.log("Session Restored"); + } else { + Logger.log("Session Expired"); + await this.createSession() + } + } else { + await this.createSession() + } + + Logger.success("Authenticated Session"); + }; + + establishSocketConnection = async () => { + // Create connection to the server via websockets + const trace = false; // TODO: understand what this does + this.socket = this.client.createSocket(this.useSSL, trace); + await this.socket.connect(this.session); + + Logger.success("Established Websocket Connection"); + }; + + createSession = async () => { + Logger.log("Creating New Session"); + + const newUserId = uuidv4(); + + let nakamaSession = await this.client.authenticateCustom(newUserId, true, newUserId); + localStorage.setItem("nakamaAuthToken", nakamaSession.token); + this.session = nakamaSession + + return this.session + } +} diff --git a/app/data/ct.libs/nakama/webpack.config.js b/app/data/ct.libs/nakama/webpack.config.js index c4af2d2a9..12e83e11d 100644 --- a/app/data/ct.libs/nakama/webpack.config.js +++ b/app/data/ct.libs/nakama/webpack.config.js @@ -1,28 +1,28 @@ -const path = require('path'); - -module.exports = { - entry: './src/index.js', - output: { - filename: 'index.js', - path: path.resolve(__dirname), - libraryTarget: "var", - library: "Nakama" - }, - mode: "development", - module: { - rules: [ - { - test: /\.m?js$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - options: { - presets: [ - ['@babel/preset-env', { targets: "defaults" }] - ] - } - } - } - ] - } +const path = require('path'); + +module.exports = { + entry: './src/index.js', + output: { + filename: 'index.js', + path: path.resolve(__dirname), + libraryTarget: "var", + library: "Nakama" + }, + mode: "development", + module: { + rules: [ + { + test: /\.m?js$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [ + ['@babel/preset-env', { targets: "defaults" }] + ] + } + } + } + ] + } }; \ No newline at end of file diff --git a/app/data/ct.libs/place/events/collisionCGroup_thisOnStep.js b/app/data/ct.libs/place/events/collisionCGroup_thisOnStep.js new file mode 100644 index 000000000..c34a68ca6 --- /dev/null +++ b/app/data/ct.libs/place/events/collisionCGroup_thisOnStep.js @@ -0,0 +1,6 @@ +{ + const other = ct.place.occupied(this, /*%%group%%*/); + if (ct.templates.valid(other)) { + /*%%USER_CODE%%*/ + } +} diff --git a/app/data/ct.libs/place/events/collisionTemplate_thisOnStep.js b/app/data/ct.libs/place/events/collisionTemplate_thisOnStep.js new file mode 100644 index 000000000..e44133f1b --- /dev/null +++ b/app/data/ct.libs/place/events/collisionTemplate_thisOnStep.js @@ -0,0 +1,6 @@ +{ + const other = ct.place.meet(this, /*%%template%%*/); + if (ct.templates.valid(other)) { + /*%%USER_CODE%%*/ + } +} diff --git a/app/data/ct.libs/place/index.js b/app/data/ct.libs/place/index.js index 0c8830fed..d627888cf 100644 --- a/app/data/ct.libs/place/index.js +++ b/app/data/ct.libs/place/index.js @@ -286,6 +286,9 @@ drawDebugGraphic(absolute) { const shape = this._shape || getSSCDShape(this); const g = this.$cDebugCollision; + const inverse = this.transform.localTransform.clone().invert(); + this.$cDebugCollision.transform.setFromMatrix(inverse); + this.$cDebugCollision.position.set(0, 0); let color = 0x00ffff; if (this instanceof Copy) { color = 0x0066ff; diff --git a/app/data/ct.libs/place/injections/beforedraw.js b/app/data/ct.libs/place/injections/beforedraw.js index 4a73bb439..b50d023df 100644 --- a/app/data/ct.libs/place/injections/beforedraw.js +++ b/app/data/ct.libs/place/injections/beforedraw.js @@ -1,7 +1,9 @@ if ([/*%debugMode%*/][0] && this instanceof ct.templates.Copy) { - this.$cDebugText.scale.x = this.$cDebugCollision.scale.x = 1 / this.scale.x; - this.$cDebugText.scale.y = this.$cDebugCollision.scale.y = 1 / this.scale.y; - this.$cDebugText.angle = this.$cDebugCollision.angle = -this.angle; + const inverse = this.transform.localTransform.clone().invert(); + this.$cDebugCollision.transform.setFromMatrix(inverse); + this.$cDebugCollision.position.set(0, 0); + this.$cDebugText.transform.setFromMatrix(inverse); + this.$cDebugText.position.set(0, 0); const newtext = `Partitions: ${this.$chashes.join(', ')} CGroup: ${this.cgroup || 'unset'} diff --git a/app/data/ct.libs/place/module.json b/app/data/ct.libs/place/module.json index 3fc75a74a..a6df16621 100644 --- a/app/data/ct.libs/place/module.json +++ b/app/data/ct.libs/place/module.json @@ -67,5 +67,65 @@ "collect": true, "collectScope": "place::cgroup", "key": "cgroup" - }] + }], + "eventCategories": { + "collisions": { + "name": "Collisions", + "name_Ru": "Столкновения", + "icon": "copy" + } + }, + "events": { + "collisionTemplate": { + "name": "Collision with a template", + "name_Ru": "Столкновение с шаблоном", + "parameterizedName": "Collides %%template%% template", + "parameterizedName_Ru": "Столкновение с шаблоном %%template%%", + "icon": "copy", + "useAssetThumbnail": true, + "applicable": ["template"], + "category": "collisions", + "arguments": { + "template": { + "name": "Template", + "name_Ru": "Шаблон", + "type": "template" + } + }, + "repeatable": true, + "codeTargets": ["thisOnStep"], + "locals": { + "other": { + "type": "Copy", + "description": "What collides with your copy", + "description_Ru": "То, что столкнулось с копией" + } + } + }, + "collisionCGroup": { + "name": "Collision with a group", + "name_Ru": "Столкновение с группой", + "parameterizedName": "Collides %%group%% group", + "parameterizedName_Ru": "Столкновение с группой %%group%%", + "icon": "copy", + "applicable": ["template"], + "category": "collisions", + "arguments": { + "group": { + "name": "Group", + "name_Ru": "Группа", + "type": "string" + } + }, + "repeatable": true, + "codeTargets": ["thisOnStep"], + "locals": { + "other": { + "type": "Copy | PIXI.Sprite", + "description": "What collides with your copy. PIXI.Sprite is a ct.js tile", + "description_Ru": "То, что столкнулось с копией. PIXI.Sprite — это плитка тайлсета" + } + } + } + } } diff --git a/app/data/ct.libs/pointer/index.js b/app/data/ct.libs/pointer/index.js index a047eb600..515a1fbc7 100644 --- a/app/data/ct.libs/pointer/index.js +++ b/app/data/ct.libs/pointer/index.js @@ -91,6 +91,7 @@ }; var handleHoverStart = function (e) { + window.focus(); const pointer = copyPointer(e); ct.pointer.hover.push(pointer); if (e.isPrimary) { diff --git a/app/data/ct.libs/pointer/injections/beforeroomstep.js b/app/data/ct.libs/pointer/injections/beforeroomstep.js index 5e0923427..a6f004dd5 100644 --- a/app/data/ct.libs/pointer/injections/beforeroomstep.js +++ b/app/data/ct.libs/pointer/injections/beforeroomstep.js @@ -1 +1,6 @@ ct.pointer.updateGestures(); +{ + const positionGame = ct.u.uiToGameCoord(ct.pointer.xui, ct.pointer.yui); + ct.pointer.x = positionGame.x; + ct.pointer.y = positionGame.y; +} diff --git a/app/data/ct.libs/vgui/LICENSE b/app/data/ct.libs/vgui/LICENSE new file mode 100644 index 000000000..be8a1313e --- /dev/null +++ b/app/data/ct.libs/vgui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Firecakes + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/app/data/ct.libs/vgui/README.md b/app/data/ct.libs/vgui/README.md new file mode 100644 index 000000000..cc8df5a20 --- /dev/null +++ b/app/data/ct.libs/vgui/README.md @@ -0,0 +1,6 @@ +# vgui + +Make more than just buttons for your game! + +### 0.1.0 Release +* `ct.vgui.Textbox` added. \ No newline at end of file diff --git a/app/data/ct.libs/vgui/docs/API Reference.md b/app/data/ct.libs/vgui/docs/API Reference.md new file mode 100644 index 000000000..7e2869686 --- /dev/null +++ b/app/data/ct.libs/vgui/docs/API Reference.md @@ -0,0 +1,74 @@ +# API Reference + +This API reference is taken from the `types.d.ts` file that comes with the catmod. + +# ct.vgui + +## `ct.vgui.TextBox()` +* Creates a text box that accepts keyboard input +* @param {object} - template Pass "this" into this argument so that collision boundaries can be obtained +* @param {TextBoxProps} props - Extra configuration goes here +* @returns {TextBox} + +# TextBoxProps +## `trueText` +* text that is stored on the textbox. not necessarily what is rendered. use this for inserting default text + +## `width` +* How wide the text input should be. defaults to 256 + +## `height` +* How tall the text input should be. defaults to 48 + +## `offsetX` +* offset the location of text horizontally in pixels. defaults to 8 + +## `offsetY` +* offset the location of text vertically in pixels. defaults to 2 + +## `maxLength` +* maximum number of characters to store in the input. defaults to 32 + +## `lengthThresholdOffset` +* how much sooner should text be cutoff when input reached end of textbox in pixels. defaults to 48 + +## `font` +* a ct.styles font + +## `hideText` +* if true, replaces characters with '•'. good for password fields. defaults to false + + +# TextBox +## `useDefaultBoxGraphics()` +* for when you're too lazy to make your own textbox graphics. only invoke once + +## `useDefaultCursorGraphics()` +* for when you're too lazy to make your own textbox graphics. only invoke once + +## `reload()` +* recalculates the textbox dimensions, style, and text positioning + +## `step()` +* call this method on the step event of your template. updates focus, text and cursor + +## `isFocused` +* whether the textbox will accept input. automatically handled by the library depending where the user clicks + +## `cursorPosition` +* which character in the string to add/remove text to. automatically handle by the library + +## `container` +* top level graphics for the textbox, text and cursor + +## `textGraphics` +* textbox graphics + +## `textInput` +* text input font. this is what the user sees + +## `hiddenInput` +* hidden text font that renders only up to the cursor position. this is so that the cursor renders at the right position + +## `cursor` +* cursor graphics diff --git a/app/data/ct.libs/vgui/docs/TextBox.md b/app/data/ct.libs/vgui/docs/TextBox.md new file mode 100644 index 000000000..4675aecd8 --- /dev/null +++ b/app/data/ct.libs/vgui/docs/TextBox.md @@ -0,0 +1,116 @@ +# TextBox + +Make some text boxes! This text box will only have its text modified when the user clicks on the text box, and it will disable editing the text box when the user clicks away from it. It handles keyboard input for you, and even supports backspace and delete inputs. You can also use the arrow keys to seek the cursor left and right in the text! It also supports hidden text and text cutoff when the text goes outside the boundaries of the text box. It's smart! + +Simple example: +```js +this.textbox = new ct.vgui.TextBox(this, { + trueText: "Placeholder", + width: 350, + height: 200, +}) +``` + +Example using all "public" properties +```js +this.textbox = new ct.vgui.TextBox(this, { + trueText: "Placeholder", + width: 350, + height: 200, + offsetX: 20, + offsetY: -5, + maxLength: 32, + lengthThresholdOffset: -5, + font: ct.styles.get('Testing'), + hideText: false, +}) +``` + +### Warning + +You should make a Template specifically for drawing a single textbox. This is because the PIXI Container that renders the textbox requires a parent to attach a collision shape for managing the focus property. If you try and instantiate multiple TextBoxes in a single Template the focusing will break. Just remember: create a Template that holds a TextBox and edit properties when needed, and don't instantiate multiple TextBoxes in one Template! + +### Features + +You can choose to let the library make default graphics for you. This uses PIXI.Graphics to render some primitives. +Put this in the On Create event: + +```js +this.textbox = new ct.vgui.TextBox(this, { + trueText: "Placeholder", + width: 350, + height: 200, + font: ct.styles.get('Testing') +}) + +this.textbox.useDefaultBoxGraphics() // creates a default text box surrounding the text +this.textbox.useDefaultCursorGraphics() // creates a default cursor graphic for seeking through text +this.textbox.reload() // re-render the graphics so they show up +``` + +Or, you can use your own graphics! The TextBox class object has exposed properties you can edit to use the full power of PIXI.Graphics. + +```js +this.textbox = new ct.vgui.TextBox(this, { + trueText: "Placeholder", + width: 350, + height: 200, + font: ct.styles.get('Testing') +}) + +// change the text box +let textGraphics = this.textbox.textGraphics +textGraphics.lineStyle(5, 0xFFAAFF, 1) +textGraphics.beginFill(0xAAFFAA, 1) +textGraphics.drawRoundedRect(0, 0, 350, 200, 0) +textGraphics.endFill() + +// change the font dynamically +this.textbox.props.font = ct.styles.get('Testing') +// changing the font requires the use of reload() +this.textbox.reload() +``` + +If you want to change the cursor, that requires a redraw on every step so code should be added in the Step event. Be aware that you will also need to handle the case of whether the text box is in focus by the user. +```js +// change the cursor +this.textbox.cursor.clear() +if (this.textbox.isFocused) { // check if the user is focused on this text box + this.textbox.cursor.beginFill(0xFF3366) + this.textbox.cursor.drawRect(this.textbox.hiddenInput.width + 5, 2, 2, this.textbox.hiddenInput.height); + this.textbox.cursor.endFill(); +} +``` + +Don't want to use vector graphics at all for the text box? Not a problem. Simply assign a sprite to the template through the ct.js UI. Don't use `useDefaultBoxGraphics()` because it will draw over your sprite! + +### Tricks + +Let's say you created your TextBox template and now want to retrieve the textbox input. This is an example you can use if you attached your TextBox to the copy via `this.textbox` and you only have one TextBox copy in the room: + +``` +const onetextbox = ct.templates.list['TextBox'][0]; +const textValue = onetextbox.textbox.props.trueText; +``` + +What if you made a template to create multiple TextBoxes and wanted to configure each of them? Pass in some arguments using the `ct.templates.copy` method like this: + +``` +this.text1 = ct.templates.copy('TextBox', this.x, this.y, { + trueText: "Hi" +}); +this.text2 = ct.templates.copy('TextBox', this.x, this.y + 200, { + trueText: "Hello" +}); +``` + +Then in your TextBox template's Creation event you can pull that information in: + +``` +this.textbox = new ct.vgui.TextBox(this, { + trueText: this.trueText ? this.trueText : "", + width: 350, + height: 200 +}); +``` + diff --git a/app/data/ct.libs/vgui/index.js b/app/data/ct.libs/vgui/index.js new file mode 100644 index 000000000..73e190552 --- /dev/null +++ b/app/data/ct.libs/vgui/index.js @@ -0,0 +1,205 @@ +(function () { + class TextBox { + constructor (template, props = {}) { + this.props = { + trueText: "", // text that is stored on the textbox. not necessarily what is rendered + width: 256, + height: 48, + offsetX: 8, // offset the location of text in x pixels + offsetY: 2, // offset the location of text in y pixels + maxLength: 32, // maximum number of characters to store in the input + lengthThresholdOffset: 48, // how much sooner should text be cutoff when input reached end of textbox in pixels + font: undefined, // ct.styles font + hideText: false // if true, replaces characters with '•'. good for password fields. + } + // override defaults + Object.assign(this.props, props) + + this.displayText = ""; // the text that is shown to the user. this library handles this property + this.maxCharsInBox = 0 // figures out the number of characters that can be rendered within the textbox at runtime + this.isFocused = false // whether the user wants to type with the textbox + this.parent = template // for getting the collision boundaries of the textbox + this.cursorPosition = this.props.trueText.length // which character in the string to add/remove text to. start the cursor at the end of the string + this.useDefaultCursor = false // whether to let this class render its own cursor + + this.container = new PIXI.Container() // graphics for the textbox, text and cursor + + // frame graphics + this.textGraphics = new PIXI.Graphics() + this.container.addChild(this.textGraphics) + + // text input font. this is what the user sees + this.textInput = new PIXI.Text(this.displayText, this.props.font) + this.textInput.x = this.props.offsetX + this.textInput.y = (this.props.height / 2) - (this.textInput.height / 2) + this.props.offsetY + this.textInput.alpha = 1 + this.container.addChild(this.textInput) + + // hidden text that renders only up to the cursor position. this is so that the cursor renders at the right position + this.hiddenInput = new PIXI.Text(this.displayText, this.props.font) + this.hiddenInput.x = this.props.offsetX + this.hiddenInput.y = (this.props.height / 2) - (this.hiddenInput.height / 2) + this.props.offsetY + this.hiddenInput.alpha = 0 + this.container.addChild(this.hiddenInput) + + this.parent.shape = { // create a collision mask to be able to handle the textbox getting into focus + type: 'rect', + top: 0, + left: 0, + bottom: this.props.height, + right: this.props.width + } + + // cursor graphics + this.cursor = new PIXI.Graphics() + this.cursor.y = (this.props.height / 2) - (this.hiddenInput.height / 2) + this.props.offsetY + this.container.addChild(this.cursor) + + this.parent.addChild(this.container) + + // perform a single step even if unfocused, so at least the textbox/text is rendered + this.isFocused = true + this.step() + this.isFocused = false + } + + // for when you're too lazy to make your own textbox graphics. only invoke once + useDefaultBoxGraphics () { + // text box graphics + this.textGraphics.lineStyle(2, 0x000000, 1) + this.textGraphics.beginFill(0xFFFFFF, 1) + this.textGraphics.drawRoundedRect(0, 0, this.props.width, this.props.height, 12) + this.textGraphics.endFill() + } + + // for when you're too lazy to make your own textbox graphics. only invoke once + useDefaultCursorGraphics () { + this.useDefaultCursor = true + } + + // recalculates the textbox dimensions, style, and text positioning + reload () { + this.textInput.style = this.props.font + this.textInput.x = this.props.offsetX + this.textInput.y = (this.props.height / 2) - (this.textInput.height / 2) + this.props.offsetY + + this.hiddenInput.style = this.props.font + this.hiddenInput.x = this.props.offsetX + this.hiddenInput.y = (this.props.height / 2) - (this.hiddenInput.height / 2) + this.props.offsetY + + this.parent.shape = { + type: 'rect', + top: 0, + left: 0, + bottom: this.props.height, + right: this.props.width + } + } + + step () { + // mouse focus detection + this.updateFocus() + if (!this.isFocused) { + this.clearCursor() + return + } + + this.updateTrueTextAndCursor() + + // check if the text is going outside the box. truncate text if so + this.displayText = this.props.trueText + + if (this.props.hideText) { // mask the characters if the user wants the text to be hidden + this.displayText = this.displayText.replace(/./g, "•") + } + + this.truncateText() + + this.clearCursor() + this.renderCursor() + } + + // logic to check if the user clicked on the textbox for focus. requires ct.pointer catmod + updateFocus () { + if (!this.prevMouseDown) { + if (ct.pointer.collides(this.parent)) { + this.isFocused = true + } else if (ct.pointer.buttons & 1) { + this.isFocused = false + } + } + this.prevMouseDown = ct.pointer.buttons & 1 + } + + // listen to key inputs, then update true text and cursor position + updateTrueTextAndCursor () { + // cursor update logic + if (ct.keyboard.lastKey === 'ArrowLeft') { + this.cursorPosition -= 1 // move cursor left + this.cursorPosition = Math.max(0, this.cursorPosition) + } + if (ct.keyboard.lastKey === 'ArrowRight') { + this.cursorPosition += 1 // move cursor right + this.cursorPosition = Math.min(this.props.trueText.length, this.cursorPosition) + } + + if (this.props.trueText.length < this.props.maxLength && ct.keyboard.string !== '') { // add a character to the position of the cursor + this.props.trueText = `${this.props.trueText.slice(0, this.cursorPosition)}${ct.keyboard.string}${this.props.trueText.slice(this.cursorPosition)}` + this.cursorPosition += ct.keyboard.string.length + } + + if (ct.keyboard.lastKey === 'Backspace') { // remove a character to the left of the cursor + const lowestCursorPos = Math.max(0, this.cursorPosition - 1) + this.props.trueText = `${this.props.trueText.slice(0, lowestCursorPos)}${this.props.trueText.slice(this.cursorPosition)}` + this.cursorPosition -= 1 + } + + if (ct.keyboard.lastKey === 'Delete') { // remove a character to the right of the cursor + this.props.trueText = `${this.props.trueText.slice(0, this.cursorPosition)}${this.props.trueText.slice(this.cursorPosition + 1)}` + } + + // perform bounds on cursor position. Not less than 0, not greater than the text length + this.cursorPosition = Math.max(0, this.cursorPosition) + this.cursorPosition = Math.min(this.props.trueText.length, this.cursorPosition) + } + + // update the display text to render it nicely in the textbox + truncateText () { + // detect if the text is near the end of the textbox, and truncate further to keep all text within the box + if (this.textInput.width + this.props.lengthThresholdOffset > this.props.width) { + if (this.props.trueText.length > this.maxCharsInBox) { + this.displayText = this.displayText.slice(0, this.maxCharsInBox) + ".." + } + } else { + this.displayText = this.props.trueText + this.maxCharsInBox = this.textInput.text.length + } + + // render the truncated text + this.textInput.text = this.displayText + // cut off the text up to the cursor position so it's known where to render the cursor, or to the end of the text box plus one of the periods + this.hiddenInput.text = this.displayText.slice(0, Math.min(this.maxCharsInBox + 1, this.cursorPosition)) + } + + // draw the cursor if the user requested this class to do it for them + renderCursor () { + if (!this.useDefaultCursor) { + return; + } + this.cursor.beginFill(0x00000) + // draw it with an x offset only if the cursor is not at the complete left + const xOffset = this.cursorPosition === 0 ? this.hiddenInput.x : this.hiddenInput.width + 6 + this.cursor.drawRect(xOffset, 2, 2, this.hiddenInput.height); + this.cursor.endFill(); + } + + // self explanatory + clearCursor () { + this.cursor.clear() + } + } + + ct.vgui = { + TextBox: TextBox, + } +})(); diff --git a/app/data/ct.libs/vgui/module.json b/app/data/ct.libs/vgui/module.json new file mode 100644 index 000000000..2c839c6b5 --- /dev/null +++ b/app/data/ct.libs/vgui/module.json @@ -0,0 +1,16 @@ +{ + "main": { + "name": "ct.vgui", + "tagline": "Vector Graphics User Interface library", + "version": "1.0.0", + "authors": [{ + "name": "Firecakes" + }], + "categories": [ + "customization", + "utilities" + ] + }, + "fields": [], + "dependencies": ["pointer"] +} diff --git a/app/data/ct.libs/vgui/types.d.ts b/app/data/ct.libs/vgui/types.d.ts new file mode 100644 index 000000000..cbf6320c8 --- /dev/null +++ b/app/data/ct.libs/vgui/types.d.ts @@ -0,0 +1,70 @@ +declare namespace ct { + /** + * Vector Graphics User Interface library + */ + namespace vgui { + + class TextBox { + + /** + * Creates a text box that accepts keyboard input + * @param {object} template Pass "this" into this argument so that collision boundaries can be obtained + * @param {TextBoxProps} props Extra configuration goes here + */ + constructor(template: object, props: TextBoxProps); + + /** + * for when you're too lazy to make your own textbox graphics. only invoke once + */ + useDefaultBoxGraphics(): void; + /** + * for when you're too lazy to make your own textbox graphics. only invoke once + */ + useDefaultCursorGraphics(): void; + /** + * recalculates the textbox dimensions, style, and text positioning + */ + reload(): void; + /** + * call this method on the step event of your template. updates focus, text and cursor + */ + step(): void; + /** whether the textbox will accept input. automatically handled by the library depending where the user clicks */ + isFocused: boolean; + /** which character in the string to add/remove text to. automatically handle by the library */ + cursorPosition: number; + /** top level graphics for the textbox, text and cursor */ + container: PIXI.Container; + /** textbox graphics */ + textGraphics: PIXI.Graphics; + /** text input font. this is what the user sees */ + textInput: PIXI.Text; + /** hidden text font that renders only up to the cursor position. this is so that the cursor renders at the right position */ + hiddenInput: PIXI.Text; + /** cursor graphics */ + cursor: PIXI.Graphics; + } + + } +} + +interface TextBoxProps { + /** text that is stored on the textbox. not necessarily what is rendered. use this for inserting default text */ + trueText?: string; + /** How wide the text input should be. defaults to 256 */ + width?: number; + /** How tall the text input should be. defaults to 48 */ + height?: number; + /** offset the location of text horizontally in pixels. defaults to 8 */ + offsetX?: number; + /** offset the location of text vertically in pixels. defaults to 2 */ + offsetY?: number; + /** maximum number of characters to store in the input. defaults to 32 */ + maxLength?: number; + /** how much sooner should text be cutoff when input reached end of textbox in pixels. defaults to 48 */ + lengthThresholdOffset?: number; + /** a ct.styles font */ + font?: object; + /** if true, replaces characters with '•'. good for password fields. defaults to false */ + hideText?: boolean; +} \ No newline at end of file diff --git a/app/data/ct.release/backgrounds.js b/app/data/ct.release/backgrounds.js index 0d02f1d70..352e3ad52 100644 --- a/app/data/ct.release/backgrounds.js +++ b/app/data/ct.release/backgrounds.js @@ -72,16 +72,18 @@ class Background extends PIXI.TilingSprite { x: 0, y: 0, width: ct.camera.width, height: ct.camera.height } : ct.camera.getBoundingBox(); + const dx = ct.camera.x - ct.camera.width / 2, + dy = ct.camera.y - ct.camera.height / 2; if (this.repeat !== 'repeat-x' && this.repeat !== 'no-repeat') { this.y = cameraBounds.y; - this.tilePosition.y = -this.y * this.parallaxY + this.shiftY; + this.tilePosition.y = -this.y - dy * (this.parallaxY - 1) + this.shiftY; this.height = cameraBounds.height + 1; } else { this.y = this.shiftY + cameraBounds.y * (this.parallaxY - 1); } if (this.repeat !== 'repeat-y' && this.repeat !== 'no-repeat') { this.x = cameraBounds.x; - this.tilePosition.x = -this.x * this.parallaxX + this.shiftX; + this.tilePosition.x = -this.x - dx * (this.parallaxX - 1) + this.shiftX; this.width = cameraBounds.width + 1; } else { this.x = this.shiftX + cameraBounds.x * (this.parallaxX - 1); diff --git a/app/data/ct.release/desktopPack/ctGame.js b/app/data/ct.release/desktopPack/ctGame.js index e058e8add..003b7689f 100644 --- a/app/data/ct.release/desktopPack/ctGame.js +++ b/app/data/ct.release/desktopPack/ctGame.js @@ -1,8 +1,9 @@ -const {app, BrowserWindow} = require('electron'); - +const {app, BrowserWindow, ipcMain} = require('electron'); const pckg = require('./package.json'); + +let mainWindow; const createMainWindow = () => { - const mainWindow = new BrowserWindow({ + mainWindow = new BrowserWindow({ width: pckg.window.width, height: pckg.window.height, center: true, @@ -27,3 +28,28 @@ const createMainWindow = () => { }; app.on('ready', createMainWindow); + +ipcMain.on('ct.desktop', (event, feature) => { + const namespace = feature.electron.namespace.split('.'); + const method = feature.electron.method; + const parameter = feature.electron.parameter; + if (namespace.length === 1) { + if (namespace[0] === 'app') { + event.returnValue = app[method](parameter); + } else if (namespace[0] === 'mainWindow') { + event.returnValue = mainWindow[method](parameter); + } + } else if (namespace.length === 2) { + if (namespace[0] === 'app') { + event.returnValue = app[namespace[1]][method](parameter); + } else if (namespace[0] === 'mainWindow') { + event.returnValue = mainWindow[namespace[1]][method](parameter); + } + } else if (namespace.legth === 3) { + if (namespace[0] === 'app') { + event.returnValue = app[namespace[1]][namespace[2]][method](parameter); + } else if (namespace[0] === 'mainWindow') { + event.returnValue = mainWindow[namespace[1]][namespace[2]][method](parameter); + } + } +}); diff --git a/app/data/ct.release/emitters.js b/app/data/ct.release/emitters.js index abb507e12..6576403a7 100644 --- a/app/data/ct.release/emitters.js +++ b/app/data/ct.release/emitters.js @@ -198,14 +198,14 @@ class EmitterTandem extends PIXI.Container { const delta = ct.u.rotate( this.deltaPosition.x * this.follow.scale.x, this.deltaPosition.y * this.follow.scale.y, - -this.follow.angle + this.follow.angle ); for (const emitter of this.emitters) { emitter.updateOwnerPos(this.follow.x + delta.x, this.follow.y + delta.y); const ownDelta = ct.u.rotate( emitter.initialDeltaPos.x * this.follow.scale.x, emitter.initialDeltaPos.y * this.follow.scale.y, - -this.follow.angle + this.follow.angle ); emitter.updateSpawnPos(ownDelta.x, ownDelta.y); } diff --git a/app/data/ct.release/main.js b/app/data/ct.release/main.js index 1d6417332..d3a80df35 100644 --- a/app/data/ct.release/main.js +++ b/app/data/ct.release/main.js @@ -1,8 +1,12 @@ /*! Made with ct.js http://ctjs.rocks/ */ -if (location.protocol === 'file:') { - // eslint-disable-next-line no-alert - alert('Your game won\'t work like this because\nWeb 👏 builds 👏 require 👏 a web 👏 server!\n\nConsider using a desktop build, or upload your web build to itch.io, GameJolt or your own website.\n\nIf you haven\'t created this game, please contact the developer about this issue.\n\n Also note that ct.js games do not work inside the itch app; you will need to open the game with your browser of choice.'); +try { + require('electron'); +} catch { + if (location.protocol === 'file:') { + // eslint-disable-next-line no-alert + alert('Your game won\'t work like this because\nWeb 👏 builds 👏 require 👏 a web 👏 server!\n\nConsider using a desktop build, or upload your web build to itch.io, GameJolt or your own website.\n\nIf you haven\'t created this game, please contact the developer about this issue.\n\n Also note that ct.js games do not work inside the itch app; you will need to open the game with your browser of choice.'); + } } const deadPool = []; // a pool of `kill`-ed copies for delaying frequent garbage collection @@ -530,12 +534,13 @@ ct.u.ext(ct.u, {// make aliases } }; - ct.loop = function loop(delta) { - ct.delta = delta; + ct.loop = function loop() { + ct.delta = ct.pixiApp.ticker.deltaMS / (1000 / (ct.pixiApp.ticker.maxFPS || 60)); ct.deltaUi = ct.pixiApp.ticker.elapsedMS / (1000 / (ct.pixiApp.ticker.maxFPS || 60)); ct.inputs.updateActions(); ct.timer.updateTimers(); /*%beforeframe%*/ + ct.rooms.rootRoomOnStep.apply(ct.room); for (let i = 0, li = ct.stack.length; i < li; i++) { ct.templates.beforeStep.apply(ct.stack[i]); ct.stack[i].onStep.apply(ct.stack[i]); @@ -586,6 +591,7 @@ ct.u.ext(ct.u, {// make aliases item.onDraw.apply(item); ct.rooms.afterDraw.apply(item); } + ct.rooms.rootRoomOnDraw.apply(ct.room); /*%afterframe%*/ if (ct.rooms.switching) { ct.rooms.forceSwitch(); diff --git a/app/data/ct.release/res.js b/app/data/ct.release/res.js index b78b47d1b..f00c43f40 100644 --- a/app/data/ct.release/res.js +++ b/app/data/ct.release/res.js @@ -198,7 +198,7 @@ loadingPromises.push(ct.res.loadBitmapFont(bitmapFonts[font], font)); } for (const skel of dbSkeletons) { - ct.res.loadDragonBonesSkeleton(...skel); + loadingPromises.push(ct.res.loadDragonBonesSkeleton(...skel)); } for (const sound of sounds) { diff --git a/app/data/ct.release/rooms.js b/app/data/ct.release/rooms.js index 21c1d5c19..fe20e945c 100644 --- a/app/data/ct.release/rooms.js +++ b/app/data/ct.release/rooms.js @@ -22,26 +22,28 @@ class Room extends PIXI.Container { ct.room = ct.rooms.current = this; } if (template) { - if (template.extends) { - ct.u.ext(this, template.extends); - } this.onCreate = template.onCreate; this.onStep = template.onStep; this.onDraw = template.onDraw; this.onLeave = template.onLeave; this.template = template; this.name = template.name; + this.isUi = template.isUi; + if (template.extends) { + ct.u.ext(this, template.extends); + } if (this === ct.room) { ct.pixiApp.renderer.backgroundColor = ct.u.hexToPixi(this.template.backgroundColor); } /*%beforeroomoncreate%*/ for (let i = 0, li = template.bgs.length; i < li; i++) { - // Need to put extensions here, so we don't use ct.backgrounds.add + // Need to put additional properties like parallax here, + // so we don't use ct.backgrounds.add const bg = new ct.templates.Background( template.bgs[i].texture, null, template.bgs[i].depth, - template.bgs[i].extends + template.bgs[i].exts ); this.addChild(bg); } @@ -52,17 +54,22 @@ class Room extends PIXI.Container { this.addChild(tl); } for (let i = 0, li = template.objects.length; i < li; i++) { - const exts = template.objects[i].exts || {}; + const copy = template.objects[i]; + const exts = copy.exts || {}; + const customProperties = copy.customProperties || {}; ct.templates.copyIntoRoom( - template.objects[i].template, - template.objects[i].x, - template.objects[i].y, + copy.template, + copy.x, + copy.y, this, { - tx: template.objects[i].tx, - ty: template.objects[i].ty, - tr: template.objects[i].tr, - ...exts + ...exts, + ...customProperties, + scaleX: copy.scale.x, + scaleY: copy.scale.y, + rotation: copy.rotation, + alpha: copy.opacity, + tint: copy.tint } ); } @@ -185,6 +192,13 @@ Room.roomId = 0; } }, switching: false, + /** + * Restarts the current room. + * @returns {void} + */ + restart() { + ct.rooms.switch(ct.room.name); + }, /** * Creates a new room and adds it to the stage, separating its draw stack * from existing ones. @@ -281,6 +295,7 @@ Room.roomId = 0; roomName = nextRoom; } if (ct.room) { + ct.rooms.rootRoomOnLeave.apply(ct.room); ct.room.onLeave(); ct.rooms.onLeave.apply(ct.room); ct.room = void 0; @@ -305,6 +320,7 @@ Room.roomId = 0; ct.pixiApp.renderer.resize(template.width, template.height); ct.rooms.current = ct.room = new Room(template); ct.stage.addChild(ct.room); + ct.rooms.rootRoomOnCreate.apply(ct.room); ct.room.onCreate(); ct.rooms.onCreate.apply(ct.room); ct.rooms.list[roomName].push(ct.room); @@ -344,6 +360,18 @@ ct.rooms.beforeDraw = function beforeDraw() { ct.rooms.afterDraw = function afterDraw() { /*%afterroomdraw%*/ }; +ct.rooms.rootRoomOnCreate = function rootRoomOnCreate() { + /*@rootRoomOnCreate@*/ +}; +ct.rooms.rootRoomOnStep = function rootRoomOnStep() { + /*@rootRoomOnStep@*/ +}; +ct.rooms.rootRoomOnDraw = function rootRoomOnDraw() { + /*@rootRoomOnDraw@*/ +}; +ct.rooms.rootRoomOnLeave = function rootRoomOnLeave() { + /*@rootRoomOnLeave@*/ +}; /*@rooms@*/ /*%rooms%*/ diff --git a/app/data/ct.release/templates.js b/app/data/ct.release/templates.js index a7d3cbf4e..717c2e926 100644 --- a/app/data/ct.release/templates.js +++ b/app/data/ct.release/templates.js @@ -19,6 +19,12 @@ * @property {number} gravityDir The direction of acceleration that pulls a copy at each frame * @property {number} depth The position of a copy in draw calls * @property {boolean} kill If set to `true`, the copy will be destroyed by the end of a frame. + * @property {number} timer1 Time for the next run of the 1st timer, in seconds. + * @property {number} timer2 Time for the next run of the 2nd timer, in seconds. + * @property {number} timer3 Time for the next run of the 3rd timer, in seconds. + * @property {number} timer4 Time for the next run of the 4th timer, in seconds. + * @property {number} timer5 Time for the next run of the 5th timer, in seconds. + * @property {number} timer6 Time for the next run of the 6th timer, in seconds. */ const Copy = (function Copy() { const textureAccessor = Symbol('texture'); @@ -38,6 +44,7 @@ const Copy = (function Copy() { * before its OnCreate event. Defaults to ct.room. * @memberof Copy */ + // eslint-disable-next-line complexity constructor(template, x, y, exts, container) { container = container || ct.room; var t; @@ -53,11 +60,16 @@ const Copy = (function Copy() { this.anchor.x = textures[0].defaultAnchor.x; this.anchor.y = textures[0].defaultAnchor.y; } else { - super([PIXI.Texture.EMPTY]); + const emptyRect = new PIXI.Rectangle(0, 0, t.width || 1, t.height || 1); + super([new PIXI.Texture(PIXI.Texture.EMPTY, emptyRect)]); + this.anchor.x = t.anchorX || 0; + this.anchor.y = t.anchorY || 0; } this.template = template; this.parent = container; this.blendMode = t.blendMode || PIXI.BLEND_MODES.NORMAL; + this.loop = t.loopAnimation; + this.animationSpeed = t.animationFPS / 60; if (t.playAnimationOnStart) { this.play(); } @@ -79,16 +91,14 @@ const Copy = (function Copy() { this.speed = this.direction = this.gravity = 0; this.gravityDir = 90; this.depth = 0; + this.timer1 = this.timer2 = this.timer3 = this.timer4 = this.timer5 = this.timer6 = 0; if (exts) { ct.u.ext(this, exts); - if (exts.tx) { - this.scale.x = exts.tx; + if (exts.scaleX) { + this.scale.x = exts.scaleX; } - if (exts.ty) { - this.scale.y = exts.ty; - } - if (exts.tr) { - this.angle = exts.tr; + if (exts.scaleY) { + this.scale.y = exts.scaleY; } } this.uid = ++uid; @@ -357,6 +367,7 @@ const Copy = (function Copy() { return ct.templates.list[template].length > 0; }, /* + * ⚠ Actual typings for this is in src\typedefs\ct.js\ct.templates.d.ts ⚠ * Checks whether a given object exists in game's world. * Intended to be applied to copies, but may be used with other PIXI entities. * @param {Copy|PIXI.DisplayObject|any} obj The copy which existence needs to be checked. @@ -371,7 +382,8 @@ const Copy = (function Copy() { } return Boolean(obj); }, - /** + /* + * ⚠ Actual typings for this is in src\typedefs\ct.js\ct.templates.d.ts ⚠ * Checks whether a given object is a ct.js copy. * @param {any} obj The object which needs to be checked. * @returns {boolean} Returns `true` if the passed object is a copy; `false` otherwise. diff --git a/app/data/ct.release/tilemaps.js b/app/data/ct.release/tilemaps.js index 9928663e0..9ffb427c7 100644 --- a/app/data/ct.release/tilemaps.js +++ b/app/data/ct.release/tilemaps.js @@ -19,15 +19,21 @@ class Tilemap extends PIXI.Container { Object.assign(this, template.extends); } for (let i = 0, l = template.tiles.length; i < l; i++) { - const textures = ct.res.getTexture(template.tiles[i].texture); - const sprite = new PIXI.Sprite(textures[template.tiles[i].frame]); - sprite.anchor.x = sprite.anchor.y = 0; + const tile = template.tiles[i]; + const textures = ct.res.getTexture(tile.texture); + const sprite = new PIXI.Sprite(textures[tile.frame]); + sprite.anchor.x = textures[0].defaultAnchor.x; + sprite.anchor.y = textures[0].defaultAnchor.y; sprite.shape = textures.shape; + sprite.scale.set(tile.scale.x, tile.scale.y); + sprite.rotation = tile.rotation; + sprite.alpha = tile.opacity; + sprite.tint = tile.tint; + sprite.x = tile.x; + sprite.y = tile.y; this.addChild(sprite); this.pixiTiles.push(sprite); this.tiles[i].sprite = sprite; - sprite.x = template.tiles[i].x; - sprite.y = template.tiles[i].y; } } else { this.tiles = []; diff --git a/app/data/cursorErase.svg b/app/data/cursorErase.svg new file mode 100644 index 000000000..c96e113da --- /dev/null +++ b/app/data/cursorErase.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/data/cursorRotate.svg b/app/data/cursorRotate.svg new file mode 100644 index 000000000..d2f8adb9d --- /dev/null +++ b/app/data/cursorRotate.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/data/i18n/Brazilian Portuguese.json b/app/data/i18n/Brazilian Portuguese.json index b22be4a88..b0ea064b1 100644 --- a/app/data/i18n/Brazilian Portuguese.json +++ b/app/data/i18n/Brazilian Portuguese.json @@ -125,7 +125,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "Novo", @@ -587,7 +589,10 @@ "SpringStream": "Spring Stream", "LucasDracula": "Lucas Dracula", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "Padrão (Iosevka Light)", "codeFontOldSchool": "Old school", @@ -602,7 +607,9 @@ "translateToYourLanguage": "Traduza o ct.js!", "disableSounds": "Desabilitar sons de UI", "changeDataFolder": "", - "forceProductionForDebug": "" + "forceProductionForDebug": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "Salvar projeto", @@ -638,14 +645,36 @@ "sounds": "Sons", "ui": "UI", "fx": "FX", - "templates": "Tipos" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "Tipos", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -716,7 +745,13 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +771,19 @@ "deleteTiles": "Remover tiles", "moveTilesToLayer": "Mover para camada", "shiftTiles": "Trocar tiles", - "changeCopyRotation": "Rotacionar" + "changeCopyRotation": "Rotacionar", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Ativo", @@ -803,6 +850,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "Mudar cor de fundo", @@ -869,7 +917,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Chinese Simplified.json b/app/data/i18n/Chinese Simplified.json index e9f0b1729..798a207a9 100644 --- a/app/data/i18n/Chinese Simplified.json +++ b/app/data/i18n/Chinese Simplified.json @@ -125,7 +125,9 @@ "骨骼精灵图形", "骨骼精灵图形" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "新建", @@ -542,7 +544,10 @@ "SpringStream": "Spring Stream", "LucasDracula": "Lucas Dracula", "Horizon": "Horizon", - "HCBlack": "High-contrast Black" + "HCBlack": "High-contrast Black", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "newFont": "新字体:", "language": "语言", @@ -552,7 +557,9 @@ "codeDense": "密集布局", "disableSounds": "关闭 UI 音效", "changeDataFolder": "设置数据文件夹位置", - "forceProductionForDebug": "强制生产任务用于调试导出" + "forceProductionForDebug": "强制生产任务用于调试导出", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "heading": "项目", @@ -588,7 +595,36 @@ "restart": "重新启动", "launch": "编译并运行", "launchHotkeys": "(F5; Alt+F5 在默认浏览器中运行)", - "templates": "类型" + "templates": "类型", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "docsPanel": { "documentation": "文档", @@ -640,13 +676,6 @@ "folderNotWritable": "您没有权限写入这个文件夹. 选择其他试试", "complete": "文件夹已设置, 一切正常✅" }, - "copyCustomProperties": { - "customProperties": "自定义属性", - "addProperty": "添加属性", - "property": "属性", - "value": "值", - "delete": "删除" - }, "assetViewer": { "addNewGroup": "新分组", "ungrouped": "显示未分组", @@ -716,7 +745,13 @@ "copyProperties": { "position": "位置", "rotation": "旋转", - "scale": "缩放" + "scale": "缩放", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "添加属性", + "property": "属性", + "value": "值" }, "customProperties": "自定义属性", "restrictCamera": "保持相机在一个矩形中", @@ -736,7 +771,19 @@ "deleteTiles": "删除图块", "moveTilesToLayer": "移至图层", "shiftTiles": "移动瓷砖", - "changeCopyRotation": "旋转" + "changeCopyRotation": "旋转", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "激活", @@ -803,6 +850,7 @@ "updateFromClipboard": "从剪贴板更新", "previewAnimationNotice": "这是一个预览. 用this.animationSpeed属性改变它的真实拷贝.", "showFrameIndices": "显示帧索引", + "blankTexture": "", "pasteCollisionMask": "粘贴碰撞遮罩", "copyCollisionMask": "拷贝碰撞遮罩", "bgColor": "改变背景颜色", @@ -869,7 +917,9 @@ "add": "掺入 (溶解)", "multiply": "倍增 (变暗)", "screen": "遮蔽 (变亮)" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "切换资产", @@ -889,5 +939,71 @@ "visitAuthorsItch": "访问作者的 itch.io 页面", "visitAuthorsTwitter": "访问作者的 Twitter 页面", "tipAuthor": "奖励作者的辛勤工作 :D" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } } diff --git a/app/data/i18n/Comments.json b/app/data/i18n/Comments.json index b3308135e..7371901a2 100644 --- a/app/data/i18n/Comments.json +++ b/app/data/i18n/Comments.json @@ -125,7 +125,11 @@ "", "" ] - } + }, + "next": "", + "previous": "", + "undo": "About Undo/Redo operations", + "redo": "About Undo/Redo operations" }, "colorPicker": { "current": "", @@ -190,7 +194,8 @@ "vkontakte": "", "patreon": "", "templates": "", - "templatesInfo": "" + "templatesInfo": "", + "boosty": "Boosty is a service, similar to Patreon." }, "modules": { "author": "", @@ -201,7 +206,6 @@ "methods": "", "parameters": "", "logs2": "A title for a changelog of a module.", - "settings": "", "dependencies": "", "optionalDependencies": "", "importModules": "", @@ -224,7 +228,8 @@ }, "preview": "", "previewTooltip": "", - "deprecatedTooltip": "" + "deprecatedTooltip": "", + "settings": "" }, "texture": { "create": "", @@ -587,7 +592,10 @@ "SpringStream": "", "LucasDracula": "", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "", "codeFontOldSchool": "", @@ -602,7 +610,9 @@ "forceProductionForDebug": "", "heading": "", "language": "", - "translateToYourLanguage": "" + "translateToYourLanguage": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "", @@ -638,14 +648,36 @@ "fx": "", "restart": "", "project": "", - "templates": "" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -683,7 +715,8 @@ "moveTileLayer": "", "show": "", "hide": "", - "findTileset": "" + "findTileset": "", + "addTileLayer": "" }, "roomView": { "name": "", @@ -716,7 +749,16 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "Describes multiple values of one property", + "opacity": "", + "tint": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "", + "nameOccupied": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +778,20 @@ "deleteTiles": "", "moveTilesToLayer": "", "shiftTiles": "", - "changeCopyRotation": "" + "changeCopyRotation": "", + "simulate": "Can also be called \"Simulation\". Describes a mode during which sprites and backgrounds animate.", + "toggleDiagonalGrid": "", + "changeGridSize": "A command that changes grid's size", + "xrayMode": "A mode that makes everything see-through", + "colorizeTileLayers": "", + "tools": { + "select": "As a tool for selecting stuff", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + }, + "resetView": "Running this command brings camera back to the center of the room, and resets zoom" }, "styleView": { "active": "", @@ -803,6 +858,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "", @@ -812,7 +868,8 @@ "marginX": "", "marginY": "", "offX": "", - "offY": "" + "offY": "", + "blankTextureNotice": "" }, "soundView": { "import": "", @@ -844,7 +901,20 @@ "typefaceName": "" }, "licensePanel": { - "ctjsLicense": "" + "ctjsLicense": "", + "faq": "", + "whoOwnsGamesQ": "", + "whoOwnsGamesA": "", + "sellingGamesQ": "", + "sellingGamesA": "", + "possibleFeesQ": "", + "possibleFeesA": "", + "useInStudioQ": "", + "useInStudioA": "", + "attributionQ": "", + "attributionA": "", + "attributionAAssets": "", + "theLicense": "" }, "templates": { "create": "" @@ -869,7 +939,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +961,79 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "Timer1": "%%name%% must not be translated.", + "Timer2": "%%name%% must not be translated.", + "Timer3": "%%name%% must not be translated.", + "Timer4": "%%name%% must not be translated.", + "Timer5": "%%name%% must not be translated.", + "Timer6": "%%name%% must not be translated." + }, + "coreEventsArguments": { + "action": "", + "name": "", + "isUi": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } } \ No newline at end of file diff --git a/app/data/i18n/Debug.json b/app/data/i18n/Debug.json index 1ad1f5a2f..2e03c71db 100644 --- a/app/data/i18n/Debug.json +++ b/app/data/i18n/Debug.json @@ -64,7 +64,10 @@ "text": "common.fieldTypes.text", "textfield": "common.fieldTypes.textfield", "texture": "common.fieldTypes.texture", - "type": "common.fieldTypes.type" + "template": "common.fieldTypes.template", + "room": "common.fieldTypes.room", + "sound": "common.fieldTypes.sound", + "tandem": "common.fieldTypes.tandem" }, "newName": "common.newName", "saveProject": "common.saveProject", @@ -77,7 +80,56 @@ "addToNotes": "common.addToNotes", "noRooms": "common.noRooms", "tileLayer": "common.tileLayer", - "ctSite": "common.ctSite" + "ctSite": "common.ctSite", + "docsShort": "common.docsShort", + "docsLong": "common.docsLong", + "openAssetGallery": "common.openAssetGallery", + "assetTypes": { + "textures": [ + "common.assetTypes.textures.0", + "common.assetTypes.textures.1", + "common.assetTypes.textures.2" + ], + "templates": [ + "common.assetTypes.templates.0", + "common.assetTypes.templates.1", + "common.assetTypes.templates.2" + ], + "emitterTandems": [ + "common.assetTypes.emitterTandems.0", + "common.assetTypes.emitterTandems.1", + "common.assetTypes.emitterTandems.2" + ], + "rooms": [ + "common.assetTypes.rooms.0", + "common.assetTypes.rooms.1", + "common.assetTypes.rooms.2" + ], + "fonts": [ + "common.assetTypes.fonts.0", + "common.assetTypes.fonts.1", + "common.assetTypes.fonts.2" + ], + "styles": [ + "common.assetTypes.styles.0", + "common.assetTypes.styles.1", + "common.assetTypes.styles.2" + ], + "sounds": [ + "common.assetTypes.sounds.0", + "common.assetTypes.sounds.1", + "common.assetTypes.sounds.2" + ], + "skeletons": [ + "common.assetTypes.skeletons.0", + "common.assetTypes.skeletons.1", + "common.assetTypes.skeletons.2" + ] + }, + "next": "common.next", + "previous": "common.previous", + "undo": "common.undo", + "redo": "common.redo" }, "colorPicker": { "current": "colorPicker.current", @@ -97,7 +149,15 @@ "log": "exportPanel.log", "windowsCrossBuildWarning": "exportPanel.windowsCrossBuildWarning", "cannotBuildForMacOnWin": "exportPanel.cannotBuildForMacOnWin", - "firstRunNotice": "exportPanel.firstRunNotice" + "firstRunNotice": "exportPanel.firstRunNotice", + "projectTitleRequired": "exportPanel.projectTitleRequired", + "appIdRequired": "exportPanel.appIdRequired", + "noAndroidSdkFound": "exportPanel.noAndroidSdkFound", + "envVarNotice": "exportPanel.envVarNotice", + "downloadAndroidStudio": "exportPanel.downloadAndroidStudio", + "requiresInternetNotice": "exportPanel.requiresInternetNotice", + "noJdkFound": "exportPanel.noJdkFound", + "downloadJDK": "exportPanel.downloadJDK" }, "intro": { "loading": "intro.loading", @@ -132,7 +192,10 @@ "github": "intro.github", "itch": "intro.itch", "vkontakte": "intro.vkontakte", - "patreon": "intro.patreon" + "patreon": "intro.patreon", + "templates": "intro.templates", + "templatesInfo": "intro.templatesInfo", + "boosty": "intro.boosty" }, "modules": { "author": "modules.author", @@ -143,7 +206,6 @@ "methods": "modules.methods", "parameters": "modules.parameters", "logs2": "modules.logs2", - "settings": "modules.settings", "dependencies": "modules.dependencies", "optionalDependencies": "modules.optionalDependencies", "importModules": "modules.importModules", @@ -166,7 +228,8 @@ }, "preview": "modules.preview", "previewTooltip": "modules.previewTooltip", - "deprecatedTooltip": "modules.deprecatedTooltip" + "deprecatedTooltip": "modules.deprecatedTooltip", + "settings": "modules.settings" }, "texture": { "create": "texture.create", @@ -174,7 +237,8 @@ "skeletons": "texture.skeletons", "createTemplate": "texture.createTemplate", "importFromClipboard": "texture.importFromClipboard", - "generatePlaceholder": "texture.generatePlaceholder" + "generatePlaceholder": "texture.generatePlaceholder", + "textures": "texture.textures" }, "sounds": { "create": "sounds.create", @@ -365,7 +429,9 @@ "site": "settings.authoring.site", "title": "settings.authoring.title", "version": "settings.authoring.version", - "versionPostfix": "settings.authoring.versionPostfix" + "versionPostfix": "settings.authoring.versionPostfix", + "appId": "settings.authoring.appId", + "appIdExplanation": "settings.authoring.appIdExplanation" }, "branding": { "heading": "settings.branding.heading", @@ -374,7 +440,11 @@ "icon": "settings.branding.icon", "iconNotice": "settings.branding.iconNotice", "invertPreloaderScheme": "settings.branding.invertPreloaderScheme", - "hideLoadingLogo": "settings.branding.hideLoadingLogo" + "hideLoadingLogo": "settings.branding.hideLoadingLogo", + "splashScreen": "settings.branding.splashScreen", + "splashScreenNotice": "settings.branding.splashScreenNotice", + "forceSmoothIcons": "settings.branding.forceSmoothIcons", + "forceSmoothSplashScreen": "settings.branding.forceSmoothSplashScreen" }, "modules": { "heading": "settings.modules.heading" @@ -392,7 +462,15 @@ "windowed": "settings.rendering.launchModes.windowed" }, "hideCursor": "settings.rendering.hideCursor", - "pixelatedRender": "settings.rendering.pixelatedRender" + "pixelatedRender": "settings.rendering.pixelatedRender", + "usePixiLegacy": "settings.rendering.usePixiLegacy", + "mobileBuilds": "settings.rendering.mobileBuilds", + "screenOrientation": "settings.rendering.screenOrientation", + "screenOrientations": { + "unspecified": "settings.rendering.screenOrientations.unspecified", + "landscape": "settings.rendering.screenOrientations.landscape", + "portrait": "settings.rendering.screenOrientations.portrait" + } }, "scripts": { "heading": "settings.scripts.heading", @@ -434,13 +512,19 @@ "deleteContentType": "settings.content.deleteContentType", "confirmDeletionMessage": "settings.content.confirmDeletionMessage", "gotoEntries": "settings.content.gotoEntries", - "entries": "settings.content.entries" + "entries": "settings.content.entries", + "array": "settings.content.array" }, "contentTypes": "settings.contentTypes" }, "extensionsEditor": { "noEntries": "extensionsEditor.noEntries", - "addRow": "extensionsEditor.addRow" + "addRow": "extensionsEditor.addRow", + "actions": "extensionsEditor.actions", + "values": "extensionsEditor.values", + "moveDown": "extensionsEditor.moveDown", + "moveUp": "extensionsEditor.moveUp", + "deleteRow": "extensionsEditor.deleteRow" }, "textureGenerator": { "name": "textureGenerator.name", @@ -494,7 +578,8 @@ "exportDesktop": "mainMenu.deploy.exportDesktop", "successZipExport": "mainMenu.deploy.successZipExport", "zipExport": "mainMenu.deploy.zipExport", - "heading": "mainMenu.deploy.heading" + "heading": "mainMenu.deploy.heading", + "exportAndroid": "mainMenu.deploy.exportAndroid" }, "latestProjects": { "recentProjects": "mainMenu.latestProjects.recentProjects" @@ -507,7 +592,10 @@ "SpringStream": "mainMenu.settings.themes.SpringStream", "LucasDracula": "mainMenu.settings.themes.LucasDracula", "Horizon": "mainMenu.settings.themes.Horizon", - "HCBlack": "mainMenu.settings.themes.HCBlack" + "HCBlack": "mainMenu.settings.themes.HCBlack", + "RosePine": "mainMenu.settings.themes.RosePine", + "RosePineMoon": "mainMenu.settings.themes.RosePineMoon", + "RosePineDawn": "mainMenu.settings.themes.RosePineDawn" }, "codeFontDefault": "mainMenu.settings.codeFontDefault", "codeFontOldSchool": "mainMenu.settings.codeFontOldSchool", @@ -517,13 +605,14 @@ "codeFont": "mainMenu.settings.codeFont", "codeLigatures": "mainMenu.settings.codeLigatures", "codeDense": "mainMenu.settings.codeDense", - "settings": "mainMenu.settings.settings", "disableSounds": "mainMenu.settings.disableSounds", "changeDataFolder": "mainMenu.settings.changeDataFolder", "forceProductionForDebug": "mainMenu.settings.forceProductionForDebug", "heading": "mainMenu.settings.heading", "language": "mainMenu.settings.language", - "translateToYourLanguage": "mainMenu.settings.translateToYourLanguage" + "translateToYourLanguage": "mainMenu.settings.translateToYourLanguage", + "prideMode": "mainMenu.settings.prideMode", + "altTemplateLayout": "mainMenu.settings.altTemplateLayout" }, "project": { "save": "mainMenu.project.save", @@ -542,7 +631,8 @@ "heading": "mainMenu.meta.heading", "twitter": "mainMenu.meta.twitter", "vkontakte": "mainMenu.meta.vkontakte", - "ctjsForum": "mainMenu.meta.ctjsForum" + "ctjsForum": "mainMenu.meta.ctjsForum", + "openStylebook": "mainMenu.meta.openStylebook" } }, "appView": { @@ -558,14 +648,36 @@ "fx": "appView.fx", "restart": "appView.restart", "project": "appView.project", - "templates": "appView.templates" - }, - "copyCustomProperties": { - "customProperties": "copyCustomProperties.customProperties", - "addProperty": "copyCustomProperties.addProperty", - "property": "copyCustomProperties.property", - "value": "copyCustomProperties.value", - "delete": "copyCustomProperties.delete" + "templates": "appView.templates", + "tour": { + "header": "appView.tour.header", + "aboutTour": "appView.tour.aboutTour", + "helpPanel": "appView.tour.helpPanel", + "helpPanelTabs": "appView.tour.helpPanelTabs", + "projectResources": "appView.tour.projectResources", + "tabTextures": "appView.tour.tabTextures", + "tabTexturesImport": "appView.tour.tabTexturesImport", + "tabTexturesGallery": "appView.tour.tabTexturesGallery", + "tabTexturesClipboard": "appView.tour.tabTexturesClipboard", + "tabTexturesPlaceholders": "appView.tour.tabTexturesPlaceholders", + "tabTemplates": "appView.tour.tabTemplates", + "tabRooms": "appView.tour.tabRooms", + "tabSounds": "appView.tour.tabSounds", + "tabSoundsImport": "appView.tour.tabSoundsImport", + "tabSoundsGallery": "appView.tour.tabSoundsGallery", + "tabSoundsRecord": "appView.tour.tabSoundsRecord", + "tabInterlude": "appView.tour.tabInterlude", + "tabUI": "appView.tour.tabUI", + "tabFX": "appView.tour.tabFX", + "tabProject": "appView.tour.tabProject", + "tabProjectModules": "appView.tour.tabProjectModules", + "tabProjectModuleDocs": "appView.tour.tabProjectModuleDocs", + "tabMainMenu": "appView.tour.tabMainMenu", + "tabMainMenuSettings": "appView.tour.tabMainMenuSettings", + "tabMainMenuMeta": "appView.tour.tabMainMenuMeta", + "helpPanelReminder": "appView.tour.helpPanelReminder", + "buttonStartTutorial": "appView.tour.buttonStartTutorial" + } }, "assetViewer": { "addNewGroup": "assetViewer.addNewGroup", @@ -603,7 +715,8 @@ "moveTileLayer": "roomTiles.moveTileLayer", "show": "roomTiles.show", "hide": "roomTiles.hide", - "findTileset": "roomTiles.findTileset" + "findTileset": "roomTiles.findTileset", + "addTileLayer": "roomTiles.addTileLayer" }, "roomView": { "name": "roomView.name", @@ -636,7 +749,16 @@ "copyProperties": { "position": "roomView.copyProperties.position", "rotation": "roomView.copyProperties.rotation", - "scale": "roomView.copyProperties.scale" + "scale": "roomView.copyProperties.scale", + "multipleValues": "roomView.copyProperties.multipleValues", + "opacity": "roomView.copyProperties.opacity", + "tint": "roomView.copyProperties.tint" + }, + "copyCustomProperties": { + "addProperty": "roomView.copyCustomProperties.addProperty", + "property": "roomView.copyCustomProperties.property", + "value": "roomView.copyCustomProperties.value", + "nameOccupied": "roomView.copyCustomProperties.nameOccupied" }, "customProperties": "roomView.customProperties", "restrictCamera": "roomView.restrictCamera", @@ -656,7 +778,20 @@ "deleteTiles": "roomView.deleteTiles", "moveTilesToLayer": "roomView.moveTilesToLayer", "shiftTiles": "roomView.shiftTiles", - "changeCopyRotation": "roomView.changeCopyRotation" + "changeCopyRotation": "roomView.changeCopyRotation", + "simulate": "roomView.simulate", + "toggleDiagonalGrid": "roomView.toggleDiagonalGrid", + "changeGridSize": "roomView.changeGridSize", + "xrayMode": "roomView.xrayMode", + "colorizeTileLayers": "roomView.colorizeTileLayers", + "tools": { + "select": "roomView.tools.select", + "addCopies": "roomView.tools.addCopies", + "addTiles": "roomView.tools.addTiles", + "manageBackgrounds": "roomView.tools.manageBackgrounds", + "roomProperties": "roomView.tools.roomProperties" + }, + "resetView": "roomView.resetView" }, "styleView": { "active": "styleView.active", @@ -723,6 +858,7 @@ "updateFromClipboard": "textureView.updateFromClipboard", "previewAnimationNotice": "textureView.previewAnimationNotice", "showFrameIndices": "textureView.showFrameIndices", + "blankTexture": "textureView.blankTexture", "pasteCollisionMask": "textureView.pasteCollisionMask", "copyCollisionMask": "textureView.copyCollisionMask", "bgColor": "textureView.bgColor", @@ -732,7 +868,8 @@ "marginX": "textureView.marginX", "marginY": "textureView.marginY", "offX": "textureView.offX", - "offY": "textureView.offY" + "offY": "textureView.offY", + "blankTextureNotice": "textureView.blankTextureNotice" }, "soundView": { "import": "soundView.import", @@ -764,7 +901,20 @@ "typefaceName": "fontView.typefaceName" }, "licensePanel": { - "ctjsLicense": "licensePanel.ctjsLicense" + "ctjsLicense": "licensePanel.ctjsLicense", + "faq": "licensePanel.faq", + "whoOwnsGamesQ": "licensePanel.whoOwnsGamesQ", + "whoOwnsGamesA": "licensePanel.whoOwnsGamesA", + "sellingGamesQ": "licensePanel.sellingGamesQ", + "sellingGamesA": "licensePanel.sellingGamesA", + "possibleFeesQ": "licensePanel.possibleFeesQ", + "possibleFeesA": "licensePanel.possibleFeesA", + "useInStudioQ": "licensePanel.useInStudioQ", + "useInStudioA": "licensePanel.useInStudioA", + "attributionQ": "licensePanel.attributionQ", + "attributionA": "licensePanel.attributionA", + "attributionAAssets": "licensePanel.attributionAAssets", + "theLicense": "licensePanel.theLicense" }, "templates": { "create": "templates.create" @@ -779,6 +929,111 @@ "learnAboutTypes": "templateView.learnAboutTypes", "name": "templateView.name", "step": "templateView.step", - "visible": "templateView.visible" + "visible": "templateView.visible", + "appearance": "templateView.appearance", + "opacity": "templateView.opacity", + "blendMode": "templateView.blendMode", + "playAnimationOnStart": "templateView.playAnimationOnStart", + "blendModes": { + "normal": "templateView.blendModes.normal", + "add": "templateView.blendModes.add", + "multiply": "templateView.blendModes.multiply", + "screen": "templateView.blendModes.screen" + }, + "animationFPS": "templateView.animationFPS", + "loopAnimation": "templateView.loopAnimation" + }, + "assetInput": { + "changeAsset": "assetInput.changeAsset", + "jumpToAsset": "assetInput.jumpToAsset", + "selectAssetHeader": "assetInput.selectAssetHeader" + }, + "builtinAssetGallery": { + "galleryTip": "builtinAssetGallery.galleryTip", + "assetGalleryHeader": "builtinAssetGallery.assetGalleryHeader", + "importIntoProject": "builtinAssetGallery.importIntoProject", + "importAll": "builtinAssetGallery.importAll", + "byAuthorPrefix": "builtinAssetGallery.byAuthorPrefix", + "cannotImportExplanation": "builtinAssetGallery.cannotImportExplanation", + "nameOccupied": "builtinAssetGallery.nameOccupied", + "cannotImportNameOccupied": "builtinAssetGallery.cannotImportNameOccupied", + "visitSource": "builtinAssetGallery.visitSource", + "visitAuthorsItch": "builtinAssetGallery.visitAuthorsItch", + "visitAuthorsTwitter": "builtinAssetGallery.visitAuthorsTwitter", + "tipAuthor": "builtinAssetGallery.tipAuthor" + }, + "scriptables": { + "addEvent": "scriptables.addEvent", + "removeEvent": "scriptables.removeEvent", + "removeEventConfirm": "scriptables.removeEventConfirm", + "changeArguments": "scriptables.changeArguments", + "eventAlreadyExists": "scriptables.eventAlreadyExists", + "localEventVars": "scriptables.localEventVars", + "createEventHint": "scriptables.createEventHint", + "coreEventsCategories": { + "lifecycle": "scriptables.coreEventsCategories.lifecycle", + "actions": "scriptables.coreEventsCategories.actions", + "pointer": "scriptables.coreEventsCategories.pointer", + "misc": "scriptables.coreEventsCategories.misc", + "animation": "scriptables.coreEventsCategories.animation", + "timers": "scriptables.coreEventsCategories.timers" + }, + "coreEvents": { + "OnCreate": "scriptables.coreEvents.OnCreate", + "OnRoomStart": "scriptables.coreEvents.OnRoomStart", + "OnStep": "scriptables.coreEvents.OnStep", + "OnDraw": "scriptables.coreEvents.OnDraw", + "OnDestroy": "scriptables.coreEvents.OnDestroy", + "OnRoomEnd": "scriptables.coreEvents.OnRoomEnd", + "OnPointerClick": "scriptables.coreEvents.OnPointerClick", + "OnPointerSecondaryClick": "scriptables.coreEvents.OnPointerSecondaryClick", + "OnPointerEnter": "scriptables.coreEvents.OnPointerEnter", + "OnPointerLeave": "scriptables.coreEvents.OnPointerLeave", + "OnPointerDown": "scriptables.coreEvents.OnPointerDown", + "OnPointerUp": "scriptables.coreEvents.OnPointerUp", + "OnPointerUpOutside": "scriptables.coreEvents.OnPointerUpOutside", + "OnPointerWheel": "scriptables.coreEvents.OnPointerWheel", + "OnActionPress": "scriptables.coreEvents.OnActionPress", + "OnActionRelease": "scriptables.coreEvents.OnActionRelease", + "OnActionDown": "scriptables.coreEvents.OnActionDown", + "OnFrameChange": "scriptables.coreEvents.OnFrameChange", + "OnAnimationLoop": "scriptables.coreEvents.OnAnimationLoop", + "OnAnimationComplete": "scriptables.coreEvents.OnAnimationComplete", + "Timer": "scriptables.coreEvents.Timer" + }, + "coreParameterizedNames": { + "OnActionPress": "scriptables.coreParameterizedNames.OnActionPress", + "OnActionRelease": "scriptables.coreParameterizedNames.OnActionRelease", + "OnActionDown": "scriptables.coreParameterizedNames.OnActionDown", + "Timer1": "scriptables.coreParameterizedNames.Timer1", + "Timer2": "scriptables.coreParameterizedNames.Timer2", + "Timer3": "scriptables.coreParameterizedNames.Timer3", + "Timer4": "scriptables.coreParameterizedNames.Timer4", + "Timer5": "scriptables.coreParameterizedNames.Timer5", + "Timer6": "scriptables.coreParameterizedNames.Timer6" + }, + "coreEventsArguments": { + "action": "scriptables.coreEventsArguments.action", + "name": "scriptables.coreEventsArguments.name", + "isUi": "scriptables.coreEventsArguments.isUi" + }, + "coreEventsLocals": { + "OnActionDown_value": "scriptables.coreEventsLocals.OnActionDown_value", + "OnActionPress_value": "scriptables.coreEventsLocals.OnActionPress_value" + }, + "coreEventsDescriptions": { + "OnCreate": "scriptables.coreEventsDescriptions.OnCreate", + "OnRoomStart": "scriptables.coreEventsDescriptions.OnRoomStart", + "OnStep": "scriptables.coreEventsDescriptions.OnStep", + "OnDraw": "scriptables.coreEventsDescriptions.OnDraw", + "OnDestroy": "scriptables.coreEventsDescriptions.OnDestroy", + "OnRoomEnd": "scriptables.coreEventsDescriptions.OnRoomEnd", + "OnActionPress": "scriptables.coreEventsDescriptions.OnActionPress", + "OnActionRelease": "scriptables.coreEventsDescriptions.OnActionRelease", + "OnActionDown": "scriptables.coreEventsDescriptions.OnActionDown", + "OnAnimationLoop": "scriptables.coreEventsDescriptions.OnAnimationLoop", + "OnAnimationComplete": "scriptables.coreEventsDescriptions.OnAnimationComplete", + "Timer": "scriptables.coreEventsDescriptions.Timer" + } } } diff --git a/app/data/i18n/Dutch.json b/app/data/i18n/Dutch.json index e7b45a17f..5c6a51a63 100644 --- a/app/data/i18n/Dutch.json +++ b/app/data/i18n/Dutch.json @@ -7,12 +7,12 @@ "common": { "add": "Toevoegen", "apply": "Toepassen", - "cancel": "Annuleer", + "cancel": "Annuleren", "cannotBeEmpty": "Dit kan niet leeg zijn", "confirmDelete": "Weet je zeker dat je {0} wilt verwijderen? Dit kan niet ongedaan worden", "contribute": "Bijdragen", "copy": "Kopiëren", - "copyName": "Kopieer de naam", + "copyName": "De naam kopiëren", "cut": "Knippen", "delete": "Verwijderen", "donate": "Doneren", @@ -24,169 +24,171 @@ "no": "Nee", "none": "Geen", "ok": "Oké", - "open": "Open", + "open": "Openen", "paste": "Plakken", "rename": "Hernoemen", "save": "Opslaan", - "select": "Selecteer…", + "select": "Selecteren", "sort": "Sorteren:", - "wrongFormat": "Verkeerde bestandstype", + "wrongFormat": "Verkeerd bestandstype", "yes": "Ja", "zoom": "Zoom", - "zoomIn": "Zoom in", - "zoomOut": "Zoom uit", - "clear": "", - "filter": "", - "selectDialogue": "", - "search": "", - "close": "", - "couldNotLoadFromClipboard": "", - "pastedFromClipboard": "", - "edit": "", - "nothingToShowFiller": "", - "required": "", - "settings": "", + "zoomIn": "Inzoomen", + "zoomOut": "Uitzoomen", + "clear": "Wissen", + "filter": "Filter:", + "selectDialogue": "Selecteren...", + "search": "Zoeken:", + "close": "Sluiten", + "couldNotLoadFromClipboard": "Kon gegevens niet laden van het klembord.", + "pastedFromClipboard": "Gekopieerd van het klembord", + "edit": "Bewerken", + "nothingToShowFiller": "Hier is niets te zien!", + "required": "Vereist", + "settings": "Instellingen", "fieldTypes": { - "checkbox": "", - "code": "", - "color": "", - "group": "", - "h1": "", - "h2": "", - "h3": "", - "h4": "", - "number": "", - "point2D": "", - "radio": "", - "slider": "", - "sliderAndNumber": "", - "table": "", - "text": "", - "textfield": "", - "texture": "", - "template": "", - "room": "", - "sound": "", - "tandem": "" + "checkbox": "Selectievakje", + "code": "Codebox", + "color": "Kleur", + "group": "Veldengroep", + "h1": "Hoofding van 1ste niveau", + "h2": "Hoofding van 2de niveau", + "h3": "Hoofding van 3de niveau", + "h4": "Hoofding van 4de niveau", + "number": "Getal", + "point2D": "2D punt", + "radio": "Radio knoppen", + "slider": "Schuifregelaar", + "sliderAndNumber": "Schuifregelaar met een getalinput", + "table": "Tafel", + "text": "Korte tekst", + "textfield": "Tekstbox", + "texture": "Textuur", + "template": "Sjabloon", + "room": "Kamer", + "sound": "Geluid", + "tandem": "Deeltjesverspreider" }, "newName": "Nieuwe naam:", "saveProject": "Project opslaan", - "openProject": "Open project…", - "savedMessage": "Uw project was succesvol opgeslagen.", - "reallyExitConfirm": "Weet u zeker dat u wilt afsluiten? Alle niet opgeslagen veranderingen raken verloren!", + "openProject": "Project openen…", + "savedMessage": "Je project was succesvol opgeslagen.", + "reallyExitConfirm": "Weet je zeker dat je wilt afsluiten? Alle niet opgeslagen veranderingen raken verloren!", "notFoundOrUnknown": "Onbekend bestand. Zorg ervoor dat het bestand echt bestaat", "nameTaken": "Deze naam bestaat al", "fastImport": "Snelle Import", "addToNotes": "Notitie toevoegen", - "noRooms": "U heeft minimaal een kamer nodig om de app te compileren.", + "noRooms": "Je hebt ten minste één kamer nodig om de app te compileren.", "tileLayer": "tegellaag", "ctSite": "ct.js thuispagina", - "docsShort": "", - "docsLong": "", - "openAssetGallery": "", + "docsShort": "Docs", + "docsLong": "Documentatie", + "openAssetGallery": "Galerij", "assetTypes": { "textures": [ - "", - "", - "" + "textuur", + "texturen", + "texturen" ], "templates": [ - "", - "", - "" + "sjabloon", + "sjablonen", + "sjablonen" ], "emitterTandems": [ - "", - "", - "" + "verspreider tandem", + "verspreider tandems", + "verspreider tandems" ], "rooms": [ - "", - "", - "" + "kamer", + "kamers", + "kamers" ], "fonts": [ - "", - "", - "" + "lettertype", + "lettertypes", + "lettertypes" ], "styles": [ - "", - "", - "" + "stijl", + "stijlen", + "stijlen" ], "sounds": [ - "", - "", - "" + "geluid", + "geluiden", + "geluiden" ], "skeletons": [ - "", - "", - "" + "skelet", + "skeletten", + "skeletten" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "New", "globalPalette": "Globaal Palet", "old": "Oud", - "projectPalette": "Project's Palet" + "projectPalette": "Palet van Project" }, "curveEditor": { "curveLineHint": "Klik op de kromming om een punt toe te voegen", - "dragPointHint": "Sleep het punt om het punt te bewegen, rechter-klik verwijderd het punt", + "dragPointHint": "Sleep het punt om het punt te bewegen, rechter-klik verwijdert het punt", "pointTime": "Tijd:", "pointValue": "Waarde:" }, "debuggerToolbar": { "pause": "Pauze", - "resume": "Hervat het spel", - "restartGame": "Herstart het spel", - "restartRoom": "Herstart de kamer", - "switchRoom": "Ga naar de kamer…", + "resume": "Het spel hervatten", + "restartGame": "Het spel herstarten", + "restartRoom": "De kamer herstarten", + "switchRoom": "Naar de kamer gaan…", "toggleDevTools": "Dev Tools inschakelen", - "screenshot": "Maak een screenshot", - "enterFullscreen": "Ga naar volledig scherm", - "exitFullscreen": "Verlaat volledig scherm", + "screenshot": "Een screenshot maken", + "enterFullscreen": "Naar volledig scherm gaan", + "exitFullscreen": "Volledig scherm verlaten", "links": "Links en QR-codes", "openExternal": "Open in browser", "close": "Afsluiten" }, "docsShortcut": { - "openDocs": "Open de documentatie" + "openDocs": "De documentatie openen" }, "exportPanel": { "hide": "Verstoppen", "working": "Bezig…", "debug": "Debug-versie", "export": "Exporteren", - "exportPanel": "Exporteer het Project", + "exportPanel": "Het Project exporteren", "log": "Berichtenlog", - "windowsCrossBuildWarning": "Om vanaf Linux / MacOS voor Windows te bouwen, moet Wine op uw systeem zijn geïnstalleerd. Installatie-instructies zijn verschillend voor verschillende platforms, dus u kunt het beter zelf googlen :)", + "windowsCrossBuildWarning": "Om vanaf Linux / MacOS voor Windows te bouwen, moet Wine op je systeem zijn geïnstalleerd. Installatie-instructies zijn verschillend voor verschillende platforms, dus je kan het beter zelf googlen :)", "cannotBuildForMacOnWin": "Helaas kan Windows alleen kapotte Mac-pakketten produceren. Probeer een Linux-machine te gebruiken; bijvoorbeeld als een virtuele machine. Dit kan 100% gratis!", - "firstRunNotice": "De eerste run voor elk platform zal traag zijn, omdat ct.js extra bibliotheken zal downloaden en degene opslaan die nodig zijn voor het inpakken. Het zal even duren, maar de volgende keer zal bijna onmiddellijk zijn.", - "projectTitleRequired": "", - "appIdRequired": "", - "noAndroidSdkFound": "", - "envVarNotice": "", - "downloadAndroidStudio": "", - "requiresInternetNotice": "", - "noJdkFound": "", - "downloadJDK": "" + "firstRunNotice": "De eerste run voor elk platform zal traag zijn, omdat ct.js extra bibliotheken zal downloaden en degene opslaan die nodig zijn voor het inpakken. Het zal even duren, maar de volgende keer zal bijna onmiddellijk gebeuren.", + "projectTitleRequired": "Je moet een titel toevoegen aan je project via het Project tabblad → Auteur → Naam.", + "appIdRequired": "Je moet een uniek appId instellen via het Project tabblad → Auteur → App ID om deze app te verdelen.", + "noAndroidSdkFound": "Android SDK werd niet gevonden (ANDROID_SDK_ROOT omgevingsvariabele is niet ingesteld). Je kunt Android SDK krijgen door Android Studio te installeren: ", + "envVarNotice": "Mogelijks moet je de omgevingsvariabele nog handmatig instellen en je apparaat heropstarten.", + "downloadAndroidStudio": "Download Android Studio", + "requiresInternetNotice": "Deze actie vereist Internetconnectie om ieder project op te starten.", + "noJdkFound": "JDK 11 werd niet gevonden (JAVA_HOME omgevingsvariabele is niet ingesteld of verwijst niet naar JDK 11). Je kunt JDK 11 hier verkrijgen:", + "downloadJDK": "Download JDK 11" }, "intro": { - "loading": "Even geduld: kittens verzamelen lichtsnelheid!", + "loading": "Even geduld: kittens naderen lichtsnelheid!", "newProject": { - "button": "Creëer", + "button": "Creëren", "input": "Project's naam (letters en nummers)", - "text": "Creëer nieuwe", + "text": "Nieuwe creëren", "saveProjectHere": "Sla het project hier op", "selectProjectFolder": "Selecteer een map waar het project opgeslagen kan worden", "nameError": "Verkeerde project naam" }, "recovery": { - "message": "

Herstel

ct.js heeft een herstelbestand gevonden. Mogelijk werd uw project niet correct opgeslagen of werd ct.js afgesloten in geval van nood. Dit is wanneer deze bestanden voor het laatst zijn gewijzigd:

Het door u gekozen bestand: {0} {1}
Herstelbestand: {2} {3}

Wlek bestand moet ct.js openen?

", + "message": "

Herstel

ct.js heeft een herstelbestand gevonden. Mogelijk werd je project niet correct opgeslagen of werd ct.js afgesloten in geval van nood. Dit is wanneer deze bestanden voor het laatst werden gewijzigd:

Het door jou gekozen bestand: {0} {1}
Herstelbestand: {2} {3}

Welk bestand moet ct.js openen?

", "loadTarget": "Doelbestand", "loadRecovery": "Herstel", "newer": "(nieuwer)", @@ -199,27 +201,27 @@ "forgetProject": "Vergeet dit project", "browse": "Bladeren", "latest": "Recente projecten", - "unableToWriteToFolders": "Ct.js kon geen geschikte plaats vinden voor projecten! Zorg ervoor dat u de ct.js-app opslaat in een map waartoe u toegang heeft.", + "unableToWriteToFolders": "Ct.js kon geen geschikte plaats vinden voor projecten! Zorg ervoor dat je de ct.js-app opslaat in een map waartoe je toegang hebt.", "twitter": "Twitter kanaal", "discord": "Discord gemeenschap", - "examples": "", - "createOrBrowseJunction": "", - "cloneProject": "", - "github": "", - "itch": "", - "vkontakte": "", - "patreon": "", - "templates": "", - "templatesInfo": "" + "examples": "Voorbeelden", + "createOrBrowseJunction": "of", + "cloneProject": "Kloon dit project naar een nieuwe locatie", + "github": "Ct.js op Github", + "itch": "Winkel van ct.js op itch.io", + "vkontakte": "Vkontakte publieke gemeenschap", + "patreon": "Steun ct.js op Patreon!", + "templates": "Sjablonen", + "templatesInfo": "Je kan je game ontwikkeling een kickstart geven door een van deze sjablonen te gebruiken. Ze bevatten enkel tijdelijke uiterlijken, maar hebben werkende mechanics. Als je een project hebt geselecteerd kan je een opslagmap kiezen." }, "onboarding": { - "hoorayHeader": "Wow! U heeft zojuist een project gecreëerd!", + "hoorayHeader": "Wow! Je hebt zojuist een project gecreëerd!", "nowWhatParagraph": "Wat zullen we nu doen?", "openSpaceShooterTutorial": "Leer om een ruimte schietspel te maken", "openPlatformerTutorial": "Leer om een platformspel te maken", "doNothing": "Sla dit scherm over", "showOnboardingCheckbox": "Laat dit scherm zien wanneer er een nieuw project wordt gecreëerd", - "openJettyCatTutorial": "" + "openJettyCatTutorial": "Leer hoe je een Jetty Cat maakt" }, "settings": { "actions": { @@ -234,24 +236,24 @@ "methods": "Invoermethoden", "multiplier": "Vermenigvuldiger", "noActionsYet": "Met acties kunnen ontwikkelaars naar verschillende invoermethoden tegelijk luisteren en deze dynamisch wijzigen, allemaal met een uniforme API. Lees meer door op het documentatie-pictogram hierboven te klikken.", - "makeFromScratch": "", - "presets": "", - "presetXYMovement": "", - "presetTouchAndMouse": "", - "presetCustom": "", - "exportActionPreset": "", - "importErrorMissingModules": "", - "importErrorNotCtJsPreset": "" + "makeFromScratch": "Maak vanaf het begin", + "presets": "Presets", + "presetXYMovement": "Standaard XY beweging", + "presetTouchAndMouse": "Muis & Aanraken", + "presetCustom": "Importeer je eigen", + "exportActionPreset": "Exporteer als een preset", + "importErrorMissingModules": "Kan actie preset niet importeren omdat je ct.js installatie de volgende modules mist: $1.", + "importErrorNotCtJsPreset": "Dit bestand lijkt niet op ct.js' actie preset." }, "authoring": { "heading": "Auteur", - "author": "Auteru naam:", + "author": "Auteur naam:", "site": "Thuispagina:", "title": "Naam:", "version": "Versie:", "versionPostfix": "Postfix:", - "appId": "", - "appIdExplanation": "" + "appId": "App ID", + "appIdExplanation": "Dit wordt vooral gebruikt in mobile builds. Het is een unieke string die je game identificeert. Het volgt gewoonlijk de opbouw zone.ontwikkelaar.projectNaam, en, laat ons zeggen, rocks." }, "rendering": { "heading": "Render Opties", @@ -264,83 +266,83 @@ "fullscreen": "Volledig scherm", "windowed": "Windowed" }, - "desktopBuilds": "", - "hideCursor": "", + "desktopBuilds": "Desktop builds", + "hideCursor": "Verberg systeem cursor", "pixelatedRender": "Schakel het vloeiend maken van afbeeldingen hier en in een geëxporteerd project uit (behoud scherpe pixels)", - "usePixiLegacy": "", - "mobileBuilds": "", - "screenOrientation": "", + "usePixiLegacy": "Voeg een legacy, op canvas gebaseerde renderer toe om oudere browsers en grafische kaarten te ondersteunen (voegt ~20kb toe aan je game)", + "mobileBuilds": "Mobile builds", + "screenOrientation": "Scherm oriëntatie", "screenOrientations": { - "unspecified": "", - "landscape": "", - "portrait": "" + "unspecified": "Elk", + "landscape": "Landschap", + "portrait": "Portret" } }, "branding": { "heading": "Branding", - "icon": "Game's icoon:", + "icon": "Game icoon:", "iconNotice": "Het moet een vierkant zijn, one-frame afbeelding die minimaal 256x256px groot is.", "accent": "Accent:", "accentNotice": "Stelt de kleur van de preloader in, evenals van enkele andere plaatsen, wanneer project gebruikt wordt als een mobiele app.", "invertPreloaderScheme": "Keer het kleurenschema van de preloader om", - "hideLoadingLogo": "", - "splashScreen": "", - "splashScreenNotice": "", - "forceSmoothIcons": "", - "forceSmoothSplashScreen": "" + "hideLoadingLogo": "Verberg \"Made with ct.js\" op het laadscherm", + "splashScreen": "Opstartscherm:", + "splashScreenNotice": "Deze afbeelding zal worden gebruikt in mobiele builds. Hij moet minstens 1920x1920px groot zijn, en zal van grootte veranderd worden en worden bijgesneden voor portret en landschap schermoriëntatie, dus zorg ervoor dat alle belangrijke dingen in het middelste vierkant staan.", + "forceSmoothIcons": "Gebruik effen iconen, ongeacht van rendering instellingen", + "forceSmoothSplashScreen": "Gebruik effen startschermafbeeldingen, ongeacht van van rendering instellingen" }, "scripts": { - "addNew": "Toevoegen van een nieuw Script", - "deleteScript": "Verwijder een Script", - "heading": "Scripts", + "addNew": "Voeg een Nieuw Script toe", + "deleteScript": "Verwijder het Script", + "heading": "Aangepast script", "newScriptComment": "Gebruik scripts om veelgebruikte functies te definiëren en kleine bibliotheken te importeren", - "moveDown": "", - "moveUp": "" + "moveDown": "Beweeg naar onder", + "moveUp": "Beweeg naar boven" }, "modules": { - "heading": "" + "heading": "Catmods" }, - "catmodsSettings": "", + "catmodsSettings": "Instellingen van Catmods", "export": { - "heading": "", - "functionWrap": "", - "codeModifier": "", - "obfuscateWarning": "", - "codeModifierAndWrapNote": "", + "heading": "Exporteerinstellingen", + "functionWrap": "Plaats alle code in een functie. (Maakt debuggen lastiger, maar isoleert de code van de game van de buitenste context. Activeer dit niet tijdens het ontwikkelen van het spel.)", + "codeModifier": "Code transformaties", + "obfuscateWarning": "Deze optie zal je code 15-80% trager doen werken, maar zal het ongelooflijk moeilijk maken om hem te herleiden naar het origineel.", + "codeModifierAndWrapNote": "Merk op dat deze instellingen enkel werken voor geëxporteerde projecten (Export voor web en voor desktop commando's), aangezien ze merkbaar inpakken vertragen en debuggen vermoeilijken. Je kunt ze echter dwingen, in het Hoofdmenu → Instellingen → Forceer productietaken voor debug exports.", "codeModifiers": { - "none": "", - "minify": "", - "obfuscate": "" + "none": "Geen", + "minify": "Verklein", + "obfuscate": "Verwarren" } }, "content": { - "heading": "", - "addContentType": "", - "missingTypeName": "", - "unnamedContentTypeHint": "", - "typeName": "", - "typeNameHint": "", - "typeReadableName": "", - "typeReadableNameHint": "", - "icon": "", - "typeSpecification": "", - "fieldName": "", - "fieldNameHint": "", - "fieldReadableName": "", - "fieldReadableNameHint": "", - "fieldType": "", - "deleteContentType": "", - "confirmDeletionMessage": "", - "gotoEntries": "", - "entries": "", - "array": "" + "heading": "Inhoudstype bewerker", + "addContentType": "Voeg een type toe", + "missingTypeName": "Naamloos inhoudstype", + "unnamedContentTypeHint": "Dit inhoudstype is naamloos. Het zal niet bruikbaar zijn in je game tenzij je de naam toevoegt.", + "typeName": "Inhoudstype naam", + "typeNameHint": "De naam van je inhoudstype zoals het zal worden gebruikt in code. Voorbeelden: WapenItems, VijandVaardigheden, Steden.", + "typeReadableName": "Leesbare naam", + "typeReadableNameHint": "De leesbare naam van je inhoudstype, die hier wordt getoond en in inhoudsbewerkers.", + "icon": "Icoon", + "typeSpecification": "Inhoud schema", + "fieldName": "Naam", + "fieldNameHint": "De naam van het veld zoals het zal worden gebruikt in code. Bijvoorbeeld: kracht, hp, spawnType", + "fieldReadableName": "Leesbare naam", + "fieldReadableNameHint": "De leesbare versie van de naam, die gebruikt wordt in de inhoudsbewerker.", + "fieldType": "Type", + "deleteContentType": "Verwijder dit inhoudstype", + "confirmDeletionMessage": "Ben je zeker dat je dit inhoudstype wil verwijderen? Het is onomkeerbaar en zal ook alle entries van dit inhoudstype verwijderen.", + "gotoEntries": "Ga naar entries", + "entries": "Entries", + "array": "Lijst" }, - "contentTypes": "" + "contentTypes": "Inhoudstypes" }, "modules": { - "author": "Auteru van deze catmod", + "author": "Auteur van deze catmod", "dependencies": "Afhankelijkheden:", - "help": "Reference", + "help": "Referentie", "info": "Info", "license": "License", "logs": "Changelog", @@ -350,39 +352,39 @@ "logs2": "Changelog", "settings": "Instellingen", "importModules": "Importeer Modules", - "enabledModules": "", - "availableModules": "", - "filter": "", + "enabledModules": "Actieve modules", + "availableModules": "Beschikbare modules", + "filter": "Filter", "categories": { - "customization": "", - "utilities": "", - "media": "", - "misc": "", - "desktop": "", - "motionPlanning": "", - "inputs": "", - "fx": "", - "mobile": "", - "integrations": "", - "tweaks": "", - "networking": "" + "customization": "Aanpassingen", + "utilities": "Gereedschap", + "media": "Multimedia", + "misc": "Overig", + "desktop": "Desktop builds", + "motionPlanning": "Motion planning", + "inputs": "Input methoden", + "fx": "FX", + "mobile": "Mobiele apparaten", + "integrations": "Integraties", + "tweaks": "Aanpassingen", + "networking": "Netwerken" }, - "preview": "", - "previewTooltip": "", - "deprecatedTooltip": "" + "preview": "(preview)", + "previewTooltip": "Deze module is nog niet uitgebracht en is voor preview doeleinden.", + "deprecatedTooltip": "Deze module is verouderd en zal worden verwijderd in een toekomstige versie." }, "texture": { - "create": "Creëer", + "create": "Maak", "import": "Importeer", "skeletons": "Skeletanimatie", - "createTemplate": "", - "importFromClipboard": "", - "generatePlaceholder": "", - "textures": "" + "createTemplate": "Maak er een sjabloon van", + "importFromClipboard": "Importeer van klembord", + "generatePlaceholder": "Genereer een placeholder", + "textures": "Texturen" }, "sounds": { - "create": "Creëer", - "record": "" + "create": "Maak", + "record": "Neem op" }, "styles": { "create": "Creëer", @@ -394,17 +396,17 @@ "italic": "Cursief" }, "particleEmitters": { - "emittersHeading": "Deeltjesuitspuger", - "emitterHeading": "Uitspuger", + "emittersHeading": "Deeltjesverspreider", + "emitterHeading": "Verspreider", "from": "Van:", "to": "Naar:", "textureHeading": "Textuur", "selectTexture": "Selecteer…", "importBuiltin": "Importeer standaarden…", - "colorAndOpacityHeading": "Kleur en Dekking", + "colorAndOpacityHeading": "Kleur en Doorzichtigheid", "stepped": "Getrapte", "steppedColor": "Getrapte kleur", - "steppedAlpha": "Getrapte dekking", + "steppedAlpha": "Getrapte doorzichtigheid", "blendMode": "Mengmodus:", "regular": "Regulier", "darken": "Donkerder", @@ -413,7 +415,7 @@ "scalingHeading": "Schaling", "scale": "Grootte:", "minimumSize": "Minimale grootte:", - "minimumSizeHint": "Als u het op lagere waarden instelt, wordt de grootte van elk deeltje willekeurig gemaakt. Hoe lager de waarden, hoe sterker het effect.", + "minimumSizeHint": "Als je het op lagere waarden instelt, wordt de grootte van elk deeltje willekeurig gemaakt. Hoe lager de waarden, hoe sterker het effect.", "velocityHeading": "Snelheid", "velocity": "Snelheid:", "minimumSpeed": "Minimale snelheid:", @@ -433,17 +435,17 @@ "chanceToSpawn": "Kan om een deeltje te laten verschijnen:", "maxParticles": "Maximale deeltjes:", "lifetime": "Deeltje levensduur, sec.", - "emitterLifetime": "Emitter levensduur, sec.:", + "emitterLifetime": "Verspreider levensduur, sec.:", "prewarmDelay": "Voorverwarmen / vertraging, sec.:", - "prewarmDelayNotice": "Negatieve waarden zullen de deeltjes van de uitspuger voorbereiden voordat ze deze laten zien, wat handig is voor lange effecten zoals stofdeeltjes of nevel die al zichtbaar moeten zijn bij het starten van de kamer; positieve waarden zullen de simulatie vertragen.", + "prewarmDelayNotice": "Negatieve waarden zullen de deeltjes van de verspreider voorbereiden voordat ze deze laten zien, wat handig is voor lange effecten zoals stofdeeltjes of nevel die al zichtbaar moeten zijn bij het starten van de kamer; positieve waarden zullen de simulatie vertragen.", "shapeAndPositioningHeading": "Vorm en Positie", "spawnType": "Vorm type:", "spawnShapes": { - "point": "Point", - "rectangle": "Rectangle", - "circle": "Circle", + "point": "Punt", + "rectangle": "Rechthoek", + "circle": "Cirkel", "ring": "Ring", - "star": "Star" + "star": "Ster" }, "width": "Breedte:", "height": "Hoogte:", @@ -451,12 +453,12 @@ "starPoints": "Punten:", "startAngle": "Rotatie, graad.:", "showShapeVisualizer": "Laat vorm visualiseerder zien", - "relativeEmitterPosition": "Positie relatief van de andere uitspugers", - "addEmitter": "Voeg een andere uitspuger toe", + "relativeEmitterPosition": "Positie relatief van de andere verspreiders", + "addEmitter": "Voeg een andere verspreider toe", "reset": "Voorbeeld resetten", "changeBg": "Verander achtergrond", "inspectorComplete": "Compleet!", - "alreadyHasAnImportingTexture": "U heeft al een textuur met de naam $1. Verwijder het of hernoem het; hoewel u dezelfde textuur moet importeren die u eerder hebt toegevoegd :)", + "alreadyHasAnImportingTexture": "Je hebt al een textuur met de naam $1. Verwijder het of hernoem het; aangezien je waarschijnlijk dezelfde textuur importeert die je eerder hebt toegevoegd :)", "changeGrid": "Zet raster grootte", "newGridSize": "Nieuwe raster grootte:", "setPreviewTexture": "Zet voorbeeld textuur" @@ -469,14 +471,14 @@ "local": "Project's notitieblok", "global": "Globaal notitieblok", "backToHome": "Terug naar documentatie thuispagina", - "modulesPages": "", + "modulesPages": "Docs van Modules", "helpPages": "Help" }, "patreon": { "aboutPatrons": "Patrons zijn mensen die hun steun betuigen aan ComigoGames op Patreon, in de vorm van terugkerende donaties. Niet iedereen daar komt voor ct.js; sommigen gebruiken andere apps van ComigoGames. Tip: als je een maker bent en via Patreon aan ComigoGames doneert, krijg je hier een link naar je pagina - dat is mijn kleine hulp voor je creaties :)", "patronsHeader": "Onze patrons", "businessShuttles": "Zakelijke shuttles", - "noShuttlesYet": "Nog geen zakelijke shuttles :c Uw bedrijf is misschien wel de eerste!", + "noShuttlesYet": "Nog geen zakelijke shuttles :c Jouw bedrijf is misschien wel de eerste!", "shuttlesDescription": "Zakelijke shuttles worden beschouwd als partners van ct.js. Ze staan ​​vermeld op de thuispagina van ct.js en de winkelpagina's.", "spacePirates": "Ruimte Piraten", "noPiratesYet": "Er zijn nog geen Ruimte Piraten :c", @@ -509,54 +511,54 @@ ] }, "docsPanel": { - "documentation": "", - "reference": "" + "documentation": "Documentatie", + "reference": "Referentie" }, "extensionsEditor": { - "noEntries": "", - "addRow": "", - "actions": "", - "values": "", - "moveDown": "", - "moveUp": "", - "deleteRow": "" + "noEntries": "Nog geen entries.", + "addRow": "Voeg een rij toe", + "actions": "Acties", + "values": "Waarden", + "moveDown": "Beweeg naar onder", + "moveUp": "Beweeg naar boven", + "deleteRow": "Verwijder rij" }, "textureGenerator": { - "name": "", - "width": "", - "height": "", - "color": "", - "label": "", - "optional": "", - "createAndClose": "", - "createAndContinue": "", - "scalingAtX4": "", - "generationSuccessMessage": "", - "filler": "", - "fillerNone": "", - "fillerCross": "", - "fillerLabel": "", - "form": "", - "formRectangular": "", - "formRound": "", - "formDiamond": "", - "fillerArrow": "" + "name": "Naam van textuur:", + "width": "Breedte:", + "height": "Hoogte:", + "color": "Achtergrondkleur:", + "label": "Label:", + "optional": "(optioneel)", + "createAndClose": "Maak en sluit", + "createAndContinue": "Maak en voeg een andere toe", + "scalingAtX4": "x4 vergroting voor een kleinere textuur", + "generationSuccessMessage": "Succesvol textuur $1 toegevoegd aan je project.", + "filler": "Opvuller:", + "fillerNone": "Geen", + "fillerCross": "Kruis", + "fillerLabel": "Text label", + "form": "Vorm", + "formRectangular": "Rechthoekig", + "formRound": "Rond", + "formDiamond": "Diamant", + "fillerArrow": "Pijl" }, "textureInput": { - "jumpToTexture": "", - "changeTexture": "" + "jumpToTexture": "Spring naar de textuur", + "changeTexture": "Verander textuur" }, "writableFolderPrompt": { - "headerSelectFolderForData": "", - "paragraphCouldNotPickDirectory": "", - "paragraphDirectoryDirections": "", - "selectFolder": "" + "headerSelectFolderForData": "Selecteer een map voor ct.js data", + "paragraphCouldNotPickDirectory": "Oh nee! Ct.js kon geen map vinden voor je projecten, pakket builds, en voor debugging. Ct.js vindt er meestal automatisch een, maar deze keer zijn alle mappen die het bekeek alleen-lezen!", + "paragraphDirectoryDirections": "Dit kan echter opgelost worden. Klik de knop hieronder en selecteer een map om de data op te slaan. Als je niet helemaal zeker bent, maak dan een \"ct.js\" map in je Documenten map.", + "selectFolder": "Selecteer map..." }, "writableFolderSelector": { - "folderDoesNotExist": "", - "notADirectory": "", - "folderNotWritable": "", - "complete": "" + "folderDoesNotExist": "Het lijkt erop dat deze map niet bestaat... Hoe heb je dat voor elkaar gekregen?", + "notADirectory": "Het lijkt erop dat deze map niet bestaat! Hoe heb je dat voor elkaar gekregen?", + "folderNotWritable": "Je hebt geen toegang om deze map te bewerken. Kies een andere.", + "complete": "Map is aangeduid, alles is in orde ✅" }, "mainMenu": { "troubleshooting": { @@ -573,8 +575,8 @@ "exportDesktop": "Exporteer voor desktop", "successZipExport": "{0} is succesvol geëxporteerd.", "zipExport": "Exporteer naar het web", - "heading": "", - "exportAndroid": "" + "heading": "Deploy", + "exportAndroid": "Exporteer voor Android..." }, "latestProjects": { "recentProjects": "Recente projecten" @@ -586,98 +588,125 @@ "themes": { "Day": "Licht", "Night": "Donker", - "SpringStream": "", - "LucasDracula": "", - "Horizon": "", - "HCBlack": "" + "SpringStream": "Lente Stroom", + "LucasDracula": "Lucas Dracula", + "Horizon": "Horizon", + "HCBlack": "Hoog-contrast Zwart", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "Standaard (Iosevka Licht)", "codeFontOldSchool": "Ouderwets", "codeFontSystem": "Systeem", - "codeFontCustom": "Aangepaste…", + "codeFontCustom": "Aangepast…", "newFont": "Nieuw lettertype:", "codeFont": "Lettertype voor code", "codeLigatures": "Ligaturen", "codeDense": "Dichte indeling", "heading": "Instellingen", - "disableSounds": "", - "changeDataFolder": "", - "forceProductionForDebug": "" + "disableSounds": "Schakel UI geluiden uit", + "changeDataFolder": "Stel maplocatie voor data in", + "forceProductionForDebug": "Forceer productietaken voor debug exports", + "prideMode": "", + "altTemplateLayout": "" }, "project": { - "save": "Opslaan van project", + "save": "Sla project op", "openIncludeFolder": "Open de map \"include\"", - "openProject": "", - "openExample": "", - "startScreen": "Keer terug naar het start scherm", + "openProject": "Open een project...", + "openExample": "Open een voorbeeld project...", + "startScreen": "Keer terug naar het startscherm", "successZipProject": "Het project is succesvol naar {0} ingepakt.", "zipProject": "Project inpakken naar .zip", - "heading": "" + "heading": "Project" }, "meta": { - "license": "License", - "visitDiscordForGamedevSupport": "Word lid van de Discord-server voor gameontwikkelings-ondersteuning", - "openIconList": "", - "heading": "", - "twitter": "", - "vkontakte": "", - "ctjsForum": "", - "openStylebook": "" + "license": "Licentie", + "visitDiscordForGamedevSupport": "Discord server", + "openIconList": "Open de lijst van iconen", + "heading": "Meta", + "twitter": "Twitterkanaal", + "vkontakte": "Vkontakte publieke gemeenschap", + "ctjsForum": "Kom naar het ct.js forum", + "openStylebook": "Open CSS stylebook" } }, "appView": { "ctIDE": "ct.IDE", "texture": "Texturen", "launch": "Compileer en voer uit", - "launchHotkeys": "(F5; Alt+F5 om in uw standaard browser te draaien)", - "min": "Windowed", + "launchHotkeys": "(F5; Alt+F5 om in je standaard browser te draaien)", + "min": "In venster", "patrons": "Patrons", "rooms": "Kamers", "sounds": "Geluiden", "ui": "UI", "fx": "FX", - "restart": "", - "project": "", - "templates": "Soorten" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "restart": "Herstart", + "project": "Project", + "templates": "Sjablonen", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { - "addNewGroup": "", - "ungrouped": "", - "newGroupName": "", - "groupDeletionConfirmation": "" + "addNewGroup": "Nieuwe groep", + "ungrouped": "Toon ongegroepeerd", + "newGroupName": "Nieuwe groep", + "groupDeletionConfirmation": "Ben je zeker dat je deze groep wil verwijderen? Alle onderdelen zullen ongegroepeerd zijn." }, "groupEditor": { - "groupEditor": "", - "icon": "", - "color": "" + "groupEditor": "Groepenbewerker", + "icon": "Icoon:", + "color": "Kleur:" }, "soundRecorder": { - "recorderHeading": "", - "record": "", - "stopRecording": "", - "discardRecording": "", - "finishRecording": "", - "cannotRecordSound": "", - "troubleshootingWindows": "" + "recorderHeading": "Recorder", + "record": "Start met opnemen", + "stopRecording": "Stop recorder", + "discardRecording": "Verwijder de opname", + "finishRecording": "Beëindig opname", + "cannotRecordSound": "Kan recorder niet starten: check je audio configuratie en het opnameapparaat", + "troubleshootingWindows": "Op Windows, ga ook naar Instellingen -> Privacy -> Microfoon en check of apps toegang hebben tot je microfoon." }, "roomBackgrounds": { - "add": "Voeg een achtergrond toe", + "add": "Voeg een Achtergrond toe", "depth": "Diepte:", - "movement": "Bewegings snelheid (X, Y):", + "movement": "Bewegingssnelheid (X, Y):", "parallax": "Parallax (X, Y):", "repeat": "Herhaal:", "scale": "Schaal (X, Y):", "shift": "Verschuif (X, Y):", - "notBackgroundTextureWarning": "", - "fixBackground": "", - "dismissWarning": "" + "notBackgroundTextureWarning": "Deze textuur is niet gemarkeerd als een achtergrond. Het zal gaten bevatten wanneer het geëxporteerd wordt.", + "fixBackground": "Los op.", + "dismissWarning": "Negeer." }, "roomTiles": { "moveTileLayer": "Beweeg naar een nieuwe diepte", @@ -691,10 +720,10 @@ "height": "Venster hoogte:", "events": "Kamer evenementen", "copies": "Kopieën", - "backgrounds": "Achtergrond", + "backgrounds": "Achtergronden", "tiles": "Tegels", "add": "Toevoegen", - "none": "Niks", + "none": "Niets", "done": "Klaar", "grid": "Raster instellen", "hotkeysNotice": "Ctrl = Verwijder, Alt = Geen raster, Shift = Meerdere", @@ -708,35 +737,53 @@ "shiftCopies": "Verschuif kopieën", "selectAndMove": "Selecteer en Beweeg", "findTileset": "Zoek een tegelset", - "properties": "", - "isUi": "", - "backgroundColor": "", - "sortHorizontally": "", - "sortVertically": "", + "properties": "Eigenschappen", + "isUi": "Is een UI laag?", + "backgroundColor": "Kleur van de achtergrond:", + "sortHorizontally": "Sorteer horizontaal", + "sortVertically": "Sorteer verticaal", "copyProperties": { - "position": "", - "rotation": "", - "scale": "" + "position": "Positie", + "rotation": "Rotatie", + "scale": "Schaal", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "Voeg eigenschap toe", + "property": "Eigenschap", + "value": "Waarde" }, - "customProperties": "", - "restrictCamera": "", - "minimumX": "", - "minimumY": "", - "maximumX": "", - "maximumY": "", - "gridOff": "Raster uitschakelen", + "customProperties": "Aangepaste eigenschappen", + "restrictCamera": "Houd camera in een rechthoek", + "minimumX": "Min X", + "minimumY": "Min Y", + "maximumX": "Max X", + "maximumY": "Max Y", + "gridOff": "Schakel raster uit", "gridSize": "Raster grootte:", "toCenter": "Centreren", "shiftLabel": "Verschuif met:", "newDepth": "Nieuwe diepte:", "deleteCopy": "Verwijder kopie {0}", "changeCopyScale": "Verander schaal", - "shiftCopy": "Zet coördinaten", + "shiftCopy": "Stel coördinaten in", "deleteTile": "Verwijder een tegel", "deleteTiles": "Verwijder tegels", "moveTilesToLayer": "Beweeg naar laag", "shiftTiles": "Verschuif tegels", - "changeCopyRotation": "" + "changeCopyRotation": "Draai", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Activeer", @@ -750,9 +797,9 @@ "stroke": "Omlijning", "textWrap": "Woordomloop", "textWrapWidth": "Maximale breedte:", - "useCustomFont": "", - "code": "", - "copyCode": "", + "useCustomFont": "Aangepast lettertype...", + "code": "Code", + "copyCode": "Kopie", "fillColor": "Kleur:", "fillColor1": "Kleur 1:", "fillColor2": "Kleur 2:", @@ -764,9 +811,9 @@ "fillVertical": "Verticaal", "fontWeight": "Breedte:", "shadowBlur": "Vervaging:", - "shadowColor": "Shaduw kleur:", + "shadowColor": "Shaduwkleur:", "shadowShift": "Verschuiving:", - "strokeColor": "Omlijning kleur:", + "strokeColor": "Lijnkleur:", "strokeWeight": "Lijn breedte:", "testText": "Test tekst 0123 +", "fontFamily": "Lettertypefamilie:", @@ -777,7 +824,7 @@ "cols": "Kolommen:", "done": "Toepassen", "fill": "Vul", - "form": "Botsings vorm:", + "form": "Botsingsvorm:", "frames": "Aantal frames:", "isometrify": "Isometrify: Verplaats de as naar het middelste onderste punt, vul de hele sprite met een botsingsmasker", "name": "Naam:", @@ -787,25 +834,26 @@ "round": "Cirkel", "rows": "Rijen:", "speed": "Framerate:", - "tiled": "Gebruik als achtergrond?", - "corrupted": "Bestand is corrupt of mist! Nu aflsuiten.", + "tiled": "Gebruiken als achtergrond?", + "corrupted": "Bestand is corrupt of zoek! Nu aflsuiten.", "width": "Lengte:", "height": "Hoogte:", "strip": "Lijnstrip / Veelhoek", - "removePoint": "Verwijdern het punt", + "removePoint": "Verwijder het punt", "closeShape": "Sluit de vorm af", - "addPoint": "Toevoegen van een punt", - "moveCenter": "Verplaatsen van as", - "movePoint": "Verplaats dit punt", + "addPoint": "Voeg een punt toe", + "moveCenter": "Verplaats as", + "movePoint": "Dit punt verplaatsen", "symmetryTool": "Symmetrie tool", "padding": "Opvulling:", - "paddingNotice": "Dit heeft invloed op de manier waarop een textuur wordt geëxporteerd: het voegt dubbele pixels toe aan de randen en voorkomt uitvloeiende artefacten op betegelde en geschaalde texturen. De standaardwaarde is meestal voldoende, maar als u texturen sterk verkleint, kan de bloeding opnieuw optreden. Verhoog deze waarde als u textuur artefacten heeft tijdens het spelen.", - "updateFromClipboard": "", - "previewAnimationNotice": "", - "showFrameIndices": "", - "pasteCollisionMask": "", - "copyCollisionMask": "", - "bgColor": "Verander achtergrond kleur", + "paddingNotice": "Dit heeft invloed op de manier waarop een textuur wordt geëxporteerd: het voegt dubbele pixels toe aan de randen en voorkomt uitvloeiende artefacten op betegelde en geschaalde texturen. De standaardwaarde is meestal voldoende, maar als je texturen sterk verkleint, kan de uitvloeiing opnieuw optreden. Verhoog deze waarde als je textuur artefacten heeft tijdens het spelen.", + "updateFromClipboard": "Update van klembord", + "previewAnimationNotice": "Dit is een preview. Gebruik this.animationSpeed waarde om het te veranderen voor echte kopieën.", + "showFrameIndices": "Toon frame-indexen", + "blankTexture": "", + "pasteCollisionMask": "Plak een botsingsmasker", + "copyCollisionMask": "Kopieer het botsingsmasker", + "bgColor": "Verander achtergrondkleur", "setCenter": "Centreer afbeeldingen", "replaceTexture": "Vervang…", "showMask": "Masker tonen", @@ -824,22 +872,22 @@ "fontView": { "italic": "Is cursief?", "reimport": "Herimporteer", - "generateBitmapFont": "", - "bitmapFont": "", - "bitmapFontSize": "", - "bitmapFontLineHeight": "", - "resultingBitmapFontName": "", - "charset": "", + "generateBitmapFont": "Genereer ook een bitmap lettertype", + "bitmapFont": "Bitmap lettertype", + "bitmapFontSize": "Lettergrootte:", + "bitmapFontLineHeight": "Lijnhoogte", + "resultingBitmapFontName": "Naam van middel", + "charset": "Charset", "charsets": { - "punctuation": "", - "basicLatin": "", - "latinExtended": "", - "cyrillic": "", - "greekCoptic": "", - "custom": "", - "allInFont": "" + "punctuation": "Cijfers en leestekens (je hebt dit meestal wel nodig)", + "basicLatin": "Standaard Latijn", + "latinExtended": "Latijn uitgebreid", + "cyrillic": "Cyrillisch", + "greekCoptic": "Grieks en Koptisch", + "custom": "Aangepast", + "allInFont": "Teken alles de lettertype ondersteuning" }, - "customCharsetHint": "", + "customCharsetHint": "Typ alle letters die je wil opnemen, zowel in hoofdletters als in kleine letters.", "fontWeight": "Lettertype breedte:", "typefaceName": "Lettertype naam:" }, @@ -856,38 +904,106 @@ "destroy": "Bij Vernietiging", "done": "Klaar", "draw": "Teken", - "learnAboutTypes": "Leren over code types", + "learnAboutTypes": "Leer over code types", "name": "Naam:", "step": "Bij Stap", - "visible": "", - "appearance": "", - "opacity": "", - "blendMode": "", - "playAnimationOnStart": "", + "visible": "Zichtbaar", + "appearance": "Uiterlijk", + "opacity": "Doorzichtigheid:", + "blendMode": "Mengmodus:", + "playAnimationOnStart": "Speel animatie bij start", "blendModes": { - "normal": "", - "add": "", - "multiply": "", - "screen": "" - } + "normal": "Normaal", + "add": "Voeg toe (brand)", + "multiply": "Vermenigvuldig (donkerder maken)", + "screen": "Scherm (lichter maken)" + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { - "changeAsset": "", - "jumpToAsset": "", - "selectAssetHeader": "" + "changeAsset": "Druk om het onderdeel te veranderen", + "jumpToAsset": "Spring naar dit onderdeel", + "selectAssetHeader": "Selecteer een onderdeel" }, "builtinAssetGallery": { - "galleryTip": "", - "assetGalleryHeader": "", - "importIntoProject": "", - "importAll": "", - "byAuthorPrefix": "", - "cannotImportExplanation": "", - "nameOccupied": "", - "cannotImportNameOccupied": "", - "visitSource": "", - "visitAuthorsItch": "", - "visitAuthorsTwitter": "", - "tipAuthor": "" + "galleryTip": "Dit is een gratis, ingebouwde gallerij van verschillende texturen en geluiden. Alle onderdelen zijn CC0 of WTFPL, of zijn uitgegeven onder speciale gebruiksvoorwaarden voor ct.js. In elk geval, je kan deze onderdelen gebruiken hoe je ook maar wil, in commerciële en andere projecten.", + "assetGalleryHeader": "Onderdelen", + "importIntoProject": "Importeer in het huide project", + "importAll": "Importeer alles", + "byAuthorPrefix": "door", + "cannotImportExplanation": "De naam dat dit onderdeel zou krijgen is ingenomen door een ander onderdeel. Je moet mogelijks bestaande onderdelen hernoemen; of misschien heb je dit onderdeel al geïmporteerd?", + "nameOccupied": "Naam al in gebruik", + "cannotImportNameOccupied": "Kan $1 niet importeren aangezien deze naam al in gebruik is.", + "visitSource": "De opslagpagina van dit onderdelenpakket openen", + "visitAuthorsItch": "De auteurs itch.io pagina bezoeken", + "visitAuthorsTwitter": "De Twitterpagina van de auteur bezoeken", + "tipAuthor": "De auteur een fooi geven voor hun harde werk :D" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/English.json b/app/data/i18n/English.json index 22b191830..eaaa0c0dd 100644 --- a/app/data/i18n/English.json +++ b/app/data/i18n/English.json @@ -28,6 +28,7 @@ "filter": "Filter:", "loading": "Loading…", "name": "Name:", + "next": "Next", "no": "No", "none": "None", "nothingToShowFiller": "There is nothing to show here!", @@ -35,6 +36,7 @@ "open": "Open", "paste": "Paste", "pastedFromClipboard": "Pasted from clipboard", + "previous": "Previous", "rename": "Rename", "required": "Required", "save": "Save", @@ -48,6 +50,8 @@ "zoom": "Zoom", "zoomIn": "Zoom in", "zoomOut": "Zoom out", + "undo": "Undo", + "redo": "Redo", "fieldTypes": { "checkbox": "Checkbox", "code": "Codebox", @@ -158,13 +162,6 @@ "old": "Old", "projectPalette": "Project's Palette" }, - "copyCustomProperties": { - "customProperties": "Custom Properties", - "addProperty": "Add Property", - "property": "Property", - "value": "Value", - "delete": "Delete" - }, "curveEditor": { "curveLineHint": "Click the curve to add a point", "dragPointHint": "Drag to move the point, right-click to delete it", @@ -260,6 +257,7 @@ "itch": "Ct.js' store page on itch.io", "vkontakte": "Vkontakte public community", "patreon": "Support ct.js on Patreon!", + "boosty": "Support ct.js on Boosty!", "createOrBrowseJunction": "or" }, "onboarding": { @@ -634,8 +632,12 @@ "SpringStream": "Spring Stream", "LucasDracula": "Lucas Dracula", "Horizon": "Horizon", - "HCBlack": "High-contrast Black" + "HCBlack": "High-contrast Black", + "RosePine": "Rosé Pine", + "RosePineMoon": "Rosé Pine Moon", + "RosePineDawn": "Rosé Pine Dawn" }, + "prideMode": "Pride mode", "language": "Language", "translateToYourLanguage": "Translate ct.js!", "codeFontDefault": "Default (Iosevka Light)", @@ -646,6 +648,7 @@ "codeFont": "Font for code", "codeLigatures": "Ligatures", "codeDense": "Dense layout", + "altTemplateLayout": "Alternative layout for template editor", "disableSounds": "Disable UI sounds", "changeDataFolder": "Set data folder location", "forceProductionForDebug": "Force production tasks for debug exports" @@ -684,16 +687,45 @@ "sounds": "Sounds", "ui": "UI", "fx": "FX", - "templates": "Templates" + "templates": "Templates", + "tour": { + "header": "Ct.js overview", + "aboutTour": "Welcome to ct.js! This little tour will show you the main controls in this editor, so you know how to configure ct.js and create new assets.", + "helpPanel": "First of all, note this sneaky button. It is very important for learning ct.js!", + "helpPanelTabs": "This panel stores all the official docs and tutorials for ct.js and its modules, and also has two notepads for your records.

Global notepad is shared between projects and is saved on your device. Project's notepad is stored inside your project.", + "projectResources": "Now, every project has assets of several types. Every asset type belongs to its own tab. Let's check out the most important tabs.", + "tabTextures": "Textures are images that can be used for your interactive objects (which are called Copies), backgrounds, and special effects. Textures don't do anything on their own but are definitely a needed asset type.", + "tabTexturesImport": "You can import textures from your file system…", + "tabTexturesGallery": "…or import ready-made textures from the built-in library.", + "tabTexturesClipboard": "This button pastes copied images from clipboard. It is quite handy while working with image editors!", + "tabTexturesPlaceholders": "You can also generate simple placeholder graphics with this tool.", + "tabTemplates": "Templates are used to create copies — interactive objects that you place in your levels. Any interactive object in ct.js is created from one of your templates. They use your textures, and you define gameplay logic by creating events in them. Once you've created a template, you can run its own in-deep tour in the template editor.", + "tabRooms": "Another most important tab is for rooms. Rooms can also be called as levels or scenes in which you place your copies. Rooms can also have their own events and backgrounds.", + "tabSounds": "Sounds, I guess, is the most obvious tab.", + "tabSoundsImport": "You can create new sounds with this button…", + "tabSoundsGallery": "…import them from the built-in sound library…", + "tabSoundsRecord": "…or even record them with your microphone!", + "tabInterlude": "There are also two tabs for more advanced assets.", + "tabUI": "UI tab manages fonts and text styles. Bundling your fonts with the game is important for it to look consistently across devices. Text styles have a visual editor for making style presets. They also produce code for creation of such labels in-game.", + "tabFX": "The FX tab has an editor for particle systems — special graphical effects for explosions, magic, smoke, rain, all this kind of stuff.", + "tabProject": "That's it for the assets! But besides these, your project also has a bunch of settings for rendering, branding, packaging and whatnot.", + "tabProjectModules": "Ct.js is modular, and your projects may need additional modules that can be installed here.", + "tabProjectModuleDocs": "All the docs for enabled modules can be found here.", + "tabMainMenu": "Ct.js itself has plenty of options, which are stored in its main menu.", + "tabMainMenuSettings": "You can change the language and how ct.js looks in the Settings section.", + "tabMainMenuMeta": "If you'll need help later, you will be able to find all the official hubs in the Meta panel.", + "helpPanelReminder": "Also don't forget about the built-in docs! We do recommend completing official tutorials before starting your own projects.", + "buttonStartTutorial": "Open tutorials" + } }, "roomBackgrounds": { "add": "Add a Background", "depth": "Depth:", - "movement": "Movement speed (X, Y):", - "parallax": "Parallax (X, Y):", + "movement": "Movement speed:", + "parallax": "Parallax:", "repeat": "Repeat:", - "scale": "Scaling (X, Y):", - "shift": "Shift (X, Y):", + "scale": "Scaling:", + "shift": "Shift:", "notBackgroundTextureWarning": "This texture is not marked as a background. It will have gaps when exported.", "fixBackground": "Fix it.", "dismissWarning": "Dismiss." @@ -702,14 +734,22 @@ "moveTileLayer": "Move to a new depth", "show": "Show the layer", "hide": "Hide the layer", - "findTileset": "Find a Tileset" + "findTileset": "Find a Tileset", + "addTileLayer": "Add a tile layer" }, "roomView": { "name": "Name:", "width": "View width:", "height": "View height:", "isUi": "Is a UI layer?", - "events": "Room events", + "simulate": "Simulate", + "grid": "Grid", + "toggleDiagonalGrid": "Diagonal grid", + "changeGridSize": "Change cell size", + "events": "Events", + "gridOff": "Disable grid", + "xrayMode": "X-ray mode", + "colorizeTileLayers": "Colorize tile layers", "copies": "Copies", "backgrounds": "Backgrounds", "backgroundColor": "Background color:", @@ -718,7 +758,6 @@ "add": "Add", "none": "Nothing", "done": "Done", - "grid": "Set grid", "hotkeysNotice": "Ctrl = Delete, Alt = No grid, Shift = Multiple", "hotkeysNoticeMovement": "Ctrl = Delete, Shift = Select", "shift": "Shift everything", @@ -733,17 +772,26 @@ "selectAndMove": "Select and Move", "customProperties": "Custom Properties", "findTileset": "Find a tileset", + "resetView": "Reset view", "copyProperties": { "position": "Position", "rotation": "Rotation", - "scale": "Scale" + "scale": "Scale", + "opacity": "Opacity", + "tint": "Tint", + "multipleValues": "(Multiple)" + }, + "copyCustomProperties": { + "addProperty": "Add Property", + "property": "Property", + "value": "Value", + "nameOccupied": "This property is used by ct.js! You should come up with a different name." }, "restrictCamera": "Keep camera in a rectangle", "minimumX": "Min X", "minimumY": "Min Y", "maximumX": "Max X", "maximumY": "Max Y", - "gridOff": "Disable grid", "gridSize": "Grid size:", "toCenter": "To center", "shiftLabel": "Shift by:", @@ -755,7 +803,14 @@ "deleteTiles": "Delete tiles", "moveTilesToLayer": "Move to layer", "shiftTiles": "Shift tiles", - "changeCopyRotation": "Rotate" + "changeCopyRotation": "Rotate", + "tools": { + "select": "Select tool", + "addCopies": "Add copies", + "addTiles": "Add tiles", + "manageBackgrounds": "Manage backgrounds", + "roomProperties": "Room properties" + } }, "styleView": { "active": "Active", @@ -810,6 +865,8 @@ "updateFromClipboard": "Update from clipboard", "corrupted": "File is corrupted or missing! Closing now.", "showFrameIndices": "Show frame indices", + "blankTexture": "Export as blank texture", + "blankTextureNotice": "Exports the image as a transparent rectangle, thus being invisible in-game. Useful for making placeholders for ct.js editor while keeping bundle size slim.", "width": "Width:", "height": "Height:", "strip": "Line Strip / Polygon", @@ -863,7 +920,94 @@ "typefaceName": "Typeface name:" }, "licensePanel": { - "ctjsLicense": "Ct.js License (MIT)" + "ctjsLicense": "Ct.js License (MIT)", + "faq": "Frequently asked questions (non-normative section)", + "whoOwnsGamesQ": "Who owns games created in ct.js?", + "whoOwnsGamesA": "You and only you. Ct.js does not own anything you create in any way.", + "sellingGamesQ": "Can I sell games made in ct.js?", + "sellingGamesA": "Yes, you can sell your games and other projects, gather donations, and use your games in any other commercial applications.", + "possibleFeesQ": "Do I need to pay for ct.js? Will ct.js become paid someday?", + "possibleFeesA": "No, ct.js is free and will always be so. It doesn't have any hidden fees like Unity or Unreal Engine that require you paying after you earn a specific amount of money. Ct.js is open-source, and even if there will be any paid versions, the product you have now will always be accessible free of charge. You can send a donation or become a patron, though! It will help us pay bills and make ct.js better!", + "useInStudioQ": "Can I use ct.js in a studio or schools?", + "useInStudioA": "Sure, why not? Ct.js is open for personal, commercial, educational use, and whatnot. Just don't break the law, ok?", + "attributionQ": "Do I need to attribute ct.js or its developers? Can I disable its logo on the loading screen?", + "attributionA": "You can disable the ct.js logo, as the code of your game already has the necessary attributions.", + "attributionAAssets": "Some of the examples and demos may contain material that needs attribution, but that is already included in them.", + "theLicense": "The license (legal document)" + }, + "scriptables": { + "addEvent": "Add an event", + "removeEvent": "Remove the event", + "removeEventConfirm": "Are you sure you want to remove this event? This can't be undone!", + "changeArguments": "Change arguments", + "eventAlreadyExists": "The same event already exists!", + "localEventVars": "Local variables", + "createEventHint": "Create your first event in the left column, and define your logic here", + "coreEventsCategories": { + "lifecycle": "Lifecycle", + "actions": "Actions", + "pointer": "Pointer events", + "misc": "Miscellaneous", + "animation": "Animation", + "timers": "Timers" + }, + "coreEvents": { + "OnCreate": "Creation", + "OnRoomStart": "Room start", + "OnStep": "Frame start", + "OnDraw": "Frame end", + "OnDestroy": "Destruction", + "OnRoomEnd": "Room end", + "OnPointerClick": "Click", + "OnPointerSecondaryClick": "Secondary click", + "OnPointerEnter": "Pointer enter", + "OnPointerLeave": "Pointer leave", + "OnPointerDown": "Pointer down", + "OnPointerUp": "Pointer up", + "OnPointerUpOutside": "Pointer up (outside)", + "OnPointerWheel": "Wheel scroll", + "OnActionPress": "Action press", + "OnActionRelease": "Action release", + "OnActionDown": "Action down", + "OnFrameChange": "Frame change", + "OnAnimationLoop": "Animation loop", + "OnAnimationComplete": "Animation completed", + "Timer": "Timer $1" + }, + "coreParameterizedNames": { + "OnActionPress": "On %%action%% press", + "OnActionRelease": "On %%action%% release", + "OnActionDown": "On %%action%% down", + "Timer1": "1 • %%name%% (Timer)", + "Timer2": "2 • %%name%% (Timer)", + "Timer3": "3 • %%name%% (Timer)", + "Timer4": "4 • %%name%% (Timer)", + "Timer5": "5 • %%name%% (Timer)", + "Timer6": "6 • %%name%% (Timer)" + }, + "coreEventsArguments": { + "action": "Action", + "name": "Name", + "isUi": "UI event" + }, + "coreEventsLocals": { + "OnActionDown_value": "Current action's value", + "OnActionPress_value": "Current action's value" + }, + "coreEventsDescriptions": { + "OnCreate": "Triggers when your copy is created.", + "OnRoomStart": "Triggers when this room is created, either by switching to it or by adding it as a layer.", + "OnStep": "Happens at the beginning of every frame.", + "OnDraw": "Happens at the end of every frame. Good for animation updates.", + "OnDestroy": "Happens between \"frame start\" and \"frame end\" when this copy gets destroyed.", + "OnRoomEnd": "Triggers when you switch to another room, or when this room is removed after it was added as a layer.", + "OnActionPress": "Happens when an action's input becomes active — by pressing, clicking, flicking a joystick, etc.", + "OnActionRelease": "Happens when an action's input becomes inactive — by releasing buttons, resting joysticks, etc.", + "OnActionDown": "Runs every frame if an action's input is active.", + "OnAnimationLoop": "Fires every time an animation restarts.", + "OnAnimationComplete": "Fires once a non-looping animation finishes.", + "Timer": "Set the duration for this timer in seconds with this.timer$1 = 3;" + } }, "templates": { "create": "Create" @@ -882,7 +1026,9 @@ "depth": "Depth:", "opacity": "Opacity:", "blendMode": "Blend mode:", + "animationFPS": "Animation FPS:", "playAnimationOnStart": "Play animation on start", + "loopAnimation": "Loop animation", "blendModes": { "normal": "Normal", "add": "Add (burn)", @@ -890,4 +1036,4 @@ "screen": "Screen (lighten)" } } -} \ No newline at end of file +} diff --git a/app/data/i18n/French.json b/app/data/i18n/French.json index 095ed0bb4..dd9aaa98d 100644 --- a/app/data/i18n/French.json +++ b/app/data/i18n/French.json @@ -151,7 +151,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "exportPanel": { "hide": "Cacher", @@ -589,7 +591,10 @@ "SpringStream": "", "LucasDracula": "", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "Font par défault (Iosevka Light)", "codeFontOldSchool": "Old school", @@ -602,7 +607,9 @@ "heading": "Paramètres", "disableSounds": "", "changeDataFolder": "", - "forceProductionForDebug": "" + "forceProductionForDebug": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "Sauvegarder le projet", @@ -638,14 +645,36 @@ "fx": "FX", "restart": "", "project": "", - "templates": "Types" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "Types", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -716,7 +745,13 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +771,19 @@ "deleteTiles": "Supprimer les Tiles", "moveTilesToLayer": "Déplacer le calque", "shiftTiles": "Déplacer les Tiles", - "changeCopyRotation": "" + "changeCopyRotation": "", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Activer", @@ -803,6 +850,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "Changer la couleur du background", @@ -869,7 +917,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/German.json b/app/data/i18n/German.json index 67b9c85b0..47ce65ee5 100644 --- a/app/data/i18n/German.json +++ b/app/data/i18n/German.json @@ -125,7 +125,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "Neu", @@ -589,7 +591,10 @@ "SpringStream": "", "LucasDracula": "", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "Standard (Iosevka Light)", "codeFontOldSchool": "Old School", @@ -602,7 +607,9 @@ "heading": "Einstellungen", "disableSounds": "", "changeDataFolder": "", - "forceProductionForDebug": "" + "forceProductionForDebug": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "Projekt speichern", @@ -638,14 +645,36 @@ "fx": "FX", "restart": "", "project": "", - "templates": "Types" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "Types", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -716,7 +745,13 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +771,19 @@ "deleteTiles": "Tiles löschen ", "moveTilesToLayer": "Auf Ebene verschieben", "shiftTiles": "Tiles verschieben", - "changeCopyRotation": "" + "changeCopyRotation": "", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Aktiv", @@ -803,6 +850,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "Hintergrundfarbe ändern", @@ -869,7 +917,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Japanese.json b/app/data/i18n/Japanese.json index f86390759..9d008f292 100644 --- a/app/data/i18n/Japanese.json +++ b/app/data/i18n/Japanese.json @@ -125,7 +125,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "assetInput": { "changeAsset": "アセットを変更する", @@ -144,13 +146,6 @@ "old": "古い", "projectPalette": "プロジェクトのパレット" }, - "copyCustomProperties": { - "customProperties": "カスタムプロパティ", - "addProperty": "プロパティを追加", - "property": "プロパティ", - "value": "数字", - "delete": "削除" - }, "curveEditor": { "curveLineHint": "カーブをクリックしてポイントを追加", "dragPointHint": "ドラッグでポイントを移動、右クリックで削除", @@ -620,7 +615,10 @@ "SpringStream": "春の小川", "LucasDracula": "ルーカス・ドラキュラ", "Horizon": "地平線", - "HCBlack": "高コントラストの黒" + "HCBlack": "高コントラストの黒", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "language": "言語", "translateToYourLanguage": "ct.jsを翻訳する!", @@ -634,7 +632,9 @@ "codeDense": "高密度なレイアウト", "disableSounds": "UIサウンドを無効化", "changeDataFolder": "データフォルダの場所を設定", - "forceProductionForDebug": "デバッグエクスポートのためのプロダクションタスクの強制" + "forceProductionForDebug": "デバッグエクスポートのためのプロダクションタスクの強制", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "heading": "プロジェクト", @@ -670,7 +670,36 @@ "sounds": "音", "ui": "UI", "fx": "FX", - "templates": "テンプレート" + "templates": "テンプレート", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "roomBackgrounds": { "add": "背景を追加", @@ -722,7 +751,13 @@ "copyProperties": { "position": "位置", "rotation": "回転", - "scale": "大きさ" + "scale": "大きさ", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "プロパティを追加", + "property": "プロパティ", + "value": "数字" }, "restrictCamera": "カメラを四角に収める", "minimumX": "最小 X", @@ -741,7 +776,19 @@ "deleteTiles": "複数のタイルを削除", "moveTilesToLayer": "レイヤーに移動", "shiftTiles": "タイルに移動", - "changeCopyRotation": "回転" + "changeCopyRotation": "回転", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "有効", @@ -796,6 +843,7 @@ "updateFromClipboard": "クリップボードからの更新", "corrupted": "ファイルが壊れているか、見つかりません。今すぐ閉じる。", "showFrameIndices": "フレームインデックスを表示", + "blankTexture": "", "width": "横幅:", "height": "高さ:", "strip": "ラインストリップ/ポリゴン", @@ -874,7 +922,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "builtinAssetGallery": { "galleryTip": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Polish.json b/app/data/i18n/Polish.json index f79bb9f29..86f2ec773 100644 --- a/app/data/i18n/Polish.json +++ b/app/data/i18n/Polish.json @@ -125,7 +125,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "Nowy", @@ -589,7 +591,10 @@ "SpringStream": "", "LucasDracula": "", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "Domyślny (Iosevka Light)", "codeFontOldSchool": "Old school", @@ -602,7 +607,9 @@ "heading": "Ustawienia", "disableSounds": "", "changeDataFolder": "", - "forceProductionForDebug": "" + "forceProductionForDebug": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "Zapisz projekt", @@ -638,14 +645,36 @@ "fx": "", "restart": "", "project": "", - "templates": "Typy" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "Typy", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -716,7 +745,13 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +771,19 @@ "deleteTiles": "Usuń kafelki", "moveTilesToLayer": "Przenieś do warstwy", "shiftTiles": "Przesuń kafelki", - "changeCopyRotation": "" + "changeCopyRotation": "", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Aktywny", @@ -803,6 +850,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "Zmień kolor tła", @@ -869,7 +917,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Romanian.json b/app/data/i18n/Romanian.json index 8807389aa..4a289fc89 100644 --- a/app/data/i18n/Romanian.json +++ b/app/data/i18n/Romanian.json @@ -125,7 +125,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "Nou", @@ -589,7 +591,10 @@ "SpringStream": "", "LucasDracula": "", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "", "codeFontOldSchool": "", @@ -602,7 +607,9 @@ "heading": "Setări", "disableSounds": "", "changeDataFolder": "", - "forceProductionForDebug": "" + "forceProductionForDebug": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "Salvează proiectul", @@ -638,14 +645,36 @@ "fx": "", "restart": "", "project": "", - "templates": "Tipuri" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "Tipuri", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -716,7 +745,13 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +771,19 @@ "deleteTiles": "Șterge tile-urile", "moveTilesToLayer": "Mută în layer", "shiftTiles": "Deplasează tile-urile", - "changeCopyRotation": "" + "changeCopyRotation": "", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Activ", @@ -803,6 +850,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "Schimbă culoarea fundalului", @@ -869,7 +917,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Russian.json b/app/data/i18n/Russian.json index 68e8c83f7..2ea63cbfb 100644 --- a/app/data/i18n/Russian.json +++ b/app/data/i18n/Russian.json @@ -125,7 +125,11 @@ "скелетных спрайта", "скелетных спрайтов" ] - } + }, + "next": "Далее", + "previous": "Назад", + "undo": "Отменить", + "redo": "Вернуть" }, "colorPicker": { "old": "Старый", @@ -190,7 +194,8 @@ "vkontakte": "Паблик Вконтакте", "patreon": "Поддержи кота на Патреоне!", "templates": "Шаблоны", - "templatesInfo": "Начни разработку игры с одним из этих шаблонов. В них графика-заглушка, но прекрасно работающие механики. При выборе шаблона откроется выбор папки для твоего нового проекта." + "templatesInfo": "Начни разработку игры с одним из этих шаблонов. В них графика-заглушка, но прекрасно работающие механики. При выборе шаблона откроется выбор папки для твоего нового проекта.", + "boosty": "Поддержи ct.js на Boosty!" }, "onboarding": { "hoorayHeader": "Ух-ты! Мы сделали новый проект!", @@ -572,7 +577,7 @@ "deploy": { "exportDesktop": "Экспортировать для ПК", "successZipExport": "Успешно экспортировано в {0}.", - "zipExport": "Экспорт в .zip", + "zipExport": "Экспорт для веб", "heading": "Экспорт", "exportAndroid": "Экспорт на Android…" }, @@ -587,8 +592,12 @@ "SpringStream": "Весенний ручей", "LucasDracula": "Люкас Дракула", "Horizon": "Горизонт", - "HCBlack": "Высококонтрастная чёрная" + "HCBlack": "Высококонтрастная чёрная", + "RosePine": "Rosé Pine", + "RosePineMoon": "Rosé Pine Лунная", + "RosePineDawn": "Rosé Pine Рассветная" }, + "prideMode": "Прайд-режим", "codeFontDefault": "По умолчанию (Iosevka Light)", "codeFontOldSchool": "Старый-добрый", "codeFontSystem": "Системный", @@ -602,7 +611,8 @@ "translateToYourLanguage": "Переведите ct.js на свой язык!", "disableSounds": "Отключить звуки интерфейса", "changeDataFolder": "Изменить папку данных ct.js", - "forceProductionForDebug": " Включить релизные функции для дебаг-экспортов" + "forceProductionForDebug": " Включить релизные функции для дебаг-экспортов", + "altTemplateLayout": "Альт. вёрстка редактора шаблонов" }, "project": { "save": "Сохранить проект", @@ -638,14 +648,36 @@ "ui": "Интерфейс", "fx": "Эффекты", "restart": "Перезапустить", - "templates": "Шаблоны" - }, - "copyCustomProperties": { - "customProperties": "Пользовательские поля", - "addProperty": "Добавить поле", - "property": "Имя поля", - "value": "Значение", - "delete": "Удалить" + "templates": "Шаблоны", + "tour": { + "header": "Обзор ct.js", + "aboutTour": "Добро пожаловать в ct.js! Этот небольшой тур покажет основные элементы редактора, благодаря чему ты узнаешь, как его настроить и как создавать новые ассеты.", + "helpPanel": "Для начала давай обратим внимание на эту кнопку. Она очень важна в изучении ct.js!", + "helpPanelTabs": "В этой панели хранится вся официальная документация и уроки по ct.js и его модулям.

Также тут есть два блокнота — глобальный, что показывает одно и то же содержимое во всех проектах, и блокнот проекта, который хранится внутри файла твоего проекта.", + "projectResources": "Любой проект содержит ассеты разных видов. Каждый вид ассетов хранится в своей вкладке. Давай посмотрим самые важные типы ассетов.", + "tabTextures": "Текстуры — это изображения, которые ты можешь использовать в своих интерактивных объектах (которые называются Копиями), а также для фонов и спецэффектов. Текстуры сами по себе ничего не делают, но всё равно важны.", + "tabTexturesImport": "Текстуры можно создать из файлов на компьютере…", + "tabTexturesGallery": "…или импортировать из встроенной галереи ассетов.", + "tabTexturesClipboard": "Этой кнопкой можно создать текстуру из буфера обмена. Она особенно полезна в связке с графическими редакторами!", + "tabTexturesPlaceholders": "Также ты можешь создать простые картинки-заглушки этим инструментом.", + "tabTemplates": "Шаблоны используются для создания копий — интерактивных объектов, что помещаются на уровнях. Любой интерактивный объект в ct.js делается на основе одного из таких шаблонов. Шаблоны используют текстуры, и игровую логику ты задаёшь с помощью событий в этих шаблонах. После создания шаблона можно подробнее ознакомиться с процессом создания шаблонов кнопкой документации в редакторе.", + "tabRooms": "Другая важная вкладка — комнаты. Их также называют уровнями или сценами, и в них ты располагаешь свои Копии. Комнаты тоже могут иметь события, а также фоны.", + "tabSounds": "Звуки, наверное, — самая банальная вкладка.", + "tabSoundsImport": "Новые звуки можно создать этой кнопкой…", + "tabSoundsGallery": "…импортировать их из встроенной галереи…", + "tabSoundsRecord": "…или даже записать с микрофона!", + "tabInterlude": "Есть также ряд продвинутых ассетов.", + "tabUI": "Вкладка \"Интерфейс\" содержит шрифты и стили текста. Добавление шрифтов важно для одинакового отображения текстов на разных устройствах. А в редакторе стилей можно сделать заготовки для отображения текста. В редакторе также можно скопировать код для добавления надписей через код.", + "tabFX": "Во вкладке эффектов — редактор систем частиц. Это специальные графические эффекты для взрывов, магии, дыма, дождя и всего такого.", + "tabProject": "С ассетами закончили! Но помимо ассетов, в проекте есть ещё настройки рендера, упаковки, внешнего вида и т.д.", + "tabProjectModules": "Ct.js модульный, и добавить дополнительные модули можно здесь.", + "tabProjectModuleDocs": "Вся документация для включенных модулей складывается сюда.", + "tabMainMenu": "В самом ct.js полно настроек, которые хранятся в этом главном меню.", + "tabMainMenuSettings": "Тут можно сменить язык и как ct.js выглядит.", + "tabMainMenuMeta": "Если тебе понадобится помощь, ты сможешь найти официальные сообщества в этой панели.", + "helpPanelReminder": "Также не забывай про встроенную документацию! Мы настоятельно рекомендуем пройти официальные туториалы перед созданием собственного проекта.", + "buttonStartTutorial": "Открыть уроки" + } }, "assetViewer": { "addNewGroup": "Новая группа", @@ -683,13 +715,14 @@ "moveTileLayer": "Переместить на другую глубину", "show": "Показать слой", "hide": "Спрятать слой", - "findTileset": "Найти тайлсет" + "findTileset": "Найти тайлсет", + "addTileLayer": "Добавить слой тайлов" }, "roomView": { "name": "Имя:", "width": "Ширина вида:", "height": "Высота вида:", - "events": "События комнаты", + "events": "События", "copies": "Копии", "backgrounds": "Фоны", "backgroundColor": "Цвет фона", @@ -697,7 +730,7 @@ "add": "Добавить", "none": "Ничего", "done": "Сохранить", - "grid": "Включить сетку", + "grid": "Сетка", "hotkeysNotice": "Ctrl = Удалить, Alt = Без сетки, Shift = Много", "hotkeysNoticeMovement": "Ctrl = Удалить, Shift = Выделить", "shift": "Сместить вид", @@ -716,10 +749,19 @@ "copyProperties": { "position": "Позиция", "rotation": "Поворот", - "scale": "Размер" + "scale": "Размер", + "multipleValues": "(Разные)", + "opacity": "Непрозрачность", + "tint": "Оттенок" + }, + "copyCustomProperties": { + "addProperty": "Добавить поле", + "property": "Имя поля", + "value": "Значение", + "nameOccupied": "Это свойство уже используется ct.js! Тебе нужно выбрать другое имя." }, "customProperties": "Пользовательские поля", - "restrictCamera": "Ограничить камеру в прямоугольнике", + "restrictCamera": "Ограничить камеру в прямоугольник", "minimumX": "Мин. Х", "minimumY": "Мин. Y", "maximumX": "Макс. X", @@ -736,7 +778,20 @@ "deleteTiles": "Удалить плитки", "moveTilesToLayer": "Переместить в другой слой", "shiftTiles": "Сместить плитки", - "changeCopyRotation": "Повернуть" + "changeCopyRotation": "Повернуть", + "simulate": "Симуляция", + "toggleDiagonalGrid": "Диагональная сетка", + "changeGridSize": "Сменить размер сетки", + "xrayMode": "Режим рентгена", + "colorizeTileLayers": "Покрасить слои тайлов", + "tools": { + "select": "Выделение", + "addCopies": "Добавить копии", + "addTiles": "Добавить тайлы", + "manageBackgrounds": "Управление фонами", + "roomProperties": "Свойства комнаты" + }, + "resetView": "Сбросить вид" }, "styleView": { "active": "Активно?", @@ -790,6 +845,7 @@ "updateFromClipboard": "Обновить из буфера обмена", "corrupted": "Файл изображения повреждён или отсутствует! Невозможно открыть спрайт.", "showFrameIndices": "Показать индексы кадров", + "blankTexture": "Экспорт пустой текстурой", "width": "Ширина:", "height": "Высота:", "strip": "Ломаная / многоугольник", @@ -812,7 +868,8 @@ "marginX": "Отступ X:", "marginY": "Отступ Y:", "offX": "Сдвиг X:", - "offY": "Сдвиг Y:" + "offY": "Сдвиг Y:", + "blankTextureNotice": "Экспортирует текстуру прозрачным прямоугольником, делая её невидимой в игре. Полезно для создания заглушек для редактора, не занимая дополнительного места при экспорте." }, "soundView": { "import": "Импорт", @@ -844,7 +901,20 @@ "typefaceName": "Название семейства:" }, "licensePanel": { - "ctjsLicense": "Лицензия Ct.js (MIT)" + "ctjsLicense": "Лицензия Ct.js (MIT)", + "faq": "Часто задаваемые вопросы (неюридический текст)", + "whoOwnsGamesQ": "Кто владеет играми, созданными на ct.js?", + "whoOwnsGamesA": "Только ты. Ct.js не резервирует прав на то, что ты создаёшь.", + "sellingGamesQ": "Могу ли я продавать игры, сделанные на ct.js?", + "sellingGamesA": "Да, игры и другие проекты можно продавать, собирать с них донаты и использовать в других коммерческих целях.", + "possibleFeesQ": "Нужно ли мне платить за ct.js? Станет ли он платным?", + "possibleFeesA": "Нет. Ct.js бесплатен и всё время таким будет. В нём нет скрытых налогов/роялти как в Unity или Unreal Engine, в которых нужно платить после накопления определённой суммы. У ct.js открытый исходный код, и даже если вдруг и появятся его платные варианты, то, чем ты сейчас пользуешься, будет всегда доступно бесплатно. Но ты всё равно можешь отправить денюжку, если хочешь! Это поможет уплатить нологи и сделать ct.js лучше!", + "useInStudioQ": "Могу ли я использовать ct.js в студии или школах?", + "useInStudioA": "Почему бы и нет? Ct.js можно использовать в личных, коммерческих, образовательных и других целях. Но только в законных целях, окей?", + "attributionQ": "Нужно ли мне указывать авторство ct.js или его разработчиков? Могу ли я отключить логотип кота на экране загрузки?", + "attributionA": "Логотип можно отключить — вся необходимая атрибуция уже содержится в коде игры.", + "attributionAAssets": "Некоторые демки и примеры, правда, могут использовать материалы от третьих лиц, которые требуют указания автора, но в \nэтих проектах уже прописаны эти ссылки.", + "theLicense": "Лицензия (официальный документ)" }, "templates": { "create": "Создать" @@ -869,7 +939,9 @@ "add": "Добавить (выгорание)", "multiply": "Умножить (затемнение)", "screen": "Экран (осветление)" - } + }, + "loopAnimation": "Цикличная анимация", + "animationFPS": "Частота кадров в секунду:" }, "assetInput": { "changeAsset": "Нажмите, чтобы заменить ассет", @@ -889,5 +961,79 @@ "visitAuthorsItch": "Посетить itch.io автора", "visitAuthorsTwitter": "Посетить Twitter автора", "tipAuthor": "Подарите денюжку автору за их труд :D" + }, + "scriptables": { + "addEvent": "Добавить событие", + "removeEvent": "Удалить событие", + "removeEventConfirm": "Ты точно хочешь удалить это событие? Это нельзя будет отменить!", + "changeArguments": "Изменить аргументы", + "eventAlreadyExists": "Уже есть точно такое же событие!", + "localEventVars": "Локальные переменные", + "createEventHint": "Создай первое событие в колонке слева, а затем напиши здесь код", + "coreEventsCategories": { + "lifecycle": "Жизненный цикл", + "actions": "Действия", + "pointer": "События указателя", + "misc": "Разное", + "animation": "Анимация", + "timers": "Таймеры" + }, + "coreEvents": { + "OnCreate": "Создание", + "OnRoomStart": "Старт комнаты", + "OnStep": "Начало кадра", + "OnDraw": "Конец кадра", + "OnDestroy": "Уничтожение", + "OnRoomEnd": "Конец комнаты", + "OnPointerClick": "Клик", + "OnPointerSecondaryClick": "Альт. клик", + "OnPointerEnter": "Наведение указателем", + "OnPointerLeave": "Выход указателя", + "OnPointerDown": "Нажатие указателем", + "OnPointerUp": "Конец нажатия указателем", + "OnPointerUpOutside": "Конец нажатия снаружи", + "OnPointerWheel": "Колёсико", + "OnActionPress": "Нажатие действия", + "OnActionRelease": "Конец нажатия действия", + "OnActionDown": "Действие нажато", + "OnFrameChange": "Смена кадра", + "OnAnimationLoop": "Перезапуск анимации", + "OnAnimationComplete": "Конец анимации", + "Timer": "Таймер $1" + }, + "coreParameterizedNames": { + "OnActionPress": "При нажатии %%action%%", + "OnActionRelease": "Конец нажатия %%action%%", + "OnActionDown": "%%action%% зажато", + "Timer1": "1 • %%name%% (Таймер)", + "Timer2": "2 • %%name%% (Таймер)", + "Timer3": "3 • %%name%% (Таймер)", + "Timer4": "4 • %%name%% (Таймер)", + "Timer5": "5 • %%name%% (Таймер)", + "Timer6": "6 • %%name%% (Таймер)" + }, + "coreEventsArguments": { + "action": "Действие", + "name": "Имя", + "isUi": "Событие интерфейса" + }, + "coreEventsLocals": { + "OnActionDown_value": "Текущее значение действия", + "OnActionPress_value": "Текущее значение Действия" + }, + "coreEventsDescriptions": { + "OnCreate": "Срабатывает при создании копии.", + "OnRoomStart": "Срабатывает при создании комнаты — во время перехода или при её добавления как слоя.", + "OnStep": "Срабатывает вначале каждого кадра.", + "OnDraw": "Срабатывает в конце каждого кадра. Хороше место для апдейта анимации.", + "OnDestroy": "Срабатывает в середине кадра при удалении копии.", + "OnRoomEnd": "Срабатывает перед переходом в другую комнату, или когда эта комната была удалена как слой.", + "OnActionPress": "Срабатывает, когда действие становится активно — нажатиями, кликом, движением джойстиков и т.п.", + "OnActionRelease": "Срабатывает, когда действие перестаёт быть активно — когда отпускают клавиши, джойстики и т.п.", + "OnActionDown": "Срабатывает каждый кадр, пока методы ввода этого действия активны.", + "OnAnimationLoop": "Срабатывает каждый раз, когда цикличная анимация подходит к концу.", + "OnAnimationComplete": "Срабатывает один раз, когда нецикличная анимация заканчивается.", + "Timer": "Взведи таймер командой this.timer$1 = 3; (напр. 3 — это три секунды)" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Spanish.json b/app/data/i18n/Spanish.json index eff068789..fca1a8e0f 100644 --- a/app/data/i18n/Spanish.json +++ b/app/data/i18n/Spanish.json @@ -125,7 +125,9 @@ "", "" ] - } + }, + "next": "", + "previous": "" }, "colorPicker": { "current": "Nuevo", @@ -590,7 +592,10 @@ "SpringStream": "Corriente de Primavera", "LucasDracula": "Lucas Dracula", "Horizon": "", - "HCBlack": "" + "HCBlack": "", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "codeFontDefault": "Predeterminado (Iosevka Light)", "codeFontOldSchool": "Vieja Escuela", @@ -602,7 +607,9 @@ "codeDense": "Diseño Denso", "disableSounds": "", "changeDataFolder": "", - "forceProductionForDebug": "" + "forceProductionForDebug": "", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "save": "Guardar proyecto", @@ -638,14 +645,36 @@ "restart": "Reiniciar", "project": "Proyecto", "fx": "Effectos", - "templates": "Tipos" - }, - "copyCustomProperties": { - "customProperties": "", - "addProperty": "", - "property": "", - "value": "", - "delete": "" + "templates": "Tipos", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "assetViewer": { "addNewGroup": "", @@ -716,7 +745,13 @@ "copyProperties": { "position": "", "rotation": "", - "scale": "" + "scale": "", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "", + "property": "", + "value": "" }, "customProperties": "", "restrictCamera": "", @@ -736,7 +771,19 @@ "deleteTiles": "Eliminar tiles", "moveTilesToLayer": "Mover a capa", "shiftTiles": "Cambiar tiles", - "changeCopyRotation": "Rotar" + "changeCopyRotation": "Rotar", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Activar", @@ -803,6 +850,7 @@ "updateFromClipboard": "", "previewAnimationNotice": "", "showFrameIndices": "", + "blankTexture": "", "pasteCollisionMask": "", "copyCollisionMask": "", "bgColor": "Cambiar color de fondo", @@ -869,7 +917,9 @@ "add": "", "multiply": "", "screen": "" - } + }, + "animationFPS": "", + "loopAnimation": "" }, "assetInput": { "changeAsset": "", @@ -889,5 +939,71 @@ "visitAuthorsItch": "", "visitAuthorsTwitter": "", "tipAuthor": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + } } -} \ No newline at end of file +} diff --git a/app/data/i18n/Turkish.json b/app/data/i18n/Turkish.json index ac128cd89..2ebb0dc86 100644 --- a/app/data/i18n/Turkish.json +++ b/app/data/i18n/Turkish.json @@ -125,7 +125,9 @@ "edit": "Değiştir", "nothingToShowFiller": "Burada gösterilecek hiçbir şey yok!", "required": "Gerekli", - "settings": "Ayarlar" + "settings": "Ayarlar", + "next": "", + "previous": "" }, "assetInput": { "changeAsset": "Görseli değiştirmek için tıkla", @@ -158,13 +160,6 @@ "old": "Eski", "projectPalette": "Proje'nin paleti" }, - "copyCustomProperties": { - "customProperties": "Özel Özellikler", - "addProperty": "Özellik Ekle", - "property": "Özellik", - "value": "Değer", - "delete": "Sil" - }, "curveEditor": { "curveLineHint": "Nokta eklemek için kavise tıkla", "dragPointHint": "Noktayı hareket ettirmek için sürükle, silmek için sağ tıkla.", @@ -621,7 +616,10 @@ "SpringStream": "İlkbahar Yayını", "LucasDracula": "Lucas Drakula", "Horizon": "Ufuk", - "HCBlack": "Yüksek-kontrast siyah" + "HCBlack": "Yüksek-kontrast siyah", + "RosePine": "", + "RosePineMoon": "", + "RosePineDawn": "" }, "language": "Dil", "translateToYourLanguage": "ct.js'i çevir!", @@ -635,7 +633,9 @@ "codeDense": "Düzeni yoğunlaştır", "disableSounds": "Arayüz seslerini kapat", "changeDataFolder": "Veri klasörü yolunu ayarla", - "forceProductionForDebug": "Hata ayıklamaları dışarı aktarmak için üretim işlemlerini zorla" + "forceProductionForDebug": "Hata ayıklamaları dışarı aktarmak için üretim işlemlerini zorla", + "prideMode": "", + "altTemplateLayout": "" }, "project": { "heading": "Proje", @@ -671,7 +671,36 @@ "sounds": "Sesler", "ui": "Arayüz", "fx": "Efektler", - "templates": "Şablonlar" + "templates": "Şablonlar", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } }, "roomBackgrounds": { "add": "Arkaplan ekle", @@ -736,13 +765,31 @@ "copyProperties": { "position": "Pozisyon", "rotation": "Rotasyon", - "scale": "Boyut" + "scale": "Boyut", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "Özellik Ekle", + "property": "Özellik", + "value": "Değer" }, "restrictCamera": "Kamerayı dörtgende tut", "minimumX": "Minimum X", "minimumY": "Minimum Y", "maximumX": "Maksimum X", - "maximumY": "Maksimum Y" + "maximumY": "Maksimum Y", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } }, "styleView": { "active": "Aktif", @@ -797,6 +844,7 @@ "updateFromClipboard": "Panodan güncelle", "corrupted": "Dosya bozulmuş veya yok! Şimdi kapatılıyor.", "showFrameIndices": "Kare indekslerini göster", + "blankTexture": "", "width": "Genişlik:", "height": "Yükseklik:", "strip": "Çizgi şeridi / Poligon", @@ -888,6 +936,74 @@ "add": "Ekle (yanık)", "multiply": "Çoğalt (karanlık)", "screen": "Ekran (aydınlık)" + }, + "animationFPS": "", + "loopAnimation": "" + }, + "scriptables": { + "addEvent": "", + "removeEvent": "", + "removeEventConfirm": "", + "changeArguments": "", + "eventAlreadyExists": "", + "localEventVars": "", + "createEventHint": "", + "coreEventsCategories": { + "lifecycle": "", + "actions": "", + "pointer": "", + "misc": "", + "animation": "", + "timers": "" + }, + "coreEvents": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnPointerClick": "", + "OnPointerSecondaryClick": "", + "OnPointerEnter": "", + "OnPointerLeave": "", + "OnPointerDown": "", + "OnPointerUp": "", + "OnPointerUpOutside": "", + "OnPointerWheel": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnFrameChange": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "" + }, + "coreEventsArguments": { + "action": "" + }, + "coreEventsLocals": { + "OnActionDown_value": "", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "", + "OnRoomStart": "", + "OnStep": "", + "OnDraw": "", + "OnDestroy": "", + "OnRoomEnd": "", + "OnActionPress": "", + "OnActionRelease": "", + "OnActionDown": "", + "OnAnimationLoop": "", + "OnAnimationComplete": "", + "Timer": "" } } } diff --git a/app/data/i18n/Ukranian.json b/app/data/i18n/Ukranian.json new file mode 100644 index 000000000..ffb3f023b --- /dev/null +++ b/app/data/i18n/Ukranian.json @@ -0,0 +1,1009 @@ +{ + "me": { + "id": "Uk", + "native": "Українська", + "eng": "Ukranian" + }, + "common": { + "add": "Добавити", + "apply": "Застосувати", + "cancel": "Скасувати", + "cannotBeEmpty": "Не може бути порожнім", + "clear": "Очистити", + "confirmDelete": "Ви впевнені, що хочете видалити {0}? Скасувати видалення неможливо!", + "contribute": "Внести внесок у розробку", + "copy": "Копіювати", + "copyName": "Скопіювати назву", + "couldNotLoadFromClipboard": "Неможливо завантажити дані з буфера обміну", + "cut": "Вирізати", + "delete": "Видалити", + "donate": "Допомогти гривнею", + "done": "Готово!", + "duplicate": "Клонувати", + "exit": "Вихід", + "loading": "Загрузка…", + "name": "Назва:", + "no": "Ні", + "none": "Нічого", + "ok": "Ок", + "open": "Відкрити", + "paste": "Вставити", + "pastedFromClipboard": "Добавлено з буфера обміну", + "rename": "Перейменувати", + "save": "Зберегти", + "select": "Вибрати…", + "sort": "Сортирувати:", + "wrongFormat": "Невірний формат файлу", + "yes": "Так", + "zoom": "Масштаб", + "zoomIn": "Приблизити", + "zoomOut": "Віддалити", + "filter": "Відфільтрувати:", + "selectDialogue": "Вибрати…", + "search": "Пошук:", + "close": "Закрити", + "edit": "Змінити", + "nothingToShowFiller": "Нема чого показувати!", + "required": "Потрібно", + "settings": "Налаштування", + "fieldTypes": { + "checkbox": "Чекбокс", + "code": "Поле з кодом", + "color": "Колір", + "group": "Група полів", + "h1": "Заголовок 1-го рівня", + "h2": "Заголовок 2-го рівня", + "h3": "Заголовок 3-го рівня", + "h4": "Заголовок 4-го рівня", + "number": "Число", + "point2D": "2D точка", + "radio": "Список з вибором", + "slider": "Слайдер", + "sliderAndNumber": "Слайдер з чисельним полем", + "table": "Таблиця", + "text": "Короткий текст", + "textfield": "Текст", + "texture": "Текстура", + "template": "Шаблон", + "room": "Кімната", + "sound": "Звук", + "tandem": "Система частинок" + }, + "newName": "Нове ім'я:", + "saveProject": "Зберегти проект", + "openProject": "Відкрити проект…", + "savedMessage": "Ваш проект був успішно збережений.", + "reallyExitConfirm": "Ви впевнені, що хочете вийти? Усі незбережені дані будуть втрачені!", + "notFoundOrUnknown": "Помилка читання файлу. Переконайтеся, що він існує", + "nameTaken": "Це ім'я вже зайняте", + "fastImport": "Швидкий імпорт", + "addToNotes": "Додати до нотаток", + "noRooms": "Хоч би як це було сумно, вам необхідна як мінімум одна кімната для експорту :)", + "tileLayer": "шар тайлів", + "ctSite": "Домашня сторінка ct.js", + "docsShort": "Поки", + "docsLong": "Документація", + "openAssetGallery": "Галерея", + "assetTypes": { + "textures": [ + "текстура", + "тектури", + "текстур" + ], + "templates": [ + "шаблон", + "шаблону", + "шаблонів" + ], + "emitterTandems": [ + "тандем частинок", + "тандему частинок", + "тандемів частинок" + ], + "rooms": [ + "кімната", + "кімнати", + "кімнат" + ], + "fonts": [ + "шрифт", + "шрифту", + "шрифтів" + ], + "styles": [ + "стиль", + "стилю", + "стилів" + ], + "sounds": [ + "звук", + "звуку", + "звуків" + ], + "skeletons": [ + "скелетний спрайт", + "скелетного спрайту", + "скелетних спрайтів" + ] + }, + "next": "", + "previous": "" + }, + "colorPicker": { + "old": "Старий", + "current": "Новий", + "globalPalette": "Глобальна палітра", + "projectPalette": "Палітра проекту" + }, + "docsShortcut": { + "openDocs": "Відкрити документацію" + }, + "exportPanel": { + "hide": "У фоні", + "working": "Працюємо…", + "debug": "Версія для налагодження", + "export": "Експортувати", + "exportPanel": "Експорт проекту", + "log": "Логи", + "windowsCrossBuildWarning": "Щоб пакувати ігри для Windows з Лінукса або MacOS, потрібно встановити Wine. Інструкції по установці Wine різні від системи до системи, так що краще погуглить самі :)", + "cannotBuildForMacOnWin": "На жаль, Windows може робити для маків тільки зламані пакети. Спробуйте зробити білд на лінуксі - наприклад, у віртуалці. Це безкоштовно!", + "firstRunNotice": "При першому експорті ct.js завантажить додаткові файли для кожної платформи. Це займе час, але після цього процес буде практично миттєвим.", + "projectTitleRequired": "Необхідно додати назву проекту у вкладці Проект → Авторство → Назва проекту.", + "appIdRequired": "Для розповсюдження необхідно вказати унікальний appID у вкладці Проект → Авторство → ID програми.", + "noAndroidSdkFound": "Не вдалося знайти Android SDK (змінна оточення ANDROID_SDK_ROOT не призначена). Ви можете отримати Android SDK шляхом встановлення Android Studio:", + "envVarNotice": "Можливо, тобі потрібно вручну задати змінні оточення і перезапустити комп'ютер.", + "downloadAndroidStudio": "Скачати Android Studio", + "requiresInternetNotice": "Ця операція вимагає з'єднання з Інтернетом для початкового налаштування кожного проекту.", + "noJdkFound": "Не знайдено JDK 11. Змінна оточення JAVA_HOME не призначена або не вказує на JDK 11. Ви можете завантажити JDK 11 тут:", + "downloadJDK": "Завантажити JDK 11" + }, + "intro": { + "loading": "Зачекайте, коти набирають швидкість світла...", + "loadingProject": "Завантаження проекту…", + "newProject": { + "button": "Створити", + "input": "Ім'я проекту, латиниця та цифри…", + "text": "Новий проект", + "selectProjectFolder": "Виберіть папку, в якій зберегти проект", + "saveProjectHere": "Зберегти проект тут", + "nameError": "Помилка імені проекту" + }, + "recovery": { + "message": "

Відновлення

ct.js знайшов файл відновлення. Ймовірно, ваш проект не був коректно збережений, або ж ct.js аварійно закрився. Ось коли ці два файли були востаннє змінені:

Вибраний файл: {0} {1}
Файл відновлення: {2} {3}

Який файл слід відкрити?

", + "loadTarget": "Вибраний файл", + "loadRecovery": "Файл відновлення", + "newer": "(новіше)", + "older": "(старіше)" + }, + "homepage": "Офіційний сайт", + "latestVersion": "Доступна версія $1", + "forgetProject": "Забути цей проект", + "browse": "Огляд…", + "latest": "Останні проекти", + "twitter": "Канал у Twitter", + "discord": "Спільнота в Discord", + "loadingProjectError": "Не вдається відкрити проект через таку помилку:", + "unableToWriteToFolders": "Ct.js не вдалося знайти відповідне місце для проектів! Переконайтеся, що папка ct.js знаходиться в каталозі, доступному для читання.", + "examples": "Приклади", + "createOrBrowseJunction": "або", + "cloneProject": "Схилювати проект у нове місце", + "github": "Коте на Гітхабі", + "itch": "Сторінка ct.js на itch.io", + "vkontakte": "Паблік Вконтакті", + "patreon": "Підтримай кота на Патреоні!", + "templates": "Шаблони", + "templatesInfo": "Почни розробку гри з одним із цих шаблонів. У них графіка-заглушка, але механіки, що чудово працюють. При виборі шаблону відкриється вибір папки для твого нового проекту." + }, + "onboarding": { + "hoorayHeader": "Ух-ти! Ми зробили новий проект!", + "nowWhatParagraph": "Але що ж далі?", + "openSpaceShooterTutorial": "Навчитися робити космічну стрілялку", + "openPlatformerTutorial": "Навчитися робити платформери", + "openJettyCatTutorial": "Навчитися робити Флеппі Кіт", + "doNothing": "Пропустити цей екран", + "showOnboardingCheckbox": "Показувати цей екран під час створення нових проектів" + }, + "settings": { + "actions": { + "heading": "Дії та методи введення", + "actions": "Дії", + "addAction": "Додати дію", + "addMethod": "Додати метод введення", + "deleteAction": "Видалити цю дію", + "deleteMethod": "Видалити цей метод", + "inputActionNamePlaceholder": "Назва дії", + "methodModuleMissing": "Модуль для цього методу введення відсутня", + "methods": "Методи введення", + "multiplier": "Множитель", + "noActionsYet": "Дії дозволяють розробнику реагувати на події різних методів введення одночасно, а також динамічно змінювати налаштування управління - все через єдиний API. Дізнайтеся про них більше, натиснувши на іконку документації вище.", + "makeFromScratch": "Створити з нуля", + "presets": "Шаблони", + "presetXYMovement": "Рух XY", + "presetTouchAndMouse": "Миша і сенсор", + "presetCustom": "Вставити свій", + "exportActionPreset": "Експортувати як шаблон", + "importErrorMissingModules": "Не вдається імпортувати шаблон, тому що у твоїй версії ct.js відсутні наступні котомоди: $1.", + "importErrorNotCtJsPreset": "Здається, це не файл-шаблон дій для ct.js." + }, + "authoring": { + "heading": "Авторство", + "author": "Розробник:", + "site": "Сайт автора:", + "title": "Назва:", + "version": "Версія:", + "versionPostfix": "Постфікс:", + "appId": "ID програми", + "appIdExplanation": "В основному використовується для білдів для мобільних пристроїв. Це унікальний рядок, що позначає твою гру. Зазвичай пишеться у форматі домензона.розробник.ім'япроекту - наприклад, rocks.ctjs.catsteroids" + }, + "branding": { + "heading": "Брендинг", + "accent": "Акцентний колір:", + "accentNotice": "Визначає колір екрану завантаження та деяких місць на мобільних пристроях.", + "icon": "Іконка гри:", + "iconNotice": "Це має бути квадратна текстура з одним кадром і розміром мінімум 256x256 пікселів.", + "invertPreloaderScheme": "Інвертувати колірну схему екрана завантаження", + "hideLoadingLogo": "Сховати лого \"Зроблено з ct.js\" на екрані завантаження гри", + "splashScreen": "Обкладинка:", + "splashScreenNotice": "Зображення буде використовуватися для білдів під мобільні пристрої. Розмір зображення — мінімум 1920x1920 пікселів. Воно змінюватиме розмір і обрізатиметься під портретну або ландшафтну орієнтацію, тому перевір, що найважливіше розташоване по центру.", + "forceSmoothIcons": "Використовувати гладкі іконки всупереч настройкам рендеру", + "forceSmoothSplashScreen": "Використовувати гладку обкладинку всупереч настройкам рендеру" + }, + "rendering": { + "heading": "Налаштування графіки", + "framerate": "Кадрів за секунду:", + "highDensity": "Підтримувати високу щільність пікселів (напр. на ретіна-екранах)", + "maxFPS": "Максмальна частота кадрів:", + "hideCursor": "Сховати системний курсор", + "desktopBuilds": "Збірки для ПК", + "launchMode": "Запустити в режимі:", + "launchModes": { + "maximized": "Розгорнутий на весь екран", + "fullscreen": "Повноекранний", + "windowed": "Віконний" + }, + "pixelatedRender": "Тут і в проекті відключати згладжування (зберігати пікселі)", + "usePixiLegacy": "Додати старий рендерер, заснований на конвасі, щоб підтримувати старі браузери та графічні карти (додає приблизно 20кбайт до гри)", + "mobileBuilds": "Білди для мобільних пристроїв", + "screenOrientation": "Положення екрана:", + "screenOrientations": { + "unspecified": "Будь-яке", + "landscape": "Ландшафтне", + "portrait": "Портретне" + } + }, + "scripts": { + "heading": "Скрипти користувача", + "addNew": "Додати новий скрипт", + "deleteScript": "Видалити цей скрипт", + "moveDown": "Поставити нижче", + "moveUp": "Поставити вище", + "newScriptComment": "Використовуйте скрипти для створення функцій та імпорту невеликих бібліотек" + }, + "modules": { + "heading": "Котомоди" + }, + "catmodsSettings": "Налаштування котомодів", + "export": { + "heading": "Налаштування експорту", + "functionWrap": "Повернути весь код у функцію. Робить налагодження складніше, але ізолює код гри від іншого оточення. Не рекомендується включати під час розробки.", + "codeModifier": "Трансформування коду", + "obfuscateWarning": "Код працюватиме на 15-80% повільніше, але його буде дуже складно повернути до вихідного виду.", + "codeModifierAndWrapNote": "Зверніть увагу, що ці налаштування працюють тільки для експортованих проектів (\"Експорт для веб\" та \"Експорт для ПК\"), тому що інакше вони уповільнюють експорт і ускладнюють налагодження. Ви можете змусити застосовувати ці функції для налагодження в Головному меню → Установки → Увімкнути релізні функції для дебаг-експортів", + "codeModifiers": { + "none": "Ніякі", + "minify": "Стиснути", + "obfuscate": "Обфусфувати" + } + }, + "content": { + "heading": "Редактор типів контенту", + "addContentType": "Додати тип", + "missingTypeName": "Неназваний тип контенту", + "unnamedContentTypeHint": "Цей тип контенту не названий. Його не можна буде використовувати грі, доки ти не вкажеш йому ім'я.", + "typeName": "Ім'я типу контенту", + "typeNameHint": "Ім'я типу, як воно буде використовуватися в коді. Приклади: GearItems, EnemySkills, Cities.", + "typeReadableName": "Зручне ім'я", + "typeReadableNameHint": "Ім'я для показу в редакторі ct.js", + "icon": "Значок", + "typeSpecification": "Схема даних", + "fieldName": "Ім'я", + "fieldNameHint": "Ім'я поля, як воно буде використовуватися в коді. Наприклад: power, hp, spawnType.", + "fieldReadableName": "Зручне ім'я", + "fieldReadableNameHint": "Використатиметься в редакторі записів всередині редактора.", + "fieldType": "Тип", + "deleteContentType": "Видалити цей тип контенту", + "confirmDeletionMessage": "Ти точно хочеш видалити цей тип контенту? Це необоротно, а також видалити всі записи цього типу контенту.", + "gotoEntries": "Перейти до записів", + "entries": "Записи", + "array": "Масив" + }, + "contentTypes": "Типи контенту" + }, + "modules": { + "author": "Автор котомоду", + "help": "Документація", + "methods": "Методи", + "parameters": "Параметри", + "info": "Інфо", + "license": "Ліцензія", + "logs": "Лог змін", + "logs2": "Лог змін", + "settings": "Налаштування", + "importModules": "Імпортувати модулі", + "dependencies": "Залежності:", + "optionalDependencies": "Опціональні залежності:", + "enabledModules": "Увімкнені модулі", + "availableModules": "Доступні модулі", + "filter": "Фільтр", + "categories": { + "customization": "Кастомізація", + "utilities": "Утиліти", + "media": "Медіа", + "misc": "Різне", + "desktop": "Десктоп-складання", + "motionPlanning": "Планування пересування", + "inputs": "Методи введення", + "fx": "Ефекти", + "mobile": "Мобільні пристрої", + "integrations": "Інтеграції", + "tweaks": "Налаштування", + "networking": "Мережа" + }, + "preview": "(ранній дрступ)", + "previewTooltip": "Цей модуль ще не був випущений та наданий для раннього доступу.", + "deprecatedTooltip": "Цей модуль не підтримується і буде видалений у майбутніх версіях." + }, + "texture": { + "create": "Створити", + "import": "Імпорт", + "skeletons": "Скелетна анімація", + "createTemplate": "Створити шаблон із цією текстурою", + "importFromClipboard": "Імпортувати з буфера обміну", + "generatePlaceholder": "Створити заглушку", + "textures": "Текстури" + }, + "sounds": { + "create": "Створити", + "record": "Записати" + }, + "styles": { + "create": "Створити", + "styles": "Стилі написів" + }, + "fonts": { + "fonts": "Шрифти", + "import": "Імпорт TTF", + "italic": "Похилий" + }, + "particleEmitters": { + "emittersHeading": "Системи частинок", + "emitterHeading": "Емітер", + "from": "Від:", + "to": "До:", + "textureHeading": "Текстура", + "selectTexture": "Вибрати…", + "importBuiltin": "Імпорт вбудованої…", + "colorAndOpacityHeading": "Колір і прозорість", + "stepped": "Різкий перехід", + "steppedColor": "Різкий перехід кольору", + "steppedAlpha": "Різкий перехід прозорості", + "blendMode": "Режим змішування:", + "regular": "Звичайний", + "darken": "Затемнення", + "lighten": "Освітлення", + "burn": "Горіння", + "scalingHeading": "Розмір", + "scale": "Розмір:", + "minimumSize": "Мінімальний розмір:", + "velocityHeading": "Швидкість", + "velocity": "Швидкість:", + "minimumSpeed": "Мінімальна швидкість:", + "maxSpeed": "Максимальна швидкість:", + "gravityHeading": "Гравітація", + "gravityNotice": "Якщо гравітація відрізняється від (0;0), то інтерполяція швидкості буде відключена, тобто працюватиме тільки перший вузол у графіку швидкості.", + "directionHeading": "Напрям", + "startingDirection": "Початковий напрямок", + "preserveTextureDirection": "Не обертати текстуру", + "rotationHeading": "Поворот", + "rotationSpeed": "Швидкість повороту speed", + "rotationAcceleration": "Прискорення повороту:", + "spawningHeading": "Створення частинок", + "timeBetweenBursts": "Час між двома викидами:", + "spawnAtOnce": "Частинок у викиді:", + "chanceToSpawn": "Шанс створення частки:", + "maxParticles": "Макс. кількість частинок:", + "lifetime": "Час життя частки, в с.", + "emitterLifetime": "Час життя емітера, в сек.:", + "prewarmDelay": "Розігрів / пауза, в сек.:", + "prewarmDelayNotice": "Негативні значення підготують ефект перед його показом, що корисно для довгих ефектів на кшталт частинок пилу або туману, які мають бути на екрані вже при старті кімнати; позитивні значення відкладають ефект.", + "shapeAndPositioningHeading": "Форма і розташування", + "spawnType": "Форма емітера:", + "spawnShapes": { + "point": "Точка", + "rectangle": "Прямокутник", + "circle": "Коло", + "ring": "Кільце", + "star": "Зірка" + }, + "width": "Ширіна:", + "height": "Висота:", + "radius": "Радіус:", + "starPoints": "Кінців:", + "startAngle": "Поворот, в град.:", + "relativeEmitterPosition": "Розташування щодо інших емітерів", + "addEmitter": "Додати ще емітер", + "reset": "Скинути прев'ю", + "changeBg": "Змінити фон", + "inspectorComplete": "Готово!", + "alreadyHasAnImportingTexture": "У проекті вже є текстура $1. Або змініть її, або видаліть, але, швидше за все, ви намагаєтеся заново імпортувати ту саму текстуру :)", + "minimumSizeHint": "При малих значеннях випадково змінює розмір частинки. Чим менше значення, тим сильніший ефект.", + "minimumSpeedHint": "При малих значеннях випадковим чином знижує швидкість частинки; чим менше значення, тим повільніше частка.", + "showShapeVisualizer": "Показати форму емітера", + "changeGrid": "Розмір сітки", + "newGridSize": "Новий розмір сітки:", + "setPreviewTexture": "Підкласти текстуру" + }, + "rooms": { + "create": "Додати", + "makeStarting": "Зробити стартовою кімнатою" + }, + "notepad": { + "local": "Блокнот проекту", + "global": "Загальний блокнот", + "backToHome": "Назад на головну документацію", + "modulesPages": "Документація до модулів", + "helpPages": "Довідка" + }, + "patreon": { + "patronsHeader": "Наші покровителі", + "businessShuttles": "Бізнес-шатли", + "noShuttlesYet": "Поки немає бізнес-шатлів: c Ваша компанія може виявитися першою!", + "shuttlesDescription": "Бізнес-шатли - партнери ct.js. Вони виводяться на головній сайту ct.js та на інших сторінках, напр. на itch.io.", + "spacePirates": "Космічні пірати", + "noPiratesYet": "Поки немає космічних піратів: c", + "piratesDescription": "У космічних піратів пріоритетна підтримка через Discord сервер, а ще у них на цьому ж сервері є класна роль, плюс вони виводяться тут.", + "spaceProgrammers": "Космічні програмісти", + "programmersDescription": "\"Космічний програміст\" - вже не існуючий ранг, який був доступний до того, як ct.js став опенсорсним. Ранг давав доступ до вихідників різних джем-ігор.", + "aspiringAstronauts": "Астронавти-початківці", + "noAstronautsYet": "Поки що немає астронавтів-початківців :c", + "astronautsDescription": "Астронавти отримують особливу роль на Discord-сервері і виводяться тут!", + "thankAllPatrons": "Дякую всім покровителям ComigoGames - нинішнім і попереднім - ваша підтримка допомагає Коміго рухатися вперед, розробляючи все більш круті проги! :)", + "becomeAPatron": "Стати покровителем", + "aboutFillers": [ + "круті з усіх боків 😎", + "— приємний співрозмовник 🤗", + "ще належить стати зіркою 💫", + "- просто диво! ⭐", + "- хороший друг! 🤝", + "— на них можна покластися! 🙏", + "із золотим серцем 🧡", + "-чарівник 🔮", + "готові допомогти! 💪", + "- супергерой! 🦸", + "ще є, що показати 🦹", + "- нерозгадана таємниця 🔍", + "- просто космос! ✨", + ", можливо, насправді робот 🤖", + "подібні до бурхливого полум'я! 🔥", + "привносить надію та світло 🌞", + "елегантні та красиві 🎩" + ], + "aboutPatrons": "Тут список людей, які допомагають ComigoGames на Патреоні за допомогою періодичних пожертв. Не всі тут прийшли від ct.js; деякі пожертвували на інше програмне забезпечення від Коміго. Секретик: якщо ви теж створюєте на Патреоні і зробите пожертву, тут з'явиться посилання на вашу сторінку - маленька допомога вам і вашим творінням :)" + }, + "curveEditor": { + "curveLineHint": "Натисніть, щоб додати вузол", + "dragPointHint": "Переміщуйте вузол перетягуванням, або натисніть правою кнопкою миші, щоб видалити його", + "pointTime": "Час:", + "pointValue": "Значення:" + }, + "debuggerToolbar": { + "pause": "Пауза", + "resume": "Продовжити", + "restartGame": "Перезапустити гру", + "restartRoom": "Перезапустити кімнату", + "switchRoom": "Перейти до кімнати…", + "toggleDevTools": "Переключити консоль", + "screenshot": "Зробити скріншот", + "enterFullscreen": "Повноекранний режим", + "exitFullscreen": "Вийти з повноекранного режиму", + "links": "Посилання та QR-коди", + "openExternal": "Відкрити в браузері", + "close": "Закрити" + }, + "docsPanel": { + "documentation": "Документація", + "reference": "Список методів" + }, + "extensionsEditor": { + "noEntries": "Ще немає записів.", + "addRow": "Додати рядок", + "actions": "Дії", + "values": "Значення", + "moveDown": "Вниз", + "moveUp": "Вгору", + "deleteRow": "Видалити рядок" + }, + "textureGenerator": { + "name": "Ім'я текстури:", + "width": "Ширіна:", + "height": "Висота:", + "color": "Колір фону:", + "label": "Напис:", + "optional": "(опціонально)", + "createAndClose": "Створити та закрити", + "createAndContinue": "Створити та додати ще", + "scalingAtX4": "Масштабування х4 для маленької текстури", + "generationSuccessMessage": "Успішно додали текстуру $1 у проект.", + "filler": "Філлер:", + "fillerNone": "Нічого", + "fillerCross": "Перехрестя", + "fillerLabel": "Текст", + "form": "Форма", + "formRectangular": "Прямокутна", + "formRound": "Кругла", + "formDiamond": "Ромб", + "fillerArrow": "Стрілка" + }, + "textureInput": { + "jumpToTexture": "Перейти до текстури", + "changeTexture": "Змінити текстуру" + }, + "writableFolderPrompt": { + "headerSelectFolderForData": "Виберіть папку для даних ct.js", + "paragraphCouldNotPickDirectory": "О ні! Ct.js не зміг підібрати папку для ваших проектів, білдів, і для налагодження. Зазвичай ct.js сам знаходить таку папку, але цього разу всі кандидати виявилися заблокованими для запису.", + "paragraphDirectoryDirections": "Це можна виправити. Натисніть кнопку нижче і виберіть папку, в якій ct.js зберігатиме такі дані. Якщо не впевнені, створіть папку ct.js в папці Документи.", + "selectFolder": "Вибрати папку..." + }, + "writableFolderSelector": { + "folderDoesNotExist": "Здається, такої папки не існує… Як вам це вдалося?", + "notADirectory": "Здається, це не папка, а файл. Як вам це вдалося?", + "folderNotWritable": "У вас немає прав на запис у цій папці. Виберіть іншу.", + "complete": "Налаштування прийнято, все добре ✅" + }, + "mainMenu": { + "troubleshooting": { + "toggleDevTools": "Відкрити девтулзи", + "copySystemInfo": "Скопіювати дані про систему", + "systemInfoWait": "Зараз збираю дані...", + "systemInfoDone": "Готово!", + "disableAcceleration": "Вимкнути графічне прискорення (вимагає перезапуск)", + "disableBuiltInDebugger": "Вимкнути вбудований налагоджувач ігор", + "postAnIssue": "Зайти на GitHub", + "heading": "У разі несправностей" + }, + "deploy": { + "exportDesktop": "Експорт для ПК", + "successZipExport": "Успішно експортовано до {0}.", + "zipExport": "Експорт у .zip", + "heading": "Експорт", + "exportAndroid": "Експорт на Android..." + }, + "latestProjects": { + "recentProjects": "Останні проекти" + }, + "settings": { + "theme": "Тема", + "themes": { + "Day": "Денна", + "Night": "Нічна", + "SpringStream": "Весняний струмок", + "LucasDracula": "Люкас Дракула", + "Horizon": "Горизонт", + "HCBlack": "Висококонтрастна чорна", + "RosePine": "Rosé Pine", + "RosePineMoon": "Rosé Pine Місячна", + "RosePineDawn": "Rosé Pine Світанок" + }, + "prideMode": "Прайд-режим", + "codeFontDefault": "За замовчуванням (Iosevka Light)", + "codeFontOldSchool": "Старий-добрий", + "codeFontSystem": "Системний", + "codeFontCustom": "Користувацький...", + "newFont": "Новий шрифт:", + "codeFont": "Шрифт для коду", + "codeLigatures": "Лігатури", + "codeDense": "Менша висота лінії", + "heading": "Налаштування", + "language": "Мова", + "translateToYourLanguage": "Перекладіть ct.js своєю мовою!", + "disableSounds": "Вимкнути звуки інтерфейсу", + "changeDataFolder": "Змінити папку даних ct.js", + "forceProductionForDebug": " Включити релізні функції для дебаг-експортів", + "altTemplateLayout": "Альт. верстка редактора шаблонів" + }, + "project": { + "save": "Зберегти проект", + "openIncludeFolder": "Відкрити папку include", + "openProject": "Відкрити проект…", + "openExample": "Відкрити приклад…", + "startScreen": "До стартового екрану", + "successZipProject": "Проект успішно упакований у {0}.", + "zipProject": "Упакувати проект у .zip", + "heading": "Проект" + }, + "meta": { + "license": "Ліцензія", + "visitDiscordForGamedevSupport": "Discord-сервер", + "openIconList": "Відкрити список значків", + "heading": "Мета", + "twitter": "Канал у Twitter", + "vkontakte": "Паблік Вконтакті", + "ctjsForum": "Приєднатися до форуму ct.js", + "openStylebook": "Відкрити стайл-бук CSS" + } + }, + "appView": { + "ctIDE": "ct.IDE", + "texture": "Текстури", + "launch": "Пуск", + "launchHotkeys": "(F5, або Alt+F5, щоб запустити в браузері за замовчуванням)", + "min": "Переключити повноекранний режим", + "patrons": "Патрони-покровителі", + "rooms": "Кімнати", + "project": "Проект", + "sounds": "Звуки", + "ui": "Інтерфейс", + "fx": "Ефекти", + "restart": "Перезапустити", + "templates": "Шаблони", + "tour": { + "header": "", + "aboutTour": "", + "helpPanel": "", + "helpPanelTabs": "", + "projectResources": "", + "tabTextures": "", + "tabTexturesImport": "", + "tabTexturesGallery": "", + "tabTexturesClipboard": "", + "tabTexturesPlaceholders": "", + "tabTemplates": "", + "tabRooms": "", + "tabSounds": "", + "tabSoundsImport": "", + "tabSoundsGallery": "", + "tabSoundsRecord": "", + "tabInterlude": "", + "tabUI": "", + "tabFX": "", + "tabProject": "", + "tabProjectModules": "", + "tabProjectModuleDocs": "", + "tabMainMenu": "", + "tabMainMenuSettings": "", + "tabMainMenuMeta": "", + "helpPanelReminder": "", + "buttonStartTutorial": "" + } + }, + "assetViewer": { + "addNewGroup": "Нова група", + "ungrouped": "Негруповані", + "newGroupName": "Нова група", + "groupDeletionConfirmation": "Ти точно хочеш видалити цю групу? Її асети будуть розгруповані." + }, + "groupEditor": { + "groupEditor": "Редактор групи", + "icon": "Значок:", + "color": "Колір:" + }, + "soundRecorder": { + "recorderHeading": "Диктофон", + "record": "Почати запис", + "stopRecording": "Зупинити запис", + "discardRecording": "Видалити запис", + "finishRecording": "Прийняти", + "cannotRecordSound": "Неможливо запустити звукозапис: перевірте налаштування аудіо в системі та сам записуючий пристрій.", + "troubleshootingWindows": "У Windows також перевірте розділ Параметри Windows -> Конфіденційність -> Мікрофон. \"Дозволити програмам доступ до мікрофона\" має бути увімкнено." + }, + "roomBackgrounds": { + "add": "Додати фон", + "depth": "Глибина:", + "movement": "Швидкість переміщення (X, Y):", + "parallax": "Паралакс (по X, Y):", + "repeat": "Повторювати:", + "scale": "Розмір (по X, Y):", + "shift": "Зсув (X, Y):", + "notBackgroundTextureWarning": "Ця текстура не позначена як фон. У грі у неї будуть розриви, що повторюються.", + "fixBackground": "Виправити.", + "dismissWarning": "Приховати попередження." + }, + "roomTiles": { + "moveTileLayer": "Перемістити на іншу глибину", + "show": "Показати шар", + "hide": "Сховати шар", + "findTileset": "Знайти тайлсет" + }, + "roomView": { + "name": "Ім'я:", + "width": "Ширина виду:", + "height": "Висота виду:", + "events": "Події кімнати", + "copies": "Копії", + "backgrounds": "Фони", + "backgroundColor": "Колір фону", + "tiles": "Плитки", + "add": "Додати", + "none": "Нічого", + "done": "Зберегти", + "grid": "Увімкнути сітку", + "hotkeysNotice": "Ctrl = Видалити, Alt = Без сітки, Shift = Вибір кількох об'єктів", + "hotkeysNoticeMovement": "Ctrl = Видалити, Shift = Виділити", + "shift": "Змістити вигляд", + "step": "Кадр", + "create": "Код створення", + "leave": "Код виходу", + "draw": "Промальовування", + "deleteCopies": "Видалити копії", + "shiftCopies": "Змістити копії", + "selectAndMove": "Вибрати та перемістити", + "findTileset": "Знайти тайлсет", + "properties": "Властивості", + "isUi": "Шар для графічного інтерфейсу", + "sortHorizontally": "Відсортувати по горизонталі", + "sortVertically": "Відсортувати по вертикалі", + "copyProperties": { + "position": "Позиція", + "rotation": "Поворот", + "scale": "Розмір", + "multipleValues": "" + }, + "copyCustomProperties": { + "addProperty": "Додати поле", + "property": "Ім'я поля", + "value": "Значення" + }, + "customProperties": "Користувацькі поля", + "restrictCamera": "Обмежити камеру в прямокутнику", + "minimumX": "Мін. Х", + "minimumY": "Мін. Y", + "maximumX": "Макс. X", + "maximumY": "Макс. Y", + "gridOff": "Вимкнути сітку", + "gridSize": "Розмір сітки:", + "toCenter": "У центр", + "shiftLabel": "Зрушити на:", + "newDepth": "Нова глибина:", + "deleteCopy": "Видалити копію {0}", + "changeCopyScale": "Змінити розмір", + "shiftCopy": "Вказати координати", + "deleteTile": "Видалити плитку", + "deleteTiles": "Видалити плитки", + "moveTilesToLayer": "Перемістити до іншого шару", + "shiftTiles": "Змістити плитки", + "changeCopyRotation": "Повернути", + "simulate": "", + "toggleDiagonalGrid": "", + "changeGridSize": "", + "xrayMode": "", + "colorizeTileLayers": "", + "tools": { + "select": "", + "addCopies": "", + "addTiles": "", + "manageBackgrounds": "", + "roomProperties": "" + } + }, + "styleView": { + "active": "Активно?", + "alignment": "Вирівнювання:", + "apply": "Застосувати", + "fill": "Заливка", + "font": "Шрифт", + "italic": "Похилий", + "lineHeight": "Висота лінії:", + "shadow": "Тінь", + "stroke": "Обведення", + "textWrap": "Перенесення тексту", + "textWrapWidth": "Позиція для перенесення:", + "useCustomFont": "Вибрати шрифт із проекту…", + "code": "Код", + "copyCode": "Скопіювати", + "fillColor": "Колір:", + "fillColor1": "Колір 1:", + "fillColor2": "Колір 2:", + "fillGrad": "Градієнт", + "fillGradType": "Вигляд градієнта:", + "fillHorizontal": "Горизонтальний", + "fillSolid": "Суцільна", + "fillType": "Тип заливання:", + "fillVertical": "Вертикальний", + "fontWeight": "Товщина:", + "shadowBlur": "Розмиття:", + "shadowColor": "Колір тіні:", + "shadowShift": "Зсув тіні:", + "strokeColor": "Колір обведення", + "strokeWeight": "Товщина обведення:", + "testText": "Тест Test 0123+", + "fontFamily": "Родина шрифтів:", + "fontSize": "Розмір шрифту:" + }, + "textureView": { + "center": "Вісь обертання:", + "cols": "Колонок:", + "done": "Готово", + "fill": "Заповнити", + "form": "Маска зіткнень:", + "frames": "Кадрів:", + "isometrify": "Ізометрувати: перемістити вісь обертання вниз по центру, заповнити маскою весь спрайт", + "name": "Ім'я:", + "radius": "Радіус:", + "rectangle": "Прямокутник", + "round": "Коло", + "rows": "Рядок", + "speed": "Швидкість прев'ю:", + "tiled": "Використовувати як фон?", + "updateFromClipboard": "Обновити з буфера обміну", + "corrupted": "Файл зображення пошкоджений або відсутній! Неможливо відкрити спрайт.", + "showFrameIndices": "Показати індекси кадрів", + "blankTexture": "", + "width": "Ширіна:", + "height": "Висота:", + "strip": "Ломана / багатокутник", + "removePoint": "Видалити точку", + "closeShape": "Закрити фігуру", + "addPoint": "Додати точку", + "moveCenter": "Перемістити вісь обертання", + "movePoint": "Перемістити точку", + "reimport": "Оновити", + "symmetryTool": "Симетрія", + "padding": "Відбивка:", + "paddingNotice": "Впливає на те, як експортується текстура: дублює пікселі по краях, щоб уникнути артефактів брудних країв на повторюваних і зменшених зображеннях. Зазвичай значення за замовчуванням достатньо, але якщо сильно зменшити текстуру в грі, ефект може повернутися. Збільште значення цього поля, якщо помічаєте брудні краї цієї текстури в грі.", + "previewAnimationNotice": "Це перегляд. Щоб змінити швидкість анімації у цих копій, використовуйте this.animationSpeed.", + "pasteCollisionMask": "Вставити форму зіткнень", + "copyCollisionMask": "Скопіювати форму зіткнень", + "bgColor": "Змінити колір фону", + "setCenter": "По центру", + "replaceTexture": "Замінити…", + "showMask": "Показати маску", + "marginX": "Відступ X:", + "marginY": "Відступ Y:", + "offX": "Зсув X:", + "offY": "Зсув Y:" + }, + "soundView": { + "import": "Імпорт", + "name": "Ім'я:", + "save": "Зберегти", + "isMusicFile": "Це музичний трек", + "poolSize": "Розмір пулу:" + }, + "fontView": { + "italic": "Похилий стиль?", + "reimport": "Замінити", + "generateBitmapFont": "Також згенерувати bitmap-шрифт", + "bitmapFont": "Bitmap-шрифт", + "bitmapFontSize": "Розмір шрифту:", + "bitmapFontLineHeight": "Висота лінії:", + "resultingBitmapFontName": "Назва ресурсу", + "charset": "Кодіювання:", + "charsets": { + "punctuation": "Цифри та пунктуація (зазвичай вам це потрібно)", + "basicLatin": "Латиниця", + "latinExtended": "Розширена латиниця", + "cyrillic": "Кирилиця", + "greekCoptic": "Грецька та Коптська", + "custom": "Свій набір", + "allInFont": "Все, що підтримує шрифт" + }, + "customCharsetHint": "Впишіть усі літери, які потрібно додати до шрифту - як у верхньому, так і в нижньому регістрі.", + "fontWeight": "Жирність:", + "typefaceName": "Назва сімейства:" + }, + "licensePanel": { + "ctjsLicense": "Ліцензія Ct.js (MIT)" + }, + "templates": { + "create": "Створити" + }, + "templateView": { + "change": "Змінити спрайт", + "create": "Код створення", + "depth": "Глибина:", + "destroy": "Код знищення", + "done": "Готово", + "draw": "Промальовування", + "learnAboutTypes": "Кодинг шаблонів", + "name": "Ім'я:", + "step": "Кадр", + "visible": "Відображати", + "appearance": "Зовнішній вигляд", + "opacity": "Непрозорість:", + "blendMode": "Змішування:", + "playAnimationOnStart": "Грати анімацію при старті", + "blendModes": { + "normal": "Звичайне", + "add": "Додати (вигоряння)", + "multiply": "Помножити (затемнення)", + "screen": "Екран (освітлення)" + }, + "loopAnimation": "Циклічна анімація", + "animationFPS": "" + }, + "assetInput": { + "changeAsset": "Натисніть, щоб замінити ассет", + "jumpToAsset": "Перейти до асету", + "selectAssetHeader": "Вибрати асет" + }, + "builtinAssetGallery": { + "galleryTip": "Це вбудована галерея різних безкоштовних текстур і звуків. Вони всі під ліцензією CCO, WTFPL, або на спец. правах для движка ct.js, і ти можеш використовувати їх як завгодно, в комерційних проектах і не тільки.", + "assetGalleryHeader": "Асети", + "importIntoProject": "Вставити в проект", + "importAll": "Імпортувати все", + "byAuthorPrefix": "від", + "cannotImportExplanation": "Ім'я ассета вже зайняте. Можливо, тобі треба перейменувати твої існуючі асети. Або ж у твоєму проекті вже є такий самий ассет?", + "nameOccupied": "Ім'я зайняте", + "cannotImportNameOccupied": "Не вдалося імпортувати $1, тому що ім'я вже зайняте.", + "visitSource": "Відкрити сторінку магазину цього набору ассетів", + "visitAuthorsItch": "Відвідати itch.io автора", + "visitAuthorsTwitter": "Відвідати Twitter автора", + "tipAuthor": "Подаруйте денюжку автору за їхню працю :D" + }, + "scriptables": { + "addEvent": "Додати подію", + "removeEvent": "Видалити подію", + "removeEventConfirm": "Ти точно хочеш видалити цю подію? Це не можна буде скасувати!", + "changeArguments": "Змінити аргументи", + "eventAlreadyExists": "Вже є така сама подія!", + "localEventVars": "Локальні змінні", + "createEventHint": "Створи першу подію в колонці зліва, а потім напиши тут код", + "coreEventsCategories": { + "lifecycle": "Життєвий цикл", + "actions": "Дії", + "pointer": "Події покажчика", + "misc": "Різне", + "animation": "Анімація", + "timers": "" + }, + "coreEvents": { + "OnCreate": "Створення", + "OnRoomStart": "Старт кімнати", + "OnStep": "Початок кадру", + "OnDraw": "Кінець кадру", + "OnDestroy": "Знищення", + "OnRoomEnd": "Кінець кімнати", + "OnPointerClick": "Клік", + "OnPointerSecondaryClick": "Альт. клік", + "OnPointerEnter": "Наведення покажчиком", + "OnPointerLeave": "Вихід покажчика", + "OnPointerDown": "Натискання покажчиком", + "OnPointerUp": "Кінець натискання покажчиком", + "OnPointerUpOutside": "Кінець натискання зовні", + "OnPointerWheel": "Колесик", + "OnActionPress": "Натискання дії", + "OnActionRelease": "Кінець натискання дії", + "OnActionDown": "Дія натиснута", + "OnFrameChange": "Зміна кадру", + "OnAnimationLoop": "Перепуск анімації", + "OnAnimationComplete": "Кінець анімації", + "Timer": "" + }, + "coreParameterizedNames": { + "OnActionPress": "При натисканні %%action%%", + "OnActionRelease": "Кінець натискання %%action%%", + "OnActionDown": "%%action%% затиснуто" + }, + "coreEventsArguments": { + "action": "Дія" + }, + "coreEventsLocals": { + "OnActionDown_value": "Поточне значення дії", + "OnActionPress_value": "" + }, + "coreEventsDescriptions": { + "OnCreate": "Спрацьовує під час створення копії.", + "OnRoomStart": "Спрацьовує при створенні кімнати - під час переходу або додавання її як шару.", + "OnStep": "Спрацьовує спочатку кожного кадру.", + "OnDraw": "Спрацьовує в кінці кожного кадру. Хороше місце для апдейту анімації.", + "OnDestroy": "Спрацьовує всередині кадру при видаленні копії.", + "OnRoomEnd": "Спрацьовує перед переходом до іншої кімнати, або коли ця кімната була видалена як шар.", + "OnActionPress": "Спрацьовує, коли дія стає активно - натисканнями, кліком, рухом джойстиків і т.п.", + "OnActionRelease": "Спрацьовує, коли дія перестає бути активною - коли відпускають клавіші, джойстики і т.п.", + "OnActionDown": "Спрацьовує кожен кадр, доки методи введення цієї дії активні.", + "OnAnimationLoop": "Спрацьовує щоразу, коли циклічна анімація добігає кінця.", + "OnAnimationComplete": "Спрацьовує один раз, коли нециклічна анімація закінчується.", + "Timer": "" + } + } +} diff --git a/app/data/icon.icns b/app/data/icon.icns new file mode 100644 index 000000000..a4d78ab66 Binary files /dev/null and b/app/data/icon.icns differ diff --git a/app/data/icon.ico b/app/data/icon.ico new file mode 100644 index 000000000..5542707cc Binary files /dev/null and b/app/data/icon.ico differ diff --git a/app/data/typedefs/keywordWorkarounds.d.ts b/app/data/typedefs/keywordWorkarounds.d.ts index cc565ceeb..0c737ea0b 100644 --- a/app/data/typedefs/keywordWorkarounds.d.ts +++ b/app/data/typedefs/keywordWorkarounds.d.ts @@ -1,13 +1,4 @@ declare namespace ct { - namespace types { - /** - * Works like ct.types.each, but only for the specified Copy: it applies a given function to a copy (executes against it). - * @param {Copy} copy The Copy to apply a function to - * @param {function} func The function that needs to be applied - */ - var _with: function(Copy, function): void; - export {_with as with}; - } namespace rooms { /** * Switches to a room with a given name. @@ -27,4 +18,4 @@ declare namespace ct { var _new: function(string, object): void; export {_new as new}; } -} \ No newline at end of file +} diff --git a/app/package-lock.json b/app/package-lock.json index 4d5634f5c..8fa89d33d 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,12 +1,12 @@ { "name": "ctjs", - "version": "2.0.1", + "version": "2.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ctjs", - "version": "2.0.1", + "version": "2.2.0", "license": "MIT", "dependencies": { "@capacitor/cli": "^3.4.0", @@ -18,7 +18,7 @@ "electron-packager": "^15.0.0", "execa": "^5.1.1", "extract-zip": "^2.0.1", - "fs-extra": "^9.0.1", + "fs-extra": "^10.1.0", "fuse.js": "^3.6.1", "google-closure-compiler": "^20191111.0.0", "highlight.js": "^10.4.1", @@ -27,19 +27,20 @@ "javascript-obfuscator": "^2.6.0", "js-yaml": "^3.14.0", "markdown-it": "12.3.2", - "maxrects-packer": "^2.7.1", + "maxrects-packer": "^2.7.3", "microm": "^0.2.4", "monaco-editor": "^0.20.0", "monaco-themes": "^0.3.3", "nanoid": "^3.1.31", - "npm": "^8.3.2", + "npm": "^8.11.0", "opentype.js": "^1.3.3", + "pixi-ease": "^3.0.7", "pixi-particles": "4.3.1", "pixi.js": "5.3.11", "pixi.js-legacy": "5.3.11", "png2icons": "^2.0.1", "serve-handler": "^6.1.3", - "terser": "^5.3.5", + "terser": "^5.14.2", "ttf2woff": "^2.0.2" } }, @@ -266,6 +267,39 @@ "node": ">=10.3.0" } }, + "node_modules/@ionic/utils-fs/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ionic/utils-fs/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ionic/utils-fs/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@ionic/utils-object": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", @@ -367,6 +401,58 @@ "node": ">=4.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1355,9 +1441,9 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { "lodash": "^4.17.14" } @@ -2658,6 +2744,39 @@ "node": ">= 10.0.0" } }, + "node_modules/electron-notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-notarize/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-notarize/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/electron-osx-sign": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.17.tgz", @@ -2724,6 +2843,39 @@ "url": "https://github.com/electron/electron-packager?sponsor=1" } }, + "node_modules/electron-packager/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-packager/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-packager/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/elementtree": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", @@ -3111,17 +3263,16 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/fs-extra/node_modules/jsonfile": { @@ -3135,7 +3286,7 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/fs-extra/node_modules/universalify": { + "node_modules/fs-extra/node_modules/jsonfile/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", @@ -3143,6 +3294,14 @@ "node": ">= 10.0.0" } }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -4718,9 +4877,9 @@ } }, "node_modules/maxrects-packer": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.1.tgz", - "integrity": "sha512-RtnNTaV6xznnA9YISSE2i8x7sgTosMDJSZOwouyHtSP+uITNXyV7YCsincIZPg/+jKiS22/zjCQ6iT4iX68UcA==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.3.tgz", + "integrity": "sha512-bG6qXujJ1QgttZVIH4WDanhoJtvbud/xP/XPyf6A69C9RdA61BM4TomFALCq2nrTa+tARRIBB4LuIFsnUQU2wA==" }, "node_modules/md5": { "version": "2.3.0", @@ -5325,20 +5484,19 @@ } }, "node_modules/npm": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.3.2.tgz", - "integrity": "sha512-xZAC9GpWNOyiS1TtBqBy0HJpjIVI8zsVXEOEwcmgqYFtqOy7sXUL0ByOrkhfcGmf+akSXz3uOxLYB8aLlYivQQ==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.11.0.tgz", + "integrity": "sha512-4qmtwHa28J4SPmwCNoQI07KIF/ljmBhhuqG+xNXsIIRpwdKB5OXkMIGfH6KlThR6kzusxlkgR7t1haFDB88dcQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/ci-detect", "@npmcli/config", + "@npmcli/fs", "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/run-script", "abbrev", - "ansicolors", - "ansistyles", "archy", "cacache", "chalk", @@ -5402,77 +5560,76 @@ "write-file-atomic" ], "dependencies": { - "@isaacs/string-locale-compare": "*", - "@npmcli/arborist": "*", - "@npmcli/ci-detect": "*", - "@npmcli/config": "*", - "@npmcli/map-workspaces": "*", - "@npmcli/package-json": "*", - "@npmcli/run-script": "*", - "abbrev": "*", - "ansicolors": "*", - "ansistyles": "*", - "archy": "*", - "cacache": "*", - "chalk": "*", - "chownr": "*", - "cli-columns": "*", - "cli-table3": "*", - "columnify": "*", - "fastest-levenshtein": "*", - "glob": "*", - "graceful-fs": "*", - "hosted-git-info": "*", - "ini": "*", - "init-package-json": "*", - "is-cidr": "*", - "json-parse-even-better-errors": "*", - "libnpmaccess": "*", - "libnpmdiff": "*", - "libnpmexec": "*", - "libnpmfund": "*", - "libnpmhook": "*", - "libnpmorg": "*", - "libnpmpack": "*", - "libnpmpublish": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpmversion": "*", - "make-fetch-happen": "*", - "minipass": "*", - "minipass-pipeline": "*", - "mkdirp": "*", - "mkdirp-infer-owner": "*", - "ms": "*", - "node-gyp": "*", - "nopt": "*", - "npm-audit-report": "*", - "npm-install-checks": "*", - "npm-package-arg": "*", - "npm-pick-manifest": "*", - "npm-profile": "*", - "npm-registry-fetch": "*", - "npm-user-validate": "*", - "npmlog": "*", - "opener": "*", - "pacote": "*", - "parse-conflict-json": "*", - "proc-log": "*", - "qrcode-terminal": "*", - "read": "*", - "read-package-json": "*", - "read-package-json-fast": "*", - "readdir-scoped-modules": "*", - "rimraf": "*", - "semver": "*", - "ssri": "*", - "tar": "*", - "text-table": "*", - "tiny-relative-date": "*", - "treeverse": "*", - "validate-npm-package-name": "*", - "which": "*", - "write-file-atomic": "*" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.0.4", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.1.0", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.0", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.0.0", + "ini": "^3.0.0", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.2", + "libnpmdiff": "^4.0.2", + "libnpmexec": "^4.0.2", + "libnpmfund": "^3.0.1", + "libnpmhook": "^8.0.2", + "libnpmorg": "^4.0.2", + "libnpmpack": "^4.0.2", + "libnpmpublish": "^6.0.2", + "libnpmsearch": "^5.0.2", + "libnpmteam": "^4.0.2", + "libnpmversion": "^3.0.1", + "make-fetch-happen": "^10.1.5", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.0.0", + "nopt": "^5.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.2", + "npm-pick-manifest": "^7.0.1", + "npm-profile": "^6.0.3", + "npm-registry-fetch": "^13.1.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "pacote": "^13.4.1", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.1", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" }, "bin": { "npm": "bin/npm-cli.js", @@ -5518,8 +5675,17 @@ "npm-watch": "cli.js" } }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.2", + "version": "1.1.3", "inBundle": true, "license": "MIT" }, @@ -5529,103 +5695,118 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "4.2.1", + "version": "5.2.0", "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.0", - "@npmcli/metavuln-calculator": "^2.0.0", - "@npmcli/move-file": "^1.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.3", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^2.0.0", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "bin-links": "^3.0.0", - "cacache": "^15.0.3", + "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^12.0.2", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", "parse-conflict-json": "^2.0.1", - "proc-log": "^1.0.0", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", "walk-up-path": "^1.0.0" }, "bin": { "arborist": "bin/index.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "1.4.0", + "version": "2.0.0", "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "2.4.0", + "version": "4.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "ini": "^2.0.0", + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", - "semver": "^7.3.4", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", "walk-up-path": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "1.0.1", + "version": "2.0.0", "inBundle": true, "license": "ISC", "dependencies": { "ansi-styles": "^4.3.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "1.0.0", + "version": "2.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "2.1.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { @@ -5644,35 +5825,35 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.0", + "version": "2.0.3", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "2.0.0", + "version": "3.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^15.0.5", + "cacache": "^16.0.0", "json-parse-even-better-errors": "^2.3.1", - "pacote": "^12.0.0", - "semver": "^7.3.2" + "pacote": "^13.0.3", + "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/move-file": { - "version": "1.1.2", + "version": "2.0.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -5680,7 +5861,7 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { @@ -5689,43 +5870,55 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "1.0.3", + "version": "2.0.0", "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "1.0.1", + "version": "2.0.0", "inBundle": true, "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "2.0.0", + "version": "3.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@tootallnate/once": { - "version": "1.1.2", + "version": "2.0.0", "inBundle": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/npm/node_modules/abbrev": { @@ -5745,7 +5938,7 @@ } }, "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.0", + "version": "4.2.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -5770,11 +5963,11 @@ } }, "node_modules/npm/node_modules/ansi-regex": { - "version": "2.1.1", + "version": "5.0.1", "inBundle": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/npm/node_modules/ansi-styles": { @@ -5791,16 +5984,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm/node_modules/ansicolors": { - "version": "0.3.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ansistyles": { - "version": "0.1.3", - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", "inBundle": true, @@ -5812,7 +5995,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "2.0.0", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5820,7 +6003,7 @@ "readable-stream": "^3.6.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/asap": { @@ -5834,19 +6017,19 @@ "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { - "version": "3.0.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "cmd-shim": "^4.0.1", + "cmd-shim": "^5.0.0", "mkdirp-infer-owner": "^2.0.0", "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", + "read-cmd-shim": "^3.0.0", "rimraf": "^3.0.0", "write-file-atomic": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/binary-extensions": { @@ -5858,45 +6041,47 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", "inBundle": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/npm/node_modules/builtins": { - "version": "1.0.3", + "version": "5.0.1", "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } }, "node_modules/npm/node_modules/cacache": { - "version": "15.3.0", + "version": "16.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", "unique-filename": "^1.1.1" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/chalk": { @@ -5953,122 +6138,41 @@ "node": ">= 10" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.2", "inBundle": true, "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/string-width": { - "version": "4.2.3", + "node_modules/npm/node_modules/cmd-shim": { + "version": "5.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "mkdirp-infer-owner": "^2.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/ansi-regex": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/strip-ansi": { - "version": "6.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "4.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -6091,22 +6195,16 @@ "color-support": "bin.js" } }, - "node_modules/npm/node_modules/colors": { - "version": "1.4.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/npm/node_modules/columnify": { - "version": "1.5.4", + "version": "1.6.0", "inBundle": true, "license": "MIT", "dependencies": { - "strip-ansi": "^3.0.0", + "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/npm/node_modules/common-ancestor-path": { @@ -6125,7 +6223,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/debug": { - "version": "4.3.2", + "version": "4.3.4", "inBundle": true, "license": "MIT", "dependencies": { @@ -6175,7 +6273,7 @@ } }, "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.3", + "version": "1.0.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -6245,85 +6343,44 @@ "license": "MIT" }, "node_modules/npm/node_modules/gauge": { - "version": "4.0.0", + "version": "4.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", + "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "wide-align": "^1.1.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/glob": { - "version": "7.2.0", + "version": "8.0.1", "inBundle": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^5.0.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.8", + "version": "4.2.10", "inBundle": true, "license": "ISC" }, @@ -6352,14 +6409,14 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "4.1.0", + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/http-cache-semantics": { @@ -6368,11 +6425,11 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { - "version": "4.0.1", + "version": "5.0.0", "inBundle": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -6381,7 +6438,7 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.0", + "version": "5.0.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -6413,14 +6470,14 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "4.0.1", + "version": "5.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/imurmurhash": { @@ -6459,32 +6516,32 @@ "license": "ISC" }, "node_modules/npm/node_modules/ini": { - "version": "2.0.0", + "version": "3.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/init-package-json": { - "version": "2.0.5", + "version": "3.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", + "read": "^1.0.7", + "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/ip": { - "version": "1.1.5", + "version": "1.1.8", "inBundle": true, "license": "MIT" }, @@ -6508,7 +6565,7 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.8.0", + "version": "2.9.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -6519,11 +6576,11 @@ } }, "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", + "version": "3.0.0", "inBundle": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/npm/node_modules/is-lambda": { @@ -6531,11 +6588,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/is-typedarray": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", "inBundle": true, @@ -6563,215 +6615,213 @@ "license": "MIT" }, "node_modules/npm/node_modules/just-diff": { - "version": "5.0.1", + "version": "5.0.2", "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { - "version": "4.0.1", + "version": "5.2.0", "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "5.0.0", + "version": "6.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "3.0.0", + "version": "4.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/disparity-colors": "^1.0.1", + "@npmcli/disparity-colors": "^2.0.0", "@npmcli/installed-package-contents": "^1.0.7", "binary-extensions": "^2.2.0", "diff": "^5.0.0", - "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.4", - "pacote": "^12.0.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.0.5", "tar": "^6.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "3.0.2", + "version": "4.0.5", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^4.0.0", - "@npmcli/ci-detect": "^1.3.0", - "@npmcli/run-script": "^2.0.0", + "@npmcli/arborist": "^5.0.0", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^8.1.2", - "pacote": "^12.0.0", - "proc-log": "^1.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", + "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", "walk-up-path": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "2.0.2", + "version": "3.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^4.0.0" + "@npmcli/arborist": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "7.0.0", + "version": "8.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "3.0.0", + "version": "4.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "3.0.1", + "version": "4.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/run-script": "^2.0.0", - "npm-package-arg": "^8.1.0", - "pacote": "^12.0.0" + "@npmcli/run-script": "^3.0.0", + "npm-package-arg": "^9.0.1", + "pacote": "^13.5.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "5.0.0", + "version": "6.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "4.0.0", + "version": "5.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "3.0.0", + "version": "4.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "2.0.2", + "version": "3.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.0.7", - "@npmcli/run-script": "^2.0.0", + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^3.0.0", "json-parse-even-better-errors": "^2.3.1", - "semver": "^7.3.5", - "stringify-package": "^1.0.1" + "proc-log": "^2.0.0", + "semver": "^7.3.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/lru-cache": { - "version": "6.0.0", + "version": "7.9.0", "inBundle": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "9.1.0", + "version": "10.1.5", "inBundle": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^6.1.1", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/minimatch": { - "version": "3.0.4", + "version": "5.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/npm/node_modules/minipass": { @@ -6797,19 +6847,19 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "1.4.1", + "version": "2.1.0", "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/npm/node_modules/minipass-flush": { @@ -6901,7 +6951,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/negotiator": { - "version": "0.6.2", + "version": "0.6.3", "inBundle": true, "license": "MIT", "engines": { @@ -6909,14 +6959,14 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "8.4.1", + "version": "9.0.0", "inBundle": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -6928,7 +6978,46 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/npm/node_modules/nopt": { @@ -6946,28 +7035,28 @@ } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "3.0.3", + "version": "4.0.0", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/npm-audit-report": { - "version": "2.1.5", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { "chalk": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-bundled": { @@ -6979,14 +7068,14 @@ } }, "node_modules/npm/node_modules/npm-install-checks": { - "version": "4.0.0", + "version": "5.0.0", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-normalize-package-bin": { @@ -6995,71 +7084,76 @@ "license": "ISC" }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "8.1.5", + "version": "9.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "3.0.0", + "version": "5.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "6.1.1", + "version": "7.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "npm-install-checks": "^4.0.0", + "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-profile": { - "version": "5.0.4", + "version": "6.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "11.0.0", + "version": "13.1.1", "inBundle": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-user-validate": { @@ -7068,25 +7162,17 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/npmlog": { - "version": "6.0.0", + "version": "6.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "are-we-there-yet": "^2.0.0", + "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/object-assign": { - "version": "4.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/once": { @@ -7120,48 +7206,50 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "12.0.2", + "version": "13.5.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "ssri": "^9.0.0", + "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.1", + "version": "2.0.2", "inBundle": true, "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", - "just-diff-apply": "^4.0.1" + "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/path-is-absolute": { @@ -7173,9 +7261,12 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "1.0.0", + "version": "2.0.1", "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", @@ -7237,22 +7328,25 @@ } }, "node_modules/npm/node_modules/read-cmd-shim": { - "version": "2.0.0", + "version": "3.0.0", "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/read-package-json": { - "version": "4.1.1", + "version": "5.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/read-package-json-fast": { @@ -7309,8 +7403,47 @@ "bin": { "rimraf": "bin.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/npm/node_modules/safe-buffer": { @@ -7339,7 +7472,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.3.5", + "version": "7.3.7", "inBundle": true, "license": "ISC", "dependencies": { @@ -7352,13 +7485,24 @@ "node": ">=10" } }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.6", + "version": "3.0.7", "inBundle": true, "license": "ISC" }, @@ -7372,12 +7516,12 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.6.1", + "version": "2.6.2", "inBundle": true, "license": "MIT", "dependencies": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", @@ -7385,13 +7529,13 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "6.1.0", + "version": "6.2.0", "inBundle": true, "license": "MIT", "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { "node": ">= 10" @@ -7421,19 +7565,19 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.10", + "version": "3.0.11", "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { - "version": "8.0.1", + "version": "9.0.1", "inBundle": true, "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/string_decoder": { @@ -7445,50 +7589,27 @@ } }, "node_modules/npm/node_modules/string-width": { - "version": "2.1.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", + "version": "4.2.3", "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/npm/node_modules/stringify-package": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/strip-ansi": { - "version": "3.0.1", + "version": "6.0.1", "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/npm/node_modules/supports-color": { @@ -7529,28 +7650,12 @@ "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { - "version": "1.0.4", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/typedarray-to-buffer": { - "version": "4.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "version": "2.0.0", "inBundle": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/unique-filename": { "version": "1.1.1", @@ -7583,11 +7688,14 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "3.0.0", + "version": "4.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/walk-up-path": { @@ -7618,11 +7726,11 @@ } }, "node_modules/npm/node_modules/wide-align": { - "version": "1.1.3", + "version": "1.1.5", "inBundle": true, "license": "ISC", "dependencies": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/npm/node_modules/wrappy": { @@ -7631,14 +7739,12 @@ "license": "ISC" }, "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.0", + "version": "4.0.1", "inBundle": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^4.0.0" + "signal-exit": "^3.0.7" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" @@ -7966,6 +8072,11 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, + "node_modules/penner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/penner/-/penner-0.1.3.tgz", + "integrity": "sha512-UzkaC2L6d9J1VzJAFH0TQwuKE/rerpTZkgW6aPLVeu/LdjWn6rnuY9lXcVN1AE9tZVfHrsJ2gZOBsRjpQECNHA==" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -7985,6 +8096,23 @@ "node": ">=4" } }, + "node_modules/pixi-ease": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/pixi-ease/-/pixi-ease-3.0.7.tgz", + "integrity": "sha512-ew1IzAi2layygHrk8+tk6XTuue3WM6Po5LsA46v+9BtQNMa2sX0PMLzQ4nq1UpTbLg4Dwqep9RTzDRsFhCYJJw==", + "dependencies": { + "eventemitter3": "^4.0.0", + "penner": "^0.1.3" + }, + "peerDependencies": { + "pixi.js": ">=4.6.0" + } + }, + "node_modules/pixi-ease/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/pixi-particles": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/pixi-particles/-/pixi-particles-4.3.1.tgz", @@ -8697,6 +8825,21 @@ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "optional": true }, + "node_modules/rollup": { + "version": "2.76.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.76.0.tgz", + "integrity": "sha512-9jwRIEY1jOzKLj3nsY/yot41r19ITdQrhs+q3ggNWhr9TQgduHqANvPpS32RNpzGklJu3G1AJfvlZLi/6wFgWA==", + "peer": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", @@ -8844,24 +8987,13 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", - "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "dependencies": { "bplist-creator": "0.1.0", - "bplist-parser": "0.3.0", - "plist": "^3.0.4" - } - }, - "node_modules/simple-plist/node_modules/bplist-parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", - "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" + "bplist-parser": "0.3.1", + "plist": "^3.0.5" } }, "node_modules/sisteransi": { @@ -9301,19 +9433,20 @@ } }, "node_modules/terser": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.7.tgz", - "integrity": "sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { - "node": "^10.0.0 || ^11.0.0 || ^12.0.0 || >=14.0.0" + "node": ">=10" } }, "node_modules/terser/node_modules/commander": { @@ -9321,14 +9454,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -9547,6 +9672,19 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -10322,6 +10460,33 @@ "debug": "^4.0.0", "fs-extra": "^9.0.0", "tslib": "^2.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@ionic/utils-object": { @@ -10402,6 +10567,49 @@ "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-SxIFtV5/wlXYS7G3zLVj7CddLolX8Bm/hr68fiyNL3MyG2k4FwF9B5Z5GTpVLhw2EELYNwyoYBvFlR4gGnQPdw==" }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -11273,9 +11481,9 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } @@ -12257,6 +12465,33 @@ "requires": { "debug": "^4.1.1", "fs-extra": "^9.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "electron-osx-sign": { @@ -12309,6 +12544,33 @@ "resolve": "^1.1.6", "semver": "^7.1.3", "yargs-parser": "^18.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "elementtree": { @@ -12612,14 +12874,13 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "dependencies": { "jsonfile": { @@ -12629,12 +12890,19 @@ "requires": { "graceful-fs": "^4.1.6", "universalify": "^1.0.0" + }, + "dependencies": { + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, @@ -13803,9 +14071,9 @@ } }, "maxrects-packer": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.1.tgz", - "integrity": "sha512-RtnNTaV6xznnA9YISSE2i8x7sgTosMDJSZOwouyHtSP+uITNXyV7YCsincIZPg/+jKiS22/zjCQ6iT4iX68UcA==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.3.tgz", + "integrity": "sha512-bG6qXujJ1QgttZVIH4WDanhoJtvbud/xP/XPyf6A69C9RdA61BM4TomFALCq2nrTa+tARRIBB4LuIFsnUQU2wA==" }, "md5": { "version": "2.3.0", @@ -14253,85 +14521,89 @@ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "npm": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.3.2.tgz", - "integrity": "sha512-xZAC9GpWNOyiS1TtBqBy0HJpjIVI8zsVXEOEwcmgqYFtqOy7sXUL0ByOrkhfcGmf+akSXz3uOxLYB8aLlYivQQ==", - "requires": { - "@isaacs/string-locale-compare": "*", - "@npmcli/arborist": "*", - "@npmcli/ci-detect": "*", - "@npmcli/config": "*", - "@npmcli/map-workspaces": "*", - "@npmcli/package-json": "*", - "@npmcli/run-script": "*", - "abbrev": "*", - "ansicolors": "*", - "ansistyles": "*", - "archy": "*", - "cacache": "*", - "chalk": "*", - "chownr": "*", - "cli-columns": "*", - "cli-table3": "*", - "columnify": "*", - "fastest-levenshtein": "*", - "glob": "*", - "graceful-fs": "*", - "hosted-git-info": "*", - "ini": "*", - "init-package-json": "*", - "is-cidr": "*", - "json-parse-even-better-errors": "*", - "libnpmaccess": "*", - "libnpmdiff": "*", - "libnpmexec": "*", - "libnpmfund": "*", - "libnpmhook": "*", - "libnpmorg": "*", - "libnpmpack": "*", - "libnpmpublish": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpmversion": "*", - "make-fetch-happen": "*", - "minipass": "*", - "minipass-pipeline": "*", - "mkdirp": "*", - "mkdirp-infer-owner": "*", - "ms": "*", - "node-gyp": "*", - "nopt": "*", - "npm-audit-report": "*", - "npm-install-checks": "*", - "npm-package-arg": "*", - "npm-pick-manifest": "*", - "npm-profile": "*", - "npm-registry-fetch": "*", - "npm-user-validate": "*", - "npmlog": "*", - "opener": "*", - "pacote": "*", - "parse-conflict-json": "*", - "proc-log": "*", - "qrcode-terminal": "*", - "read": "*", - "read-package-json": "*", - "read-package-json-fast": "*", - "readdir-scoped-modules": "*", - "rimraf": "*", - "semver": "*", - "ssri": "*", - "tar": "*", - "text-table": "*", - "tiny-relative-date": "*", - "treeverse": "*", - "validate-npm-package-name": "*", - "which": "*", - "write-file-atomic": "*" + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.11.0.tgz", + "integrity": "sha512-4qmtwHa28J4SPmwCNoQI07KIF/ljmBhhuqG+xNXsIIRpwdKB5OXkMIGfH6KlThR6kzusxlkgR7t1haFDB88dcQ==", + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.0.4", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.1.0", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.0", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.0.0", + "ini": "^3.0.0", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.2", + "libnpmdiff": "^4.0.2", + "libnpmexec": "^4.0.2", + "libnpmfund": "^3.0.1", + "libnpmhook": "^8.0.2", + "libnpmorg": "^4.0.2", + "libnpmpack": "^4.0.2", + "libnpmpublish": "^6.0.2", + "libnpmsearch": "^5.0.2", + "libnpmteam": "^4.0.2", + "libnpmversion": "^3.0.1", + "make-fetch-happen": "^10.1.5", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.0.0", + "nopt": "^5.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.2", + "npm-pick-manifest": "^7.0.1", + "npm-profile": "^6.0.3", + "npm-registry-fetch": "^13.1.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "pacote": "^13.4.1", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.1", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" }, "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "optional": true + }, "@gar/promisify": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true }, "@isaacs/string-locale-compare": { @@ -14339,81 +14611,87 @@ "bundled": true }, "@npmcli/arborist": { - "version": "4.2.1", + "version": "5.2.0", "bundled": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.0", - "@npmcli/metavuln-calculator": "^2.0.0", - "@npmcli/move-file": "^1.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.3", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^2.0.0", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "bin-links": "^3.0.0", - "cacache": "^15.0.3", + "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^12.0.2", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", "parse-conflict-json": "^2.0.1", - "proc-log": "^1.0.0", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", "walk-up-path": "^1.0.0" } }, "@npmcli/ci-detect": { - "version": "1.4.0", + "version": "2.0.0", "bundled": true }, "@npmcli/config": { - "version": "2.4.0", + "version": "4.1.0", "bundled": true, "requires": { - "ini": "^2.0.0", + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", - "semver": "^7.3.4", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", "walk-up-path": "^1.0.0" } }, "@npmcli/disparity-colors": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true, "requires": { "ansi-styles": "^4.3.0" } }, "@npmcli/fs": { - "version": "1.0.0", + "version": "2.1.0", "bundled": true, "requires": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "2.1.0", + "version": "3.0.1", "bundled": true, "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -14429,27 +14707,27 @@ } }, "@npmcli/map-workspaces": { - "version": "2.0.0", + "version": "2.0.3", "bundled": true, "requires": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" } }, "@npmcli/metavuln-calculator": { - "version": "2.0.0", + "version": "3.1.0", "bundled": true, "requires": { - "cacache": "^15.0.5", + "cacache": "^16.0.0", "json-parse-even-better-errors": "^2.3.1", - "pacote": "^12.0.0", - "semver": "^7.3.2" + "pacote": "^13.0.3", + "semver": "^7.3.5" } }, "@npmcli/move-file": { - "version": "1.1.2", + "version": "2.0.0", "bundled": true, "requires": { "mkdirp": "^1.0.4", @@ -14461,35 +14739,35 @@ "bundled": true }, "@npmcli/node-gyp": { - "version": "1.0.3", + "version": "2.0.0", "bundled": true }, "@npmcli/package-json": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true, "requires": { "json-parse-even-better-errors": "^2.3.1" } }, "@npmcli/promise-spawn": { - "version": "1.3.2", + "version": "3.0.0", "bundled": true, "requires": { "infer-owner": "^1.0.4" } }, "@npmcli/run-script": { - "version": "2.0.0", + "version": "3.0.2", "bundled": true, "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3" } }, "@tootallnate/once": { - "version": "1.1.2", + "version": "2.0.0", "bundled": true }, "abbrev": { @@ -14504,7 +14782,7 @@ } }, "agentkeepalive": { - "version": "4.2.0", + "version": "4.2.1", "bundled": true, "requires": { "debug": "^4.1.0", @@ -14521,7 +14799,7 @@ } }, "ansi-regex": { - "version": "2.1.1", + "version": "5.0.1", "bundled": true }, "ansi-styles": { @@ -14531,14 +14809,6 @@ "color-convert": "^2.0.1" } }, - "ansicolors": { - "version": "0.3.2", - "bundled": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true - }, "aproba": { "version": "2.0.0", "bundled": true @@ -14548,7 +14818,7 @@ "bundled": true }, "are-we-there-yet": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "requires": { "delegates": "^1.0.0", @@ -14564,13 +14834,13 @@ "bundled": true }, "bin-links": { - "version": "3.0.0", + "version": "3.0.1", "bundled": true, "requires": { - "cmd-shim": "^4.0.1", + "cmd-shim": "^5.0.0", "mkdirp-infer-owner": "^2.0.0", "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", + "read-cmd-shim": "^3.0.0", "rimraf": "^3.0.0", "write-file-atomic": "^4.0.0" } @@ -14580,38 +14850,40 @@ "bundled": true }, "brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", "bundled": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "builtins": { - "version": "1.0.3", - "bundled": true + "version": "5.0.1", + "bundled": true, + "requires": { + "semver": "^7.0.0" + } }, "cacache": { - "version": "15.3.0", + "version": "16.1.0", "bundled": true, "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", "unique-filename": "^1.1.1" } }, @@ -14644,67 +14916,14 @@ "requires": { "string-width": "^4.2.3", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "cli-table3": { - "version": "0.6.0", + "version": "0.6.2", "bundled": true, "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", + "@colors/colors": "1.5.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "string-width": { - "version": "4.2.2", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "clone": { @@ -14712,7 +14931,7 @@ "bundled": true }, "cmd-shim": { - "version": "4.1.0", + "version": "5.0.0", "bundled": true, "requires": { "mkdirp-infer-owner": "^2.0.0" @@ -14733,16 +14952,11 @@ "version": "1.1.3", "bundled": true }, - "colors": { - "version": "1.4.0", - "bundled": true, - "optional": true - }, "columnify": { - "version": "1.5.4", + "version": "1.6.0", "bundled": true, "requires": { - "strip-ansi": "^3.0.0", + "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" } }, @@ -14759,7 +14973,7 @@ "bundled": true }, "debug": { - "version": "4.3.2", + "version": "4.3.4", "bundled": true, "requires": { "ms": "2.1.2" @@ -14791,7 +15005,7 @@ "bundled": true }, "dezalgo": { - "version": "1.0.3", + "version": "1.0.4", "bundled": true, "requires": { "asap": "^2.0.0", @@ -14842,60 +15056,33 @@ "bundled": true }, "gauge": { - "version": "4.0.0", + "version": "4.0.4", "bundled": true, "requires": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", + "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "wide-align": "^1.1.5" } }, "glob": { - "version": "7.2.0", + "version": "8.0.1", "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^5.0.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "graceful-fs": { - "version": "4.2.8", + "version": "4.2.10", "bundled": true }, "has": { @@ -14914,10 +15101,10 @@ "bundled": true }, "hosted-git-info": { - "version": "4.1.0", + "version": "5.0.0", "bundled": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" } }, "http-cache-semantics": { @@ -14925,16 +15112,16 @@ "bundled": true }, "http-proxy-agent": { - "version": "4.0.1", + "version": "5.0.0", "bundled": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, "https-proxy-agent": { - "version": "5.0.0", + "version": "5.0.1", "bundled": true, "requires": { "agent-base": "6", @@ -14957,10 +15144,10 @@ } }, "ignore-walk": { - "version": "4.0.1", + "version": "5.0.1", "bundled": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" } }, "imurmurhash": { @@ -14988,24 +15175,24 @@ "bundled": true }, "ini": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true }, "init-package-json": { - "version": "2.0.5", + "version": "3.0.2", "bundled": true, "requires": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", + "read": "^1.0.7", + "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" } }, "ip": { - "version": "1.1.5", + "version": "1.1.8", "bundled": true }, "ip-regex": { @@ -15020,24 +15207,20 @@ } }, "is-core-module": { - "version": "2.8.0", + "version": "2.9.0", "bundled": true, "requires": { "has": "^1.0.3" } }, "is-fullwidth-code-point": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true }, "is-lambda": { "version": "1.0.1", "bundled": true }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true - }, "isexe": { "version": "2.0.0", "bundled": true @@ -15055,157 +15238,155 @@ "bundled": true }, "just-diff": { - "version": "5.0.1", + "version": "5.0.2", "bundled": true }, "just-diff-apply": { - "version": "4.0.1", + "version": "5.2.0", "bundled": true }, "libnpmaccess": { - "version": "5.0.0", + "version": "6.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" } }, "libnpmdiff": { - "version": "3.0.0", + "version": "4.0.3", "bundled": true, "requires": { - "@npmcli/disparity-colors": "^1.0.1", + "@npmcli/disparity-colors": "^2.0.0", "@npmcli/installed-package-contents": "^1.0.7", "binary-extensions": "^2.2.0", "diff": "^5.0.0", - "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.4", - "pacote": "^12.0.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.0.5", "tar": "^6.1.0" } }, "libnpmexec": { - "version": "3.0.2", + "version": "4.0.5", "bundled": true, "requires": { - "@npmcli/arborist": "^4.0.0", - "@npmcli/ci-detect": "^1.3.0", - "@npmcli/run-script": "^2.0.0", + "@npmcli/arborist": "^5.0.0", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^8.1.2", - "pacote": "^12.0.0", - "proc-log": "^1.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", + "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", "walk-up-path": "^1.0.0" } }, "libnpmfund": { - "version": "2.0.2", + "version": "3.0.2", "bundled": true, "requires": { - "@npmcli/arborist": "^4.0.0" + "@npmcli/arborist": "^5.0.0" } }, "libnpmhook": { - "version": "7.0.0", + "version": "8.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmorg": { - "version": "3.0.0", + "version": "4.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmpack": { - "version": "3.0.1", + "version": "4.1.0", "bundled": true, "requires": { - "@npmcli/run-script": "^2.0.0", - "npm-package-arg": "^8.1.0", - "pacote": "^12.0.0" + "@npmcli/run-script": "^3.0.0", + "npm-package-arg": "^9.0.1", + "pacote": "^13.5.0" } }, "libnpmpublish": { - "version": "5.0.0", + "version": "6.0.4", "bundled": true, "requires": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" } }, "libnpmsearch": { - "version": "4.0.0", + "version": "5.0.3", "bundled": true, "requires": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmteam": { - "version": "3.0.0", + "version": "4.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmversion": { - "version": "2.0.2", + "version": "3.0.4", "bundled": true, "requires": { - "@npmcli/git": "^2.0.7", - "@npmcli/run-script": "^2.0.0", + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^3.0.0", "json-parse-even-better-errors": "^2.3.1", - "semver": "^7.3.5", - "stringify-package": "^1.0.1" + "proc-log": "^2.0.0", + "semver": "^7.3.7" } }, "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "7.9.0", + "bundled": true }, "make-fetch-happen": { - "version": "9.1.0", + "version": "10.1.5", "bundled": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^6.1.1", + "ssri": "^9.0.0" } }, "minimatch": { - "version": "3.0.4", + "version": "5.0.1", "bundled": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, "minipass": { @@ -15223,13 +15404,13 @@ } }, "minipass-fetch": { - "version": "1.4.1", + "version": "2.1.0", "bundled": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-flush": { @@ -15291,23 +15472,52 @@ "bundled": true }, "negotiator": { - "version": "0.6.2", + "version": "0.6.3", "bundled": true }, "node-gyp": { - "version": "8.4.1", + "version": "9.0.0", "bundled": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.0", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "nopt": { @@ -15318,17 +15528,17 @@ } }, "normalize-package-data": { - "version": "3.0.3", + "version": "4.0.0", "bundled": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" } }, "npm-audit-report": { - "version": "2.1.5", + "version": "3.0.0", "bundled": true, "requires": { "chalk": "^4.0.0" @@ -15342,7 +15552,7 @@ } }, "npm-install-checks": { - "version": "4.0.0", + "version": "5.0.0", "bundled": true, "requires": { "semver": "^7.1.1" @@ -15353,51 +15563,53 @@ "bundled": true }, "npm-package-arg": { - "version": "8.1.5", + "version": "9.0.2", "bundled": true, "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } }, "npm-packlist": { - "version": "3.0.0", + "version": "5.1.0", "bundled": true, "requires": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" } }, "npm-pick-manifest": { - "version": "6.1.1", + "version": "7.0.1", "bundled": true, "requires": { - "npm-install-checks": "^4.0.0", + "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" } }, "npm-profile": { - "version": "5.0.4", + "version": "6.0.3", "bundled": true, "requires": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" } }, "npm-registry-fetch": { - "version": "11.0.0", + "version": "13.1.1", "bundled": true, "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" } }, "npm-user-validate": { @@ -15405,19 +15617,15 @@ "bundled": true }, "npmlog": { - "version": "6.0.0", + "version": "6.0.2", "bundled": true, "requires": { - "are-we-there-yet": "^2.0.0", + "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, "once": { "version": "1.4.0", "bundled": true, @@ -15437,37 +15645,39 @@ } }, "pacote": { - "version": "12.0.2", + "version": "13.5.0", "bundled": true, "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "ssri": "^9.0.0", + "tar": "^6.1.11" } }, "parse-conflict-json": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "requires": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", - "just-diff-apply": "^4.0.1" + "just-diff-apply": "^5.2.0" } }, "path-is-absolute": { @@ -15475,7 +15685,7 @@ "bundled": true }, "proc-log": { - "version": "1.0.0", + "version": "2.0.1", "bundled": true }, "promise-all-reject-late": { @@ -15517,17 +15727,17 @@ } }, "read-cmd-shim": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true }, "read-package-json": { - "version": "4.1.1", + "version": "5.0.1", "bundled": true, "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" } }, "read-package-json-fast": { @@ -15566,6 +15776,35 @@ "bundled": true, "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.0", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "safe-buffer": { @@ -15578,10 +15817,19 @@ "optional": true }, "semver": { - "version": "7.3.5", + "version": "7.3.7", "bundled": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "set-blocking": { @@ -15589,7 +15837,7 @@ "bundled": true }, "signal-exit": { - "version": "3.0.6", + "version": "3.0.7", "bundled": true }, "smart-buffer": { @@ -15597,20 +15845,20 @@ "bundled": true }, "socks": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, "requires": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "6.1.0", + "version": "6.2.0", "bundled": true, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" } }, "spdx-correct": { @@ -15634,11 +15882,11 @@ } }, "spdx-license-ids": { - "version": "3.0.10", + "version": "3.0.11", "bundled": true }, "ssri": { - "version": "8.0.1", + "version": "9.0.1", "bundled": true, "requires": { "minipass": "^3.1.1" @@ -15652,35 +15900,19 @@ } }, "string-width": { - "version": "2.1.1", + "version": "4.2.3", "bundled": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "stringify-package": { - "version": "1.0.1", - "bundled": true - }, "strip-ansi": { - "version": "3.0.1", + "version": "6.0.1", "bundled": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -15711,11 +15943,7 @@ "bundled": true }, "treeverse": { - "version": "1.0.4", - "bundled": true - }, - "typedarray-to-buffer": { - "version": "4.0.0", + "version": "2.0.0", "bundled": true }, "unique-filename": { @@ -15745,10 +15973,10 @@ } }, "validate-npm-package-name": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true, "requires": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" } }, "walk-up-path": { @@ -15770,10 +15998,10 @@ } }, "wide-align": { - "version": "1.1.3", + "version": "1.1.5", "bundled": true, "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wrappy": { @@ -15781,13 +16009,11 @@ "bundled": true }, "write-file-atomic": { - "version": "4.0.0", + "version": "4.0.1", "bundled": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^4.0.0" + "signal-exit": "^3.0.7" } }, "yallist": { @@ -16051,6 +16277,11 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, + "penner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/penner/-/penner-0.1.3.tgz", + "integrity": "sha512-UzkaC2L6d9J1VzJAFH0TQwuKE/rerpTZkgW6aPLVeu/LdjWn6rnuY9lXcVN1AE9tZVfHrsJ2gZOBsRjpQECNHA==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -16061,6 +16292,22 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, + "pixi-ease": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/pixi-ease/-/pixi-ease-3.0.7.tgz", + "integrity": "sha512-ew1IzAi2layygHrk8+tk6XTuue3WM6Po5LsA46v+9BtQNMa2sX0PMLzQ4nq1UpTbLg4Dwqep9RTzDRsFhCYJJw==", + "requires": { + "eventemitter3": "^4.0.0", + "penner": "^0.1.3" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + } + } + }, "pixi-particles": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/pixi-particles/-/pixi-particles-4.3.1.tgz", @@ -16601,6 +16848,15 @@ } } }, + "rollup": { + "version": "2.76.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.76.0.tgz", + "integrity": "sha512-9jwRIEY1jOzKLj3nsY/yot41r19ITdQrhs+q3ggNWhr9TQgduHqANvPpS32RNpzGklJu3G1AJfvlZLi/6wFgWA==", + "peer": true, + "requires": { + "fsevents": "~2.3.2" + } + }, "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", @@ -16709,23 +16965,13 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", - "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "requires": { "bplist-creator": "0.1.0", - "bplist-parser": "0.3.0", - "plist": "^3.0.4" - }, - "dependencies": { - "bplist-parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", - "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", - "requires": { - "big-integer": "1.6.x" - } - } + "bplist-parser": "0.3.1", + "plist": "^3.0.5" } }, "sisteransi": { @@ -17072,24 +17318,20 @@ } }, "terser": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.7.tgz", - "integrity": "sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "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==" - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, @@ -17250,6 +17492,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "peer": true + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", diff --git a/app/package.json b/app/package.json index f9d65c1e6..0236e5bf9 100644 --- a/app/package.json +++ b/app/package.json @@ -2,7 +2,7 @@ "main": "index.html", "name": "ctjs", "description": "ct.js — a free 2D game engine", - "version": "2.0.2", + "version": "3.0.0", "homepage": "https://ctjs.rocks/", "author": { "name": "Cosmo Myzrail Gorynych", @@ -62,7 +62,7 @@ "electron-packager": "^15.0.0", "execa": "^5.1.1", "extract-zip": "^2.0.1", - "fs-extra": "^9.0.1", + "fs-extra": "^10.1.0", "fuse.js": "^3.6.1", "google-closure-compiler": "^20191111.0.0", "highlight.js": "^10.4.1", @@ -71,19 +71,20 @@ "javascript-obfuscator": "^2.6.0", "js-yaml": "^3.14.0", "markdown-it": "12.3.2", - "maxrects-packer": "^2.7.1", + "maxrects-packer": "^2.7.3", "microm": "^0.2.4", "monaco-editor": "^0.20.0", "monaco-themes": "^0.3.3", "nanoid": "^3.1.31", - "npm": "^8.3.2", + "npm": "^8.11.0", "opentype.js": "^1.3.3", + "pixi-ease": "^3.0.7", "pixi-particles": "4.3.1", "pixi.js": "5.3.11", "pixi.js-legacy": "5.3.11", "png2icons": "^2.0.1", "serve-handler": "^6.1.3", - "terser": "^5.3.5", + "terser": "^5.14.2", "ttf2woff": "^2.0.2" } } diff --git a/branding/GithubHeader.png b/branding/GithubHeader.png index 671b62fed..2133852e9 100644 Binary files a/branding/GithubHeader.png and b/branding/GithubHeader.png differ diff --git a/bundledAssets b/bundledAssets index ede091e6f..0383b9060 160000 --- a/bundledAssets +++ b/bundledAssets @@ -1 +1 @@ -Subproject commit ede091e6f30bc2692d8994395a39c9d30b608855 +Subproject commit 0383b9060c4a092cb68dfbd2ac11752043dd8fa0 diff --git a/comigojiChangelog.js b/comigojiChangelog.js index 5bad87852..5784c3d93 100644 --- a/comigojiChangelog.js +++ b/comigojiChangelog.js @@ -22,16 +22,16 @@ module.exports = new Promise((resolve, reject) => { repos: [{ since, repo: './', - branch: 'v1.x' + branch: 'develop' }, { since, - repo: './../docs.ctjs.rocks', + repo: './../ctjsDocs', branch: 'master', forceCategory: 'docs', forceCategoryStrip: /^:(books|pencil|pencil2|memo):/ }, { since, - repo: './../ctjs-site', + repo: './../ctjsSite', branch: 'master', forceCategory: 'website' }], diff --git a/docs b/docs index cc79c026a..671c158a1 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit cc79c026a22718d4bddff1c279ad46f5c2fdd92c +Subproject commit 671c158a1dd04f323ab0456af0546111c626555b diff --git a/gulpfile.js b/gulpfile.js index 23fcc5613..77a8e063f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -9,7 +9,7 @@ const path = require('path'), replace = require('gulp-replace'), sourcemaps = require('gulp-sourcemaps'), minimist = require('minimist'), - ts = require('gulp-typescript'), + ts = require('@ct.js/gulp-typescript'), stylus = require('gulp-stylus'), riot = require('gulp-riot'), pug = require('gulp-pug'), @@ -60,6 +60,7 @@ var channelPostfix = argv.channel || false, fixEnabled = argv.fix || false, nightly = argv.nightly || false, buildNumber = argv.buildNum || false; +var verbose = argv.verbose || false; if (nightly) { channelPostfix = 'nightly'; @@ -252,7 +253,6 @@ const watchRequires = () => { .on('change', fileChangeNotifier) .on('error', err => { notifier.notify(makeErrorObj('Failure of node_requires', err)); - console.error('[node_requires error]', err); }); }; const watchIcons = () => { @@ -269,13 +269,20 @@ const watch = () => { }; const lintStylus = () => { - const stylint = require('gulp-stylint'); - return gulp.src(['./src/styl/**/*.styl', '!./src/styl/3rdParty/**/*.styl']) - .pipe(stylint()) - .pipe(stylint.reporter()) - .pipe(stylint.reporter('fail', { - failOnWarning: true - })); + const stylelint = require('stylelint'); + return stylelint.lint({ + files: [ + './src/styl/**/*.styl', + '!./src/styl/3rdParty/**/*.styl' + ], + formatter: 'string' + }).then(lintResults => { + if (lintResults.errored) { + console.log(lintResults.output); + } else { + console.log('✔ Cheff\'s kiss! 😙👌'); + } + }); }; const lintJS = () => { @@ -304,12 +311,12 @@ const lintTags = () => { .pipe(eslint.failAfterError()); }; -const lintI18n = () => require('./node_requires/i18n')().then(console.log); +const lintI18n = () => require('./node_requires/i18n')(verbose).then(console.log); const lint = gulp.series(lintJS, lintTags, lintStylus, lintI18n); const processToPlatformMap = { - 'darwin-x64': 'darwin', + 'darwin-x64': 'osx64', 'win32-x32': 'win32', 'win32-x64': 'win64', 'linux-x32': 'linux32', diff --git a/node_requires/i18n/index.js b/node_requires/i18n/index.js index 49e3c2b80..fb27c98d0 100644 --- a/node_requires/i18n/index.js +++ b/node_requires/i18n/index.js @@ -90,7 +90,7 @@ const getSuitableBreakpoint = (percent, short) => { return 'WTF?'; }; -module.exports = async () => { +module.exports = async (verbose) => { const fileNames = (await fs.readdir('./app/data/i18n')).filter(file => path.extname(file) === '.json' && file !== 'Comments.json' && @@ -117,10 +117,14 @@ module.exports = async () => { // eslint-disable-next-line no-nested-ternary `Coverage: ${report.stats[lang]}% ${getSuitableBreakpoint(report.stats[lang])} Not translated: ${report.untranslated[lang].length}` + -(report.untranslated[lang].length > 0 ? '\n' + report.untranslated[lang].map(key => ` ${key}`).join('\n') : '') + +((verbose && report.untranslated[lang].length > 0) ? '\n' + report.untranslated[lang].map(key => ` ${key}`).join('\n') : '') + `\nExcess: ${report.excess[lang].length} ${report.excess[lang].length ? '⚠️ '.repeat(Math.min(10, report.excess[lang].length)) : '✅'}\n` + (report.excess[lang].length > 0 ? report.excess[lang].map(key => ` ${key}`).join('\n') : '')).join('\n\n'); + if (!verbose) { + reportText += '\n👉 Use --verbose flag to log all the untranslated keys.'; + } + reportText += '\n\nStats:\n'; for (const lang in report.stats) { reportText += ` ${getSuitableBreakpoint(report.stats[lang], true)} ${report.stats[lang]}% ${lang}\n`; diff --git a/package-lock.json b/package-lock.json index ce0223970..1ea3910bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,55 +1,51 @@ { "name": "ctjsbuildenvironment", - "version": "2.0.1", + "version": "2.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ctjsbuildenvironment", - "version": "2.0.1", + "version": "2.2.0", "license": "MIT", "dependencies": { + "@ct.js/gulp-typescript": "^6.0.0", "@types/css-font-loading-module": "0.0.7", "@types/node": "^14.11.8", "@types/nw.js": "^0.13.10", - "@typescript-eslint/eslint-plugin": "^4.4.1", - "@typescript-eslint/parser": "^4.4.1", + "@typescript-eslint/eslint-plugin": "^4.32.0", + "@typescript-eslint/parser": "^4.32.0", + "eslint-plugin-pug": "^1.2.2", "filemode": "^3.0.0", - "fs-extra": "^9.0.1", + "fs-extra": "^10.1.0", "globby": "^11.0.1", "gulp": "^4.0.2", - "gulp-append-prepend": "^1.0.8", - "gulp-changed": "^4.0.2", - "gulp-chmod": "^3.0.0", "gulp-concat": "^2.6.1", "gulp-eslint": "^6.0.0", - "gulp-if": "^2.0.2", + "gulp-ext-replace": "^0.3.0", "gulp-pug": "^5.0.0", - "gulp-replace": "^1.0.0", + "gulp-replace": "^1.1.3", "gulp-riot": "^1.1.5", - "gulp-sourcemaps": "^2.6.5", - "gulp-stylint": "^4.0.2", - "gulp-stylus": "^2.7.0", - "gulp-svgstore": "^7.0.1", - "gulp-typescript": "^6.0.0-alpha.1", - "gulp-zip": "^5.0.1", + "gulp-sourcemaps": "^3.0.0", + "gulp-stylus": "^2.7.1", + "gulp-svgstore": "^8.0.0", + "gulp-zip": "^5.1.0", "jsdoc-x": "^4.1.0", "minimist": "^1.2.6", - "node-notifier": "^10.0.0", - "nw-builder": "^3.5.7", + "node-notifier": "^10.0.1", + "nw-builder": "3.5.7", "pug": "^3.0.2", - "pug-lint-config-clock": "^2.0.0", "readysteady": "^1.1.4", "riot": "^3.13.2", "streamqueue": "^1.1.2", - "stylint-stylish": "^2.0.0", - "stylus": "^0.54.7", + "stylelint": "^14.9.1", + "stylelint-stylus": "^0.16.1", + "stylus": "^0.58.1", "tsd-jsdoc": "^2.5.0", - "typescript": "^4.0.3" + "typescript": "~4.4.0" }, "devDependencies": { - "eslint-plugin-pug": "^1.2.2", - "gulp-ext-replace": "^0.3.0" + "@types/fs-extra": "^9.0.13" } }, "node_modules/@babel/code-frame": { @@ -136,21 +132,73 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" }, + "node_modules/@ct.js/gulp-typescript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ct.js/gulp-typescript/-/gulp-typescript-6.0.0.tgz", + "integrity": "sha512-6WHGzRHeB38lYdb2hP1Pj/NrBn6jjREz3RyDaNx8mEo+jcYQXvslC6mFezNA9SSZ68TTwkx8LlmkT4xImEKUFw==", + "dependencies": { + "ansi-colors": "^4.1.1", + "plugin-error": "^1.0.1", + "source-map": "^0.7.4", + "through2": "^3.0.1", + "vinyl": "^2.2.0", + "vinyl-fs": "^3.0.3" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@ct.js/gulp-typescript/node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@ct.js/gulp-typescript/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, "node_modules/@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", + "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", "dependencies": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", + "acorn": "^6.4.1", + "normalize-path": "^3.0.0", + "postcss": "^7.0.16", "source-map": "^0.6.0", - "through2": "^2.0.3" + "through2": "^3.0.1" }, "engines": { "node": ">= 0.10" } }, + "node_modules/@gulp-sourcemaps/identity-map/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@gulp-sourcemaps/identity-map/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@gulp-sourcemaps/identity-map/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -159,6 +207,15 @@ "node": ">=0.10.0" } }, + "node_modules/@gulp-sourcemaps/identity-map/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, "node_modules/@gulp-sourcemaps/map-sources": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", @@ -172,11 +229,11 @@ } }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -184,19 +241,19 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { @@ -357,10 +414,43 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "node_modules/@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==" + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, "node_modules/@types/minimist": { "version": "1.2.2", @@ -368,9 +458,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "14.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz", - "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==" + "version": "14.18.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", + "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -385,24 +475,33 @@ "@types/node": "*" } }, - "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", - "dev": true + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/vinyl": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz", + "integrity": "sha512-ayJ0iOCDNHnKpKTgBG6Q6JOnHTj9zFta+3j2b8Ejza0e4cvRyMn0ZoLEmbPrTHe5YYRlDYPvPWVdV4cTaRyH7g==", + "dependencies": { + "@types/expect": "^1.20.4", + "@types/node": "*" + } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.4.1.tgz", - "integrity": "sha512-O+8Utz8pb4OmcA+Nfi5THQnQpHSD2sDUNw9AxNHpuYOo326HZTtG8gsfT+EAYuVrFNaLyNb2QnUNkmTRDskuRA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dependencies": { - "@typescript-eslint/experimental-utils": "4.4.1", - "@typescript-eslint/scope-manager": "4.4.1", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" @@ -422,10 +521,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -438,15 +536,23 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "engines": { + "node": ">= 4" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "engines": { "node": ">=8" }, @@ -455,9 +561,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -466,16 +575,16 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.4.1.tgz", - "integrity": "sha512-Nt4EVlb1mqExW9cWhpV6pd1a3DkUbX9DeyYsdoeziKOpIJ04S2KMVDO+SEidsXRH/XHDpbzXykKcMTLdTXH6cQ==", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.4.1", - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/typescript-estree": "4.4.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" @@ -489,28 +598,39 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.4.1.tgz", - "integrity": "sha512-S0fuX5lDku28Au9REYUsV+hdJpW/rNW0gWlc4SXzF/kdrRaAVX9YCxKpziH7djeWT/HFAjLZcnY7NJD8xTeUEg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dependencies": { - "@typescript-eslint/scope-manager": "4.4.1", - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/typescript-estree": "4.4.1", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" }, "engines": { "node": "^10.12.0 || >=12.0.0" @@ -529,10 +649,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -551,12 +670,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.4.1.tgz", - "integrity": "sha512-2oD/ZqD4Gj41UdFeWZxegH3cVEEH/Z6Bhr/XvwTtGv66737XkR4C9IqEkebCuqArqBJQSj4AgNHHiN1okzD/wQ==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dependencies": { - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/visitor-keys": "4.4.1" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -567,9 +686,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.4.1.tgz", - "integrity": "sha512-KNDfH2bCyax5db+KKIZT4rfA8rEk5N0EJ8P0T5AJjo5xrV26UAzaiqoJCxeaibqc0c/IvZxp7v2g3difn2Pn3w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, @@ -579,18 +698,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz", - "integrity": "sha512-wP/V7ScKzgSdtcY1a0pZYBoCxrCstLrgRQ2O9MmCUZDtmgxCO/TCqOTGRVwpP4/2hVfqMz/Vw1ZYrG8cVxvN3g==", - "dependencies": { - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/visitor-keys": "4.4.1", - "debug": "^4.1.1", - "globby": "^11.0.1", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" @@ -606,10 +724,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -622,18 +739,10 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -647,9 +756,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -658,11 +770,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.1.tgz", - "integrity": "sha512-H2JMWhLaJNeaylSnMSQFEhT/S/FsJbebQALmoJxMPMxLtlVAMy2uJP/Z543n9IizhjRayLSqoInehCeNW9rWcw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dependencies": { - "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" }, "engines": { @@ -674,18 +786,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "engines": { "node": ">=10" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "node_modules/accord": { "version": "0.26.4", "resolved": "https://registry.npmjs.org/accord/-/accord-0.26.4.tgz", @@ -707,18 +814,10 @@ "when": "^3.7.7" } }, - "node_modules/accord/node_modules/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "bin": { "acorn": "bin/acorn" }, @@ -734,6 +833,17 @@ "acorn": "^5.0.0" } }, + "node_modules/acorn-dynamic-import/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-jsx": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", @@ -783,11 +893,11 @@ } }, "node_modules/ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dependencies": { - "string-width": "^2.0.0" + "string-width": "^4.1.0" } }, "node_modules/ansi-colors": { @@ -905,15 +1015,6 @@ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, - "node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, "node_modules/append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", @@ -928,7 +1029,7 @@ "node_modules/archiver": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "integrity": "sha512-01psM0DMD3YItvhnAXZODfsViaeDidrJwfne3lsoVrbyYa/xFQwTbVjY+2WlEBm7qH1fCsyxAA1SgNr/XenTlQ==", "dependencies": { "archiver-utils": "^1.3.0", "async": "^2.0.0", @@ -946,7 +1047,7 @@ "node_modules/archiver-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "integrity": "sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==", "dependencies": { "glob": "^7.0.0", "graceful-fs": "^4.1.0", @@ -986,14 +1087,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/archiver/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/archiver/node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1046,17 +1139,6 @@ "npm": ">=5" } }, - "node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arr-filter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", @@ -1187,14 +1269,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1246,9 +1320,12 @@ } }, "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } }, "node_modules/async-done": { "version": "1.3.2", @@ -1290,14 +1367,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -1429,9 +1498,9 @@ } }, "node_modules/base/node_modules/kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } @@ -1463,11 +1532,14 @@ } }, "node_modules/binaryextensions": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz", - "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", + "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", "engines": { "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" } }, "node_modules/bindings": { @@ -1523,66 +1595,99 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/boxen/node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/boxen/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "has-flag": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/brace-expansion": { @@ -1594,26 +1699,27 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "node_modules/buffer-alloc": { @@ -1649,7 +1755,7 @@ "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, "node_modules/buffer-from": { "version": "1.1.1", @@ -1708,20 +1814,6 @@ "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -1730,15 +1822,6 @@ "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1855,29 +1938,39 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/chokidar": { @@ -2146,26 +2239,6 @@ "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/chokidar/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -2201,14 +2274,6 @@ "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/chokidar/node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -2335,9 +2400,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/class-utils": { "version": "0.3.6", @@ -2373,11 +2438,14 @@ } }, "node_modules/cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-cursor": { @@ -2433,10 +2501,21 @@ "node": ">= 0.10" } }, + "node_modules/clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dependencies": { + "is-regexp": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dependencies": { "mimic-response": "^1.0.0" } @@ -2530,6 +2609,11 @@ "color-support": "bin.js" } }, + "node_modules/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2549,7 +2633,7 @@ "node_modules/compress-commons": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "integrity": "sha512-SLTU8iWWmcORfUN+4351Z2aZXKJe1tr0jSilPMCZlLPzpdTXnkBW1LevW/MfuANBKJek8Xu9ggqrtVmQrChLtg==", "dependencies": { "buffer-crc32": "^0.2.1", "crc32-stream": "^2.0.0", @@ -2650,19 +2734,19 @@ } }, "node_modules/configstore": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", - "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dependencies": { - "dot-prop": "^4.2.1", + "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/constantinople": { @@ -2709,6 +2793,46 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/crc": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", @@ -2720,7 +2844,7 @@ "node_modules/crc32-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "integrity": "sha512-UjZSqFCbn+jZUHJIh6Y3vMF7EJLcJWNm4tKDf2peJRwlZKHvkkvOMTvAei6zjU9gO1xONVr3rRFw0gixm2eUng==", "dependencies": { "crc": "^3.4.4", "readable-stream": "^2.0.0" @@ -2759,7 +2883,7 @@ "node_modules/create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", "dependencies": { "capture-stack-trace": "^1.0.0" }, @@ -2770,19 +2894,33 @@ "node_modules/cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, + "node_modules/cross-spawn/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/cross-spawn/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, "node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/css": { @@ -2796,31 +2934,46 @@ "urix": "^0.1.0" } }, + "node_modules/css-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "engines": { + "node": ">=12.22" + } + }, "node_modules/css-parse": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "integrity": "sha512-UNIFik2RgSbiTwIW1IsFwXWn6vs+bYdq83LKTSOsx7NJR7WII9dxewkHLltfTLVppoUApHV0118a4RZRI9FLwA==", "dependencies": { "css": "^2.0.0" } }, "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { - "node": "*" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/css/node_modules/source-map": { @@ -2831,6 +2984,17 @@ "node": ">=0.10.0" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -2918,7 +3082,7 @@ "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { "mimic-response": "^1.0.0" }, @@ -2926,17 +3090,6 @@ "node": ">=4" } }, - "node_modules/deep-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", - "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -3083,7 +3236,7 @@ "node_modules/deprecate": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", - "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" + "integrity": "sha512-3OFRdih9G2VYAfA/H6vizXyCvwLGLr9hdAh1z39HY3lAKbi2/BELQDVhbZ6AaTOjdh5BAi/GJ1QphQBHjCyXVw==" }, "node_modules/deprecation": { "version": "2.3.1", @@ -3142,51 +3295,79 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "domelementtype": "1" - } + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } }, "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" } }, "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==" }, "node_modules/duplexify": { "version": "3.6.0", @@ -3244,14 +3425,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3266,9 +3439,15 @@ } }, "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", + "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/error-ex": { "version": "1.3.2", @@ -3392,25 +3571,22 @@ "integrity": "sha1-+9ZThpgLMPvNDhMF1MP7hhTvIRk=" }, "node_modules/eslint-plugin-pug": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-pug/-/eslint-plugin-pug-1.2.2.tgz", - "integrity": "sha512-Xx7W04GUZwsChao7FTYOgmyrKXkpGGYeBw0LRd1mYkhivKhtHkDomanVtyU0KmFZUYhzSDget5462B6cPtnImQ==", - "dev": true, + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-pug/-/eslint-plugin-pug-1.2.4.tgz", + "integrity": "sha512-p/GrX0BgZx/nx1cw/SSDuxEIdZGBeQdG+Cr5+YnpbvEqD0gO9SPEpWS4csZYKlIzxOCy2WxyyGDLKVsF3LD4Ww==", "dependencies": { - "lodash": "^4.17.15", - "pug-lexer": "^4.1.0", - "pug-parser": "^5.0.1", - "pug-walk": "^1.1.8", - "vfile": "^4.0.2", - "vfile-location": "^3.0.0" + "lodash": "^4.17.20", + "pug-lexer": "^5.0.0", + "pug-parser": "^6.0.0", + "pug-walk": "^2.0.0" } }, "node_modules/eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { @@ -3437,9 +3613,9 @@ } }, "node_modules/eslint/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "engines": { "node": ">=6" } @@ -3511,14 +3687,6 @@ "node": ">= 6" } }, - "node_modules/eslint/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint/node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -3602,17 +3770,6 @@ "node": ">=6.0.0" } }, - "node_modules/espree/node_modules/acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3645,16 +3802,24 @@ } }, "node_modules/esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -3688,7 +3853,7 @@ "node_modules/execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -3702,26 +3867,23 @@ "node": ">=4" } }, - "node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, + "node_modules/execa/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "node_modules/execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dependencies": { - "fill-range": "^2.1.0" + "clone-regexp": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/expand-tilde": { @@ -3789,17 +3951,6 @@ "node": ">=4" } }, - "node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -3849,20 +4000,24 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-glob/node_modules/braces": { @@ -3898,14 +4053,6 @@ "node": ">= 6" } }, - "node_modules/fast-glob/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-glob/node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3926,15 +4073,15 @@ } }, "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, "node_modules/fast-glob/node_modules/to-regex-range": { @@ -3958,10 +4105,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" + }, "node_modules/fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dependencies": { "reusify": "^1.0.4" } @@ -3969,7 +4121,7 @@ "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dependencies": { "pend": "~1.2.0" } @@ -4018,14 +4170,6 @@ "npm": ">=5" } }, - "node_modules/filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fill-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", @@ -4038,50 +4182,6 @@ "node": ">=0.10.0" } }, - "node_modules/fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fill-range/node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -4367,14 +4467,6 @@ "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/findup-sync/node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -4543,17 +4635,6 @@ "node": ">=0.10.0" } }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4562,11 +4643,6 @@ "node": "*" } }, - "node_modules/fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=" - }, "node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -4597,24 +4673,18 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/fs-extra/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, "node_modules/fs-extra/node_modules/jsonfile": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", @@ -4626,7 +4696,7 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/fs-extra/node_modules/universalify": { + "node_modules/fs-extra/node_modules/jsonfile/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", @@ -4634,6 +4704,14 @@ "node": ">= 10.0.0" } }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -4652,12 +4730,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", - "bundleDependencies": [ - "node-pre-gyp" - ], + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", "hasInstallScript": true, "optional": true, @@ -4666,1347 +4741,1052 @@ ], "dependencies": { "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" + "nan": "^2.12.1" }, "engines": { "node": ">= 4.0" } }, - "node_modules/fsevents/node_modules/abbrev": { + "node_modules/function-bind": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "inBundle": true, - "optional": true + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/fsevents/node_modules/ansi-regex": { - "version": "2.1.1", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, - "node_modules/fsevents/node_modules/aproba": { - "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "inBundle": true, - "optional": true + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, - "node_modules/fsevents/node_modules/are-we-there-yet": { - "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "inBundle": true, - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fsevents/node_modules/balanced-match": { - "version": "1.0.0", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/brace-expansion": { - "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "inBundle": true, - "optional": true, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fsevents/node_modules/chownr": { - "version": "1.1.4", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/code-point-at": { - "version": "1.1.0", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "inBundle": true, - "optional": true, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/concat-map": { - "version": "0.0.1", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/console-control-strings": { - "version": "1.1.0", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/core-util-is": { - "version": "1.0.2", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/debug": { - "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "inBundle": true, - "optional": true, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dependencies": { - "ms": "^2.1.1" + "assert-plus": "^1.0.0" } }, - "node_modules/fsevents/node_modules/deep-extend": { - "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "inBundle": true, - "optional": true, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=4.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fsevents/node_modules/delegates": { - "version": "1.0.0", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/detect-libc": { - "version": "1.0.3", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "inBundle": true, - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/fsevents/node_modules/fs-minipass": { - "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "inBundle": true, - "optional": true, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dependencies": { - "minipass": "^2.6.0" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/fsevents/node_modules/fs.realpath": { - "version": "1.0.0", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "inBundle": true, - "optional": true + "node_modules/glob-stream/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/fsevents/node_modules/gauge": { - "version": "2.7.4", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "inBundle": true, - "optional": true, + "node_modules/glob-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/fsevents/node_modules/glob": { - "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "inBundle": true, - "optional": true, + "node_modules/glob-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "safe-buffer": "~5.1.0" } }, - "node_modules/fsevents/node_modules/has-unicode": { - "version": "2.0.1", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/iconv-lite": { - "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/fsevents/node_modules/ignore-walk": { - "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dependencies": { - "minimatch": "^3.0.4" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/fsevents/node_modules/inflight": { - "version": "1.0.6", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/inherits": { - "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "inBundle": true, - "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, + "node_modules/glob-watcher/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/isarray": { - "version": "1.0.0", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/minimatch": { - "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "brace-expansion": "^1.1.7" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/minimist": { - "version": "1.2.5", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/minipass": { - "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/minizlib": { - "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "minipass": "^2.9.0" + "ms": "2.0.0" } }, - "node_modules/fsevents/node_modules/mkdirp": { - "version": "0.5.3", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dependencies": { - "minimist": "^1.2.5" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/ms": { - "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/needle": { - "version": "2.3.3", - "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">= 4.4.x" + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/node-pre-gyp": { - "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" + "is-extendable": "^0.1.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/nopt": { - "version": "4.0.3", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "kind-of": "^3.0.2" }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/fsevents/node_modules/npm-bundled": { - "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "inBundle": true, - "optional": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/npm-packlist": { - "version": "1.4.8", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/npmlog": { - "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/fsevents/node_modules/number-is-nan": { - "version": "1.0.1", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "inBundle": true, - "optional": true, + "kind-of": "^3.0.2" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/object-assign": { - "version": "4.1.1", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/once": { - "version": "1.4.0", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "wrappy": "1" - } - }, - "node_modules/fsevents/node_modules/os-homedir": { - "version": "1.0.2", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "inBundle": true, - "optional": true, + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/os-tmpdir": { - "version": "1.0.2", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/osenv": { - "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/fsevents/node_modules/path-is-absolute": { - "version": "1.0.1", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "inBundle": true, - "optional": true, + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/process-nextick-args": { - "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/rc": { - "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "is-descriptor": "^1.0.0" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/fsevents/node_modules/readable-stream": { - "version": "2.3.7", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "inBundle": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/rimraf": { - "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "glob": "^7.1.3" + "is-extendable": "^0.1.0" }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/fsevents/node_modules/safe-buffer": { - "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/safer-buffer": { - "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/sax": { - "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/semver": { - "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "inBundle": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fsevents/node_modules/set-blocking": { - "version": "2.0.0", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/signal-exit": { - "version": "3.0.2", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/string_decoder": { - "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "inBundle": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/string-width": { - "version": "1.0.2", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/strip-ansi": { - "version": "3.0.1", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "ansi-regex": "^2.0.0" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/strip-json-comments": { - "version": "2.0.1", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/tar": { - "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "inBundle": true, - "optional": true, + "node_modules/glob-watcher/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "kind-of": "^6.0.0" }, "engines": { - "node": ">=4.5" + "node": ">=0.10.0" } }, - "node_modules/fsevents/node_modules/util-deprecate": { + "node_modules/glob-watcher/node_modules/is-descriptor": { "version": "1.0.2", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/wide-align": { - "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "inBundle": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/fsevents/node_modules/wrappy": { - "version": "1.0.2", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/yallist": { - "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "inBundle": true, - "optional": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "engines": { - "node": ">=4" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "assert-plus": "^1.0.0" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "node_modules/glob-watcher/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, + "node_modules/glob-watcher/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dependencies": { - "is-glob": "^2.0.0" + "node_modules/glob-watcher/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "node_modules/glob-watcher/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "^2.1.0" - }, + "node_modules/glob-watcher/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-stream/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/glob-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/glob-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" + "ini": "2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-watcher/node_modules/anymatch": { + "node_modules/global-dirs/node_modules/ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dependencies": { - "is-extendable": "^0.1.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/glob-watcher/node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "type-fest": "^0.8.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "is-extendable": "^0.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, + "node_modules/globby/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==" + }, + "node_modules/glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", "dependencies": { - "is-buffer": "^1.1.5" + "sparkles": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { - "kind-of": "^3.0.2" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { - "is-buffer": "^1.1.5" + "pump": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/graceful-fs-extra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs-extra/-/graceful-fs-extra-2.0.0.tgz", + "integrity": "sha1-fR5X/Mcm4rDMcH14tKzqVC+pvk4=", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "fs-extra": "^0.30.0", + "graceful-ncp": "^3.0.0", + "proxyquire": "^1.4.0" } }, - "node_modules/glob-watcher/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" + "node_modules/graceful-fs-extra/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "node_modules/glob-watcher/node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/graceful-fs-extra/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/glob-watcher/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/graceful-fs-extra/node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/graceful-ncp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/graceful-ncp/-/graceful-ncp-3.0.0.tgz", + "integrity": "sha1-WAXqJVhe+YTMyqgIajxTDuQSioo=", "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "graceful-fs": "^4.1.4", + "ncp": "^2.0.0", + "proxyquire": "^1.4.0" } }, - "node_modules/glob-watcher/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "dependencies": { - "is-extendable": "^0.1.0" + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/gulp-eslint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-6.0.0.tgz", + "integrity": "sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig==", "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "eslint": "^6.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.1" } }, - "node_modules/glob-watcher/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/gulp-ext-replace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gulp-ext-replace/-/gulp-ext-replace-0.3.0.tgz", + "integrity": "sha1-/1xc/LklUNqpIyqPPrNe9Ty18mA=", "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "through2": "~2.0.1" } }, - "node_modules/glob-watcher/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/gulp-pug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp-pug/-/gulp-pug-5.0.0.tgz", + "integrity": "sha512-NPnuj9hw35s78X/6Ho0vieKT/ipa0rh8cEAq3R4RWybZ7XEFPNez0O6kcxJipOLp3U6gjglsU1yiAR28bkuFkA==", "dependencies": { - "kind-of": "^6.0.0" + "fancy-log": "^1.3.3", + "plugin-error": "^1.0.1", + "pug": "^3.0.2", + "replace-ext": "^2.0.0", + "through2": "^4.0.2", + "vinyl-contents": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/glob-watcher/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, + "node_modules/gulp-pug/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/gulp-pug/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "readable-stream": "3" } }, - "node_modules/glob-watcher/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/gulp-replace": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.3.tgz", + "integrity": "sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ==", "dependencies": { - "is-buffer": "^1.1.5" + "@types/node": "^14.14.41", + "@types/vinyl": "^2.0.4", + "istextorbinary": "^3.0.0", + "replacestream": "^4.0.3", + "yargs-parser": ">=5.0.0-security.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/glob-watcher/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/gulp-replace/node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "node_modules/gulp-riot": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/gulp-riot/-/gulp-riot-1.1.5.tgz", + "integrity": "sha512-wnL3QYUiVCpbH/H0hmwFhC1/p9rDSbs6aTXWEz5YaesQ1Y7RGOmPu79zYt067yDqIs99tXuq07wfoLjH0jdQPg==", + "dependencies": { + "plugin-error": "^1.0.1", + "riot": "3.x", + "through2": "2.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/glob-watcher/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "node_modules/gulp-sourcemaps": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", + "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", + "dependencies": { + "@gulp-sourcemaps/identity-map": "^2.0.1", + "@gulp-sourcemaps/map-sources": "^1.0.0", + "acorn": "^6.4.1", + "convert-source-map": "^1.0.0", + "css": "^3.0.0", + "debug-fabulous": "^1.0.0", + "detect-newline": "^2.0.0", + "graceful-fs": "^4.0.0", + "source-map": "^0.6.0", + "strip-bom-string": "^1.0.0", + "through2": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dependencies": { - "ini": "^1.3.4" + "node_modules/gulp-sourcemaps/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/gulp-sourcemaps/node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/gulp-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "node_modules/gulp-sourcemaps/node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, - "node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/gulp-stylus": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/gulp-stylus/-/gulp-stylus-2.7.1.tgz", + "integrity": "sha512-lrM6yDGhywePjnoE8TkztDU7MuktaaFu4P2oPINdkmgC3d56G36vwLuOWJcORwsN4K6iou4dVKw9l4LOhtRrJQ==", "dependencies": { - "type-fest": "^0.8.1" + "accord": "^0.26.4", + "lodash.assign": "^3.2.0", + "plugin-error": "^0.1.2", + "replace-ext": "0.0.1", + "stylus": "^0.54.8", + "through2": "^2.0.5", + "vinyl-sourcemaps-apply": "^0.2.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4.2.0" } }, - "node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "node_modules/gulp-stylus/node_modules/arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/gulp-stylus/node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "node_modules/gulp-stylus/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dependencies": { - "sparkles": "^1.0.0" + "kind-of": "^1.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dependencies": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, + "node_modules/gulp-stylus/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "node_modules/gulp-stylus/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/graceful-fs-extra": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs-extra/-/graceful-fs-extra-2.0.0.tgz", - "integrity": "sha1-fR5X/Mcm4rDMcH14tKzqVC+pvk4=", + "node_modules/gulp-stylus/node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dependencies": { - "fs-extra": "^0.30.0", - "graceful-ncp": "^3.0.0", - "proxyquire": "^1.4.0" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/graceful-fs-extra/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } + "node_modules/gulp-stylus/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/graceful-fs-extra/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/gulp-stylus/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/graceful-fs-extra/node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optionalDependencies": { - "graceful-fs": "^4.1.9" + "node_modules/gulp-stylus/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/graceful-ncp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/graceful-ncp/-/graceful-ncp-3.0.0.tgz", - "integrity": "sha1-WAXqJVhe+YTMyqgIajxTDuQSioo=", + "node_modules/gulp-stylus/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "graceful-fs": "^4.1.4", - "ncp": "^2.0.0", - "proxyquire": "^1.4.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "node_modules/gulp-stylus/node_modules/stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" }, "bin": { - "gulp": "bin/gulp.js" + "stylus": "bin/stylus" }, "engines": { - "node": ">= 0.10" + "node": "*" } }, - "node_modules/gulp-append-prepend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/gulp-append-prepend/-/gulp-append-prepend-1.0.8.tgz", - "integrity": "sha512-dmlju9nEC4PRBdfwaGsTrDQCx/7hVyPfbBNJ8rNSIrY7O4fdiPb2ei7N0mxXcxrsxA/BftTGMEdRZrSH8g9cfg==", + "node_modules/gulp-stylus/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/gulp-svgstore": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gulp-svgstore/-/gulp-svgstore-8.0.0.tgz", + "integrity": "sha512-LU5TAhE7Fp4kJRijNTuu77Jje51gsPu58SV9bSE2OaY+s0rJcMgk6xLjSStKj8nhwHPcZykJSbdckKFJsuIk3w==", "dependencies": { + "cheerio": "^1.0.0-rc.10", + "fancy-log": "^1.3.3", "plugin-error": "^1.0.1", - "read-file": "^0.2.0", - "through2": "^2.0.1" + "vinyl": "^2.2.1" }, "engines": { - "node": ">=4" + "node": ">=10.0" } }, - "node_modules/gulp-changed": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-changed/-/gulp-changed-4.0.2.tgz", - "integrity": "sha512-rAvQt+ByaqrMuJLwucvxC+MC02Vh8ksiJ16hoQlk4xnmlHiLJMque2aXXQMmyocQac3RIjNRcyr7iG1TNH15GA==", + "node_modules/gulp-zip": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", + "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", "dependencies": { - "make-dir": "^3.0.0", + "get-stream": "^5.2.0", "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", "through2": "^3.0.1", - "touch": "^3.1.0" + "vinyl": "^2.1.0", + "yazl": "^2.5.1" }, "engines": { "node": ">=8" @@ -6020,1634 +5800,1627 @@ } } }, - "node_modules/gulp-changed/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/gulp-zip/node_modules/through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "readable-stream": "2 || 3" } }, - "node_modules/gulp-changed/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "node_modules/gulp/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/gulp-changed/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/gulp/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, - "node_modules/gulp-changed/node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "node_modules/gulp/node_modules/gulp-cli": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", + "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.1.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.0.1", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/gulp-chmod": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-3.0.0.tgz", - "integrity": "sha512-fDKj+yuLsUD3ayaHuvD0OzeUNOPeHmIC4wlwVQf3d3WYaB233zgq4sDBncIH5GRBmhtFc32LWFF04IdnrQFxig==", + "node_modules/gulp/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dependencies": { - "deep-assign": "^1.0.0", - "stat-mode": "^0.3.0", - "through2": "^3.0.1" + "number-is-nan": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/gulp-chmod/node_modules/through2": { + "node_modules/gulp/node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dependencies": { - "readable-stream": "2 || 3" + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "node_modules/gulp/node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/gulp/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dependencies": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/gulp-eslint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-6.0.0.tgz", - "integrity": "sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig==", + "node_modules/gulp/node_modules/yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dependencies": { - "eslint": "^6.0.0", - "fancy-log": "^1.3.2", - "plugin-error": "^1.0.1" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } }, - "node_modules/gulp-ext-replace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gulp-ext-replace/-/gulp-ext-replace-0.3.0.tgz", - "integrity": "sha1-/1xc/LklUNqpIyqPPrNe9Ty18mA=", - "dev": true, + "node_modules/gulp/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dependencies": { - "through2": "~2.0.1" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, - "node_modules/gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dependencies": { - "gulp-match": "^1.0.3", - "ternary-stream": "^2.0.1", - "through2": "^2.0.1" + "glogg": "^1.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.10" } }, - "node_modules/gulp-match": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", - "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", - "dependencies": { - "minimatch": "^3.0.3" - }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "engines": { - "node": ">= 0.10.0" + "node": ">=4" } }, - "node_modules/gulp-pug": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp-pug/-/gulp-pug-5.0.0.tgz", - "integrity": "sha512-NPnuj9hw35s78X/6Ho0vieKT/ipa0rh8cEAq3R4RWybZ7XEFPNez0O6kcxJipOLp3U6gjglsU1yiAR28bkuFkA==", + "node_modules/har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "deprecated": "this library is no longer supported", "dependencies": { - "fancy-log": "^1.3.3", - "plugin-error": "^1.0.1", - "pug": "^3.0.2", - "replace-ext": "^2.0.0", - "through2": "^4.0.2", - "vinyl-contents": "^1.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/gulp-pug/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "engines": { - "node": ">= 10" - } - }, - "node_modules/gulp-pug/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dependencies": { - "readable-stream": "3" + "node": ">=6" } }, - "node_modules/gulp-replace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.0.0.tgz", - "integrity": "sha512-lgdmrFSI1SdhNMXZQbrC75MOl1UjYWlOWNbNRnz+F/KHmgxt3l6XstBoAYIdadwETFyG/6i+vWUSCawdC3pqOw==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "istextorbinary": "2.2.1", - "readable-stream": "^2.0.1", - "replacestream": "^4.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/gulp-replace/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/gulp-replace/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">= 0.4.0" } }, - "node_modules/gulp-replace/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" } }, - "node_modules/gulp-riot": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/gulp-riot/-/gulp-riot-1.1.5.tgz", - "integrity": "sha512-wnL3QYUiVCpbH/H0hmwFhC1/p9rDSbs6aTXWEz5YaesQ1Y7RGOmPu79zYt067yDqIs99tXuq07wfoLjH0jdQPg==", - "dependencies": { - "plugin-error": "^1.0.1", - "riot": "3.x", - "through2": "2.0.3" - }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-sourcemaps": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", - "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", - "dependencies": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/gulp-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/has-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-stylint": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-stylint/-/gulp-stylint-4.0.2.tgz", - "integrity": "sha512-BOk/aOivr4uS/OhvZ5scLrxnIvSomBR4BSHbHVJtMyirW/10EBJVgbt2ZH0Lz44hSp5ag6TcKtxWPDXsBn7+RA==", + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dependencies": { - "plugin-error": "^1.0.1", - "stylint": "1.4.1", - "through2": "^2.0.1", - "vinyl": "^2.1.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-stylus": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/gulp-stylus/-/gulp-stylus-2.7.0.tgz", - "integrity": "sha512-LlneLeHcaRBaEqxwo5YCirpsfkR7uleQ4pHXW8IE2ZeA6M3jpgI90+zQ6SptMTSWr1RSQW3WYFZVA3P0coUojw==", + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { - "accord": "^0.26.3", - "lodash.assign": "^3.2.0", - "plugin-error": "^0.1.2", - "replace-ext": "0.0.1", - "stylus": "^0.54.0", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 4.2.0" + "node": ">=0.10.0" } }, - "node_modules/gulp-stylus/node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-stylus/node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-stylus/node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dependencies": { - "kind-of": "^1.1.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-stylus/node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gulp-stylus/node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" + "parse-passwd": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-svgstore": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/gulp-svgstore/-/gulp-svgstore-7.0.1.tgz", - "integrity": "sha512-oiAXvkRnBBt6ZML+lit7W15ryClB45k0V9eCVW/i73EymunoQlzZal0Luj3NDrbPLbPIllL8/ltCXFa9Jv03Pg==", - "dependencies": { - "cheerio": "0.*", - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2", - "vinyl": "^2.1.0" - }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", "engines": { - "node": ">=4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-svgstore/node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - }, - "engines": { - "node": ">=0.10.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, - "node_modules/gulp-svgstore/node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/gulp-svgstore/node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "kind-of": "^1.1.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-svgstore/node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iftype": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/iftype/-/iftype-4.0.9.tgz", + "integrity": "sha512-01Klo+04dkDzY193D1GVfOdQzmpqaYFJTAlZKRztkT/BOaU7sSnvxGimSln+7DMqLUP4tpDTNFgxqVPLYZVypA==", "engines": { - "node": ">=0.10.0" + "node": ">=8", + "npm": ">=5" } }, - "node_modules/gulp-svgstore/node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/gulp-typescript": { - "version": "6.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz", - "integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==", + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dependencies": { - "ansi-colors": "^4.1.1", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.1", - "vinyl": "^2.2.0", - "vinyl-fs": "^3.0.3" - }, - "engines": { - "node": ">= 8" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, - "peerDependencies": { - "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev " - } - }, - "node_modules/gulp-typescript/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "engines": { "node": ">=6" } }, - "node_modules/gulp-typescript/node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" } }, - "node_modules/gulp-zip": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.0.1.tgz", - "integrity": "sha512-M/IWLh9RvOpuofDZkgDirtiyz9J3yIqnDOJ3muzk2D/XnZ1ruqPlPLRIpXnl/aZU+xXwKPdOIxjRzkUcVEQyZQ==", - "dependencies": { - "get-stream": "^5.1.0", - "plugin-error": "^1.0.1", - "through2": "^3.0.1", - "vinyl": "^2.1.0", - "yazl": "^2.5.1" - }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "engines": { - "node": ">=8" - }, - "peerDependencies": { - "gulp": ">=4" - }, - "peerDependenciesMeta": { - "gulp": { - "optional": true - } + "node": ">=0.8.19" } }, - "node_modules/gulp-zip/node_modules/get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dependencies": { - "pump": "^3.0.0" - }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-zip/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "node_modules/indx": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz", + "integrity": "sha1-Fdz1bunPZcAjTFE8J/vVgOcPvFA=" }, - "node_modules/gulp-zip/node_modules/through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { - "readable-stream": "2 || 3" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/gulp/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/gulp/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/gulp/node_modules/gulp-cli": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", - "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", + "node_modules/inquirer": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">= 0.10" + "node": ">=6.0.0" } }, - "node_modules/gulp/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gulp/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/inquirer/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gulp/node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/gulp/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gulp/node_modules/yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "node_modules/interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "engines": { + "node": ">= 0.10" } }, - "node_modules/gulp/node_modules/yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dependencies": { - "camelcase": "^3.0.0" + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gulplog": { + "node_modules/is-absolute": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dependencies": { - "glogg": "^1.0.0" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "deprecated": "this library is no longer supported", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "binary-extensions": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "engines": { - "node": ">=6" - } + "node_modules/is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "deprecated": "This version of 'is-buffer' is out-of-date. You must update to v1.1.6 or newer" }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dependencies": { - "function-bind": "^1.1.1" + "builtin-modules": "^1.0.0" }, "engines": { - "node": ">= 0.4.0" + "node": ">=0.10.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "engines": { - "node": ">= 0.4" + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dependencies": { + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-value/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "dependencies": { - "is-buffer": "^1.1.5" - }, + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dependencies": { - "parse-passwd": "^1.0.0" + "is-extglob": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", "engines": { "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/iftype": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/iftype/-/iftype-4.0.9.tgz", - "integrity": "sha512-01Klo+04dkDzY193D1GVfOdQzmpqaYFJTAlZKRztkT/BOaU7sSnvxGimSln+7DMqLUP4tpDTNFgxqVPLYZVypA==", + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "engines": { - "node": ">=8", - "npm": ">=5" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "node_modules/is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "node_modules/is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "is-number": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "node_modules/is-odd/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/indx": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz", - "integrity": "sha1-Fdz1bunPZcAjTFE8J/vVgOcPvFA=" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/is-plain-object/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "node_modules/is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, - "node_modules/inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/is-reference": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.1.tgz", + "integrity": "sha512-URlByVARcyP2E2GC7d3Ur702g3vqW391VKCHuF5Goo/M8IT97k4RU/+56OYImwDdX1J/V/VRxECE/wJqB0I2tg==", + "dependencies": { + "@types/estree": "0.0.39" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has": "^1.0.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dependencies": { - "ansi-regex": "^5.0.0" + "is-unc-path": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/interpret": { + "node_modules/is-retry-allowed": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-absolute": { + "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "unc-path-regex": "^0.1.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" + "node_modules/is-unicode-supported": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", + "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "binary-extensions": "^1.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "deprecated": "This version of 'is-buffer' is out-of-date. You must update to v1.1.6 or newer" + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "node_modules/is-builtin-module": { + "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/istextorbinary": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz", + "integrity": "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==", "dependencies": { - "builtin-modules": "^1.0.0" + "binaryextensions": "^2.2.0", + "textextensions": "^3.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dependencies": { - "ci-info": "^1.5.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { - "is-ci": "bin.js" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "xmlcreate": "^2.0.4" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/jsdoc": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", + "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", "dependencies": { - "kind-of": "^3.0.2" + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.15.0" } }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/jsdoc-x": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-x/-/jsdoc-x-4.1.0.tgz", + "integrity": "sha512-eM4svACroOxjhV0JuwmNUQQHRXM4bhE4eQ+yjYnD/W8HjD+iZPjJaEUl3D6DHEX0uUpWawd31VhZg1E3j0Ageg==", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" + "bluebird": "^3.7.2", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "jsdoc": "^3.6.3", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "tmp": "^0.1.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "node_modules/jsdoc-x/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "node_modules/jsdoc-x/node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", "dependencies": { - "is-primitive": "^2.0.0" + "rimraf": "^2.6.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", - "dev": true, - "dependencies": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" } }, - "node_modules/is-expression/node_modules/acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true, + "node_modules/jsdoc/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { - "acorn": "bin/acorn" + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "node_modules/jsdoc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dependencies": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.6.0" } }, - "node_modules/is-negated-glob": { + "node_modules/jstransformer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "engines": { - "node": ">=0.10.0" + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" } }, - "node_modules/is-npm": { + "node_modules/just-debounce": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "engines": { - "node": ">=0.10.0" + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" } }, - "node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "kind-of": "^3.0.2" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "node_modules/klaw": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", + "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", "engines": { - "node": ">=0.10.0" + "node": ">=14.14.0" } }, - "node_modules/is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + "node_modules/known-css-properties": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", + "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==" }, - "node_modules/is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", "dependencies": { - "is-number": "^4.0.0" + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/is-odd/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dependencies": { - "path-is-inside": "^1.0.1" - }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "node_modules/lazy-req": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-2.0.0.tgz", + "integrity": "sha512-DgdBrjgXhRJAnkEs52BuREchSAtALDtSEXzlSJFJdQn5F0ppizjBROmEhHr5NW7U/eYoLZPiQ5NbHZ9vELIl7w==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dependencies": { - "isobject": "^3.0.1" + "readable-stream": "^2.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.3" } }, - "node_modules/is-plain-object/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/lazystream/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "engines": { - "node": ">=0.10.0" + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "engines": { - "node": ">=0.10.0" + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "node_modules/is-redirect": { + "node_modules/lcid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-reference": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.1.tgz", - "integrity": "sha512-URlByVARcyP2E2GC7d3Ur702g3vqW391VKCHuF5Goo/M8IT97k4RU/+56OYImwDdX1J/V/VRxECE/wJqB0I2tg==", + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "dependencies": { - "@types/estree": "0.0.39" + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dependencies": { - "has": "^1.0.3" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", "dependencies": { - "is-unc-path": "^1.0.0" + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "engines": { - "node": ">=0.10.0" + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" } }, - "node_modules/is-stream": { + "node_modules/load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dependencies": { - "unc-path-regex": "^0.1.2" + "is-utf8": "^0.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-unicode-supported": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", + "node_modules/locate-character": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-2.0.5.tgz", + "integrity": "sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "node_modules/lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "node_modules/lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" }, - "node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "node_modules/lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" }, - "node_modules/istextorbinary": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", - "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "node_modules/lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + }, + "node_modules/lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", "dependencies": { - "binaryextensions": "2", - "editions": "^1.3.3", - "textextensions": "2" - }, - "engines": { - "node": ">=0.12" + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" } }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + "node_modules/lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "node_modules/lodash.every": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", + "integrity": "sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dependencies": { - "xmlcreate": "^2.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" }, - "node_modules/jsdoc": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", - "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", - "dependencies": { - "@babel/parser": "^7.9.4", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^2.0.3", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.1" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, + "node_modules/lodash.maxby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.maxby/-/lodash.maxby-4.6.0.tgz", + "integrity": "sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.partialright": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", + "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + }, + "node_modules/lodash.sortedlastindex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.sortedlastindex/-/lodash.sortedlastindex-4.1.0.tgz", + "integrity": "sha512-s8xEQdsp2Tu5zUqVdFSe9C0kR8YlnAJYLqMdkh+pIRBRxF6/apWseLdHl3/+jv2I61dhPwtI/Ff+EqvCpc+N8w==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "engines": { - "node": ">=8.15.0" + "node": ">=0.10.0" } }, - "node_modules/jsdoc-x": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-x/-/jsdoc-x-4.1.0.tgz", - "integrity": "sha512-eM4svACroOxjhV0JuwmNUQQHRXM4bhE4eQ+yjYnD/W8HjD+iZPjJaEUl3D6DHEX0uUpWawd31VhZg1E3j0Ageg==", - "dependencies": { - "bluebird": "^3.7.2", - "fs-extra": "^8.1.0", - "glob": "^7.1.6", - "jsdoc": "^3.6.3", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "tmp": "^0.1.0" - }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jsdoc-x/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=10" } }, - "node_modules/jsdoc-x/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "es5-ext": "~0.10.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" }, "engines": { - "node": "*" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsdoc-x/node_modules/graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/jsdoc-x/node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dependencies": { - "rimraf": "^2.6.3" + "kind-of": "^6.0.2" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jsdoc/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/jsdoc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "engines": { "node": ">=8" }, @@ -7655,849 +7428,833 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "node_modules/markdown-it-anchor": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.4.tgz", + "integrity": "sha512-Ul4YVYZNxMJYALpKtu+ZRdrryYt/GlQ5CK+4l1bp/gWXOG2QWElt6AqF3Mih/wfUKdZbNAZVXGR73/n6U/8img==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/marked": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz", + "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" } }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" + "node_modules/matchdep/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" + "node_modules/matchdep/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/matchdep/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { - "json-buffer": "3.0.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "is-buffer": "^1.1.5" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "node_modules/matchdep/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "graceful-fs": "^4.1.9" + "ms": "2.0.0" } }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "node_modules/matchdep/node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "package-json": "^4.0.0" + "is-descriptor": "^0.1.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "engines": { "node": ">=0.10.0" } }, - "node_modules/lazy-req": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-2.0.0.tgz", - "integrity": "sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ=", - "engines": { - "node": ">=4" - } - }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "readable-stream": "^2.0.5" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">= 0.6.3" + "node": ">=0.10.0" } }, - "node_modules/lazystream/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "safe-buffer": "~5.1.0" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { - "invert-kv": "^1.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "flush-write-stream": "^1.0.2" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "node_modules/matchdep/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "node_modules/matchdep/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "uc.micro": "^1.0.1" + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "node_modules/matchdep/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "node_modules/matchdep/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { - "is-utf8": "^0.2.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/locate-character": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-2.0.5.tgz", - "integrity": "sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg==" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "p-locate": "^5.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.10" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "node_modules/matchdep/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "node_modules/matchdep/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" + "node_modules/matchdep/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" + "node_modules/matchdep/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + "node_modules/matchdep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + "node_modules/matchdep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "node_modules/matchdep/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/lodash.assigninwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz", - "integrity": "sha1-rwLJhDKshtk9ppW0voAUAZcXNq8=" + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + "node_modules/memoizee": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", + "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.45", + "es6-weak-map": "^2.0.2", + "event-emitter": "^0.3.5", + "is-promise": "^2.1", + "lru-queue": "0.1", + "next-tick": "1", + "timers-ext": "^0.1.5" + } }, - "node_modules/lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "node_modules/lodash.every": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", - "integrity": "sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "node_modules/memoizee/node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "node_modules/lodash.maxby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.maxby/-/lodash.maxby-4.6.0.tgz", - "integrity": "sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.partialright": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz", - "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.rest": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.5.tgz", - "integrity": "sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=" - }, - "node_modules/lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "node_modules/memoizee/node_modules/es5-ext/node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/memoizee/node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/memoizee/node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/memoizee/node_modules/es6-symbol/node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/meow": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.2.tgz", + "integrity": "sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q==", "dependencies": { - "has-flag": "^3.0.0" + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "node_modules/meow/node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "node_modules/meow/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dependencies": { - "es5-ext": "~0.10.2" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "node_modules/meow/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "pify": "^3.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "node_modules/meow/node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dependencies": { - "kind-of": "^6.0.2" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/meow/node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/meow/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/meow/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dependencies": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "node_modules/markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", - "peerDependencies": { - "markdown-it": "*" + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" } }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "node_modules/marked": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", - "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", - "bin": { - "marked": "bin/marked" - }, + "node_modules/mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", "engines": { - "node": ">= 10" + "node": ">= 0.6" } }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "node_modules/mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" + "mime-db": "1.43.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.6" } }, - "node_modules/matchdep/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/matchdep/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/matchdep/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "is-extendable": "^0.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/matchdep/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "node_modules/matchdep/node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, + "node_modules/minimist-options/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dependencies": { - "is-extendable": "^0.1.0" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dependencies": { - "kind-of": "^3.0.2" + "is-plain-object": "^2.0.4" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "is-buffer": "^1.1.5" + "minimist": "^1.2.5" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=" }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/matchdep/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/matchdep/node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dependencies": { + "arr-diff": "^4.0.0", "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" @@ -8506,1627 +8263,1269 @@ "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, + "node_modules/nanomatch/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, + "node_modules/nanomatch/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, - "node_modules/matchdep/node_modules/findup-sync": { + "node_modules/ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "bin": { + "ncp": "bin/ncp" } }, - "node_modules/matchdep/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { - "kind-of": "^6.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/matchdep/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" } }, - "node_modules/matchdep/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/node-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/matchdep/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "is-extglob": "^2.1.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/matchdep/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dependencies": { - "kind-of": "^3.0.2" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/matchdep/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dependencies": { + "once": "^1.3.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/matchdep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, - "node_modules/matchdep/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "path-key": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } }, - "node_modules/mdurl": { + "node_modules/number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/memoizee/node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "node_modules/nw-builder": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/nw-builder/-/nw-builder-3.5.7.tgz", + "integrity": "sha512-7LTQu8oom56xdDeyoUygZytxvyWuh+pw4nY4eFMGUd7/m/eOdAs/6UZjav6CbjnyIg8n4FtwnjCXXLsFI6Ooug==", "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "archiver": "^2.1.1", + "boxen": "^1.1.0", + "chalk": "^2.3.2", + "deprecate": "~1.0.0", + "extract-zip": "^1.6.5", + "graceful-fs-extra": "^2.0.0", + "graceful-ncp": "^3.0.0", + "inherits": "~2.0.1", + "lazy-req": "^2.0.0", + "lodash": "~4.17.4", + "optimist": "^0.6.1", + "plist": "^3.0.1", + "progress": "~2.0.0", + "rcedit": "^1.0.0", + "recursive-readdir-sync": "^1.0.6", + "request": "^2.88.0", + "rimraf": "^2.5.2", + "semver": "^5.5.0", + "simple-glob": "~0.2.0", + "tar-fs": "^1.13.0", + "temp": "github:adam-lynch/node-temp#remove_tmpdir_dep", + "thenify": "^3.3.0", + "update-notifier": "^2.4.0", + "winresourcer": "^0.9.0" + }, + "bin": { + "nwbuild": "bin/nwbuild" + }, + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/memoizee/node_modules/es5-ext/node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node_modules/memoizee/node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/nw-builder/node_modules/ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "string-width": "^2.0.0" } }, - "node_modules/memoizee/node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "node_modules/nw-builder/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" } }, - "node_modules/memoizee/node_modules/es6-symbol/node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/nw-builder/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/meow": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.2.tgz", - "integrity": "sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q==", + "node_modules/nw-builder/node_modules/boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/meow/node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "node_modules/nw-builder/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/meow/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/nw-builder/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/nw-builder/node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "node_modules/nw-builder/node_modules/cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/nw-builder/node_modules/configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "dependencies": { - "yallist": "^4.0.0" + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, + "node_modules/nw-builder/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/meow/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/nw-builder/node_modules/dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "is-obj": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/nw-builder/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/meow/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "node_modules/nw-builder/node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" + "ini": "^1.3.4" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "node_modules/nw-builder/node_modules/got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/meow/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/nw-builder/node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dependencies": { - "lru-cache": "^6.0.0" + "ci-info": "^1.5.0" }, "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "is-ci": "bin.js" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" + "node_modules/nw-builder/node_modules/is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", + "dependencies": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/meow/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/nw-builder/node_modules/is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { + "node_modules/nw-builder/node_modules/is-path-inside": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "dependencies": { - "readable-stream": "^2.0.1" + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/merge-stream/node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "node_modules/nw-builder/node_modules/latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", + "dependencies": { + "package-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/merge-stream/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "node_modules/nw-builder/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/merge-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/nw-builder/node_modules/package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", "dependencies": { - "safe-buffer": "~5.1.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/nw-builder/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, + "node_modules/nw-builder/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "engines": { - "node": ">= 0.6" + "node_modules/nw-builder/node_modules/registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "node_modules/mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "node_modules/nw-builder/node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", "dependencies": { - "mime-db": "1.43.0" + "rc": "^1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/mimic-fn": { + "node_modules/nw-builder/node_modules/semver-diff": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", + "dependencies": { + "semver": "^5.0.3" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/nw-builder/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/nw-builder/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/nw-builder/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "brace-expansion": "^1.1.7" + "has-flag": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "node_modules/nw-builder/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "crypto-random-string": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/nw-builder/node_modules/update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dependencies": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/nw-builder/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "prepend-http": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/nw-builder/node_modules/widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dependencies": { - "is-plain-object": "^2.0.4" + "string-width": "^2.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/nw-builder/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "node_modules/module-not-found-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=" - }, - "node_modules/mout": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.5.0.tgz", - "integrity": "sha1-/5Z1ZqkPKVlenLi254AKW1ZjVYM=" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "node_modules/nw-builder/node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", "engines": { - "node": ">= 0.10" + "node": ">=4" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "bin": { - "ncp": "bin/ncp" + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dependencies": { - "whatwg-url": "^5.0.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/node-notifier": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.0.tgz", - "integrity": "sha512-ZTqP90y1eyb2xAZTa7j4AlAayTwh6cL8mn0nlJhLDq8itXGnJUmQGYOnpaMUvqZVfGo0vhU7KZ3HtDW6CT2SiQ==", + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/object.defaults/node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/object.defaults/node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "for-in": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/object.defaults/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/node-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "node_modules/object.map/node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "for-in": "^1.0.1" }, "engines": { - "node": "*" - } - }, - "node_modules/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "node": ">=0.10.0" } }, - "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dependencies": { - "remove-trailing-separator": "^1.0.1" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", "dependencies": { - "once": "^1.3.2" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/object.reduce/node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dependencies": { - "path-key": "^2.0.0" + "for-in": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" + "wrappy": "1" } }, - "node_modules/nw-builder": { - "version": "3.5.7", - "resolved": "https://registry.npmjs.org/nw-builder/-/nw-builder-3.5.7.tgz", - "integrity": "sha512-7LTQu8oom56xdDeyoUygZytxvyWuh+pw4nY4eFMGUd7/m/eOdAs/6UZjav6CbjnyIg8n4FtwnjCXXLsFI6Ooug==", + "node_modules/onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dependencies": { - "archiver": "^2.1.1", - "boxen": "^1.1.0", - "chalk": "^2.3.2", - "deprecate": "~1.0.0", - "extract-zip": "^1.6.5", - "graceful-fs-extra": "^2.0.0", - "graceful-ncp": "^3.0.0", - "inherits": "~2.0.1", - "lazy-req": "^2.0.0", - "lodash": "~4.17.4", - "optimist": "^0.6.1", - "plist": "^3.0.1", - "progress": "~2.0.0", - "rcedit": "^1.0.0", - "recursive-readdir-sync": "^1.0.6", - "request": "^2.88.0", - "rimraf": "^2.5.2", - "semver": "^5.5.0", - "simple-glob": "~0.2.0", - "tar-fs": "^1.13.0", - "temp": "github:adam-lynch/node-temp#remove_tmpdir_dep", - "thenify": "^3.3.0", - "update-notifier": "^2.4.0", - "winresourcer": "^0.9.0" - }, - "bin": { - "nwbuild": "bin/nwbuild" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">= 4.0.0" + "node": ">=6" } }, - "node_modules/nw-builder/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, - "node_modules/nw-builder/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" + }, + "node_modules/optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/nw-builder/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/optionator/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "node_modules/nw-builder/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/ora": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.0.tgz", + "integrity": "sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==", "dependencies": { - "has-flag": "^3.0.0" + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" + "node_modules/ora/node_modules/bl": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", + "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/ora/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/ora/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dependencies": { - "is-descriptor": "^0.1.0" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/ora/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/ora/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dependencies": { - "isobject": "^3.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-visit/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" + "readable-stream": "^2.0.1" } }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "node_modules/ordered-read-streams/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/ordered-read-streams/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/object.defaults/node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "engines": { - "node": ">=0.10.0" + "node_modules/ordered-read-streams/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/object.defaults/node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dependencies": { - "for-in": "^1.0.1" + "lcid": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.defaults/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "engines": { "node": ">=0.10.0" } }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/object.map/node_modules/for-own": { + "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dependencies": { - "for-in": "^1.0.1" - }, + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "isobject": "^3.0.1" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.pick/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object.reduce/node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { - "for-in": "^1.0.1" + "callsites": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dependencies": { - "mimic-fn": "^2.1.0" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "node": ">=0.8" } }, - "node_modules/optimist/node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - }, - "node_modules/optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "error-ex": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/optionator/node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "node_modules/ora": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.0.tgz", - "integrity": "sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==", - "dependencies": { - "bl": "^5.0.0", - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - }, + "node_modules/parse-ms": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", + "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ora/node_modules/bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "node": ">= 0.10" } }, - "node_modules/ora/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "node_modules/parse5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", + "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "entities": "^4.3.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/ora/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" + "domhandler": "^5.0.2", + "parse5": "^7.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dependencies": { - "ansi-regex": "^6.0.1" + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/ordered-read-streams": { + "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dependencies": { - "readable-stream": "^2.0.1" + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ordered-read-streams/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, - "node_modules/ordered-read-streams/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" } }, - "node_modules/ordered-read-streams/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dependencies": { - "safe-buffer": "~5.1.0" + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "engines": { "node": ">=0.10.0" } }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dependencies": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-ms": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", - "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" @@ -10135,17 +9534,22 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -10180,20 +9584,6 @@ "node": ">=0.10.0" } }, - "node_modules/pkg-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", - "integrity": "sha1-N45W1v0T6Iv7b0ol33qD+qvduls=", - "dependencies": { - "find-up": "^1.0.0", - "load-json-file": "^1.1.0", - "object-assign": "^4.0.1", - "symbol": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/plist": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", @@ -10255,28 +9645,290 @@ "node": ">=0.10.0" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "node_modules/postcss-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.4.1.tgz", + "integrity": "sha512-OKihuWxPuBQrQeLNsavP7ytJ9IYNj/ViAXB2v7Qjh56LnfESKrkahKA9si4VfPN8xtz6oqUE6KdL0bTPrHJr6g==", + "dependencies": { + "htmlparser2": "^7.1.2", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12 || >=14" + } + }, + "node_modules/postcss-html/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/postcss-html/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/postcss-html/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/postcss-html/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/postcss-html/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/postcss-html/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/postcss-html/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/postcss-html/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-html/node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==" + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-styl": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/postcss-styl/-/postcss-styl-0.11.1.tgz", + "integrity": "sha512-L3QphF6IaviaSxTvY+t2gVR26GAsyuRwFheSRQtoD5Sz6JiwPmbPoS1b2/0Az6t7IGo0G8xEJEjBWw9ldz20Xg==", + "dependencies": { + "debug": "^4.1.1", + "fast-diff": "^1.2.0", + "lodash.sortedlastindex": "^4.1.0", + "postcss": "^7.0.27 || ^8.0.0", + "stylus": "^0.57.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || ^11.10.1 || >=12.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/postcss-styl/node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/postcss-styl/node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-styl/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/postcss-styl/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/postcss-styl/node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/postcss-styl/node_modules/stylus": { + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz", + "integrity": "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==", + "dependencies": { + "css": "^3.0.0", + "debug": "^4.3.2", + "glob": "^7.1.6", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" } }, "node_modules/pretty-hrtime": { @@ -10304,9 +9956,9 @@ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "node_modules/progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "engines": { "node": ">=0.4.0" } @@ -10337,7 +9989,7 @@ "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, "node_modules/psl": { "version": "1.8.0", @@ -10384,17 +10036,11 @@ "with": "^7.0.0" } }, - "node_modules/pug-code-gen/node_modules/pug-error": { + "node_modules/pug-error": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" }, - "node_modules/pug-error": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", - "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==", - "dev": true - }, "node_modules/pug-filters": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", @@ -10407,37 +10053,14 @@ "resolve": "^1.15.1" } }, - "node_modules/pug-filters/node_modules/pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, - "node_modules/pug-filters/node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" - }, - "node_modules/pug-filters/node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/pug-lexer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", - "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", "dependencies": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.3" + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" } }, "node_modules/pug-linker": { @@ -10449,24 +10072,6 @@ "pug-walk": "^2.0.0" } }, - "node_modules/pug-linker/node_modules/pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, - "node_modules/pug-linker/node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" - }, - "node_modules/pug-lint-config-clock": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-lint-config-clock/-/pug-lint-config-clock-2.0.0.tgz", - "integrity": "sha1-d9uRnNdsQNnc3CLgedICy2xQf1A=", - "peerDependencies": { - "pug-lint": "^2.2.0" - } - }, "node_modules/pug-load": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", @@ -10476,19 +10081,13 @@ "pug-walk": "^2.0.0" } }, - "node_modules/pug-load/node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" - }, "node_modules/pug-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", - "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "dependencies": { - "pug-error": "^1.3.3", - "token-stream": "0.0.1" + "pug-error": "^2.0.0", + "token-stream": "1.0.0" } }, "node_modules/pug-runtime": { @@ -10504,92 +10103,37 @@ "pug-error": "^2.0.0" } }, - "node_modules/pug-strip-comments/node_modules/pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, "node_modules/pug-walk": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", - "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" }, - "node_modules/pug/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/pug/node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "node_modules/pug/node_modules/pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, - "node_modules/pug/node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug/node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug/node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" - }, - "node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "node_modules/punycode": { @@ -10619,6 +10163,25 @@ "node": ">=0.6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -10649,14 +10212,6 @@ "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.2.tgz", "integrity": "sha512-z2ypB4gbINhI6wVe0JJMmdpmOpmNc4g90sE6/6JSuch5kYnjfz9CxvVPqqhShgR6GIkmtW3W2UlfiXhWljA0Fw==" }, - "node_modules/read-file": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/read-file/-/read-file-0.2.0.tgz", - "integrity": "sha1-cMa6+IQux9FUD5gf0Oau1Mgb1UU=", - "engines": { - "node": ">=0.8" - } - }, "node_modules/read-package-json": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", @@ -10682,17 +10237,6 @@ "node": ">=10" } }, - "node_modules/read-package-json/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/read-package-json/node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -10721,11 +10265,6 @@ "node": ">=10" } }, - "node_modules/read-package-json/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -10764,42 +10303,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dependencies": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/readdirp/node_modules/readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp/node_modules/string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/readysteady": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/readysteady/-/readysteady-1.1.4.tgz", @@ -10820,1894 +10323,1947 @@ "url": "https://github.com/davidwinter/readysteady?sponsor=1" } }, - "node_modules/readysteady/node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/readysteady/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "resolve": "^1.1.6" + }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/readysteady/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/recursive-readdir-sync": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz", + "integrity": "sha1-Hb9tMvPFu4083pemxYjVR6nhPVY=" + }, + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readysteady/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readysteady/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/readysteady/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.5.0" } }, - "node_modules/readysteady/node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "rc": "^1.2.8" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/readysteady/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, "engines": { "node": ">=8" } }, - "node_modules/readysteady/node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dependencies": { - "is-obj": "^2.0.0" + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", "dependencies": { - "pump": "^3.0.0" + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/readysteady/node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, + "node_modules/remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" + }, + "node_modules/repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "engines": { - "node": ">=8.6" + "node": ">=0.10" } }, - "node_modules/readysteady/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/readysteady/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", "dependencies": { - "ci-info": "^2.0.0" + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">= 0.10" } }, - "node_modules/readysteady/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" + "node_modules/replace-homedir/node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dependencies": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" } }, - "node_modules/readysteady/node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/replacestream/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/replacestream/node_modules/readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/readysteady/node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/replacestream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/readysteady/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/readysteady/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/request/node_modules/safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=" + }, + "node_modules/requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "lodash": "^4.17.14" } }, - "node_modules/readysteady/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "semver": "^6.0.0" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readysteady/node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readysteady/node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/readysteady/node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, - "node_modules/readysteady/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/readysteady/node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", "dependencies": { - "rc": "^1.2.8" + "value-or-function": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.10" } }, - "node_modules/readysteady/node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/readysteady/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "lowercase-keys": "^1.0.0" } }, - "node_modules/readysteady/node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "semver": "^6.3.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/readysteady/node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" } }, - "node_modules/readysteady/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dependencies": { - "ansi-regex": "^5.0.1" + "align-text": "^0.1.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/readysteady/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/readysteady/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/riot": { + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/riot/-/riot-3.13.2.tgz", + "integrity": "sha512-L4WFJEhbTA0deDoZ1XxoVw7Tf96+xYc06aQ+4QM+IkYClD6mZ7E/9zN3Rd48uYMBvHQfHtbPvR0KEiu3pJyI2A==", "dependencies": { - "crypto-random-string": "^2.0.0" + "riot-cli": "^4.0.2", + "riot-compiler": "^3.5.2", + "riot-observable": "^3.0.0", + "riot-tmpl": "^3.0.8", + "simple-dom": "1.3.0", + "simple-html-tokenizer": "^0.5.7" + }, + "bin": { + "riot": "bin/index.js" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/readysteady/node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "node_modules/riot-cli": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/riot-cli/-/riot-cli-4.1.2.tgz", + "integrity": "sha512-JuRHDJKtGvAMksulzYHQRmOmzeICIOLe/PHvRuByfRlqGa0IP87baHATkKF4uwveMQKx3mq4JTvhfQHxilhi4g==", "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "chalk": "^2.3.2", + "chokidar": "^2.0.3", + "co": "^4.6.0", + "optionator": "^0.8.2", + "riot-compiler": "^3.5.1", + "rollup": "^0.57.1" }, - "engines": { - "node": ">=10" + "bin": { + "riot": "lib/index.js" }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/readysteady/node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/riot-cli/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "prepend-http": "^2.0.0" + "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, - "node_modules/readysteady/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/riot-cli/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "string-width": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/readysteady/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/riot-cli/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/readysteady/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/riot-compiler": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/riot-compiler/-/riot-compiler-3.5.3.tgz", + "integrity": "sha512-JoBG4MnDfhXVKgZG+Yr5hBgSiWbxEH2fOJGw1fF4PmXhtOP0MV1fAb/LgSNQQA08wMwb1MPW0p7ZSza/I+Mu0A==", "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/readysteady/node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" + "skip-regex": "^0.3.1", + "source-map": "^0.7.2", + "string-similarity": "^1.2.0" } }, - "node_modules/readysteady/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/riot-observable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/riot-observable/-/riot-observable-3.0.0.tgz", + "integrity": "sha1-i70tr3KiFBuwQwgt9AI9xQS60us=" }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "node_modules/riot-tmpl": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/riot-tmpl/-/riot-tmpl-3.0.8.tgz", + "integrity": "sha1-3WVOcqOhUgywCcvvcMc4Vt7VhKY=", "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" + "eslint-config-riot": "^1.0.0" } }, - "node_modules/recursive-readdir-sync": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz", - "integrity": "sha1-Hb9tMvPFu4083pemxYjVR6nhPVY=" - }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "node_modules/rollup": { + "version": "0.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.57.1.tgz", + "integrity": "sha512-I18GBqP0qJoJC1K1osYjreqA8VAKovxuI3I81RSk0Dmr4TgloI0tAULjZaox8OsJ+n7XRrhH6i0G2By/pj1LCA==", "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" + "@types/acorn": "^4.0.3", + "acorn": "^5.5.3", + "acorn-dynamic-import": "^3.0.0", + "date-time": "^2.1.0", + "is-reference": "^1.1.0", + "locate-character": "^2.0.5", + "pretty-ms": "^3.1.0", + "require-relative": "^0.8.7", + "rollup-pluginutils": "^2.0.1", + "signal-exit": "^3.0.2", + "sourcemap-codec": "^1.4.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rollup": "bin/rollup" } }, - "node_modules/regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "node_modules/rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", "dependencies": { - "is-equal-shallow": "^0.1.3", - "is-primitive": "^2.0.0" + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "is-promise": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "dependencies": { + "tslib": "^1.9.0" + }, "engines": { - "node": ">=6.5.0" + "npm": ">=2.0.0" } }, - "node_modules/registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "ret": "~0.1.10" } }, - "node_modules/registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dependencies": { - "rc": "^1.0.1" + "semver": "^6.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" + "sver-compat": "^1.5.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/remove-trailing-separator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", - "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" - }, - "node_modules/repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-dom": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-dom/-/simple-dom-1.3.0.tgz", + "integrity": "sha512-RVjr6e80FFGDqDJZeQd4EMwoDLatn4Jy2SfuXecrP1IgG4ZAqkGSokE8LNV5i0kzWR2IM0e257xGN9JS8lxm0Q==" + }, + "node_modules/simple-glob": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/simple-glob/-/simple-glob-0.2.0.tgz", + "integrity": "sha512-CnCJ+SEDIWYviwBUp7pGxdq4QZgaR5xVzoxL/gujEwn2/vOJ4PVQrmd8Z0spH1cPsLxgF83cNjNcy4zYvSWiZA==", "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" + "glob": "^7.1.2", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.union": "^4.6.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 6" } }, - "node_modules/replace-homedir/node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "node_modules/simple-html-tokenizer": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.7.tgz", + "integrity": "sha512-APW9iYbkJ5cijjX4Ljhf3VG8SwYPUJT5gZrwci/wieMabQxWFiV5VwsrP5c6GMRvXKEQMGkAB1d9dvW66dTqpg==" }, - "node_modules/replacestream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", - "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", - "dependencies": { - "escape-string-regexp": "^1.0.3", - "object-assign": "^4.0.1", - "readable-stream": "^2.0.2" + "node_modules/skip-regex": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-0.3.1.tgz", + "integrity": "sha1-F5GarirEzj1h1ed+7diCBsZKohU=", + "engines": { + "node": ">=4.2" } }, - "node_modules/replacestream/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/replacestream/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "node_modules/replacestream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dependencies": { - "safe-buffer": "~5.1.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/request/node_modules/safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "node_modules/require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=" - }, - "node_modules/requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dependencies": { - "path-parse": "^1.0.5" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "is-descriptor": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { - "value-or-function": "^3.0.0" + "kind-of": "^6.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/responselike": { + "node_modules/snapdragon-node/node_modules/is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "node_modules/snapdragon-node/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "engines": { - "node": ">=0.12" + "node": ">=0.10.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/snapdragon-node/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dependencies": { - "align-text": "^0.1.1" + "kind-of": "^3.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "ms": "2.0.0" } }, - "node_modules/riot": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/riot/-/riot-3.13.2.tgz", - "integrity": "sha512-L4WFJEhbTA0deDoZ1XxoVw7Tf96+xYc06aQ+4QM+IkYClD6mZ7E/9zN3Rd48uYMBvHQfHtbPvR0KEiu3pJyI2A==", + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "riot-cli": "^4.0.2", - "riot-compiler": "^3.5.2", - "riot-observable": "^3.0.0", - "riot-tmpl": "^3.0.8", - "simple-dom": "1.3.0", - "simple-html-tokenizer": "^0.5.7" - }, - "bin": { - "riot": "bin/index.js" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/riot-compiler": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/riot-compiler/-/riot-compiler-3.5.3.tgz", - "integrity": "sha512-JoBG4MnDfhXVKgZG+Yr5hBgSiWbxEH2fOJGw1fF4PmXhtOP0MV1fAb/LgSNQQA08wMwb1MPW0p7ZSza/I+Mu0A==", + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { - "skip-regex": "^0.3.1", - "source-map": "^0.7.2", - "string-similarity": "^1.2.0" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/riot-observable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/riot-observable/-/riot-observable-3.0.0.tgz", - "integrity": "sha1-i70tr3KiFBuwQwgt9AI9xQS60us=" + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/riot-tmpl": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/riot-tmpl/-/riot-tmpl-3.0.8.tgz", - "integrity": "sha1-3WVOcqOhUgywCcvvcMc4Vt7VhKY=", - "dependencies": { - "eslint-config-riot": "^1.0.0" + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" } }, - "node_modules/riot/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/riot/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/riot/node_modules/riot-cli": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/riot-cli/-/riot-cli-4.1.2.tgz", - "integrity": "sha512-JuRHDJKtGvAMksulzYHQRmOmzeICIOLe/PHvRuByfRlqGa0IP87baHATkKF4uwveMQKx3mq4JTvhfQHxilhi4g==", - "dependencies": { - "chalk": "^2.3.2", - "chokidar": "^2.0.3", - "co": "^4.6.0", - "optionator": "^0.8.2", - "riot-compiler": "^3.5.1", - "rollup": "^0.57.1" - }, - "bin": { - "riot": "lib/index.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/riot/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "node_modules/rollup": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.57.1.tgz", - "integrity": "sha512-I18GBqP0qJoJC1K1osYjreqA8VAKovxuI3I81RSk0Dmr4TgloI0tAULjZaox8OsJ+n7XRrhH6i0G2By/pj1LCA==", - "dependencies": { - "@types/acorn": "^4.0.3", - "acorn": "^5.5.3", - "acorn-dynamic-import": "^3.0.0", - "date-time": "^2.1.0", - "is-reference": "^1.1.0", - "locate-character": "^2.0.5", - "pretty-ms": "^3.1.0", - "require-relative": "^0.8.7", - "rollup-pluginutils": "^2.0.1", - "signal-exit": "^3.0.2", - "sourcemap-codec": "^1.4.1" - }, - "bin": { - "rollup": "bin/rollup" - } + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, - "node_modules/rollup-pluginutils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", - "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", - "dependencies": { - "estree-walker": "^0.6.1" - } + "node_modules/sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==" }, - "node_modules/run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "dependencies": { - "is-promise": "^2.1.0" - }, + "node_modules/sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", "engines": { - "node": ">=0.12.0" + "node": ">= 0.10" } }, - "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "node_modules/rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "node_modules/spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "node_modules/spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dependencies": { - "ret": "~0.1.10" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "bin": { - "semver": "bin/semver" - } + "node_modules/spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" }, - "node_modules/semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dependencies": { - "semver": "^5.0.3" + "extend-shallow": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dependencies": { - "sver-compat": "^1.5.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/set-blocking": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-1.0.0.tgz", - "integrity": "sha1-zV5dk4BI3xrJLf6S4fFq3WVvXsU=" - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { - "is-extendable": "^0.1.0" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, + "node_modules/stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "node_modules/streamqueue": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-1.1.2.tgz", + "integrity": "sha512-CHUpqa+1BM99z7clQz9W6L9ZW4eXRRQCR0H+utVAGGvNo2ePlJAFjhdK0IjunaBbY/gWKJawk5kpJeyz0EXxRA==", "dependencies": { - "shebang-regex": "^1.0.0" + "isstream": "^0.1.2", + "readable-stream": "^2.3.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.5" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/streamqueue/node_modules/process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "node_modules/streamqueue/node_modules/readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "node_modules/streamqueue/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "node_modules/simple-dom": { + "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-dom/-/simple-dom-1.3.0.tgz", - "integrity": "sha512-RVjr6e80FFGDqDJZeQd4EMwoDLatn4Jy2SfuXecrP1IgG4ZAqkGSokE8LNV5i0kzWR2IM0e257xGN9JS8lxm0Q==" - }, - "node_modules/simple-glob": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/simple-glob/-/simple-glob-0.2.0.tgz", - "integrity": "sha512-CnCJ+SEDIWYviwBUp7pGxdq4QZgaR5xVzoxL/gujEwn2/vOJ4PVQrmd8Z0spH1cPsLxgF83cNjNcy4zYvSWiZA==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "glob": "^7.1.2", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.union": "^4.6.0" - }, - "engines": { - "node": ">= 6" + "safe-buffer": "~5.2.0" } }, - "node_modules/simple-html-tokenizer": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.7.tgz", - "integrity": "sha512-APW9iYbkJ5cijjX4Ljhf3VG8SwYPUJT5gZrwci/wieMabQxWFiV5VwsrP5c6GMRvXKEQMGkAB1d9dvW66dTqpg==" + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/skip-regex": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-0.3.1.tgz", - "integrity": "sha1-F5GarirEzj1h1ed+7diCBsZKohU=", - "engines": { - "node": ">=4.2" + "node_modules/string-similarity": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.2.tgz", + "integrity": "sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==", + "dependencies": { + "lodash.every": "^4.6.0", + "lodash.flattendeep": "^4.4.0", + "lodash.foreach": "^4.5.0", + "lodash.map": "^4.6.0", + "lodash.maxby": "^4.6.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/define-property": { + "node_modules/strip-bom-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "node_modules/strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dependencies": { - "kind-of": "^6.0.0" + "min-indent": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==" + }, + "node_modules/stylelint": { + "version": "14.9.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.9.1.tgz", + "integrity": "sha512-RdAkJdPiLqHawCSnu21nE27MjNXaVd4WcOHA4vK5GtIGjScfhNnaOuWR2wWdfKFAvcWQPOYe311iveiVKSmwsA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.2", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "execall": "^2.0.0", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.25.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" } }, - "node_modules/snapdragon-node/node_modules/kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "node_modules/stylelint-config-html": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.0.0.tgz", + "integrity": "sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==", "engines": { - "node": ">=0.10.0" + "node": "^12 || >=14" + }, + "peerDependencies": { + "postcss-html": "^1.0.0", + "stylelint": ">=14.0.0" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/stylelint-stylus": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/stylelint-stylus/-/stylelint-stylus-0.16.1.tgz", + "integrity": "sha512-1SZoBN6XzDh9frk6pdVZWRTTJJZkS7zLnnclX51/jSz5+oW0XEKbr6tJyi7QL5TBp3ddmw5YzXK+2dpmjf7tzg==", "dependencies": { - "kind-of": "^3.2.0" + "html-tags": "^3.1.0", + "lodash": "^4.17.15", + "mathml-tag-names": "^2.1.3", + "postcss-html": "^1.0.1", + "postcss-media-query-parser": "^0.2.3", + "postcss-selector-parser": "^6.0.2", + "postcss-styl": "^0.11.1", + "style-search": "^0.1.0", + "stylelint-config-html": "^1.0.0", + "svg-tags": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12 || >=14" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "postcss-syntax": "^0.36.2", + "stylelint": "^13.2.1 || ^14.0.0" + }, + "peerDependenciesMeta": { + "postcss-syntax": { + "optional": true + } } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", + "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3", + "postcss-selector-parser": "^6.0.10" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/stylelint/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { - "is-descriptor": "^0.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" + }, + "node_modules/stylelint/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "is-extendable": "^0.1.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/stylelint/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/stylelint/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "node_modules/stylelint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "node_modules/sourcemap-codec": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", - "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==" + "node_modules/stylelint/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "node_modules/stylelint/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + "node_modules/stylelint/node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, - "node_modules/spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "node_modules/stylelint/node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/spdx-license-ids": { + "node_modules/stylelint/node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dependencies": { - "extend-shallow": "^3.0.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "node_modules/stylelint/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "node_modules/stylelint/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { - "node": "*" + "node": ">= 4" } }, - "node_modules/stampit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stampit/-/stampit-1.2.0.tgz", - "integrity": "sha1-UfnGoIwUZHP80CGvVRyfMu1ce50=", - "dependencies": { - "mout": "~0.5.0" + "node_modules/stylelint/node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "engines": { + "node": ">=8" } }, - "node_modules/stat-mode": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", - "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==" + "node_modules/stylelint/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, + "node_modules/stylelint/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, + "node_modules/stylelint/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + "node_modules/stylelint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/stream-shift": { + "node_modules/stylelint/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/streamqueue": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-1.1.2.tgz", - "integrity": "sha512-CHUpqa+1BM99z7clQz9W6L9ZW4eXRRQCR0H+utVAGGvNo2ePlJAFjhdK0IjunaBbY/gWKJawk5kpJeyz0EXxRA==", - "dependencies": { - "isstream": "^0.1.2", - "readable-stream": "^2.3.3" - }, + "node_modules/stylelint/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { - "node": ">=6.9.5" + "node": ">=0.10.0" } }, - "node_modules/streamqueue/node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "node_modules/streamqueue/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "node_modules/stylelint/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/streamqueue/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/stylelint/node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-similarity": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.2.tgz", - "integrity": "sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==", - "dependencies": { - "lodash.every": "^4.6.0", - "lodash.flattendeep": "^4.4.0", - "lodash.foreach": "^4.5.0", - "lodash.map": "^4.6.0", - "lodash.maxby": "^4.6.0" - } - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "node_modules/stylelint/node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "node_modules/stylelint/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "ansi-regex": "^3.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=4" + "node": ">=8.6" } }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/stylelint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/stylelint/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dependencies": { - "ansi-regex": "^2.0.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "node_modules/stylelint/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "node_modules/stylelint/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "min-indent": "^1.0.1" + "p-try": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylint": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stylint/-/stylint-1.4.1.tgz", - "integrity": "sha1-DXLTCYCRfwfo3+QhOavPI0c2WSI=", - "dependencies": { - "async": "1.5.2", - "chokidar": "1.5.2", - "glob": "7.0.3", - "lodash.defaults": "4.0.1", - "path-is-absolute": "1.0.0", - "stampit": "1.2.0", - "strip-json-comments": "2.0.1", - "user-home": "2.0.0", - "yargs": "4.7.1" - }, - "bin": { - "stylint": "bin/stylint" - } - }, - "node_modules/stylint-stylish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stylint-stylish/-/stylint-stylish-2.0.0.tgz", - "integrity": "sha512-o940rcLoHlAfCoMHDNgl7QCYp44TBnHh0fv/H/InVLnbh/W25/lHbFUJpGLy7iwWchMN3ZIxR8wC28CuxnjzIg==", + "node_modules/stylelint/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "chalk": "^2.0.1", - "lodash.isnumber": "^3.0.3", - "log-symbols": "^2.0.0", - "path-is-absolute": "^1.0.1", - "text-table": "^0.2.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "stylint": "1.x" + "node": ">=8" } }, - "node_modules/stylint-stylish/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/stylelint/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { - "color-convert": "^1.9.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylint-stylish/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "node_modules/stylelint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/stylint-stylish/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/stylelint/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/stylelint/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "has-flag": "^3.0.0" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14" } }, - "node_modules/stylint/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "node_modules/stylelint/node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylint/node_modules/chokidar": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.5.2.tgz", - "integrity": "sha1-KT5yhkDMk92Cd0JDNLPG1K06NIo=", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dependencies": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "node": ">=12.0" }, - "optionalDependencies": { - "fsevents": "^1.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, - "node_modules/stylint/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "node_modules/stylelint/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" } }, - "node_modules/stylint/node_modules/glob": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", - "integrity": "sha1-CqI1kxpKlqwT1g/6wvuHe9btT1g=", + "node_modules/stylelint/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/stylint/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/stylelint/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dependencies": { - "number-is-nan": "^1.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylint/node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + "node_modules/stylelint/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, - "node_modules/stylint/node_modules/lodash.defaults": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.0.1.tgz", - "integrity": "sha1-BWeOYSqXFsZLW/LOzwRRMco9NAI=", + "node_modules/stylelint/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dependencies": { - "lodash.assigninwith": "^4.0.0", - "lodash.rest": "^4.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/stylint/node_modules/path-is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", - "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=", - "engines": { - "node": ">=0.10.0" + "node_modules/stylelint/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, - "node_modules/stylint/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, + "node_modules/stylelint/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/stylint/node_modules/user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "node_modules/stylelint/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dependencies": { - "os-homedir": "^1.0.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/stylint/node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "bin": { - "window-size": "cli.js" - }, + "node_modules/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "engines": { - "node": ">= 0.10.0" + "node": ">=8" } }, - "node_modules/stylint/node_modules/yargs": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.7.1.tgz", - "integrity": "sha1-5gQyZYozh/8mnAKOrN5KUS5Djf8=", + "node_modules/stylelint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "pkg-conf": "^1.1.2", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^1.0.0", - "string-width": "^1.0.1", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylelint/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/stylelint/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/stylelint/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/stylelint/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" } }, "node_modules/stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", + "version": "0.58.1", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.58.1.tgz", + "integrity": "sha512-AYiCHm5ogczdCPMfe9aeQa4NklB2gcf4D/IhzYPddJjTgPc+k4D/EVE0yfQbZD43MHP3lPy+8NZ9fcFxkrgs/w==", "dependencies": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", - "safer-buffer": "^2.1.2", + "css": "^3.0.0", + "debug": "^4.3.2", + "glob": "^7.1.6", "sax": "~1.2.4", - "semver": "^6.0.0", "source-map": "^0.7.3" }, "bin": { @@ -12717,12 +12273,53 @@ "node": "*" } }, - "node_modules/stylus/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/stylus/node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/stylus/node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylus/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/stylus/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/stylus/node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, "node_modules/supports-color": { @@ -12744,6 +12341,37 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", @@ -12753,10 +12381,10 @@ "es6-symbol": "^3.1.1" } }, - "node_modules/symbol": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", - "integrity": "sha1-O5hzuKkB5Hxu/iFSajrDcu8ou8c=" + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" }, "node_modules/table": { "version": "5.4.6", @@ -12773,9 +12401,9 @@ } }, "node_modules/table/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "engines": { "node": ">=6" } @@ -12825,6 +12453,15 @@ "tar-stream": "^1.1.2" } }, + "node_modules/tar-fs/node_modules/pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", @@ -12892,7 +12529,7 @@ "node_modules/term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", "dependencies": { "execa": "^0.7.0" }, @@ -12900,31 +12537,20 @@ "node": ">=4" } }, - "node_modules/ternary-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz", - "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=", - "dependencies": { - "duplexify": "^3.5.0", - "fork-stream": "^0.0.4", - "merge-stream": "^1.0.0", - "through2": "^2.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "node_modules/textextensions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.5.0.tgz", - "integrity": "sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz", + "integrity": "sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==", "engines": { - "node": ">=0.8" + "node": ">=8" + }, + "funding": { + "url": "https://bevry.me/fund" } }, "node_modules/thenify": { @@ -12999,7 +12625,7 @@ "node_modules/timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "engines": { "node": ">=0.10.0" } @@ -13160,21 +12786,9 @@ } }, "node_modules/token-stream": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", - "dev": true - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" }, "node_modules/tough-cookie": { "version": "2.5.0", @@ -13233,9 +12847,9 @@ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" }, "node_modules/tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dependencies": { "tslib": "^1.8.1" }, @@ -13300,9 +12914,9 @@ } }, "node_modules/typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13357,9 +12971,9 @@ } }, "node_modules/underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", + "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" }, "node_modules/undertaker": { "version": "1.2.1", @@ -13412,27 +13026,14 @@ } }, "node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node": ">=8" } }, "node_modules/universal-user-agent": { @@ -13500,7 +13101,7 @@ "node_modules/unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", "engines": { "node": ">=4" } @@ -13515,58 +13116,59 @@ } }, "node_modules/update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dependencies": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/update-notifier/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "color-convert": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/uri-js": { @@ -13584,14 +13186,14 @@ "deprecated": "Please see https://github.com/lydell/urix#deprecated" }, "node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dependencies": { - "prepend-http": "^1.0.1" + "prepend-http": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/use": { @@ -13628,9 +13230,9 @@ } }, "node_modules/v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8flags": { "version": "3.1.3", @@ -13673,65 +13275,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vfile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", - "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/vfile/node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", @@ -13900,9 +13443,9 @@ "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=" }, "node_modules/which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { "isexe": "^2.0.0" }, @@ -13916,14 +13459,14 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, "node_modules/widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { - "string-width": "^2.1.1" + "string-width": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/window-size": { @@ -14028,21 +13571,22 @@ } }, "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dependencies": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "node_modules/xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/xmlbuilder": { @@ -14072,9 +13616,17 @@ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } }, "node_modules/yargs": { "version": "3.10.0", @@ -14087,32 +13639,10 @@ "window-size": "0.1.0" } }, - "node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs-parser/node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -14140,7 +13670,7 @@ "node_modules/zip-stream": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "integrity": "sha512-2olrDUuPM4NvRIgGPhvrp84f7/HmWR6RiQrgwFF2VctmnssFiogtYL3DcA8Vl2bsSmju79sVXe38TsII7JleUg==", "dependencies": { "archiver-utils": "^1.3.0", "compress-commons": "^1.2.0", @@ -14253,22 +13783,70 @@ } } }, + "@ct.js/gulp-typescript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ct.js/gulp-typescript/-/gulp-typescript-6.0.0.tgz", + "integrity": "sha512-6WHGzRHeB38lYdb2hP1Pj/NrBn6jjREz3RyDaNx8mEo+jcYQXvslC6mFezNA9SSZ68TTwkx8LlmkT4xImEKUFw==", + "requires": { + "ansi-colors": "^4.1.1", + "plugin-error": "^1.0.1", + "source-map": "^0.7.4", + "through2": "^3.0.1", + "vinyl": "^2.2.0", + "vinyl-fs": "^3.0.3" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, "@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", + "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", "requires": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", + "acorn": "^6.4.1", + "normalize-path": "^3.0.0", + "postcss": "^7.0.16", "source-map": "^0.6.0", - "through2": "^2.0.3" + "through2": "^3.0.1" }, "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } } } }, @@ -14282,25 +13860,25 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, @@ -14444,10 +14022,43 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==" + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, "@types/minimist": { "version": "1.2.2", @@ -14455,9 +14066,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "14.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz", - "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==" + "version": "14.18.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", + "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -14472,89 +14083,111 @@ "@types/node": "*" } }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", - "dev": true + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/vinyl": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz", + "integrity": "sha512-ayJ0iOCDNHnKpKTgBG6Q6JOnHTj9zFta+3j2b8Ejza0e4cvRyMn0ZoLEmbPrTHe5YYRlDYPvPWVdV4cTaRyH7g==", + "requires": { + "@types/expect": "^1.20.4", + "@types/node": "*" + } }, "@typescript-eslint/eslint-plugin": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.4.1.tgz", - "integrity": "sha512-O+8Utz8pb4OmcA+Nfi5THQnQpHSD2sDUNw9AxNHpuYOo326HZTtG8gsfT+EAYuVrFNaLyNb2QnUNkmTRDskuRA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "requires": { - "@typescript-eslint/experimental-utils": "4.4.1", - "@typescript-eslint/scope-manager": "4.4.1", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/experimental-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.4.1.tgz", - "integrity": "sha512-Nt4EVlb1mqExW9cWhpV6pd1a3DkUbX9DeyYsdoeziKOpIJ04S2KMVDO+SEidsXRH/XHDpbzXykKcMTLdTXH6cQ==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.4.1", - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/typescript-estree": "4.4.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "dependencies": { "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" } } }, "@typescript-eslint/parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.4.1.tgz", - "integrity": "sha512-S0fuX5lDku28Au9REYUsV+hdJpW/rNW0gWlc4SXzF/kdrRaAVX9YCxKpziH7djeWT/HFAjLZcnY7NJD8xTeUEg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "requires": { - "@typescript-eslint/scope-manager": "4.4.1", - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/typescript-estree": "4.4.1", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -14567,51 +14200,45 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.4.1.tgz", - "integrity": "sha512-2oD/ZqD4Gj41UdFeWZxegH3cVEEH/Z6Bhr/XvwTtGv66737XkR4C9IqEkebCuqArqBJQSj4AgNHHiN1okzD/wQ==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "requires": { - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/visitor-keys": "4.4.1" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.4.1.tgz", - "integrity": "sha512-KNDfH2bCyax5db+KKIZT4rfA8rEk5N0EJ8P0T5AJjo5xrV26UAzaiqoJCxeaibqc0c/IvZxp7v2g3difn2Pn3w==" + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==" }, "@typescript-eslint/typescript-estree": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz", - "integrity": "sha512-wP/V7ScKzgSdtcY1a0pZYBoCxrCstLrgRQ2O9MmCUZDtmgxCO/TCqOTGRVwpP4/2hVfqMz/Vw1ZYrG8cVxvN3g==", - "requires": { - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/visitor-keys": "4.4.1", - "debug": "^4.1.1", - "globby": "^11.0.1", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } @@ -14622,33 +14249,31 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/visitor-keys": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.1.tgz", - "integrity": "sha512-H2JMWhLaJNeaylSnMSQFEhT/S/FsJbebQALmoJxMPMxLtlVAMy2uJP/Z543n9IizhjRayLSqoInehCeNW9rWcw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "requires": { - "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" } } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "accord": { "version": "0.26.4", "resolved": "https://registry.npmjs.org/accord/-/accord-0.26.4.tgz", @@ -14668,19 +14293,12 @@ "semver": "^5.3.0", "uglify-js": "^2.7.0", "when": "^3.7.7" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } } }, "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-dynamic-import": { "version": "3.0.0", @@ -14688,6 +14306,13 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "requires": { "acorn": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + } } }, "acorn-jsx": { @@ -14726,11 +14351,11 @@ } }, "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { - "string-width": "^2.0.0" + "string-width": "^4.1.0" } }, "ansi-colors": { @@ -14813,15 +14438,6 @@ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, "append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", @@ -14833,7 +14449,7 @@ "archiver": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "integrity": "sha512-01psM0DMD3YItvhnAXZODfsViaeDidrJwfne3lsoVrbyYa/xFQwTbVjY+2WlEBm7qH1fCsyxAA1SgNr/XenTlQ==", "requires": { "archiver-utils": "^1.3.0", "async": "^2.0.0", @@ -14845,14 +14461,6 @@ "zip-stream": "^1.2.0" }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -14885,7 +14493,7 @@ "archiver-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "integrity": "sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==", "requires": { "glob": "^7.0.0", "graceful-fs": "^4.1.0", @@ -14945,14 +14553,6 @@ "iftype": "^4.0.9" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, "arr-filter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", @@ -15047,11 +14647,6 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -15091,10 +14686,13 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, "async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", @@ -15131,11 +14729,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -15234,9 +14827,9 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -15264,9 +14857,9 @@ "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=" }, "binaryextensions": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz", - "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", + "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==" }, "bindings": { "version": "1.5.0", @@ -15323,51 +14916,63 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^5.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } @@ -15381,23 +14986,13 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-alloc": { @@ -15427,7 +15022,7 @@ "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, "buffer-from": { "version": "1.1.1", @@ -15476,27 +15071,10 @@ "responselike": "^1.0.2" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } } } }, @@ -15579,26 +15157,30 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" } }, "chokidar": { @@ -15821,25 +15403,6 @@ } } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -15866,11 +15429,6 @@ "kind-of": "^6.0.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -15977,9 +15535,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "class-utils": { "version": "0.3.6", @@ -16008,9 +15566,9 @@ } }, "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, "cli-cursor": { "version": "3.1.0", @@ -16050,10 +15608,18 @@ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "requires": { + "is-regexp": "^2.0.0" + } + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "requires": { "mimic-response": "^1.0.0" } @@ -16130,6 +15696,11 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -16146,7 +15717,7 @@ "compress-commons": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "integrity": "sha512-SLTU8iWWmcORfUN+4351Z2aZXKJe1tr0jSilPMCZlLPzpdTXnkBW1LevW/MfuANBKJek8Xu9ggqrtVmQrChLtg==", "requires": { "buffer-crc32": "^0.2.1", "crc32-stream": "^2.0.0", @@ -16244,16 +15815,16 @@ } }, "configstore": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", - "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "requires": { - "dot-prop": "^4.2.1", + "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" } }, "constantinople": { @@ -16296,6 +15867,36 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + } + } + }, "crc": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", @@ -16307,7 +15908,7 @@ "crc32-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "integrity": "sha512-UjZSqFCbn+jZUHJIh6Y3vMF7EJLcJWNm4tKDf2peJRwlZKHvkkvOMTvAei6zjU9gO1xONVr3rRFw0gixm2eUng==", "requires": { "crc": "^3.4.4", "readable-stream": "^2.0.0" @@ -16345,7 +15946,7 @@ "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", "requires": { "capture-stack-trace": "^1.0.0" } @@ -16353,17 +15954,33 @@ "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } } }, "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "css": { "version": "2.2.4", @@ -16383,29 +16000,40 @@ } } }, + "css-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==" + }, "css-parse": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "integrity": "sha512-UNIFik2RgSbiTwIW1IsFwXWn6vs+bYdq83LKTSOsx7NJR7WII9dxewkHLltfTLVppoUApHV0118a4RZRI9FLwA==", "requires": { "css": "^2.0.0" } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "d": { "version": "1.0.0", @@ -16478,19 +16106,11 @@ "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "requires": { "mimic-response": "^1.0.0" } }, - "deep-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", - "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", - "requires": { - "is-obj": "^1.0.0" - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -16604,7 +16224,7 @@ "deprecate": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", - "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" + "integrity": "sha512-3OFRdih9G2VYAfA/H6vizXyCvwLGLr9hdAh1z39HY3lAKbi2/BELQDVhbZ6AaTOjdh5BAi/GJ1QphQBHjCyXVw==" }, "deprecation": { "version": "2.3.1", @@ -16650,48 +16270,57 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { - "domelementtype": "1" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" } }, "dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + } } }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==" }, "duplexify": { "version": "3.6.0", @@ -16751,11 +16380,6 @@ "safer-buffer": "^2.1.0" } }, - "editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -16770,9 +16394,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", + "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==" }, "error-ex": { "version": "1.3.2", @@ -16876,9 +16500,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" }, "ansi-styles": { "version": "3.2.1", @@ -16933,11 +16557,6 @@ "is-glob": "^4.0.1" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -16998,25 +16617,22 @@ "integrity": "sha1-+9ZThpgLMPvNDhMF1MP7hhTvIRk=" }, "eslint-plugin-pug": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-pug/-/eslint-plugin-pug-1.2.2.tgz", - "integrity": "sha512-Xx7W04GUZwsChao7FTYOgmyrKXkpGGYeBw0LRd1mYkhivKhtHkDomanVtyU0KmFZUYhzSDget5462B6cPtnImQ==", - "dev": true, + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-pug/-/eslint-plugin-pug-1.2.4.tgz", + "integrity": "sha512-p/GrX0BgZx/nx1cw/SSDuxEIdZGBeQdG+Cr5+YnpbvEqD0gO9SPEpWS4csZYKlIzxOCy2WxyyGDLKVsF3LD4Ww==", "requires": { - "lodash": "^4.17.15", - "pug-lexer": "^4.1.0", - "pug-parser": "^5.0.1", - "pug-walk": "^1.1.8", - "vfile": "^4.0.2", - "vfile-location": "^3.0.0" + "lodash": "^4.17.20", + "pug-lexer": "^5.0.0", + "pug-parser": "^6.0.0", + "pug-walk": "^2.0.0" } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -17041,13 +16657,6 @@ "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" - } } }, "esprima": { @@ -17071,11 +16680,18 @@ } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } } }, "estraverse": { @@ -17105,7 +16721,7 @@ "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -17114,22 +16730,21 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + } + } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "requires": { - "fill-range": "^2.1.0" + "clone-regexp": "^2.1.0" } }, "expand-tilde": { @@ -17189,14 +16804,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -17239,17 +16846,21 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "dependencies": { "braces": { @@ -17276,11 +16887,6 @@ "is-glob": "^4.0.1" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -17295,12 +16901,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "to-regex-range": { @@ -17323,10 +16929,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" + }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } @@ -17334,7 +16945,7 @@ "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "requires": { "pend": "~1.2.0" } @@ -17370,11 +16981,6 @@ "argx": "^4.0.0" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fill-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", @@ -17384,42 +16990,6 @@ "merge-descriptors": "~1.0.0" } }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } - } - } - }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -17648,11 +17218,6 @@ "kind-of": "^6.0.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -17796,24 +17361,11 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, - "fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=" - }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -17838,21 +17390,15 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, "jsonfile": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", @@ -17860,12 +17406,19 @@ "requires": { "graceful-fs": "^4.1.6", "universalify": "^1.0.0" + }, + "dependencies": { + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, @@ -17884,1064 +17437,539 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "bundled": true, - "optional": true + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "are-we-there-yet": { - "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "bundled": true, - "optional": true, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "balanced-match": { - "version": "1.0.0", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "bundled": true, - "optional": true, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "safe-buffer": "~5.1.0" } - }, - "chownr": { - "version": "1.1.4", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "bundled": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "bundled": true, - "optional": true, + } + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "ms": "^2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, - "deep-extend": { - "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "bundled": true, - "optional": true + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, - "detect-libc": { - "version": "1.0.3", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bundled": true, - "optional": true + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, - "fs-minipass": { - "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "bundled": true, - "optional": true, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "glob": { - "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "bundled": true, - "optional": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ms": "2.0.0" } }, - "has-unicode": { - "version": "2.0.1", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "bundled": true, - "optional": true, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } } }, - "ignore-walk": { - "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "bundled": true, - "optional": true, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "minimatch": "^3.0.4" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "inflight": { - "version": "1.0.6", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "bundled": true, - "optional": true, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "inherits": { - "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { + "is-accessor-descriptor": { "version": "1.0.0", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "bundled": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "number-is-nan": "^1.0.0" + "kind-of": "^6.0.0" } }, - "isarray": { + "is-data-descriptor": { "version": "1.0.0", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "bundled": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==", - "bundled": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "bundled": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "bundled": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "kind-of": "^6.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "bundled": true, - "optional": true, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "wrappy": "1" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "os-homedir": { - "version": "1.0.2", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "bundled": true, - "optional": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "path-is-absolute": { - "version": "1.0.1", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "bundled": true, - "optional": true + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "process-nextick-args": { - "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "bundled": true, - "optional": true + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "rc": { - "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "bundled": true, - "optional": true, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "readable-stream": { - "version": "2.3.7", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "bundled": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "bundled": true, - "optional": true + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-stream": { + "global-dirs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + } + } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "requires": { - "assert-plus": "^1.0.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "type-fest": "^0.8.1" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + } } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==" + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", "requires": { - "is-glob": "^2.0.0" + "sparkles": "^1.0.0" } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { - "safe-buffer": "~5.1.0" + "pump": "^3.0.0" } } } }, - "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "graceful-fs-extra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs-extra/-/graceful-fs-extra-2.0.0.tgz", + "integrity": "sha1-fR5X/Mcm4rDMcH14tKzqVC+pvk4=", "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "requires": { - "sparkles": "^1.0.0" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-fs-extra": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs-extra/-/graceful-fs-extra-2.0.0.tgz", - "integrity": "sha1-fR5X/Mcm4rDMcH14tKzqVC+pvk4=", - "requires": { - "fs-extra": "^0.30.0", - "graceful-ncp": "^3.0.0", - "proxyquire": "^1.4.0" + "fs-extra": "^0.30.0", + "graceful-ncp": "^3.0.0", + "proxyquire": "^1.4.0" }, "dependencies": { "fs-extra": { @@ -19089,82 +18117,12 @@ } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "gulp-append-prepend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/gulp-append-prepend/-/gulp-append-prepend-1.0.8.tgz", - "integrity": "sha512-dmlju9nEC4PRBdfwaGsTrDQCx/7hVyPfbBNJ8rNSIrY7O4fdiPb2ei7N0mxXcxrsxA/BftTGMEdRZrSH8g9cfg==", - "requires": { - "plugin-error": "^1.0.1", - "read-file": "^0.2.0", - "through2": "^2.0.1" - } - }, - "gulp-changed": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-changed/-/gulp-changed-4.0.2.tgz", - "integrity": "sha512-rAvQt+ByaqrMuJLwucvxC+MC02Vh8ksiJ16hoQlk4xnmlHiLJMque2aXXQMmyocQac3RIjNRcyr7iG1TNH15GA==", - "requires": { - "make-dir": "^3.0.0", - "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", - "through2": "^3.0.1", - "touch": "^3.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } - } - }, - "gulp-chmod": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-3.0.0.tgz", - "integrity": "sha512-fDKj+yuLsUD3ayaHuvD0OzeUNOPeHmIC4wlwVQf3d3WYaB233zgq4sDBncIH5GRBmhtFc32LWFF04IdnrQFxig==", - "requires": { - "deep-assign": "^1.0.0", - "stat-mode": "^0.3.0", - "through2": "^3.0.1" - }, - "dependencies": { - "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "requires": { - "readable-stream": "2 || 3" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } } } @@ -19193,29 +18151,10 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/gulp-ext-replace/-/gulp-ext-replace-0.3.0.tgz", "integrity": "sha1-/1xc/LklUNqpIyqPPrNe9Ty18mA=", - "dev": true, "requires": { "through2": "~2.0.1" } }, - "gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", - "requires": { - "gulp-match": "^1.0.3", - "ternary-stream": "^2.0.1", - "through2": "^2.0.1" - } - }, - "gulp-match": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", - "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", - "requires": { - "minimatch": "^3.0.3" - } - }, "gulp-pug": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/gulp-pug/-/gulp-pug-5.0.0.tgz", @@ -19245,41 +18184,21 @@ } }, "gulp-replace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.0.0.tgz", - "integrity": "sha512-lgdmrFSI1SdhNMXZQbrC75MOl1UjYWlOWNbNRnz+F/KHmgxt3l6XstBoAYIdadwETFyG/6i+vWUSCawdC3pqOw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.3.tgz", + "integrity": "sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ==", "requires": { - "istextorbinary": "2.2.1", - "readable-stream": "^2.0.1", - "replacestream": "^4.0.0" + "@types/node": "^14.14.41", + "@types/vinyl": "^2.0.4", + "istextorbinary": "^3.0.0", + "replacestream": "^4.0.3", + "yargs-parser": ">=5.0.0-security.0" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" } } }, @@ -19294,53 +18213,66 @@ } }, "gulp-sourcemaps": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", - "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", - "requires": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", + "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", + "requires": { + "@gulp-sourcemaps/identity-map": "^2.0.1", + "@gulp-sourcemaps/map-sources": "^1.0.0", + "acorn": "^6.4.1", + "convert-source-map": "^1.0.0", + "css": "^3.0.0", + "debug-fabulous": "^1.0.0", + "detect-newline": "^2.0.0", + "graceful-fs": "^4.0.0", + "source-map": "^0.6.0", + "strip-bom-string": "^1.0.0", + "through2": "^2.0.0" }, "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } } } }, - "gulp-stylint": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-stylint/-/gulp-stylint-4.0.2.tgz", - "integrity": "sha512-BOk/aOivr4uS/OhvZ5scLrxnIvSomBR4BSHbHVJtMyirW/10EBJVgbt2ZH0Lz44hSp5ag6TcKtxWPDXsBn7+RA==", - "requires": { - "plugin-error": "^1.0.1", - "stylint": "1.4.1", - "through2": "^2.0.1", - "vinyl": "^2.1.0" - } - }, "gulp-stylus": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/gulp-stylus/-/gulp-stylus-2.7.0.tgz", - "integrity": "sha512-LlneLeHcaRBaEqxwo5YCirpsfkR7uleQ4pHXW8IE2ZeA6M3jpgI90+zQ6SptMTSWr1RSQW3WYFZVA3P0coUojw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/gulp-stylus/-/gulp-stylus-2.7.1.tgz", + "integrity": "sha512-lrM6yDGhywePjnoE8TkztDU7MuktaaFu4P2oPINdkmgC3d56G36vwLuOWJcORwsN4K6iou4dVKw9l4LOhtRrJQ==", "requires": { - "accord": "^0.26.3", + "accord": "^0.26.4", "lodash.assign": "^3.2.0", "plugin-error": "^0.1.2", "replace-ext": "0.0.1", - "stylus": "^0.54.0", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" + "stylus": "^0.54.8", + "through2": "^2.0.5", + "vinyl-sourcemaps-apply": "^0.2.1" }, "dependencies": { "arr-diff": { @@ -19370,6 +18302,11 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", @@ -19381,119 +18318,88 @@ "arr-union": "^2.0.1", "extend-shallow": "^1.1.2" } - } - } - }, - "gulp-svgstore": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/gulp-svgstore/-/gulp-svgstore-7.0.1.tgz", - "integrity": "sha512-oiAXvkRnBBt6ZML+lit7W15ryClB45k0V9eCVW/i73EymunoQlzZal0Luj3NDrbPLbPIllL8/ltCXFa9Jv03Pg==", - "requires": { - "cheerio": "0.*", - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2", - "vinyl": "^2.1.0" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "kind-of": "^1.1.0" + "safe-buffer": "~5.1.0" } }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" + "stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + } }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } } } }, - "gulp-typescript": { - "version": "6.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz", - "integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==", + "gulp-svgstore": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gulp-svgstore/-/gulp-svgstore-8.0.0.tgz", + "integrity": "sha512-LU5TAhE7Fp4kJRijNTuu77Jje51gsPu58SV9bSE2OaY+s0rJcMgk6xLjSStKj8nhwHPcZykJSbdckKFJsuIk3w==", "requires": { - "ansi-colors": "^4.1.1", + "cheerio": "^1.0.0-rc.10", + "fancy-log": "^1.3.3", "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.1", - "vinyl": "^2.2.0", - "vinyl-fs": "^3.0.3" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } + "vinyl": "^2.2.1" } }, "gulp-zip": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.0.1.tgz", - "integrity": "sha512-M/IWLh9RvOpuofDZkgDirtiyz9J3yIqnDOJ3muzk2D/XnZ1ruqPlPLRIpXnl/aZU+xXwKPdOIxjRzkUcVEQyZQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", + "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", "requires": { - "get-stream": "^5.1.0", + "get-stream": "^5.2.0", "plugin-error": "^1.0.1", "through2": "^3.0.1", "vinyl": "^2.1.0", "yazl": "^2.5.1" }, "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "through2": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", @@ -19621,17 +18527,20 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, "http-cache-semantics": { @@ -19754,21 +18663,6 @@ "supports-color": "^7.1.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -19833,17 +18727,17 @@ } }, "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { - "ci-info": "^1.5.0" + "ci-info": "^2.0.0" } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "requires": { "has": "^1.0.3" } @@ -19878,35 +18772,13 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "requires": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "acorn": "^7.1.1", + "object-assign": "^4.1.1" } }, "is-extendable": { @@ -19915,9 +18787,9 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -19925,20 +18797,20 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "^2.1.0" } }, "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, "is-interactive": { @@ -19952,22 +18824,14 @@ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" }, "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" }, "is-object": { "version": "1.0.1", @@ -19990,12 +18854,9 @@ } }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { "version": "1.1.0", @@ -20017,16 +18878,6 @@ } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -20035,7 +18886,7 @@ "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==" }, "is-reference": { "version": "1.1.1", @@ -20053,6 +18904,11 @@ "has": "^1.0.3" } }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==" + }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -20069,7 +18925,7 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" }, "is-typedarray": { "version": "1.0.0", @@ -20127,27 +18983,18 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istextorbinary": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", - "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz", + "integrity": "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==", "requires": { - "binaryextensions": "2", - "editions": "^1.3.3", - "textextensions": "2" + "binaryextensions": "^2.2.0", + "textextensions": "^3.2.0" } }, "js-stringify": { @@ -20183,24 +19030,25 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdoc": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", - "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", + "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", "requires": { "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", "bluebird": "^3.7.2", "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^2.0.3", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", "strip-json-comments": "^3.1.0", "taffydb": "2.6.2", - "underscore": "~1.13.1" + "underscore": "~1.13.2" }, "dependencies": { "escape-string-regexp": { @@ -20244,24 +19092,6 @@ "universalify": "^0.1.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, "tmp": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", @@ -20275,7 +19105,7 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -20283,9 +19113,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { "version": "0.4.1", @@ -20311,13 +19141,13 @@ } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, @@ -20352,12 +19182,14 @@ } }, "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "requires": { - "graceful-fs": "^4.1.9" - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", + "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==" + }, + "known-css-properties": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", + "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==" }, "last-run": { "version": "1.1.1", @@ -20369,11 +19201,11 @@ } }, "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "requires": { - "package-json": "^4.0.0" + "package-json": "^6.3.0" } }, "lazy-cache": { @@ -20384,7 +19216,7 @@ "lazy-req": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-2.0.0.tgz", - "integrity": "sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ=" + "integrity": "sha512-DgdBrjgXhRJAnkEs52BuREchSAtALDtSEXzlSJFJdQn5F0ppizjBROmEhHr5NW7U/eYoLZPiQ5NbHZ9vELIl7w==" }, "lazystream": { "version": "1.0.0", @@ -20469,9 +19301,9 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "requires": { "uc.micro": "^1.0.1" } @@ -20565,21 +19397,6 @@ "lodash.keys": "^3.0.0" } }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.assigninwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz", - "integrity": "sha1-rwLJhDKshtk9ppW0voAUAZcXNq8=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, "lodash.clone": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", @@ -20600,11 +19417,6 @@ "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", "integrity": "sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=" }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", @@ -20630,11 +19442,6 @@ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", @@ -20670,30 +19477,20 @@ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.rest": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.5.tgz", - "integrity": "sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=" - }, "lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + "lodash.sortedlastindex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.sortedlastindex/-/lodash.sortedlastindex-4.1.0.tgz", + "integrity": "sha512-s8xEQdsp2Tu5zUqVdFSe9C0kR8YlnAJYLqMdkh+pIRBRxF6/apWseLdHl3/+jv2I61dhPwtI/Ff+EqvCpc+N8w==" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, "lodash.union": { "version": "4.6.0", @@ -20705,42 +19502,6 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -20752,12 +19513,11 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "lru-queue": { @@ -20769,17 +19529,17 @@ } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { - "pify": "^3.0.0" + "semver": "^6.0.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -20817,34 +19577,39 @@ } }, "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" } } }, "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.4.tgz", + "integrity": "sha512-Ul4YVYZNxMJYALpKtu+ZRdrryYt/GlQ5CK+4l1bp/gWXOG2QWElt6AqF3Mih/wfUKdZbNAZVXGR73/n6U/8img==", "requires": {} }, "marked": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", - "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==" + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz", + "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==" }, "matchdep": { "version": "2.0.0", @@ -21076,19 +19841,6 @@ "kind-of": "^6.0.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -21139,15 +19891,15 @@ } } }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==" }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "memoizee": { "version": "0.4.14", @@ -21254,14 +20006,6 @@ "lru-cache": "^6.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -21323,11 +20067,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -21340,68 +20079,11 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, "mime-db": { "version": "1.43.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", @@ -21431,9 +20113,9 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -21492,11 +20174,6 @@ "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=" }, - "mout": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.5.0.tgz", - "integrity": "sha1-/5Z1ZqkPKVlenLi254AKW1ZjVYM=" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -21513,11 +20190,16 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", "optional": true }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, "nanomatch": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", @@ -21583,9 +20265,9 @@ } }, "node-notifier": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.0.tgz", - "integrity": "sha512-ZTqP90y1eyb2xAZTa7j4AlAayTwh6cL8mn0nlJhLDq8itXGnJUmQGYOnpaMUvqZVfGo0vhU7KZ3HtDW6CT2SiQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", "requires": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -21595,14 +20277,6 @@ "which": "^2.0.2" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -21623,22 +20297,9 @@ "requires": { "isexe": "^2.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -21679,17 +20340,17 @@ "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "requires": { "path-key": "^2.0.0" } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "number-is-nan": { @@ -21728,6 +20389,19 @@ "winresourcer": "^0.9.0" }, "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -21736,6 +20410,25 @@ "color-convert": "^1.9.0" } }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==" + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -21746,10 +20439,181 @@ "supports-color": "^5.3.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==" + }, + "configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "requires": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", + "requires": { + "package-json": "^4.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "requires": { + "rc": "^1.0.1" + } + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", + "requires": { + "semver": "^5.0.3" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } }, "supports-color": { "version": "5.5.0", @@ -21758,6 +20622,62 @@ "requires": { "has-flag": "^3.0.0" } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==" } } }, @@ -21872,15 +20792,6 @@ } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -21934,7 +20845,7 @@ "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -21943,7 +20854,7 @@ "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" } } }, @@ -22080,11 +20991,6 @@ } } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -22106,7 +21012,7 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "p-limit": { "version": "3.1.0", @@ -22124,21 +21030,26 @@ "p-limit": "^3.0.2" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -22160,17 +21071,6 @@ "path-root": "^0.1.1" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -22194,6 +21094,23 @@ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, + "parse5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", + "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "requires": { + "entities": "^4.3.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -22220,7 +21137,7 @@ "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, "path-key": { "version": "2.0.1", @@ -22258,17 +21175,22 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "2.3.0", @@ -22288,17 +21210,6 @@ "pinkie": "^2.0.0" } }, - "pkg-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", - "integrity": "sha1-N45W1v0T6Iv7b0ol33qD+qvduls=", - "requires": { - "find-up": "^1.0.0", - "load-json-file": "^1.1.0", - "object-assign": "^4.0.1", - "symbol": "^0.2.1" - } - }, "plist": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", @@ -22333,10 +21244,200 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.4.1.tgz", + "integrity": "sha512-OKihuWxPuBQrQeLNsavP7ytJ9IYNj/ViAXB2v7Qjh56LnfESKrkahKA9si4VfPN8xtz6oqUE6KdL0bTPrHJr6g==", + "requires": { + "htmlparser2": "^7.1.2", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "requires": {} + } + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==" + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-styl": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/postcss-styl/-/postcss-styl-0.11.1.tgz", + "integrity": "sha512-L3QphF6IaviaSxTvY+t2gVR26GAsyuRwFheSRQtoD5Sz6JiwPmbPoS1b2/0Az6t7IGo0G8xEJEjBWw9ldz20Xg==", + "requires": { + "debug": "^4.1.1", + "fast-diff": "^1.2.0", + "lodash.sortedlastindex": "^4.1.0", + "postcss": "^7.0.27 || ^8.0.0", + "stylus": "^0.57.0" + }, + "dependencies": { + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "stylus": { + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz", + "integrity": "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==", + "requires": { + "css": "^3.0.0", + "debug": "^4.3.2", + "glob": "^7.1.6", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "source-map": "^0.7.3" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "prelude-ls": { "version": "1.1.2", @@ -22344,14 +21445,9 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "pretty-hrtime": { "version": "1.0.3", @@ -22372,9 +21468,9 @@ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise": { "version": "7.3.1", @@ -22404,7 +21500,7 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, "psl": { "version": "1.8.0", @@ -22424,51 +21520,6 @@ "pug-parser": "^6.0.0", "pug-runtime": "^3.0.1", "pug-strip-comments": "^2.0.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "requires": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, - "pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "requires": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "requires": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" - } } }, "pug-attrs": { @@ -22494,20 +21545,12 @@ "pug-runtime": "^3.0.0", "void-elements": "^3.1.0", "with": "^7.0.0" - }, - "dependencies": { - "pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - } } }, "pug-error": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", - "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" }, "pug-filters": { "version": "4.0.0", @@ -22519,555 +21562,165 @@ "pug-error": "^2.0.0", "pug-walk": "^2.0.0", "resolve": "^1.15.1" - }, - "dependencies": { - "pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, - "pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "pug-lexer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", - "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", - "dev": true, - "requires": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.3" - } - }, - "pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "requires": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - }, - "dependencies": { - "pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - }, - "pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" - } - } - }, - "pug-lint-config-clock": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-lint-config-clock/-/pug-lint-config-clock-2.0.0.tgz", - "integrity": "sha1-d9uRnNdsQNnc3CLgedICy2xQf1A=", - "requires": {} - }, - "pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "requires": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - }, - "dependencies": { - "pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" - } - } - }, - "pug-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", - "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", - "dev": true, - "requires": { - "pug-error": "^1.3.3", - "token-stream": "0.0.1" - } - }, - "pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" - }, - "pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "requires": { - "pug-error": "^2.0.0" - }, - "dependencies": { - "pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" - } - } - }, - "pug-walk": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", - "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==", - "dev": true - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" } }, - "rcedit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.2.tgz", - "integrity": "sha512-z2ypB4gbINhI6wVe0JJMmdpmOpmNc4g90sE6/6JSuch5kYnjfz9CxvVPqqhShgR6GIkmtW3W2UlfiXhWljA0Fw==" - }, - "read-file": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/read-file/-/read-file-0.2.0.tgz", - "integrity": "sha1-cMa6+IQux9FUD5gf0Oau1Mgb1UU=" - }, - "read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "pug-error": "^2.0.0", + "token-stream": "1.0.0" } }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "pug-error": "^2.0.0" } }, - "readysteady": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/readysteady/-/readysteady-1.1.4.tgz", - "integrity": "sha512-nIvXbBGYlujEYl/oLx+tKeBB2iti2Xsvxr5iVM6Z1JBgZgq3KNmRsdAHjTa0XJ4bvRbf3zRDXeBiutHPct3RCg==", + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.15.1", - "@octokit/plugin-rest-endpoint-methods": "^5.8.0", - "meow": "^10.1.1", - "ora": "^6.0.0", - "read-package-json": "^4.0.0", - "update-notifier": "^5.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "requires": { - "ini": "2.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "rcedit": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.2.tgz", + "integrity": "sha512-z2ypB4gbINhI6wVe0JJMmdpmOpmNc4g90sE6/6JSuch5kYnjfz9CxvVPqqhShgR6GIkmtW3W2UlfiXhWljA0Fw==" + }, + "read-package-json": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", + "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "requires": { - "rc": "^1.2.8" + "lru-cache": "^6.0.0" } }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "requires": { - "rc": "^1.2.8" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" } }, "semver": { @@ -23077,123 +21730,52 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readysteady": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/readysteady/-/readysteady-1.1.4.tgz", + "integrity": "sha512-nIvXbBGYlujEYl/oLx+tKeBB2iti2Xsvxr5iVM6Z1JBgZgq3KNmRsdAHjTa0XJ4bvRbf3zRDXeBiutHPct3RCg==", + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.15.1", + "@octokit/plugin-rest-endpoint-methods": "^5.8.0", + "meow": "^10.1.1", + "ora": "^6.0.0", + "read-package-json": "^4.0.0", + "update-notifier": "^5.1.0" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -23216,15 +21798,6 @@ "strip-indent": "^4.0.0" } }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "requires": { - "is-equal-shallow": "^0.1.3", - "is-primitive": "^2.0.0" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -23240,20 +21813,19 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "rc": "^1.2.8" } }, "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "requires": { - "rc": "^1.0.1" + "rc": "^1.2.8" } }, "remove-bom-buffer": { @@ -23390,6 +21962,11 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -23409,11 +21986,13 @@ } }, "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-dir": { @@ -23446,7 +22025,7 @@ "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "requires": { "lowercase-keys": "^1.0.0" } @@ -23497,6 +22076,19 @@ "riot-tmpl": "^3.0.8", "simple-dom": "1.3.0", "simple-html-tokenizer": "^0.5.7" + } + }, + "riot-cli": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/riot-cli/-/riot-cli-4.1.2.tgz", + "integrity": "sha512-JuRHDJKtGvAMksulzYHQRmOmzeICIOLe/PHvRuByfRlqGa0IP87baHATkKF4uwveMQKx3mq4JTvhfQHxilhi4g==", + "requires": { + "chalk": "^2.3.2", + "chokidar": "^2.0.3", + "co": "^4.6.0", + "optionator": "^0.8.2", + "riot-compiler": "^3.5.1", + "rollup": "^0.57.1" }, "dependencies": { "ansi-styles": { @@ -23517,19 +22109,6 @@ "supports-color": "^5.3.0" } }, - "riot-cli": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/riot-cli/-/riot-cli-4.1.2.tgz", - "integrity": "sha512-JuRHDJKtGvAMksulzYHQRmOmzeICIOLe/PHvRuByfRlqGa0IP87baHATkKF4uwveMQKx3mq4JTvhfQHxilhi4g==", - "requires": { - "chalk": "^2.3.2", - "chokidar": "^2.0.3", - "co": "^4.6.0", - "optionator": "^0.8.2", - "riot-compiler": "^3.5.1", - "rollup": "^0.57.1" - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -23579,6 +22158,13 @@ "rollup-pluginutils": "^2.0.1", "signal-exit": "^3.0.2", "sourcemap-codec": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + } } }, "rollup-pluginutils": { @@ -23598,9 +22184,12 @@ } }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } }, "rxjs": { "version": "6.5.5", @@ -23634,22 +22223,22 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { - "semver": "^5.0.3" + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -23661,16 +22250,6 @@ "sver-compat": "^1.5.0" } }, - "set-blocking": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-1.0.0.tgz", - "integrity": "sha1-zV5dk4BI3xrJLf6S4fFq3WVvXsU=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -23711,9 +22290,9 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-dom": { "version": "1.3.0", @@ -23862,9 +22441,9 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -23877,9 +22456,14 @@ } }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-resolve": { "version": "0.5.3", @@ -23970,19 +22554,6 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "stampit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stampit/-/stampit-1.2.0.tgz", - "integrity": "sha1-UfnGoIwUZHP80CGvVRyfMu1ce50=", - "requires": { - "mout": "~0.5.0" - } - }, - "stat-mode": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.3.0.tgz", - "integrity": "sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng==" - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -24078,25 +22649,31 @@ } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" } } } @@ -24117,7 +22694,7 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" }, "strip-indent": { "version": "4.0.0", @@ -24132,205 +22709,592 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, - "stylint": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stylint/-/stylint-1.4.1.tgz", - "integrity": "sha1-DXLTCYCRfwfo3+QhOavPI0c2WSI=", - "requires": { - "async": "1.5.2", - "chokidar": "1.5.2", - "glob": "7.0.3", - "lodash.defaults": "4.0.1", - "path-is-absolute": "1.0.0", - "stampit": "1.2.0", - "strip-json-comments": "2.0.1", - "user-home": "2.0.0", - "yargs": "4.7.1" - }, - "dependencies": { + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==" + }, + "stylelint": { + "version": "14.9.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.9.1.tgz", + "integrity": "sha512-RdAkJdPiLqHawCSnu21nE27MjNXaVd4WcOHA4vK5GtIGjScfhNnaOuWR2wWdfKFAvcWQPOYe311iveiVKSmwsA==", + "requires": { + "@csstools/selector-specificity": "^2.0.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.2", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "execall": "^2.0.0", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.25.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "@csstools/selector-specificity": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", + "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", + "requires": {} + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, - "chokidar": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.5.2.tgz", - "integrity": "sha1-KT5yhkDMk92Cd0JDNLPG1K06NIo=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "ms": "2.1.2" } }, - "glob": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", - "integrity": "sha1-CqI1kxpKlqwT1g/6wvuHe9btT1g=", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "lru-cache": "^6.0.0" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + } + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "number-is-nan": "^1.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "lodash.defaults": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.0.1.tgz", - "integrity": "sha1-BWeOYSqXFsZLW/LOzwRRMco9NAI=", + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "lodash.assigninwith": "^4.0.0", - "lodash.rest": "^4.0.0" + "p-try": "^2.0.0" } }, - "path-is-absolute": { + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", - "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "requires": {} + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "os-homedir": "^1.0.0" + "is-number": "^7.0.0" } }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" }, - "yargs": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.7.1.tgz", - "integrity": "sha1-5gQyZYozh/8mnAKOrN5KUS5Djf8=", + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "pkg-conf": "^1.1.2", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^1.0.0", - "string-width": "^1.0.1", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } }, - "stylint-stylish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stylint-stylish/-/stylint-stylish-2.0.0.tgz", - "integrity": "sha512-o940rcLoHlAfCoMHDNgl7QCYp44TBnHh0fv/H/InVLnbh/W25/lHbFUJpGLy7iwWchMN3ZIxR8wC28CuxnjzIg==", + "stylelint-config-html": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.0.0.tgz", + "integrity": "sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==", + "requires": {} + }, + "stylelint-stylus": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/stylelint-stylus/-/stylelint-stylus-0.16.1.tgz", + "integrity": "sha512-1SZoBN6XzDh9frk6pdVZWRTTJJZkS7zLnnclX51/jSz5+oW0XEKbr6tJyi7QL5TBp3ddmw5YzXK+2dpmjf7tzg==", "requires": { - "chalk": "^2.0.1", - "lodash.isnumber": "^3.0.3", - "log-symbols": "^2.0.0", - "path-is-absolute": "^1.0.1", - "text-table": "^0.2.0" + "html-tags": "^3.1.0", + "lodash": "^4.17.15", + "mathml-tag-names": "^2.1.3", + "postcss-html": "^1.0.1", + "postcss-media-query-parser": "^0.2.3", + "postcss-selector-parser": "^6.0.2", + "postcss-styl": "^0.11.1", + "style-search": "^0.1.0", + "stylelint-config-html": "^1.0.0", + "svg-tags": "^1.0.0" + } + }, + "stylus": { + "version": "0.58.1", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.58.1.tgz", + "integrity": "sha512-AYiCHm5ogczdCPMfe9aeQa4NklB2gcf4D/IhzYPddJjTgPc+k4D/EVE0yfQbZD43MHP3lPy+8NZ9fcFxkrgs/w==", + "requires": { + "css": "^3.0.0", + "debug": "^4.3.2", + "glob": "^7.1.6", + "sax": "~1.2.4", + "source-map": "^0.7.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "requires": { - "color-convert": "^1.9.0" + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ms": "2.1.2" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "requires": { - "has-flag": "^3.0.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } } } }, - "stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.0.0", - "source-map": "^0.7.3" + "has-flag": "^4.0.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" } } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "requires": { - "has-flag": "^4.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "dependencies": { "has-flag": { @@ -24340,6 +23304,11 @@ } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", @@ -24349,10 +23318,10 @@ "es6-symbol": "^3.1.1" } }, - "symbol": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", - "integrity": "sha1-O5hzuKkB5Hxu/iFSajrDcu8ou8c=" + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" }, "table": { "version": "5.4.6", @@ -24366,9 +23335,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" }, "emoji-regex": { "version": "7.0.3", @@ -24409,6 +23378,17 @@ "mkdirp": "^0.5.1", "pump": "^1.0.0", "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "tar-stream": { @@ -24472,31 +23452,20 @@ "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", "requires": { "execa": "^0.7.0" } }, - "ternary-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz", - "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=", - "requires": { - "duplexify": "^3.5.0", - "fork-stream": "^0.0.4", - "merge-stream": "^1.0.0", - "through2": "^2.0.1" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "textextensions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.5.0.tgz", - "integrity": "sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz", + "integrity": "sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==" }, "thenify": { "version": "3.3.1", @@ -24566,7 +23535,7 @@ "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" }, "timers-ext": { "version": "0.1.7", @@ -24705,18 +23674,9 @@ } }, "token-stream": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", - "dev": true - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "requires": { - "nopt": "~1.0.10" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" }, "tough-cookie": { "version": "2.5.0", @@ -24758,9 +23718,9 @@ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "requires": { "tslib": "^1.8.1" } @@ -24810,9 +23770,9 @@ } }, "typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==" + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" }, "uc.micro": { "version": "1.0.6", @@ -24848,9 +23808,9 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", + "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" }, "undertaker": { "version": "1.2.1", @@ -24894,20 +23854,11 @@ } }, "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { - "@types/unist": "^2.0.2" + "crypto-random-string": "^2.0.0" } }, "universal-user-agent": { @@ -24964,7 +23915,7 @@ "unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==" }, "upath": { "version": "1.2.0", @@ -24972,46 +23923,41 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { - "has-flag": "^3.0.0" + "lru-cache": "^6.0.0" } } } @@ -25030,11 +23976,11 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "^2.0.0" } }, "use": { @@ -25063,9 +24009,9 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8flags": { "version": "3.1.3", @@ -25099,49 +24045,6 @@ "extsprintf": "^1.2.0" } }, - "vfile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", - "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", - "dev": true - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, "vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", @@ -25297,9 +24200,9 @@ "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=" }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } @@ -25310,11 +24213,11 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { - "string-width": "^2.1.1" + "string-width": "^4.0.0" } }, "window-size": { @@ -25391,19 +24294,20 @@ } }, "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, "xmlbuilder": { "version": "9.0.7", @@ -25426,9 +24330,14 @@ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "3.10.0", @@ -25441,31 +24350,10 @@ "window-size": "0.1.0" } }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - } - } - }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -25487,7 +24375,7 @@ "zip-stream": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "integrity": "sha512-2olrDUuPM4NvRIgGPhvrp84f7/HmWR6RiQrgwFF2VctmnssFiogtYL3DcA8Vl2bsSmju79sVXe38TsII7JleUg==", "requires": { "archiver-utils": "^1.3.0", "compress-commons": "^1.2.0", diff --git a/package.json b/package.json index 067bf59a4..6b9d424ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ctjsbuildenvironment", - "version": "2.0.2", + "version": "3.0.0", "description": "", "directories": { "doc": "docs" @@ -23,44 +23,40 @@ "@types/css-font-loading-module": "0.0.7", "@types/node": "^14.11.8", "@types/nw.js": "^0.13.10", - "@typescript-eslint/eslint-plugin": "^4.4.1", - "@typescript-eslint/parser": "^4.4.1", + "@typescript-eslint/eslint-plugin": "^4.32.0", + "@typescript-eslint/parser": "^4.32.0", "filemode": "^3.0.0", - "fs-extra": "^9.0.1", + "fs-extra": "^10.1.0", "globby": "^11.0.1", "gulp": "^4.0.2", - "gulp-append-prepend": "^1.0.8", - "gulp-changed": "^4.0.2", - "gulp-chmod": "^3.0.0", "gulp-concat": "^2.6.1", "gulp-eslint": "^6.0.0", - "gulp-if": "^2.0.2", + "gulp-ext-replace": "^0.3.0", "gulp-pug": "^5.0.0", - "gulp-replace": "^1.0.0", + "gulp-replace": "^1.1.3", "gulp-riot": "^1.1.5", - "gulp-sourcemaps": "^2.6.5", - "gulp-stylint": "^4.0.2", - "gulp-stylus": "^2.7.0", - "gulp-svgstore": "^7.0.1", - "gulp-typescript": "^6.0.0-alpha.1", - "gulp-zip": "^5.0.1", + "gulp-sourcemaps": "^3.0.0", + "gulp-stylus": "^2.7.1", + "gulp-svgstore": "^8.0.0", + "@ct.js/gulp-typescript": "^6.0.0", + "gulp-zip": "^5.1.0", "jsdoc-x": "^4.1.0", "minimist": "^1.2.6", - "node-notifier": "^10.0.0", - "nw-builder": "^3.5.7", + "node-notifier": "^10.0.1", + "nw-builder": "3.5.7", "pug": "^3.0.2", - "pug-lint-config-clock": "^2.0.0", "readysteady": "^1.1.4", "riot": "^3.13.2", "streamqueue": "^1.1.2", - "stylint-stylish": "^2.0.0", - "stylus": "^0.54.7", + "stylelint": "^14.9.1", + "stylelint-stylus": "^0.16.1", + "stylus": "^0.58.1", "tsd-jsdoc": "^2.5.0", - "typescript": "^4.0.3" + "typescript": "~4.4.0", + "eslint-plugin-pug": "^1.2.2" }, "devDependencies": { - "eslint-plugin-pug": "^1.2.2", - "gulp-ext-replace": "^0.3.0" + "@types/fs-extra": "^9.0.13" }, "main": "index.html" } diff --git a/src/examples/2DPhysics.ict b/src/examples/2DPhysics.ict index f43cd31f4..8ee1781c7 100644 --- a/src/examples/2DPhysics.ict +++ b/src/examples/2DPhysics.ict @@ -1,12 +1,15 @@ -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 notes: /* empty */ libs: fittoscreen: mode: scaleFit - mouse: {} sound.howler: {} matter: matterUseStaticDeltaTime: true + pointer: + preventdefault: false + startlocked: false + filters: {} textures: - name: WoodenPlank untill: 0 @@ -31,9 +34,9 @@ textures: top: 35 bottom: 35 uid: 9afd54d7-1265-4ba0-b5de-5226b3c7e2fb - padding: 1 + padding: 2 source: 'D:\Downloads\physicspack\PNG\Wood elements\elementWood012.png' - lastmod: 1616891166294 + lastmod: 1654408163741 - name: WoodenSquare untill: 0 grid: @@ -147,8 +150,8 @@ textures: - 1 - 1 axis: - - 35 - - 35 + - 0 + - 0 marginx: 0 marginy: 0 imgWidth: 70 @@ -159,14 +162,14 @@ textures: offy: 0 origname: i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png shape: rect - left: 35 - right: 35 - top: 35 - bottom: 35 + left: 0 + right: 70 + top: 0 + bottom: 70 uid: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 padding: 1 source: 'D:\Downloads\physicspack\PNG\Other\grass.png' - lastmod: 1615556407594 + lastmod: 1656931281688 - name: WoodenTriangle untill: 0 grid: @@ -190,7 +193,7 @@ textures: top: 35 bottom: 35 uid: 0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b - padding: 1 + padding: 2 source: 'D:\Downloads\physicspack\PNG\Wood elements\elementWood054.png' stripPoints: - x: -0.0 @@ -200,7 +203,7 @@ textures: - x: -70 'y': 26 closedStrip: true - lastmod: 1616891300000 + lastmod: 1654408191765 - name: elementMetal013 untill: 0 grid: @@ -276,10 +279,10 @@ textures: top: 35 bottom: 35 uid: c4d4030a-b640-44be-bded-26a5c030f542 - padding: 1 + padding: 2 source: 'D:\Downloads\physicspack\PNG\Metal elements\elementMetal001.png' r: 35 - lastmod: 1615704333828 + lastmod: 1654408158982 - name: elementMetal000 untill: 0 grid: @@ -305,7 +308,7 @@ textures: uid: 3a4eba8d-8b33-478e-95e5-3833099c1a03 padding: 3 source: 'D:\Downloads\physicspack\PNG\Metal elements\elementMetal002.png' - lastmod: 1616892926979 + lastmod: 1656998944187 stripPoints: - x: -35 'y': -35 @@ -426,63 +429,162 @@ textures: padding: 1 source: 'D:\Downloads\physicspack\PNG\Wood elements\elementWood047.png' lastmod: 1616891232841 + - lastmod: 1654404771715 + type: texture + name: Restart_icon_2 + untill: 0 + grid: + - 1 + - 1 + axis: + - 32 + - 32 + marginx: 0 + marginy: 0 + imgWidth: 64 + imgHeight: 64 + width: 64 + height: 64 + offx: 0 + offy: 0 + origname: im4gCbzCRD2DmNc.png + shape: rect + left: 32 + right: 32 + top: 32 + bottom: 32 + uid: m4gCbzCRD2DmNc + padding: 1 + group: ! '' + source: 'C:\Users\Master\Desktop\Restart icon 2.png' + - lastmod: 1656998696796 + type: texture + name: GravityZone + untill: 0 + grid: + - 1 + - 1 + axis: + - 35 + - 35 + marginx: 0 + marginy: 0 + imgWidth: 70 + imgHeight: 70 + width: 70 + height: 70 + offx: 0 + offy: 0 + origname: iWJ554pph1tft1W.png + shape: rect + left: 35 + right: 35 + top: 35 + bottom: 35 + uid: WJ554pph1tft1W + padding: 1 + group: ! '' + - lastmod: 1656998544556 + type: texture + name: Particle + untill: 0 + grid: + - 1 + - 1 + axis: + - 0 + - 0 + marginx: 0 + marginy: 0 + imgWidth: 32 + imgHeight: 32 + width: 32 + height: 32 + offx: 0 + offy: 0 + origname: iwHD1gw8Jfdzk2k.png + shape: rect + left: 0 + right: 32 + top: 0 + bottom: 32 + uid: wHD1gw8Jfdzk2k + padding: 1 + group: ! '' skeletons: [] templates: - name: Alien_Launched depth: 0 - oncreate: |- - this.tag = 'Alien'; - - this.timeout = ct.speed * 5; - onstep: |- - this.timeout--; - if (this.timeout <= 0) { - this.kill = true; - } - ondraw: '' - ondestroy: |- - ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { - tint: 0x6EBA9D - }); texture: 8a5f385a-d547-4d2d-9641-b1856738c62a extends: matterEnable: true matterRestitution: 0.7 matterMass: 5 matterDensity: 0.003 + matterConstraint: none uid: 556178d8-6886-4718-a5dd-b7dbf74e4547 - lastmod: 1616894158784 + lastmod: 1656911425186 + events: + - lib: core + arguments: {} + code: this.timeout = ct.speed * 5; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.timeout--; + if (this.timeout <= 0) { + this.kill = true; + } + eventKey: OnStep + - lib: core + arguments: {} + code: |- + ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { + tint: 0x6EBA9D + }); + eventKey: OnDestroy + - eventKey: matterImpactAny + code: |- + if (impact > 25) { + ct.sound.spawn('Impact_Alien'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: AlienTarget depth: 0 - oncreate: this.tag = 'Alien'; - onstep: this.move(); - ondraw: '' - ondestroy: |- - ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { - tint: 0xFF85DA - }); texture: 6c8a3edf-d5fe-4916-b63c-2201c099d28f extends: matterEnable: true uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 - lastmod: 1616890301062 + lastmod: 1656912321656 + events: + - lib: core + arguments: {} + code: |- + ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { + tint: 0xFF85DA + }); + eventKey: OnDestroy + - eventKey: matterImpactAny + code: |- + if (impact > 25) { + if (impact > 25) { + ct.sound.spawn('Impact_Alien'); + } + } + // If it was too strong, destroy the alien. + if (impact > 75) { + this.kill = true; + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: WoodenSquare depth: 0 - oncreate: |- - this.tag = 'Wooden'; - this.damage = 0; - onstep: |- - if (this.damage > 150) { - this.kill = true; - } - ondraw: |- - if (this.damage > 75 && this.tex !== 'WoodenSquare_damaged') { - this.tex = 'WoodenSquare_Damaged'; - } - ondestroy: |- - ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { - tint: 0xAB763E - }); texture: 41f7c3b3-abc8-4940-8919-9114a884d7f2 extends: matterEnable: true @@ -492,24 +594,39 @@ templates: matterFrictionAir: 0.05 matterMass: 1 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 - lastmod: 1616891394690 + lastmod: 1656910965258 + events: + - lib: core + arguments: {} + code: this.damage = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { + tint: 0xAB763E + }); + eventKey: OnDestroy + - eventKey: matterImpactAny + code: |- + if (impact >= 25) { + // I apply a damage multiplier 0.35 bc initial values turned out to be too destructive, + // and I'm too lazy to walk over three blocks and change damage thresholds there. + this.damage += impact * 0.35; + // Texture change and destruction + if (this.damage > 150) { + this.kill = true; + } else if (this.damage > 75 && this.tex !== 'WoodenSquare_damaged') { + this.tex = 'WoodenSquare_Damaged'; + } + ct.sound.spawn('Impact_Wooden'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: WoodenPlank depth: 0 - oncreate: |- - this.tag = 'Wooden'; - this.damage = 0; - onstep: |- - if (this.damage > 300) { - this.kill = true; - } - ondraw: |- - if (this.damage > 100 && this.tex !== 'WoodenPlank_damaged') { - this.tex = 'WoodenPlank_Damaged'; - } - ondestroy: |- - ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { - tint: 0xAB763E - }); texture: 9afd54d7-1265-4ba0-b5de-5226b3c7e2fb extends: matterEnable: true @@ -519,38 +636,39 @@ templates: matterFrictionStatic: 3.1 matterFrictionAir: 0.05 uid: 256006c5-c853-40a5-a277-3bc1df64d226 - lastmod: 1616895635325 - - name: grass - depth: 0 - oncreate: '' - onstep: this.move(); - ondraw: '' - ondestroy: '' - texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 - extends: - matterEnable: true - matterStatic: true - matterMass: 10000 - matterFriction: 15 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 - lastmod: 1615557554543 + lastmod: 1656912446992 + events: + - lib: core + arguments: {} + code: this.damage = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { + tint: 0xAB763E + }); + eventKey: OnDestroy + - eventKey: matterImpactAny + code: |- + if (impact >= 25) { + // I apply a damage multiplier 0.35 bc initial values turned out to be too destructive, + // and I'm too lazy to walk over three blocks and change damage thresholds there. + this.damage += impact * 0.35; + // Texture change and destruction + if (this.damage > 300) { + this.kill = true; + } else if (this.damage > 100 && this.tex !== 'WoodenPlank_damaged') { + this.tex = 'WoodenPlank_Damaged'; + } + ct.sound.spawn('Impact_Wooden'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: WoodenTriangle depth: 0 - oncreate: |- - this.tag = 'Wooden'; - this.damage = 0; - onstep: |- - if (this.damage > 250) { - this.kill = true; - } - ondraw: |- - if (this.damage > 100 && this.tex !== 'WoodenTriangle_damaged') { - this.tex = 'WoodenTriangle_Damaged'; - } - ondestroy: |- - ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { - tint: 0xAB763E - }); texture: 0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b extends: matterEnable: true @@ -562,66 +680,99 @@ templates: - 0 - 11 uid: 7f79638a-a14f-4ec8-8826-981ff954c738 - lastmod: 1616895639247 + lastmod: 1656911415729 + events: + - lib: core + arguments: {} + code: this.damage = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + ct.emitters.fire('FX_Burst', this.xprev, this.yprev, { + tint: 0xAB763E + }); + eventKey: OnDestroy + - eventKey: matterImpactAny + code: |- + if (impact >= 25) { + // I apply a damage multiplier 0.35 bc initial values turned out to be too destructive, + // and I'm too lazy to walk over three blocks and change damage thresholds there. + this.damage += impact * 0.35; + // Texture change and destruction + if (this.damage > 250) { + this.kill = true; + } else if (this.damage > 100 && this.tex !== 'WoodenTriangle_damaged') { + this.tex = 'WoodenTriangle_Damaged'; + } + ct.sound.spawn('Impact_Wooden'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: Slingshot depth: 0 - oncreate: '' - onstep: |- - if (ct.actions.Pointer.pressed && ct.mouse.hovers(this)) { - ct.templates.copy('Alien_Dragging', this.x, this.y); - } - ondraw: '' - ondestroy: '' texture: 37dfad62-8372-4804-8416-765039343b61 extends: {} uid: 070d18cf-978a-4874-ba4d-1aadd0d4f58a - lastmod: 1616892056278 + lastmod: 1656912444393 + events: + - eventKey: OnPointerDown + code: 'ct.templates.copy(''Alien_Dragging'', this.x, this.y);' + arguments: {} + lib: core + type: template + loopAnimation: true - name: Alien_Dragging depth: 0 - oncreate: '' - onstep: |- - if (ct.actions.Pointer.released) { - const speedModifier = 0.3, - maxSpeed = 50; - this.kill = true; - const missile = ct.templates.copy('Alien_Launched', this.x, this.y); - const slingshot = ct.templates.list['Slingshot'][0]; - var hspeed = (slingshot.x - this.x) * speedModifier, - vspeed = (slingshot.y - this.y) * speedModifier, - l = ct.u.pdc(0, 0, hspeed, vspeed); - if (l > maxSpeed) { - hspeed /= l / maxSpeed; - vspeed /= l / maxSpeed; - } - ct.matter.launch(missile, hspeed, vspeed); - } - ondraw: | - const slingshot = ct.templates.list['Slingshot'][0], - maxLength = 150; - let dx = ct.mouse.x - slingshot.x, - dy = ct.mouse.y - slingshot.y, - l = ct.u.pdc(0, 0, dx, dy); - - if (l > maxLength) { - dx /= l / maxLength, - dy /= l / maxLength; - } - - this.x = slingshot.x + dx; - this.y = slingshot.y + dy; - ondestroy: '' texture: 8a5f385a-d547-4d2d-9641-b1856738c62a extends: matterEnable: false matterRestitution: 0.7 uid: 5b9b41e7-52db-44a2-b5d2-016407e259dc - lastmod: 1616891549758 + lastmod: 1656912346056 + events: + - lib: core + arguments: {} + code: |- + if (ct.actions.Pointer.released) { + const speedModifier = 0.3, + maxSpeed = 50; + this.kill = true; + const missile = ct.templates.copy('Alien_Launched', this.x, this.y); + const slingshot = ct.templates.list['Slingshot'][0]; + var hspeed = (slingshot.x - this.x) * speedModifier, + vspeed = (slingshot.y - this.y) * speedModifier, + l = ct.u.pdc(0, 0, hspeed, vspeed); + if (l > maxSpeed) { + hspeed /= l / maxSpeed; + vspeed /= l / maxSpeed; + } + ct.matter.launch(missile, hspeed, vspeed); + } + eventKey: OnStep + - lib: core + arguments: {} + code: | + const slingshot = ct.templates.list['Slingshot'][0], + maxLength = 150; + let dx = ct.pointer.x - slingshot.x, + dy = ct.pointer.y - slingshot.y, + l = ct.u.pdc(0, 0, dx, dy); + + if (l > maxLength) { + dx /= l / maxLength, + dy /= l / maxLength; + } + + this.x = slingshot.x + dx; + this.y = slingshot.y + dy; + eventKey: OnDraw + type: template + loopAnimation: true - name: elementMetal013 depth: 0 - oncreate: this.tag = 'Metal'; - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: 56ab43ae-1b27-4b5e-9e49-fbbe74d42597 extends: matterEnable: true @@ -631,13 +782,19 @@ templates: matterDensity: 0.01 matterRestitution: 0.6 uid: 8e4e1fe0-54f6-4c9f-a468-99a94b05803f - lastmod: 1616892744865 + lastmod: 1656911074442 + events: + - eventKey: matterImpactAny + code: |- + if (impact > 25) { + ct.sound.spawn('Impact_Metal'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: elementMetal011 depth: 0 - oncreate: this.tag = 'Metal'; - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: c4d4030a-b640-44be-bded-26a5c030f542 extends: matterMass: 10 @@ -645,13 +802,19 @@ templates: matterDensity: 0.005 matterRestitution: 0.6 uid: 54e149bb-f36a-48c0-98f5-181451bac20c - lastmod: 1616892752365 + lastmod: 1656911055002 + events: + - eventKey: matterImpactAny + code: |- + if (impact > 25) { + ct.sound.spawn('Impact_Metal'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true - name: elementMetal000 depth: 0 - oncreate: this.tag = 'Metal'; - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: 3a4eba8d-8b33-478e-95e5-3833099c1a03 extends: matterStatic: true @@ -659,10 +822,96 @@ templates: matterDensity: 0.005 matterRestitution: 0.5 matterFixPivot: - - 4 - - 4 + - 0 + - 0 uid: 82c03796-7419-4f22-944c-78c1209c6874 - lastmod: 1616892936227 + lastmod: 1656998884560 + events: + - eventKey: matterImpactAny + code: |- + if (impact > 25) { + ct.sound.spawn('Impact_Metal'); + } + arguments: {} + lib: matter + type: template + loopAnimation: true + - type: template + name: Restart + depth: 0 + texture: m4gCbzCRD2DmNc + visible: true + extends: + matterEnable: false + lastmod: 1656912361490 + uid: BRwkF4JP8WdfKd + events: + - eventKey: OnPointerClick + code: ct.rooms.restart(); + arguments: {} + lib: core + loopAnimation: true + - type: template + name: GravityZone + depth: 5 + texture: WJ554pph1tft1W + playAnimationOnStart: false + loopAnimation: true + visible: true + extends: + matterEnable: true + matterStatic: true + matterSensor: true + events: + - eventKey: OnCreate + code: 'ct.emitters.append(this, ''FX_GravityZone'');' + arguments: {} + lib: core + - eventKey: matterActiveAny + code: |- + if (ct.templates.isCopy(other)) { + // can't push during collisions, so change velocity instead + ct.matter.launch(other, other.hspeed, other.vspeed - 2 * ct.delta); + } + arguments: {} + lib: matter + lastmod: 1657008600683 + uid: HFFzDDfwj688N3 + - type: template + name: AlienCounter + depth: 0 + texture: 6c8a3edf-d5fe-4916-b63c-2201c099d28f + playAnimationOnStart: false + loopAnimation: true + visible: true + extends: {} + events: + - eventKey: OnCreate + code: >- + this.aliensTotal = ct.templates.list['AlienTarget'].length; + + + this.textLabel = new PIXI.Text('0/' + this.aliensTotal, + ct.styles.get('Style_Aliens')); + + this.addChild(this.textLabel); + + this.textLabel.x = 50; + + this.textLabel.y = -25; + arguments: {} + lib: core + - eventKey: OnDraw + code: >- + var aliensCurrent = ct.templates.list['AlienTarget'].length; + + + this.textLabel.text = (this.aliensTotal - aliensCurrent) + '/' + + this.aliensTotal; + arguments: {} + lib: core + lastmod: 1657008650456 + uid: 7rHCR4GtcDPrTn sounds: - name: Impact_Wooden uid: ccfe7f50-d4d3-4570-95e9-75d5d73bef0a @@ -676,51 +925,24 @@ sounds: uid: 3142b705-6de5-4f57-9b70-c9bc3fb4cdad origname: s3142b705-6de5-4f57-9b70-c9bc3fb4cdad.ogg lastmod: 1616407549522 -styles: [] +styles: + - name: Style_Aliens + uid: g3TB8dbChgMRjP + origname: shgMRjP + font: + family: sans-serif + size: 40 + weight: '600' + italic: false + fill: + type: '0' + color: '#FF85C4' + stroke: + color: '#5C304E' + weight: 4 + lastmod: 1657008646209 rooms: - - name: HolericAliens - oncreate: | - // Listen for collisions in the world - ct.matter.on('collisionStart', e => { - // Loop over every collision in a frame - for (const pair of e.pairs) { - // Get how strong the impact was - // We will use it for damage calculation to aliens and wooden blocks - const impact = ct.matter.getImpact(pair); - - // Each pair has bodyA and bodyB — two objects that has collided. - // This little loop applies checks for both bodies - const bodies = [pair.bodyA, pair.bodyB]; - for (const body of bodies) { - // Does a body belong to a copy of template "AlienTarget"? - if (body.copy.template === 'AlienTarget') { - // If it was too strong, destroy the alien. - if (impact > 75) { - body.copy.kill = true; - } - } - - // Apply cumulative damage for wooden blocks - // Tags are set in templates' On Create code - if (body.copy.tag === 'Wooden') { - // Ignore weak strikes - if (impact >= 25) { - // I apply a damage multiplier 0.35 bc initial values turned out to be too destructive, - // and I'm too lazy to walk over three blocks and change damage thresholds there. - body.copy.damage += impact * 0.35; - // Texture change and destruction are coded in templates' On Step and Draw events. - } - } - - // Play sounds on considerable collisions - if (impact >= 25) { - if (body.copy.tag) { - ct.sound.spawn('Impact_' + body.copy.tag); - } - } - } - } - }); + - name: Level_01 onstep: '' ondraw: '' onleave: '' @@ -729,251 +951,2371 @@ rooms: backgrounds: - depth: -10 texture: f6a40cf4-e9c0-47ff-afa8-6cdc259ef17e - extends: {} + shiftX: ! '' + shiftY: ! '' + parallaxX: ! '' + parallaxY: ! '' + movementX: ! '' + movementY: ! '' + scaleX: 0 + scaleY: 0 + repeat: ! '' copies: - x: 905 - 'y': 770 + 'y': 798 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 905 - 'y': 700 + 'y': 728 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 905 - 'y': 630 + 'y': 658 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 980 - 'y': 560 + 'y': 588 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 256006c5-c853-40a5-a277-3bc1df64d226 exts: {} + customProperties: {} - x: 1054 - 'y': 770 + 'y': 798 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1054 - 'y': 700 + 'y': 728 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1054 - 'y': 630 + 'y': 658 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 980 - 'y': 766 + 'y': 794 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 exts: {} + customProperties: {} - x: 1050 - 'y': 490 + 'y': 518 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 980 - 'y': 490 + 'y': 518 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 exts: {} + customProperties: {} - x: 1120 - 'y': 350 + 'y': 378 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 256006c5-c853-40a5-a277-3bc1df64d226 exts: {} + customProperties: {} - x: 1190 - 'y': 420 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1190 - 'y': 490 + 'y': 518 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1190 - 'y': 700 + 'y': 728 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1190 - 'y': 770 + 'y': 798 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1260 - 'y': 630 + 'y': 658 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 256006c5-c853-40a5-a277-3bc1df64d226 exts: {} + customProperties: {} - x: 1330 - 'y': 700 + 'y': 728 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1330 - 'y': 770 + 'y': 798 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1120 - 'y': 280 + 'y': 308 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} + customProperties: {} - x: 1190 - 'y': 560 + 'y': 588 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} - - x: 1288 - 'y': 559 - uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 + customProperties: {} + - x: 1120 + 'y': 238 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 7f79638a-a14f-4ec8-8826-981ff954c738 exts: {} - - x: 910 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1024 + 'y': 306 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 exts: {} - - x: 980 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 225 + 'y': 674 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 070d18cf-978a-4874-ba4d-1aadd0d4f58a exts: {} + customProperties: {} - x: 1050 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 - exts: {} - - x: 1120 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} - - x: 1190 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + tiles: + - depth: -10 + tiles: + - x: 192 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 128 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 0 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 256 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 320 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 384 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 448 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 512 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 576 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 640 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 704 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 768 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 832 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 896 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 960 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1024 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1088 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1152 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1216 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1280 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1344 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1408 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1472 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1536 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1600 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: -64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + extends: + matterMakeStatic: true + hidden: false + uid: 125036f1-3a14-4fc3-ae95-2d29a5c56244 + thumbnail: 2d29a5c56244 + extends: + matterGravity: + - 0 + - 1 + gridX: 32 + gridY: 32 + lastmod: 1661067612657 + events: + - lib: core + arguments: {} + code: ct.rooms.append('UI_Restart'); + eventKey: OnRoomStart + - eventKey: Timer1 + code: ct.rooms.switch('Level_02'); + arguments: {} + lib: core + - eventKey: OnDraw + code: |- + if (!ct.templates.exists('AlienTarget') && this.timer1 <= 0) { + this.timer1 = 2; + } + arguments: {} + lib: core + type: room + simulate: true + isUi: ! '' + - type: room + oncreate: '' + onstep: '' + ondraw: '' + onleave: '' + gridX: 64 + gridY: 64 + width: 1640 + height: 900 + name: UI_Restart + backgrounds: [] + copies: + - x: 64 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: BRwkF4JP8WdfKd exts: {} - - x: 1260 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1472 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 7rHCR4GtcDPrTn exts: {} - - x: 1330 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + tiles: + - depth: -10 + tiles: [] + extends: {} + hidden: false + extends: {} + lastmod: 1661067609081 + thumbnail: HHMmHTwkf2B7K6 + uid: HHMmHTwkf2B7K6 + events: [] + simulate: true + isUi: true + - name: Level_02 + onstep: '' + ondraw: '' + onleave: '' + width: 1640 + height: 900 + backgrounds: + - depth: -10 + texture: f6a40cf4-e9c0-47ff-afa8-6cdc259ef17e + shiftX: ! '' + shiftY: ! '' + parallaxX: ! '' + parallaxY: ! '' + movementX: ! '' + movementY: ! '' + scaleX: 0 + scaleY: 0 + repeat: ! '' + copies: + - x: 330 + 'y': 674 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 070d18cf-978a-4874-ba4d-1aadd0d4f58a exts: {} - - x: 1400 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 490 + 'y': 175 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 8e4e1fe0-54f6-4c9f-a468-99a94b05803f exts: {} - - x: 1470 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 490 + 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 54e149bb-f36a-48c0-98f5-181451bac20c exts: {} - - x: 1540 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 560 + 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 54e149bb-f36a-48c0-98f5-181451bac20c exts: {} - - x: 1610 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 420 + 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 54e149bb-f36a-48c0-98f5-181451bac20c exts: {} - - x: 840 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 805 + 'y': 455 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 770 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1050 + 'y': 805 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 exts: {} - - x: 700 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 910 + 'y': 805 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} - - x: 560 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1190 + 'y': 805 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} - - x: 630 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1155 + 'y': 735 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} - - x: 490 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 945 + 'y': 735 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 exts: {} - - x: 420 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1050 + 'y': 665 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 256006c5-c853-40a5-a277-3bc1df64d226 exts: {} - - x: 350 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 665 + 'y': 315 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 280 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 735 + 'y': 385 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 210 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + tiles: + - depth: -10 + tiles: + - x: 192 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 128 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 256 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 320 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 384 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 448 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 512 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 576 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 640 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 704 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 768 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 832 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 896 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 960 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1024 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1088 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1152 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1216 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1280 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1344 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1408 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1472 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1536 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1600 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: -64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 700 + 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 350 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 700 + 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 700 + 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 630 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 700 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 700 + 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 630 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 700 + 'y': 630 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 630 + 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 0 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + extends: + matterMakeStatic: true + hidden: false + uid: LPk4T2t9D3zBdR + thumbnail: LPk4T2t9D3zBdR + extends: + matterGravity: + - 0 + - 1 + gridX: 35 + gridY: 35 + lastmod: 1661067600353 + events: + - lib: core + arguments: {} + code: ct.rooms.append('UI_Restart'); + eventKey: OnRoomStart + - eventKey: OnDraw + code: |- + if (!ct.templates.exists('AlienTarget') && this.timer1 <= 0) { + this.timer1 = 2; + } + arguments: {} + lib: core + - eventKey: Timer1 + code: ct.rooms.switch('Level_03'); + arguments: {} + lib: core + type: room + simulate: true + isUi: ! '' + - name: Level_Empty + onstep: '' + ondraw: '' + onleave: '' + width: 1640 + height: 900 + backgrounds: + - depth: -10 + texture: f6a40cf4-e9c0-47ff-afa8-6cdc259ef17e + shiftX: ! '' + shiftY: ! '' + parallaxX: ! '' + parallaxY: ! '' + movementX: ! '' + movementY: ! '' + scaleX: 0 + scaleY: 0 + repeat: ! '' + copies: + - x: 225 + 'y': 674 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 070d18cf-978a-4874-ba4d-1aadd0d4f58a exts: {} - - x: 140 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + tiles: + - depth: -10 + tiles: + - x: 192 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 128 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 0 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 256 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 320 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 384 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 448 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 512 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 576 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 640 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 704 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 768 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 832 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 896 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 960 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1024 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1088 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1152 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1216 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1280 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1344 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1408 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1472 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1536 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1600 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: -64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + extends: + matterMakeStatic: true + hidden: false + uid: PjK4CJrtbn5PW5 + thumbnail: PjK4CJrtbn5PW5 + extends: + matterGravity: + - 0 + - 1 + gridX: 32 + gridY: 32 + lastmod: 1661067606650 + events: + - lib: core + arguments: {} + code: ct.rooms.append('UI_Restart'); + eventKey: OnRoomStart + type: room + simulate: true + isUi: ! '' + - name: Level_03 + onstep: '' + ondraw: '' + onleave: '' + width: 1640 + height: 900 + backgrounds: + - depth: -10 + texture: f6a40cf4-e9c0-47ff-afa8-6cdc259ef17e + shiftX: ! '' + shiftY: ! '' + parallaxX: ! '' + parallaxY: ! '' + movementX: ! '' + movementY: ! '' + scaleX: 0 + scaleY: 0 + repeat: ! '' + copies: + - x: 225 + 'y': 674 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 070d18cf-978a-4874-ba4d-1aadd0d4f58a exts: {} - - x: 70 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 945 + 'y': 805 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 0 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1015 + 'y': 735 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 1680 - 'y': 840 - uid: 9150bbba-a1a8-4fc8-837d-68589f3d5074 + customProperties: {} + - x: 1015 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: HFFzDDfwj688N3 exts: {} - - x: 1120 - 'y': 210 - uid: 7f79638a-a14f-4ec8-8826-981ff954c738 + customProperties: {} + - x: 945 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: HFFzDDfwj688N3 exts: {} - - x: 1024 - 'y': 278 - uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 + customProperties: {} + - x: 875 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: HFFzDDfwj688N3 exts: {} - - x: 700 - 'y': 140 - uid: 8e4e1fe0-54f6-4c9f-a468-99a94b05803f + customProperties: {} + - x: 875 + 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: HFFzDDfwj688N3 exts: {} - - x: 630 - 'y': 70 - uid: 54e149bb-f36a-48c0-98f5-181451bac20c + customProperties: {} + - x: 945 + 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: HFFzDDfwj688N3 exts: {} - - x: 770 - 'y': 70 - uid: 54e149bb-f36a-48c0-98f5-181451bac20c + customProperties: {} + - x: 1015 + 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: HFFzDDfwj688N3 exts: {} - - x: 225 - 'y': 646 - uid: 070d18cf-978a-4874-ba4d-1aadd0d4f58a + customProperties: {} + - x: 945 + 'y': 210 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 256006c5-c853-40a5-a277-3bc1df64d226 exts: {} - - x: 568 - 'y': 770 - uid: 7f79638a-a14f-4ec8-8826-981ff954c738 + customProperties: {} + - x: 1033 + 'y': 262 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 700 - 'y': 770 - uid: 7f79638a-a14f-4ec8-8826-981ff954c738 + customProperties: {} + - x: 859 + 'y': 261.5 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 82c03796-7419-4f22-944c-78c1209c6874 exts: {} - - x: 1050 - 'y': 420 - uid: 6fd118b6-633f-4beb-93ec-2dd5c965fdd5 + customProperties: {} + - x: 910 + 'y': 140 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 exts: {} - - x: 630 - 'y': 700 - uid: 54e149bb-f36a-48c0-98f5-181451bac20c + customProperties: {} + - x: 980 + 'y': 140 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: beb36708-4cce-4b50-a3c3-f7e2edc1d994 exts: {} - tx: 2.2 - ty: 1 + customProperties: {} tiles: - depth: -10 - tiles: [] - extends: {} - uid: 125036f1-3a14-4fc3-ae95-2d29a5c56244 - thumbnail: 2d29a5c56244 + tiles: + - x: 192 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 128 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 0 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 256 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 320 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 384 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 448 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 512 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 576 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 640 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 704 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 768 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 832 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 896 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 960 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1024 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1088 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1152 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1216 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1280 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1344 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1408 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1472 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1536 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1600 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: -64 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1664 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 980 + 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 175 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 175 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 245 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 245 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 315 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 315 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 385 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 385 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 455 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 455 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 770 + 'y': 35 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 840 + 'y': 35 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 910 + 'y': 35 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 980 + 'y': 35 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + - x: 1050 + 'y': 35 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 375a4a5e-64e5-410f-aa6f-3bcfc9804519 + extends: + matterMakeStatic: true + hidden: false + uid: 6W5HrFWP7zkR93 + thumbnail: 6W5HrFWP7zkR93 extends: matterGravity: - 0 - 1 - gridX: 70 - gridY: 70 - lastmod: 1616896076747 + gridX: 35 + gridY: 35 + lastmod: 1661067605072 + events: + - lib: core + arguments: {} + code: ct.rooms.append('UI_Restart'); + eventKey: OnRoomStart + - eventKey: OnDraw + code: |- + if (!ct.templates.exists('AlienTarget') && this.timer1 <= 0) { + this.timer1 = 2; + } + arguments: {} + lib: core + - eventKey: Timer1 + code: ct.rooms.switch('Level_01'); + arguments: {} + lib: core + type: room + simulate: true + isUi: ! '' actions: - name: Pointer methods: - - code: mouse.Left + - code: pointer.Any emitterTandems: - name: FX_Burst origname: pta85a19f1cde1 @@ -1059,6 +3401,96 @@ emitterTandems: uid: 02de95c8-e4d6-41a2-aced-793d64657985 showShapeVisualizer: false previewTexture: 6c8a3edf-d5fe-4916-b63c-2201c099d28f + uid: pta85a19f1cde1 + - name: FX_GravityZone + uid: GTqfPcq297CFK2 + origname: pt97CFK2 + emitters: + - texture: wHD1gw8Jfdzk2k + openedTabs: + - texture + - spawning + - shape + - velocity + settings: + alpha: + list: + - value: 0 + time: 0 + - time: 0.14682539682539686 + value: 0.995 + - value: 1 + time: 0.8134920634920635 + - value: 0 + time: 1 + isStepped: false + scale: + list: + - value: 0.5700000000000001 + time: 0 + - value: 0.94 + time: 1 + isStepped: false + color: + list: + - value: ffffff + time: 0 + - time: 0.14682539682539686 + value: FFFFFF + - value: ffffff + time: 0.8134920634920635 + - value: ffffff + time: 1 + isStepped: false + blendMode: normal + speed: + list: + - value: 37.5 + time: 0 + - value: 175 + time: 1 + isStepped: false + startRotation: + min: 270 + max: 270 + rotationSpeed: + min: 0 + max: 0 + rotationAcceleration: 0 + lifetime: + min: 0.5 + max: 1 + frequency: 0.2 + spawnChance: 1 + particlesPerWave: 1 + angleStart: 270 + emitterLifetime: 0 + maxParticles: 10 + maxSpeed: 0 + pos: + x: 0 + 'y': 35 + acceleration: + x: 0 + 'y': 0 + addAtBack: false + spawnType: rect + spawnCircle: + x: 0 + 'y': 0 + r: 32 + delay: -1 + spawnRect: + x: -35 + 'y': -17.5 + w: 70 + h: 35 + uid: gJ694CdcTHd6rN + showShapeVisualizer: true + group: ! '' + lastmod: 1656998549297 + type: tandem + previewTexture: WJ554pph1tft1W scripts: [] starting: 0 settings: diff --git a/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev.png b/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev.png index c5d23a2bf..b52ebdab4 100644 Binary files a/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev.png and b/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev.png differ diff --git a/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev@2.png b/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev@2.png index 10f2177c3..72f776669 100644 Binary files a/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev@2.png and b/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev.png b/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev.png index 7f2c1af04..34352313c 100644 Binary files a/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev.png and b/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev.png differ diff --git a/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev@2.png b/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev@2.png index 6019f64dd..a3bb2f1ab 100644 Binary files a/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev@2.png and b/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev.png b/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev.png index c8e03f4ae..f224afa8d 100644 Binary files a/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev.png and b/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev.png differ diff --git a/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev@2.png b/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev@2.png index f80ecd8e4..ac5bab4b5 100644 Binary files a/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev@2.png and b/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev.png b/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev.png index 2900a26e4..280360d5d 100644 Binary files a/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev.png and b/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev.png differ diff --git a/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev@2.png b/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev@2.png index 615212731..b91949f25 100644 Binary files a/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev@2.png and b/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/iWJ554pph1tft1W.png b/src/examples/2DPhysics/img/iWJ554pph1tft1W.png new file mode 100644 index 000000000..38519392c Binary files /dev/null and b/src/examples/2DPhysics/img/iWJ554pph1tft1W.png differ diff --git a/src/examples/2DPhysics/img/iWJ554pph1tft1W.png_prev.png b/src/examples/2DPhysics/img/iWJ554pph1tft1W.png_prev.png new file mode 100644 index 000000000..3fc5a5a5a Binary files /dev/null and b/src/examples/2DPhysics/img/iWJ554pph1tft1W.png_prev.png differ diff --git a/src/examples/2DPhysics/img/iWJ554pph1tft1W.png_prev@2.png b/src/examples/2DPhysics/img/iWJ554pph1tft1W.png_prev@2.png new file mode 100644 index 000000000..2afd92cc7 Binary files /dev/null and b/src/examples/2DPhysics/img/iWJ554pph1tft1W.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev.png b/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev.png index 35ea710c1..554116b97 100644 Binary files a/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev.png and b/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev.png differ diff --git a/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev@2.png b/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev@2.png index f02879c67..b559de5b0 100644 Binary files a/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev@2.png and b/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png b/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png new file mode 100644 index 000000000..88cd3250b Binary files /dev/null and b/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png differ diff --git a/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png_prev.png b/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png_prev.png new file mode 100644 index 000000000..a6c0f2aa4 Binary files /dev/null and b/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png_prev.png differ diff --git a/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png_prev@2.png b/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png_prev@2.png new file mode 100644 index 000000000..ffd5dc90d Binary files /dev/null and b/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png b/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png new file mode 100644 index 000000000..89d43ade0 Binary files /dev/null and b/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png differ diff --git a/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png_prev.png b/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png_prev.png new file mode 100644 index 000000000..1f8581ed1 Binary files /dev/null and b/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png_prev.png differ diff --git a/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png_prev@2.png b/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png_prev@2.png new file mode 100644 index 000000000..46c8ccdf9 Binary files /dev/null and b/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png_prev@2.png differ diff --git a/src/examples/2DPhysics/img/r125036f1-3a14-4fc3-ae95-2d29a5c56244.png b/src/examples/2DPhysics/img/r125036f1-3a14-4fc3-ae95-2d29a5c56244.png new file mode 100644 index 000000000..e40b1da35 Binary files /dev/null and b/src/examples/2DPhysics/img/r125036f1-3a14-4fc3-ae95-2d29a5c56244.png differ diff --git a/src/examples/2DPhysics/img/r125036f1-3a14-4fc3-ae95-2d29a5c56244@r.png b/src/examples/2DPhysics/img/r125036f1-3a14-4fc3-ae95-2d29a5c56244@r.png new file mode 100644 index 000000000..0d457f4d8 Binary files /dev/null and b/src/examples/2DPhysics/img/r125036f1-3a14-4fc3-ae95-2d29a5c56244@r.png differ diff --git a/src/examples/2DPhysics/img/r2d29a5c56244.png b/src/examples/2DPhysics/img/r2d29a5c56244.png deleted file mode 100644 index e7749ae9c..000000000 Binary files a/src/examples/2DPhysics/img/r2d29a5c56244.png and /dev/null differ diff --git a/src/examples/2DPhysics/img/r6W5HrFWP7zkR93.png b/src/examples/2DPhysics/img/r6W5HrFWP7zkR93.png new file mode 100644 index 000000000..c472258fd Binary files /dev/null and b/src/examples/2DPhysics/img/r6W5HrFWP7zkR93.png differ diff --git a/src/examples/2DPhysics/img/r6W5HrFWP7zkR93@r.png b/src/examples/2DPhysics/img/r6W5HrFWP7zkR93@r.png new file mode 100644 index 000000000..883a03bc2 Binary files /dev/null and b/src/examples/2DPhysics/img/r6W5HrFWP7zkR93@r.png differ diff --git a/src/examples/2DPhysics/img/rHHMmHTwkf2B7K6.png b/src/examples/2DPhysics/img/rHHMmHTwkf2B7K6.png new file mode 100644 index 000000000..27bb2d828 Binary files /dev/null and b/src/examples/2DPhysics/img/rHHMmHTwkf2B7K6.png differ diff --git a/src/examples/2DPhysics/img/rHHMmHTwkf2B7K6@r.png b/src/examples/2DPhysics/img/rHHMmHTwkf2B7K6@r.png new file mode 100644 index 000000000..00dd72604 Binary files /dev/null and b/src/examples/2DPhysics/img/rHHMmHTwkf2B7K6@r.png differ diff --git a/src/examples/2DPhysics/img/rLPk4T2t9D3zBdR.png b/src/examples/2DPhysics/img/rLPk4T2t9D3zBdR.png new file mode 100644 index 000000000..1ae3015fc Binary files /dev/null and b/src/examples/2DPhysics/img/rLPk4T2t9D3zBdR.png differ diff --git a/src/examples/2DPhysics/img/rLPk4T2t9D3zBdR@r.png b/src/examples/2DPhysics/img/rLPk4T2t9D3zBdR@r.png new file mode 100644 index 000000000..102ad4b11 Binary files /dev/null and b/src/examples/2DPhysics/img/rLPk4T2t9D3zBdR@r.png differ diff --git a/src/examples/2DPhysics/img/rPjK4CJrtbn5PW5.png b/src/examples/2DPhysics/img/rPjK4CJrtbn5PW5.png new file mode 100644 index 000000000..233a10a86 Binary files /dev/null and b/src/examples/2DPhysics/img/rPjK4CJrtbn5PW5.png differ diff --git a/src/examples/2DPhysics/img/rPjK4CJrtbn5PW5@r.png b/src/examples/2DPhysics/img/rPjK4CJrtbn5PW5@r.png new file mode 100644 index 000000000..a5497e779 Binary files /dev/null and b/src/examples/2DPhysics/img/rPjK4CJrtbn5PW5@r.png differ diff --git a/src/examples/2DPhysics/img/shgMRjP_prev.png b/src/examples/2DPhysics/img/shgMRjP_prev.png new file mode 100644 index 000000000..856f41c9e Binary files /dev/null and b/src/examples/2DPhysics/img/shgMRjP_prev.png differ diff --git a/src/examples/2DPhysics/img/shgMRjP_prev@2.png b/src/examples/2DPhysics/img/shgMRjP_prev@2.png new file mode 100644 index 000000000..856f41c9e Binary files /dev/null and b/src/examples/2DPhysics/img/shgMRjP_prev@2.png differ diff --git a/src/examples/2DPhysics/img/splash.png b/src/examples/2DPhysics/img/splash.png index e7749ae9c..0d457f4d8 100644 Binary files a/src/examples/2DPhysics/img/splash.png and b/src/examples/2DPhysics/img/splash.png differ diff --git a/src/examples/DungeonCrawler_tutorial.ict b/src/examples/DungeonCrawler_tutorial.ict index 4e2a5276e..156dd055a 100644 --- a/src/examples/DungeonCrawler_tutorial.ict +++ b/src/examples/DungeonCrawler_tutorial.ict @@ -1,9 +1,8 @@ -ctjsVersion: 2.0.1 +ctjsVersion: 2.2.0 notes: /* empty */ libs: fittoscreen: mode: scaleFit - mouse: {} keyboard: {} keyboard.polyfill: {} sound.howler: {} @@ -16,6 +15,9 @@ libs: gridY: 128 debugMode: false debugText: 8 + pointer: + preventdefault: false + startlocked: false textures: - name: Bullet untill: 0 @@ -174,7 +176,7 @@ textures: bottom: 0 uid: 4733fb53-5e41-4cf8-b9a8-91ad700f2246 padding: 1 - lastmod: 1599530639304 + lastmod: 1656663031400 - name: HazardousTube untill: 0 grid: @@ -382,7 +384,7 @@ textures: bottom: 0 uid: 8bef1226-7fb8-4bf5-8120-ac6e53d81ea5 padding: 1 - lastmod: 1597803955163 + lastmod: 1656663036558 - name: Cat_Right untill: 0 grid: @@ -451,7 +453,7 @@ textures: height: 16 offx: 0 offy: 0 - origname: 'i14d3f53f-a868-4820-84cd-63234ab6e6b9.png}' + origname: i14d3f53f-a868-4820-84cd-63234ab6e6b9.png shape: rect left: 0 right: 16 @@ -476,7 +478,7 @@ textures: height: 32 offx: 0 offy: 0 - origname: 'ia42e0dff-69c9-46c3-8996-745aaa769698.png}' + origname: ia42e0dff-69c9-46c3-8996-745aaa769698.png shape: rect left: 16 right: 16 @@ -696,367 +698,523 @@ skeletons: [] templates: - name: Elevator depth: 0 - oncreate: this.transitionStarted = false; - onstep: |- - if (!this.transitionStarted) { - if (ct.place.meet(this, 'Cat')) { + texture: 2637e46e-06b2-4ca0-b17d-4bbf6eca44b7 + extends: {} + uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb + lastmod: 1656663070101 + events: + - lib: core + arguments: {} + code: |- + this.transitionStarted = false; + this.depth = this.y; + eventKey: OnCreate + - eventKey: collisionTemplate + code: |- + if (!this.transitionStarted) { this.transitionStarted = true; ct.transition.slideOut(750) .then(() => { ct.rooms.switch(ct.room.nextLevel); }); } - } - ondraw: this.depth = this.y; - ondestroy: '' - texture: 2637e46e-06b2-4ca0-b17d-4bbf6eca44b7 - extends: {} - uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb - lastmod: 1641334138294 + arguments: + template: c40336ea-2846-45d5-97ba-d51852d3f6c5 + lib: place + type: template + loopAnimation: true - name: Cat depth: 5 - oncreate: |- - ct.camera.follow = this; - ct.camera.shiftY = -16; - this.maxSpeed = 2; - - this.animationSpeed = 5 / ct.speed; - this.invincibleTimer = 0; - this.play(); - onstep: |- - this.vspeed = ct.actions.MoveY.value * this.maxSpeed; - this.hspeed = ct.actions.MoveX.value * this.maxSpeed; - this.moveContinuousByAxes('Solid'); - - if (ct.actions.Shoot.pressed) { - const bullet = ct.templates.copy('Bullet', this.x, this.y - 5); - bullet.direction = ct.u.pdn(this.x, this.y - 5, ct.mouse.x, ct.mouse.y); - } - - if (ct.place.meet(this, 'Gap')) { - this.kill = true; - ct.templates.copy('Cat_Falling', this.x, this.y - 8); - } + texture: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96 + extends: + cgroup: '' + uid: c40336ea-2846-45d5-97ba-d51852d3f6c5 + lastmod: 1659098686679 + events: + - lib: core + arguments: {} + code: |- + ct.camera.follow = this; + ct.camera.shiftY = -16; + this.maxSpeed = 2; - const checkpoint = ct.place.meet(this, 'Checkpoint'); - if (checkpoint) { - ct.room.checkpointX = checkpoint.x; - ct.room.checkpointY = checkpoint.y; - } + this.invincibleTimer = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.vspeed = ct.actions.MoveY.value * this.maxSpeed; + this.hspeed = ct.actions.MoveX.value * this.maxSpeed; + this.moveContinuousByAxes('Solid'); - if (this.invincibleTimer <= 0) { - const trap = ct.place.meet(this, 'Trap'), - enemy = ct.place.meet(this, 'Slime'); - var damaged = false; - if (trap && trap.active) { - damaged = true; + if (this.invincibleTimer <= 0) { + const trap = ct.place.meet(this, 'Trap'), + enemy = ct.place.meet(this, 'Slime'); + var damaged = false; + if (trap && trap.active) { + damaged = true; + } + if (enemy) { + damaged = true; + } + if (damaged) { + ct.emitters.fire('Cat_Damage', this.x, this.y); + ct.sound.spawn('CatDamage'); + this.invincibleTimer = ct.speed; + ct.room.lives --; + if (ct.room.lives <= 0) { + this.kill = true; + ct.templates.copy('Cat_Death', this.x, this.y); + } + return; + } + } else { + this.invincibleTimer -= ct.delta; } - if (enemy) { - damaged = true; + eventKey: OnStep + - lib: core + arguments: {} + code: |- + if (this.x < ct.pointer.x && this.tex !== 'Cat_Right') { + this.tex = 'Cat_Right'; + this.play(); } - if (damaged) { - ct.emitters.fire('Cat_Damage', this.x, this.y); - ct.sound.spawn('CatDamage'); - this.invincibleTimer = ct.speed; - ct.room.lives --; - if (ct.room.lives <= 0) { - this.kill = true; - ct.templates.copy('Cat_Death', this.x, this.y); - } - return; + if (this.x > ct.pointer.x && this.tex !== 'Cat_Left') { + this.tex = 'Cat_Left'; + this.play(); } - } else { - this.invincibleTimer -= ct.delta; - } - ondraw: |- - if (this.x < ct.mouse.x && this.tex !== 'Cat_Right') { - this.tex = 'Cat_Right'; - this.play(); - } - if (this.x > ct.mouse.x && this.tex !== 'Cat_Left') { - this.tex = 'Cat_Left'; - this.play(); - } - this.depth = this.y; + this.depth = this.y; - if (this.invincibleTimer > 0 && this.invincibleTimer % 20 > 10) { - this.opacity = 0.5; - } else { - this.opacity = 1; - } - ondestroy: '' - texture: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96 - extends: - cgroup: '' - uid: c40336ea-2846-45d5-97ba-d51852d3f6c5 - lastmod: 1650173622519 + if (this.invincibleTimer > 0 && this.invincibleTimer % 20 > 10) { + this.opacity = 0.5; + } else { + this.opacity = 1; + } + eventKey: OnDraw + - eventKey: OnActionPress + code: >- + const bullet = ct.templates.copy('Bullet', this.x, this.y - 5); + + bullet.direction = ct.u.pdn(this.x, this.y - 5, ct.pointer.x, + ct.pointer.y); + arguments: + action: Shoot + lib: core + - eventKey: collisionTemplate + code: |- + ct.room.checkpointX = other.x; + ct.room.checkpointY = other.y; + arguments: + template: 469b9eef-6117-43a5-87d3-7151da7eba06 + lib: place + - eventKey: collisionTemplate + code: |- + this.kill = true; + ct.templates.copy('Cat_Falling', this.x, this.y - 8); + arguments: + template: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 + lib: place + type: template + loopAnimation: true + playAnimationOnStart: true + animationFPS: 5 - name: Crate depth: 0 - oncreate: this.depth = this.y; - onstep: |- - if (ct.place.occupied(this, 'Bullet')) { - this.kill = true; - } - ondraw: '' - ondestroy: |- - ct.sound.spawn('Hit'); - ct.templates.copy('Crate_Debris', this.x, this.y); texture: 31948760-8965-4768-ab1d-2b87d0b7fc3a extends: cgroup: Solid uid: 4e473462-8009-438e-9f53-1032e3a335cf - lastmod: 1641332423671 + lastmod: 1656663007036 + events: + - lib: core + arguments: {} + code: this.depth = this.y; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + ct.sound.spawn('Hit'); + ct.templates.copy('Crate_Debris', this.x, this.y); + eventKey: OnDestroy + - eventKey: collisionCGroup + code: |- + this.kill = true; + if (ct.templates.isCopy(other)) { + other.kill = true; + } + arguments: + group: Bullet + lib: place + type: template + loopAnimation: true - name: HazardousTube depth: 0 - oncreate: '' - onstep: |- - if (ct.place.occupied(this, 'Bullet')) { - this.kill = true; - } - ondraw: '' - ondestroy: |- - ct.sound.spawn('Hit'); - ct.templates.copy('HazardousTube_Debris', this.x, this.y - 4); - ct.emitters.fire('BlueSparks', this.x, this.y - 4); texture: 1f0fbe96-38aa-4db4-a011-c0cf34b91d00 extends: cgroup: Solid uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c - lastmod: 1597811713144 + lastmod: 1656663016676 + events: + - lib: core + arguments: {} + code: |- + ct.sound.spawn('Hit'); + ct.templates.copy('HazardousTube_Debris', this.x, this.y - 4); + ct.emitters.fire('BlueSparks', this.x, this.y - 4); + eventKey: OnDestroy + - eventKey: collisionCGroup + code: |- + this.kill = true; + if (ct.templates.isCopy(other)) { + other.kill = true; + } + arguments: + group: Bullet + lib: place + type: template + loopAnimation: true - name: Bullet depth: 0 - oncreate: |- - ct.sound.spawn('Shoot'); - this.speed = 4; - onstep: |- - this.move(); - if (ct.place.occupied(this, 'Solid')) { - this.kill = true; - } - ondraw: this.depth = this.y; - ondestroy: |- - ct.sound.spawn('SmallHit'); - ct.emitters.fire('RedSparks', this.x, this.y); texture: 29cd8366-37bd-4a4d-96a1-a2da4d674972 extends: cgroup: Bullet uid: 57f03679-dc98-4ebc-87ef-a4ca7b275731 - lastmod: 1641332445982 + lastmod: 1656577394349 + events: + - lib: core + arguments: {} + code: |- + ct.sound.spawn('Shoot'); + this.speed = 4; + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + - lib: core + arguments: {} + code: |- + ct.sound.spawn('SmallHit'); + ct.emitters.fire('RedSparks', this.x, this.y); + eventKey: OnDestroy + - lib: core + arguments: {} + code: this.depth = this.y; + eventKey: OnDraw + - eventKey: collisionCGroup + code: this.kill = true; + arguments: + group: Solid + lib: place + type: template + loopAnimation: true - name: Crosshair depth: 100000 - oncreate: '' - onstep: '' - ondraw: |- - this.x = ct.mouse.xui; - this.y = ct.mouse.yui; - ondestroy: '' texture: bdf46b11-ef42-4c45-af01-a0b918ee9587 extends: {} uid: ff0f561c-a96c-4205-a083-01d2a60ebb67 - lastmod: 1641334780836 + lastmod: 1656575572155 + events: + - lib: core + arguments: {} + code: |- + this.x = ct.pointer.xui; + this.y = ct.pointer.yui; + eventKey: OnDraw + type: template + loopAnimation: true - name: Crate_Debris depth: -6500 - oncreate: '' - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: d25aebb8-d135-4b9c-b2b5-844298c35a62 extends: {} uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b lastmod: 1599528375450 + events: + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: HazardousTube_Debris depth: -6500 - oncreate: 'this.rotation = ct.random.dice(-90, 0, 90);' - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: 80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc extends: {} uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991 lastmod: 1599528345681 + events: + - lib: core + arguments: {} + code: 'this.rotation = ct.random.dice(-90, 0, 90);' + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: Door depth: 1 - oncreate: this.opened = false; - onstep: |- - const cat = ct.templates.list['Cat'][0] - if (!this.opened && ct.templates.isCopy(cat)) { - if (ct.u.pdc(this.x, this.y, cat.x, cat.y) < 48) { - this.opened = true; - this.cgroup = ''; - this.loop = false; - this.animationSpeed = 15 / ct.speed; - ct.sound.spawn('Door'); - this.play(); - } - } - ondraw: this.depth = this.y; - ondestroy: '' texture: 3a7c7928-a731-4940-9854-17936b3c9a46 extends: cgroup: Solid uid: c701a029-af09-4fcf-9712-0fcdaa3581be - lastmod: 1618035793594 - - name: Slime - depth: 0 - oncreate: |- - this.aggroRange = 120; - this.aggroed = false; - onstep: |- - const cat = ct.templates.list['Cat'][0]; - if (ct.templates.isCopy(cat)) { - if (this.aggroed) { - if (ct.u.pdc(this.x, this.y, cat.x, cat.y) > 7) { - this.speed = 1.5; - this.direction = ct.u.pdn(this.x, this.y, cat.x, cat.y); - } else { - this.speed = 0; + lastmod: 1656662934118 + events: + - lib: core + arguments: {} + code: this.opened = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + const cat = ct.templates.list['Cat'][0] + if (!this.opened && ct.templates.isCopy(cat)) { + if (ct.u.pdc(this.x, this.y, cat.x, cat.y) < 48) { + this.opened = true; + this.cgroup = ''; + this.loop = false; + this.animationSpeed = 15 / ct.speed; + ct.sound.spawn('Door'); + this.play(); } - } else if (ct.u.pdc(this.x, this.y, cat.x, cat.y) < this.aggroRange) { - this.aggroed = true; } - } - - this.moveContinuousByAxes('Solid', 0.5); - - if (ct.place.occupied(this, 'Bullet')) { - this.kill = true; - } - if (ct.place.meet(this, 'Gap')) { - this.kill = true; - } - ondraw: this.depth = this.y; - ondestroy: |- - ct.emitters.fire('Slime_Dead', this.x, this.y); - ct.sound.spawn('SlimeExplosion'); + eventKey: OnStep + - lib: core + arguments: {} + code: this.depth = this.y; + eventKey: OnDraw + type: template + loopAnimation: true + - name: Slime + depth: 0 texture: 4733fb53-5e41-4cf8-b9a8-91ad700f2246 extends: cgroup: Solid uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 - lastmod: 1618035849551 + lastmod: 1656663039597 + events: + - lib: core + arguments: {} + code: |- + this.aggroRange = 120; + this.aggroed = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + const cat = ct.templates.list['Cat'][0]; + if (ct.templates.valid(cat)) { + if (this.aggroed) { + if (ct.u.pdc(this.x, this.y, cat.x, cat.y) > 7) { + this.speed = 1.5; + this.direction = ct.u.pdn(this.x, this.y, cat.x, cat.y); + } else { + this.speed = 0; + } + } else if (ct.u.pdc(this.x, this.y, cat.x, cat.y) < this.aggroRange) { + this.aggroed = true; + } + } + + this.moveContinuousByAxes('Solid', 0.5); + eventKey: OnStep + - lib: core + arguments: {} + code: |- + ct.emitters.fire('Slime_Dead', this.x, this.y); + ct.sound.spawn('SlimeExplosion'); + eventKey: OnDestroy + - lib: core + arguments: {} + code: this.depth = this.y; + eventKey: OnDraw + - eventKey: collisionTemplate + code: this.kill = true; + arguments: + template: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 + lib: place + - eventKey: collisionCGroup + code: |- + this.kill = true; + if (ct.templates.isCopy(other)) { + other.kill = true; + } + arguments: + group: Bullet + lib: place + type: template + loopAnimation: true - name: Gap depth: 0 - oncreate: this.visible = false; - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: 14d3f53f-a868-4820-84cd-63234ab6e6b9 extends: cgroup: Gap + visible: false uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 - lastmod: 1598572535583 + lastmod: 1656645123809 + events: [] + type: template + loopAnimation: false - name: Checkpoint depth: 0 - oncreate: this.visible = false; - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: a42e0dff-69c9-46c3-8996-745aaa769698 extends: cgroup: Checkpoint uid: 469b9eef-6117-43a5-87d3-7151da7eba06 lastmod: 1598575103989 + events: + - lib: core + arguments: {} + code: this.visible = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: Cat_Falling depth: 0 - oncreate: ct.sound.spawn('Fall'); - onstep: this.move(); - ondraw: |- - this.angle -= 10 * ct.delta; - this.scale.x -= 0.015 * ct.delta; - this.scale.y = this.scale.x; - - if (this.scale.x <= 0) { - this.kill = true; - } - ondestroy: | - if (ct.room.lives > 0) { - ct.room.lives --; - ct.templates.copy('Cat', ct.room.checkpointX, ct.room.checkpointY); - } else { - ct.rooms.switch(ct.room.name); - } texture: 96121d6f-6483-48f8-841b-b307befc7d42 extends: {} uid: c480ea86-1545-4048-8f2e-1ded726cfa92 lastmod: 1604820858604 + events: + - lib: core + arguments: {} + code: ct.sound.spawn('Fall'); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + - lib: core + arguments: {} + code: | + if (ct.room.lives > 0) { + ct.room.lives --; + ct.templates.copy('Cat', ct.room.checkpointX, ct.room.checkpointY); + } else { + ct.rooms.switch(ct.room.name); + } + eventKey: OnDestroy + - lib: core + arguments: {} + code: |- + this.angle -= 10 * ct.delta; + this.scale.x -= 0.015 * ct.delta; + this.scale.y = this.scale.x; + + if (this.scale.x <= 0) { + this.kill = true; + } + eventKey: OnDraw + type: template + loopAnimation: true - name: StartButton depth: 0 - oncreate: this.blinkTimer = 0; - onstep: |- - if (ct.mouse.hovers(this) && ct.mouse.pressed) { + texture: a5745819-e057-4d67-a114-b64249a0f701 + extends: {} + uid: 38f86691-8fcc-44e4-a201-8479ca64935f + lastmod: 1656575321697 + events: + - lib: core + arguments: {} + code: this.blinkTimer = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.blinkTimer += ct.delta; + if (this.blinkTimer > ct.speed / 2) { + this.alpha = 0; + } else { + this.alpha = 1; + } + if (this.blinkTimer > ct.speed) { + this.blinkTimer = 0; + } + eventKey: OnDraw + - eventKey: OnPointerClick + code: |- ct.transition.slideOut(750) .then(() => { ct.rooms.switch('Level_01'); }); - } - ondraw: |- - this.blinkTimer += ct.delta; - if (this.blinkTimer > ct.speed / 2) { - this.alpha = 0; - } else { - this.alpha = 1; - } - if (this.blinkTimer > ct.speed) { - this.blinkTimer = 0; - } - ondestroy: '' - texture: a5745819-e057-4d67-a114-b64249a0f701 - extends: {} - uid: 38f86691-8fcc-44e4-a201-8479ca64935f - lastmod: 1599529122735 + arguments: {} + lib: core + type: template + loopAnimation: true - name: Trap depth: -5000 - oncreate: this.spikeTimer = 0; - onstep: |- - this.spikeTimer += ct.delta; - - if (this.spikeTimer > ct.speed * 3) { - this.gotoAndStop(0); - this.spikeTimer = 0; - this.active = false; - } else if (this.spikeTimer > ct.speed * 2) { - this.gotoAndStop(1); - this.active = true; - } - ondraw: '' - ondestroy: '' texture: 6c23e805-94b6-4e3a-8606-682c36960233 extends: {} uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 - lastmod: 1599531331432 + lastmod: 1656663024572 + events: + - lib: core + arguments: {} + code: this.spikeTimer = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.spikeTimer += ct.delta; + + if (this.spikeTimer > ct.speed * 3) { + this.gotoAndStop(0); + this.spikeTimer = 0; + this.active = false; + } else if (this.spikeTimer > ct.speed * 2) { + this.gotoAndStop(1); + this.active = true; + } + eventKey: OnStep + type: template + loopAnimation: true - name: Cat_Death depth: 0 - oncreate: |- - this.depth = this.y; - this.animationSpeed = 0.7 / ct.speed; - this.loop = false; - this.onComplete = () => { - this.kill = true; - ct.rooms.switch(ct.room.name); - }; - this.play(); - onstep: this.move(); - ondraw: '' - ondestroy: '' texture: 8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1 extends: {} uid: f11d4e26-8450-4187-8163-b70facceca7e - lastmod: 1641332285054 + lastmod: 1656645102145 + events: + - lib: core + arguments: {} + code: |- + this.depth = this.y; + this.animationSpeed = 0.7 / ct.speed; + eventKey: OnCreate + - eventKey: OnAnimationComplete + code: ct.rooms.switch(ct.room.name); + arguments: {} + lib: core + type: template + loopAnimation: false + playAnimationOnStart: true - name: Medkit depth: 0 - oncreate: '' - onstep: |- - if (ct.place.meet(this, 'Cat')) { + texture: c61a44b6-1f4d-43c2-9356-7288658947a9 + extends: {} + uid: b336d91c-2876-4686-b8b4-901045a86ac7 + lastmod: 1656663060956 + events: + - lib: core + arguments: {} + code: ct.sound.spawn('Powerup'); + eventKey: OnDestroy + - eventKey: collisionTemplate + code: |- if (ct.room.lives < 3) { ct.room.lives++; this.kill = true; } - } - ondraw: '' - ondestroy: ct.sound.spawn('Powerup'); - texture: c61a44b6-1f4d-43c2-9356-7288658947a9 - extends: {} - uid: b336d91c-2876-4686-b8b4-901045a86ac7 - lastmod: 1604820879663 + arguments: + template: c40336ea-2846-45d5-97ba-d51852d3f6c5 + lib: place + type: template + loopAnimation: true sounds: - name: Shoot uid: 97baf84a-32d3-450c-a52e-25a770565520 @@ -1102,16 +1260,6 @@ sounds: styles: [] rooms: - name: Level_01 - oncreate: |- - ct.sound.spawn('InGameTheme', { - loop: true, - volume: 0.3 - }); - this.nextLevel = 'Level_02'; - - ct.rooms.append('UI_InGame', { - isUi: true - }); onstep: '' ondraw: '' onleave: '' @@ -1123,917 +1271,1193 @@ rooms: 'y': 64 uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 152 'y': 192 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 160 'y': 208 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 168 'y': 192 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 280 'y': 192 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 280 'y': 64 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 96 'y': 88 uid: c40336ea-2846-45d5-97ba-d51852d3f6c5 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 96 'y': 160 uid: c701a029-af09-4fcf-9712-0fcdaa3581be exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 tiles: - depth: -6000 tiles: - x: 48 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 96 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 240 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 224 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 96 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 240 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 208 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 240 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 256 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 272 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 96 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 128 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 192 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 176 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 208 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 96 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 128 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 176 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 192 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 208 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 224 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 240 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 256 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 272 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 288 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 288 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 48 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 224 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 1 - - 1 - - 1 - x: 224 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 128 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 1 - - 1 - - 1 - x: 192 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 1 - - 1 - - 1 - x: 160 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 1 - - 1 - - 1 - x: 272 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 1 - - 1 - - 1 extends: cgroup: Solid hidden: false @@ -2041,764 +2465,954 @@ rooms: tiles: - x: 64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 272 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 272 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 240 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 208 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 208 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 272 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 272 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 272 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 240 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 240 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 288 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 48 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 32 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 112 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 240 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 96 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 240 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 224 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 256 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 224 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 240 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 0 - - 1 - - 1 - x: 144 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 0 - - 1 - - 1 - x: 160 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 0 - - 1 - - 1 - x: 160 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 0 - - 1 - - 1 - x: 192 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 240 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 208 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 208 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 208 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 192 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 176 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 176 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 240 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 256 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 240 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 15 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 7 - - 1 - - 1 - - 1 - x: 240 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 15 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 7 - - 1 - - 1 - - 1 - x: 64 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 80 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 96 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 112 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 128 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 144 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 160 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 176 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 192 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 208 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 224 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 240 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 256 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 272 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 288 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - - x: 80 - 'y': 144 + - x: 96 + 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: ae954867-1039-43f6-bf6d-d8684cb58612 - grid: - - 0 - - 0 - - 1 - - 1 - x: 224 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 extends: cgroup: Decor hidden: false @@ -2808,19 +3422,30 @@ rooms: gridX: 16 gridY: 16 backgroundColor: '#000337' - lastmod: 1641402653400 + lastmod: 1656637825068 restrictCamera: true restrictMinX: -48 restrictMaxX: 384 restrictMinY: -16 restrictMaxY: 320 - - name: Level_02 - oncreate: |- - this.nextLevel = 'Level_03'; + events: + - lib: core + arguments: {} + code: |- + ct.sound.spawn('InGameTheme', { + loop: true, + volume: 0.3 + }); + this.nextLevel = 'Level_02'; - ct.rooms.append('UI_InGame', { - isUi: true - }); + ct.rooms.append('UI_InGame', { + isUi: true + }); + eventKey: OnRoomStart + type: room + simulate: true + isUi: ! '' + - name: Level_02 onstep: '' ondraw: '' onleave: '' @@ -2832,1752 +3457,2424 @@ rooms: 'y': 144 uid: c701a029-af09-4fcf-9712-0fcdaa3581be exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 106 'y': 238 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 359 'y': 239 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 61 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 111 'y': 79 uid: c40336ea-2846-45d5-97ba-d51852d3f6c5 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 124 'y': 233 uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 220 uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 255 'y': 232 uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 568 'y': 16 uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 458 'y': 41 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 451 'y': 47 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 459 'y': 51 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 279 'y': 41 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 387 'y': 58 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 323 'y': 90 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 373 'y': 99 uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 447 'y': 68 uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 317 'y': 55 uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 432 'y': 80 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 352 'y': 112 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 368 'y': 48 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 568 'y': 80 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 334 'y': 230 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 224 'y': 184 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 240 'y': 184 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 256 'y': 184 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 272 'y': 184 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 224 'y': 248 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 240 'y': 248 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 256 'y': 248 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 272 'y': 248 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 280 'y': 56 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 280 'y': 72 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 408 'y': 104 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 424 'y': 104 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 440 'y': 104 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 160 'y': 224 uid: 469b9eef-6117-43a5-87d3-7151da7eba06 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 352 'y': 96 uid: 469b9eef-6117-43a5-87d3-7151da7eba06 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 352 'y': 208 uid: b336d91c-2876-4686-b8b4-901045a86ac7 + exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 tiles: - depth: -6000 tiles: - x: 64 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 96 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 304 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 96 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 192 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 304 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 352 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 336 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 1 - - 1 - - 1 - x: 304 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 256 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 272 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 288 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 304 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 320 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 336 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 352 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 368 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 448 - 'y': -0.0 + 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 384 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 400 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 416 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 432 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 448 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 464 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 464 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 464 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 464 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 480 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 496 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 512 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 528 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 480 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 496 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 512 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 528 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 560 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': -16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': -32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 544 'y': -32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': -32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 560 'y': -32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 576 'y': -16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 480 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 1 - - 1 - - 1 - x: 528 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 1 - - 1 - - 1 - x: 544 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 1 - - 1 - - 1 - x: 432 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 416 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 400 - 'y': -0.0 + 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 384 - 'y': -0.0 + 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 416 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 1 - - 1 - - 1 - x: 128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 208 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 96 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 128 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 48 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 288 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 304 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 368 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 352 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 336 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 320 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 288 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 192 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 176 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 96 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 464 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 448 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 432 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 384 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 272 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 288 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 320 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 336 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 352 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 368 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 384 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 400 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 432 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 448 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 496 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 512 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 464 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 560 'y': -16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 576 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 560 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 544 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 528 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 512 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 496 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 480 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 256 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 272 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 304 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 176 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 304 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 208 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 192 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 0 - - 1 - - 1 - x: 64 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 144 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 144 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 64 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 208 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 288 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 208 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 288 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 192 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 11 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 1 - - 1 - - 1 - x: 464 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 464 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 320 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 0 - - 1 - - 1 - x: 368 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 0 - - 1 - - 1 - x: 304 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 1 - - 1 - - 1 - x: 288 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 1 - - 1 - - 1 - x: 400 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 1 - - 1 - - 1 - x: 416 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 extends: cgroup: Solid hidden: false @@ -4585,1596 +5882,1994 @@ rooms: tiles: - x: 96 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 160 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 176 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 320 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 176 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 320 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 192 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 192 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 304 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 112 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 80 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 352 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 336 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 176 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 224 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 16 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 48 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 240 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 400 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 512 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 496 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 26 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 3 - - 1 - - 1 - x: 272 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 288 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 304 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 368 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 384 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 400 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 416 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 432 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 448 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 304 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 368 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 416 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 448 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 304 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 400 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 416 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 464 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 480 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 496 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 512 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 528 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 544 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 560 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 560 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 448 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 432 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 416 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 400 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 384 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 368 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 320 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 304 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 272 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 288 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 304 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 320 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 352 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 368 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 384 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 336 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 448 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 432 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 384 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 400 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 336 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 320 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 384 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 432 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 320 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 336 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 320 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 368 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 336 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 352 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 272 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 272 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 224 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 304 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 208 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 0 - - 1 - - 1 - x: 208 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 0 - - 1 - - 1 - x: 288 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 0 - - 1 - - 1 - x: 288 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 0 - - 1 - - 1 - x: 336 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 352 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 352 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 336 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 560 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 560 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 240 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 30 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 3 - - 1 - - 1 - x: 256 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 224 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 256 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 240 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 96 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 112 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 128 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 144 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 160 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 176 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 192 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 208 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 64 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 48 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 160 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 144 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 304 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 288 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 272 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 256 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 288 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 304 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 320 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 336 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 352 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 368 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 384 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 400 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 416 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 432 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 448 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 464 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 480 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 496 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 512 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 528 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 544 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 560 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 576 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 160 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 7 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 7 - - 0 - - 1 - - 1 - x: 560 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 15 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 7 - - 1 - - 1 - - 1 - x: 352 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 7 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 7 - - 0 - - 1 - - 1 - x: 224 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 240 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 256 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 272 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 272 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - x: 288 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - x: 272 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 28 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 3 - - 1 - - 1 - x: 288 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 28 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 3 - - 1 - - 1 - x: 272 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 28 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 3 - - 1 - - 1 - x: 288 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 29 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 5 - - 3 - - 1 - - 1 - x: 448 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - x: 432 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - x: 416 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - x: 400 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - x: 416 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 2 - - 1 - - 1 - - x: 336 - 'y': 128 + - x: 352 + 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: ae954867-1039-43f6-bf6d-d8684cb58612 - grid: - - 0 - - 0 - - 1 - - 1 extends: cgroup: Decor hidden: false @@ -6183,8 +7878,21 @@ rooms: extends: {} gridX: 8 gridY: 8 - lastmod: 1641402692176 + lastmod: 1656662875164 backgroundColor: '#000337' + events: + - lib: core + arguments: {} + code: |- + this.nextLevel = 'Level_03'; + + ct.rooms.append('UI_InGame', { + isUi: true + }); + eventKey: OnRoomStart + type: room + simulate: true + isUi: ! '' - name: MainMenu oncreate: '' onstep: '' @@ -6196,55 +7904,65 @@ rooms: copies: - x: 120 'y': 116 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 38f86691-8fcc-44e4-a201-8479ca64935f exts: {} + customProperties: {} - x: 32 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: ff0f561c-a96c-4205-a083-01d2a60ebb67 exts: {} + customProperties: {} tiles: - depth: -10 tiles: - - x: 16 - 'y': 16 + - x: 121 + 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: dc7b9662-c746-403c-9f3e-67425fd480a3 - grid: - - 0 - - 0 - - 1 - - 1 - - x: 62 - 'y': 151 + - x: 120 + 'y': 153 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 9a1f5e9c-16a8-4900-8991-fab3f42fa1fd - grid: - - 0 - - 0 - - 1 - - 1 extends: {} + hidden: false uid: eed8a427-1c70-425d-b633-7b6ea00c7b7c thumbnail: 7b6ea00c7b7c extends: {} gridX: 16 gridY: 16 backgroundColor: '#000337' - lastmod: 1604820946644 + lastmod: 1661000148459 + events: [] + type: room + simulate: true + isUi: ! '' - name: Level_03 - oncreate: |- - this.nextLevel = 'MainMenu'; - - ct.rooms.append('UI_InGame', { - isUi: true - }); onstep: '' ondraw: '' - onleave: |- - // If there is no cat in the room, - // it means that we are restarting the room because the cat died. - if (ct.templates.exists('Cat')) { - ct.sound.stop('InGameTheme'); - console.log('This demo is a work in progress, stay tuned for more levels :)'); - } width: 240 height: 160 backgrounds: [] @@ -6253,2340 +7971,3338 @@ rooms: 'y': 64 uid: c40336ea-2846-45d5-97ba-d51852d3f6c5 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 64 uid: 469b9eef-6117-43a5-87d3-7151da7eba06 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 128 uid: c701a029-af09-4fcf-9712-0fcdaa3581be exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 104 'y': 192 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 192 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 224 uid: 469b9eef-6117-43a5-87d3-7151da7eba06 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 248 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 264 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 104 'y': 272 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 272 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 280 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 296 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 312 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 104 'y': 320 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 320 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 152 'y': 328 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 168 'y': 328 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 184 'y': 328 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 200 'y': 328 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 216 'y': 328 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 336 uid: 469b9eef-6117-43a5-87d3-7151da7eba06 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 344 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 232 'y': 344 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 360 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 232 'y': 360 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 181 'y': 362 uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 205 'y': 376 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 152 'y': 376 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 376 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 232 'y': 376 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 216 'y': 392 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 168 'y': 392 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 184 'y': 392 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 200 'y': 392 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 392 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 392 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 393 uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 408 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 104 'y': 416 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 416 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 424 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 88 'y': 440 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 440 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 456 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 464 uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 472 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 472 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 488 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 488 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 72 'y': 504 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 136 'y': 504 uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 528 uid: 469b9eef-6117-43a5-87d3-7151da7eba06 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 115 'y': 574 uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 104 'y': 588 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 118 'y': 592 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 110 'y': 597 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 105 'y': 601 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 118 'y': 604 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 104 'y': 614 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 120 'y': 614 uid: 4e473462-8009-438e-9f53-1032e3a335cf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 624 uid: c701a029-af09-4fcf-9712-0fcdaa3581be exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 113 'y': 636 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 58 'y': 643 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 122 'y': 648 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 90 'y': 659 uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 112 'y': 672 uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 74 'y': 680 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 154 'y': 682 uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 96 'y': 416 uid: b336d91c-2876-4686-b8b4-901045a86ac7 + exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 tiles: - depth: -6000 tiles: - x: 48 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 96 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 400 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 416 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 528 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 544 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 528 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 544 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 160 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 144 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 128 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 32 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 32 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 32 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 32 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 32 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 64 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 96 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 112 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 48 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 176 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 0 - - 1 - - 1 - x: 80 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 128 'y': 464 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 80 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 128 'y': 336 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 48 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 1 - - 1 - - 1 - x: 128 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 1 - - 1 - - 1 - x: 96 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 16 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 48 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 0 - - 1 - - 1 - x: 144 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 1 - - 1 - - 1 - x: 64 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 4 - - 1 - - 1 - - 1 - x: 48 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 144 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 160 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 19 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 2 - - 1 - - 1 - x: 48 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 112 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 144 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 96 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 80 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 11 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 1 - - 1 - - 1 - x: 128 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 160 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 48 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 - x: 80 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 0 - - 1 - - 1 - x: 128 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 0 - - 1 - - 1 - x: 128 'y': 432 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 0 - - 1 - - 1 - x: 80 'y': 336 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 3 - - 0 - - 1 - - 1 - x: 128 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 128 'y': 304 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 80 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 32 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 32 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 176 'y': 688 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 176 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 0 - - 1 - - 1 - x: 32 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 1 - - 1 - - 1 - x: 176 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 1 - - 1 - - 1 extends: cgroup: Solid - depth: -7000 tiles: - x: 208 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 192 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 192 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 208 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 176 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 160 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 176 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 96 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 112 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 112 'y': 432 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 96 'y': 480 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 112 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 96 'y': 544 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 3 - - 1 - - 1 - x: 96 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 112 'y': 592 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 96 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 112 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 96 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 112 'y': 544 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 112 'y': 528 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 496 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 464 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 464 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 416 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 400 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 416 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 400 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 528 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 160 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 176 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 208 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 112 'y': 480 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 96 'y': 432 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 18 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 2 - - 2 - - 1 - - 1 - x: 96 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 304 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 336 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 272 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 336 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 352 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 368 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 208 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 112 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 112 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 112 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 96 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 0 - - 2 - - 1 - - 1 - x: 112 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 176 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 144 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 80 'y': 80 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 80 'y': 48 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 112 'y': 304 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 112 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 3 - - 1 - - 1 - x: 96 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 608 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 160 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 160 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 160 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 160 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 48 'y': 672 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 48 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 48 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 48 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 144 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 128 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 112 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 80 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 48 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 656 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 1 - - 2 - - 1 - - 1 - x: 96 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 112 'y': 144 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 96 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - x: 112 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 4f8a6124-427b-410b-a467-ac42afec3644 - grid: - - 6 - - 2 - - 1 - - 1 - - x: 96 - 'y': 112 + - x: 112 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: ae954867-1039-43f6-bf6d-d8684cb58612 - grid: - - 0 - - 0 - - 1 - - 1 - - x: 96 - 'y': 608 + - x: 112 + 'y': 624 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: ae954867-1039-43f6-bf6d-d8684cb58612 - grid: - - 0 - - 0 - - 1 - - 1 extends: cgroup: Decor uid: ae6bb30c-9ad9-4390-b632-127493eb58cf @@ -8595,24 +11311,32 @@ rooms: gridX: 8 gridY: 8 backgroundColor: '#000337' - lastmod: 1604822242023 - - name: UI_InGame - oncreate: >- - ct.room.lives = 3; - - this.hearts = new PIXI.TilingSprite(ct.res.getTexture('Heart', 0), 48, - 16); - - this.hearts.anchor.x = this.hearts.anchor.y = 0; - - this.hearts.x = this.hearts.y = 4; + lastmod: 1656637834135 + events: + - lib: core + arguments: {} + code: |- + this.nextLevel = 'MainMenu'; - this.addChild(this.hearts); - - - ct.transition.slideIn(750); + ct.rooms.append('UI_InGame', { + isUi: true + }); + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + // If there is no cat in the room, + // it means that we are restarting the room because the cat died. + if (ct.templates.exists('Cat')) { + ct.sound.stop('InGameTheme'); + console.log('This demo is a work in progress, stay tuned for more levels :)'); + } + eventKey: OnRoomEnd + type: room + simulate: true + isUi: ! '' + - name: UI_InGame onstep: '' - ondraw: this.hearts.width = 16 * ct.room.lives; onleave: '' width: 240 height: 160 @@ -8621,6 +11345,14 @@ rooms: - x: 96 'y': 88 uid: ff0f561c-a96c-4205-a083-01d2a60ebb67 + exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 tiles: - depth: -10 tiles: [] @@ -8631,7 +11363,32 @@ rooms: gridX: 8 gridY: 8 backgroundColor: '#000337' - lastmod: 1604818771543 + lastmod: 1656662852540 + events: + - lib: core + arguments: {} + code: >- + ct.room.lives = 3; + + this.hearts = new PIXI.TilingSprite(ct.res.getTexture('Heart', 0), 48, + 16); + + this.hearts.anchor.x = this.hearts.anchor.y = 0; + + this.hearts.x = this.hearts.y = 4; + + this.addChild(this.hearts); + + + ct.transition.slideIn(750); + eventKey: OnRoomStart + - lib: core + arguments: {} + code: this.hearts.width = 16 * ct.room.lives; + eventKey: OnDraw + type: room + simulate: true + isUi: true actions: - name: MoveX methods: @@ -8652,7 +11409,7 @@ actions: - name: Shoot methods: - code: keyboard.Space - - code: mouse.Left + - code: pointer.Any - name: Interact methods: - code: keyboard.KeyE diff --git a/src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png} b/src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png similarity index 100% rename from src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png} rename to src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png diff --git a/src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png}_prev.png b/src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png_prev.png similarity index 100% rename from src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png}_prev.png rename to src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png_prev.png diff --git a/src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png}_prev@2.png b/src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png_prev@2.png similarity index 100% rename from src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png}_prev@2.png rename to src/examples/DungeonCrawler_tutorial/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png_prev@2.png diff --git a/src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png} b/src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png similarity index 100% rename from src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png} rename to src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png diff --git a/src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png}_prev.png b/src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png_prev.png similarity index 100% rename from src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png}_prev.png rename to src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png_prev.png diff --git a/src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png}_prev@2.png b/src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png_prev@2.png similarity index 100% rename from src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png}_prev@2.png rename to src/examples/DungeonCrawler_tutorial/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png_prev@2.png diff --git a/src/examples/DungeonCrawler_tutorial/img/r127493eb58cf.png b/src/examples/DungeonCrawler_tutorial/img/r127493eb58cf.png deleted file mode 100644 index 8749b9745..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/r127493eb58cf.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r1cd7a8ef-febb-4174-ad90-42846504b06f.png b/src/examples/DungeonCrawler_tutorial/img/r1cd7a8ef-febb-4174-ad90-42846504b06f.png new file mode 100644 index 000000000..f6cd9432a Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/r1cd7a8ef-febb-4174-ad90-42846504b06f.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r1cd7a8ef-febb-4174-ad90-42846504b06f@r.png b/src/examples/DungeonCrawler_tutorial/img/r1cd7a8ef-febb-4174-ad90-42846504b06f@r.png new file mode 100644 index 000000000..f6cce5a41 Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/r1cd7a8ef-febb-4174-ad90-42846504b06f@r.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r326893eb-b9c2-4616-aaee-bb4641e0423e.png b/src/examples/DungeonCrawler_tutorial/img/r326893eb-b9c2-4616-aaee-bb4641e0423e.png new file mode 100644 index 000000000..ed46f03b9 Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/r326893eb-b9c2-4616-aaee-bb4641e0423e.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r326893eb-b9c2-4616-aaee-bb4641e0423e@r.png b/src/examples/DungeonCrawler_tutorial/img/r326893eb-b9c2-4616-aaee-bb4641e0423e@r.png new file mode 100644 index 000000000..0c795276f Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/r326893eb-b9c2-4616-aaee-bb4641e0423e@r.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r342f55fa6324.png b/src/examples/DungeonCrawler_tutorial/img/r342f55fa6324.png deleted file mode 100644 index 8749b9745..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/r342f55fa6324.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r3786dc4c7d4c.png b/src/examples/DungeonCrawler_tutorial/img/r3786dc4c7d4c.png deleted file mode 100644 index 8749b9745..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/r3786dc4c7d4c.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r42846504b06f.png b/src/examples/DungeonCrawler_tutorial/img/r42846504b06f.png deleted file mode 100644 index 39a24d49b..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/r42846504b06f.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r6569f49f6b80.png b/src/examples/DungeonCrawler_tutorial/img/r6569f49f6b80.png deleted file mode 100644 index d09582a51..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/r6569f49f6b80.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/r7b6ea00c7b7c.png b/src/examples/DungeonCrawler_tutorial/img/r7b6ea00c7b7c.png deleted file mode 100644 index 97d86c767..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/r7b6ea00c7b7c.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/rae6bb30c-9ad9-4390-b632-127493eb58cf.png b/src/examples/DungeonCrawler_tutorial/img/rae6bb30c-9ad9-4390-b632-127493eb58cf.png new file mode 100644 index 000000000..0a55fb81c Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/rae6bb30c-9ad9-4390-b632-127493eb58cf.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/rae6bb30c-9ad9-4390-b632-127493eb58cf@r.png b/src/examples/DungeonCrawler_tutorial/img/rae6bb30c-9ad9-4390-b632-127493eb58cf@r.png new file mode 100644 index 000000000..d6730ecc9 Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/rae6bb30c-9ad9-4390-b632-127493eb58cf@r.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/rbb4641e0423e.png b/src/examples/DungeonCrawler_tutorial/img/rbb4641e0423e.png deleted file mode 100644 index 29bb94e95..000000000 Binary files a/src/examples/DungeonCrawler_tutorial/img/rbb4641e0423e.png and /dev/null differ diff --git a/src/examples/DungeonCrawler_tutorial/img/ree8b4583-614a-44d6-aacc-6569f49f6b80.png b/src/examples/DungeonCrawler_tutorial/img/ree8b4583-614a-44d6-aacc-6569f49f6b80.png new file mode 100644 index 000000000..71018e25a Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/ree8b4583-614a-44d6-aacc-6569f49f6b80.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/ree8b4583-614a-44d6-aacc-6569f49f6b80@r.png b/src/examples/DungeonCrawler_tutorial/img/ree8b4583-614a-44d6-aacc-6569f49f6b80@r.png new file mode 100644 index 000000000..0a886df3c Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/ree8b4583-614a-44d6-aacc-6569f49f6b80@r.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/reed8a427-1c70-425d-b633-7b6ea00c7b7c.png b/src/examples/DungeonCrawler_tutorial/img/reed8a427-1c70-425d-b633-7b6ea00c7b7c.png new file mode 100644 index 000000000..492948a81 Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/reed8a427-1c70-425d-b633-7b6ea00c7b7c.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/reed8a427-1c70-425d-b633-7b6ea00c7b7c@r.png b/src/examples/DungeonCrawler_tutorial/img/reed8a427-1c70-425d-b633-7b6ea00c7b7c@r.png new file mode 100644 index 000000000..6615020cd Binary files /dev/null and b/src/examples/DungeonCrawler_tutorial/img/reed8a427-1c70-425d-b633-7b6ea00c7b7c@r.png differ diff --git a/src/examples/DungeonCrawler_tutorial/img/splash.png b/src/examples/DungeonCrawler_tutorial/img/splash.png index 8749b9745..6615020cd 100644 Binary files a/src/examples/DungeonCrawler_tutorial/img/splash.png and b/src/examples/DungeonCrawler_tutorial/img/splash.png differ diff --git a/src/examples/JettyCat.ict b/src/examples/JettyCat.ict index c52ebf0fc..8be36d2ac 100644 --- a/src/examples/JettyCat.ict +++ b/src/examples/JettyCat.ict @@ -1,4 +1,4 @@ -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 notes: /* empty */ libs: place: @@ -581,19 +581,22 @@ skeletons: [] templates: - name: Logo depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 6cd7876a-4918-47a7-8100-75f0375986ef texture: 2c8009c9-ccbc-459e-8562-3146d7210e12 extends: {} lastmod: 1583983041810 + events: [] + type: template + loopAnimation: true - name: Button_Play depth: 0 - oncreate: '' - onstep: |- - if (ct.touch.collideUi(this)) { + uid: 25ac0f9b-57ff-461d-8eb7-a9ce800b9c71 + texture: 775ba15c-b1aa-4707-bc1e-d0811846a893 + extends: {} + lastmod: 1657026642146 + events: + - eventKey: OnPointerClick + code: |- if (!this.pressed) { this.pressed = true; ct.transition.circleOut(1000, 0x446ADB) @@ -601,70 +604,84 @@ templates: ct.rooms.switch('InGame'); }); } - } - ondraw: '' - ondestroy: '' - uid: 25ac0f9b-57ff-461d-8eb7-a9ce800b9c71 - texture: 775ba15c-b1aa-4707-bc1e-d0811846a893 - extends: {} - lastmod: 1585538428974 + arguments: {} + lib: core + type: template + loopAnimation: true - name: PotatoCat depth: 0 - oncreate: |- - this.speed = 10; - this.direction = 0; + uid: 8f93611e-6e95-49c4-8e2b-4cc067be2924 + texture: eb24c2bc-a36c-4118-b33e-a7348c00e5bb + extends: {} + lastmod: 1657026575888 + events: + - lib: core + arguments: {} + code: |- + this.speed = 10; + this.direction = 0; - this.gravityAcceleration = 2; + this.gravityAcceleration = 2; - ct.camera.follow = this; - ct.camera.followY = false; - ct.camera.shiftX = 250; + ct.camera.follow = this; + ct.camera.followY = false; + ct.camera.shiftX = 250; - this.jet = ct.emitters.follow(this, 'Jet'); - onstep: >- - if (this.gameover) { - this.gravity = this.gravityAcceleration; + this.jet = ct.emitters.follow(this, 'Jet'); + eventKey: OnCreate + - lib: core + arguments: {} + code: >- this.move(); - return; - } + + this.angle = -this.vspeed * 0.3; - if (ct.actions.Poof.down) { + if (this.y > 1750 - 200 || // If the cat is below the ground minus its + approximate height, or + this.y < 0) { // the cat flew off the upper boundary, + this.kill = true; // remove the cat. + } + eventKey: OnStep + - eventKey: OnActionRelease + code: this.jet.pause(); + arguments: + action: Poof + lib: core + - eventKey: OnActionDown + code: |- this.gravity = this.gravityAcceleration; this.addSpeed(ct.delta * this.gravityAcceleration * 2, -90); - this.jet.resume(); - } - - - /*if (ct.actions.Poof.pressed) { - this.jet.resume(); - this.vspeed = this.gravityAcceleration * 15; - }*/ - - if (ct.actions.Poof.released) { - this.jet.pause(); - } - - - - if (!this.gameover && (ct.place.occupied(this, 'Obstacle') || // If it - bumped into something solid, or - this.y > ct.camera.bottom - 325 || // if it got too low so it touched ground, or - this.y < ct.camera.top) // if it flew to space and left upper camera boundary - ) { - // Change the texture - this.tex = 'PotatoCat_Stunned'; - // Set a flag that we will use to stop other logic - this.gameover = true; - // Jump to the left - this.speed = 25; - this.direction = -135; + arguments: + action: Poof + lib: core + - eventKey: OnActionPress + code: this.jet.resume(); + arguments: + action: Poof + lib: core + - eventKey: collisionCGroup + code: |- + // Remove itself + this.kill = true; + arguments: + group: Obstacle + lib: place + - eventKey: OnDestroy + code: |- // Stop camera movement ct.camera.follow = false; // Remove the layer with score and a pause button ct.rooms.remove(ct.room.mainUi); + // Create an animated dummy + var dummy = ct.templates.copy('PotatoCat_Stunned', this.x, this.y); + // Copy scale settings to the new copy + dummy.scale.x = this.scale.x; + dummy.scale.y = this.scale.y; + + // Schedule a menu appearance ct.u.wait(1000) .then(() => { // Add a layer with "Lose" UI @@ -672,71 +689,93 @@ templates: isUi: true }); }); - } - - - this.move(); - ondraw: this.angle = -this.vspeed * 0.3; - ondestroy: '' - uid: 8f93611e-6e95-49c4-8e2b-4cc067be2924 - texture: eb24c2bc-a36c-4118-b33e-a7348c00e5bb - extends: {} - lastmod: 1641411061516 + arguments: {} + lib: core + type: template + loopAnimation: true - name: Tube depth: 0 - oncreate: |- - // Randomize tube's height by changing its texture - this.tex = ct.random.dice( - 'Tube_01', - 'Tube_02', - 'Tube_03', - 'Tube_04' - ); - onstep: this.move(); - ondraw: '' - ondestroy: '' uid: 455b4c7c-2249-4b12-999e-27db667688b5 texture: 2b5a51ae-c05b-4a94-b9bd-e088bf2e4b1a extends: cgroup: Obstacle - lastmod: 1584315308762 + lastmod: 1657025842522 + events: + - lib: core + arguments: {} + code: |- + // Randomize tube's height by changing its texture + this.tex = ct.random.dice( + 'Tube_01', + 'Tube_02', + 'Tube_03', + 'Tube_04' + ); + eventKey: OnCreate + type: template + loopAnimation: true - name: Star depth: 0 - oncreate: this.wiggleTime = 0; - onstep: |- - if (ct.place.meet(this, 'PotatoCat')) { - this.kill = true; - ct.room.stars ++; - } - ondraw: |- - this.wiggleTime += ct.delta * 0.2; - this.angle = Math.sin(this.wiggleTime) * 5; - ondestroy: 'ct.emitters.fire(''Stars'', this.x, this.y);' uid: b7362b5c-811d-438c-b164-f53213eaefa7 texture: 4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947 extends: cgroup: Collectible - lastmod: 1585717224654 + lastmod: 1657025807690 + events: + - lib: core + arguments: {} + code: this.wiggleTime = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: 'ct.emitters.fire(''Stars'', this.x, this.y);' + eventKey: OnDestroy + - lib: core + arguments: {} + code: |- + this.wiggleTime += ct.delta * 0.2; + this.angle = Math.sin(this.wiggleTime) * 5; + eventKey: OnDraw + - eventKey: collisionTemplate + code: |- + this.kill = true; + ct.room.stars ++; + arguments: + template: 8f93611e-6e95-49c4-8e2b-4cc067be2924 + lib: place + type: template + loopAnimation: true - name: StarCounter depth: 0 - oncreate: |- - this.label = new PIXI.Text('0', ct.styles.get('Orange')); - this.label.x = 130; - this.label.y = -60; - this.label.scale.x = this.label.scale.y = 1 / 0.75; - this.addChild(this.label); - onstep: this.move(); - ondraw: this.label.text = ct.room.stars; - ondestroy: '' uid: d4c02f18-93d0-4ad4-8e5b-62fb9a0f0af9 texture: 4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947 extends: {} - lastmod: 1584329120363 + lastmod: 1657025823090 + events: + - lib: core + arguments: {} + code: |- + this.label = new PIXI.Text('0', ct.styles.get('Orange')); + this.label.x = 130; + this.label.y = -60; + this.label.scale.x = this.label.scale.y = 1 / 0.75; + this.addChild(this.label); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.label.text = ct.room.stars; + eventKey: OnDraw + type: template + loopAnimation: true - name: Button_Pause depth: 0 - oncreate: '' - onstep: |- - if (ct.touch.collideUi(this)) { + uid: 6a532c9b-7e32-4070-b72b-86012306c7fb + texture: 343c1f60-adad-4233-bfcf-c13b8aade974 + extends: {} + lastmod: 1657026579809 + events: + - eventKey: OnPointerClick + code: |- if (ct.rooms.list['UI_Paused'].length === 0) { // Create a room UI_Paused, put it above the current one (append it), // and specify that it is a UI layer (isUi: true) @@ -746,28 +785,28 @@ templates: // Turns ct.delta into 0, effectively stopping the game ct.pixiApp.ticker.speed = 0; } - } - ondraw: '' - ondestroy: '' - uid: 6a532c9b-7e32-4070-b72b-86012306c7fb - texture: 343c1f60-adad-4233-bfcf-c13b8aade974 - extends: {} - lastmod: 1585538425962 + arguments: {} + lib: core + type: template + loopAnimation: true - name: Paused_Heading depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: ee7454ca-ba35-4d79-9b78-83e763fd81f5 texture: 8229085f-e4d3-406a-9e95-bf13a8fec3cb extends: {} - lastmod: 1584326074638 + lastmod: 1657025834098 + events: [] + type: template + loopAnimation: true - name: Button_Continue depth: 0 - oncreate: '' - onstep: |- - if (ct.touch.collideUi(this)) { + uid: 43938432-cf0b-416d-91e9-8bc9a1f8abcf + texture: 775ba15c-b1aa-4707-bc1e-d0811846a893 + extends: {} + lastmod: 1657026823472 + events: + - eventKey: OnPointerClick + code: |- if (!this.pressed) { this.pressed = true; ct.tween.add({ @@ -775,7 +814,8 @@ templates: fields: { alpha: 0 }, - duration: 1000 + duration: 1000, + useUiDelta: true }) .then(() => { ct.tween.add({ @@ -783,67 +823,98 @@ templates: fields: { speed: 1 }, - duration: 1000 + duration: 1000, + useUiDelta: true }); ct.rooms.remove(this.getRoom()); }); } - } - ondraw: '' - ondestroy: '' - uid: 43938432-cf0b-416d-91e9-8bc9a1f8abcf - texture: 775ba15c-b1aa-4707-bc1e-d0811846a893 - extends: {} - lastmod: 1585540754831 + arguments: {} + lib: core + type: template + loopAnimation: true - name: OhNo_Heading depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 92049024-c0ef-41ae-8512-851ce20cad3a texture: ee0876e4-eece-42c2-aa93-a468dab47099 extends: {} - lastmod: 1584329570933 + lastmod: 1657025835986 + events: [] + type: template + loopAnimation: true - name: PressHint depth: 50 - oncreate: this.pulsePhase = 0; - onstep: |- - this.pulsePhase += ct.delta * 0.2; - - this.scale.x = this.scale.y = 1 + Math.sin(this.pulsePhase) * 0.1; - - if (ct.actions.Poof.pressed) { - this.kill = true; - } - ondraw: '' - ondestroy: '' uid: ba73f80b-0995-40b6-94d5-3e82712b5ecf texture: df915202-237f-498c-bec0-25116fc17008 extends: {} - lastmod: 1585719186144 - - name: EndGame_Star_Counter - depth: 0 - oncreate: |- - if (!('JettyCat_HighScore' in localStorage)) { - localStorage['JettyCat_HighScore'] = ct.room.stars; - } else if (localStorage['JettyCat_HighScore'] < ct.room.stars) { - localStorage['JettyCat_HighScore'] = ct.room.stars; - } + lastmod: 1657025830714 + events: + - lib: core + arguments: {} + code: this.pulsePhase = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.pulsePhase += ct.delta * 0.2; - var scoreText = `Your score: ${ct.room.stars} - Highscore: ${localStorage['JettyCat_HighScore']}`; + this.scale.x = this.scale.y = 1 + Math.sin(this.pulsePhase) * 0.1; - this.label = new PIXI.Text(scoreText, ct.styles.get('Orange')); - this.label.anchor.x = this.label.anchor.y = 0.5; - this.addChild(this.label); - onstep: this.move(); - ondraw: '' - ondestroy: '' + if (ct.actions.Poof.pressed) { + this.kill = true; + } + eventKey: OnStep + type: template + loopAnimation: true + - name: EndGame_Star_Counter + depth: 0 uid: 8748598b-4494-433f-9f18-fbe985c2a583 texture: -1 extends: {} - lastmod: 1584333052604 + lastmod: 1657025852826 + events: + - lib: core + arguments: {} + code: |- + if (!('JettyCat_HighScore' in localStorage)) { + localStorage['JettyCat_HighScore'] = ct.room.stars; + } else if (localStorage['JettyCat_HighScore'] < ct.room.stars) { + localStorage['JettyCat_HighScore'] = ct.room.stars; + } + + var scoreText = `Your score: ${ct.room.stars} + Highscore: ${localStorage['JettyCat_HighScore']}`; + + this.label = new PIXI.Text(scoreText, ct.styles.get('Orange')); + this.label.anchor.x = this.label.anchor.y = 0.5; + this.addChild(this.label); + eventKey: OnCreate + type: template + loopAnimation: true + - type: template + name: PotatoCat_Stunned + depth: 0 + texture: eb3dadb5-49cf-4ba1-b562-421ab360842e + playAnimationOnStart: false + loopAnimation: false + visible: true + extends: {} + events: + - eventKey: OnCreate + code: |- + this.gravity = 2; + + // Jump to the left + this.speed = 25; + this.direction = -135; + arguments: {} + lib: core + - eventKey: OnStep + code: this.move(); + arguments: {} + lib: core + lastmod: 1657025714482 + uid: T9G6GkQ7GJj3fB sounds: [] styles: - name: Orange @@ -867,58 +938,6 @@ styles: lastmod: 1584330374714 rooms: - name: InGame - oncreate: |- - // This is where we will store the number of collected stars - this.stars = 0; - - // Adds a UI layer on top of the main one - this.mainUi = ct.rooms.append('UI_InGame', { - isUi: true - }); - - // Wind up the timer for tube creation - this.obstacleTimer = ct.speed * 5; - - // Start a transition - ct.transition.circleIn(500, 0x446ADB); - onstep: |- - // If there is no cat in the room… - if (!ct.templates.list['PotatoCat'].length) { - // stop further execution - return; - } - - // Substract elapsed time from the timer - this.obstacleTimer -= ct.delta; - // If the timer is up… - if (this.obstacleTimer <= 0) { - // Wind it again - this.obstacleTimer += ct.speed * 2; - - // Create two tubes - var tube1 = ct.templates.copy('Tube', ct.camera.right + 250, ct.camera.bottom - 130); // At the bottom of the camera - var tube2 = ct.templates.copy('Tube', ct.camera.right + 250, ct.camera.top - 70); // At the top - - // Change second tube's texture depending on which texture is used in the first tube - if (tube1.tex === 'Tube_01') { // Shortest tube will result in the longest tube - tube2.tex = 'Tube_04'; - } else if (tube1.tex === 'Tube_02') { - tube2.tex = 'Tube_03'; - } else if (tube1.tex === 'Tube_03') { - tube2.tex = 'Tube_02'; - } else if (tube1.tex === 'Tube_04') { // Longest will result in the shortest one - tube2.tex = 'Tube_01'; - } - // Thus we will always get gaps of the same size, but with random tubes. - - // Now, flip the upper (second) tube - tube2.scale.y = -1; - - // Create a star bonus with 30% chance somewhere in between top and bottom edge, with 300px padding. - if (ct.random.chance(30)) { - ct.templates.copy('Star', ct.camera.right + 250 + 500, ct.random.range(ct.camera.top + 300, ct.camera.bottom - 300)); - } - } ondraw: '' onleave: '' width: 1080 @@ -926,33 +945,111 @@ rooms: backgrounds: - depth: -1000 texture: 5c680919-3827-4ea7-9e72-a8fc81ddfb45 - extends: - parallaxX: 0.5 - parallaxY: 0 - repeat: repeat + shiftX: 0 + shiftY: 0 + parallaxX: 0.5 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -100 texture: 53da7582-ae6c-4843-976e-c84d6d74a489 - extends: - repeat: repeat-x - shiftX: 0 - shiftY: 1736 + shiftX: 0 + shiftY: 1736 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat-x copies: - x: 320 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 8f93611e-6e95-49c4-8e2b-4cc067be2924 - tx: 0.65 - ty: 0.65 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: c51bc37f-69c9-4eec-8c2b-332dab64a25a thumbnail: 332dab64a25a gridX: 64 gridY: 64 - lastmod: 1602729483658 + lastmod: 1661348046418 extends: {} + events: + - lib: core + arguments: {} + code: |- + // This is where we will store the number of collected stars + this.stars = 0; + + // Adds a UI layer on top of the main one + this.mainUi = ct.rooms.append('UI_InGame', { + isUi: true + }); + + // Wind up the timer for tube creation + this.obstacleTimer = ct.speed * 5; + + // Start a transition + ct.transition.circleIn(500, 0x446ADB); + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + // If there is no cat in the room… + if (!ct.templates.list['PotatoCat'].length) { + // stop further execution + return; + } + + // Substract elapsed time from the timer + this.obstacleTimer -= ct.delta; + // If the timer is up… + if (this.obstacleTimer <= 0) { + // Wind it again + this.obstacleTimer += ct.speed * 2; + + // Create two tubes + var tube1 = ct.templates.copy('Tube', ct.camera.right + 250, ct.camera.bottom - 130); // At the bottom of the camera + var tube2 = ct.templates.copy('Tube', ct.camera.right + 250, ct.camera.top - 70); // At the top + + // Change second tube's texture depending on which texture is used in the first tube + if (tube1.tex === 'Tube_01') { // Shortest tube will result in the longest tube + tube2.tex = 'Tube_04'; + } else if (tube1.tex === 'Tube_02') { + tube2.tex = 'Tube_03'; + } else if (tube1.tex === 'Tube_03') { + tube2.tex = 'Tube_02'; + } else if (tube1.tex === 'Tube_04') { // Longest will result in the shortest one + tube2.tex = 'Tube_01'; + } + // Thus we will always get gaps of the same size, but with random tubes. + + // Now, flip the upper (second) tube + tube2.scale.y = -1; + + // Create a star bonus with 30% chance somewhere in between top and bottom edge, with 300px padding. + if (ct.random.chance(30)) { + ct.templates.copy('Star', ct.camera.right + 250 + 500, ct.random.range(ct.camera.top + 300, ct.camera.bottom - 300)); + } + } + eventKey: OnStep + type: room + simulate: true + isUi: false - name: MainMenu oncreate: '' onstep: '' @@ -963,32 +1060,64 @@ rooms: backgrounds: - depth: -1000 texture: 5c680919-3827-4ea7-9e72-a8fc81ddfb45 - extends: - movementX: -0.5 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: -0.5 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -100 texture: 53da7582-ae6c-4843-976e-c84d6d74a489 - extends: - repeat: repeat-x - shiftY: 1736 + shiftX: 0 + shiftY: 1736 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat-x copies: - x: 540 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 6cd7876a-4918-47a7-8100-75f0375986ef exts: {} + customProperties: {} - x: 540 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 25ac0f9b-57ff-461d-8eb7-a9ce800b9c71 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 8677472b-4549-48b5-a5a8-a891fb029f6b thumbnail: a891fb029f6b gridX: 108 gridY: 64 - lastmod: 1602729490329 + lastmod: 1661071540211 extends: {} + events: [] + type: room + simulate: true + isUi: false - name: UI_InGame oncreate: '' onstep: '' @@ -1004,14 +1133,35 @@ rooms: tx: 0.75 ty: 0.75 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 960 'y': 128 uid: 6a532c9b-7e32-4070-b72b-86012306c7fb exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 512 'y': 960 uid: ba73f80b-0995-40b6-94d5-3e82712b5ecf exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 tiles: - depth: -10 tiles: [] @@ -1020,18 +1170,13 @@ rooms: thumbnail: 9c2c4e48f46a gridX: 64 gridY: 64 - lastmod: 1585703854723 + lastmod: 1657026628736 + events: [] + type: room + extends: {} + simulate: true + isUi: false - name: UI_Paused - oncreate: |- - this.alpha = 0; - - ct.tween.add({ - obj: this, - fields: { - alpha: 1 - }, - duration: 500 - }); onstep: '' ondraw: '' onleave: '' @@ -1041,32 +1186,57 @@ rooms: copies: - x: 540 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 43938432-cf0b-416d-91e9-8bc9a1f8abcf exts: {} + customProperties: {} - x: 540 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: ee7454ca-ba35-4d79-9b78-83e763fd81f5 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 78d3dac5-253d-4792-a85d-7d775aefe864 thumbnail: 7d775aefe864 gridX: 540 gridY: 64 - lastmod: 1585537872918 - - name: UI_OhNo - oncreate: |- - this.alpha = 0; + lastmod: 1661071531476 + events: + - lib: core + arguments: {} + code: |- + this.alpha = 0; - ct.tween.add({ - obj: this, - fields: { - alpha: 1 - }, - duration: 500 - }); + ct.tween.add({ + obj: this, + fields: { + alpha: 1 + }, + duration: 500, + silent: true, + useUiDelta: true + }); + eventKey: OnRoomStart + type: room + extends: {} + simulate: true + isUi: false + - name: UI_OhNo onstep: '' ondraw: '' onleave: '' @@ -1076,25 +1246,67 @@ rooms: copies: - x: 540 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 92049024-c0ef-41ae-8512-851ce20cad3a exts: {} + customProperties: {} - x: 540 'y': 1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 25ac0f9b-57ff-461d-8eb7-a9ce800b9c71 exts: {} + customProperties: {} - x: 540 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 8748598b-4494-433f-9f18-fbe985c2a583 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 158a085c-c48c-4b57-8e64-e38a4cd0cc21 thumbnail: e38a4cd0cc21 gridX: 540 gridY: 64 - lastmod: 1585537893376 + lastmod: 1661071527520 + events: + - lib: core + arguments: {} + code: |- + this.alpha = 0; + + ct.tween.add({ + obj: this, + fields: { + alpha: 1 + }, + duration: 500, + silent: true, + useUiDelta: true + }); + eventKey: OnRoomStart + type: room + extends: {} + simulate: true + isUi: false actions: - name: Poof methods: @@ -1176,6 +1388,7 @@ emitterTandems: uid: d6a3c617-6986-40e6-b8de-116e91dd6bc2 showShapeVisualizer: true previewTexture: eb24c2bc-a36c-4118-b33e-a7348c00e5bb + uid: pt2acdfaefd987 - name: Stars origname: pt550aaadb2b36 emitters: @@ -1268,6 +1481,7 @@ emitterTandems: uid: 9066d3fa-7519-4097-9023-e941e8835745 showShapeVisualizer: true previewTexture: 4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947 + uid: pt550aaadb2b36 starting: 0 settings: export: diff --git a/src/examples/JettyCat/img/r158a085c-c48c-4b57-8e64-e38a4cd0cc21.png b/src/examples/JettyCat/img/r158a085c-c48c-4b57-8e64-e38a4cd0cc21.png new file mode 100644 index 000000000..c0dc19aa6 Binary files /dev/null and b/src/examples/JettyCat/img/r158a085c-c48c-4b57-8e64-e38a4cd0cc21.png differ diff --git a/src/examples/JettyCat/img/r158a085c-c48c-4b57-8e64-e38a4cd0cc21@r.png b/src/examples/JettyCat/img/r158a085c-c48c-4b57-8e64-e38a4cd0cc21@r.png new file mode 100644 index 000000000..2887d9ff1 Binary files /dev/null and b/src/examples/JettyCat/img/r158a085c-c48c-4b57-8e64-e38a4cd0cc21@r.png differ diff --git a/src/examples/JettyCat/img/r332dab64a25a.png b/src/examples/JettyCat/img/r332dab64a25a.png deleted file mode 100644 index 2e811ccda..000000000 Binary files a/src/examples/JettyCat/img/r332dab64a25a.png and /dev/null differ diff --git a/src/examples/JettyCat/img/r78d3dac5-253d-4792-a85d-7d775aefe864.png b/src/examples/JettyCat/img/r78d3dac5-253d-4792-a85d-7d775aefe864.png new file mode 100644 index 000000000..da70ede71 Binary files /dev/null and b/src/examples/JettyCat/img/r78d3dac5-253d-4792-a85d-7d775aefe864.png differ diff --git a/src/examples/JettyCat/img/r78d3dac5-253d-4792-a85d-7d775aefe864@r.png b/src/examples/JettyCat/img/r78d3dac5-253d-4792-a85d-7d775aefe864@r.png new file mode 100644 index 000000000..5e7ca3d95 Binary files /dev/null and b/src/examples/JettyCat/img/r78d3dac5-253d-4792-a85d-7d775aefe864@r.png differ diff --git a/src/examples/JettyCat/img/r7d775aefe864.png b/src/examples/JettyCat/img/r7d775aefe864.png deleted file mode 100644 index 6e33e64bb..000000000 Binary files a/src/examples/JettyCat/img/r7d775aefe864.png and /dev/null differ diff --git a/src/examples/JettyCat/img/r8677472b-4549-48b5-a5a8-a891fb029f6b.png b/src/examples/JettyCat/img/r8677472b-4549-48b5-a5a8-a891fb029f6b.png new file mode 100644 index 000000000..93929856a Binary files /dev/null and b/src/examples/JettyCat/img/r8677472b-4549-48b5-a5a8-a891fb029f6b.png differ diff --git a/src/examples/JettyCat/img/r8677472b-4549-48b5-a5a8-a891fb029f6b@r.png b/src/examples/JettyCat/img/r8677472b-4549-48b5-a5a8-a891fb029f6b@r.png new file mode 100644 index 000000000..f1968fc5a Binary files /dev/null and b/src/examples/JettyCat/img/r8677472b-4549-48b5-a5a8-a891fb029f6b@r.png differ diff --git a/src/examples/JettyCat/img/r9c2c4e48f46a.png b/src/examples/JettyCat/img/r9c2c4e48f46a.png deleted file mode 100644 index 884153c19..000000000 Binary files a/src/examples/JettyCat/img/r9c2c4e48f46a.png and /dev/null differ diff --git a/src/examples/JettyCat/img/ra891fb029f6b.png b/src/examples/JettyCat/img/ra891fb029f6b.png deleted file mode 100644 index 90eba4c72..000000000 Binary files a/src/examples/JettyCat/img/ra891fb029f6b.png and /dev/null differ diff --git a/src/examples/JettyCat/img/rc51bc37f-69c9-4eec-8c2b-332dab64a25a.png b/src/examples/JettyCat/img/rc51bc37f-69c9-4eec-8c2b-332dab64a25a.png new file mode 100644 index 000000000..3fa7b757b Binary files /dev/null and b/src/examples/JettyCat/img/rc51bc37f-69c9-4eec-8c2b-332dab64a25a.png differ diff --git a/src/examples/JettyCat/img/rc51bc37f-69c9-4eec-8c2b-332dab64a25a@r.png b/src/examples/JettyCat/img/rc51bc37f-69c9-4eec-8c2b-332dab64a25a@r.png new file mode 100644 index 000000000..1e5cddb08 Binary files /dev/null and b/src/examples/JettyCat/img/rc51bc37f-69c9-4eec-8c2b-332dab64a25a@r.png differ diff --git a/src/examples/JettyCat/img/rdd0ac376-10c7-4619-9593-9c2c4e48f46a.png b/src/examples/JettyCat/img/rdd0ac376-10c7-4619-9593-9c2c4e48f46a.png new file mode 100644 index 000000000..cdc7c5e59 Binary files /dev/null and b/src/examples/JettyCat/img/rdd0ac376-10c7-4619-9593-9c2c4e48f46a.png differ diff --git a/src/examples/JettyCat/img/rdd0ac376-10c7-4619-9593-9c2c4e48f46a@r.png b/src/examples/JettyCat/img/rdd0ac376-10c7-4619-9593-9c2c4e48f46a@r.png new file mode 100644 index 000000000..cfa456e5b Binary files /dev/null and b/src/examples/JettyCat/img/rdd0ac376-10c7-4619-9593-9c2c4e48f46a@r.png differ diff --git a/src/examples/JettyCat/img/re38a4cd0cc21.png b/src/examples/JettyCat/img/re38a4cd0cc21.png deleted file mode 100644 index 6e33e64bb..000000000 Binary files a/src/examples/JettyCat/img/re38a4cd0cc21.png and /dev/null differ diff --git a/src/examples/JettyCat/img/splash.png b/src/examples/JettyCat/img/splash.png index 90eba4c72..f1968fc5a 100644 Binary files a/src/examples/JettyCat/img/splash.png and b/src/examples/JettyCat/img/splash.png differ diff --git a/src/examples/MoveBlocks.ict b/src/examples/MoveBlocks.ict index ba33913fe..c1fe9cfe3 100644 --- a/src/examples/MoveBlocks.ict +++ b/src/examples/MoveBlocks.ict @@ -1,4 +1,4 @@ -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 notes: |- /* Things to note here: @@ -260,216 +260,281 @@ skeletons: [] templates: - name: KeySpot depth: -10 - oncreate: '' - onstep: |- - var tile = ct.place.meet(this, 'KeyTile'); - if (tile && !this.victory) { - this.victory = true; - tile.dragging = false; - tile.locked = true; - ct.tween.add({ - obj: tile, - fields: { - x: this.x, - y: this.y - }, - duration: 650, - silent: true - }); - ct.sound.spawn('Success'); - - // Fire an asynchronous task, will trigger in 1.5s - ct.u.wait(1500) - .then(() => { - ct.rooms.switch('PuzzleBlocks'); - }); - } - ondraw: '' - ondestroy: '' texture: 04dbb554-54cd-439a-8d17-4d06366151dc extends: {} uid: 933bd8f5-8e3f-44d4-9060-eabf1bc4ce93 - lastmod: 1641403394663 - - name: AbstractTile - depth: 0 - oncreate: |- - this.vertical = false; - this.dragging = false; - onstep: |- - // Cancel dragging on release, even if the event occured outside this tile - if (ct.actions.Press.released && this.dragging) { - this.dragging = false; - // Check if we need to snap to the grid. - if (this.x !== this.x % 64 || - this.y !== this.y % 64 - ) { - // Smoothly move to snap to the grid + lastmod: 1661094100423 + events: + - eventKey: collisionTemplate + code: |- + if (!this.victory) { + this.victory = true; + other.dragging = false; + other.locked = true; ct.tween.add({ - obj: this, + obj: other, fields: { - x: Math.round(this.x / 64) * 64, - y: Math.round(this.y / 64) * 64 + x: this.x, + y: this.y }, - duration: 250, + duration: 650, silent: true }); + ct.sound.spawn('Success'); + + // Fire an asynchronous task, will trigger in 1.5s + ct.u.wait(1500) + .then(() => { + ct.rooms.switch('PuzzleBlocks'); + }); } - } - // Start dragging when a user presses this tile - if (ct.actions.Press.pressed) { - if (ct.pointer.hovers(this)) { - this.dragging = true; - ct.sound.spawn('Wood_Start'); - // Record relative position to the mouse to avoid jittery snapping to tile's center - this.relativeX = ct.pointer.x - this.x; - this.relativeY = ct.pointer.y - this.y; - } - } + arguments: + template: bf3a489b-333c-4171-b5ca-5a8699dfc176 + lib: place + type: template + loopAnimation: true + - name: AbstractTile + depth: 0 + texture: -1 + extends: + cgroup: Solid + uid: 411a7b98-9916-4e4b-8466-abe66eb75e2e + lastmod: 1661094123639 + events: + - lib: core + arguments: {} + code: |- + this.vertical = false; + this.dragging = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + // Cancel dragging on release, even if the event occured outside this + tile - // Perform actual movement if dragging is in process - if (this.dragging) { + if (ct.actions.Press.released && this.dragging) { + this.dragging = false; + // Check if we need to snap to the grid. + if (this.x !== this.x % 64 || + this.y !== this.y % 64 + ) { + // Smoothly move to snap to the grid + ct.tween.add({ + obj: this, + fields: { + x: Math.round(this.x / 64) * 64, + y: Math.round(this.y / 64) * 64 + }, + duration: 250, + silent: true + }); + } + } - // We will record whether a tile touched other objects here - var collisionResult; + // Start dragging when a user presses this tile - // For vertical tiles… - if (this.vertical) { - var targetY = ct.pointer.y - this.relativeY; - // We need ct.place.moveByAxes to prevent tiles from teleporting over other objects, - // and also to provide pixel-perfect collisions. - collisionResult = ct.place.moveByAxes(this, 0, targetY - this.y, 'Solid'); - } - // For horizontal tiles… - if (!this.vertical) { - var targetX = ct.pointer.x - this.relativeX; - collisionResult = ct.place.moveByAxes(this, targetX - this.x, 0, 'Solid'); + if (ct.actions.Press.pressed) { + if (ct.pointer.hovers(this)) { + this.dragging = true; + ct.sound.spawn('Wood_Start'); + // Record relative position to the mouse to avoid jittery snapping to tile's center + this.relativeX = ct.pointer.x - this.x; + this.relativeY = ct.pointer.y - this.y; + } } - // Check whether we collided with something - // recording the previous collider - // to play sounds on impact. - if (collisionResult) { + + + // Perform actual movement if dragging is in process + + if (this.dragging) { + + // We will record whether a tile touched other objects here + var collisionResult; + + // For vertical tiles… if (this.vertical) { - if (collisionResult.y) { - if (this.previousCollider !== collisionResult.y) { - ct.sound.spawn('Wood_End'); - this.previousCollider = collisionResult.y; + var targetY = ct.pointer.y - this.relativeY; + // We need ct.place.moveByAxes to prevent tiles from teleporting over other objects, + // and also to provide pixel-perfect collisions. + collisionResult = ct.place.moveByAxes(this, 0, targetY - this.y, 'Solid'); + } + // For horizontal tiles… + if (!this.vertical) { + var targetX = ct.pointer.x - this.relativeX; + collisionResult = ct.place.moveByAxes(this, targetX - this.x, 0, 'Solid'); + } + // Check whether we collided with something + // recording the previous collider + // to play sounds on impact. + if (collisionResult) { + if (this.vertical) { + if (collisionResult.y) { + if (this.previousCollider !== collisionResult.y) { + ct.sound.spawn('Wood_End'); + this.previousCollider = collisionResult.y; + } } - } - } else { - if (collisionResult.x) { - if (this.previousCollider !== collisionResult.x) { - ct.sound.spawn('Wood_End'); - this.previousCollider = collisionResult.x; + } else { + if (collisionResult.x) { + if (this.previousCollider !== collisionResult.x) { + ct.sound.spawn('Wood_End'); + this.previousCollider = collisionResult.x; + } } } + } else { + this.previousCollider = false; } - } else { - this.previousCollider = false; } - } - ondraw: '' - ondestroy: '' - texture: -1 - extends: - cgroup: Solid - uid: 411a7b98-9916-4e4b-8466-abe66eb75e2e - lastmod: 1641403301665 + eventKey: OnStep + type: template + loopAnimation: true - name: Pipe_H2 depth: 0 - oncreate: this.inherit.onCreate(); - onstep: this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: 5084d2e9-a66e-4e22-9828-ee936473cbfc extends: inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e cgroup: Solid uid: b96007c1-e46d-4ae9-b809-3d49ef2f22b4 - lastmod: 1602213425483 + lastmod: 1661094109302 + events: + - lib: core + arguments: {} + code: this.inherit.onCreate(); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true - name: Pipe_H3 depth: 0 - oncreate: this.inherit.onCreate(); - onstep: this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: 614ef931-af6d-4da3-8147-6fb3c0457dac extends: inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e cgroup: Solid uid: d5a61d71-f85f-4287-9269-ce2fbc7206e1 lastmod: 1602199753219 + events: + - lib: core + arguments: {} + code: this.inherit.onCreate(); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true - name: Pipe_H4 depth: 0 - oncreate: this.inherit.onCreate(); - onstep: this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: fe8ec368-af9d-4351-917e-b0527c7470c4 extends: inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e cgroup: Solid uid: 245b4e21-93e1-41dd-839e-546810d68a23 lastmod: 1602199754611 + events: + - lib: core + arguments: {} + code: this.inherit.onCreate(); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true - name: Pipe_V2 depth: 0 - oncreate: |- - this.inherit.onCreate(); - this.vertical = true; - onstep: this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: 84deaf6c-1e30-46ab-9770-ad7f20c54158 extends: inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e cgroup: Solid uid: d8b121c6-2f4f-4427-ac7d-7f2b7e7e625d lastmod: 1602199756147 + events: + - lib: core + arguments: {} + code: |- + this.inherit.onCreate(); + this.vertical = true; + eventKey: OnCreate + - lib: core + arguments: {} + code: this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true - name: Pipe_V3 depth: 0 - oncreate: |- - this.inherit.onCreate(); - this.vertical = true; - onstep: this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: 7e9843af-2842-414b-9063-14c08f547c6b extends: inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e cgroup: Solid uid: da879283-739b-4a62-850d-760d00789463 - lastmod: 1602199765123 + lastmod: 1661094116365 + events: + - lib: core + arguments: {} + code: |- + this.inherit.onCreate(); + this.vertical = true; + eventKey: OnCreate + - lib: core + arguments: {} + code: this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true - name: Pipe_V4 depth: 0 - oncreate: |- - this.inherit.onCreate(); - this.vertical = true; - onstep: this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: 2f19f39b-25bb-43cd-ab03-108bd9418695 extends: inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e cgroup: Solid uid: 6ac451bc-3183-44c7-9872-ac72cc5d4e79 lastmod: 1602199759771 + events: + - lib: core + arguments: {} + code: |- + this.inherit.onCreate(); + this.vertical = true; + eventKey: OnCreate + - lib: core + arguments: {} + code: this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true - name: KeyTile depth: 0 - oncreate: this.inherit.onCreate(); - onstep: |- - if (this.locked) { - // Prevent execution when the tile is locked - // (when the victory animation starts playing) - return; - } - this.inherit.onStep(); - ondraw: '' - ondestroy: '' texture: 25177c05-61f8-491f-be4f-c82bc90ed58c extends: cgroup: Solid inheritedTemplate@@template: 411a7b98-9916-4e4b-8466-abe66eb75e2e uid: bf3a489b-333c-4171-b5ca-5a8699dfc176 - lastmod: 1648092462572 + lastmod: 1661094132967 + events: + - lib: core + arguments: {} + code: this.inherit.onCreate(); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.locked) { + // Prevent execution when the tile is locked + // (when the victory animation starts playing) + return; + } + this.inherit.onStep(); + eventKey: OnStep + type: template + loopAnimation: true sounds: - name: Wood_Start uid: 42e768ce-6c19-4c34-9f14-11e257ecff18 @@ -496,425 +561,1701 @@ rooms: copies: - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 933bd8f5-8e3f-44d4-9060-eabf1bc4ce93 + exts: {} + customProperties: {} - x: 384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf3a489b-333c-4171-b5ca-5a8699dfc176 + exts: {} + customProperties: {} - x: 448 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: d8b121c6-2f4f-4427-ac7d-7f2b7e7e625d + exts: {} + customProperties: {} - x: 320 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: d8b121c6-2f4f-4427-ac7d-7f2b7e7e625d + exts: {} + customProperties: {} - x: 576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: d5a61d71-f85f-4287-9269-ce2fbc7206e1 + exts: {} + customProperties: {} - x: 640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b96007c1-e46d-4ae9-b809-3d49ef2f22b4 + exts: {} + customProperties: {} - x: 640 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b96007c1-e46d-4ae9-b809-3d49ef2f22b4 + exts: {} + customProperties: {} - x: 768 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b96007c1-e46d-4ae9-b809-3d49ef2f22b4 + exts: {} + customProperties: {} - x: 576 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: d8b121c6-2f4f-4427-ac7d-7f2b7e7e625d + exts: {} + customProperties: {} - x: 960 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: da879283-739b-4a62-850d-760d00789463 + exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: da879283-739b-4a62-850d-760d00789463 + exts: {} + customProperties: {} - x: 1024 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 245b4e21-93e1-41dd-839e-546810d68a23 + exts: {} + customProperties: {} - x: 1216 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: da879283-739b-4a62-850d-760d00789463 + exts: {} + customProperties: {} - x: 1088 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: d8b121c6-2f4f-4427-ac7d-7f2b7e7e625d + exts: {} + customProperties: {} tiles: - depth: -10 tiles: - x: 128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 21 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 0 - - 2 - - 2 - x: 128 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 80 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 100 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 81 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 101 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 84 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 4 - - 2 - - 2 - x: 1280 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 104 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 85 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 105 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 4 - - 2 - - 2 - x: 1280 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 80 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 0 - - 2 - - 2 - x: 1280 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 100 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 81 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 101 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 4 - - 2 - - 2 - x: 1280 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 21 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 44 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 64 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 84 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 0 - - 2 - - 2 - x: 1664 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 104 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1728 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1728 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1728 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 45 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1728 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 65 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1728 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 85 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1728 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 105 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 384 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 0 - - 2 - - 6 - x: 384 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 448 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 448 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 512 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 512 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 576 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 576 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 640 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 640 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 704 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 704 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 768 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 768 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 832 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 832 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 896 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 896 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 960 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 960 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1024 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 1024 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1088 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1088 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 384 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 384 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 448 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 448 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 512 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 512 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 576 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 576 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 640 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 640 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 704 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 704 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 768 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 768 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 832 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 832 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 896 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 896 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 960 + 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 960 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1024 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 1024 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1088 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1088 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 256 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 256 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 0 - - 1 - - 2 - x: 1408 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1408 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 0 - - 1 - - 2 - x: 256 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 82 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 256 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 102 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 4 - - 1 - - 2 - x: 128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 40 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 41 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 2 - - 2 - - 1 - x: 128 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 60 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 61 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 3 - - 2 - - 1 - x: 1280 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 60 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 61 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 3 - - 2 - - 1 - x: 1280 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 44 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 45 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 2 - - 2 - - 1 - x: 1216 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 23 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 0 - - 1 - - 2 - x: 1216 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 83 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 103 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 4 - - 1 - - 2 - x: 1280 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 40 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 41 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 2 - - 2 - - 1 - x: 1408 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 42 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 2 - - 1 - - 1 - x: 1408 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 62 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 3 - - 1 - - 1 - x: 1408 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 82 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1408 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 102 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 4 - - 1 - - 2 - x: 1472 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1472 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1536 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1536 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 1472 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1472 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1536 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1536 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 320 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 320 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 1152 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1152 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 1152 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1152 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 320 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 320 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 128 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 128 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 128 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 1280 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 1280 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 64 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 65 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 3 - - 2 - - 1 - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 23 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 0 - - 1 - - 2 - x: 1600 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 83 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 103 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 4 - - 1 - - 2 extends: cgroup: Solid hidden: false @@ -922,52 +2263,64 @@ rooms: tiles: - x: 1216 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 27 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 1 - - 1 - - 1 - x: 1216 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 87 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 4 - - 1 - - 1 - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 87 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 4 - - 1 - - 1 - x: 1600 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 27 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 1 - - 1 - - 1 - x: 256 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 90 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 10 - - 4 - - 1 - - 1 - x: 256 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 30 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 10 - - 1 - - 1 - - 1 extends: {} hidden: false uid: db143552-7289-41b0-af65-62f14320e2c3 @@ -976,7 +2329,11 @@ rooms: gridX: 64 gridY: 64 backgroundColor: '#461212' - lastmod: 1602729638788 + lastmod: 1661071797306 + events: [] + type: room + simulate: true + isUi: false - name: PuzzleBlocks_Simple oncreate: '' onstep: '' @@ -988,398 +2345,1602 @@ rooms: copies: - x: 1472 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 933bd8f5-8e3f-44d4-9060-eabf1bc4ce93 + exts: {} + customProperties: {} - x: 320 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf3a489b-333c-4171-b5ca-5a8699dfc176 + exts: {} + customProperties: {} - x: 704 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b96007c1-e46d-4ae9-b809-3d49ef2f22b4 + exts: {} + customProperties: {} - x: 768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: da879283-739b-4a62-850d-760d00789463 + exts: {} + customProperties: {} - x: 960 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 245b4e21-93e1-41dd-839e-546810d68a23 + exts: {} + customProperties: {} tiles: - depth: -10 tiles: - x: 64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 21 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 0 - - 2 - - 2 - x: 64 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 80 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 100 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 81 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 101 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 4 - - 2 - - 2 - x: 1216 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 84 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 4 - - 2 - - 2 - x: 1216 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 104 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 85 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 105 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 0 - - 2 - - 2 - x: 1216 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 80 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 100 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 81 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 101 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 4 - - 2 - - 2 - x: 1216 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 20 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 1 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 21 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 0 - - 2 - - 2 - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 24 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 44 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 64 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 84 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1600 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 104 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 25 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 45 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 65 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 85 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1664 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 105 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 320 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 0 - - 2 - - 6 - x: 320 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 384 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 384 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 448 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 448 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 512 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 512 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 576 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 576 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 640 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 640 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 704 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 704 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 768 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 768 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 832 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 832 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 896 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 896 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 960 + 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 960 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1024 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1024 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 320 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 320 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 384 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 384 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 448 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 448 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 512 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 512 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 576 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 576 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 640 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 640 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 704 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 704 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 768 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 768 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 832 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 832 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 896 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 896 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 960 + 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 960 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1024 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1024 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 0 - - 1 - - 2 - x: 1344 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 22 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 0 - - 1 - - 2 - x: 192 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 82 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 192 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 102 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 4 - - 1 - - 2 - x: 64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 40 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 41 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 2 - - 2 - - 1 - x: 64 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 60 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 61 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 3 - - 2 - - 1 - x: 1216 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 60 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 61 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 3 - - 2 - - 1 - x: 1216 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 44 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 45 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 2 - - 2 - - 1 - x: 1152 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1152 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 23 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 0 - - 1 - - 2 - x: 1152 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 83 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1152 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 103 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 4 - - 1 - - 2 - x: 1216 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 40 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 41 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 0 - - 2 - - 2 - - 1 - x: 1344 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 42 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 2 - - 1 - - 1 - x: 1344 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 62 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 3 - - 1 - - 1 - x: 1344 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 82 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1344 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 102 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 2 - - 4 - - 1 - - 2 - x: 1408 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 1408 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1472 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1472 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1408 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1408 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1472 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 17 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1472 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 37 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 2 - - 2 - x: 256 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 256 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 1088 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1088 + 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 1088 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1088 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 256 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 16 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 256 + 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 36 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 16 - - 0 - - 1 - - 2 - x: 64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 64 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 64 + 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 128 + 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 1216 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 52 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1216 + 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 72 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 53 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 73 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 12 - - 2 - - 2 - - 2 - x: 1216 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 64 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1280 + 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 65 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 4 - - 3 - - 2 - - 1 - x: 1536 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1536 + 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 23 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 0 - - 1 - - 2 - x: 1536 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 83 + rotation: 0 + texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b + - x: 1536 + 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 103 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 3 - - 4 - - 1 - - 2 extends: cgroup: Solid hidden: false @@ -1387,52 +3948,64 @@ rooms: tiles: - x: 1152 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 27 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 1 - - 1 - - 1 - x: 1152 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 87 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 4 - - 1 - - 1 - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 87 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 4 - - 1 - - 1 - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 27 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 7 - - 1 - - 1 - - 1 - x: 192 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 90 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 10 - - 4 - - 1 - - 1 - x: 192 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 30 + rotation: 0 texture: 028aa481-64ef-4b75-85b8-2f9c88eecf4b - grid: - - 10 - - 1 - - 1 - - 1 extends: {} hidden: false uid: 85ee48e4-eb33-428b-8132-b1dbec7a36a6 @@ -1441,7 +4014,11 @@ rooms: gridX: 64 gridY: 64 backgroundColor: '#461212' - lastmod: 1602213024409 + lastmod: 1661071793507 + events: [] + type: room + simulate: true + isUi: false actions: - name: Press methods: diff --git a/src/examples/MoveBlocks/img/r62f14320e2c3.png b/src/examples/MoveBlocks/img/r62f14320e2c3.png deleted file mode 100644 index 339de67ce..000000000 Binary files a/src/examples/MoveBlocks/img/r62f14320e2c3.png and /dev/null differ diff --git a/src/examples/MoveBlocks/img/r85ee48e4-eb33-428b-8132-b1dbec7a36a6.png b/src/examples/MoveBlocks/img/r85ee48e4-eb33-428b-8132-b1dbec7a36a6.png new file mode 100644 index 000000000..bb03a6749 Binary files /dev/null and b/src/examples/MoveBlocks/img/r85ee48e4-eb33-428b-8132-b1dbec7a36a6.png differ diff --git a/src/examples/MoveBlocks/img/r85ee48e4-eb33-428b-8132-b1dbec7a36a6@r.png b/src/examples/MoveBlocks/img/r85ee48e4-eb33-428b-8132-b1dbec7a36a6@r.png new file mode 100644 index 000000000..528db70c3 Binary files /dev/null and b/src/examples/MoveBlocks/img/r85ee48e4-eb33-428b-8132-b1dbec7a36a6@r.png differ diff --git a/src/examples/MoveBlocks/img/rb1dbec7a36a6.png b/src/examples/MoveBlocks/img/rb1dbec7a36a6.png deleted file mode 100644 index 8ffdfd4c4..000000000 Binary files a/src/examples/MoveBlocks/img/rb1dbec7a36a6.png and /dev/null differ diff --git a/src/examples/MoveBlocks/img/rdb143552-7289-41b0-af65-62f14320e2c3.png b/src/examples/MoveBlocks/img/rdb143552-7289-41b0-af65-62f14320e2c3.png new file mode 100644 index 000000000..872952fbf Binary files /dev/null and b/src/examples/MoveBlocks/img/rdb143552-7289-41b0-af65-62f14320e2c3.png differ diff --git a/src/examples/MoveBlocks/img/rdb143552-7289-41b0-af65-62f14320e2c3@r.png b/src/examples/MoveBlocks/img/rdb143552-7289-41b0-af65-62f14320e2c3@r.png new file mode 100644 index 000000000..2cabe1525 Binary files /dev/null and b/src/examples/MoveBlocks/img/rdb143552-7289-41b0-af65-62f14320e2c3@r.png differ diff --git a/src/examples/MoveBlocks/img/splash.png b/src/examples/MoveBlocks/img/splash.png index 339de67ce..2cabe1525 100644 Binary files a/src/examples/MoveBlocks/img/splash.png and b/src/examples/MoveBlocks/img/splash.png differ diff --git a/src/examples/Platformer_tutorial.ict b/src/examples/Platformer_tutorial.ict index ac8f032fa..e3177791a 100644 --- a/src/examples/Platformer_tutorial.ict +++ b/src/examples/Platformer_tutorial.ict @@ -1,4 +1,4 @@ -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 notes: /* empty */ libs: place: @@ -12,201 +12,215 @@ libs: templates: - name: Robot depth: 0 - oncreate: |- - this.jumpSpeed = -10; - this.gravity = 0.5; + uid: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 + lastmod: 1661092471401 + extends: + cgroup: Robot + texture: 6deb1d77-24d2-48d6-82ec-045dcbd9eea5 + events: + - lib: core + arguments: {} + code: |- + this.jumpSpeed = -10; + this.gravity = 0.5; - this.hspeed = 0; // Horizontal speed - this.vspeed = 0; // Vertical speed + this.hspeed = 0; // Horizontal speed + this.vspeed = 0; // Vertical speed - ct.camera.follow = this; - ct.camera.borderX = 450; - ct.camera.borderY = 200; + ct.camera.follow = this; + ct.camera.borderX = 450; + ct.camera.borderY = 200; - this.savedX = this.x; - this.savedY = this.y; + this.savedX = this.x; + this.savedY = this.y; - this.animationSpeed = 0.2; - onstep: |- - this.maxspeed = 4; // Max horizontal speed + this.animationSpeed = 0.2; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.maxspeed = 4; // Max horizontal speed - if (ct.place.occupied(this, this.x, this.y, 'Deadly')) { - this.x = this.savedX; - this.y = this.savedY; - this.hspeed = 0; - this.vspeed = 0; - ct.room.lives --; - if (ct.room.lives <= 0) { - ct.rooms.switch(ct.room.name); + if (ct.actions.MoveLeft.down) { + this.hspeed = -this.maxspeed; + } else if (ct.actions.MoveRight.down) { + this.hspeed = this.maxspeed; + } else { + this.hspeed = 0; } - return; - } - - if (ct.actions.MoveLeft.down) { - this.hspeed = -this.maxspeed; - } else if (ct.actions.MoveRight.down) { - this.hspeed = this.maxspeed; - } else { - this.hspeed = 0; - } - if (this.hspeed !== 0) { - if (this.tex !== 'Robot_Walking') { - this.tex = 'Robot_Walking'; - this.play(); - } - if (this.hspeed > 0) { - this.scale.x = 1; + if (this.hspeed !== 0) { + if (this.tex !== 'Robot_Walking') { + this.tex = 'Robot_Walking'; + this.play(); + } + if (this.hspeed > 0) { + this.scale.x = 1; + } else { + this.scale.x = -1; + } } else { - this.scale.x = -1; + // Don't move horizontally if no input + this.tex = 'Robot_Idle'; } - } else { - // Don't move horizontally if no input - this.tex = 'Robot_Idle'; - } - // If there is ground underneath the Robot… - if (ct.place.occupied(this, this.x, this.y + 1, 'Solid')) { - // …and the W key or the spacebar is down… - if (ct.actions.Jump.down) { - // …then jump! - this.vspeed = this.jumpSpeed; + // If there is ground underneath the Robot… + if (ct.place.occupied(this, this.x, this.y + 1, 'Solid')) { + // …and the W key or the spacebar is down… + if (ct.actions.Jump.down) { + // …then jump! + this.vspeed = this.jumpSpeed; + } else { + // Reset our vspd. We don't want to be buried underground! + this.vspeed = 0; + } } else { - // Reset our vspd. We don't want to be buried underground! - this.vspeed = 0; + // Set jumping animation! + this.tex = 'Robot_Jump'; } - } else { - // Set jumping animation! - this.tex = 'Robot_Jump'; - } - this.moveContinuousByAxes('Solid'); - ondraw: '' - ondestroy: '' - uid: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 - lastmod: 1648092625385 - extends: - cgroup: Robot - texture: 6deb1d77-24d2-48d6-82ec-045dcbd9eea5 + this.moveContinuousByAxes('Solid'); + eventKey: OnStep + - eventKey: collisionCGroup + code: |- + this.x = this.savedX; + this.y = this.savedY; + this.hspeed = 0; + this.vspeed = 0; + ct.room.lives --; + if (ct.room.lives <= 0) { + ct.rooms.switch(ct.room.name); + } + arguments: + group: Deadly + lib: place + type: template + loopAnimation: true - name: Rocks depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 07e424c6-78c2-42c9-b720-df0af00ab44d lastmod: 1603946104269 extends: cgroup: Solid texture: 9a6d05c0-477d-47f6-85fe-6c0c8d813df3 + events: [] + type: template + loopAnimation: true - name: Rocks_Top depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e lastmod: 1603946095198 extends: cgroup: Solid texture: 05db3522-55d5-4358-bf09-5e9a6126ed95 + events: [] + type: template + loopAnimation: true - name: Rocks_Platform depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 lastmod: 1603946100973 extends: cgroup: Solid texture: 60688c59-ff1e-4550-8525-0fc28c4a3d77 + events: [] + type: template + loopAnimation: true - name: Spikes depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 - lastmod: 1603946109293 + lastmod: 1661092575985 extends: cgroup: Deadly texture: 699ff925-9b32-403f-a292-68ea10034788 + events: [] + type: template + loopAnimation: true - name: Water depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 - lastmod: 1547538627465 + lastmod: 1661092580209 extends: cgroup: Deadly texture: 9fdb39bb-1685-4ca2-b750-ccb15ca765d2 + events: [] + type: template + loopAnimation: true - name: Water_Top depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff - lastmod: 1641405907136 + lastmod: 1661092578169 extends: cgroup: Deadly texture: 5749074a-4d92-4aa7-bbde-afb57f1ec4a0 + events: [] + type: template + loopAnimation: true - name: Checkpoint depth: 0 - oncreate: this.visible = false; - onstep: |- - var robot = ct.place.meet(this, this.x, this.y, 'Robot'); - if (robot) { - robot.savedX = this.x + 32; - robot.savedY = this.y + 32; - } - ondraw: '' - ondestroy: '' uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b - lastmod: 1542089948687 - extends: {} + lastmod: 1661092572506 + extends: + visible: false texture: e15a4451-c77c-4347-a99f-436731aff19d + events: + - eventKey: collisionTemplate + code: |- + other.savedX = this.x + 32; + other.savedY = this.y + 32; + arguments: + template: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 + lib: place + type: template + loopAnimation: true - name: Exit depth: 0 - oncreate: '' - onstep: |- - // Are there next rooms defined? - if (ct.room.nextRoom) { - // Do we collide with the Robot? - if (ct.place.meet(this, this.x, this.y, 'Robot')) { - // Switch to the next room - ct.rooms.switch(ct.room.nextRoom); - } - } - ondraw: '' - ondestroy: '' uid: 0fd7f61f-2f06-47e2-b9e3-2782fcd02415 - lastmod: 1603946112389 + lastmod: 1661092460081 extends: {} texture: e086f16a-24fd-4f73-b44a-e3e22766ca62 + events: + - eventKey: collisionTemplate + code: |- + // Are there next rooms defined? + if (ct.room.nextRoom) { + // Switch to the next room + ct.rooms.switch(ct.room.nextRoom); + } + arguments: + template: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 + lib: place + type: template + loopAnimation: true - name: GreenCrystal depth: 0 - oncreate: '' - onstep: |- - var col = ct.place.meet(this, 'Robot'); - if (col) { - ct.room.crystals ++; - this.kill = true; - } - ondraw: '' - ondestroy: 'ct.emitters.fire(''CrystalBurst'', this.x, this.y, {depth: 100});' uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 - lastmod: 1603946106470 + lastmod: 1661092480090 extends: {} texture: f39895d1-731d-4487-9d01-18841158729c + events: + - lib: core + arguments: {} + code: 'ct.emitters.fire(''CrystalBurst'', this.x, this.y, {depth: 100});' + eventKey: OnDestroy + - eventKey: collisionTemplate + code: |- + ct.room.crystals++; + this.kill = true; + arguments: + template: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 + lib: place + type: template + loopAnimation: true - name: Heart depth: 0 - oncreate: '' - onstep: |- - if (ct.place.meet(this, this.x, this.y, 'Robot')) { + uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 + lastmod: 1661092475529 + extends: {} + texture: 334d338b-4fe4-4168-901e-2315494d37d4 + events: + - eventKey: collisionTemplate + code: |- if (ct.room.lives < 3) { ct.room.lives++; this.kill = true; @@ -217,79 +231,103 @@ templates: } }); } - } - ondraw: '' - ondestroy: '' - uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 - lastmod: 1583369824650 - extends: {} - texture: 334d338b-4fe4-4168-901e-2315494d37d4 + arguments: + template: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 + lib: place + type: template + loopAnimation: true - name: Platform depth: 0 - oncreate: this.speed = 2; - onstep: >- - var robot = ct.place.meet(this, this.x, this.y, 'Robot'); + uid: 1ae52dda-689d-4780-97ce-c87886fb581a + lastmod: 1661092632769 + extends: + cgroup: Solid + texture: 3f19a8ef-4dba-4550-b516-0bcaca131ba6 + events: + - lib: core + arguments: {} + code: this.speed = 2; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + var robot = ct.place.meet(this, this.x, this.y, 'Robot'); - if (robot) { - this.cgroup = undefined; - } else { - this.cgroup = 'Solid'; - robot = ct.place.occupied(this, this.x, this.y - 1, 'Robot'); if (robot) { - robot.x += this.hspeed * ct.delta; + this.cgroup = undefined; + } else { + this.cgroup = 'Solid'; + robot = ct.place.occupied(this, this.x, this.y - 1, 'Robot'); + if (robot) { + robot.x += this.hspeed * ct.delta; + } } - } - if (ct.place.occupied(this, this.x + this.hspeed * ct.delta, this.y, - 'Solid')) { - // Flip direction - this.direction += 180; - } + if (ct.place.occupied(this, this.x + this.hspeed * ct.delta, this.y, + 'Solid')) { + // Flip direction + this.direction += 180; + } - this.move(); - ondraw: '' - ondestroy: '' - uid: 1ae52dda-689d-4780-97ce-c87886fb581a - lastmod: 1551435993986 - extends: - cgroup: Solid - texture: 3f19a8ef-4dba-4550-b516-0bcaca131ba6 + this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: CrystalsWidget depth: 0 - oncreate: >- - this.text = new PIXI.Text(`0 / ${ct.room.crystalsTotal}`, - ct.styles.get('CrystalCounter')); + uid: d582eca9-7676-4764-8aa6-9b10895a9b73 + lastmod: 1661092082009 + extends: {} + texture: f39895d1-731d-4487-9d01-18841158729c + events: + - lib: core + arguments: {} + code: >- + this.text = new PIXI.Text(`0 / ${ct.room.crystalsTotal}`, + ct.styles.get('CrystalCounter')); - this.text.x = 32; + this.text.x = 32; - this.text.anchor.y = 0.5; + this.text.anchor.y = 0.5; - this.addChild(this.text); - onstep: '' - ondraw: 'this.text.text = `${ct.room.crystals} / ${ct.room.crystalsTotal}`;' - ondestroy: '' - uid: d582eca9-7676-4764-8aa6-9b10895a9b73 - lastmod: 1581893025019 - extends: {} - texture: f39895d1-731d-4487-9d01-18841158729c + this.addChild(this.text); + eventKey: OnCreate + - lib: core + arguments: {} + code: 'this.text.text = `${ct.room.crystals} / ${ct.room.crystalsTotal}`;' + eventKey: OnDraw + type: template + loopAnimation: true - name: HeartsWidget depth: 0 - oncreate: |- - this.text = new PIXI.Text(ct.room.lives, ct.styles.get('HeartCounter')); - this.text.x = -32; - this.text.anchor.y = 0.5; - this.text.anchor.x = 1; - - this.addChild(this.text); - onstep: '' - ondraw: this.text.text = ct.room.lives; - ondestroy: '' uid: 3dc14b8e-592f-45a3-9785-52da1b6dbeb8 lastmod: 1581890219234 extends: {} texture: 334d338b-4fe4-4168-901e-2315494d37d4 + events: + - lib: core + arguments: {} + code: >- + this.text = new PIXI.Text(ct.room.lives, + ct.styles.get('HeartCounter')); + + this.text.x = -32; + + this.text.anchor.y = 0.5; + + this.text.anchor.x = 1; + + + this.addChild(this.text); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.text.text = ct.room.lives; + eventKey: OnDraw + type: template + loopAnimation: true sounds: [] styles: - name: CrystalCounter @@ -331,4784 +369,13081 @@ styles: weight: 5 rooms: - name: Level_01 - oncreate: |- - this.nextRoom = 'Level_02'; - inGameRoomStart(this); onstep: '' ondraw: '' onleave: '' width: 1024 height: 576 backgrounds: - - depth: '-10' + - depth: -10 texture: 92d2ca65-d3a1-45c9-bbd5-5674c6596f98 - extends: {} + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: 184045cc-2e0e-47be-8a20-411cb6f9c751 thumbnail: 411cb6f9c751 tiles: - depth: -10 tiles: [] extends: {} + hidden: false gridX: 32 gridY: 32 - lastmod: 1582773512370 + lastmod: 1661071971644 copies: - x: 0 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 960 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 768 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 960 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1024 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1152 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1344 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1408 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1536 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1600 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1600 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1664 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1664 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1024 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 exts: {} + customProperties: {} - x: 128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -192 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1536 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 0fd7f61f-2f06-47e2-b9e3-2782fcd02415 exts: {} + customProperties: {} - x: 928 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 992 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 704 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 416 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1504 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 exts: {} + customProperties: {} - x: 1280 'y': 192 - uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e - exts: {} + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e + exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: |- + this.nextRoom = 'Level_02'; + inGameRoomStart(this); + eventKey: OnRoomStart + type: room + simulate: true + extends: {} + isUi: false - name: Level_02 - oncreate: |- - this.nextRoom = 'Level_03'; - inGameRoomStart(this); onstep: '' ondraw: '' onleave: '' width: 1024 height: 576 backgrounds: - - depth: '-10' + - depth: -10 texture: 92d2ca65-d3a1-45c9-bbd5-5674c6596f98 - extends: {} + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: c708ca2b-a3ed-4982-a641-9de251b14d06 thumbnail: 9de251b14d06 tiles: - depth: -10 tiles: [] extends: {} + hidden: false gridX: 32 gridY: 32 - lastmod: 1648092596630 + lastmod: 1661071980731 copies: - x: 320 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 exts: {} + customProperties: {} - x: 320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 256 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: -384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: -512 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: -320 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: -128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 128 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: -640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -704 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -704 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -448 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -448 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -768 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -832 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -448 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -512 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -576 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -576 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: -576 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -512 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -448 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -384 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -320 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -256 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: -832 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -768 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -768 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -704 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -640 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -576 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -576 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -448 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -384 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -320 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -320 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -448 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -448 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -448 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -448 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -256 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -192 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 0 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 64 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 192 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 256 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 320 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 512 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 576 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 640 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 512 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 512 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 448 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 448 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 512 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 576 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 576 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 640 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 320 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 384 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: -512 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 768 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 960 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1024 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1152 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1216 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 832 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1280 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 768 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 960 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1024 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1152 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1408 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1536 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1600 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1280 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1216 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1088 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1024 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 960 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 832 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 960 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1024 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1152 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1280 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1344 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1408 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1408 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1536 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1536 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1280 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 1344 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 1216 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 832 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: -64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 0 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1024 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 0fd7f61f-2f06-47e2-b9e3-2782fcd02415 exts: {} + customProperties: {} - x: -672 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: -608 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: -640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1536 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1024 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1216 'y': 224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 128 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 192 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 exts: {} + customProperties: {} extends: {} + events: + - lib: core + arguments: {} + code: |- + this.nextRoom = 'Level_03'; + inGameRoomStart(this); + eventKey: OnRoomStart + type: room + simulate: true + isUi: false - name: Level_03 - oncreate: inGameRoomStart(this); onstep: '' ondraw: '' onleave: '' width: 1024 height: 576 backgrounds: - - depth: '-10' + - depth: -10 texture: 92d2ca65-d3a1-45c9-bbd5-5674c6596f98 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: ff1cd956-0c2f-403e-83be-1c4d6e821597 thumbnail: 1c4d6e821597 tiles: - depth: -10 tiles: [] extends: {} + hidden: false gridX: 32 gridY: 32 - lastmod: 1542090479263 + lastmod: 1661071975679 copies: - x: 384 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 exts: {} + customProperties: {} - x: 384 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 576 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 704 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 768 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 832 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 832 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 320 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 256 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 192 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 0 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -192 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -256 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -192 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -128 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 704 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 768 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1ae52dda-689d-4780-97ce-c87886fb581a exts: {} + customProperties: {} - x: 704 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1ae52dda-689d-4780-97ce-c87886fb581a exts: {} + customProperties: {} - x: -32 'y': 96 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 896 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1024 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 960 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 1024 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1024 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 960 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 992 'y': 288 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 exts: {} + customProperties: {} - x: -192 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -128 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 0 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 64 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 128 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 128 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 256 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 320 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 128 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 576 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 640 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 512 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 576 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 640 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 704 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 768 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 832 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 896 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 960 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1024 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1088 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1088 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 448 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1ae52dda-689d-4780-97ce-c87886fb581a exts: {} + customProperties: {} - x: 1408 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: -64 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 0fd7f61f-2f06-47e2-b9e3-2782fcd02415 exts: {} + customProperties: {} - x: 192 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1216 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1152 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1216 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1280 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1344 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1344 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 1408 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 832 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 960 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1024 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1152 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1280 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1344 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1344 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1408 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1472 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1408 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1664 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1728 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1280 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1344 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1344 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1536 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1600 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1600 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff exts: {} + customProperties: {} - x: 1088 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1280 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1344 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1344 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1536 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6 exts: {} + customProperties: {} - x: 1152 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1152 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1216 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1408 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1472 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1344 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1280 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1664 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1536 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1728 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1600 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1440 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 1184 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 1696 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 416 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: 1440 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: -256 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -320 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -384 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -448 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -512 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -512 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -448 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -384 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -320 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -320 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -448 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -448 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 0 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 256 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 320 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 384 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 448 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 512 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 576 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 704 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 768 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 896 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1920 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 2048 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 2112 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1920 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1728 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1664 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1600 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1536 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: 1792 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1856 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1920 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1984 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2048 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2112 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2176 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2176 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2240 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2304 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2560 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2560 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1792 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1856 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1920 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1984 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2048 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2112 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2176 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2240 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2304 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1792 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1856 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1920 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1984 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2048 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2112 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2176 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2240 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2304 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2368 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2432 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2496 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2368 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 2368 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2624 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2688 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2752 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2688 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2752 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2752 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2752 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2752 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2752 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2752 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1792 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1856 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1920 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1984 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2048 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2112 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2176 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2240 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2304 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2368 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2432 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2496 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2624 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2688 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1792 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1856 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1920 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1984 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2048 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2112 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2176 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2240 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2304 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2368 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2432 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2496 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2560 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 1952 'y': -160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} - x: 1632 'y': -224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 exts: {} + customProperties: {} - x: 480 'y': -224 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9 exts: {} + customProperties: {} - x: 1280 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1ae52dda-689d-4780-97ce-c87886fb581a exts: {} + customProperties: {} - x: -256 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bf44c3c8-a683-43cd-8925-c5b7e771e152 exts: {} + customProperties: {} - x: -224 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b exts: {} + customProperties: {} - x: -576 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -640 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -704 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -704 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -640 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -576 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: -576 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -512 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -704 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -704 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: -640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2496 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2432 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 2496 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 07e424c6-78c2-42c9-b720-df0af00ab44d exts: {} + customProperties: {} - x: 2432 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: cfa730fa-a010-44af-8e02-d5ad0c86f224 exts: {} + customProperties: {} - x: 2528 'y': 160 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1 exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: inGameRoomStart(this); + eventKey: OnRoomStart + type: room + simulate: true + extends: {} + isUi: false - name: LayerUI oncreate: '' onstep: '' @@ -5120,22 +13455,41 @@ rooms: copies: - x: 32 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: d582eca9-7676-4764-8aa6-9b10895a9b73 exts: {} + customProperties: {} - x: 992 'y': 32 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 3dc14b8e-592f-45a3-9785-52da1b6dbeb8 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 7b8300ef-bde1-4275-a69c-9c07bdb91f3c thumbnail: 9c07bdb91f3c gridX: 32 gridY: 32 - lastmod: 1648092586494 + lastmod: 1661071969082 extends: {} + events: [] + type: room + simulate: true + isUi: false - name: TestLevel oncreate: '' onstep: '' @@ -5146,129 +13500,339 @@ rooms: backgrounds: - depth: -100 texture: 92d2ca65-d3a1-45c9-bbd5-5674c6596f98 - extends: {} + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat copies: - x: 256 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 320 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 448 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 512 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 576 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 704 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 768 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 896 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 960 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 960 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 384 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 2d07d12b-9798-418c-a420-3a1ef4dc3ae2 exts: {} + customProperties: {} - x: 1024 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1088 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1152 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1216 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1280 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: -64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 0 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 128 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} - x: 192 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d thumbnail: f86ff9e2fc3d gridX: 64 gridY: 64 - lastmod: 1583370439905 + lastmod: 1661071977474 + events: [] + type: room + simulate: true + extends: {} + isUi: false starting: 0 settings: export: @@ -5786,6 +14350,7 @@ emitterTandems: minimumSpeedMultiplier: 0.01 minimumScaleMultiplier: 0.02 uid: 5ea79e92-86ea-4aed-a6f5-2b52fafbe80e + uid: pt0b25c7d9f754 - name: Trail origname: pte4297523502e emitters: @@ -5866,6 +14431,7 @@ emitterTandems: minimumScaleMultiplier: 0.44 minimumSpeedMultiplier: 0.72 uid: d3a98cd7-b923-4c79-8092-96c5396b8641 + uid: pte4297523502e contentTypes: [] groups: fonts: [] diff --git a/src/examples/Platformer_tutorial/img/r0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d.png b/src/examples/Platformer_tutorial/img/r0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d.png new file mode 100644 index 000000000..f85274216 Binary files /dev/null and b/src/examples/Platformer_tutorial/img/r0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d.png differ diff --git a/src/examples/Platformer_tutorial/img/r0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d@r.png b/src/examples/Platformer_tutorial/img/r0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d@r.png new file mode 100644 index 000000000..ca1bea0ea Binary files /dev/null and b/src/examples/Platformer_tutorial/img/r0ffb39a3-4f03-4c9a-b9ee-f86ff9e2fc3d@r.png differ diff --git a/src/examples/Platformer_tutorial/img/r184045cc-2e0e-47be-8a20-411cb6f9c751.png b/src/examples/Platformer_tutorial/img/r184045cc-2e0e-47be-8a20-411cb6f9c751.png new file mode 100644 index 000000000..5df047e0c Binary files /dev/null and b/src/examples/Platformer_tutorial/img/r184045cc-2e0e-47be-8a20-411cb6f9c751.png differ diff --git a/src/examples/Platformer_tutorial/img/r184045cc-2e0e-47be-8a20-411cb6f9c751@r.png b/src/examples/Platformer_tutorial/img/r184045cc-2e0e-47be-8a20-411cb6f9c751@r.png new file mode 100644 index 000000000..d4238ab15 Binary files /dev/null and b/src/examples/Platformer_tutorial/img/r184045cc-2e0e-47be-8a20-411cb6f9c751@r.png differ diff --git a/src/examples/Platformer_tutorial/img/r1c4d6e821597.png b/src/examples/Platformer_tutorial/img/r1c4d6e821597.png deleted file mode 100644 index 28b72de8f..000000000 Binary files a/src/examples/Platformer_tutorial/img/r1c4d6e821597.png and /dev/null differ diff --git a/src/examples/Platformer_tutorial/img/r411cb6f9c751.png b/src/examples/Platformer_tutorial/img/r411cb6f9c751.png deleted file mode 100644 index 815192be6..000000000 Binary files a/src/examples/Platformer_tutorial/img/r411cb6f9c751.png and /dev/null differ diff --git a/src/examples/Platformer_tutorial/img/r7b8300ef-bde1-4275-a69c-9c07bdb91f3c.png b/src/examples/Platformer_tutorial/img/r7b8300ef-bde1-4275-a69c-9c07bdb91f3c.png new file mode 100644 index 000000000..6cc8c5776 Binary files /dev/null and b/src/examples/Platformer_tutorial/img/r7b8300ef-bde1-4275-a69c-9c07bdb91f3c.png differ diff --git a/src/examples/Platformer_tutorial/img/r7b8300ef-bde1-4275-a69c-9c07bdb91f3c@r.png b/src/examples/Platformer_tutorial/img/r7b8300ef-bde1-4275-a69c-9c07bdb91f3c@r.png new file mode 100644 index 000000000..279918fa1 Binary files /dev/null and b/src/examples/Platformer_tutorial/img/r7b8300ef-bde1-4275-a69c-9c07bdb91f3c@r.png differ diff --git a/src/examples/Platformer_tutorial/img/r9c07bdb91f3c.png b/src/examples/Platformer_tutorial/img/r9c07bdb91f3c.png deleted file mode 100644 index 2480a65b5..000000000 Binary files a/src/examples/Platformer_tutorial/img/r9c07bdb91f3c.png and /dev/null differ diff --git a/src/examples/Platformer_tutorial/img/r9de251b14d06.png b/src/examples/Platformer_tutorial/img/r9de251b14d06.png deleted file mode 100644 index 5bdceebc0..000000000 Binary files a/src/examples/Platformer_tutorial/img/r9de251b14d06.png and /dev/null differ diff --git a/src/examples/Platformer_tutorial/img/rc708ca2b-a3ed-4982-a641-9de251b14d06.png b/src/examples/Platformer_tutorial/img/rc708ca2b-a3ed-4982-a641-9de251b14d06.png new file mode 100644 index 000000000..1070394c1 Binary files /dev/null and b/src/examples/Platformer_tutorial/img/rc708ca2b-a3ed-4982-a641-9de251b14d06.png differ diff --git a/src/examples/Platformer_tutorial/img/rc708ca2b-a3ed-4982-a641-9de251b14d06@r.png b/src/examples/Platformer_tutorial/img/rc708ca2b-a3ed-4982-a641-9de251b14d06@r.png new file mode 100644 index 000000000..d3ee9c58d Binary files /dev/null and b/src/examples/Platformer_tutorial/img/rc708ca2b-a3ed-4982-a641-9de251b14d06@r.png differ diff --git a/src/examples/Platformer_tutorial/img/rf86ff9e2fc3d.png b/src/examples/Platformer_tutorial/img/rf86ff9e2fc3d.png deleted file mode 100644 index 15f701497..000000000 Binary files a/src/examples/Platformer_tutorial/img/rf86ff9e2fc3d.png and /dev/null differ diff --git a/src/examples/Platformer_tutorial/img/rff1cd956-0c2f-403e-83be-1c4d6e821597.png b/src/examples/Platformer_tutorial/img/rff1cd956-0c2f-403e-83be-1c4d6e821597.png new file mode 100644 index 000000000..1749f30fa Binary files /dev/null and b/src/examples/Platformer_tutorial/img/rff1cd956-0c2f-403e-83be-1c4d6e821597.png differ diff --git a/src/examples/Platformer_tutorial/img/rff1cd956-0c2f-403e-83be-1c4d6e821597@r.png b/src/examples/Platformer_tutorial/img/rff1cd956-0c2f-403e-83be-1c4d6e821597@r.png new file mode 100644 index 000000000..01d2f43d3 Binary files /dev/null and b/src/examples/Platformer_tutorial/img/rff1cd956-0c2f-403e-83be-1c4d6e821597@r.png differ diff --git a/src/examples/Platformer_tutorial/img/splash.png b/src/examples/Platformer_tutorial/img/splash.png index 5bdceebc0..d3ee9c58d 100644 Binary files a/src/examples/Platformer_tutorial/img/splash.png and b/src/examples/Platformer_tutorial/img/splash.png differ diff --git a/src/examples/SpaceShooter_tutorial.ict b/src/examples/SpaceShooter_tutorial.ict index 59325ccb2..3f73cc1a7 100644 --- a/src/examples/SpaceShooter_tutorial.ict +++ b/src/examples/SpaceShooter_tutorial.ict @@ -12,50 +12,60 @@ libs: templates: - name: PlayerShip depth: 0 - oncreate: '' - onstep: >- - /** - * Move the ship - * See Settings > Edit actions panel - * and "Actions" in the docs. - */ - - this.x += 8 * ct.delta * ct.actions.MoveX.value; // Move by X axis - - this.y += 8 * ct.delta * ct.actions.MoveY.value; // Move by Y axis - - - /** - * Check whether the ship fell off the viewport - */ - if (this.x < 0) { // Have the ship crossed the left border? - this.x = 0; // Go back to the left border - } - - if (this.x > ct.camera.width) { // Have the ship crossed the right border? - this.x = ct.camera.width; // Go back to the right border - } - - if (this.y < ct.camera.height / 2) { // Have the ship crossed the middle - line? - this.y = ct.camera.height / 2; // Go back to the middle line - } - - if (this.y > ct.camera.height) { // Have the ship crossed the bottom - border? - this.y = ct.camera.height; // Go back to the bottom border - } + uid: f5832845-7841-408b-bae7-a72aaffcae6c + lastmod: 1661144793029 + extends: {} + texture: a82335b3-69b6-4de0-bec1-da2dea358142 + events: + - lib: core + arguments: {} + code: >- + /** + * Move the ship + * See Settings > Edit actions panel + * and "Actions" in the docs. + */ + + this.x += 8 * ct.delta * ct.actions.MoveX.value; // Move by X axis + + this.y += 8 * ct.delta * ct.actions.MoveY.value; // Move by Y axis + + + /** + * Check whether the ship fell off the viewport + */ + if (this.x < 0) { // Have the ship crossed the left border? + this.x = 0; // Go back to the left border + } + if (this.x > ct.camera.width) { // Have the ship crossed the right + border? + this.x = ct.camera.width; // Go back to the right border + } - if (ct.actions.Shoot.pressed) { - ct.templates.copy('Laser_Blue', this.x, this.y); - } + if (this.y < ct.camera.height / 2) { // Have the ship crossed the + middle line? + this.y = ct.camera.height / 2; // Go back to the middle line + } + if (this.y > ct.camera.height) { // Have the ship crossed the bottom + border? + this.y = ct.camera.height; // Go back to the bottom border + } - var hostile = ct.place.occupied(this, this.x, this.y, 'Hostile'); - if (hostile) { - hostile.kill = true; + this.move(); + eventKey: OnStep + - eventKey: OnActionPress + code: 'ct.templates.copy(''Laser_Blue'', this.x, this.y);' + arguments: + action: Shoot + lib: core + - eventKey: collisionCGroup + code: |- + if (ct.templates.isCopy(other)) { + other.kill = true; + } ct.room.lives --; if (ct.room.lives <= 0) { this.kill = true; @@ -63,141 +73,175 @@ templates: ct.rooms.switch('Main'); }, 1000); } - } - - - this.move(); - ondraw: '' - ondestroy: '' - uid: f5832845-7841-408b-bae7-a72aaffcae6c - lastmod: 1551276537484 - extends: {} - texture: a82335b3-69b6-4de0-bec1-da2dea358142 + arguments: + group: Hostile + lib: place + type: template + loopAnimation: true - name: Laser_Red depth: 0 - oncreate: |- - this.speed = 8; - this.direction = 90; - - this.angle = ct.random.deg(); - - this.cgroup = 'Hostile'; - onstep: |- - if (this.y > ct.height + 40) { - this.kill = true; - } - - this.move(); - - this.angle -= 10 * ct.delta; - ondraw: '' - ondestroy: '' uid: ebe33c0f-6f27-4123-ac8a-3029404dbc7a - lastmod: 1543239422636 - extends: {} + lastmod: 1661087422106 + extends: + cgroup: Hostile texture: 083c3d39-1a4a-44f2-9fae-e4043e45f28e + events: + - lib: core + arguments: {} + code: |- + this.speed = 8; + this.direction = 90; + + this.angle = ct.random.deg(); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.y > ct.height + 40) { + this.kill = true; + } + + this.move(); + + this.angle -= 4 * ct.delta; + eventKey: OnStep + type: template + loopAnimation: true - name: Laser_Blue depth: 0 - oncreate: |- - this.speed = 18; - this.direction = 270; - onstep: |- - if (this.y < -40) { - this.kill = true; - } - - this.move(); - ondraw: '' - ondestroy: '' uid: cd732ad2-d2ae-4745-b6d8-07a57a9d3a2e - lastmod: 1543238733913 + lastmod: 1661086545235 extends: {} texture: 3dde237d-ec51-4153-8b31-58279ece7c55 + events: + - lib: core + arguments: {} + code: |- + this.speed = 18; + this.direction = 270; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.y < -40) { + this.kill = true; + } + + this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: EnemyShip depth: 0 - oncreate: |- - this.speed = 3; - this.direction = 90; - - this.bulletTimer = 60; - this.cgroup = 'Hostile'; - onstep: |- - this.move(); - - if (this.y > ct.height + 80) { - this.kill = true; - } - - var collided = ct.place.meet(this, this.x, this.y, 'Laser_Blue'); - if (collided) { - collided.kill = true; + uid: 5d3e8a47-30e6-45b1-8b36-d445fdcb8e14 + lastmod: 1661144790128 + extends: + cgroup: Hostile + texture: feb33556-81c7-4794-a806-da5ddea5be81 + events: + - lib: core + arguments: {} + code: |- + this.speed = 3; + this.direction = 90; + + this.timer1 = 1; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.move(); + + if (this.y > ct.height + 80) { + this.kill = true; + } + eventKey: OnStep + - eventKey: collisionTemplate + code: |- + other.kill = true; this.kill = true; ct.room.score += 100; - } - - this.bulletTimer -= ct.delta; - if (this.bulletTimer <= 0) { - this.bulletTimer = 180; + arguments: + template: cd732ad2-d2ae-4745-b6d8-07a57a9d3a2e + lib: place + - eventKey: Timer1 + code: |- + this.timer1 = 3; ct.templates.copy('Laser_Red', this.x, this.y + 32); - } - ondraw: '' - ondestroy: '' - uid: 5d3e8a47-30e6-45b1-8b36-d445fdcb8e14 - lastmod: 1551001690335 - extends: {} - texture: feb33556-81c7-4794-a806-da5ddea5be81 + arguments: + isUi: false + name: Shoot + lib: core + type: template + loopAnimation: true - name: Asteroid_Medium depth: 0 - oncreate: |- - this.speed = ct.random.range(1, 3); - this.direction = ct.random.range(90 - 30, 90 + 30); - this.cgroup = 'Hostile'; - onstep: |- - this.move(); - - if (this.y > ct.height + 80) { - this.kill = true; - } - - var collided = ct.place.meet(this, this.x, this.y, 'Laser_Blue'); - if (collided) { - collided.kill = true; - this.kill = true; - ct.room.score += 10; - } - ondraw: '' - ondestroy: '' uid: f829b135-ac68-4193-9980-d367e90448a1 - lastmod: 1551001692415 - extends: {} + lastmod: 1661087393026 + extends: + cgroup: Hostile texture: aa5664f9-a2c3-47b2-8f0f-2dfead9c67c9 + events: + - lib: core + arguments: {} + code: |- + this.speed = ct.random.range(1, 3); + this.direction = ct.random.range(90 - 30, 90 + 30); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.move(); + + if (this.y > ct.height + 80) { + this.kill = true; + } + eventKey: OnStep + - eventKey: collisionTemplate + code: |- + other.kill = true; + this.kill = true; + ct.room.score += 10; + arguments: + template: cd732ad2-d2ae-4745-b6d8-07a57a9d3a2e + lib: place + type: template + loopAnimation: true - name: Asteroid_Big depth: 0 - oncreate: |- - this.speed = ct.random.range(1, 3); - this.direction = ct.random.range(90 - 30, 90 + 30); - this.cgroup = 'Hostile'; - onstep: |- - this.move(); - - if (this.y > ct.height + 80) { - this.kill = true; - } - - var collided = ct.place.meet(this, this.x, this.y, 'Laser_Blue'); - if (collided) { - collided.kill = true; + uid: 41fbc5fe-0f41-4151-b7bf-26acefce80ae + lastmod: 1661087395922 + extends: + cgroup: Hostile + texture: 4e5cb233-48f8-4f20-abaf-384f4551e1e9 + events: + - lib: core + arguments: {} + code: |- + this.speed = ct.random.range(1, 3); + this.direction = ct.random.range(90 - 30, 90 + 30); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.move(); + + if (this.y > ct.height + 80) { + this.kill = true; + } + eventKey: OnStep + - eventKey: collisionTemplate + code: |- + other.kill = true; this.kill = true; ct.templates.copy('Asteroid_Medium', this.x, this.y); ct.templates.copy('Asteroid_Medium', this.x, this.y); ct.room.score += 25; - } - ondraw: '' - ondestroy: '' - uid: 41fbc5fe-0f41-4151-b7bf-26acefce80ae - lastmod: 1551001837218 - extends: {} - texture: 4e5cb233-48f8-4f20-abaf-384f4551e1e9 + arguments: + template: cd732ad2-d2ae-4745-b6d8-07a57a9d3a2e + lib: place + type: template + loopAnimation: true sounds: [] styles: - name: ScoreText @@ -241,60 +285,24 @@ styles: weight: 4 rooms: - name: Main - oncreate: >- - this.asteroidTimer = 20; - - this.enemyTimer = 180; - - - this.score = 0; - - this.scoreLabel = new PIXI.Text('Score: ' + this.score, - ct.styles.get('ScoreText')); - - this.addChild(this.scoreLabel); - - this.scoreLabel.x = 30; - - this.scoreLabel.y = 30; - - - this.lives = 3; - - this.livesLabel = new PIXI.Text('Lives: ' + this.lives, - ct.styles.get('LivesText')); - - this.addChild(this.livesLabel); - - this.livesLabel.x = ct.width - 200; - - this.livesLabel.y = 30; - onstep: |- - this.asteroidTimer -= ct.delta; - if (this.asteroidTimer <= 0) { - this.asteroidTimer = ct.random.range(20, 200); - ct.templates.copy(ct.random.dice('Asteroid_Big', 'Asteroid_Medium'), ct.random(ct.camera.width), -100); - } - - this.enemyTimer -= ct.delta; - if (this.enemyTimer <= 0) { - this.enemyTimer = ct.random.range(180, 400); - ct.templates.copy('EnemyShip', ct.random(ct.camera.width), -100); - } - ondraw: |- - this.scoreLabel.text = 'Score: ' + this.score; - - this.livesLabel.text = 'Lives: ' + this.lives; onleave: '' width: 800 height: 800 backgrounds: - - depth: '-5' - extends: {} + - depth: -5 texture: 004e6497-a9f8-4a44-8b43-346ee79e6514 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.5 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: 8eced6ed-b52a-4344-8266-3fa909005671 grid: 80 - lastmod: 1530939493481 + lastmod: 1661144837164 thumbnail: 1 gridX: 80 gridY: 80 @@ -302,11 +310,83 @@ rooms: - depth: -10 tiles: [] extends: {} + hidden: false copies: - x: 400 'y': 720 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: f5832845-7841-408b-bae7-a72aaffcae6c exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: >- + this.timer1 = 0.3; // asteroid timer + + this.timer2 = 3; // enemy timer + + + this.score = 0; + + this.scoreLabel = new PIXI.Text('Score: ' + this.score, + ct.styles.get('ScoreText')); + + this.addChild(this.scoreLabel); + + this.scoreLabel.x = 30; + + this.scoreLabel.y = 30; + + + this.lives = 3; + + this.livesLabel = new PIXI.Text('Lives: ' + this.lives, + ct.styles.get('LivesText')); + + this.addChild(this.livesLabel); + + this.livesLabel.x = ct.width - 200; + + this.livesLabel.y = 30; + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + this.scoreLabel.text = 'Score: ' + this.score; + + this.livesLabel.text = 'Lives: ' + this.lives; + eventKey: OnDraw + - eventKey: Timer1 + code: >- + // asteroid timer + + this.timer1 = ct.random.range(0.3, 3); + + ct.templates.copy(ct.random.dice('Asteroid_Big', 'Asteroid_Medium'), + ct.random(ct.camera.width), -100); + arguments: + name: Asteroids + isUi: false + lib: core + - eventKey: Timer2 + code: |- + // enemy timer + this.timer2 = ct.random.range(3, 6); + ct.templates.copy('EnemyShip', ct.random(ct.camera.width), -100); + arguments: + isUi: false + name: Ships + lib: core + type: room + simulate: true + extends: {} + isUi: false soundtick: 0 roomtick: 1 templatetick: 6 @@ -342,7 +422,7 @@ settings: fps: 30 palette: [] startroom: 8eced6ed-b52a-4344-8266-3fa909005671 -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 scripts: [] fonts: [] skeletons: [] diff --git a/src/examples/SpaceShooter_tutorial/img/r1.png b/src/examples/SpaceShooter_tutorial/img/r1.png deleted file mode 100644 index cb8fa0b00..000000000 Binary files a/src/examples/SpaceShooter_tutorial/img/r1.png and /dev/null differ diff --git a/src/examples/SpaceShooter_tutorial/img/r8eced6ed-b52a-4344-8266-3fa909005671.png b/src/examples/SpaceShooter_tutorial/img/r8eced6ed-b52a-4344-8266-3fa909005671.png new file mode 100644 index 000000000..d910d0368 Binary files /dev/null and b/src/examples/SpaceShooter_tutorial/img/r8eced6ed-b52a-4344-8266-3fa909005671.png differ diff --git a/src/examples/SpaceShooter_tutorial/img/r8eced6ed-b52a-4344-8266-3fa909005671@r.png b/src/examples/SpaceShooter_tutorial/img/r8eced6ed-b52a-4344-8266-3fa909005671@r.png new file mode 100644 index 000000000..439417586 Binary files /dev/null and b/src/examples/SpaceShooter_tutorial/img/r8eced6ed-b52a-4344-8266-3fa909005671@r.png differ diff --git a/src/examples/SpaceShooter_tutorial/img/splash.png b/src/examples/SpaceShooter_tutorial/img/splash.png index cb8fa0b00..439417586 100644 Binary files a/src/examples/SpaceShooter_tutorial/img/splash.png and b/src/examples/SpaceShooter_tutorial/img/splash.png differ diff --git a/src/examples/catformer.ict b/src/examples/catformer.ict index 3558e4160..5cb47d27d 100644 --- a/src/examples/catformer.ict +++ b/src/examples/catformer.ict @@ -4,12 +4,10 @@ libs: fittoscreen: manageViewport: true mode: scaleFill - mouse: {} keyboard.polyfill: {} keyboard: {} vkeys: {} sound.howler: {} - touch: {} sprite: spritedef: |- ct.sprite( @@ -34,405 +32,456 @@ libs: gridY: 512 debugMode: false debugText: 16 + pointer: + preventdefault: false + startlocked: false templates: - name: Box depth: 0 - oncreate: '' - onstep: >- - // Move the box to the left if there is a player on the right and no - obstacles on the left - - if (ct.place.meet(this, this.x + 5, this.y, 'Player') && - ct.place.free(this, this.x - 10, this.y, 'Solid')) { - this.x -= 10; - } - - // Same but in reverse - - if (ct.place.meet(this, this.x - 5, this.y, 'Player') && - ct.place.free(this, this.x + 10, this.y, 'Solid')) { - this.x += 10; - } - - // If there is no obstacles underneath, fall down. - - if (ct.place.free(this, this.x, this.y + 10, 'Solid') - - ) { - this.y += 10; - } - ondraw: '' - ondestroy: '' uid: b7a528f8-655c-4920-900f-f191533f411d - lastmod: 1632021063633 + lastmod: 1657021879526 extends: cgroup: Solid texture: d8dd2bfd-0f9d-495a-bbfd-0e65b80153b9 + events: + - lib: core + arguments: {} + code: >- + // Move the box to the left if there is a player on the right and no + obstacles on the left + + if (ct.place.meet(this, this.x + 5, this.y, 'Player') && + ct.place.free(this, this.x - 10, this.y, 'Solid')) { + this.x -= 10; + } + + // Same but in reverse + + if (ct.place.meet(this, this.x - 5, this.y, 'Player') && + ct.place.free(this, this.x + 10, this.y, 'Solid')) { + this.x += 10; + } + + // If there is no obstacles underneath, fall down. + + if (ct.place.free(this, this.x, this.y + 10, 'Solid')) { + this.y += 10; + } + eventKey: OnStep + type: template + loopAnimation: true - name: Logs depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 - lastmod: 1599533998391 + lastmod: 1657021912350 extends: cgroup: Solid texture: f3de5077-0e66-43de-93f2-d3a75184aa2e + events: [] + type: template + loopAnimation: true - name: Grass depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 5ff42cc3-0b4a-47e9-b6f1-06d3b3b91bb0 lastmod: 1599533992399 extends: cgroup: Solid texture: 9968de05-f39d-4455-aaed-175c03728bb1 + events: [] + type: template + loopAnimation: true - name: Spikes depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd - lastmod: 1641403084624 + lastmod: 1657021896662 extends: cgroup: Enemy texture: eed6bb2f-301f-460a-8d91-93396d103b4e + events: [] + type: template + loopAnimation: true - name: Player depth: 0 - oncreate: | - // Set up animation - - this.animationSpeed = 15 / 60; - this.tex = 'Player_Idle'; - this.play(); - - // Traditional speed/dir movement system works badly with platformers. - // We will set up our own variables and write own movement code. - - this.maxspeed = 5; // this will be our max horizontal speed - this.acceleration = 1; // this is walking acceleration - this.jumpPower = 12.5; // this is our jumping velocity - this.gravity = 0.5; - - - // Camera should follow the character - - ct.camera.follow = this; - ct.camera.borderX = 400; - ct.camera.borderY = 200; - ct.camera.drift = 0.95; - onstep: >- - // here and below we check for both collisions with tiles and copies. - - // -10 is the depth of the colliding tile layer. We ignore the decorative - - // layer at -20. - - var onGround = ct.place.occupied(this, this.x, this.y + 1, 'Solid'); - - - // Move right or left - - if (ct.actions.Move.value > 0) { - if (this.hspeed < this.maxspeed) { - this.hspeed += this.acceleration; - } - } else if (ct.actions.Move.value < 0) { - if (this.hspeed > -this.maxspeed) { - this.hspeed -= this.acceleration; - } - } else { // Slow down if we are on the ground and we don't move. - if (onGround) { - this.speed = Math.max(0, this.speed - this.maxspeed); - } else if (!ct.actions.Move.pressed) { - // Don't move if we are not pressing the move button - this.hspeed = 0; + uid: 00664f77-21c6-4b06-b310-88640b1beaf9 + lastmod: 1661067945889 + extends: + cgroup: Player + texture: ad390b6e-4c2c-412f-8143-1c70b9c16fc0 + events: + - lib: core + arguments: {} + code: | + // Set up animation + + this.tex = 'Player_Idle'; + + // Traditional speed/dir movement system works badly with platformers. + // We will set up our own variables and write own movement code. + + this.maxspeed = 5; // this will be our max horizontal speed + this.acceleration = 1; // this is walking acceleration + this.jumpPower = 12.5; // this is our jumping velocity + this.gravity = 0.5; + + + // Camera should follow the character + + ct.camera.follow = this; + ct.camera.borderX = 400; + ct.camera.borderY = 200; + ct.camera.drift = 0.95; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + // here and below we check for both collisions with tiles and copies. + + // -10 is the depth of the colliding tile layer. We ignore the + decorative + + // layer at -20. + + var onGround = ct.place.occupied(this, this.x, this.y + 1, 'Solid'); + + + // Move right or left + + if (ct.actions.Move.value > 0) { + if (this.hspeed < this.maxspeed) { + this.hspeed += this.acceleration; + } + } else if (ct.actions.Move.value < 0) { + if (this.hspeed > -this.maxspeed) { + this.hspeed -= this.acceleration; + } + } else { // Slow down if we are on the ground and we don't move. + if (onGround) { + this.speed = Math.max(0, this.speed - this.maxspeed); + } else if (!ct.actions.Move.pressed) { + // Don't move if we are not pressing the move button + this.hspeed = 0; + } } - } - // Jumping + // Jumping - if (ct.actions.Jump.down) { - // Jump only if we stay on the ground - if (onGround) { - this.vspeed = -this.jumpPower; + if (ct.actions.Jump.down) { + // Jump only if we stay on the ground + if (onGround) { + this.vspeed = -this.jumpPower; + } } - } - // this.moveContinuousByAxes moves the copy by two axes separately, so you - can slide + // this.moveContinuousByAxes moves the copy by two axes separately, so + you can slide - // along surfaces. It also returns its collision results on x and y, if - any have occured. + // along surfaces. It also returns its collision results on x and y, + if any have occured. - var collisions = this.moveContinuousByAxes('Solid'); + var collisions = this.moveContinuousByAxes('Solid'); - // Were there any collisions? + // Were there any collisions? - if (collisions) { - // Were we colliding horizontally? - if (collisions.x) { - // Stop horizontal movement - this.hspeed = 0; - } - // Were we colliding vertically? - if (collisions.y) { - // Stop vertical movement - this.vspeed = 0; + if (collisions) { + // Were we colliding horizontally? + if (collisions.x) { + // Stop horizontal movement + this.hspeed = 0; + } + // Were we colliding vertically? + if (collisions.y) { + // Stop vertical movement + this.vspeed = 0; + } } - } + eventKey: OnStep + - lib: core + arguments: {} + code: >- + // Here and below we use the result of the motion by comparing new + coordinates - // Check if we collide with spikes or slimes + // with the ones from the previous frame. This is to prevent walking + animation - if (ct.place.copies(this, this.x, this.y, 'Enemy')) { - ct.sound.spawn('BodyFall'); - // move to a 'death' screen - ct.rooms.switch('DeadScreen'); - } - ondraw: >- - // Here and below we use the result of the motion by comparing new - coordinates + // when the charecter tries to walk into a wall. - // with the ones from the previous frame. This is to prevent walking - animation - // when the charecter tries to walk into a wall. + // Flip the sprite so it follows the movement - - // Flip the sprite so it follows the movement - - if (this.x < this.xprev) { - this.scale.x = -1; - } else if (this.x > this.xprev) { - this.scale.x = 1; - } + if (this.x < this.xprev) { + this.scale.x = -1; + } else if (this.x > this.xprev) { + this.scale.x = 1; + } - // Animation logic + // Animation logic - // All the textures are defined with the catmod "Sprite composer", + // All the textures are defined with the catmod "Sprite composer", - // in Project tab -> Sprite Composer -> Sprite definitions. + // in Project tab -> Sprite Composer -> Sprite definitions. - // See its docs in the sliding panel on the right for examples and - explanations. + // See its docs in the sliding panel on the right for examples and + explanations. - if (ct.place.occupied(this, this.x, this.y + 1, 'Solid')) { - if (this.x !== this.xprev) { - this.tex = 'Player_Walking'; + if (ct.place.occupied(this, this.x, this.y + 1, 'Solid')) { + if (this.x !== this.xprev) { + this.tex = 'Player_Walking'; + } else { + this.tex = 'Player_Idle'; + } + } else if (this.vspeed > 0) { + this.tex = 'Player_Falling'; } else { - this.tex = 'Player_Idle'; + this.tex = 'Player_Jumping'; } - } else if (this.vspeed > 0) { - this.tex = 'Player_Falling'; - } else { - this.tex = 'Player_Jumping'; - } - // Shift camera to the side where the character looks + // Shift camera to the side where the character looks - ct.camera.shiftX = this.scale.x * 150; - ondestroy: '' - uid: 00664f77-21c6-4b06-b310-88640b1beaf9 - lastmod: 1648092352063 - extends: - cgroup: Player - texture: ad390b6e-4c2c-412f-8143-1c70b9c16fc0 + ct.camera.shiftX = this.scale.x * 150; + eventKey: OnDraw + - eventKey: collisionCGroup + code: |- + // Check if we collide with spikes or slimes + ct.sound.spawn('BodyFall'); + // move to a 'death' screen + ct.rooms.switch('DeadScreen'); + arguments: + group: Enemy + lib: place + type: template + loopAnimation: true + playAnimationOnStart: false + animationFPS: 15 - name: Coin depth: 0 - oncreate: '' - onstep: |- - if (ct.place.meet(this, this.x, this.y, 'Player')) { - this.kill = true; - ct.sound.spawn(ct.random.dice('Coin_01', 'Coin_02', 'Coin_03')); - ct.room.coins ++; - } - ondraw: '' - ondestroy: '' uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 - lastmod: 1641402964112 + lastmod: 1657021882549 extends: {} texture: 62be2903-9782-49fc-b551-ef2e641091c9 + events: + - eventKey: collisionTemplate + code: |- + this.kill = true; + ct.sound.spawn(ct.random.dice('Coin_01', 'Coin_02', 'Coin_03')); + ct.room.coins ++; + arguments: + template: 00664f77-21c6-4b06-b310-88640b1beaf9 + lib: place + type: template + loopAnimation: true - name: Greed depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 2d29a0d5-d88d-493d-bece-8d52ed476273 - lastmod: 1599533995511 + lastmod: 1657023054592 extends: {} texture: e90eb23b-547a-4d96-a203-ffe63c00cf9b + events: [] + type: template + loopAnimation: true - name: Slime depth: 0 - oncreate: |- - this.speed = 1; - this.direction = -180; - - this.animationSpeed = 4 / 60; - this.play(); - onstep: >- - var freeBelow = ct.place.free(this, this.x + ct.u.ldx(70, this.direction), - this.y + 35, 'Solid'); - - - var occupiedInFront = ct.place.occupied(this, this.x + ct.u.ldx(10, - this.direction), this.y, 'Solid'); - - - if (freeBelow || occupiedInFront) { - if (this.direction === 180) { - this.direction = 0; - this.scale.x = -1; - } else { - this.direction = 180; - this.scale.x = 1; - } - } - - - this.move(); - ondraw: '' - ondestroy: '' uid: 1f91fd7d-2d6c-4542-aead-78b8010b835b - lastmod: 1641402957729 + lastmod: 1661067952905 extends: cgroup: Enemy texture: 703fb5d5-cf20-4450-b760-0b1cd037a5ad + events: + - lib: core + arguments: {} + code: | + this.speed = 1; + this.direction = -180; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + var freeBelow = ct.place.free(this, this.x + ct.u.ldx(70, + this.direction), this.y + 35, 'Solid'); + + + var occupiedInFront = ct.place.occupied(this, this.x + ct.u.ldx(10, + this.direction), this.y, 'Solid'); + + + if (freeBelow || occupiedInFront) { + if (this.direction === 180) { + this.direction = 0; + this.scale.x = -1; + } else { + this.direction = 180; + this.scale.x = 1; + } + } + + + this.move(); + eventKey: OnStep + type: template + loopAnimation: true + animationFPS: 4 + playAnimationOnStart: true - name: Rich depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: b658efa2-360e-4a62-8640-3e3281156f4e lastmod: 1599534002727 extends: {} texture: 1da28af4-53f1-4958-82b2-a696778f910f + events: [] + type: template + loopAnimation: true - name: ToggleFullscreen depth: 100 - oncreate: '' - onstep: |- - if (ct.mouse.pressed && ct.mouse.hoversUi(this)) { - ct.fittoscreen.toggleFullscreen(); - } - - if (ct.touch.enabled && ct.touch.hoversUi(this)) { - ct.fittoscreen.toggleFullscreen(); - } - ondraw: 'this.gotoAndStop(ct.fittoscreen.getIsFullscreen()? 1 : 0);' - ondestroy: '' uid: 8a4b8de4-7729-4936-bc7b-bc277a512975 - lastmod: 1599534011351 + lastmod: 1657022432389 extends: {} texture: d161a39a-203e-4099-99e2-41385d94f975 + events: + - lib: core + arguments: {} + code: 'this.gotoAndStop(ct.fittoscreen.getIsFullscreen()? 1 : 0);' + eventKey: OnDraw + - eventKey: OnPointerClick + code: ct.fittoscreen.toggleFullscreen(); + arguments: {} + lib: core + type: template + loopAnimation: true - name: CoinWidget depth: 0 - oncreate: |- - this.coinsCounter = new PIXI.Text(this.coins, ct.styles.get('CoinText')); - this.coinsCounter.x = 40; - this.coinsCounter.anchor.y = 0.5; - this.addChild(this.coinsCounter); - onstep: '' - ondraw: |- - if (this.coinsCounter.text != ct.room.coins + ' / 33') { - this.coinsCounter.text = ct.room.coins + ' / 33'; - } - ondestroy: '' uid: 1f73eb4f-8795-4234-af61-2c44c3fba073 texture: 62be2903-9782-49fc-b551-ef2e641091c9 extends: {} - lastmod: 1599533989223 + lastmod: 1657021887581 + events: + - lib: core + arguments: {} + code: >- + this.coinsCounter = new PIXI.Text(this.coins, + ct.styles.get('CoinText')); + + this.coinsCounter.x = 40; + + this.coinsCounter.anchor.y = 0.5; + + this.addChild(this.coinsCounter); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.coinsCounter.text != ct.room.coins + ' / 33') { + this.coinsCounter.text = ct.room.coins + ' / 33'; + } + eventKey: OnDraw + type: template + loopAnimation: true - name: ButtonLeft depth: 0 - oncreate: |- - this.button = ct.vkeys.button({ - key: "Vk2", - texNormal: "buttonLeft", - texActive: "buttonLeft", - texHover: "buttonLeft", - x: () => this.x, - y: () => this.y, - depth: 1000 - }); - this.alpha = 0.5; - this.button.visible = false; - onstep: '' - ondraw: |- - this.button.x = this.x; - this.button.y = this.y; - ondestroy: '' uid: 45a6ee81-34af-494e-914e-51ec9d414314 texture: e706498a-bfef-4366-9481-687b01ff7bf1 extends: {} lastmod: 1599533982687 + events: + - lib: core + arguments: {} + code: |- + this.button = ct.vkeys.button({ + key: "Vk2", + texNormal: "buttonLeft", + texActive: "buttonLeft", + texHover: "buttonLeft", + x: () => this.x, + y: () => this.y, + depth: 1000 + }); + this.alpha = 0.5; + this.button.visible = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.button.x = this.x; + this.button.y = this.y; + eventKey: OnDraw + type: template + loopAnimation: true - name: ButtonRight depth: 0 - oncreate: |- - this.button = ct.vkeys.button({ - key: "Vk1", - texNormal: "buttonRight", - texActive: "buttonRight", - texHover: "buttonRight", - x: () => this.x, - y: () => this.y, - depth: 1000 - }); - this.alpha = 0.5; - this.button.visible = false; - onstep: '' - ondraw: |- - this.button.x = this.x; - this.button.y = this.y; - ondestroy: '' uid: 03773b4b-e444-4a2d-9891-3ddf9575cc87 texture: 8f3b23d8-3aed-429a-a66e-9572cad7919a extends: {} lastmod: 1599533980063 + events: + - lib: core + arguments: {} + code: |- + this.button = ct.vkeys.button({ + key: "Vk1", + texNormal: "buttonRight", + texActive: "buttonRight", + texHover: "buttonRight", + x: () => this.x, + y: () => this.y, + depth: 1000 + }); + this.alpha = 0.5; + this.button.visible = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.button.x = this.x; + this.button.y = this.y; + eventKey: OnDraw + type: template + loopAnimation: true - name: ButtonJump depth: 0 - oncreate: |- - this.button = ct.vkeys.button({ - key: "Vk3", - texNormal: "buttonJump", - texActive: "buttonJump", - texHover: "buttonJump", - x: () => this.x, - y: () => this.y, - depth: 1000 - }); - this.alpha = 0.5; - this.button.visible = false; - onstep: '' - ondraw: |- - this.button.x = this.x; - this.button.y = this.y; - ondestroy: '' uid: 86f037f0-9a1c-4306-9d67-00be01bbd793 texture: b5121b5f-8109-45c0-9fa4-44f9f10ce88c extends: {} - lastmod: 1599533976511 + lastmod: 1657021803175 + events: + - lib: core + arguments: {} + code: |- + this.button = ct.vkeys.button({ + key: "Vk3", + texNormal: "buttonJump", + texActive: "buttonJump", + texHover: "buttonJump", + x: () => this.x, + y: () => this.y, + depth: 1000 + }); + this.alpha = 0.5; + this.button.visible = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.button.x = this.x; + this.button.y = this.y; + eventKey: OnDraw + type: template + loopAnimation: true - name: TryAgain depth: 0 - oncreate: '' - onstep: >- - if (ct.touch.collide(this) || (ct.mouse.hovers(this) && ct.mouse.pressed)) - { - ct.rooms.switch('InGame'); - } - ondraw: '' - ondestroy: '' uid: 64fac189-737e-4e56-a8fc-15eccae6bf2a texture: 0298d848-efe7-48e5-8d68-9128ba8b4e02 extends: {} - lastmod: 1599534015095 + lastmod: 1657022172926 + events: + - eventKey: OnPointerClick + code: ct.rooms.switch('InGame'); + arguments: {} + lib: core + type: template + loopAnimation: true sounds: - name: BodyFall uid: 64f57367-eae3-40e1-8769-e11bd3c90f62 @@ -508,1243 +557,1852 @@ styles: lastmod: 1543636696741 rooms: - name: InGame - oncreate: |- - this.coins = 0; - - ct.rooms.append('UI_Layer', {isUi: true}); - onstep: |- - if (this.coins >= 33) { - ct.rooms.switch('RichScreen'); - } ondraw: '' onleave: '' width: 1024 height: 700 backgrounds: - depth: '-50' - extends: {} texture: fd9d7012-6826-4368-8fe5-0385b72bc902 + shiftX: ! '' + shiftY: ! '' + parallaxX: ! '' + parallaxY: ! '' + movementX: ! '' + movementY: ! '' + scaleX: 0 + scaleY: 0 + repeat: ! '' uid: b0f0ff4d-a155-4d68-a86e-5bb7ed8973ab grid: 35 - lastmod: 1632021081256 + lastmod: 1661067970649 thumbnail: 1 tiles: - depth: -10 tiles: - x: -140 'y': -70 - grid: - - 0 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -70 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 70 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 140 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 210 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 280 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 0 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 70 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 140 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 210 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 280 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 350 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 420 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -140 'y': 490 - grid: - - 0 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': 280 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': 210 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': 140 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': 70 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': 0 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 350 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 420 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 490 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 560 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 630 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 700 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 770 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 840 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 910 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 980 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1050 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1120 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1260 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1330 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1470 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1540 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1610 'y': -70 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': -70 - grid: - - 2 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 210 'y': 210 - grid: - - 0 - - 0 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 350 'y': 210 - grid: - - 2 - - 0 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 280 'y': 210 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -70 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 70 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 140 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 210 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 280 'y': 490 - grid: - - 2 - - 0 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 2 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 560 'y': 490 - grid: - - 0 - - 0 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 0 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 840 'y': 490 - grid: - - 2 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 630 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 700 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 770 'y': 490 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 840 'y': 560 - grid: - - 0 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 910 'y': 560 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 980 'y': 560 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1050 'y': 560 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1120 'y': 560 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': 560 - grid: - - 2 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': 560 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': 630 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': 700 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': 770 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 0 'y': 840 - grid: - - 0 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 70 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 140 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 210 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 280 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 350 'y': 840 - grid: - - 2 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 350 'y': 910 - grid: - - 0 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 420 'y': 910 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 490 'y': 910 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 560 'y': 910 - grid: - - 2 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 560 'y': 840 - grid: - - 0 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 630 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 700 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 770 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 840 'y': 840 - grid: - - 2 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 840 'y': 910 - grid: - - 0 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1050 'y': 910 - grid: - - 2 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 910 'y': 910 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 980 'y': 910 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': 350 - grid: - - 3 - - 0 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 3 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': 420 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': 490 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1330 'y': 350 - grid: - - 0 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1330 'y': 420 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1330 'y': 490 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1330 'y': 560 - grid: - - 0 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 8 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 560 - grid: - - 2 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 6 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 630 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 700 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 770 - grid: - - 1 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 9 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 840 - grid: - - 2 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 350 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1470 'y': 350 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1540 'y': 350 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1610 'y': 350 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1680 'y': 350 - grid: - - 2 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 10 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1120 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1260 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1330 'y': 840 - grid: - - 1 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 5 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1050 'y': 840 - grid: - - 0 - - 1 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 4 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 extends: cgroup: Solid + hidden: false - depth: -20 tiles: - x: 70 'y': 420 - grid: - - 3 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 11 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 140 'y': 420 - grid: - - 3 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 11 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 210 'y': 420 - grid: - - 3 - - 2 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 11 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 945 'y': 490 - grid: - - 1 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 770 'y': 420 - grid: - - 2 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 735 'y': 420 - grid: - - 0 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1575 'y': 280 - grid: - - 0 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1435 'y': 280 - grid: - - 1 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1190 'y': 280 - grid: - - 3 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 15 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 280 'y': 770 - grid: - - 1 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 245 'y': 770 - grid: - - 2 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 14 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 245 'y': 140 - grid: - - 1 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 13 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: -70 'y': 420 - grid: - - 0 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1120 'y': 490 - grid: - - 0 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 1400 'y': 490 - grid: - - 3 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 15 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 - x: 770 'y': 770 - grid: - - 0 - - 3 - - 1 - - 1 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + frame: 12 + rotation: 0 texture: 9968de05-f39d-4455-aaed-175c03728bb1 extends: {} + hidden: false gridX: 35 gridY: 35 copies: - x: 980 'y': 280 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b7a528f8-655c-4920-900f-f191533f411d exts: {} + customProperties: {} - x: 1225 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd exts: {} + customProperties: {} - x: 1295 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd exts: {} + customProperties: {} - x: 1470 'y': 280 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b7a528f8-655c-4920-900f-f191533f411d exts: {} + customProperties: {} - x: 350 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 420 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 490 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 420 'y': 840 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd exts: {} + customProperties: {} - x: 490 'y': 840 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd exts: {} + customProperties: {} - x: 910 'y': 840 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd exts: {} + customProperties: {} - x: 980 'y': 840 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd exts: {} + customProperties: {} - x: 70 - 'y': 350 + 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 00664f77-21c6-4b06-b310-88640b1beaf9 exts: {} + customProperties: {} - x: 385 'y': 140 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 420 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 490 'y': 420 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1645 'y': 245 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1645 'y': 175 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1645 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1295 'y': 385 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1295 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1295 'y': 595 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1295 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1120 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 980 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 840 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 595 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 490 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 385 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 175 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 140 'y': 735 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 175 'y': 700 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 210 'y': 735 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 385 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 455 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 525 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1645 'y': 35 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 315 'y': 140 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 350 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 700 'y': 840 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1f91fd7d-2d6c-4542-aead-78b8010b835b exts: {} + customProperties: {} - x: 1015 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1015 'y': 455 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1050 'y': 455 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 1050 'y': 490 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 840 'y': 350 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 910 'y': 350 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 980 'y': 350 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 1050 'y': 350 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 280 'y': 105 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 245 'y': 140 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2 exts: {} + customProperties: {} - x: 315 'y': 210 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1f91fd7d-2d6c-4542-aead-78b8010b835b exts: {} + customProperties: {} - x: 1120 'y': 560 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1f91fd7d-2d6c-4542-aead-78b8010b835b exts: {} + customProperties: {} - x: -70 'y': 280 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1026c1c8-90e4-4b93-bb6a-568f53918097 exts: {} + customProperties: {} - x: 245 'y': 770 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b7a528f8-655c-4920-900f-f191533f411d exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: |- + this.coins = 0; + + ct.rooms.append('UI_Layer', {isUi: true}); + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + if (this.coins >= 33) { + ct.rooms.switch('RichScreen'); + } + eventKey: OnStep + type: room + extends: {} + simulate: true + isUi: ! '' - name: DeadScreen - oncreate: >- - ct.sound.spawn('Failure'); - - - this.ohNoLabel = new PIXI.Text('Oh no!', ct.styles.get('OhNo')); - - this.ohNoLabel.x = ct.camera.width / 2; - - this.ohNoLabel.y = 520; - - this.ohNoLabel.anchor.x = this.ohNoLabel.anchor.y = 0.5; - - this.addChild(this.ohNoLabel); - - - this.greedyLabel = new PIXI.Text('You were too greeedy for that game!', - ct.styles.get('OhNo_Small')); - - this.greedyLabel.x = ct.camera.width / 2; - - this.greedyLabel.y = 560; - - this.greedyLabel.anchor.x = this.greedyLabel.anchor.y = 0.5; - - this.addChild(this.greedyLabel); onstep: '' ondraw: '' onleave: '' @@ -1756,7 +2414,7 @@ rooms: texture: fd9d7012-6826-4368-8fe5-0385b72bc902 uid: 1ee751d0-24cc-43af-b91d-1a91a9aa48f5 grid: 64 - lastmod: 1586656324350 + lastmod: 1657023071766 thumbnail: 2 gridX: 64 gridY: 64 @@ -1769,45 +2427,69 @@ rooms: 'y': 256 uid: 2d29a0d5-d88d-493d-bece-8d52ed476273 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 992 'y': 669 uid: 8a4b8de4-7729-4936-bc7b-bc277a512975 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 512 'y': 640 uid: 64fac189-737e-4e56-a8fc-15eccae6bf2a exts: {} - - name: RichScreen - oncreate: >- - ct.sound.spawn('Victory'); - + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('Failure'); - ct.keyboard.clear(); + this.ohNoLabel = new PIXI.Text('Oh no!', ct.styles.get('OhNo')); - this.ohNoLabel = new PIXI.Text('You got them all!', - ct.styles.get('OhNo')); + this.ohNoLabel.x = ct.camera.width / 2; - this.ohNoLabel.x = ct.camera.width / 2; + this.ohNoLabel.y = 520; - this.ohNoLabel.y = 540; + this.ohNoLabel.anchor.x = this.ohNoLabel.anchor.y = 0.5; - this.ohNoLabel.anchor.x = this.ohNoLabel.anchor.y = 0.5; + this.addChild(this.ohNoLabel); - this.addChild(this.ohNoLabel); + this.greedyLabel = new PIXI.Text('You were too greeedy for that + game!', ct.styles.get('OhNo_Small')); - this.subLabel = new PIXI.Text('You\'ve found all the 33 coins. - Congrats!\nThis was a stupid demo of ct.js game engine. Thank you for - playing!', ct.styles.get('OhNo_Small')); + this.greedyLabel.x = ct.camera.width / 2; - this.subLabel.x = ct.camera.width / 2; + this.greedyLabel.y = 560; - this.subLabel.y = 600; + this.greedyLabel.anchor.x = this.greedyLabel.anchor.y = 0.5; - this.subLabel.anchor.x = this.subLabel.anchor.y = 0.5; - - this.addChild(this.subLabel); + this.addChild(this.greedyLabel); + eventKey: OnRoomStart + type: room + extends: {} + simulate: true + isUi: ! '' + - name: RichScreen onstep: '' ondraw: '' onleave: '' @@ -1819,7 +2501,7 @@ rooms: texture: fd9d7012-6826-4368-8fe5-0385b72bc902 uid: 1a5a64c6-5a4b-4f57-aa99-371ae3c158a3 grid: 64 - lastmod: 1586656333089 + lastmod: 1657023065750 thumbnail: 2 gridX: 64 gridY: 64 @@ -1832,44 +2514,64 @@ rooms: 'y': 256 uid: b658efa2-360e-4a62-8640-3e3281156f4e exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 992 'y': 670 uid: 8a4b8de4-7729-4936-bc7b-bc277a512975 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('Victory'); + + + ct.keyboard.clear(); + + + this.ohNoLabel = new PIXI.Text('You got them all!', + ct.styles.get('OhNo')); + + this.ohNoLabel.x = ct.camera.width / 2; + + this.ohNoLabel.y = 540; + + this.ohNoLabel.anchor.x = this.ohNoLabel.anchor.y = 0.5; + + this.addChild(this.ohNoLabel); + + + this.subLabel = new PIXI.Text('You\'ve found all the 33 coins. + Congrats!\nThis was a stupid demo of ct.js game engine. Thank you for + playing!', ct.styles.get('OhNo_Small')); + + this.subLabel.x = ct.camera.width / 2; + + this.subLabel.y = 600; + + this.subLabel.anchor.x = this.subLabel.anchor.y = 0.5; + + this.addChild(this.subLabel); + eventKey: OnRoomStart + type: room + extends: {} + simulate: true + isUi: ! '' - name: UI_Layer - oncreate: |2- - /*this.touchControl = {}; - var aboveBottom = 80; - var rightOfBorder = 80; - this.touchControl.left = ct.vkeys.button({ - key: "Vk2", - texNormal: "buttonLeft", - texActive: "buttonLeft", - texHover: "buttonLeft", - x: () => rightOfBorder, - y: () => ct.camera.height - aboveBottom, - depth: 1000 - }); - this.touchControl.right = ct.vkeys.button({ - key: "Vk1", - texNormal: "buttonRight", - texActive: "buttonRight", - texHover: "buttonRight", - x: () => rightOfBorder + 100, - y: () => ct.camera.height - aboveBottom, - depth: 1000 - }); - this.touchControl.jump = ct.vkeys.button({ - key: "Vk3", - texNormal: "buttonJump", - texActive: "buttonJump", - texHover: "buttonJump", - x: () => ct.camera.width - rightOfBorder, - y: () => ct.camera.height - aboveBottom, - depth: 1000 - });*/ onstep: '' - ondraw: ct.camera.realign(this); onleave: '' width: 1024 height: 720 @@ -1879,22 +2581,57 @@ rooms: 'y': 689 uid: 8a4b8de4-7729-4936-bc7b-bc277a512975 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 44 'y': 46 uid: 1f73eb4f-8795-4234-af61-2c44c3fba073 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 96 'y': 640 uid: 45a6ee81-34af-494e-914e-51ec9d414314 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 224 'y': 640 uid: 03773b4b-e444-4a2d-9891-3ddf9575cc87 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 - x: 832 'y': 640 uid: 86f037f0-9a1c-4306-9d67-00be01bbd793 exts: {} + customProperties: {} + opacity: 1 + tint: 16777215 + rotation: 0 + scale: + x: 1 + 'y': 1 tiles: - depth: -10 tiles: [] @@ -1903,7 +2640,50 @@ rooms: thumbnail: 5768eedfd438 gridX: 32 gridY: 64 - lastmod: 1596761311993 + lastmod: 1657023068774 + events: + - lib: core + arguments: {} + code: |2- + /*this.touchControl = {}; + var aboveBottom = 80; + var rightOfBorder = 80; + this.touchControl.left = ct.vkeys.button({ + key: "Vk2", + texNormal: "buttonLeft", + texActive: "buttonLeft", + texHover: "buttonLeft", + x: () => rightOfBorder, + y: () => ct.camera.height - aboveBottom, + depth: 1000 + }); + this.touchControl.right = ct.vkeys.button({ + key: "Vk1", + texNormal: "buttonRight", + texActive: "buttonRight", + texHover: "buttonRight", + x: () => rightOfBorder + 100, + y: () => ct.camera.height - aboveBottom, + depth: 1000 + }); + this.touchControl.jump = ct.vkeys.button({ + key: "Vk3", + texNormal: "buttonJump", + texActive: "buttonJump", + texHover: "buttonJump", + x: () => ct.camera.width - rightOfBorder, + y: () => ct.camera.height - aboveBottom, + depth: 1000 + });*/ + eventKey: OnRoomStart + - lib: core + arguments: {} + code: ct.camera.realign(this); + eventKey: OnDraw + type: room + extends: {} + simulate: true + isUi: ! '' soundtick: 6 roomtick: 3 templatetick: 12 @@ -1975,7 +2755,7 @@ scripts: depth: 1000 }); } -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 fonts: [] skeletons: [] actions: diff --git a/src/examples/catformer/img/r1.png b/src/examples/catformer/img/r1.png deleted file mode 100644 index d7e1a98da..000000000 Binary files a/src/examples/catformer/img/r1.png and /dev/null differ diff --git a/src/examples/catformer/img/r1a5a64c6-5a4b-4f57-aa99-371ae3c158a3.png b/src/examples/catformer/img/r1a5a64c6-5a4b-4f57-aa99-371ae3c158a3.png new file mode 100644 index 000000000..d70a6d7d2 Binary files /dev/null and b/src/examples/catformer/img/r1a5a64c6-5a4b-4f57-aa99-371ae3c158a3.png differ diff --git a/src/examples/catformer/img/r1a5a64c6-5a4b-4f57-aa99-371ae3c158a3@r.png b/src/examples/catformer/img/r1a5a64c6-5a4b-4f57-aa99-371ae3c158a3@r.png new file mode 100644 index 000000000..77e478b86 Binary files /dev/null and b/src/examples/catformer/img/r1a5a64c6-5a4b-4f57-aa99-371ae3c158a3@r.png differ diff --git a/src/examples/catformer/img/r1ee751d0-24cc-43af-b91d-1a91a9aa48f5.png b/src/examples/catformer/img/r1ee751d0-24cc-43af-b91d-1a91a9aa48f5.png new file mode 100644 index 000000000..fa3407539 Binary files /dev/null and b/src/examples/catformer/img/r1ee751d0-24cc-43af-b91d-1a91a9aa48f5.png differ diff --git a/src/examples/catformer/img/r1ee751d0-24cc-43af-b91d-1a91a9aa48f5@r.png b/src/examples/catformer/img/r1ee751d0-24cc-43af-b91d-1a91a9aa48f5@r.png new file mode 100644 index 000000000..1580efb44 Binary files /dev/null and b/src/examples/catformer/img/r1ee751d0-24cc-43af-b91d-1a91a9aa48f5@r.png differ diff --git a/src/examples/catformer/img/r2.png b/src/examples/catformer/img/r2.png deleted file mode 100644 index 8386fc40f..000000000 Binary files a/src/examples/catformer/img/r2.png and /dev/null differ diff --git a/src/examples/catformer/img/r5768eedfd438.png b/src/examples/catformer/img/r5768eedfd438.png deleted file mode 100644 index 9d8afd657..000000000 Binary files a/src/examples/catformer/img/r5768eedfd438.png and /dev/null differ diff --git a/src/examples/catformer/img/rb0f0ff4d-a155-4d68-a86e-5bb7ed8973ab.png b/src/examples/catformer/img/rb0f0ff4d-a155-4d68-a86e-5bb7ed8973ab.png new file mode 100644 index 000000000..e860f7730 Binary files /dev/null and b/src/examples/catformer/img/rb0f0ff4d-a155-4d68-a86e-5bb7ed8973ab.png differ diff --git a/src/examples/catformer/img/rb0f0ff4d-a155-4d68-a86e-5bb7ed8973ab@r.png b/src/examples/catformer/img/rb0f0ff4d-a155-4d68-a86e-5bb7ed8973ab@r.png new file mode 100644 index 000000000..326d21c83 Binary files /dev/null and b/src/examples/catformer/img/rb0f0ff4d-a155-4d68-a86e-5bb7ed8973ab@r.png differ diff --git a/src/examples/catformer/img/rcc861d50-35d6-4687-b789-5768eedfd438.png b/src/examples/catformer/img/rcc861d50-35d6-4687-b789-5768eedfd438.png new file mode 100644 index 000000000..0f4241b73 Binary files /dev/null and b/src/examples/catformer/img/rcc861d50-35d6-4687-b789-5768eedfd438.png differ diff --git a/src/examples/catformer/img/rcc861d50-35d6-4687-b789-5768eedfd438@r.png b/src/examples/catformer/img/rcc861d50-35d6-4687-b789-5768eedfd438@r.png new file mode 100644 index 000000000..de5ca968b Binary files /dev/null and b/src/examples/catformer/img/rcc861d50-35d6-4687-b789-5768eedfd438@r.png differ diff --git a/src/examples/catformer/img/splash.png b/src/examples/catformer/img/splash.png index d7e1a98da..326d21c83 100644 Binary files a/src/examples/catformer/img/splash.png and b/src/examples/catformer/img/splash.png differ diff --git a/src/examples/catsteroids.ict b/src/examples/catsteroids.ict index 447e59da6..a2132568e 100644 --- a/src/examples/catsteroids.ict +++ b/src/examples/catsteroids.ict @@ -25,88 +25,156 @@ libs: templates: - name: Player_Blue depth: 5 - oncreate: >- - // Set movement friction, acceleration and speed limit + uid: 1fab434d-0976-4b65-8390-d013695aba8c + lastmod: 1661143924623 + extends: {} + texture: e1452137-8cfa-4eec-b54a-0f2660326b48 + events: + - lib: core + arguments: {} + code: >- + // Set movement friction, acceleration and speed limit - this.friction = 0.25; + this.friction = 0.25; - this.flyspeed = 2.5; + this.flyspeed = 2.5; - this.maxspeed = 7.5; + this.maxspeed = 7.5; - // This will help us to shoot continuously + // This will help us to shoot continuously - this.shootTimer = 0; + this.shootTimer = 0; - this.lives = 100; + this.lives = 100; - this.invulnerable = -1; + this.invulnerable = -1; - this.weapon = 'simple'; + this.weapon = 'simple'; - this.shootSwitch = 1; // This will flip the animation of the spherical - bullets, and the position of individual energy bolts + this.shootSwitch = 1; // This will flip the animation of the spherical + bullets, and the position of individual energy bolts - //ct.emitters.append(this, 'Shield'); + //ct.emitters.append(this, 'Shield'); - ct.emitters.append(this, 'JetFlame', { - position: { - x: -16, - y: 115 - } - }); + ct.emitters.append(this, 'JetFlame', { + position: { + x: -16, + y: 115 + } + }); + + ct.emitters.append(this, 'JetFlame', { + position: { + x: 16, + y: 115 + } + }); + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + /* Movement + Add acceleration when arrows or WASD are being pressed + */ + + + this.hspeed += ct.actions.MoveX.value * this.flyspeed; - ct.emitters.append(this, 'JetFlame', { - position: { - x: 16, - y: 115 + this.vspeed += ct.actions.MoveY.value * this.flyspeed; + + + // Limit speed, but allow for faster movement on slowmo effect + + this.speed = Math.max(Math.min(this.speed, this.speed - this.friction, + this.maxspeed / ct.pixiApp.ticker.speed), 0); + + this.move(); + + + // Check if the ship is out of the view + + if (this.x < 0 || this.x > ct.camera.width || + this.y < 0 || this.y > ct.camera.height) { + // Return back if the ship is outside the room + this.speed = 0; + this.x = Math.max(Math.min(this.x, ct.camera.width), 0); + this.y = Math.max(Math.min(this.y, ct.camera.height), 0); } - }); - onstep: >- - /* Movement - Add acceleration when arrows or WASD are being pressed - */ - this.hspeed += ct.actions.MoveX.value * this.flyspeed; + /* Shooting */ - this.vspeed += ct.actions.MoveY.value * this.flyspeed; + this.shootTimer += ct.deltaUi; - // Limit speed, but allow for faster movement on slowmo effect + /* Damage on collision */ - this.speed = Math.max(Math.min(this.speed, this.speed - this.friction, - this.maxspeed / ct.pixiApp.ticker.speed), 0); + var obstacle = ct.place.occupied(this, this.x, this.y, 'Enemy') + || ct.place.occupied(this, this.x, this.y, 'EnemyBullet'); + if (obstacle && this.invulnerable < 0) { + if (obstacle.cgroup === 'Enemy') { + this.lives -= 25; + } else { + this.lives -= 5; + } + obstacle.kill = true; - this.move(); + // Are we completely, like, dead? + if (this.lives < 0) { + this.kill = true; + } else { + // Set invulnerability for one second + this.invulnerable = ct.speed; + } + } + // Deplete invulnerability - // Check if the ship is out of the view + this.invulnerable -= ct.delta; + eventKey: OnStep + - lib: core + arguments: {} + code: |- + ct.emitters.fire('Explosion', this.x, this.y); - if (this.x < 0 || this.x > ct.camera.width || - this.y < 0 || this.y > ct.camera.height) { - // Return back if the ship is outside the room - this.speed = 0; - this.x = Math.max(Math.min(this.x, ct.camera.width), 0); - this.y = Math.max(Math.min(this.y, ct.camera.height), 0); - } + localStorage.score = ct.room.score; + ct.u.wait(2999) + .then(() => ct.rooms.switch('RetryScreen')); + eventKey: OnDestroy + - lib: core + arguments: {} + code: >- + // If we are invulnerable, alternate between full and partial opacity + each 10 frames - /* Shooting */ + // `this.invulnerable % 10` means 'get a fraction remainder when + dividing by 10' + // `statement? 0.5 : 1` means that we pick 0.5 if the statement is + true, or 1 otherwise - this.shootTimer += ct.deltaUi; + if (this.invulnerable > 0) { + var damaged = this.invulnerable % 10 > 5; + this.tint = damaged? 0xFF6666 : 0xFFFFFF; + } else { + this.alpha = 1; + } + eventKey: OnDraw + - eventKey: OnActionDown + code: >- + /* Shooting */ - // If the spacebar is pressed and at least a quarter of second has passed, + // If the spacebar is pressed and at least a quarter of second has + passed, - // create a new laser bullet depending on a weapon template + // create a new laser bullet depending on a weapon template - if (ct.actions.Shoot.down) { if (this.weapon === 'simple' && this.shootTimer > 10) { ct.templates.copy('Laser_Simple_Blue', this.x + 75*this.shootSwitch, this.y); this.shootSwitch *= -1; @@ -114,6 +182,7 @@ templates: // Reset shooting delay this.shootTimer = 0; } + if (this.weapon === 'spread' && this.shootTimer > 15) { // create three laser bolts ct.templates.copy('Laser_Simple_Blue', this.x-75, this.y); @@ -123,6 +192,7 @@ templates: // Reset shooting delay this.shootTimer = 0; } + if (this.weapon === 'bolt' && this.shootTimer > 40) { // slow, but powerful ct.templates.copy('Laser_Bolt_Blue', this.x, this.y); @@ -130,6 +200,7 @@ templates: // Reset shooting delay this.shootTimer = 0; } + if (this.weapon === 'cross' && this.shootTimer > 10) { // this one shoots much faster var bullet = ct.templates.copy('Laser_Cross_Blue', this.x, this.y); @@ -139,285 +210,287 @@ templates: // Reset shooting delay this.shootTimer = 0; } - } - - - /* Damage on collision */ - - var obstacle = ct.place.occupied(this, this.x, this.y, 'Enemy') - || ct.place.occupied(this, this.x, this.y, 'EnemyBullet'); - if (obstacle && this.invulnerable < 0) { - if (obstacle.cgroup === 'Enemy') { - this.lives -= 25; - } else { - this.lives -= 5; - } - obstacle.kill = true; - - // Are we completely, like, dead? - if (this.lives < 0) { - this.kill = true; - } else { - // Set invulnerability for one second - this.invulnerable = ct.speed; - } - } - - // Deplete invulnerability - - this.invulnerable -= ct.delta; - ondraw: >- - // If we are invulnerable, alternate between full and partial opacity each - 10 frames - - // `this.invulnerable % 10` means 'get a fraction remainder when dividing - by 10' - - // `statement? 0.5 : 1` means that we pick 0.5 if the statement is true, - or 1 otherwise - - if (this.invulnerable > 0) { - var damaged = this.invulnerable % 10 > 5; - this.tint = damaged? 0xFF6666 : 0xFFFFFF; - } else { - this.alpha = 1; - } - ondestroy: |- - ct.emitters.fire('Explosion', this.x, this.y); - - localStorage.score = ct.room.score; - - ct.u.wait(2999) - .then(() => ct.rooms.switch('RetryScreen')); - uid: 1fab434d-0976-4b65-8390-d013695aba8c - lastmod: 1603949003131 - extends: {} - texture: e1452137-8cfa-4eec-b54a-0f2660326b48 + arguments: + action: Shoot + lib: core + type: template + loopAnimation: true - name: Laser_Simple_Blue depth: -1 - oncreate: |- - this.speed = 20; - this.direction = -90; - this.angle = this.direction; - this.cgroup = 'BulletsHeroes'; - - this.damage = 5; - onstep: |- - if (this.y < -48) { - this.kill = true; - } - - this.move(); - ondraw: '' - ondestroy: '' uid: 92e6ec14-1de0-483a-84b8-a8669ac65937 lastmod: 1641404461586 extends: {} texture: e6148099-65e7-4d2b-acf1-3e6b3a8fc033 + events: + - lib: core + arguments: {} + code: |- + this.speed = 20; + this.direction = -90; + this.angle = this.direction; + this.cgroup = 'BulletsHeroes'; + + this.damage = 5; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.y < -48) { + this.kill = true; + } + + this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: Asteroid depth: 1 - oncreate: |- - // Randomize texture - this.tex = ct.random.dice('Chunk_01', 'Chunk_02'); + uid: 1fa16a0f-e9a0-4117-9c28-87fa72b33d2b + lastmod: 1661144159335 + extends: {} + texture: 1a904383-2edd-4435-a37b-17148f44e0e0 + events: + - lib: core + arguments: {} + code: |- + // Randomize texture + this.tex = ct.random.dice('Chunk_01', 'Chunk_02'); - this.speed = ct.random.range(1, 3); - this.direction = 90 + ct.random.range(-3, 3); - this.rotateSpeed = ct.random.range(-1, 1); - this.angle = ct.random.deg(); - this.scale.x = this.scale.y = ct.random.range(0.5, 1); + this.speed = ct.random.range(1, 3); + this.direction = 90 + ct.random.range(-3, 3); + this.rotateSpeed = ct.random.range(-1, 1); + this.angle = ct.random.deg(); + this.scale.x = this.scale.y = ct.random.range(0.5, 1); - this.health = this.scale.x * 30; + this.health = this.scale.x * 30; - this.cgroup = 'Enemy'; - onstep: |- - this.move(); + this.cgroup = 'Enemy'; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + this.move(); - this.angle += this.rotateSpeed * ct.delta; - var obstacle = ct.place.occupied(this, this.x, this.y, 'BulletsHeroes'); - if (!obstacle) { - obstacle = ct.place.occupied(this, this.x, this.y, 'EnemyBullet'); - } - if (obstacle) { + this.angle += this.rotateSpeed * ct.delta; + + + var obstacle = ct.place.occupied(this, this.x, this.y, + 'BulletsHeroes'); + + if (!obstacle) { + obstacle = ct.place.occupied(this, this.x, this.y, 'EnemyBullet'); + } + if (obstacle) { - calculateDamage(this, obstacle); + if (obstacle) { + calculateDamage(this, obstacle); + } + this.addSpeed(obstacle.speed * 0.1, obstacle.direction); } - this.addSpeed(obstacle.speed * 0.1, obstacle.direction); - } - if (this.x < -200 || - this.x > ct.camera.width + 200 || - this.y < -200 || - this.y > ct.camera.height + 200 - ) { - this.kill = true; - this.skipOnDestroy = true; - } - ondraw: '' - ondestroy: |- - if (this.skipOnDestroy) { - return; - } - ct.emitters.fire('ChunkBurst', this.x, this.y); - ct.room.score += 10; - uid: 1fa16a0f-e9a0-4117-9c28-87fa72b33d2b - lastmod: 1603949085987 - extends: {} - texture: 1a904383-2edd-4435-a37b-17148f44e0e0 + + if (this.x < -200 || + this.x > ct.camera.width + 200 || + this.y < -200 || + this.y > ct.camera.height + 200 + ) { + this.kill = true; + this.skipOnDestroy = true; + } + eventKey: OnStep + - lib: core + arguments: {} + code: |- + if (this.skipOnDestroy) { + return; + } + ct.emitters.fire('ChunkBurst', this.x, this.y); + ct.room.score += 10; + eventKey: OnDestroy + type: template + loopAnimation: true - name: Laser_Cross_Blue depth: -1 - oncreate: |- - this.vspeed = -10; - this.cgroup = 'BulletsHeroes'; - this.phase = 0; - ct.emitters.follow(this, 'Electricity'); - - this.damage = 7.5; - onstep: |- - if (this.y < -48) { - this.kill = true; - } - - this.phase += ct.delta * 0.1; - this.x = this.xstart + Math.sin(this.phase) * 75 * this.scale.x; - this.move(); - ondraw: '' - ondestroy: '' uid: 140f8bde-bd06-4b2d-a5f2-87427848252e - lastmod: 1603949097147 + lastmod: 1661144163686 extends: {} texture: 4b86d5c4-ae3c-4edf-90d7-79a6778e9a29 + events: + - lib: core + arguments: {} + code: |- + this.vspeed = -10; + this.cgroup = 'BulletsHeroes'; + this.phase = 0; + ct.emitters.follow(this, 'Electricity'); + + this.damage = 7.5; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.y < -48) { + this.kill = true; + } + + this.phase += ct.delta * 0.1; + this.x = this.xstart + Math.sin(this.phase) * 75 * this.scale.x; + this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: GameController depth: 0 - oncreate: |- - this.asteroidTimer = ct.speed * 3; - this.encounterTimer = ct.speed * 10; - this.waveTimer = ct.speed * 30; - this.ufoTimer = ct.speed * 75; - onstep: |- - this.asteroidTimer -= ct.delta; - if (this.asteroidTimer <= 0) { - this.asteroidTimer = ct.random.range(ct.speed * 0.5, ct.speed * 3); - ct.templates.copy('AbstractMeteor', ct.random(ct.camera.width), -100); - } + uid: ca579f27-f97b-4ca2-98f6-c1c3e13acad5 + lastmod: 1603949150947 + extends: {} + texture: -1 + events: + - lib: core + arguments: {} + code: |- + this.asteroidTimer = ct.speed * 3; + this.encounterTimer = ct.speed * 10; + this.waveTimer = ct.speed * 30; + this.ufoTimer = ct.speed * 75; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.asteroidTimer -= ct.delta; + if (this.asteroidTimer <= 0) { + this.asteroidTimer = ct.random.range(ct.speed * 0.5, ct.speed * 3); + ct.templates.copy('AbstractMeteor', ct.random(ct.camera.width), -100); + } - this.encounterTimer -= ct.delta; - if (this.encounterTimer <= 0) { - this.encounterTimer = ct.random.range(ct.speed * 4, ct.speed * 7); - ct.templates.copy('Enemy_Shooter', ct.random(ct.camera.width), -100); - } + this.encounterTimer -= ct.delta; + if (this.encounterTimer <= 0) { + this.encounterTimer = ct.random.range(ct.speed * 4, ct.speed * 7); + ct.templates.copy('Enemy_Shooter', ct.random(ct.camera.width), -100); + } - this.waveTimer -= ct.delta; - if (this.waveTimer <= 0) { - this.waveTimer = ct.random.range(ct.speed * 20, ct.speed * 45); + this.waveTimer -= ct.delta; + if (this.waveTimer <= 0) { + this.waveTimer = ct.random.range(ct.speed * 20, ct.speed * 45); - // create 5 enemies, one by one in 1.4 seconds - ct.templates.copy('Enemy_Wiggler', 0, -100); - ct.u.wait(350) - .then(() => { - ct.templates.copy('Enemy_Wiggler', 0, -100); - }) - .then(() => ct.u.wait(350)) - .then(() => { - ct.templates.copy('Enemy_Wiggler', 0, -100); - }) - .then(() => ct.u.wait(350)) - .then(() => { - ct.templates.copy('Enemy_Wiggler', 0, -100); - }) - .then(() => ct.u.wait(350)) - .then(() => { + // create 5 enemies, one by one in 1.4 seconds ct.templates.copy('Enemy_Wiggler', 0, -100); - }); - } + ct.u.wait(350) + .then(() => { + ct.templates.copy('Enemy_Wiggler', 0, -100); + }) + .then(() => ct.u.wait(350)) + .then(() => { + ct.templates.copy('Enemy_Wiggler', 0, -100); + }) + .then(() => ct.u.wait(350)) + .then(() => { + ct.templates.copy('Enemy_Wiggler', 0, -100); + }) + .then(() => ct.u.wait(350)) + .then(() => { + ct.templates.copy('Enemy_Wiggler', 0, -100); + }); + } - this.ufoTimer -= ct.delta; - if (this.ufoTimer <= 0) { - this.ufoTimer = ct.random.range(ct.speed * 60, ct.speed * 90); - ct.templates.copy('Enemy_Ufo', ct.random(ct.camera.width), -100); - } - ondraw: '' - ondestroy: '' - uid: ca579f27-f97b-4ca2-98f6-c1c3e13acad5 - lastmod: 1603949150947 - extends: {} - texture: -1 + this.ufoTimer -= ct.delta; + if (this.ufoTimer <= 0) { + this.ufoTimer = ct.random.range(ct.speed * 60, ct.speed * 90); + ct.templates.copy('Enemy_Ufo', ct.random(ct.camera.width), -100); + } + eventKey: OnStep + type: template + loopAnimation: true - name: Logo depth: 0 - oncreate: |- - // The logo floats vertically. Let's use a sine function for that. - // We will need a variable to change its phase - - this.phase = 0; - onstep: '' - ondraw: |- - this.phase += 2.5 / 60 * ct.delta; - if (this.phase > Math.PI * 2) { - this.phase -= Math.PI * 2; - } - - this.y = this.ystart + Math.sin(this.phase) * 8; - ondestroy: '' uid: 319c6995-59f3-4267-a1de-cf58f77614d3 lastmod: 1603949138461 extends: {} texture: 968baf79-5ff3-443b-8834-fa3b55638500 - - name: StartButton - depth: 0 - oncreate: '' - onstep: |- - if (ct.actions.Touch.pressed) { - if (ct.mouse.hovers(this) || ct.touch.collide(this)) { - ct.transition.fadeOut() - .then(() => { - ct.rooms.switch('InGame'); - }); + events: + - lib: core + arguments: {} + code: |- + // The logo floats vertically. Let's use a sine function for that. + // We will need a variable to change its phase + + this.phase = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.phase += 2.5 / 60 * ct.delta; + if (this.phase > Math.PI * 2) { + this.phase -= Math.PI * 2; } - } - if (ct.touch.enabled) { - if (ct.touch.hovers(this)) { - ct.transition.fadeOut() - .then(() => { - ct.rooms.switch('InGame'); - }); - } - } - ondraw: '' - ondestroy: '' + this.y = this.ystart + Math.sin(this.phase) * 8; + eventKey: OnDraw + type: template + loopAnimation: true + - name: StartButton + depth: 0 uid: 972bb4d9-7cfc-4dbe-bc30-883562271057 - lastmod: 1603949128699 + lastmod: 1661093185304 extends: {} texture: 2a454e11-3441-4f57-bfb6-ce837acd7881 + events: + - eventKey: OnPointerClick + code: |- + ct.transition.fadeOut() + .then(() => { + ct.rooms.switch('InGame'); + }); + arguments: {} + lib: core + type: template + loopAnimation: true - name: AbstractBonus depth: 3 - oncreate: |- - // get the player - var player = ct.templates.list['Player_Blue'][0]; - if (player.lives < 90) { - // add a chance to spawn a life bonus if there is 2 or less lives - this.tex = ct.random.dice('Bonus_Lives', 'Bonus_Spread', 'Bonus_Bolt', 'Bonus_Cross', 'Bonus_Slowmo'); - } else { - this.tex = ct.random.dice('Bonus_Spread', 'Bonus_Bolt', 'Bonus_Cross', 'Bonus_Slowmo'); - } - - this.speed = 3; - this.direction = 90; - console.log(this.tex); - onstep: |- - this.move(); + uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 + lastmod: 1661093465128 + extends: {} + texture: 25fb712b-0aca-4b18-8e10-7c545d4bca8d + events: + - lib: core + arguments: {} + code: |- + // get the player + var player = ct.templates.list['Player_Blue'][0]; + if (player.lives < 90) { + // add a chance to spawn a life bonus if there is 2 or less lives + this.tex = ct.random.dice('Bonus_Lives', 'Bonus_Spread', 'Bonus_Bolt', 'Bonus_Cross', 'Bonus_Slowmo'); + } else { + this.tex = ct.random.dice('Bonus_Spread', 'Bonus_Bolt', 'Bonus_Cross', 'Bonus_Slowmo'); + } - var player = ct.place.meet(this, this.x, this.y, 'Player_Blue'); - if (player) { + this.speed = 3; + this.direction = 90; + console.log(this.tex); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.move(); + + // Destroy bonus if it fell off the screen + if (this.y > ct.camera.height + 48) { + this.kill = true; + } + eventKey: OnStep + - eventKey: collisionTemplate + code: |- ct.sound.spawn('Bonus'); if (this.tex === 'Bonus_Lives') { - player.lives += 25; + other.lives += 25; // Don't allow the health to overflow - if (player.lives > 100) { - player.lives = 100; + if (other.lives > 100) { + other.lives = 100; } } else if (this.tex === 'Bonus_Slowmo') { ct.sound.spawn('SlowmoEffect'); + // Dark sorcery; see "Tips & Tricks > Pausing a game" in the built-in docs. ct.tween.add({ obj: ct.pixiApp.ticker, fields: { @@ -436,240 +509,268 @@ templates: useUiDelta: true })); } else { + // Depenging on a texture name, set player's weapon to a specific type var graphToWeaponMap = { 'Bonus_Spread': 'spread', 'Bonus_Bolt': 'bolt', 'Bonus_Cross': 'cross' }; - player.weapon = graphToWeaponMap[this.tex]; + other.weapon = graphToWeaponMap[this.tex]; } // Consume bonus this.kill = true; - } - - // Destroy bonus if it fell off the screen - if (this.y > ct.camera.height + 48) { - this.kill = true; - } - ondraw: '' - ondestroy: '' - uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 - lastmod: 1603949079971 - extends: {} - texture: 25fb712b-0aca-4b18-8e10-7c545d4bca8d + arguments: + template: 1fab434d-0976-4b65-8390-d013695aba8c + lib: place + type: template + loopAnimation: true - name: Enemy_Shooter depth: 2 - oncreate: >- - // This mob will slowly move to the bottom of the screen, shooting - projectiles + uid: 500fd472-19aa-41a0-9504-123c37540702 + lastmod: 1641404176324 + extends: {} + texture: 048b77d3-e7e3-4817-99ee-8b7c0a6da8bf + events: + - lib: core + arguments: {} + code: >- + // This mob will slowly move to the bottom of the screen, shooting + projectiles + + // from time to time - // from time to time + this.speed = 3; - this.speed = 3; + this.direction = 90 + ct.random.range(-20, 20); - this.direction = 90 + ct.random.range(-20, 20); + this.angle = this.direction + 90; - this.angle = this.direction + 90; + this.scale.x = -1; - this.scale.x = -1; + this.cgroup = 'Enemy'; - this.cgroup = 'Enemy'; + this.shootTimer = 2 * ct.speed; - this.shootTimer = 2 * ct.speed; + this.health = 20; - this.health = 20; + ct.emitters.append(this, 'JetFlame', { + position: { + x: 0, + y: 75 + } + }); + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + this.move(); + + + this.shootTimer -= ct.delta; - ct.emitters.append(this, 'JetFlame', { - position: { - x: 0, - y: 75 + if (this.shootTimer < 0) { + ct.templates.copy('EnemyBullet', this.x, this.y); + this.shootTimer = 3 * ct.speed; } - }); - onstep: |- - this.move(); - - this.shootTimer -= ct.delta; - if (this.shootTimer < 0) { - ct.templates.copy('EnemyBullet', this.x, this.y); - this.shootTimer = 3 * ct.speed; - } - var obstacle = ct.place.occupied(this, this.x, this.y, 'BulletsHeroes'); - if (obstacle) { - calculateDamage(this, obstacle); - } - if (this.y > ct.camera.height + 100) { - this.kill = true; - this.skipOnDestroy = true; - } - ondraw: '' - ondestroy: >- - if (this.skipOnDestroy) { - return; - } + var obstacle = ct.place.occupied(this, this.x, this.y, + 'BulletsHeroes'); + + if (obstacle) { + calculateDamage(this, obstacle); + } + - ct.emitters.fire('Explosion', this.x, this.y); + if (this.y > ct.camera.height + 100) { + this.kill = true; + this.skipOnDestroy = true; + } + eventKey: OnStep + - lib: core + arguments: {} + code: >- + if (this.skipOnDestroy) { + return; + } - ct.sound.spawn(ct.random.dice('Explosion_01', 'Explosion_02', - 'Explosion_03')); + ct.emitters.fire('Explosion', this.x, this.y); + ct.sound.spawn(ct.random.dice('Explosion_01', 'Explosion_02', + 'Explosion_03')); - if (ct.random.chance(20)) { - ct.templates.copy('AbstractBonus', this.x, this.y); - } + if (ct.random.chance(20)) { + ct.templates.copy('AbstractBonus', this.x, this.y); + } - ct.room.score += 100; - uid: 500fd472-19aa-41a0-9504-123c37540702 - lastmod: 1641404176324 - extends: {} - texture: 048b77d3-e7e3-4817-99ee-8b7c0a6da8bf + + ct.room.score += 100; + eventKey: OnDestroy + type: template + loopAnimation: true - name: EnemyBullet depth: -1 - oncreate: |- - this.speed = 10; - this.damage = 5; - this.direction = this.direction || 90; - this.angle = this.direction; - ct.sound.spawn('Laser_Big'); - onstep: |- - this.move(); - - // Destroy a bullet if it fell off the screen - if (this.y > ct.camera.height + 32) { - this.kill = true; - } - ondraw: '' - ondestroy: '' uid: 65a71d76-039a-4e20-8433-d20277dd2402 - lastmod: 1603949111947 + lastmod: 1661093488384 extends: cgroup: EnemyBullet texture: fc3e2f9b-61af-4ae4-9375-dcfae65f6a34 + events: + - lib: core + arguments: {} + code: |- + this.speed = 10; + this.damage = 5; + this.direction = this.direction || 90; + this.angle = this.direction; + ct.sound.spawn('Laser_Big'); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.move(); + + // Destroy a bullet if it fell off the screen + if (this.y > ct.camera.height + 32) { + this.kill = true; + } + eventKey: OnStep + type: template + loopAnimation: true - name: Enemy_Wiggler depth: 2 - oncreate: |- - // This mob will move in a sine wave and emit projectiles randomly - this.phase = this.phase || 0; - - this.cgroup = 'Enemy'; - - this.shootTimer = 2 * ct.speed; - ct.emitters.append(this, 'JetFlame', { - position: { - x: 0, - y: 100 - } - }); + uid: 9d0992a4-d0ef-4c5e-9d17-2e5167f26598 + lastmod: 1603949092067 + extends: {} + texture: 16c209a9-25b2-41e4-b0d5-21cb22fd1421 + events: + - lib: core + arguments: {} + code: |- + // This mob will move in a sine wave and emit projectiles randomly + this.phase = this.phase || 0; + + this.cgroup = 'Enemy'; + + this.shootTimer = 2 * ct.speed; + ct.emitters.append(this, 'JetFlame', { + position: { + x: 0, + y: 100 + } + }); - this.health = 10; - onstep: >- - this.phase += 1 / 60 * ct.delta; + this.health = 10; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + this.phase += 1 / 60 * ct.delta; - this.y += 2 * ct.delta; + this.y += 2 * ct.delta; - this.x = Math.sin(this.phase) * (ct.camera.width * 0.4) + ct.camera.width - / 2; + this.x = Math.sin(this.phase) * (ct.camera.width * 0.4) + + ct.camera.width / 2; - this.shootTimer -= ct.delta; + this.shootTimer -= ct.delta; - if (this.shootTimer < 0 && ct.templates.list['Player_Blue'].length) { - const hero = ct.templates.list['Player_Blue'][0]; - const bullet = ct.templates.copy('EnemyBullet', this.x, this.y); - bullet.direction = bullet.angle = ct.u.pdn(this.x, this.y, hero.x, hero.y) - this.shootTimer = 3 * ct.speed; - } + if (this.shootTimer < 0 && ct.templates.list['Player_Blue'].length) { + const hero = ct.templates.list['Player_Blue'][0]; + const bullet = ct.templates.copy('EnemyBullet', this.x, this.y); + bullet.direction = bullet.angle = ct.u.pdn(this.x, this.y, hero.x, hero.y) + this.shootTimer = 3 * ct.speed; + } - var obstacle = ct.place.occupied(this, this.x, this.y, 'BulletsHeroes'); + var obstacle = ct.place.occupied(this, this.x, this.y, + 'BulletsHeroes'); - if (obstacle) { - calculateDamage(this, obstacle); - } + if (obstacle) { + calculateDamage(this, obstacle); + } - if (this.y > ct.camera.height + 100) { - this.kill = true; - this.skipOnDestroy = true; - } - ondraw: 'this.angle = ct.u.pdn(this.xprev, this.yprev, this.x, this.y) + 90;' - ondestroy: >- - if (this.skipOnDestroy) { - return; - } + if (this.y > ct.camera.height + 100) { + this.kill = true; + this.skipOnDestroy = true; + } + eventKey: OnStep + - lib: core + arguments: {} + code: >- + if (this.skipOnDestroy) { + return; + } - ct.emitters.fire('Explosion', this.x, this.y); + ct.emitters.fire('Explosion', this.x, this.y); - ct.sound.spawn(ct.random.dice('Explosion_01', 'Explosion_02', - 'Explosion_03')); + ct.sound.spawn(ct.random.dice('Explosion_01', 'Explosion_02', + 'Explosion_03')); - if (ct.random.chance(10)) { - ct.templates.copy('AbstractBonus', this.x, this.y); - } + if (ct.random.chance(10)) { + ct.templates.copy('AbstractBonus', this.x, this.y); + } - ct.room.score += 75; - uid: 9d0992a4-d0ef-4c5e-9d17-2e5167f26598 - lastmod: 1603949092067 - extends: {} - texture: 16c209a9-25b2-41e4-b0d5-21cb22fd1421 + ct.room.score += 75; + eventKey: OnDestroy + - lib: core + arguments: {} + code: 'this.angle = ct.u.pdn(this.xprev, this.yprev, this.x, this.y) + 90;' + eventKey: OnDraw + type: template + loopAnimation: true - name: Laser_Bolt_Blue depth: 0 - oncreate: |- - this.speed = 25; - this.direction = 270; - this.cgroup = 'BulletsHeroes'; - ct.emitters.follow(this, 'PowerBoltTrail'); - - this.damage = 20; - onstep: |- - if (this.y < -48) { - this.kill = true; - } - - this.move(); - ondraw: '' - ondestroy: '' uid: 912af24f-1569-46a3-9194-fbf0384f3b0e lastmod: 1603949101051 extends: {} texture: c12edc06-ad3f-49f4-b9d4-3d33226e9ecc + events: + - lib: core + arguments: {} + code: |- + this.speed = 25; + this.direction = 270; + this.cgroup = 'BulletsHeroes'; + ct.emitters.follow(this, 'PowerBoltTrail'); + + this.damage = 20; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.y < -48) { + this.kill = true; + } + + this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: Enemy_Bomber depth: 3 - oncreate: |- - this.targetx = ct.random.range(75, ct.camera.width - 150); - this.targety = ct.random.range(75, 300); - this.angle = -180; - - ct.tween.add({ - obj: this, - fields: { - x: this.targetx, - y: this.targety - }, - duration: 1500 - }); - - // this mob will be quite sturdy - this.health = 120; - - this.jumpTimer = ct.speed * 2; - onstep: |- - this.jumpTimer -= ct.delta; - if (this.jumpTimer < 0) { - // Start jumping to a new location - this.jumpTimer = ct.speed * 2; - this.targetx = ct.random.range(75, ct.camera.width - 75); + uid: ebfeaaab-f16a-48fa-b97c-687945f99668 + lastmod: 1641404549522 + extends: {} + texture: 771c5c1f-ffdc-4b50-a1ce-aed472e44557 + events: + - lib: core + arguments: {} + code: |- + this.targetx = ct.random.range(75, ct.camera.width - 150); this.targety = ct.random.range(75, 300); + this.angle = -180; + ct.tween.add({ obj: this, fields: { @@ -679,506 +780,613 @@ templates: duration: 1500 }); - var bullet1 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); - bullet1.direction = 90 - 30; - var bullet2 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); - bullet2.direction = 90 + 30; - var bullet3 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); - bullet3.direction = 90 - 60; - var bullet4 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); - bullet4.direction = 90 + 60; - } + // this mob will be quite sturdy + this.health = 120; - var obstacle = ct.place.occupied(this, this.x, this.y, 'BulletsHeroes'); - if (obstacle) { - calculateDamage(this, obstacle); - } - ondraw: '' - ondestroy: >- - ct.emitters.fire('Explosion', this.x, this.y); + this.jumpTimer = ct.speed * 2; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + this.jumpTimer -= ct.delta; + + if (this.jumpTimer < 0) { + // Start jumping to a new location + this.jumpTimer = ct.speed * 2; + this.targetx = ct.random.range(75, ct.camera.width - 75); + this.targety = ct.random.range(75, 300); + ct.tween.add({ + obj: this, + fields: { + x: this.targetx, + y: this.targety + }, + duration: 1500 + }); - ct.sound.spawn(ct.random.dice('Explosion_01', 'Explosion_02', - 'Explosion_03')); + var bullet1 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); + bullet1.direction = 90 - 30; + var bullet2 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); + bullet2.direction = 90 + 30; + var bullet3 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); + bullet3.direction = 90 - 60; + var bullet4 = ct.templates.copy('Laser_Cross_Red', this.x, this.y); + bullet4.direction = 90 + 60; + } - ct.templates.copy('AbstractBonus', this.x, this.y); - uid: ebfeaaab-f16a-48fa-b97c-687945f99668 - lastmod: 1641404549522 - extends: {} - texture: 771c5c1f-ffdc-4b50-a1ce-aed472e44557 - - name: Laser_Cross_Red - depth: 0 - oncreate: |- - this.speed = 10; - this.damage = 5; - this.direction = ct.random.range(90-45, 90+45); - if (!this.noSound) { - ct.sound.spawn('Laser_Big'); - } + var obstacle = ct.place.occupied(this, this.x, this.y, + 'BulletsHeroes'); - this.angle = ct.random.deg(); - onstep: |- - this.angle -= 4.5 * ct.delta; - this.move(); + if (obstacle) { + calculateDamage(this, obstacle); + } + eventKey: OnStep + - lib: core + arguments: {} + code: >- + ct.emitters.fire('Explosion', this.x, this.y); - // Destroy a bullet if it fell off the screen - if (this.y > ct.camera.height + 32) { - this.kill = true; - } - ondraw: '' - ondestroy: '' + ct.sound.spawn(ct.random.dice('Explosion_01', 'Explosion_02', + 'Explosion_03')); + + ct.templates.copy('AbstractBonus', this.x, this.y); + eventKey: OnDestroy + type: template + loopAnimation: true + - name: Laser_Cross_Red + depth: 0 uid: 45f606db-1ce3-4b21-bc14-b84e35543509 - lastmod: 1603949122763 + lastmod: 1661093478784 extends: cgroup: EnemyBullet texture: dc0d71ec-6da8-40e8-afe8-90c81f7f269a + events: + - lib: core + arguments: {} + code: |- + this.speed = 10; + this.damage = 5; + this.direction = ct.random.range(90-45, 90+45); + + if (!this.noSound) { + ct.sound.spawn('Laser_Big'); + } + + this.angle = ct.random.deg(); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.angle -= 4.5 * ct.delta; + this.move(); + + // Destroy a bullet if it fell off the screen + if (this.y > ct.camera.height + 32) { + this.kill = true; + } + eventKey: OnStep + type: template + loopAnimation: true - name: OhNo depth: 0 - oncreate: '' - onstep: this.move(); - ondraw: '' - ondestroy: '' uid: a6d37145-b35c-42d2-95c6-765069857ada lastmod: 1603949135651 extends: {} texture: e81fc53e-4f0a-443d-a4fb-e5e11a4a98d2 + events: + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + type: template + loopAnimation: true - name: RetryButton depth: 0 - oncreate: '' - onstep: |- - if (ct.actions.Touch.pressed) { - if (ct.mouse.hovers(this) || ct.touch.collide(this)) { - ct.sound.stop('Music_BossTheme'); - ct.sound.stop('Music_MainTheme'); - ct.rooms.switch('InGame'); - } - } - ondraw: '' - ondestroy: '' uid: 73759c16-fba4-4134-b048-e53aa4d2f34b - lastmod: 1603949126108 + lastmod: 1661093204465 extends: {} texture: 071162b9-d836-4145-9515-586ce289ef14 + events: + - eventKey: OnPointerClick + code: |- + ct.sound.stop('Music_BossTheme'); + ct.sound.stop('Music_MainTheme'); + ct.rooms.switch('InGame'); + arguments: {} + lib: core + type: template + loopAnimation: true - name: Joystick depth: 0 - oncreate: |- - this.button = ct.vkeys.joystick({ - key: "Vjoy1", - tex: "Joystick_Center", - trackballTex: "Joystick_Move", - x: () => this.x, - y: () => this.y, - depth: 1000, - }); - this.visible = false; - onstep: this.move(); - ondraw: |- - this.button.x = this.x; - this.button.y = this.y; - ondestroy: '' uid: c78818a4-c20e-46b9-8a39-9fbb5a83eabe texture: 847c402c-dbd5-4971-ba6d-f2fca6d156bd extends: {} - lastmod: 1586163798708 + lastmod: 1661093502047 + events: + - lib: core + arguments: {} + code: |- + this.button = ct.vkeys.joystick({ + key: "Vjoy1", + tex: "Joystick_Center", + trackballTex: "Joystick_Move", + x: () => this.x, + y: () => this.y, + depth: 1000, + }); + this.visible = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.button.x = this.x; + this.button.y = this.y; + eventKey: OnDraw + type: template + loopAnimation: true - name: Button_Shoot depth: 0 - oncreate: |- - this.button = ct.vkeys.button({ - key: "Vk1", - texNormal: "Button_Shoot", - texActive: "Button_Shoot", - texHover: "Button_Shoot", - x: () => this.x, - y: () => this.y, - depth: 1000 - }); - this.button.visible = false; - onstep: this.move(); - ondraw: |- - this.button.x = this.x; - this.button.y = this.y; - ondestroy: '' uid: b334b5ec-69b4-4c0d-bd50-709cf9bfa60d texture: 13433dd6-9fec-4244-8188-d6ec14a51974 extends: {} - lastmod: 1588678468799 + lastmod: 1661093494575 + events: + - lib: core + arguments: {} + code: |- + this.button = ct.vkeys.button({ + key: "Vk1", + texNormal: "Button_Shoot", + texActive: "Button_Shoot", + texHover: "Button_Shoot", + x: () => this.x, + y: () => this.y, + depth: 1000 + }); + this.button.visible = false; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + this.button.x = this.x; + this.button.y = this.y; + eventKey: OnDraw + type: template + loopAnimation: true - name: DatBoss depth: 3 - oncreate: >- - this.angle = -180; - - - this.health = 1500; - - ct.templates.copy('Healthbar_Base_Boss', 0, 0, {}, - ct.rooms.list['UI_Layer'][0]); - - - ct.sound.spawn('Music_BossTheme', { - loop: true, - volume: 0.6 - }); - - ct.sound.stop('Music_MainTheme'); - - - this.shootTimer = 0; - - - ct.emitters.append(this, 'JetFlame', { - position: { - x: -75, - y: 150 - } - }); - - ct.emitters.append(this, 'JetFlame', { - position: { - x: 75, - y: 150 - } - }); - - - - // This will define what the boss currently does - - // stage 0: drive to the starting location - - // stage 1: drive to the right/left edge and spawn bullets in all - directions while sliding to the opposite edge, creating valleys of - negative space - - // stage 2: spawn two symmetrical waves of wigglers + uid: 1ef4f56c-b0cc-497b-bd3f-e06eb1c2308d + texture: afba4114-e7bc-4b35-8386-d9ca108ca777 + extends: {} + lastmod: 1661144349721 + events: + - lib: core + arguments: {} + code: >- + this.angle = -180; - // stage 3: start pulling everything into its path and shoot in random - directions - // stage 4: float a bit to left and right and pew pew continuously at the - player's ship + this.health = 1500; - this.stage = 0; + ct.templates.copyIntoRoom('Healthbar_Base_Boss', 0, 0, + ct.rooms.list['UI_Layer'][0]); - this.stageSelector = () => new Promise(resolve => { - // stage 0: drive to the starting location - if (this.stage === 0) { - return ct.tween.add({ - obj: this, - fields: { - x : ct.camera.width / 2, - y: ct.camera.height * 0.15 - }, - duration: 3000 - }).then(() => { - this.stage = ct.random.dice(1, 2, 3, 4); - }).then(() => this.stageSelector()); - } - // stage 1: drive to the right/left edge and spawn bullets in all directions while sliding to the opposite edge, creating valleys of negative space - if (this.stage === 1) { - const startLocationX = ct.random.dice( - ct.camera.width * 0.2, - ct.camera.width * 0.8 - ), endLocationX = ct.camera.width - startLocationX; - return ct.tween.add({ - obj: this, - fields: { - x: startLocationX - }, - duration: 1000 - }) - .then(() => { - this.shootStar = true; - }) - .then(() => ct.tween.add({ - obj: this, - fields: { - x: endLocationX - }, - duration: 8000 - })).then(() => { - this.shootStar = false; - this.stage = 0; - return this.stageSelector(); - }); - } - // stage 2: spawn two symmetrical waves of wigglers - // and wiggle by itself as well - if (this.stage === 2) { - spawnWigglers(0); - spawnWigglers(Math.PI / 2); - return ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.4 - }, - duration: 2000 - }).then(() => ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.6 - }, - duration: 2000 - })) - .then(() => ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.4 - }, - duration: 2000 - })) - .then(() => ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.5 - }, - duration: 1500 - })) - .then(() => { - this.stage = ct.random.dice(1, 3, 4); - }) - .then(() => this.stageSelector()); - } - // stage 3: start pulling everything into its path and shoot in random directions - // for 10 seconds - if (this.stage === 3) { - ct.sound.spawn('BlackHole'); - ct.emitters.follow(this, 'BlackHole'); - ct.room.pullPlayerIn = true; - this.shootRandom = true; - return ct.u.wait(10*1000) - .then(() => { - ct.room.pullPlayerIn = false; - this.shootRandom = false; - this.stage = ct.random.dice(1, 2, 4); - return this.stageSelector(); - }); - } + ct.sound.spawn('Music_BossTheme', { + loop: true, + volume: 0.6 + }); - // stage 4: float a bit to left and right and pew pew continuously at the player's ship - // We will also eat a bit of player's space - if (this.stage === 4) { - this.shootAtPlayer = true; - return ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.25, - y: ct.camera.height * 0.2 - }, - duration: 3000 - }).then(() => ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.75, - y: ct.camera.height * 0.25 - }, - duration: 3000 - })) - .then(() => ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.25, - y: ct.camera.height * 0.3 - }, - duration: 3000 - })) - .then(() => ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.75, - y: ct.camera.height * 0.35 - }, - duration: 3000 - })) - .then(() => { - this.stage = 0; - this.shootAtPlayer = false; - }) - .then(() => this.stageSelector()); - } - }); + ct.sound.stop('Music_MainTheme'); - this.stageSelector(); - onstep: |- - if (this.shootRandom || this.shootAtPlayer || this.shootStar) { - this.shootTimer -= ct.delta; - if (this.shootTimer <= 0) { - if (this.shootRandom) { - const bullet = ct.templates.copy('Laser_Cross_Red', this.x, this.y - 80); - bullet.angle = ct.random.range(240, -60); - this.shootTimer += 10; - } else if (this.shootAtPlayer && ct.templates.list['Player_Blue'].length) { - this.shootTimer += 40; - const bullet = ct.templates.copy('Laser_Cross_Red', this.x, this.y - 80); - const player = ct.templates.list['Player_Blue'][0]; - bullet.angle = ct.u.pdn(this.x, this.y, player.x, player.y); - } else if (this.shootStar) { - for (let i = 180; i < 360; i += 30) { - const bullet = ct.templates.copy('Laser_Cross_Red', this.x, this.y - 80, { - noSound: true - }); - bullet.angle = i; + this.shootTimer = 0; + + + ct.emitters.append(this, 'JetFlame', { + position: { + x: -75, + y: 150 + } + }); + + ct.emitters.append(this, 'JetFlame', { + position: { + x: 75, + y: 150 + } + }); + + + + // This will define what the boss currently does + + // stage 0: drive to the starting location + + // stage 1: drive to the right/left edge and spawn bullets in all + directions while sliding to the opposite edge, creating valleys of + negative space + + // stage 2: spawn two symmetrical waves of wigglers + + // stage 3: start pulling everything into its path and shoot in random + directions + + // stage 4: float a bit to left and right and pew pew continuously at + the player's ship + + this.stage = 0; + + + this.stageSelector = () => new Promise(resolve => { + // stage 0: drive to the starting location + if (this.stage === 0) { + return ct.tween.add({ + obj: this, + fields: { + x : ct.camera.width / 2, + y: ct.camera.height * 0.15 + }, + duration: 3000, + silent: true + }).then(() => { + this.stage = ct.random.dice(1, 2, 3, 4); + }).then(() => this.stageSelector()); + } + // stage 1: drive to the right/left edge and spawn bullets in all directions while sliding to the opposite edge, creating valleys of negative space + if (this.stage === 1) { + const startLocationX = ct.random.dice( + ct.camera.width * 0.2, + ct.camera.width * 0.8 + ), endLocationX = ct.camera.width - startLocationX; + return ct.tween.add({ + obj: this, + fields: { + x: startLocationX + }, + duration: 1000, + silent: true + }) + .then(() => { + this.shootStar = true; + }) + .then(() => ct.tween.add({ + obj: this, + fields: { + x: endLocationX + }, + duration: 8000, + silent: true + })).then(() => { + this.shootStar = false; + this.stage = 0; + return this.stageSelector(); + }); + } + // stage 2: spawn two symmetrical waves of wigglers + // and wiggle by itself as well + if (this.stage === 2) { + spawnWigglers(0); + spawnWigglers(Math.PI / 2); + return ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.4 + }, + duration: 2000, + silent: true + }).then(() => ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.6 + }, + duration: 2000, + silent: true + })) + .then(() => ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.4 + }, + duration: 2000, + silent: true + })) + .then(() => ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.5 + }, + duration: 1500, + silent: true + })) + .then(() => { + this.stage = ct.random.dice(1, 3, 4); + }) + .then(() => this.stageSelector()); + } + // stage 3: start pulling everything into its path and shoot in random directions + // for 10 seconds + if (this.stage === 3) { + ct.sound.spawn('BlackHole'); + ct.emitters.follow(this, 'BlackHole'); + ct.room.pullPlayerIn = true; + this.shootRandom = true; + return ct.u.wait(10*1000) + .then(() => { + ct.room.pullPlayerIn = false; + this.shootRandom = false; + this.stage = ct.random.dice(1, 2, 4); + return this.stageSelector(); + }) + .catch(_ => void 0); + } + + // stage 4: float a bit to left and right and pew pew continuously at the player's ship + // We will also eat a bit of player's space + if (this.stage === 4) { + this.shootAtPlayer = true; + return ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.25, + y: ct.camera.height * 0.2 + }, + duration: 3000, + silent: true + }).then(() => ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.75, + y: ct.camera.height * 0.25 + }, + duration: 3000, + silent: true + })) + .then(() => ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.25, + y: ct.camera.height * 0.3 + }, + duration: 3000, + silent: true + })) + .then(() => ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.75, + y: ct.camera.height * 0.35 + }, + duration: 3000, + silent: true + })) + .then(() => { + this.stage = 0; + this.shootAtPlayer = false; + }) + .then(() => this.stageSelector()); + } + }); + + + this.stageSelector(); + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + if (this.shootRandom || this.shootAtPlayer || this.shootStar) { + this.shootTimer -= ct.delta; + if (this.shootTimer <= 0) { + if (this.shootRandom) { + const bullet = ct.templates.copy('Laser_Cross_Red', this.x, this.y - 80); + bullet.angle = ct.random.range(240, -60); + this.shootTimer += 10; + } else if (this.shootAtPlayer && ct.templates.list['Player_Blue'].length) { + this.shootTimer += 40; + const bullet = ct.templates.copy('Laser_Cross_Red', this.x, this.y - 80); + const player = ct.templates.list['Player_Blue'][0]; + bullet.angle = ct.u.pdn(this.x, this.y, player.x, player.y); + } else if (this.shootStar) { + for (let i = 180; i < 360; i += 30) { + const bullet = ct.templates.copy('Laser_Cross_Red', this.x, this.y - 80, { + noSound: true + }); + bullet.angle = i; + } + ct.sound.spawn('Laser_Big'); + this.shootTimer += 10; } - ct.sound.spawn('Laser_Big'); - this.shootTimer += 10; } } - } - var obstacle = ct.place.occupied(this, this.x, this.y, 'BulletsHeroes'); - if (obstacle) { - calculateDamage(this, obstacle); - } - - if (ct.room.pullPlayerIn && ct.templates.list['Player_Blue'].length) { - const player = ct.templates.list['Player_Blue'][0]; - player.addSpeed(ct.delta * 0.9, ct.u.pdn(player.x, player.y, this.x, this.y)); - } - ondraw: '' - ondestroy: |- - ct.room.score += 10000; + if (ct.room.pullPlayerIn && ct.templates.list['Player_Blue'].length) { + const player = ct.templates.list['Player_Blue'][0]; + player.addSpeed(ct.delta * 0.9, ct.u.pdn(player.x, player.y, this.x, this.y)); + } + eventKey: OnStep + - lib: core + arguments: {} + code: |- + ct.room.score += 10000; - ct.emitters.fire('Explosion_Boss', this.x, this.y); - ct.sound.spawn('Explosion_02'); + ct.emitters.fire('Explosion_Boss', this.x, this.y); + ct.sound.spawn('Explosion_02'); - ct.u.wait(1000 * 5) - .then(() => { - ct.rooms.switch('VictoryScreen'); - }); - uid: 1ef4f56c-b0cc-497b-bd3f-e06eb1c2308d - texture: afba4114-e7bc-4b35-8386-d9ca108ca777 - extends: {} - lastmod: 1588679303757 + ct.u.wait(1000 * 5) + .then(() => { + ct.rooms.switch('VictoryScreen'); + }); + eventKey: OnDestroy + - eventKey: collisionCGroup + code: 'calculateDamage(this, other);' + arguments: + group: BulletsHeroes + lib: place + type: template + loopAnimation: true - name: Healthbar_Base_Player depth: 0 - oncreate: >- - this.scale.y = 0.8; + uid: 1011221c-4f7b-45e7-b45a-ce886851d32c + texture: 850854a8-47dd-4041-9412-b4cca854dd90 + extends: {} + lastmod: 1603949023522 + events: + - lib: core + arguments: {} + code: >- + this.scale.y = 0.8; - this.healthBar = new PIXI.NineSlicePlane( - ct.res.getTexture('Healthbar_Bar', 0), - 15, 15, 15, 15 - ); + this.healthBar = new PIXI.NineSlicePlane( + ct.res.getTexture('Healthbar_Bar', 0), + 15, 15, 15, 15 + ); - /* this can be also written in one line */ + /* this can be also written in one line */ - /* where to place this bar */ + /* where to place this bar */ - this.healthBar.x = -397-10; + this.healthBar.x = -397-10; - this.healthBar.y = -46-6; + this.healthBar.y = -46-6; - /* Precise placing made with the aid of graphics editor */ + /* Precise placing made with the aid of graphics editor */ - const player = ct.templates.list['Player_Blue'][0] + const player = ct.templates.list['Player_Blue'][0] - this.healthBar.height = 52; + this.healthBar.height = 52; - this.healthBar.width = player.lives / 100 * (794 + 20); // Assuming that - the max health is 100 + this.healthBar.width = player.lives / 100 * (794 + 20); // Assuming + that the max health is 100 - this.addChild(this.healthBar); - onstep: this.move(); - ondraw: |- - if (ct.templates.list['Player_Blue'].length) { - const player = ct.templates.list['Player_Blue'][0]; - // calculate the needed length - const width = player.lives / 100 * (794 + 20); - // blend current and target length - this.healthBar.width = this.healthBar.width * 0.9 + width * 0.1; - } else { - // shrink to nothing - this.healthBar.width = this.healthBar.width * 0.9; - } - ondestroy: '' - uid: 1011221c-4f7b-45e7-b45a-ce886851d32c - texture: 850854a8-47dd-4041-9412-b4cca854dd90 - extends: {} - lastmod: 1603949023522 + this.addChild(this.healthBar); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + - lib: core + arguments: {} + code: |- + if (ct.templates.list['Player_Blue'].length) { + const player = ct.templates.list['Player_Blue'][0]; + // calculate the needed length + const width = player.lives / 100 * (794 + 20); + // blend current and target length + this.healthBar.width = this.healthBar.width * 0.9 + width * 0.1; + } else { + // shrink to nothing + this.healthBar.width = this.healthBar.width * 0.9; + } + eventKey: OnDraw + type: template + loopAnimation: true - name: Healthbar_Base_Boss depth: 0 - oncreate: >- - this.scale.y = -0.8; + uid: c465904b-7b03-4f27-8f28-f378e7bdd9cf + texture: 850854a8-47dd-4041-9412-b4cca854dd90 + extends: {} + lastmod: 1588679312168 + events: + - lib: core + arguments: {} + code: >- + this.scale.y = -0.8; - this.healthBar = new PIXI.NineSlicePlane( - ct.res.getTexture('Healthbar_BossBar', 0), - 15, 15, 15, 15 - ); + this.healthBar = new PIXI.NineSlicePlane( + ct.res.getTexture('Healthbar_BossBar', 0), + 15, 15, 15, 15 + ); - this.x = ct.camera.width / 2; + this.x = ct.camera.width / 2; - this.y = -100; + this.y = -100; - ct.tween.add({ - obj: this, - fields: { - y: 0 - }, - duration: 1000 - }); + ct.tween.add({ + obj: this, + fields: { + y: 0 + }, + duration: 1000 + }); - /* this can be also written in one line */ + /* this can be also written in one line */ - /* where to place this bar */ + /* where to place this bar */ - this.healthBar.x = -397-10; + this.healthBar.x = -397-10; - this.healthBar.y = -46-6; + this.healthBar.y = -46-6; - /* Precise placing made with the aid of graphics editor */ + /* Precise placing made with the aid of graphics editor */ - const boss = ct.templates.list['DatBoss'][0] + const boss = ct.templates.list['DatBoss'][0] - this.healthBar.height = 52; + this.healthBar.height = 52; - this.healthBar.width = boss.health / 1500 * (794 + 20); // Assuming that - the max health is 3000 + this.healthBar.width = boss.health / 1500 * (794 + 20); // Assuming + that the max health is 3000 - this.addChild(this.healthBar); - onstep: this.move(); - ondraw: |- - if (ct.templates.list['DatBoss'].length) { - const boss = ct.templates.list['DatBoss'][0]; - // calculate the needed length - const width = boss.health / 1500 * (794 + 20); - // blend current and target length - this.healthBar.width = width; - } else { - // shrink to nothing - this.healthBar.width = 0; - } - ondestroy: '' - uid: c465904b-7b03-4f27-8f28-f378e7bdd9cf - texture: 850854a8-47dd-4041-9412-b4cca854dd90 - extends: {} - lastmod: 1588679312168 + this.addChild(this.healthBar); + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + - lib: core + arguments: {} + code: |- + if (ct.templates.list['DatBoss'].length) { + const boss = ct.templates.list['DatBoss'][0]; + // calculate the needed length + const width = boss.health / 1500 * (794 + 20); + // blend current and target length + this.healthBar.width = width; + } else { + // shrink to nothing + this.healthBar.width = 0; + } + eventKey: OnDraw + type: template + loopAnimation: true - name: Victory depth: 0 - oncreate: |- - // The logo floats vertically. Let's use a sine function for that. - // We will need a variable to change its phase - - this.phase = 0; - onstep: this.move(); - ondraw: |- - this.phase += 2.5 / 60 * ct.delta; - if (this.phase > Math.PI * 2) { - this.phase -= Math.PI * 2; - } - - this.y = this.ystart + Math.sin(this.phase) * 8; - ondestroy: '' uid: ffbec9fc-299c-4aea-a4f1-1c4b27859fb6 lastmod: 1603949132771 extends: {} texture: 91f10290-e71c-4052-a64b-7aec34086e64 + events: + - lib: core + arguments: {} + code: |- + // The logo floats vertically. Let's use a sine function for that. + // We will need a variable to change its phase + + this.phase = 0; + eventKey: OnCreate + - lib: core + arguments: {} + code: this.move(); + eventKey: OnStep + - lib: core + arguments: {} + code: |- + this.phase += 2.5 / 60 * ct.delta; + if (this.phase > Math.PI * 2) { + this.phase -= Math.PI * 2; + } + + this.y = this.ystart + Math.sin(this.phase) * 8; + eventKey: OnDraw + type: template + loopAnimation: true sounds: - name: Laser_Small uid: 684d983f-9827-4ac8-9915-bd498154c5f4 @@ -1275,102 +1483,44 @@ styles: lastmod: 1588679110248 rooms: - name: InGame - oncreate: >- - ct.sound.spawn('Music_MainTheme', { - loop: true, - volume: 0.25 - }); - - - if (ct.touch.enabled) { - ct.rooms.append('Controls_Layer', {isUi: true}); - } - - ct.rooms.append('UI_Layer', {isUi: true}); - - - this.score = 0; - - - this.scoreLabel = new PIXI.Text('Score: ' + this.score, - ct.styles.get('ScoreText')); - - this.scoreLabel.x = this.scoreLabel.y = 20; - - this.scoreLabel.depth = 100; - - this.addChild(this.scoreLabel); - - - this.asteroidTimer = ct.speed * 3; - - this.encounterTimer = ct.speed * 5; - - this.waveTimer = ct.speed * 20; - - this.bomberTimer = ct.speed * 20; - - this.bossTimer = ct.speed * 60 * 1.5; - - - ct.transition.fadeIn(); - onstep: |- - this.asteroidTimer -= ct.delta; - if (this.asteroidTimer <= 0) { - this.asteroidTimer = ct.random.range(ct.speed * 0.5, ct.speed * 3); - ct.templates.copy('Asteroid', ct.random(ct.camera.width), -100); - } - - if (this.bossEncountered) { - // Stop spawning new entities if a boss has arrived - return; - } - this.encounterTimer -= ct.delta; - if (this.encounterTimer <= 0) { - this.encounterTimer = ct.random.range(ct.speed * 2, ct.speed * 7); - ct.templates.copy('Enemy_Shooter', ct.random(ct.camera.width), -100); - } - - this.waveTimer -= ct.delta; - if (this.waveTimer <= 0) { - this.waveTimer = ct.random.range(ct.speed * 15, ct.speed * 20); - const startingPhase = ct.random.dice(0, Math.PI / 2); - // See it in the "Settings" tab > Scripts - spawnWigglers(startingPhase); - } - - this.bomberTimer -= ct.delta; - if (this.bomberTimer <= 0) { - this.bomberTimer = ct.random.range(ct.speed * 30, ct.speed * 45); - ct.templates.copy('Enemy_Bomber', ct.random(ct.camera.width), -100); - } - - this.bossTimer -= ct.delta; - if (this.bossTimer <= 0) { - this.bossEncountered = true; - ct.templates.copy('DatBoss', ct.camera.width / 2, -300); - } - ondraw: 'this.scoreLabel.text = ''Score: '' + this.score;' - onleave: localStorage.score = this.score; width: 1920 height: 1080 backgrounds: - - depth: '-20' - extends: - movementY: 0.125 - scaleX: 1 - shiftX: -288 + - depth: -20 texture: 3935eebf-4e66-456f-9ca8-e2dc1d6a9383 + shiftX: -288 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.125 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -19 texture: f52c0c03-bee0-4984-a936-08aeb0dab1eb - extends: - movementY: 0.25 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.25 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -18 texture: e86811b4-8d80-4d2a-8003-b490165fa078 - extends: - movementY: 0.5 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.5 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: 2e5bf702-9eac-4fef-8282-07d2dd0a9bac - lastmod: 1603949209540 + lastmod: 1661143892928 grid: 50 thumbnail: 1 gridX: 50 @@ -1379,56 +1529,162 @@ rooms: - depth: -10 tiles: [] extends: {} + hidden: false copies: - x: 950 'y': 850 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1fab434d-0976-4b65-8390-d013695aba8c exts: {} + customProperties: {} extends: {} - - name: MainMenu - oncreate: >- - ct.sound.spawn('Music_MainMenu', { - loop: true, - volume: 0.5 - }); + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('Music_MainTheme', { + loop: true, + volume: 0.25 + }); + + + if (ct.touch.enabled) { + ct.rooms.append('Controls_Layer', {isUi: true}); + } + + ct.rooms.append('UI_Layer', {isUi: true}); + + + this.score = 0; + + + this.scoreLabel = new PIXI.Text('Score: ' + this.score, + ct.styles.get('ScoreText')); + this.scoreLabel.x = this.scoreLabel.y = 20; - this.ctjsNotice = new PIXI.Text('Make Great Games in a Free Game - Editor!!!\nhttps://ctjs.rocks/', ct.styles.get('Blue12')); + this.scoreLabel.depth = 100; - this.addChild(this.ctjsNotice); + this.addChild(this.scoreLabel); - this.ctjsNotice.x = ct.camera.width / 2; - this.ctjsNotice.y = ct.camera.height - 32; + this.timer1 = 3; // Asteroids - this.ctjsNotice.anchor.x = 0.5; + this.timer2 = 5; // Shooters - this.ctjsNotice.anchor.y = 0.5; + this.timer3 = 20; // Wave attack + + this.timer4 = 20; // Bombers + + this.timer6 = 90; // Boss + + + ct.transition.fadeIn(); + eventKey: OnRoomStart + - lib: core + arguments: {} + code: 'this.scoreLabel.text = ''Score: '' + this.score;' + eventKey: OnDraw + - lib: core + arguments: {} + code: localStorage.score = this.score; + eventKey: OnRoomEnd + - eventKey: Timer1 + code: |- + this.timer1 = ct.random.range(0.5, 3); + ct.templates.copy('Asteroid', ct.random(ct.camera.width), -100); + arguments: + name: Asteroids + lib: core + - eventKey: Timer2 + code: |- + // Stop spawning new entities if a boss has arrived + if (!this.bossEncountered) { + this.timer2 = ct.random.range(2, 7); + ct.templates.copy('Enemy_Shooter', ct.random(ct.camera.width), -100); + } + arguments: + name: Shooters + lib: core + - eventKey: Timer3 + code: |- + // Stop spawning new entities if a boss has arrived + if (!this.bossEncountered) { + this.timer3 = ct.random.range(15, 20); + const startingPhase = ct.random.dice(0, Math.PI / 2); + // See it in the "Settings" tab > Scripts + spawnWigglers(startingPhase); + } + arguments: + name: Wave attack + lib: core + - eventKey: Timer4 + code: |- + // Stop spawning new entities if a boss has arrived + if (!this.bossEncountered) { + this.timer4 = ct.random.range(30, 45); + ct.templates.copy('Enemy_Bomber', ct.random(ct.camera.width), -100); + } + arguments: + name: Bomber + lib: core + - eventKey: Timer6 + code: |- + this.bossEncountered = true; + ct.templates.copy('DatBoss', ct.camera.width / 2, -300); + arguments: + name: BOSS + lib: core + type: room + simulate: true + isUi: false + - name: MainMenu onstep: '' ondraw: '' - onleave: ct.sound.stop('Music_MainMenu'); width: 1920 height: 1080 backgrounds: - depth: -10 - extends: - movementY: 0 - movementX: -0.125 texture: 3935eebf-4e66-456f-9ca8-e2dc1d6a9383 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: -0.125 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -9 texture: f52c0c03-bee0-4984-a936-08aeb0dab1eb - extends: - movementY: 0 - movementX: -0.25 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: -0.25 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -8 texture: e86811b4-8d80-4d2a-8003-b490165fa078 - extends: - movementY: 0 - movementX: -0.5 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: -0.5 + movementY: 0 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: 6c75cdb8-cfb4-4dcc-887a-f76ae98b5499 grid: 64 - lastmod: 1603949155404 + lastmod: 1661072224493 thumbnail: 2 gridX: 64 gridY: 64 @@ -1436,52 +1692,62 @@ rooms: - depth: -10 tiles: [] extends: {} + hidden: false copies: - x: 960 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 972bb4d9-7cfc-4dbe-bc30-883562271057 exts: {} + customProperties: {} - x: 960 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 319c6995-59f3-4267-a1de-cf58f77614d3 exts: {} + customProperties: {} extends: {} - - name: RetryScreen - oncreate: >- - this.score = Number(localStorage.score); - - this.highscore = Number(localStorage.highscore || 0); - - - localStorage.highscore = Math.max(this.highscore, this.score); - - - this.scoreText = new PIXI.Text('Score: '+ this.score + '\n' + 'Highscore: - '+ this.highscore, ct.styles.get('ScoreText')); - - this.addChild(this.scoreText); - - this.scoreText.x = ct.camera.width / 2; - - this.scoreText.y = ct.camera.height / 2; - - this.scoreText.anchor.x = 0.5; + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('Music_MainMenu', { + loop: true, + volume: 0.5 + }); - this.scoreText.anchor.y = 0.5; + this.ctjsNotice = new PIXI.Text('Make Great Games in a Free Game + Editor!!!\nhttps://ctjs.rocks/', ct.styles.get('Blue12')); - this.authorsNotice = new PIXI.Text('This demo was made in ct.js editor: - more at https://ctjs.rocks/\n'+ - 'Music by MAZMATERIALS: soundcloud.com/user-813284330', ct.styles.get('Blue12')); - this.addChild(this.authorsNotice); + this.addChild(this.ctjsNotice); - this.authorsNotice.x = ct.camera.width / 2; + this.ctjsNotice.x = ct.camera.width / 2; - this.authorsNotice.y = ct.camera.height - 50; + this.ctjsNotice.y = ct.camera.height - 32; - this.authorsNotice.anchor.x = 0.5; + this.ctjsNotice.anchor.x = 0.5; - this.authorsNotice.anchor.y = 0.5; + this.ctjsNotice.anchor.y = 0.5; + eventKey: OnRoomStart + - lib: core + arguments: {} + code: ct.sound.stop('Music_MainMenu'); + eventKey: OnRoomEnd + type: room + simulate: true + isUi: false + - name: RetryScreen onstep: '' ondraw: '' onleave: '' @@ -1489,12 +1755,19 @@ rooms: height: 1080 backgrounds: - depth: -5 - extends: - movementY: 1 texture: 3935eebf-4e66-456f-9ca8-e2dc1d6a9383 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 1 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: cc1e53b3-f7e6-48fe-9716-b05877538e52 grid: 64 - lastmod: 1588678494660 + lastmod: 1661070030357 thumbnail: 3 gridX: 64 gridY: 64 @@ -1502,15 +1775,73 @@ rooms: - depth: -10 tiles: [] extends: {} + hidden: false copies: - x: 960 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 73759c16-fba4-4134-b048-e53aa4d2f34b exts: {} + customProperties: {} - x: 960 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: a6d37145-b35c-42d2-95c6-765069857ada exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: >- + this.score = Number(localStorage.score); + + this.highscore = Number(localStorage.highscore || 0); + + + localStorage.highscore = Math.max(this.highscore, this.score); + + + this.scoreText = new PIXI.Text('Score: '+ this.score + '\n' + + 'Highscore: '+ this.highscore, ct.styles.get('ScoreText')); + + this.addChild(this.scoreText); + + this.scoreText.x = ct.camera.width / 2; + + this.scoreText.y = ct.camera.height / 2; + + this.scoreText.anchor.x = 0.5; + + this.scoreText.anchor.y = 0.5; + + + this.authorsNotice = new PIXI.Text('This demo was made in ct.js + editor: more at https://ctjs.rocks/\n'+ + 'Music by MAZMATERIALS: soundcloud.com/user-813284330', ct.styles.get('Blue12')); + this.addChild(this.authorsNotice); + + this.authorsNotice.x = ct.camera.width / 2; + + this.authorsNotice.y = ct.camera.height - 50; + + this.authorsNotice.anchor.x = 0.5; + + this.authorsNotice.anchor.y = 0.5; + eventKey: OnRoomStart + type: room + simulate: true + extends: {} + isUi: false - name: Controls_Layer oncreate: '' onstep: '' @@ -1522,90 +1853,82 @@ rooms: copies: - x: 1722 'y': 898 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: b334b5ec-69b4-4c0d-bd50-709cf9bfa60d exts: {} + customProperties: {} - x: 210 'y': 872 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: c78818a4-c20e-46b9-8a39-9fbb5a83eabe exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 459c3f03-a31e-465a-a3fd-23d3934bc7d0 thumbnail: 23d3934bc7d0 gridX: 64 gridY: 64 - lastmod: 1587620212901 + lastmod: 1661070076635 extends: {} + events: [] + type: room + simulate: true + isUi: false - name: BossTestingRoom - oncreate: >- - if (ct.touch.enabled) { - ct.rooms.append("Controls_Layer", {isUi: true}); - } - - ct.rooms.append('UI_Layer', {isUi: true}); - - - this.score = 0; - - - this.scoreLabel = new PIXI.Text('Score: ' + this.score, - ct.styles.get('ScoreText')); - - this.scoreLabel.x = this.scoreLabel.y = 20; - - this.scoreLabel.depth = 100; - - this.addChild(this.scoreLabel); - - - this.shipIcons = []; - - // Draw small ship icons in a top-right corner - - for (var i = 0; i < 3; i++) { - var icon = new PIXI.Sprite(ct.res.getTexture('PlayerShip_Blue', 0)); - icon.x = ct.width - 32 - i*48; - icon.y = 32; - icon.scale.x = icon.scale.y = 0.3; - icon.depth = 100; - this.addChild(icon); - this.shipIcons.push(icon); - } - - - - ct.transition.fadeIn(); onstep: '' - ondraw: |- - this.scoreLabel.text = 'Score: ' + this.score; - - if (ct.templates.list.Player_Blue.length) { - for (var i = 0; i < 3; i++) { - this.shipIcons[i].visible = ct.templates.list.Player_Blue[0].lives > i; - } - } onleave: '' width: 1920 height: 1080 backgrounds: - - depth: '-20' - extends: - movementY: 0.125 - scaleX: 1 - shiftX: -288 + - depth: -20 texture: 3935eebf-4e66-456f-9ca8-e2dc1d6a9383 + shiftX: -288 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.05 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -19 texture: f52c0c03-bee0-4984-a936-08aeb0dab1eb - extends: - movementY: 0.25 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.125 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -18 texture: e86811b4-8d80-4d2a-8003-b490165fa078 - extends: - movementY: 0.5 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.5 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: 0716a171-8c7a-4112-bae8-85703255320d - lastmod: 1602729535763 + lastmod: 1661070117419 grid: 50 thumbnail: 85703255320d gridX: 50 @@ -1614,44 +1937,164 @@ rooms: - depth: -10 tiles: [] extends: {} + hidden: false copies: - x: 950 'y': 850 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1fab434d-0976-4b65-8390-d013695aba8c exts: {} + customProperties: {} - x: 950 'y': -300 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1ef4f56c-b0cc-497b-bd3f-e06eb1c2308d exts: {} + customProperties: {} - x: 550 'y': 400 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} - x: 750 'y': 400 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} - x: 650 'y': 550 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} - x: 650 'y': 250 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} - x: 450 'y': 250 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} - x: 350 'y': 400 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} - x: 450 'y': 550 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51 exts: {} + customProperties: {} extends: {} + events: + - lib: core + arguments: {} + code: >- + if (ct.touch.enabled) { + ct.rooms.append("Controls_Layer", {isUi: true}); + } + + ct.rooms.append('UI_Layer', {isUi: true}); + + + this.score = 0; + + + this.scoreLabel = new PIXI.Text('Score: ' + this.score, + ct.styles.get('ScoreText')); + + this.scoreLabel.x = this.scoreLabel.y = 20; + + this.scoreLabel.depth = 100; + + this.addChild(this.scoreLabel); + + + this.shipIcons = []; + + // Draw small ship icons in a top-right corner + + for (var i = 0; i < 3; i++) { + var icon = new PIXI.Sprite(ct.res.getTexture('PlayerShip_Blue', 0)); + icon.x = ct.width - 32 - i*48; + icon.y = 32; + icon.scale.x = icon.scale.y = 0.3; + icon.depth = 100; + this.addChild(icon); + this.shipIcons.push(icon); + } + + + + ct.transition.fadeIn(); + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + this.scoreLabel.text = 'Score: ' + this.score; + + if (ct.templates.list.Player_Blue.length) { + for (var i = 0; i < 3; i++) { + this.shipIcons[i].visible = ct.templates.list.Player_Blue[0].lives > i; + } + } + eventKey: OnDraw + type: room + simulate: true + isUi: false - name: UI_Layer oncreate: '' onstep: '' @@ -1663,63 +2106,31 @@ rooms: copies: - x: 960 'y': 1080 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 1011221c-4f7b-45e7-b45a-ce886851d32c exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 3123a227-4b15-4b4e-83cd-bb45e24b4389 thumbnail: bb45e24b4389 gridX: 64 gridY: 1080 - lastmod: 1588678190829 + lastmod: 1661070034911 + events: [] + type: room + simulate: true + extends: {} + isUi: false - name: VictoryScreen - oncreate: >- - ct.sound.spawn('Music_MainMenu', { - loop: true, - volume: 0.5 - }); - - ct.sound.stop('Music_MainMenu'); - - ct.sound.stop('Music_BossTheme'); - - - this.score = Number(localStorage.score); - - this.highscore = Number(localStorage.highscore || 0); - - - localStorage.highscore = Math.max(this.highscore, this.score); - - - this.scoreText = new PIXI.Text('Score: '+ this.score + '\n' + 'Highscore: - '+ this.highscore, ct.styles.get('ScoreText')); - - this.addChild(this.scoreText); - - this.scoreText.x = ct.camera.width / 2; - - this.scoreText.y = ct.camera.height / 2; - - this.scoreText.anchor.x = 0.5; - - this.scoreText.anchor.y = 0.5; - - - this.authorsNotice = new PIXI.Text('This demo was made in ct.js editor: - more at https://ctjs.rocks/\n'+ - 'Music by MAZMATERIALS: soundcloud.com/user-813284330', ct.styles.get('Blue12')); - this.addChild(this.authorsNotice); - - this.authorsNotice.x = ct.camera.width / 2; - - this.authorsNotice.y = ct.camera.height - 50; - - this.authorsNotice.anchor.x = 0.5; - - this.authorsNotice.anchor.y = 0.5; onstep: '' ondraw: '' onleave: '' @@ -1727,20 +2138,41 @@ rooms: height: 1080 backgrounds: - depth: -5 - extends: - movementY: 0.5 texture: 3935eebf-4e66-456f-9ca8-e2dc1d6a9383 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.15 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -4 texture: f52c0c03-bee0-4984-a936-08aeb0dab1eb - extends: - movementY: 1 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0.5 + scaleX: 1 + scaleY: 1 + repeat: repeat - depth: -3 texture: e86811b4-8d80-4d2a-8003-b490165fa078 - extends: - movementY: 2 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 1.25 + scaleX: 1 + scaleY: 1 + repeat: repeat uid: 980b838d-93b0-429f-94ef-2acf783c9516 grid: 64 - lastmod: 1588761926668 + lastmod: 1661070072206 thumbnail: 2acf783c9516 gridX: 64 gridY: 64 @@ -1748,11 +2180,72 @@ rooms: - depth: -10 tiles: [] extends: {} + hidden: false copies: - x: 960 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: ffbec9fc-299c-4aea-a4f1-1c4b27859fb6 exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('Music_MainMenu', { + loop: true, + volume: 0.5 + }); + + ct.sound.stop('Music_MainMenu'); + + ct.sound.stop('Music_BossTheme'); + + + this.score = Number(localStorage.score); + + this.highscore = Number(localStorage.highscore || 0); + + + localStorage.highscore = Math.max(this.highscore, this.score); + + + this.scoreText = new PIXI.Text('Score: '+ this.score + '\n' + + 'Highscore: '+ this.highscore, ct.styles.get('ScoreText')); + + this.addChild(this.scoreText); + + this.scoreText.x = ct.camera.width / 2; + + this.scoreText.y = ct.camera.height / 2; + + this.scoreText.anchor.x = 0.5; + + this.scoreText.anchor.y = 0.5; + + + this.authorsNotice = new PIXI.Text('This demo was made in ct.js + editor: more at https://ctjs.rocks/\n'+ + 'Music by MAZMATERIALS: soundcloud.com/user-813284330', ct.styles.get('Blue12')); + this.addChild(this.authorsNotice); + + this.authorsNotice.x = ct.camera.width / 2; + + this.authorsNotice.y = ct.camera.height - 50; + + this.authorsNotice.anchor.x = 0.5; + + this.authorsNotice.anchor.y = 0.5; + eventKey: OnRoomStart + type: room + simulate: true + extends: {} + isUi: false soundtick: 9 roomtick: 3 templatetick: 19 @@ -1851,7 +2344,7 @@ scripts: }); }); }; -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 fonts: [] skeletons: [] actions: @@ -2002,7 +2495,7 @@ textures: r: 1 uid: 3935eebf-4e66-456f-9ca8-e2dc1d6a9383 tiled: true - lastmod: 1583209043980 + lastmod: 1661070181991 padding: 0 source: /home/comigo/Desktop/Nebula Blue.png - name: Laser_Simple_Blue @@ -2565,7 +3058,7 @@ textures: bottom: 1024 uid: e86811b4-8d80-4d2a-8003-b490165fa078 padding: 1 - lastmod: 1583208112352 + lastmod: 1661070201383 tiled: true - name: Stars_Small untill: 0 @@ -2592,7 +3085,7 @@ textures: bottom: 1024 uid: f52c0c03-bee0-4984-a936-08aeb0dab1eb padding: 1 - lastmod: 1583208211045 + lastmod: 1661070203994 tiled: true - name: Boss untill: 0 @@ -3512,6 +4005,7 @@ emitterTandems: minimumScaleMultiplier: 0.25 uid: 84917cf1-bdcd-41f1-8a6a-37a972d6e17b previewTexture: 048b77d3-e7e3-4817-99ee-8b7c0a6da8bf + uid: ptf66027e78457 - name: Electricity origname: pt308f91a06589 emitters: @@ -3589,6 +4083,7 @@ emitterTandems: minimumScaleMultiplier: 0.28 uid: a147e2f8-a42a-4748-8f4f-9fe0b994542c previewTexture: 4b86d5c4-ae3c-4edf-90d7-79a6778e9a29 + uid: pt308f91a06589 - name: ChunkBurst origname: ptc59f1e6a5496 emitters: @@ -3756,6 +4251,7 @@ emitterTandems: minimumSpeedMultiplier: 0.07 uid: 557138cf-3508-4a4c-a9bd-2dff57933279 previewTexture: 1a904383-2edd-4435-a37b-17148f44e0e0 + uid: ptc59f1e6a5496 - name: Shield origname: pt120169640d57 emitters: @@ -3908,6 +4404,7 @@ emitterTandems: noRotation: false uid: 1e120dea-3ab2-49ec-a3cd-c631d53679f4 previewTexture: e1452137-8cfa-4eec-b54a-0f2660326b48 + uid: pt120169640d57 - name: JetFlame origname: ptda1961939384 emitters: @@ -3991,6 +4488,7 @@ emitterTandems: noRotation: false uid: 15abdb0e-27b1-4cd6-b48c-7aa51ef35f42 previewTexture: e1452137-8cfa-4eec-b54a-0f2660326b48 + uid: ptda1961939384 - name: PowerBoltTrail origname: ptd33169b439d4 emitters: @@ -4143,6 +4641,7 @@ emitterTandems: noRotation: true uid: f7b5ca35-38aa-456c-8bbd-a455a3ff097c previewTexture: c12edc06-ad3f-49f4-b9d4-3d33226e9ecc + uid: ptd33169b439d4 - name: BlackHole origname: pt6e1d42625999 emitters: @@ -4455,6 +4954,7 @@ emitterTandems: uid: 57c92f27-a9b5-45d5-8dee-7874399cacc8 showShapeVisualizer: false previewTexture: afba4114-e7bc-4b35-8386-d9ca108ca777 + uid: pt6e1d42625999 - name: Explosion_Boss origname: pt7579996e55b4 emitters: diff --git a/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev.png b/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev.png index 0512ea05c..c0ce2387b 100644 Binary files a/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev.png and b/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev.png differ diff --git a/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev@2.png b/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev@2.png index 488e8791c..2fe77dd14 100644 Binary files a/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev@2.png and b/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png_prev@2.png differ diff --git a/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev.png b/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev.png index 846c6abc6..d397fd781 100644 Binary files a/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev.png and b/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev.png differ diff --git a/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev@2.png b/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev@2.png index b27140f59..463878f27 100644 Binary files a/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev@2.png and b/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png_prev@2.png differ diff --git a/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev.png b/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev.png index 80120c9d3..6f09284aa 100644 Binary files a/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev.png and b/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev.png differ diff --git a/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev@2.png b/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev@2.png index f1d845b5f..4d18c6f73 100644 Binary files a/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev@2.png and b/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png_prev@2.png differ diff --git a/src/examples/catsteroids/img/r0716a171-8c7a-4112-bae8-85703255320d.png b/src/examples/catsteroids/img/r0716a171-8c7a-4112-bae8-85703255320d.png new file mode 100644 index 000000000..ac6beea5a Binary files /dev/null and b/src/examples/catsteroids/img/r0716a171-8c7a-4112-bae8-85703255320d.png differ diff --git a/src/examples/catsteroids/img/r0716a171-8c7a-4112-bae8-85703255320d@r.png b/src/examples/catsteroids/img/r0716a171-8c7a-4112-bae8-85703255320d@r.png new file mode 100644 index 000000000..8484b2ac9 Binary files /dev/null and b/src/examples/catsteroids/img/r0716a171-8c7a-4112-bae8-85703255320d@r.png differ diff --git a/src/examples/catsteroids/img/r1.png b/src/examples/catsteroids/img/r1.png deleted file mode 100644 index 6e3d500d2..000000000 Binary files a/src/examples/catsteroids/img/r1.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r2.png b/src/examples/catsteroids/img/r2.png deleted file mode 100644 index c981211e5..000000000 Binary files a/src/examples/catsteroids/img/r2.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r23d3934bc7d0.png b/src/examples/catsteroids/img/r23d3934bc7d0.png deleted file mode 100644 index 6669f888a..000000000 Binary files a/src/examples/catsteroids/img/r23d3934bc7d0.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r2acf783c9516.png b/src/examples/catsteroids/img/r2acf783c9516.png deleted file mode 100644 index f97f0ded8..000000000 Binary files a/src/examples/catsteroids/img/r2acf783c9516.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r2e5bf702-9eac-4fef-8282-07d2dd0a9bac.png b/src/examples/catsteroids/img/r2e5bf702-9eac-4fef-8282-07d2dd0a9bac.png new file mode 100644 index 000000000..324e9c027 Binary files /dev/null and b/src/examples/catsteroids/img/r2e5bf702-9eac-4fef-8282-07d2dd0a9bac.png differ diff --git a/src/examples/catsteroids/img/r2e5bf702-9eac-4fef-8282-07d2dd0a9bac@r.png b/src/examples/catsteroids/img/r2e5bf702-9eac-4fef-8282-07d2dd0a9bac@r.png new file mode 100644 index 000000000..3c220fe63 Binary files /dev/null and b/src/examples/catsteroids/img/r2e5bf702-9eac-4fef-8282-07d2dd0a9bac@r.png differ diff --git a/src/examples/catsteroids/img/r3.png b/src/examples/catsteroids/img/r3.png deleted file mode 100644 index af8eab67a..000000000 Binary files a/src/examples/catsteroids/img/r3.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r3123a227-4b15-4b4e-83cd-bb45e24b4389.png b/src/examples/catsteroids/img/r3123a227-4b15-4b4e-83cd-bb45e24b4389.png new file mode 100644 index 000000000..675bd1d7f Binary files /dev/null and b/src/examples/catsteroids/img/r3123a227-4b15-4b4e-83cd-bb45e24b4389.png differ diff --git a/src/examples/catsteroids/img/r3123a227-4b15-4b4e-83cd-bb45e24b4389@r.png b/src/examples/catsteroids/img/r3123a227-4b15-4b4e-83cd-bb45e24b4389@r.png new file mode 100644 index 000000000..b3fede885 Binary files /dev/null and b/src/examples/catsteroids/img/r3123a227-4b15-4b4e-83cd-bb45e24b4389@r.png differ diff --git a/src/examples/catsteroids/img/r459c3f03-a31e-465a-a3fd-23d3934bc7d0.png b/src/examples/catsteroids/img/r459c3f03-a31e-465a-a3fd-23d3934bc7d0.png new file mode 100644 index 000000000..87c772086 Binary files /dev/null and b/src/examples/catsteroids/img/r459c3f03-a31e-465a-a3fd-23d3934bc7d0.png differ diff --git a/src/examples/catsteroids/img/r459c3f03-a31e-465a-a3fd-23d3934bc7d0@r.png b/src/examples/catsteroids/img/r459c3f03-a31e-465a-a3fd-23d3934bc7d0@r.png new file mode 100644 index 000000000..128ce070a Binary files /dev/null and b/src/examples/catsteroids/img/r459c3f03-a31e-465a-a3fd-23d3934bc7d0@r.png differ diff --git a/src/examples/catsteroids/img/r6c75cdb8-cfb4-4dcc-887a-f76ae98b5499.png b/src/examples/catsteroids/img/r6c75cdb8-cfb4-4dcc-887a-f76ae98b5499.png new file mode 100644 index 000000000..cb489cf34 Binary files /dev/null and b/src/examples/catsteroids/img/r6c75cdb8-cfb4-4dcc-887a-f76ae98b5499.png differ diff --git a/src/examples/catsteroids/img/r6c75cdb8-cfb4-4dcc-887a-f76ae98b5499@r.png b/src/examples/catsteroids/img/r6c75cdb8-cfb4-4dcc-887a-f76ae98b5499@r.png new file mode 100644 index 000000000..4e67182fd Binary files /dev/null and b/src/examples/catsteroids/img/r6c75cdb8-cfb4-4dcc-887a-f76ae98b5499@r.png differ diff --git a/src/examples/catsteroids/img/r85703255320d.png b/src/examples/catsteroids/img/r85703255320d.png deleted file mode 100644 index 1a075dc6c..000000000 Binary files a/src/examples/catsteroids/img/r85703255320d.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r8d68a47e842e.png b/src/examples/catsteroids/img/r8d68a47e842e.png deleted file mode 100644 index b7375f819..000000000 Binary files a/src/examples/catsteroids/img/r8d68a47e842e.png and /dev/null differ diff --git a/src/examples/catsteroids/img/r980b838d-93b0-429f-94ef-2acf783c9516.png b/src/examples/catsteroids/img/r980b838d-93b0-429f-94ef-2acf783c9516.png new file mode 100644 index 000000000..66cb60e3c Binary files /dev/null and b/src/examples/catsteroids/img/r980b838d-93b0-429f-94ef-2acf783c9516.png differ diff --git a/src/examples/catsteroids/img/r980b838d-93b0-429f-94ef-2acf783c9516@r.png b/src/examples/catsteroids/img/r980b838d-93b0-429f-94ef-2acf783c9516@r.png new file mode 100644 index 000000000..01697adab Binary files /dev/null and b/src/examples/catsteroids/img/r980b838d-93b0-429f-94ef-2acf783c9516@r.png differ diff --git a/src/examples/catsteroids/img/rbb45e24b4389.png b/src/examples/catsteroids/img/rbb45e24b4389.png deleted file mode 100644 index f78fef0c8..000000000 Binary files a/src/examples/catsteroids/img/rbb45e24b4389.png and /dev/null differ diff --git a/src/examples/catsteroids/img/rcc1e53b3-f7e6-48fe-9716-b05877538e52.png b/src/examples/catsteroids/img/rcc1e53b3-f7e6-48fe-9716-b05877538e52.png new file mode 100644 index 000000000..0f7cd94c7 Binary files /dev/null and b/src/examples/catsteroids/img/rcc1e53b3-f7e6-48fe-9716-b05877538e52.png differ diff --git a/src/examples/catsteroids/img/rcc1e53b3-f7e6-48fe-9716-b05877538e52@r.png b/src/examples/catsteroids/img/rcc1e53b3-f7e6-48fe-9716-b05877538e52@r.png new file mode 100644 index 000000000..0cb12f3aa Binary files /dev/null and b/src/examples/catsteroids/img/rcc1e53b3-f7e6-48fe-9716-b05877538e52@r.png differ diff --git a/src/examples/catsteroids/img/splash.png b/src/examples/catsteroids/img/splash.png index 6669f888a..4e67182fd 100644 Binary files a/src/examples/catsteroids/img/splash.png and b/src/examples/catsteroids/img/splash.png differ diff --git a/src/examples/memocats.ict b/src/examples/memocats.ict index da5b309d2..1cc23f0cc 100644 --- a/src/examples/memocats.ict +++ b/src/examples/memocats.ict @@ -1,7 +1,6 @@ notes: /* empty */ libs: random: {} - mouse: {} fittoscreen: mode: scaleFit sound.howler: {} @@ -9,60 +8,92 @@ libs: templates: - name: Card depth: 0 - oncreate: >- - // Make a smooth scale-in animation + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + lastmod: 1662299297726 + extends: {} + texture: 366c01b5-4ed5-4ca5-bf01-8731a04be2c4 + events: + - lib: core + arguments: {} + code: >- + // Make a smooth scale-in animation - this.scale.x = this.scale.y = 0; + this.scale.x = this.scale.y = 0; - ct.tween.add({ - obj: this.scale, - fields: { - x: 0.5, - y: 0.5 - }, - duration: 350 - }); + ct.tween.add({ + obj: this.scale, + fields: { + x: 1, + y: 1 + }, + duration: 350, + silent: true + }); - this.drop = false; + this.drop = false; - this.block = false; + this.block = false; - this.flipped = false; + this.flipped = false; - // These variables will be used only when a card is dropped. See OnStep - for that + // These variables will be used only when a card is dropped. See + OnStep for that - // A card will jump above and then fall down + // A card will jump above and then fall down - // 90° = move to top, but we will create a 30° spread around it. + // 90° = move to top, but we will create a 30° spread around it. - this.rotationSpeed = ct.random.range(-12, 12); + this.rotationSpeed = ct.random.range(-12, 12); - this.speed = 25; + this.speed = 50; - this.direction = ct.random.range(-60, -120); + this.direction = ct.random.range(-60, -120); - this.gravity = 1.5; + this.gravity = 3; - this.gravityDir = 90; - onstep: |- - /* - Scenario: - Select a card; - Select another card. - If the cards match, block them and drop after 0.5 seconds - If they don't, block them, but unblock and flip after 0.5 seconds. + this.gravityDir = 90; + eventKey: OnCreate + - lib: core + arguments: {} + code: |- + // Make a drop animation + if (this.drop) { + this.move(); + this.angle += this.rotationSpeed * ct.delta; + // Remove the card only if it is considerably below the camera + if (this.y > ct.camera.height + 300) { + this.kill = true; + } + } + eventKey: OnStep + - lib: core + arguments: {} + code: |- + // Update cover - Blocked cards may not be selected. - If we select the same card twice, it flips back. - */ + if (this.flipped) { + this.gotoAndStop(this.backFrame); + } else { + this.gotoAndStop(0); + } + eventKey: OnDraw + - eventKey: OnPointerClick + code: |- + /* + Scenario: + Select a card; + Select another card. + If the cards match, block them and drop after 0.5 seconds + If they don't, block them, but unblock and flip after 0.5 seconds. - // If mouse was clicked and the card isn't blocked… - if (ct.mouse.pressed && !this.block) { - // …if player clicked exactly this card… - if (ct.u.pointRectangle(ct.mouse.x, ct.mouse.y, this)) { + Blocked cards may not be selected. + If we select the same card twice, it flips back. + */ + + // If a card was clicked and it isn't blocked… + if (!this.block) { // Flip a card this.flipped = !this.flipped; ct.sound.spawn('Paper'); @@ -108,26 +139,10 @@ templates: ct.room.card = false; } } - } - - if (this.drop) { - this.move(); - this.angle += this.rotationSpeed * ct.delta; - if (this.y > ct.height + 160) { - this.kill = true; - } - } - ondraw: |- - if (this.flipped) { - this.gotoAndStop(this.backFrame); - } else { - this.gotoAndStop(0); - } - ondestroy: '' - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - lastmod: 1566575039596 - extends: {} - texture: 366c01b5-4ed5-4ca5-bf01-8731a04be2c4 + arguments: {} + lib: core + type: template + loopAnimation: false sounds: - name: Match uid: 96dbce18-a291-41b6-9707-ff2dc2bb5b77 @@ -156,327 +171,731 @@ sounds: styles: [] rooms: - name: Room1 - oncreate: |- - // Grabbed from this: https://stackoverflow.com/a/6274381 (community wiki) - var shuffle = function(a) { - var j, x, i; - for (i = a.length - 1; i > 0; i--) { - j = Math.floor(Math.random() * (i + 1)); - x = a[i]; - a[i] = a[j]; - a[j] = x; - } - }; - - // This will be an array of all the possible pictures from Memocats asset - this.pictures = []; - for (var i = 1; i < 21; i++) { - this.pictures.push(i); - } - shuffle(this.pictures); - - // Get a list of all the Cards in the room and make a copy of that - this.cards = ct.templates.list['Card'].slice(0); - shuffle(this.cards); - - // Now, select cards by pairs and set them a unique picture. - for (var i = 0; i < this.cards.length; i += 2) { - this.cards[i].backFrame = this.pictures[0]; - this.cards[i+1].backFrame = this.pictures[0]; - // Remove a picture at this.pictures[0] - this.pictures.shift(); - } - onstep: |- - if (ct.templates.list['Card'].length === 0) { - ct.rooms.switch('Room2'); - } ondraw: '' onleave: '' - width: 980 - height: 700 + width: 1920 + height: 1280 backgrounds: - - depth: '-10' + - depth: -10 texture: c1b1284b-8dba-4886-9bf7-52b66cc08911 - extends: {} + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1.97 + scaleY: 1.84 + repeat: repeat uid: 3827e721-5331-49b2-a37a-f868e15cae0d grid: 70 - lastmod: 1522741617797 + lastmod: 1661071563995 thumbnail: 1 - gridX: 70 - gridY: 70 + gridX: 96 + gridY: 96 tiles: - depth: -10 tiles: [] extends: {} + hidden: false copies: - - x: 490 - 'y': 210 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 350 - 'y': 210 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 210 - 'y': 210 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 630 - 'y': 210 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 770 - 'y': 210 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 210 - 'y': 420 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 350 - 'y': 420 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 490 - 'y': 420 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 630 - 'y': 420 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 770 - 'y': 420 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - name: Room2 - oncreate: |- - ct.sound.spawn('NewLevel'); - - // Grabbed from this: https://stackoverflow.com/a/6274381 (community wiki) - var shuffle = function(a) { - var j, x, i; - for (i = a.length - 1; i > 0; i--) { - j = Math.floor(Math.random() * (i + 1)); - x = a[i]; - a[i] = a[j]; - a[j] = x; + - x: 1536 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1248 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 960 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 672 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 384 + 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 384 + 'y': 864 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 672 + 'y': 864 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 960 + 'y': 864 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1248 + 'y': 864 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1536 + 'y': 864 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + events: + - lib: core + arguments: {} + code: >- + // Grabbed from this: https://stackoverflow.com/a/6274381 (community + wiki) + + var shuffle = function(a) { + var j, x, i; + for (i = a.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + x = a[i]; + a[i] = a[j]; + a[j] = x; + } + }; + + + // This will be an array of all the possible pictures from Memocats + asset + + this.pictures = []; + + for (var i = 1; i < 21; i++) { + this.pictures.push(i); } - }; - - // This will be an array of all the possible pictures from Memocats asset - this.pictures = []; - for (var i = 1; i < 21; i++) { - this.pictures.push(i); - } - shuffle(this.pictures); - - // Get a list of all the Cards in the room and make a copy of that - this.cards = ct.templates.list['Card'].slice(0); - shuffle(this.cards); - - // Now, select cards by pairs and set them a unique picture. - for (var i = 0; i < this.cards.length; i += 2) { - this.cards[i].backFrame = this.pictures[0]; - this.cards[i+1].backFrame = this.pictures[0]; - // Remove a picture at this.pictures[0] - this.pictures.shift(); - } - onstep: |- - if (ct.templates.list['Card'].length === 0) { - ct.rooms.switch('Room3'); - } + + shuffle(this.pictures); + + + // Get a list of all the Cards in the room and make a copy of that + + this.cards = ct.templates.list['Card'].slice(0); + + shuffle(this.cards); + + + // Now, select cards by pairs and set them a unique picture. + + for (var i = 0; i < this.cards.length; i += 2) { + this.cards[i].backFrame = this.pictures[0]; + this.cards[i+1].backFrame = this.pictures[0]; + // Remove a picture at this.pictures[0] + this.pictures.shift(); + } + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + if (ct.templates.list['Card'].length === 0) { + ct.rooms.switch('Room2'); + } + eventKey: OnStep + type: room + extends: {} + simulate: true + isUi: false + - name: Room2 ondraw: '' onleave: '' - width: 980 - height: 700 + width: 1920 + height: 1280 backgrounds: - - depth: '-10' + - depth: -10 texture: c1b1284b-8dba-4886-9bf7-52b66cc08911 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1.97 + scaleY: 1.84 + repeat: repeat uid: a751fef2-0632-4105-b90b-51ffba3f38f5 grid: 70 - lastmod: 1522741609956 + lastmod: 1661071568755 thumbnail: 2 copies: - - x: 560 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 420 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 280 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 700 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 840 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 140 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 140 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 280 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 420 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 560 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 700 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 840 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 420 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 560 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - tiles: [] - - name: Room3 - oncreate: |- - ct.sound.spawn('NewLevel'); - - // Grabbed from this: https://stackoverflow.com/a/6274381 (community wiki) - var shuffle = function(a) { - var j, x, i; - for (i = a.length - 1; i > 0; i--) { - j = Math.floor(Math.random() * (i + 1)); - x = a[i]; - a[i] = a[j]; - a[j] = x; + - x: 240 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 528 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 816 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1104 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1392 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1680 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 240 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 528 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 816 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1104 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1392 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1680 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 816 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1104 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + tiles: + - depth: -10 + tiles: [] + extends: {} + hidden: false + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('NewLevel'); + + + // Grabbed from this: https://stackoverflow.com/a/6274381 (community + wiki) + + var shuffle = function(a) { + var j, x, i; + for (i = a.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + x = a[i]; + a[i] = a[j]; + a[j] = x; + } + }; + + + // This will be an array of all the possible pictures from Memocats + asset + + this.pictures = []; + + for (var i = 1; i < 21; i++) { + this.pictures.push(i); + } + + shuffle(this.pictures); + + + // Get a list of all the Cards in the room and make a copy of that + + this.cards = ct.templates.list['Card'].slice(0); + + shuffle(this.cards); + + + // Now, select cards by pairs and set them a unique picture. + + for (var i = 0; i < this.cards.length; i += 2) { + this.cards[i].backFrame = this.pictures[0]; + this.cards[i+1].backFrame = this.pictures[0]; + // Remove a picture at this.pictures[0] + this.pictures.shift(); + } + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + if (ct.templates.list['Card'].length === 0) { + ct.rooms.switch('Room3'); } - }; - - // This will be an array of all the possible pictures from Memocats asset - this.pictures = []; - for (var i = 1; i < 21; i++) { - this.pictures.push(i); - } - shuffle(this.pictures); - - // Get a list of all the Cards in the room and make a copy of that - this.cards = ct.templates.list['Card'].slice(0); - shuffle(this.cards); - - // Now, select cards by pairs and set them a unique picture. - for (var i = 0; i < this.cards.length; i += 2) { - this.cards[i].backFrame = this.pictures[0]; - this.cards[i+1].backFrame = this.pictures[0]; - // Remove a picture at this.pictures[0] - this.pictures.shift(); - } - onstep: |- - if (ct.templates.list['Card'].length === 0) { - ct.rooms.switch('Room3'); - } + eventKey: OnStep + type: room + extends: {} + gridX: 48 + gridY: 24 + simulate: true + isUi: false + - name: Room3 ondraw: '' onleave: '' - width: 980 - height: 700 + width: 1920 + height: 1280 backgrounds: - - depth: '-10' + - depth: -10 texture: c1b1284b-8dba-4886-9bf7-52b66cc08911 + shiftX: 0 + shiftY: 0 + parallaxX: 1 + parallaxY: 1 + movementX: 0 + movementY: 0 + scaleX: 1.97 + scaleY: 1.87 + repeat: repeat uid: 4cd06702-30ed-4d80-8609-c1128f14f6a8 grid: 70 - lastmod: 1522741558307 + lastmod: 1661071571235 thumbnail: 3 copies: - - x: 420 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 560 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 700 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 840 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 280 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 140 - 'y': 140 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 140 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 280 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 420 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 560 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 700 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 840 - 'y': 350 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 840 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 700 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 560 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 420 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 280 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - - x: 140 - 'y': 560 - uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c - exts: {} - tiles: [] + - x: 240 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 528 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 816 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1104 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1392 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1680 + 'y': 240 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 240 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 528 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 816 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1104 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1392 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1680 + 'y': 648 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 240 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 528 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 816 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1104 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1392 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + - x: 1680 + 'y': 1056 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 + uid: 2120f62d-54b7-4ab1-8788-7f70b59d3c0c + exts: {} + customProperties: {} + tiles: + - depth: -10 + tiles: [] + extends: {} + hidden: false + events: + - lib: core + arguments: {} + code: >- + ct.sound.spawn('NewLevel'); + + + // Grabbed from this: https://stackoverflow.com/a/6274381 (community + wiki) + + var shuffle = function(a) { + var j, x, i; + for (i = a.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + x = a[i]; + a[i] = a[j]; + a[j] = x; + } + }; + + + // This will be an array of all the possible pictures from Memocats + asset + + this.pictures = []; + + for (var i = 1; i < 21; i++) { + this.pictures.push(i); + } + + shuffle(this.pictures); + + + // Get a list of all the Cards in the room and make a copy of that + + this.cards = ct.templates.list['Card'].slice(0); + + shuffle(this.cards); + + + // Now, select cards by pairs and set them a unique picture. + + for (var i = 0; i < this.cards.length; i += 2) { + this.cards[i].backFrame = this.pictures[0]; + this.cards[i+1].backFrame = this.pictures[0]; + // Remove a picture at this.pictures[0] + this.pictures.shift(); + } + eventKey: OnRoomStart + - lib: core + arguments: {} + code: |- + if (ct.templates.list['Card'].length === 0) { + ct.rooms.switch('Room3'); + } + eventKey: OnStep + type: room + extends: {} + gridX: 24 + gridY: 24 + simulate: true + isUi: false soundtick: 6 roomtick: 3 templatetick: 1 @@ -511,7 +930,7 @@ settings: versionPostfix: '' fps: 30 startroom: 3827e721-5331-49b2-a37a-f868e15cae0d -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 scripts: [] fonts: [] skeletons: [] @@ -539,7 +958,7 @@ textures: right: 128 top: 196 bottom: 196 - lastmod: 1587612594276 + lastmod: 1657023386910 uid: 366c01b5-4ed5-4ca5-bf01-8731a04be2c4 padding: 1 source: /home/comigo/Desktop/Memocats.png @@ -568,6 +987,7 @@ textures: lastmod: 1522741667520 uid: c1b1284b-8dba-4886-9bf7-52b66cc08911 padding: 1 + tiled: true texturetick: 2 emitterTandems: [] contentTypes: [] diff --git a/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev.png b/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev.png index a8f410757..0ca1e662a 100644 Binary files a/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev.png and b/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev.png differ diff --git a/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev@2.png b/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev@2.png index 3c66c0e0a..d1d63499f 100644 Binary files a/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev@2.png and b/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png_prev@2.png differ diff --git a/src/examples/memocats/img/r1.png b/src/examples/memocats/img/r1.png deleted file mode 100644 index ad655fdba..000000000 Binary files a/src/examples/memocats/img/r1.png and /dev/null differ diff --git a/src/examples/memocats/img/r2.png b/src/examples/memocats/img/r2.png deleted file mode 100644 index 220f04ff7..000000000 Binary files a/src/examples/memocats/img/r2.png and /dev/null differ diff --git a/src/examples/memocats/img/r3.png b/src/examples/memocats/img/r3.png deleted file mode 100644 index 785034115..000000000 Binary files a/src/examples/memocats/img/r3.png and /dev/null differ diff --git a/src/examples/memocats/img/r3827e721-5331-49b2-a37a-f868e15cae0d.png b/src/examples/memocats/img/r3827e721-5331-49b2-a37a-f868e15cae0d.png new file mode 100644 index 000000000..41ca35d55 Binary files /dev/null and b/src/examples/memocats/img/r3827e721-5331-49b2-a37a-f868e15cae0d.png differ diff --git a/src/examples/memocats/img/r3827e721-5331-49b2-a37a-f868e15cae0d@r.png b/src/examples/memocats/img/r3827e721-5331-49b2-a37a-f868e15cae0d@r.png new file mode 100644 index 000000000..3ccfb1399 Binary files /dev/null and b/src/examples/memocats/img/r3827e721-5331-49b2-a37a-f868e15cae0d@r.png differ diff --git a/src/examples/memocats/img/r4cd06702-30ed-4d80-8609-c1128f14f6a8.png b/src/examples/memocats/img/r4cd06702-30ed-4d80-8609-c1128f14f6a8.png new file mode 100644 index 000000000..5f8cad98e Binary files /dev/null and b/src/examples/memocats/img/r4cd06702-30ed-4d80-8609-c1128f14f6a8.png differ diff --git a/src/examples/memocats/img/r4cd06702-30ed-4d80-8609-c1128f14f6a8@r.png b/src/examples/memocats/img/r4cd06702-30ed-4d80-8609-c1128f14f6a8@r.png new file mode 100644 index 000000000..2b5514a21 Binary files /dev/null and b/src/examples/memocats/img/r4cd06702-30ed-4d80-8609-c1128f14f6a8@r.png differ diff --git a/src/examples/memocats/img/ra751fef2-0632-4105-b90b-51ffba3f38f5.png b/src/examples/memocats/img/ra751fef2-0632-4105-b90b-51ffba3f38f5.png new file mode 100644 index 000000000..6b7ece877 Binary files /dev/null and b/src/examples/memocats/img/ra751fef2-0632-4105-b90b-51ffba3f38f5.png differ diff --git a/src/examples/memocats/img/ra751fef2-0632-4105-b90b-51ffba3f38f5@r.png b/src/examples/memocats/img/ra751fef2-0632-4105-b90b-51ffba3f38f5@r.png new file mode 100644 index 000000000..353e6cb8f Binary files /dev/null and b/src/examples/memocats/img/ra751fef2-0632-4105-b90b-51ffba3f38f5@r.png differ diff --git a/src/examples/memocats/img/splash.png b/src/examples/memocats/img/splash.png index ad655fdba..2b5514a21 100644 Binary files a/src/examples/memocats/img/splash.png and b/src/examples/memocats/img/splash.png differ diff --git a/src/examples/yarn.ict b/src/examples/yarn.ict index f99f40094..7b7f32932 100644 --- a/src/examples/yarn.ict +++ b/src/examples/yarn.ict @@ -1,4 +1,4 @@ -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 notes: >- There is a number of interesting places to start learning the demo: @@ -163,179 +163,192 @@ skeletons: [] templates: - name: TheCat depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' uid: 9e7aec96-1ad3-4679-a248-01180284e78e texture: ec75835b-2afd-4f96-9373-804b4f80a84d extends: {} - lastmod: 1648093577260 + lastmod: 1661094209998 + events: [] + type: template + loopAnimation: true - name: OptionButton depth: 0 - oncreate: |- - this.text = new PIXI.Text(this.option, { - fill: 0x446ADB, - fontWeight: 600, - fontSize: 32, - wordWrap: true, - wordWrapWidth: 900, - align: 'center' - }); - this.text.anchor.x = this.text.anchor.y = 0.5; - this.addChild(this.text); - - this.scale.x = this.scale.y = 0; - ct.tween.add({ - obj: this.scale, - fields: { - x: 1, - y: 1 - }, - duration: 350, - curve: ct.tween.easeOutQuad - }); - - onstep: |- - if (ct.pointer.hovers(this)) { - if (ct.actions.Press.pressed) { - ct.room.story.say(this.option); - } - } - ondraw: '' - ondestroy: '' uid: cf5c44b2-f55a-4e18-a941-f7cdf5aecd0f texture: e0cbccef-93ee-4c8a-ab19-4fcef639963c extends: {} - lastmod: 1648093202395 + lastmod: 1661094187046 + events: + - lib: core + arguments: {} + code: |- + this.text = new PIXI.Text(this.option, { + fill: 0x446ADB, + fontWeight: 600, + fontSize: 32, + wordWrap: true, + wordWrapWidth: 900, + align: 'center' + }); + this.text.anchor.x = this.text.anchor.y = 0.5; + this.addChild(this.text); + + this.scale.x = this.scale.y = 0; + ct.tween.add({ + obj: this.scale, + fields: { + x: 1, + y: 1 + }, + duration: 350, + curve: ct.tween.easeOutQuad + }); + + eventKey: OnCreate + - eventKey: OnPointerClick + code: ct.room.story.say(this.option); + arguments: {} + lib: core + type: template + loopAnimation: true - name: NextButton depth: 0 - oncreate: |- - this.text = new PIXI.Text(this.option, { - fill: 0x446ADB, - fontWeight: 600, - fontSize: 32, - wordWrap: true, - wordWrapWidth: 900, - align: 'center' - }); - this.text.anchor.x = this.text.anchor.y = 0.5; - this.addChild(this.text); - - this.scale.x = this.scale.y = 0; - ct.tween.add({ - obj: this.scale, - fields: { - x: 1, - y: 1 - }, - duration: 350, - curve: ct.tween.easeOutQuad - }); - - onstep: |- - if (ct.pointer.hovers(this)) { - if (ct.actions.Press.pressed) { - ct.room.story.next(); - this.kill = true; - } - } - ondraw: '' - ondestroy: '' uid: 4340a6a4-65fa-4bcf-b950-38716097f29e texture: e0cbccef-93ee-4c8a-ab19-4fcef639963c extends: {} - lastmod: 1648093554744 - - name: Blurb - depth: 0 - oncreate: |- - this.text = new PIXI.Text(this.blurb, { - fill: this.blurbColor || 0x446ADB, - fontSize: 32, - wordWrap: true, - wordWrapWidth: this.blurbWidth || 1024 - }); - this.addChild(this.text); - this.alpha = 0; - this.y += 50; + lastmod: 1661094168112 + events: + - lib: core + arguments: {} + code: |- + this.text = new PIXI.Text(this.option, { + fill: 0x446ADB, + fontWeight: 600, + fontSize: 32, + wordWrap: true, + wordWrapWidth: 900, + align: 'center' + }); + this.text.anchor.x = this.text.anchor.y = 0.5; + this.addChild(this.text); - ct.tween.add({ - obj: this, - fields: { - y: this.y - 50, - alpha: 1 - }, - duration: 500, - curve: ct.tween.easeOutQuad - }) - .then(() => { + this.scale.x = this.scale.y = 0; + ct.tween.add({ + obj: this.scale, + fields: { + x: 1, + y: 1 + }, + duration: 350, + curve: ct.tween.easeOutQuad + }); + + eventKey: OnCreate + - eventKey: OnPointerClick + code: |- ct.room.story.next(); - }); - onstep: '' - ondraw: '' - ondestroy: '' + this.kill = true; + arguments: {} + lib: core + type: template + loopAnimation: true + - name: Blurb + depth: 0 uid: 04a0aea0-f448-4920-97ad-f98906ac0d7c texture: -1 extends: {} - lastmod: 1648093197419 + lastmod: 1661094216534 + events: + - lib: core + arguments: {} + code: |- + this.text = new PIXI.Text(this.blurb, { + fill: this.blurbColor || 0x446ADB, + fontSize: 32, + wordWrap: true, + wordWrapWidth: this.blurbWidth || 1024 + }); + this.addChild(this.text); + this.alpha = 0; + this.y += 50; + + ct.tween.add({ + obj: this, + fields: { + y: this.y - 50, + alpha: 1 + }, + duration: 500, + curve: ct.tween.easeOutQuad + }) + .then(() => { + ct.room.story.next(); + }); + eventKey: OnCreate + type: template + loopAnimation: true - name: RestartButton depth: 0 - oncreate: |- - this.text = new PIXI.Text('Restart', { - fill: 0x446ADB, - fontWeight: 600, - fontSize: 32, - wordWrap: true, - wordWrapWidth: 900, - align: 'center' - }); - this.text.anchor.x = this.text.anchor.y = 0.5; - this.addChild(this.text); - - this.scale.x = this.scale.y = 0; - ct.tween.add({ - obj: this.scale, - fields: { - x: 1, - y: 1 - }, - duration: 350, - curve: ct.tween.easeOutQuad - }); - - onstep: |- - if (ct.pointer.hovers(this)) { - if (ct.actions.Press.pressed) { - ct.rooms.switch(ct.room.name); - this.kill = true; - } - } - ondraw: '' - ondestroy: '' uid: 9a5d6ecd-82b4-4b26-827b-08904fbaf962 texture: e0cbccef-93ee-4c8a-ab19-4fcef639963c extends: {} - lastmod: 1648093204512 + lastmod: 1661094207455 + events: + - lib: core + arguments: {} + code: |- + this.text = new PIXI.Text('Restart', { + fill: 0x446ADB, + fontWeight: 600, + fontSize: 32, + wordWrap: true, + wordWrapWidth: 900, + align: 'center' + }); + this.text.anchor.x = this.text.anchor.y = 0.5; + this.addChild(this.text); + + this.scale.x = this.scale.y = 0; + ct.tween.add({ + obj: this.scale, + fields: { + x: 1, + y: 1 + }, + duration: 350, + curve: ct.tween.easeOutQuad + }); + + eventKey: OnCreate + - eventKey: OnPointerClick + code: |- + ct.rooms.switch(ct.room.name); + this.kill = true; + arguments: {} + lib: core + type: template + loopAnimation: true - name: TheGirl depth: 0 - oncreate: |- - ct.tween.add({ - obj: this, - fields: { - x: ct.camera.width * 0.15 - }, - duration: 500, - curve: ct.tween.easeOutQuad - }); - - this.scale.x = this.scale.y = 1.2; - onstep: '' - ondraw: '' - ondestroy: '' uid: 3c91a07b-0497-4623-a244-071a4e1951d8 texture: bc65f552-4e0c-407e-aee0-9dedd834b727 extends: {} - lastmod: 1648093574649 + lastmod: 1661094213542 + events: + - lib: core + arguments: {} + code: |- + ct.tween.add({ + obj: this, + fields: { + x: ct.camera.width * 0.15 + }, + duration: 500, + curve: ct.tween.easeOutQuad + }); + + this.scale.x = this.scale.y = 1.2; + eventKey: OnCreate + type: template + loopAnimation: true sounds: - name: Hehe uid: 0bd4a1eb-b5f1-4047-a8dd-56feca282803 @@ -344,25 +357,6 @@ sounds: styles: [] rooms: - name: Main - oncreate: |- - var latestBlurb; // we will need it to accurately position text lines - - ct.yarn.openFromFile('theStory.json?q=' + Math.random()) - .then(story => { - this.story = story; - storyEngine(story); // see it in the Settings tab -> Scripts - }); - - - this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { - fill: 0x446ADB, - fontSize: 24, - wordWrap: true, - wordWrapWidth: 1024 - }); - this.nodeTitle.x = 100; - this.nodeTitle.y = 50; - this.addChild(this.nodeTitle); onstep: '' ondraw: '' onleave: '' @@ -372,41 +366,54 @@ rooms: copies: - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9e7aec96-1ad3-4679-a248-01180284e78e - tx: 0.75 - ty: 0.75 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: d21d2804-d690-4c65-9657-7a1486b7f1d9 thumbnail: 7a1486b7f1d9 gridX: 64 gridY: 64 - lastmod: 1602729464201 + lastmod: 1661072102178 extends: {} backgroundColor: '#FFFFFF' - - name: Micro - oncreate: |- - var latestBlurb; // we will need it to accurately position text lines + events: + - lib: core + arguments: {} + code: |- + var latestBlurb; // we will need it to accurately position text lines - ct.yarn.openFromFile('micro.json?q=' + Math.random()) - .then(story => { - this.story = story; - storyEngine(story); // see it in the Settings tab -> Scripts - }); + ct.yarn.openFromFile('theStory.json?q=' + Math.random()) + .then(story => { + this.story = story; + storyEngine(story); // see it in the Settings tab -> Scripts + }); - this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { - fill: 0x446ADB, - fontSize: 24, - wordWrap: true, - wordWrapWidth: 1024 - }); - this.nodeTitle.x = 100; - this.nodeTitle.y = 50; - this.addChild(this.nodeTitle); + this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { + fill: 0x446ADB, + fontSize: 24, + wordWrap: true, + wordWrapWidth: 1024 + }); + this.nodeTitle.x = 100; + this.nodeTitle.y = 50; + this.addChild(this.nodeTitle); + eventKey: OnRoomStart + type: room + simulate: true + isUi: false + - name: Micro onstep: '' ondraw: '' onleave: '' @@ -416,41 +423,54 @@ rooms: copies: - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9e7aec96-1ad3-4679-a248-01180284e78e - tx: 0.75 - ty: 0.75 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: cb9565fc-6666-4f0c-bc6c-b49f813ea9ce thumbnail: b49f813ea9ce gridX: 64 gridY: 64 - lastmod: 1602729449081 + lastmod: 1661072103899 extends: {} backgroundColor: '#FFFFFF' - - name: Stop - oncreate: |- - var latestBlurb; // we will need it to accurately position text lines + events: + - lib: core + arguments: {} + code: |- + var latestBlurb; // we will need it to accurately position text lines - ct.yarn.openFromFile('stop.json?q=' + Math.random()) - .then(story => { - this.story = story; - storyEngine(story); // see it in the Settings tab -> Scripts - }); + ct.yarn.openFromFile('micro.json?q=' + Math.random()) + .then(story => { + this.story = story; + storyEngine(story); // see it in the Settings tab -> Scripts + }); - this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { - fill: 0x446ADB, - fontSize: 24, - wordWrap: true, - wordWrapWidth: 1024 - }); - this.nodeTitle.x = 100; - this.nodeTitle.y = 50; - this.addChild(this.nodeTitle); + this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { + fill: 0x446ADB, + fontSize: 24, + wordWrap: true, + wordWrapWidth: 1024 + }); + this.nodeTitle.x = 100; + this.nodeTitle.y = 50; + this.addChild(this.nodeTitle); + eventKey: OnRoomStart + type: room + simulate: true + isUi: false + - name: Stop onstep: '' ondraw: '' onleave: '' @@ -460,41 +480,54 @@ rooms: copies: - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9e7aec96-1ad3-4679-a248-01180284e78e - tx: 0.75 - ty: 0.75 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 95f73a99-6402-4848-81a7-d96488130d15 thumbnail: d96488130d15 gridX: 64 gridY: 64 - lastmod: 1602729455043 + lastmod: 1661072105674 extends: {} backgroundColor: '#FFFFFF' - - name: Wait - oncreate: |- - var latestBlurb; // we will need it to accurately position text lines + events: + - lib: core + arguments: {} + code: |- + var latestBlurb; // we will need it to accurately position text lines - ct.yarn.openFromFile('wait.json?q=' + Math.random()) - .then(story => { - this.story = story; - storyEngine(story); // see it in the Settings tab -> Scripts - }); + ct.yarn.openFromFile('stop.json?q=' + Math.random()) + .then(story => { + this.story = story; + storyEngine(story); // see it in the Settings tab -> Scripts + }); - this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { - fill: 0x446ADB, - fontSize: 24, - wordWrap: true, - wordWrapWidth: 1024 - }); - this.nodeTitle.x = 100; - this.nodeTitle.y = 50; - this.addChild(this.nodeTitle); + this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { + fill: 0x446ADB, + fontSize: 24, + wordWrap: true, + wordWrapWidth: 1024 + }); + this.nodeTitle.x = 100; + this.nodeTitle.y = 50; + this.addChild(this.nodeTitle); + eventKey: OnRoomStart + type: room + simulate: true + isUi: false + - name: Wait onstep: '' ondraw: '' onleave: '' @@ -504,21 +537,53 @@ rooms: copies: - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 9e7aec96-1ad3-4679-a248-01180284e78e - tx: 0.75 - ty: 0.75 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false uid: 48b25b49-58b8-44ee-b4c5-cc6b9ea24c38 thumbnail: cc6b9ea24c38 gridX: 64 gridY: 64 - lastmod: 1602729461377 + lastmod: 1661072107514 extends: {} backgroundColor: '#FFFFFF' + events: + - lib: core + arguments: {} + code: |- + var latestBlurb; // we will need it to accurately position text lines + + ct.yarn.openFromFile('wait.json?q=' + Math.random()) + .then(story => { + this.story = story; + storyEngine(story); // see it in the Settings tab -> Scripts + }); + + + this.nodeTitle = new PIXI.Text('Loading the awesomeness…', { + fill: 0x446ADB, + fontSize: 24, + wordWrap: true, + wordWrapWidth: 1024 + }); + this.nodeTitle.x = 100; + this.nodeTitle.y = 50; + this.addChild(this.nodeTitle); + eventKey: OnRoomStart + type: room + simulate: true + isUi: false actions: - name: Press methods: diff --git a/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38.png b/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38.png new file mode 100644 index 000000000..b2a91c5c4 Binary files /dev/null and b/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38.png differ diff --git a/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38@r.png b/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38@r.png new file mode 100644 index 000000000..07feb12f6 Binary files /dev/null and b/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38@r.png differ diff --git a/src/examples/yarn/img/r7a1486b7f1d9.png b/src/examples/yarn/img/r7a1486b7f1d9.png deleted file mode 100644 index 5949a1f9d..000000000 Binary files a/src/examples/yarn/img/r7a1486b7f1d9.png and /dev/null differ diff --git a/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15.png b/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15.png new file mode 100644 index 000000000..b2a91c5c4 Binary files /dev/null and b/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15.png differ diff --git a/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15@r.png b/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15@r.png new file mode 100644 index 000000000..07feb12f6 Binary files /dev/null and b/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15@r.png differ diff --git a/src/examples/yarn/img/rb49f813ea9ce.png b/src/examples/yarn/img/rb49f813ea9ce.png deleted file mode 100644 index 969cdc513..000000000 Binary files a/src/examples/yarn/img/rb49f813ea9ce.png and /dev/null differ diff --git a/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce.png b/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce.png new file mode 100644 index 000000000..b2a91c5c4 Binary files /dev/null and b/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce.png differ diff --git a/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce@r.png b/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce@r.png new file mode 100644 index 000000000..07feb12f6 Binary files /dev/null and b/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce@r.png differ diff --git a/src/examples/yarn/img/rcc6b9ea24c38.png b/src/examples/yarn/img/rcc6b9ea24c38.png deleted file mode 100644 index 969cdc513..000000000 Binary files a/src/examples/yarn/img/rcc6b9ea24c38.png and /dev/null differ diff --git a/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9.png b/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9.png new file mode 100644 index 000000000..da068b76f Binary files /dev/null and b/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9.png differ diff --git a/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9@r.png b/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9@r.png new file mode 100644 index 000000000..6f5a551af Binary files /dev/null and b/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9@r.png differ diff --git a/src/examples/yarn/img/rd96488130d15.png b/src/examples/yarn/img/rd96488130d15.png deleted file mode 100644 index 969cdc513..000000000 Binary files a/src/examples/yarn/img/rd96488130d15.png and /dev/null differ diff --git a/src/examples/yarn/img/splash.png b/src/examples/yarn/img/splash.png index 5949a1f9d..07feb12f6 100644 Binary files a/src/examples/yarn/img/splash.png and b/src/examples/yarn/img/splash.png differ diff --git a/src/icons/bell.svg b/src/icons/bell.svg new file mode 100644 index 000000000..bba561c19 --- /dev/null +++ b/src/icons/bell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/boosty.svg b/src/icons/boosty.svg new file mode 100644 index 000000000..d5574d69a --- /dev/null +++ b/src/icons/boosty.svg @@ -0,0 +1,3 @@ +Boosty icon + + diff --git a/src/icons/cursor.svg b/src/icons/cursor.svg new file mode 100644 index 000000000..56102beca --- /dev/null +++ b/src/icons/cursor.svg @@ -0,0 +1,2 @@ + + diff --git a/src/icons/lock.svg b/src/icons/lock.svg new file mode 100644 index 000000000..de09d9db3 --- /dev/null +++ b/src/icons/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/physics.svg b/src/icons/physics.svg new file mode 100644 index 000000000..2e1cb7b6d --- /dev/null +++ b/src/icons/physics.svg @@ -0,0 +1,2 @@ + + diff --git a/src/icons/redo.svg b/src/icons/redo.svg new file mode 100644 index 000000000..996380f66 --- /dev/null +++ b/src/icons/redo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/icons/undo.svg b/src/icons/undo.svg new file mode 100644 index 000000000..4a23bbdef --- /dev/null +++ b/src/icons/undo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/icons/unlock.svg b/src/icons/unlock.svg new file mode 100644 index 000000000..01dc35973 --- /dev/null +++ b/src/icons/unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/js/3rdparty/alertify.js b/src/js/3rdparty/alertify.js index c5329270e..d2d0d0222 100644 --- a/src/js/3rdparty/alertify.js +++ b/src/js/3rdparty/alertify.js @@ -395,6 +395,7 @@ _alertify.injectCSS(); + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); return { _$$alertify: _alertify, parent(elem) { diff --git a/src/js/3rdparty/riot.min.js b/src/js/3rdparty/riot.min.js index 1b969ec87..e207a353b 100644 --- a/src/js/3rdparty/riot.min.js +++ b/src/js/3rdparty/riot.min.js @@ -1,2 +1,2 @@ -/* Riot v3.6.1, @license MIT */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.riot=t.riot||{})}(this,function(t){"use strict";function e(t){return Zt.test(t)}function n(t){return typeof t===$t}function r(t){return t&&typeof t===Rt}function i(t){return typeof t===Pt}function o(t){return typeof t===It}function a(t){return i(t)||null===t||""===t}function s(t){return Array.isArray(t)||t instanceof Array}function u(t,e){var n=Object.getOwnPropertyDescriptor(t,e);return i(t[e])||n&&n.writable}function l(t){return Kt.test(t)}function c(t,e){return Array.prototype.slice.call((e||document).querySelectorAll(t))}function f(t,e){return(e||document).querySelector(t)}function p(){return document.createDocumentFragment()}function h(){return document.createTextNode("")}function d(t){return!!t.ownerSVGElement}function g(t){return"svg"===t?document.createElementNS(Ut,t):document.createElement(t)}function m(t,e){if(i(t.innerHTML)){var n=(new DOMParser).parseFromString(e,"application/xml"),r=t.ownerDocument.importNode(n.documentElement,!0);t.appendChild(r)}else t.innerHTML=e}function v(t,e){t.style.display=e?"":"none",t.hidden=!e}function y(t,e){t.removeAttribute(e)}function x(t){return Object.keys(t).reduce(function(e,n){return e+" "+n+": "+t[n]+";"},"")}function b(t,e){return t.getAttribute(e)}function _(t,e,n){var r=Vt.exec(e);r&&r[1]?t.setAttributeNS(Ht,r[1],n):t.setAttribute(e,n)}function w(t,e,n){t.insertBefore(e,n.parentNode&&n)}function O(t,e){if(t)for(var n;n=qt.exec(t);)e(n[1].toLowerCase(),n[2]||n[3]||n[4])}function N(t,e,n){if(t){var r,i=e(t,n);if(!1===i)return;for(t=t.firstChild;t;)r=t.nextSibling,N(t,e,i),t=r}}function j(t,e){for(var n=t?t.length:0,r=0;rr;)n--,U.apply(e[n],[e,n])}function U(t,e){t.splice(e,1),this.unmount(),dt(this.parent,this,this.__.tagName,!0)}function V(t){var e=this;j(Object.keys(this.tags),function(n){st.apply(e.tags[n],[n,t])})}function B(t,e,n){n?yt.apply(this,[t,e]):w(t,this.root,e.root)}function z(t,e,n){n?vt.apply(this,[t,e]):w(t,this.root,e.root)}function F(t,e){e?vt.call(this,t):t.appendChild(this.root)}function D(t,e,n){y(t,At);var r,i=typeof b(t,Lt)!==It||y(t,Lt),a=ft(t),u=Ot[a],l=t.parentNode,c=h(),f=ot(t),d=b(t,Tt),g=[],m=[],v=!Ot[a],x="VIRTUAL"===t.tagName;return n=ie.loopKeys(n),n.isLoop=!0,d&&y(t,Tt),l.insertBefore(c,t),l.removeChild(t),n.update=function(){n.value=ie(n.val,e);var l=p(),h=n.value,y=!s(h)&&!o(h),b=c.parentNode;b&&(y?h=(r=h||!1)?Object.keys(h).map(function(t){return $(n,h[t],t)}):[]:r=!1,d&&(h=h.filter(function(t,r){return n.key&&!y?!!ie(d,$(n,t,r,e)):!!ie(d,L(Object.create(e),t))})),j(h,function(o,s){var c=i&&typeof o===Rt&&!r,p=m.indexOf(o),d=-1===p,y=!d&&c?p:s,_=g[y],w=s>=m.length,O=c&&d||!c&&!_;o=!r&&n.key?$(n,o,s):o,O?((_=new it(u,{parent:e,isLoop:!0,isAnonymous:v,tagName:a,root:t.cloneNode(v),item:o,index:s},t.innerHTML)).mount(),w?F.apply(_,[l||b,x]):z.apply(_,[b,g[s],x]),w||m.splice(s,0,o),g.splice(s,0,_),f&&ht(e.tags,a,_,!0)):y!==s&&c&&(C(h,m[y])&&(B.apply(_,[b,g[s],x]),g.splice(s,0,g.splice(y,1)[0]),m.splice(s,0,m.splice(y,1)[0])),n.pos&&(_[n.pos]=s),!f&&_.tags&&V.call(_,s)),_.__.item=o,_.__.index=s,_.__.parent=e,O||_.update(o)}),H(h,g),m=h.slice(),b.insertBefore(l,c))},n.unmount=function(){j(g,function(t){t.unmount()})},n}function K(t,e,n){var r=this;N(t,function(e,i){var o,a,s,u=e.nodeType,l=i.parent;if(!n&&e===t)return{parent:l};if(3===u&&"STYLE"!==e.parentNode.tagName&&ie.hasExpr(e.nodeValue)&&l.children.push({dom:e,expr:e.nodeValue}),1!==u)return i;var c="VIRTUAL"===e.tagName;if(o=b(e,At))return c&&_(e,"loopVirtual",!0),l.children.push(D(e,r,o)),!1;if(o=b(e,Tt))return l.children.push(Object.create(ue).init(e,r,o)),!1;if((a=b(e,Et))&&ie.hasExpr(a))return l.children.push({isRtag:!0,expr:a,dom:e,attrs:[].slice.call(e.attributes)}),!1;if(s=ot(e),c&&(b(e,"virtualized")&&e.parentElement.removeChild(e),s||b(e,"virtualized")||b(e,"loopVirtual")||(s={tmpl:e.outerHTML})),s&&(e!==t||n)){if(!c||b(e,Et)){var f={root:e,parent:r,hasImpl:!0};return l.children.push(ut(s,f,e.innerHTML,r)),!1}_(e,"virtualized",!0);var p=new it({tmpl:e.outerHTML},{root:e,parent:r},e.innerHTML);l.children.push(p)}return q.apply(r,[e,e.attributes,function(t,e){e&&l.children.push(e)}]),{parent:l}},{parent:{children:e}})}function q(t,n,r){var i=this;j(n,function(n){if(!n)return!1;var o,a=n.name,s=e(a);C(Ct,a)?o=Object.create(le).init(t,i,a,n.value):ie.hasExpr(n.value)&&(o={dom:t,expr:n.value,attr:a,bool:s}),r(n,o)})}function W(t,e,n){var r="o"===n[0],i=r?"select>":"table>";if(t.innerHTML="<"+i+e.trim()+"=0&&/\s/.test(t[e]););return e}var e="[{(,;:?=|&!^~>%*/",n=["case","default","do","else","in","instanceof","prefix","return","typeof","void","yield"],r=n.reduce(function(t,e){return t+e.slice(-1)},""),i=/^\/(?=[^*>/])[^[/\\]*(?:(?:\\.|\[(?:\\.|[^\]\\]*)*\])[^[\\/]*)*?\/[gimuy]*/,o=/[$\w]/;return function(a,s){var u=/.*/g,l=u.lastIndex=s++,c=u.exec(a)[0].match(i);if(c){var f=l+c[0].length,p=a[l=t(a,l)];if(l<0||~e.indexOf(p))return f;if("."===p)"."===a[l-1]&&(s=f);else if("+"===p||"-"===p)(a[--l]!==p||(l=t(a,l))<0||!o.test(a[l]))&&(s=f);else if(~r.indexOf(p)){for(var h=l+1;--l>=0&&o.test(a[l]););~n.indexOf(a.slice(l+1,h))&&(s=f)}}return s}}(),re=function(t){function e(t){return t}function n(t,e){return e||(e=x),new RegExp(t.source.replace(/{/g,e[2]).replace(/}/g,e[3]),t.global?u:"")}function r(t){if(t===m)return v;var e=t.split(" ");if(2!==e.length||p.test(t))throw new Error('Unsupported brackets "'+t+'"');return e=e.concat(t.replace(h,"\\").split(" ")),e[4]=n(e[1].length>1?/{[\S\s]*?}/:v[4],e),e[5]=n(t.length>3?/\\({|})/g:v[5],e),e[6]=n(v[6],e),e[7]=RegExp("\\\\("+e[3]+")|([[({])|("+e[3]+")|"+d,u),e[8]=t,e}function i(t){return t instanceof RegExp?a(t):x[t]}function o(t){(t||(t=m))!==x[8]&&(x=r(t),a=t===m?e:n,x[9]=a(v[9])),y=t}var a,s,u="g",l=/\/\*[^*]*\*+(?:[^*\/][^*]*\*+)*\//g,c=/"[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|`[^`\\]*(?:\\[\S\s][^`\\]*)*`/g,f=c.source+"|"+/(?:\breturn\s+|(?:[$\w\)\]]|\+\+|--)\s*(\/)(?![*\/]))/.source+"|"+/\/(?=[^*\/])[^[\/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[\/\\]*)*?([^<]\/)[gim]*/.source,p=RegExp("[\\x00-\\x1F<>a-zA-Z0-9'\",;\\\\]"),h=/(?=[[\]()*+?.^$|])/g,d=c.source+"|"+/(\/)(?![*\/])/.source,g={"(":RegExp("([()])|"+d,u),"[":RegExp("([[\\]])|"+d,u),"{":RegExp("([{}])|"+d,u)},m="{ }",v=["{","}","{","}",/{[^}]*}/,/\\([{}])/g,/\\({)|{/g,RegExp("\\\\(})|([[({])|(})|"+d,u),m,/^\s*{\^?\s*([$\w]+)(?:\s*,\s*(\S+))?\s+in\s+(\S.*)\s*}/,/(^|[^\\]){=[\S\s]*?}/],y=void 0,x=[];return i.split=function(t,e,n){function r(t){d&&(t=d+t,d=""),e||a?f.push(t&&t.replace(n[5],"$1")):f.push(t)}function i(n,r,i){return i&&(r=ne(t,n)),e&&r>n+2&&(l="⁗"+h.length+"~",h.push(t.slice(n,r)),d+=t.slice(s,n)+l,s=r),r}n||(n=x);var o,a,s,u,l,c,f=[],p=n[6],h=[],d="";for(a=s=p.lastIndex=0;o=p.exec(t);){if(c=p.lastIndex,u=o.index,a){if(o[2]){var m=o[2],v=g[m],y=1;for(v.lastIndex=c;o=v.exec(t);)if(o[1]){if(o[1]===m)++y;else if(!--y)break}else v.lastIndex=i(o.index,v.lastIndex,o[2]);p.lastIndex=y?t.length:v.lastIndex;continue}if(!o[3]){p.lastIndex=i(u,c,o[4]);continue}}o[1]||(r(t.slice(s,u)),s=p.lastIndex,(p=n[6+(a^=1)]).lastIndex=s)}return t&&s %s",e.riotData.tagName||"Unknown tag",this.tmpl),console.log(this.data))}function n(t){var e=r(t);return"try{return "!==e.slice(0,11)&&(e="return "+e),new Function("E",e+";")}function r(t){var e,n=re.split(t.replace(s,'"'),1),r=n.qblocks;if(n.length>2||n[0]){var o,a,l=[];for(o=a=0;o1?"["+i.join(",")+'].join(" ").trim()':i[0]:o(t,e)}return t}function o(t,e,n){var r;return t=t.replace(p,function(t,e,n,i,o){return n&&(i=r?0:i+t.length,"this"!==n&&"global"!==n&&"window"!==n?(t=e+'("'+n+f+n,i&&(r="."===(o=o[i])||"("===o||"["===o)):i&&(r=!h.test(o.slice(i)))),t}),r&&(t="try{return "+t+"}catch(e){E(e,this)}"),n?t=(r?"function(){"+t+"}.call(this)":"("+t+")")+'?"'+n+'":""':e&&(t="function(v){"+(r?t.replace("return ","v="):"v=("+t+")")+';return v||v===0?v:""}.call(this)'),t}var a={};t.hasExpr=re.hasExpr,t.loopKeys=re.loopKeys,t.clearCache=function(){a={}},t.errorHandler=null;var s=/\u2057/g,u=/\u2057(\d+)~/g,l=/^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,c={"(":/[()]/g,"[":/[[\]]/g,"{":/[{}]/g},f='"in this?this:'+("object"!=typeof window?"global":"window")+").",p=/[,{][\$\w]+(?=:)|(^ *|[^$\w\.{])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,h=/^(?=(\.[$\w]+))\1(?:[^.[(]|$)/;return t.version=re.version="v3.0.8",t}(),oe=function(t){t=t||{};var e={},n=Array.prototype.slice;return Object.defineProperties(t,{on:{value:function(n,r){return"function"==typeof r&&(e[n]=e[n]||[]).push(r),t},enumerable:!1,writable:!1,configurable:!1},off:{value:function(n,r){if("*"!=n||r)if(r)for(var i,o=e[n],a=0;i=o&&o[a];++a)i==r&&o.splice(a--,1);else delete e[n];else e={};return t},enumerable:!1,writable:!1,configurable:!1},one:{value:function(e,n){function r(){t.off(e,r),n.apply(t,arguments)}return t.on(e,r)},enumerable:!1,writable:!1,configurable:!1},trigger:{value:function(r){var i,o,a,s=arguments,u=arguments.length-1,l=new Array(u);for(a=0;a|>([\S\s]*?)<\/yield\s*>|>)/gi,pe=/]*)['"]\s*>([\S\s]*?)<\/yield\s*>/gi,he=/|>([\S\s]*?)<\/yield\s*>)/gi,de={tr:"tbody",th:"tr",td:"tr",col:"colgroup"},ge=Gt&&Gt<10?zt:Ft,me="div",ve="svg",ye={},xe=ye[Nt]={},be=0,_e=Object.freeze({Tag:Q,tag:J,tag2:X,mount:Y,mixin:tt,update:et,unregister:nt,version:"v3.6.1"}),we=0,Oe=Object.freeze({getTag:ot,inheritFrom:at,moveChildTag:st,initChildTag:ut,getImmediateCustomParentTag:lt,unmountAll:ct,getTagName:ft,cleanUpData:pt,arrayishAdd:ht,arrayishRemove:dt,mountTo:gt,makeReplaceVirtual:mt,makeVirtual:vt,moveVirtual:yt,selectTags:xt}),Ne=se,je={tmpl:ie,brackets:re,styleManager:ee,vdom:wt,styleNode:ee.styleNode,dom:Jt,check:Qt,misc:ae,tags:Oe},Ce=Q,Ee=J,Te=X,Ae=Y,Le=tt,ke=et,Me=nt,Se=oe,Ie=L({},_e,{observable:oe,settings:Ne,util:je});t.settings=Ne,t.util=je,t.Tag=Ce,t.tag=Ee,t.tag2=Te,t.mount=Ae,t.mixin=Le,t.update=ke,t.unregister=Me,t.version="v3.6.1",t.observable=Se,t.default=Ie,Object.defineProperty(t,"__esModule",{value:!0})}); +/* Riot v3.6.1, @license MIT */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.riot=t.riot||{})}(this,function(t){"use strict";function e(t){return Zt.test(t)}function n(t){return typeof t===$t}function r(t){return t&&typeof t===Rt}function i(t){return typeof t===Pt}function o(t){return typeof t===It}function a(t){return i(t)||null===t||""===t}function s(t){return Array.isArray(t)||t instanceof Array}function u(t,e){var n=Object.getOwnPropertyDescriptor(t,e);return i(t[e])||n&&n.writable}function l(t){return Kt.test(t)}function c(t,e){return Array.prototype.slice.call((e||document).querySelectorAll(t))}function f(t,e){return(e||document).querySelector(t)}function p(){return document.createDocumentFragment()}function h(){return document.createTextNode("")}function d(t){return!!t.ownerSVGElement}function g(t){return"svg"===t?document.createElementNS(Ut,t):document.createElement(t)}function m(t,e){if(i(t.innerHTML)){var n=(new DOMParser).parseFromString(e,"application/xml"),r=t.ownerDocument.importNode(n.documentElement,!0);t.appendChild(r)}else t.innerHTML=e}function v(t,e){t.style.display=e?"":"none",t.hidden=!e}function y(t,e){t.removeAttribute(e)}function x(t){return Object.keys(t).reduce(function(e,n){return e+" "+n+": "+t[n]+";"},"")}function b(t,e){return t.getAttribute(e)}function _(t,e,n){var r=Vt.exec(e);r&&r[1]?t.setAttributeNS(Ht,r[1],n):t.setAttribute(e,n)}function w(t,e,n){t.insertBefore(e,n.parentNode&&n)}function O(t,e){if(t)for(var n;n=qt.exec(t);)e(n[1].toLowerCase(),n[2]||n[3]||n[4])}function N(t,e,n){if(t){var r,i=e(t,n);if(!1===i)return;for(t=t.firstChild;t;)r=t.nextSibling,N(t,e,i),t=r}}function j(t,e){for(var n=t?t.length:0,r=0;rr;)n--,U.apply(e[n],[e,n])}function U(t,e){t.splice(e,1),this.unmount(),dt(this.parent,this,this.__.tagName,!0)}function V(t){var e=this;j(Object.keys(this.tags),function(n){st.apply(e.tags[n],[n,t])})}function B(t,e,n){n?yt.apply(this,[t,e]):w(t,this.root,e.root)}function z(t,e,n){n?vt.apply(this,[t,e]):w(t,this.root,e.root)}function F(t,e){e?vt.call(this,t):t.appendChild(this.root)}function D(t,e,n){y(t,At);var r,i=typeof b(t,Lt)!==It||y(t,Lt),a=ft(t),u=Ot[a],l=t.parentNode,c=h(),f=ot(t),d=b(t,Tt),g=[],m=[],v=!Ot[a],x="VIRTUAL"===t.tagName;return n=ie.loopKeys(n),n.isLoop=!0,d&&y(t,Tt),l.insertBefore(c,t),l.removeChild(t),n.update=function(){n.value=ie(n.val,e);var l=p(),h=n.value,y=!s(h)&&!o(h),b=c.parentNode;b&&(y?h=(r=h||!1)?Object.keys(h).map(function(t){return $(n,h[t],t)}):[]:r=!1,d&&(h=h.filter(function(t,r){return n.key&&!y?!!ie(d,$(n,t,r,e)):!!ie(d,L(Object.create(e),t))})),j(h,function(o,s){var c=i&&typeof o===Rt&&!r,p=m.indexOf(o),d=-1===p,y=!d&&c?p:s,_=g[y],w=s>=m.length,O=c&&d||!c&&!_;o=!r&&n.key?$(n,o,s):o,O?((_=new it(u,{parent:e,isLoop:!0,isAnonymous:v,tagName:a,root:t.cloneNode(v),item:o,index:s},t.innerHTML)).mount(),w?F.apply(_,[l||b,x]):z.apply(_,[b,g[s],x]),w||m.splice(s,0,o),g.splice(s,0,_),f&&ht(e.tags,a,_,!0)):y!==s&&c&&(C(h,m[y])&&(B.apply(_,[b,g[s],x]),g.splice(s,0,g.splice(y,1)[0]),m.splice(s,0,m.splice(y,1)[0])),n.pos&&(_[n.pos]=s),!f&&_.tags&&V.call(_,s)),_.__.item=o,_.__.index=s,_.__.parent=e,O||_.update(o)}),H(h,g),m=h.slice(),b.insertBefore(l,c))},n.unmount=function(){j(g,function(t){t.unmount()})},n}function K(t,e,n){var r=this;N(t,function(e,i){var o,a,s,u=e.nodeType,l=i.parent;if(!n&&e===t)return{parent:l};if(3===u&&"STYLE"!==e.parentNode.tagName&&ie.hasExpr(e.nodeValue)&&l.children.push({dom:e,expr:e.nodeValue}),1!==u)return i;var c="VIRTUAL"===e.tagName;if(o=b(e,At))return c&&_(e,"loopVirtual",!0),l.children.push(D(e,r,o)),!1;if(o=b(e,Tt))return l.children.push(Object.create(ue).init(e,r,o)),!1;if((a=b(e,Et))&&ie.hasExpr(a))return l.children.push({isRtag:!0,expr:a,dom:e,attrs:[].slice.call(e.attributes)}),!1;if(s=ot(e),c&&(b(e,"virtualized")&&e.parentElement.removeChild(e),s||b(e,"virtualized")||b(e,"loopVirtual")||(s={tmpl:e.outerHTML})),s&&(e!==t||n)){if(!c||b(e,Et)){var f={root:e,parent:r,hasImpl:!0};return l.children.push(ut(s,f,e.innerHTML,r)),!1}_(e,"virtualized",!0);var p=new it({tmpl:e.outerHTML},{root:e,parent:r},e.innerHTML);l.children.push(p)}return q.apply(r,[e,e.attributes,function(t,e){e&&l.children.push(e)}]),{parent:l}},{parent:{children:e}})}function q(t,n,r){var i=this;j(n,function(n){if(!n)return!1;var o,a=n.name,s=e(a);C(Ct,a)?o=Object.create(le).init(t,i,a,n.value):ie.hasExpr(n.value)&&(o={dom:t,expr:n.value,attr:a,bool:s}),r(n,o)})}function W(t,e,n){var r="o"===n[0],i=r?"select>":"table>";if(t.innerHTML="<"+i+e.trim()+"=0&&/\s/.test(t[e]););return e}var e="[{(,;:?=|&!^~>%*/",n=["case","default","do","else","in","instanceof","prefix","return","typeof","void","yield"],r=n.reduce(function(t,e){return t+e.slice(-1)},""),i=/^\/(?=[^*>/])[^[/\\]*(?:(?:\\.|\[(?:\\.|[^\]\\]*)*\])[^[\\/]*)*?\/[gimuy]*/,o=/[$\w]/;return function(a,s){var u=/.*/g,l=u.lastIndex=s++,c=u.exec(a)[0].match(i);if(c){var f=l+c[0].length,p=a[l=t(a,l)];if(l<0||~e.indexOf(p))return f;if("."===p)"."===a[l-1]&&(s=f);else if("+"===p||"-"===p)(a[--l]!==p||(l=t(a,l))<0||!o.test(a[l]))&&(s=f);else if(~r.indexOf(p)){for(var h=l+1;--l>=0&&o.test(a[l]););~n.indexOf(a.slice(l+1,h))&&(s=f)}}return s}}(),re=function(t){function e(t){return t}function n(t,e){return e||(e=x),new RegExp(t.source.replace(/{/g,e[2]).replace(/}/g,e[3]),t.global?u:"")}function r(t){if(t===m)return v;var e=t.split(" ");if(2!==e.length||p.test(t))throw new Error('Unsupported brackets "'+t+'"');return e=e.concat(t.replace(h,"\\").split(" ")),e[4]=n(e[1].length>1?/{[\S\s]*?}/:v[4],e),e[5]=n(t.length>3?/\\({|})/g:v[5],e),e[6]=n(v[6],e),e[7]=RegExp("\\\\("+e[3]+")|([[({])|("+e[3]+")|"+d,u),e[8]=t,e}function i(t){return t instanceof RegExp?a(t):x[t]}function o(t){(t||(t=m))!==x[8]&&(x=r(t),a=t===m?e:n,x[9]=a(v[9])),y=t}var a,s,u="g",l=/\/\*[^*]*\*+(?:[^*\/][^*]*\*+)*\//g,c=/"[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|`[^`\\]*(?:\\[\S\s][^`\\]*)*`/g,f=c.source+"|"+/(?:\breturn\s+|(?:[$\w\)\]]|\+\+|--)\s*(\/)(?![*\/]))/.source+"|"+/\/(?=[^*\/])[^[\/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[\/\\]*)*?([^<]\/)[gim]*/.source,p=RegExp("[\\x00-\\x1F<>a-zA-Z0-9'\",;\\\\]"),h=/(?=[[\]()*+?.^$|])/g,d=c.source+"|"+/(\/)(?![*\/])/.source,g={"(":RegExp("([()])|"+d,u),"[":RegExp("([[\\]])|"+d,u),"{":RegExp("([{}])|"+d,u)},m="{ }",v=["{","}","{","}",/{[^}]*}/,/\\([{}])/g,/\\({)|{/g,RegExp("\\\\(})|([[({])|(})|"+d,u),m,/^\s*{\^?\s*([$\w]+)(?:\s*,\s*(\S+))?\s+in\s+(\S.*)\s*}/,/(^|[^\\]){=[\S\s]*?}/],y=void 0,x=[];return i.split=function(t,e,n){function r(t){d&&(t=d+t,d=""),e||a?f.push(t&&t.replace(n[5],"$1")):f.push(t)}function i(n,r,i){return i&&(r=ne(t,n)),e&&r>n+2&&(l="⁗"+h.length+"~",h.push(t.slice(n,r)),d+=t.slice(s,n)+l,s=r),r}n||(n=x);var o,a,s,u,l,c,f=[],p=n[6],h=[],d="";for(a=s=p.lastIndex=0;o=p.exec(t);){if(c=p.lastIndex,u=o.index,a){if(o[2]){var m=o[2],v=g[m],y=1;for(v.lastIndex=c;o=v.exec(t);)if(o[1]){if(o[1]===m)++y;else if(!--y)break}else v.lastIndex=i(o.index,v.lastIndex,o[2]);p.lastIndex=y?t.length:v.lastIndex;continue}if(!o[3]){p.lastIndex=i(u,c,o[4]);continue}}o[1]||(r(t.slice(s,u)),s=p.lastIndex,(p=n[6+(a^=1)]).lastIndex=s)}return t&&s %s",e.riotData.tagName||"Unknown tag",this.tmpl),console.log(this.data))}function n(t){var e=r(t);return"try{return "!==e.slice(0,11)&&(e="return "+e),new Function("E",e+";")}function r(t){var e,n=re.split(t.replace(s,'"'),1),r=n.qblocks;if(n.length>2||n[0]){var o,a,l=[];for(o=a=0;o1?"["+i.join(",")+'].join(" ").trim()':i[0]:o(t,e)}return t}function o(t,e,n){var r;return t=t.replace(p,function(t,e,n,i,o){return n&&(i=r?0:i+t.length,"this"!==n&&"global"!==n&&"window"!==n?(t=e+'("'+n+f+n,i&&(r="."===(o=o[i])||"("===o||"["===o)):i&&(r=!h.test(o.slice(i)))),t}),r&&(t="try{return "+t+"}catch(e){E(e,this)}"),n?t=(r?"function(){"+t+"}.call(this)":"("+t+")")+'?"'+n+'":""':e&&(t="function(v){"+(r?t.replace("return ","v="):"v=("+t+")")+';return v||v===0?v:""}.call(this)'),t}var a={};t.hasExpr=re.hasExpr,t.loopKeys=re.loopKeys,t.clearCache=function(){a={}},t.errorHandler=null;var s=/\u2057/g,u=/\u2057(\d+)~/g,l=/^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,c={"(":/[()]/g,"[":/[[\]]/g,"{":/[{}]/g},f='"in this?this:'+("object"!=typeof window?"global":"window")+").",p=/[,{][\$\w]+(?=:)|(^ *|[^$\w\.{])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,h=/^(?=(\.[$\w]+))\1(?:[^.[(]|$)/;return t.version=re.version="v3.0.8",t}(),oe=function(t){t=t||{};var e={},n=Array.prototype.slice;return Object.defineProperties(t,{on:{value:function(n,r){return"function"==typeof r&&(e[n]=e[n]||[]).push(r),t},enumerable:!1,writable:!1,configurable:!1},off:{value:function(n,r){if("*"!=n||r)if(r)for(var i,o=e[n],a=0;i=o&&o[a];++a)i==r&&o.splice(a--,1);else delete e[n];else e={};return t},enumerable:!1,writable:!1,configurable:!1},one:{value:function(e,n){function r(){t.off(e,r),n.apply(t,arguments)}return t.on(e,r)},enumerable:!1,writable:!1,configurable:!1},trigger:{value:function(r){var i,o,a,s=arguments,u=arguments.length-1,l=new Array(u);for(a=0;a|>([\S\s]*?)<\/yield\s*>|>)/gi,pe=/]*)['"]\s*>([\S\s]*?)<\/yield\s*>/gi,he=/|>([\S\s]*?)<\/yield\s*>)/gi,de={tr:"tbody",th:"tr",td:"tr",col:"colgroup"},ge=Gt&&Gt<10?zt:Ft,me="div",ve="svg",ye={},xe=ye[Nt]={},be=0,_e=Object.freeze({Tag:Q,tag:J,tag2:X,mount:Y,mixin:tt,update:et,unregister:nt,version:"v3.6.1"}),we=0,Oe=Object.freeze({getTag:ot,inheritFrom:at,moveChildTag:st,initChildTag:ut,getImmediateCustomParentTag:lt,unmountAll:ct,getTagName:ft,cleanUpData:pt,arrayishAdd:ht,arrayishRemove:dt,mountTo:gt,makeReplaceVirtual:mt,makeVirtual:vt,moveVirtual:yt,selectTags:xt}),Ne=se,je={tmpl:ie,brackets:re,styleManager:ee,vdom:wt,styleNode:ee.styleNode,dom:Jt,check:Qt,misc:ae,tags:Oe},Ce=Q,Ee=J,Te=X,Ae=Y,Le=tt,ke=et,Me=nt,Se=oe,Ie=L({},_e,{observable:oe,settings:Ne,util:je});t.settings=Ne,t.util=je,t.Tag=Ce,t.tag=Ee,t.tag2=Te,t.mount=Ae,t.mixin=Le,t.update=ke,t.unregister=Me,t.version="v3.6.1",t.observable=Se,t.default=Ie,Object.defineProperty(t,"__esModule",{value:!0})}); diff --git a/src/js/3rdparty/soundbox.js b/src/js/3rdparty/soundbox.js deleted file mode 100644 index 6148b18e4..000000000 --- a/src/js/3rdparty/soundbox.js +++ /dev/null @@ -1,11 +0,0 @@ -(function () { - 'use strict';class SoundBox{constructor(){this.sounds={};this.instances=[];this.default_volume=1}load(a,b,d){this.sounds[a]=new Audio(b);if("function"==typeof d)this.sounds[a].addEventListener("canplaythrough",d);else return new Promise((c,b)=>{this.sounds[a].addEventListener("canplaythrough",c);this.sounds[a].addEventListener("error",b)})}remove(a){"undefined"!=typeof this.sounds&&delete this.sounds[a]}play(a,b,d=null){if("undefined"==typeof this.sounds[a])return console.error("Can't find sound called '"+ -a+"'."),!1;var c=this.sounds[a].cloneNode(!0);c.volume=d||this.default_volume;c.play();this.instances.push(c);c.addEventListener("ended",()=>{let a=this.instances.indexOf(c);-1!=a&&this.instances.splice(a,1)});return"function"==typeof b?(c.addEventListener("ended",b),!0):new Promise((a,b)=>c.addEventListener("ended",a))}stop_all(){let a=this.instances.slice();for(let b of a)b.pause(),b.dispatchEvent(new Event("ended"))}}SoundBox.version="0.3.4"; - - const soundbox = new SoundBox(); - - soundbox.load('Success', 'data/Success.wav'); - soundbox.load('Failure', 'data/Failure.wav'); - - window.soundbox = soundbox; -})(); diff --git a/src/js/addMigrationMethod.js b/src/js/addMigrationMethod.js new file mode 100644 index 000000000..134239a42 --- /dev/null +++ b/src/js/addMigrationMethod.js @@ -0,0 +1,11 @@ +(function addMigrationMethod(window) { + window.migrationProcess = window.migrationProcess || []; + window.applyMigrationCode = function applyMigrationCode(version) { + const process = window.migrationProcess.find(process => process.version === version); + if (!process) { + throw new Error(`Cannot find migration code for version ${version}`); + } + process.process(global.currentProject) + .then(() => window.alertify.success(`Applied migration code for version ${version}`, 'success', 3000)); + }; +})(this); diff --git a/src/js/gulpWatch.js b/src/js/gulpWatch.js index 023aa7627..f759473a7 100644 --- a/src/js/gulpWatch.js +++ b/src/js/gulpWatch.js @@ -22,9 +22,12 @@ themeWatcher.on('change', src => { const incoming = src.split(/[/\\]/).pop(); if (incoming === `theme${localStorage.UItheme}.css`) { - const link = document.getElementById('themeCSS'); - link.href = link.href.replace(/\?.*|$/, '?' + Date.now()); - window.alertify.success('Updated theme ✅'); + // For some reason Windows returns empty files from time to time w/o a delay + setTimeout(() => { + const link = document.getElementById('themeCSS'); + link.href = link.href.replace(/\?.*|$/, '?' + Date.now()); + window.alertify.success('Updated theme ✅'); + }, 100); } }); diff --git a/src/js/loadProject.js b/src/js/loadProject.js deleted file mode 100644 index e21d02b6e..000000000 --- a/src/js/loadProject.js +++ /dev/null @@ -1,235 +0,0 @@ -(function addLoadProjectMethod(window) { - window.migrationProcess = window.migrationProcess || []; - window.applyMigrationCode = function applyMigrationCode(version) { - const process = window.migrationProcess.find(process => process.version === version); - if (!process) { - throw new Error(`Cannot find migration code for version ${version}`); - } - process.process(global.currentProject) - .then(() => window.alertify.success(`Applied migration code for version ${version}`, 'success', 3000)); - }; - - const fs = require('fs-extra'), - path = require('path'); - // @see https://semver.org/ - const semverRegex = /(\d+)\.(\d+)\.(\d+)(-[A-Za-z.-]*(\d+)?[A-Za-z.-]*)?/; - const semverToArray = string => { - const raw = semverRegex.exec(string); - return [ - raw[1], - raw[2], - raw[3], - // -next- versions and other postfixes will count as a fourth component. - // They all will apply before regular versions - raw[4] ? raw[5] || 1 : null - ]; - }; - - /** - * Applies migration scripts to older projects. - */ - var adapter = async project => { - var version = semverToArray(project.ctjsVersion || '0.2.0'); - - const migrationToExecute = window.migrationProcess - // Sort all the patches chronologically - .sort((m1, m2) => { - const m1Version = semverToArray(m1.version); - const m2Version = semverToArray(m2.version); - - for (let i = 0; i < 4; i++) { - if (m1Version[i] < m2Version[i] || m1Version[i] === null) { - return -1; - } else if (m1Version[i] > m2Version[i]) { - return 1; - } - } - // eslint-disable-next-line no-console - console.warn(`Two equivalent versions found for migration, ${m1.version} and ${m2.version}.`); - return 0; - }) - // Throw out patches for current and previous versions - .filter((migration) => { - const migrationVersion = semverToArray(migration.version); - for (let i = 0; i < 3; i++) { - // if any of the first three version numbers is lower than project's, - // skip the patch - if (migrationVersion[i] < version[i]) { - return false; - } - if (migrationVersion[i] > version[i]) { - return true; - } - } - // a lazy check for equal base versions - if (migrationVersion.slice(0, 3).join('.') === version.slice(0, 3).join('.')) { - // handle the case with two postfixed versions - if (migrationVersion[3] !== null && version[3] !== null) { - return migrationVersion[3] > version[3]; - } - // postfixed source, unpostfixed patch - if (migrationVersion[3] === null && version[3] !== null) { - return true; - } - return false; - } - return true; - }); - - if (migrationToExecute.length) { - // eslint-disable-next-line no-console - console.debug(`Applying migration sequence: patches ${migrationToExecute.map(m => m.version).join(', ')}.`); - } - for (const migration of migrationToExecute) { - // eslint-disable-next-line no-console - console.debug(`Migrating project from version ${project.ctjsVersion || '0.2.0'} to ${migration.version}`); - // We do need to apply updates in a sequence - // eslint-disable-next-line no-await-in-loop - await migration.process(project); - } - - // Unfortunately, recent versions of eslint give false positives on this line - // @see https://github.com/eslint/eslint/issues/11900 - // @see https://github.com/eslint/eslint/issues/11899 - // eslint-disable-next-line require-atomic-updates - project.ctjsVersion = process.versions.ctjs; - }; - - /** - * Opens the project and refreshes the whole app. - * - * @param {Object} projectData Loaded JSON file, in js object form - * @returns {void} - */ - var loadProject = async projectData => { - const glob = require('./data/node_requires/glob'); - global.currentProject = projectData; - window.alertify.log(window.languageJSON.intro.loadingProject); - glob.modified = false; - - try { - await adapter(projectData); - fs.ensureDir(global.projdir); - fs.ensureDir(global.projdir + '/img'); - fs.ensureDir(global.projdir + '/snd'); - - const lastProjects = localStorage.lastProjects ? localStorage.lastProjects.split(';') : []; - if (lastProjects.indexOf(path.normalize(global.projdir + '.ict')) !== -1) { - lastProjects.splice(lastProjects.indexOf(path.normalize(global.projdir + '.ict')), 1); - } - lastProjects.unshift(path.normalize(global.projdir + '.ict')); - if (lastProjects.length > 15) { - lastProjects.pop(); - } - localStorage.lastProjects = lastProjects.join(';'); - - if (global.currentProject.settings.title) { - document.title = global.currentProject.settings.title + ' — ct.js'; - } - - glob.scriptTypings = {}; - for (const script of global.currentProject.scripts) { - glob.scriptTypings[script.name] = [ - monaco.languages.typescript.javascriptDefaults.addExtraLib(script.code), - monaco.languages.typescript.typescriptDefaults.addExtraLib(script.code) - ]; - } - - const {loadAllTypedefs, resetTypedefs} = require('./data/node_requires/resources/modules/typedefs'); - resetTypedefs(); - loadAllTypedefs(); - - window.signals.trigger('projectLoaded'); - setTimeout(() => { - window.riot.update(); - }, 0); - } catch (err) { - window.alertify.alert(window.languageJSON.intro.loadingProjectError + err); - } - }; - - /** - * Checks file format and loads it - * - * @param {String} proj The path to the file. - * @returns {void} - */ - var loadProjectFile = async proj => { - const textProjData = await fs.readFile(proj, 'utf8'); - let projectData; - // Before v1.3, projects were stored in JSON format - try { - if (textProjData.indexOf('{') === 0) { // First, make a silly check for JSON files - projectData = JSON.parse(textProjData); - } else { - try { - const YAML = require('js-yaml'); - projectData = YAML.load(textProjData); - } catch (e) { - // whoopsie, wrong window - // eslint-disable-next-line no-console - console.warn(`Tried to load a file ${proj} as a YAML, but got an error (see below). Falling back to JSON.`); - console.error(e); - projectData = JSON.parse(textProjData); - } - } - } catch (e) { - window.alertify.error(e); - throw e; - } - if (!projectData) { - window.alertify.error(window.languageJSON.common.wrongFormat); - return; - } - try { - loadProject(projectData); - } catch (e) { - window.alertify.error(e); - throw e; - } - }; - - window.loadProject = async proj => { - if (!proj) { - const baseMessage = 'An attempt to open a project with an empty path.'; - alertify.error(baseMessage + ' See the console for the call stack.'); - const err = new Error(baseMessage); - throw err; - } - sessionStorage.projname = path.basename(proj); - global.projdir = path.dirname(proj) + path.sep + path.basename(proj, '.ict'); - - let recoveryStat; - try { - recoveryStat = await fs.stat(proj + '.recovery'); - } catch (err) { - // no recovery file found - void 0; - } - if (recoveryStat && recoveryStat.isFile()) { - const targetStat = await fs.stat(proj); - const voc = window.languageJSON.intro.recovery; - const userResponse = await window.alertify - .okBtn(voc.loadRecovery) - .cancelBtn(voc.loadTarget) - /* {0} — target file date - {1} — target file state (newer/older) - {2} — recovery file date - {3} — recovery file state (newer/older) - */ - .confirm(voc.message - .replace('{0}', targetStat.mtime.toLocaleString()) - .replace('{1}', targetStat.mtime < recoveryStat.mtime ? voc.older : voc.newer) - .replace('{2}', recoveryStat.mtime.toLocaleString()) - .replace('{3}', recoveryStat.mtime < targetStat.mtime ? voc.older : voc.newer)); - window.alertify - .okBtn(window.languageJSON.common.ok) - .cancelBtn(window.languageJSON.common.cancel); - if (userResponse.buttonClicked === 'ok') { - return loadProjectFile(proj + '.recovery'); - } - return loadProjectFile(proj); - } - return loadProjectFile(proj); - }; -})(this); diff --git a/src/js/projectMigrationScripts/2.1.0.js b/src/js/projectMigrationScripts/2.1.0.js new file mode 100644 index 000000000..fd8e6b86e --- /dev/null +++ b/src/js/projectMigrationScripts/2.1.0.js @@ -0,0 +1,58 @@ +window.migrationProcess = window.migrationProcess || []; + +window.migrationProcess.push({ + version: '2.1.0', + // eslint-disable-next-line max-lines-per-function + process: project => new Promise(resolve => { + const templateEventMap = { + oncreate: 'OnCreate', + onstep: 'OnStep', + ondestroy: 'OnDestroy', + ondraw: 'OnDraw' + }; + const roomEventMap = { + oncreate: 'OnRoomStart', + onstep: 'OnStep', + ondraw: 'OnDraw', + onleave: 'OnRoomEnd' + }; + for (const template of project.templates) { + if (!template.events) { + template.events = []; + for (const key in templateEventMap) { + if (template[key]) { + template.events.push({ + lib: 'core', + arguments: {}, + code: template[key], + eventKey: templateEventMap[key] + }); + } + delete template[key]; + } + } + template.type = 'template'; + if (!('loopAnimation' in template)) { + template.loopAnimation = true; + } + } + for (const room of project.rooms) { + if (!room.events) { + room.events = []; + for (const key in roomEventMap) { + if (room[key]) { + room.events.push({ + lib: 'core', + arguments: {}, + code: room[key], + eventKey: roomEventMap[key] + }); + delete room[key]; + } + } + } + room.type = 'room'; + } + resolve(); + }) +}); diff --git a/src/js/projectMigrationScripts/2.2.0.js b/src/js/projectMigrationScripts/2.2.0.js new file mode 100644 index 000000000..eb3a01a59 --- /dev/null +++ b/src/js/projectMigrationScripts/2.2.0.js @@ -0,0 +1,71 @@ +window.migrationProcess = window.migrationProcess || []; + +window.migrationProcess.push({ + version: '2.2.0', + // eslint-disable-next-line max-lines-per-function, complexity + process: project => new Promise(resolve => { + // Break up tile chunks into individual tiles + for (const room of project.rooms) { + room.simulate = true; + room.extends = room.extends ?? {}; + room.isUi = Boolean(room.extends.isUi); + delete room.extends.isUi; + for (const layer of room.tiles) { + layer.tiles = layer.tiles.reduce((tiles, tile) => { + const tex = project.textures.find(t => t.uid === tile.texture); + if (!tile.grid) { + tiles.push(tile); + return tiles; + } + // grid: [tileX, tileY, tileSpanX, tileSpanY] + // eslint-disable-next-line prefer-destructuring + for (let x = tile.grid[0]; x < tile.grid[0] + tile.grid[2]; x++) { + // eslint-disable-next-line prefer-destructuring + for (let y = tile.grid[1]; y < tile.grid[1] + tile.grid[3]; y++) { + tiles.push({ + x: tile.x + tex.axis[0] + (x - tile.grid[0]) * tex.width, + y: tile.y + tex.axis[1] + (y - tile.grid[1]) * tex.height, + opacity: tile.opacity ?? 1, + tint: tile.tint ?? 0xffffff, + scale: { + x: tile.scale?.x ?? 1, + y: tile.scale?.y ?? 1 + }, + frame: x + y * tex.grid[0], + rotation: tile.rotation ?? 0, + texture: tile.texture + }); + } + } + delete tile.grid; + return tiles; + }, []); + } + for (const copy of room.copies) { + copy.exts = copy.exts ?? {}; + copy.customProperties = copy.customProperties ?? {}; + copy.opacity = copy.opacity ?? 1; + copy.tint = copy.tint ?? 0xffffff; + copy.rotation = copy.rotation ?? 0; + copy.scale = copy.scale ?? { + x: copy.tx || 1, + y: copy.ty || 1 + }; + } + for (const bg of room.backgrounds) { + bg.depth = Number(bg.depth) || 0; + bg.movementX = bg.movementX ?? bg.extends?.movementX ?? 0; + bg.movementY = bg.movementY ?? bg.extends?.movementY ?? 0; + bg.parallaxX = bg.parallaxX ?? bg.extends?.parallaxX ?? 1; + bg.parallaxY = bg.parallaxY ?? bg.extends?.parallaxY ?? 1; + bg.repeat = bg.repeat ?? bg.extends?.repeat ?? 'repeat'; + bg.scaleX = bg.scaleX ?? bg.extends?.scaleX ?? 1; + bg.scaleY = bg.scaleY ?? bg.extends?.scaleY ?? 1; + bg.shiftX = bg.shiftX ?? bg.extends?.shiftX ?? 0; + bg.shiftY = bg.shiftY ?? bg.extends?.shiftY ?? 0; + delete bg.extends; + } + } + resolve(); + }) +}); diff --git a/src/js/utils/additionalShellHandiness.js b/src/js/utils/additionalShellHandiness.js index c8a4e67c1..d9c0e2014 100644 --- a/src/js/utils/additionalShellHandiness.js +++ b/src/js/utils/additionalShellHandiness.js @@ -9,6 +9,8 @@ * (makes no sense with `openDirectory` enabled) * @param {boolean} [options.filter] A file filter. * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept + * @param {string} [options.saveAs] Used in response to nwjs bug 7849. + * See https://github.com/nwjs/nw.js/issues/7849 * @returns {Promise|string|false>}A promise that resolves * into a path to the selected file, or to an array of paths of files * (if options.multiple.) @@ -21,6 +23,9 @@ window.showOpenDialog = function showOpenDialog(options = {}) { input.style.right = '100%'; input.style.bottom = '100%'; document.body.appendChild(input); + if (options.saveAs) { + input.setAttribute('nwsaveas', options.saveAs); + } if (options.openDirectory) { input.setAttribute('nwdirectory', 'nwdirectory'); } diff --git a/src/js/utils/codeEditorHelpers.js b/src/js/utils/codeEditorHelpers.js index 1fe6635f1..ad3722619 100644 --- a/src/js/utils/codeEditorHelpers.js +++ b/src/js/utils/codeEditorHelpers.js @@ -277,9 +277,13 @@ const opts = extend(extend({}, defaultOptions), options); opts.value = opts.value || textarea.value || ''; opts.value = opts.value.replace(/\r\n/g, '\n'); + let wrapStart, wrapEnd; if (opts.wrapper) { - opts.value = `${opts.wrapper[0]}\n${opts.value}\n${opts.wrapper[1]}`; - opts.lineNumbers = num => Math.max((num || 0) - 1, 1); + [wrapStart, wrapEnd] = opts.wrapper; + opts.value = `${wrapStart}\n${opts.value}\n${wrapEnd}`; + opts.lineNumbers = num => (num > 1 ? num - 1 : 1); + } else { + wrapStart = wrapEnd = ''; } const codeEditor = monaco.editor.create(textarea, opts); textarea.codeEditor = codeEditor; @@ -291,9 +295,9 @@ codeEditor.getPureValue = function getPureValue() { const val = this.getValue(); - const start = opts.wrapper[0] + '\n', - end = '\n' + opts.wrapper[1]; - if (options.wrapper) { + const start = wrapStart + '\n', + end = '\n' + wrapEnd; + if (opts.wrapper) { if (val.indexOf(start) === 0 && val.lastIndexOf(end) === (val.length - end.length) ) { @@ -302,6 +306,29 @@ } return val; }; + codeEditor.setWrapperCode = function setWrapperCode(start, end) { + const oldVal = this.getValue(); + wrapStart = start; + wrapEnd = end; + if (options.wrapper) { + if (oldVal.indexOf(start) === 0 && + oldVal.lastIndexOf(end) === (oldVal.length - end.length) + ) { + this.setValue(`${wrapStart}\n${oldVal.slice((start).length, -end.length)}\n${wrapEnd}`); + } else { + this.setValue(`${wrapStart}\n${oldVal}\n${wrapEnd}`); + } + } + const model = codeEditor.getModel(); + const lastLine = model.getLineCount(); + codeEditor.setHiddenAreas([{ + startLineNumber: 1, + endLineNumber: 1 + }, { + startLineNumber: lastLine, + endLineNumber: lastLine + }]); + }; if (opts.lockWrapper) { setUpWrappers(codeEditor); diff --git a/src/node_requires/3rdparty/soundbox.ts b/src/node_requires/3rdparty/soundbox.ts new file mode 100644 index 000000000..9633cd912 --- /dev/null +++ b/src/node_requires/3rdparty/soundbox.ts @@ -0,0 +1,55 @@ +'use strict'; + +type knownSoundNames = 'Success' | 'Failure' | 'Wood_Start' | 'Wood_End'; + +class SoundBox { + static version: string; + sounds: Record = {}; + instances: HTMLAudioElement[] = []; + default_volume = 1; + get mute() { + return localStorage.disableSounds === 'on'; + } + load(name: knownSoundNames, url: string, callback?: (this: HTMLAudioElement, ev: Event) => any) { + this.sounds[name] = new Audio(url); + if ("function" == typeof callback) { + this.sounds[name].addEventListener("canplaythrough", callback); + } else { + return new Promise((c, b) => { + this.sounds[name].addEventListener("canplaythrough", c); + this.sounds[name].addEventListener("error", b) + }) + } + } + remove(name: knownSoundNames) { + "undefined" != typeof this.sounds && delete this.sounds[name] + } + play(name: knownSoundNames, callback?: (this: HTMLAudioElement, ev: Event) => any, volume?: number) { + if (this.mute) { + return; + } + if ("undefined" == typeof this.sounds[name]) { + return console.error(`Can't find sound called '${name}'.`), false; + } + var audioTag = this.sounds[name].cloneNode(true) as HTMLAudioElement; + audioTag.volume = volume ?? this.default_volume; + audioTag.play(); + this.instances.push(audioTag); + audioTag.addEventListener("ended", () => { + let a = this.instances.indexOf(audioTag); - 1 != a && this.instances.splice(a, 1) + }); + return "function" == typeof callback ? (audioTag.addEventListener("ended", callback), !0) : new Promise((a, b) => audioTag.addEventListener("ended", a)) + } + stop_all() { + let a = this.instances.slice(); + for (let b of a) b.pause(), b.dispatchEvent(new Event("ended")) + } +} +SoundBox.version = "0.3.4"; + +export const soundbox = new SoundBox(); + +soundbox.load('Success', 'data/Success.wav'); +soundbox.load('Failure', 'data/Failure.wav'); +soundbox.load('Wood_Start', 'data/Wood_Start.wav'); +soundbox.load('Wood_End', 'data/Wood_End.wav'); diff --git a/src/node_requires/IMenuItem.d.ts b/src/node_requires/IMenuItem.d.ts new file mode 100644 index 000000000..91bfca164 --- /dev/null +++ b/src/node_requires/IMenuItem.d.ts @@ -0,0 +1,59 @@ +declare interface IMenu { + opened?: boolean; + // eslint-disable-next-line no-use-before-define + items: IMenuItem[]; + columns?: number; +} + +declare interface IMenuItem { + /** + * The name of the item, depicted graphically + */ + label?: string, + /** + * An optional hint shown as a tooltip or below the main label + */ + hint?: string, + /** + * A name of an svg icon, e.g. 'check'. + * See the list of icons in the main ct.js menu for the full list. + */ + icon?: string, + /** Defaults to 'feather' */ + iconClass?: string, + /** + * The type of the item. + * 'checkbox' replaces an icon with a checkbox input. + * 'separator' does not require any other properties and they make no effect on it. + * 'item' is the default value. + */ + type?: 'checkbox' | 'separator' | 'item', + /** + * Optional data object to be provided to a callback when an item is clicked. + */ + affixedData?: Record, + /** + * The callback triggered when a user clicks this menu item. The callback is passed with + * `affixedData` object (if there was any). + */ + click?: (affixedData: Record) => void, + /** + * Valid for 'checkbox' type. + * Reports the current state of the checkbox. + * For dynamic checkboxes, you need a function returning a boolean. + */ + checked?: boolean | (() => boolean), + submenu?: IMenu, + + /** + * E.g. 'Control+c'. Binds the element to hotkey.js library. + */ + hotkey?: string, + /** + * A human-readable variant, e.g. 'Ctrl+C'. Fallbacks to `hotkey`. + * If set without `hotkey`, still shows the label but does not + * bind the element to the hotkey.js library. + * The label is wrapped into (parentheses) automatically. + */ + hotkeyLabel?: string +} diff --git a/src/node_requires/events/IEvent.d.ts b/src/node_requires/events/IEvent.d.ts new file mode 100644 index 000000000..3feafa8e1 --- /dev/null +++ b/src/node_requires/events/IEvent.d.ts @@ -0,0 +1,73 @@ +declare interface IEventCategory { + name: string; + hint?: string; + icon: string; + [key: string]: string; +} + +type EventApplicableEntities = 'template' | 'room'; +type EventArgumentTypes = + 'integer' | 'float' | 'string' | 'boolean' | + 'template' | 'room' | 'sound' | 'tandem' | 'font' | 'style' | 'texture' | 'action'; +type EventCodeTargets = + 'thisOnStep' | 'thisOnCreate' | 'thisOnDraw' | 'thisOnDestroy' | + 'rootRoomOnCreate' | 'rootRoomOnStep' | 'rootRoomOnDraw' | 'rootRoomOnLeave'; + +declare interface IEventArgumentDeclaration { + name: string; + type: EventArgumentTypes; + default?: unknown; +} +declare interface IEventLocalVarDeclaration { + type: string; + description?: string; +} + +declare interface IEventDeclaration extends Record { + /** + * The displayed name of the event. + * Core events get translated through i18n module anyways. + */ + name: string; + /** + * A template string to be displayed in event list, + * used with parameterized events to differ them visually through UI. + */ + parameterizedName?: string; + hint?: string; + /** + * A list of entities this event can be added to. + */ + applicable: EventApplicableEntities[]; + icon: string; + /** + * If set to true, the event in event list editor will try to fetch a thumbnail + * of the first room, template, or texture in the arguments list and display it. + */ + useAssetThumbnail?: boolean; + category: string; + /** + * Arguments editable through ct.IDE UI to further narrow the event by a game developer, + * or to provide additional settings to them. + */ + arguments?: { + [key: string]: IEventArgumentDeclaration; + }; + /** + * If set to true, the same event can be added several times. + * It is usually used with parametrized events. + */ + repeatable?: boolean; + /** + * Local variables introduced into context by the surrounding function's code. + * Usually used by modules to pass additional info about the current event. + * + * Example: in an event "Collision with template Sausage", a local var called + * `other` can point to the copy that caused this event (aside from `this`). + */ + locals?: { + [key: string]: IEventLocalVarDeclaration; + }; + codeTargets: EventCodeTargets[]; + inlineCodeTemplates?: Partial>; +} diff --git a/src/node_requires/events/coreEventsActions.ts b/src/node_requires/events/coreEventsActions.ts new file mode 100644 index 000000000..d177883e7 --- /dev/null +++ b/src/node_requires/events/coreEventsActions.ts @@ -0,0 +1,58 @@ +/* eslint-disable camelcase */ +const keyToActionProp = { + OnActionPress: 'pressed', + OnActionRelease: 'released', + OnActionDown: 'down' +} as Record; + +const coreEvents = {} as Record; + +for (const key in keyToActionProp) { + const prop = keyToActionProp[key]; + coreEvents[`core_${key}`] = { + name: key, + parameterizedName: `${key} %%action%%`, + applicable: ['template', 'room'], + icon: 'airplay', + category: 'actions', + arguments: { + action: { + name: 'Action', + type: 'action' + } + }, + repeatable: true, + codeTargets: ['thisOnStep'], + inlineCodeTemplates: { + thisOnStep: ` +if (ct.actions[/*%%action%%*/].${prop}) { + \n/*%%USER_CODE%%*/\n +}` + } + }; +} + +coreEvents.core_OnActionDown.locals = { + value: { + type: 'number', + description: 'Current action\'s value' + } +}; +coreEvents.core_OnActionPress.locals = { + value: { + type: 'number', + description: 'Current action\'s value' + } +}; +coreEvents.core_OnActionDown.inlineCodeTemplates.thisOnStep = ` +if (ct.actions[/*%%action%%*/].down) { + let value = ct.actions[/*%%action%%*/].value; + \n/*%%USER_CODE%%*/\n +}`; +coreEvents.core_OnActionPress.inlineCodeTemplates.thisOnStep = ` +if (ct.actions[/*%%action%%*/].pressed) { + let value = ct.actions[/*%%action%%*/].value; + \n/*%%USER_CODE%%*/\n +}`; + +export = coreEvents; diff --git a/src/node_requires/events/coreEventsAnimation.ts b/src/node_requires/events/coreEventsAnimation.ts new file mode 100644 index 000000000..20bafbf13 --- /dev/null +++ b/src/node_requires/events/coreEventsAnimation.ts @@ -0,0 +1,27 @@ +/* eslint-disable camelcase */ +const keyToMethod = { + OnAnimationLoop: 'onLoop', + OnAnimationComplete: 'onComplete', + OnFrameChange: 'onFrameChange' +} as Record; + +const coreEvents = {} as Record; + +for (const key in keyToMethod) { + const methodName = keyToMethod[key]; + coreEvents[`core_${key}`] = { + name: key, + applicable: ['template'], + icon: 'template', + category: 'animation', + codeTargets: ['thisOnCreate'], + inlineCodeTemplates: { + thisOnCreate: ` +this.${methodName} = (function () { + \n/*%%USER_CODE%%*/\n +}).bind(this);` + } + }; +} + +export = coreEvents; diff --git a/src/node_requires/events/coreEventsLifecycle.ts b/src/node_requires/events/coreEventsLifecycle.ts new file mode 100644 index 000000000..f6eb58e5d --- /dev/null +++ b/src/node_requires/events/coreEventsLifecycle.ts @@ -0,0 +1,67 @@ +/* eslint-disable camelcase */ +const coreEvents = { + // Basic, primitive events, aka lifecycle events + core_OnCreate: { + name: 'On create', + applicable: ['template'], + icon: 'sun', + category: 'lifecycle', + codeTargets: ['thisOnCreate'], + inlineCodeTemplates: { + thisOnCreate: '{\n/*%%USER_CODE%%*/\n}' + } + }, + core_OnRoomStart: { + name: 'On room start', + applicable: ['room'], + icon: 'sun', + category: 'lifecycle', + codeTargets: ['thisOnCreate'], + inlineCodeTemplates: { + thisOnCreate: '{\n/*%%USER_CODE%%*/\n}' + } + }, + core_OnStep: { + name: 'On frame start', + applicable: ['template', 'room'], + icon: 'skip-back', + category: 'lifecycle', + codeTargets: ['thisOnStep'], + inlineCodeTemplates: { + thisOnStep: '{\n/*%%USER_CODE%%*/\n}' + } + }, + core_OnDraw: { + name: 'On frame end', + applicable: ['template', 'room'], + icon: 'skip-forward', + category: 'lifecycle', + codeTargets: ['thisOnDraw'], + inlineCodeTemplates: { + thisOnDraw: '{\n/*%%USER_CODE%%*/\n}' + } + }, + core_OnDestroy: { + name: 'On destroy', + applicable: ['template'], + icon: 'trash', + category: 'lifecycle', + codeTargets: ['thisOnDestroy'], + inlineCodeTemplates: { + thisOnDestroy: '{\n/*%%USER_CODE%%*/\n}' + } + }, + core_OnRoomEnd: { + name: 'On room end', + applicable: ['room'], + icon: 'trash', + category: 'lifecycle', + codeTargets: ['thisOnDestroy'], + inlineCodeTemplates: { + thisOnDestroy: '{\n/*%%USER_CODE%%*/\n}' + } + } +} as Record; + +export = coreEvents; + diff --git a/src/node_requires/events/coreEventsPointer.ts b/src/node_requires/events/coreEventsPointer.ts new file mode 100644 index 000000000..a0aaac5c8 --- /dev/null +++ b/src/node_requires/events/coreEventsPointer.ts @@ -0,0 +1,33 @@ +/* eslint-disable camelcase */ +const keyToEventMap = { + OnPointerClick: 'pointertap', + OnPointerSecondaryClick: 'rightclick', + OnPointerEnter: 'pointerenter', + OnPointerLeave: 'pointerleave', + OnPointerDown: 'pointerdown', + OnPointerUp: 'pointerup', + OnPointerUpOutside: 'pointerupoutside', + OnPointerWheel: 'wheel' +} as Record; + +const coreEvents = {} as Record; + +for (const key in keyToEventMap) { + const event = keyToEventMap[key]; + coreEvents[`core_${key}`] = { + name: key, + applicable: ['template'], + icon: 'ui', + category: 'pointer', + codeTargets: ['thisOnCreate'], + inlineCodeTemplates: { + thisOnCreate: `this.interactive = true; +this.on('${event}', () => { + \n/*%%USER_CODE%%*/\n +});` + } + }; +} + +export = coreEvents; + diff --git a/src/node_requires/events/coreEventsTimers.ts b/src/node_requires/events/coreEventsTimers.ts new file mode 100644 index 000000000..a06ffe6a8 --- /dev/null +++ b/src/node_requires/events/coreEventsTimers.ts @@ -0,0 +1,34 @@ +const coreEvents = {} as Record; + +for (let i = 1; i < 7; i++) { + coreEvents[`core_Timer${i}`] = { + name: `Timer ${i}`, + parameterizedName: `%%name%% (Timer ${i})`, + applicable: ['template', 'room'], + icon: 'clock', + category: 'timers', + codeTargets: ['thisOnStep'], + inlineCodeTemplates: { + thisOnStep: ` +if (this.timer${i} > 0 && this.timer${i} <= ((/*%%isUi%%*/ ? ct.deltaUi : ct.delta) / ct.speed)) { + this.timer${i} = 0; + \n/*%%USER_CODE%%*/\n +} else { + this.timer${i} -= (/*%%isUi%%*/ ? ct.deltaUi : ct.delta) / ct.speed; +}` + }, + arguments: { + name: { + name: 'Name', + type: 'string' + }, + isUi: { + name: 'UI event', + type: 'boolean' + } + }, + repeatable: false + }; +} + +export = coreEvents; diff --git a/src/node_requires/events/index.ts b/src/node_requires/events/index.ts new file mode 100644 index 000000000..bf22c0d73 --- /dev/null +++ b/src/node_requires/events/index.ts @@ -0,0 +1,305 @@ +const i18n = require('../i18n'); + +const categories: Record = { + lifecycle: { + name: 'Lifecycle', + icon: 'rotate-cw' + }, + actions: { + name: 'Actions', + icon: 'airplay' + }, + pointer: { + name: 'PointerEvents', + icon: 'ui' + }, + animation: { + name: 'AnimatedSpriteEvents', + icon: 'template' + }, + timers: { + name: 'Timers', + icon: 'clock' + }, + misc: { + name: 'Miscellaneous', + icon: 'grid' + } +}; + +import * as coreEventsLifecycle from './coreEventsLifecycle'; +import * as coreEventsActions from './coreEventsActions'; +import * as coreEventsAnimation from './coreEventsAnimation'; +import * as coreEventsPointer from './coreEventsPointer'; +import * as coreEventsTimers from './coreEventsTimers'; + +const events: Record = { + // Basic, primitive events, aka lifecycle events + ...coreEventsLifecycle, + ...coreEventsActions, + ...coreEventsPointer, + ...coreEventsAnimation, + ...coreEventsTimers +}; + +const eventNameRegex = /^(\S+?)_(\S+)$/; +/** + * Returns the library and the event code from the full event key + */ +const splitEventName = (name: string): [string, string] => { + const result = eventNameRegex.exec(name); + return [result[1], result[2]]; +}; + +type EventMenuEventData = { + eventKey: string, + event: IEventDeclaration +} +interface IEventMenuEvent extends IMenuItem { + affixedData: EventMenuEventData +} + +interface IEventMenuSubmenu extends IMenuItem { + affixedData: { + key: string; + category: IEventCategory; + core: boolean; + } + submenu: { + items: IEventMenuEvent[]; + } +} +type EventMenu = { + items: IEventMenuSubmenu[]; +}; + +const localizeCategoryName = (categoryKey: string): string => { + const i18nScriptables = i18n.languageJSON.scriptables; + const category = categories[categoryKey]; + if (i18nScriptables.coreEventsCategories[categoryKey]) { + return i18nScriptables.coreEventsCategories[categoryKey]; + } + return i18n.localizeField(category, 'name'); +}; +const timerPattern = /^Timer(\d)$/; +const propToCoreDictionary = { + category: 'coreEventsCategories', + name: 'coreEvents', + hint: 'coreEventsDescriptions' +} as Record; +const localizeProp = (eventFullCode: string, prop: string): string => { + const [lib, eventCode] = splitEventName(eventFullCode); + const event = events[eventFullCode]; + if (lib === 'core') { + if (timerPattern.test(eventCode)) { + return i18n.languageJSON.scriptables[propToCoreDictionary[prop]].Timer.replace('$1', timerPattern.exec(eventCode)[1]); + } + return i18n.languageJSON.scriptables[propToCoreDictionary[prop]][eventCode]; + } + return i18n.localizeField(event, prop); +}; + +const resourcesAPI = require('./../resources'); +const getAssetName = (assetId: string, assetType: resourceType): string => { + if (resourcesAPI[assetType + 's'].getName) { + return resourcesAPI[assetType + 's'].getName(assetId); + } + return resourcesAPI[assetType + 's'].getById(assetId).name; +}; +const getAssetThumbnail = (assetId: string | -1, assetType: resourceType): string | false => { + if (resourcesAPI[assetType + 's'].getThumbnail) { + if (assetId && assetId !== -1) { + return resourcesAPI[assetType + 's'].getThumbnail(assetId, false, false); + } + return 'data/img/notexture.png'; + } + return false; +}; +const localizeParametrized = (eventFullCode: string, scriptedEvent: IScriptableEvent): string => { + const [lib, eventCode] = splitEventName(eventFullCode); + const event = events[eventFullCode]; + let {name} = event; + if (lib === 'core') { + name = i18n.languageJSON.scriptables.coreParameterizedNames[eventCode]; + } else { + name = i18n.localizeField(event, 'parameterizedName'); + } + for (const argName in event.arguments) { + let value = scriptedEvent.arguments[argName]; + if (['template', 'room', 'sound', 'tandem', 'font', 'style', 'texture'].indexOf(event.arguments[argName].type) !== -1) { + if (typeof value === 'string') { + value = getAssetName(value, event.arguments[argName].type as resourceType); + } else { + value = '(Unset)'; + } + } + const regex = new RegExp(`%%${argName}%%`); + name = name.replace(regex, String(value)); + } + return name; +}; +const localizeArgument = (eventFullCode: string, arg: string): string => { + const [lib] = splitEventName(eventFullCode); + const event = events[eventFullCode]; + if (lib === 'core') { + return i18n.languageJSON.scriptables.coreEventsArguments[arg]; + } + return i18n.localizeField(event.arguments[arg], 'name'); +}; +const localizeLocalVarDesc = (eventFullCode: string, local: string): string => { + const [lib, eventCode] = splitEventName(eventFullCode); + const event = events[eventFullCode]; + if (lib === 'core') { + return i18n.languageJSON.scriptables.coreEventsLocals[`${eventCode}_${local}`]; + } + return i18n.localizeField(event.locals[local], 'description'); +}; +const tryGetIcon = (eventFullCode: string, scriptedEvent: IScriptableEvent): string | false => { + const event = events[eventFullCode]; + if (!event.useAssetThumbnail) { + return false; + } + for (const argName in event.arguments) { + if (['template', 'room', 'texture'].indexOf(event.arguments[argName].type) !== -1) { + const value = scriptedEvent.arguments[argName] as string | -1 | undefined; + return getAssetThumbnail(value, event.arguments[argName].type as resourceType); + } + } + return false; +}; + +const bakeCategories = function bakeCategories( + entity: EventApplicableEntities, + callback: (affixedData: IEventDeclaration) => void +): EventMenu { + const menu = { + items: [] as IEventMenuSubmenu[] + }; + // Add categories + for (const categoryKey in categories) { + menu.items.push({ + label: localizeCategoryName(categoryKey), + affixedData: { + key: categoryKey, + category: categories[categoryKey], + core: true + }, + icon: categories[categoryKey].icon, + submenu: { + items: [] as IEventMenuEvent[] + } + }); + } + const miscCategory = menu.items.find(s => s.affixedData.core && s.affixedData.key === 'misc'); + for (const eventKey in events) { + const event = events[eventKey]; + // Filter out events for other entities + if (!event.applicable.includes(entity)) { + continue; + } + // Find if there is already a category for this event. + let category = menu.items.find(section => section.affixedData.key === event.category); + if (!category) { + // Fallback to the "misc" category + category = miscCategory; + } + // Add an event to a category + category.submenu.items.push({ + label: localizeProp(eventKey, 'name') || event.name, + hint: localizeProp(eventKey, 'hint') || event.hint, + affixedData: { + eventKey, + event + }, + icon: event.icon, + click: callback + }); + } + // Reorder categories so that Misc is in the end of the list + menu.items.splice(menu.items.indexOf(miscCategory), 1); + menu.items.push(miscCategory); + // Remove empty categories + menu.items = menu.items.filter(cat => cat.submenu.items.length); + return menu; +}; + +const getEventByLib = (event: string, libName: string): IEventDeclaration => + events[`${libName}_${event}`]; + +const getArgumentsTypeScript = (event: IEventDeclaration): string => { + let code = ''; + if (event.locals) { + for (const key in event.locals) { + const local = event.locals[key]; + code += `var ${key}: ${local.type};`; + } + } + return code; +}; + + +const importEventsFromCatmod = (manifest: ICatmodManifest, catmodName: string): void => { + if (manifest.events) { + for (const eventName in manifest.events) { + const event = manifest.events[eventName]; + const fullEventName = `${catmodName}_${eventName}`; + events[fullEventName] = event; + } + } + if (manifest.eventCategories) { + for (const categoryName in manifest.eventCategories) { + const eventCategory = manifest.eventCategories[categoryName]; + // Do not overwrite existing categories + if (!(categoryName in categories)) { + categories[categoryName] = eventCategory; + } + } + } +}; +import {loadModuleByName} from './../resources/modules'; +const loadAllModulesEvents = async (): Promise => { + const promises = []; + for (const libName in window.currentProject.libs) { + promises.push(loadModuleByName(libName).then(catmod => { + importEventsFromCatmod(catmod, libName); + })); + } + await Promise.all(promises); +}; +const unloadEventsFromModule = (moduleName: string): void => { + for (const eventKey in events) { + const [lib] = splitEventName(eventKey); + if (lib === moduleName) { + delete events[eventKey]; + } + } + // Don't quite need to remove categories; + // empty ones will be filtered out every time an event menu is requested. +}; +const unloadAllEvents = (): void => { + for (const eventKey in events) { + const [lib] = splitEventName(eventKey); + if (lib !== 'core') { + delete events[eventKey]; + } + } +}; + +export { + categories, + events, + bakeCategories, + getEventByLib, + splitEventName, + getArgumentsTypeScript, + localizeCategoryName, + localizeParametrized, + localizeProp, + localizeArgument, + localizeLocalVarDesc, + tryGetIcon, + importEventsFromCatmod, + unloadEventsFromModule, + unloadAllEvents, + loadAllModulesEvents +}; diff --git a/src/node_requires/exporter/IScriptablesFragment.d.ts b/src/node_requires/exporter/IScriptablesFragment.d.ts new file mode 100644 index 000000000..39268b3b2 --- /dev/null +++ b/src/node_requires/exporter/IScriptablesFragment.d.ts @@ -0,0 +1,6 @@ +declare interface IScriptablesFragment extends Pick< + Record, + 'rootRoomOnCreate' | 'rootRoomOnStep' | 'rootRoomOnDraw' | 'rootRoomOnLeave' +> { + libCode: string; +} diff --git a/src/node_requires/exporter/index.js b/src/node_requires/exporter/index.ts similarity index 81% rename from src/node_requires/exporter/index.js rename to src/node_requires/exporter/index.ts index bf26fa830..a123d06e4 100644 --- a/src/node_requires/exporter/index.js +++ b/src/node_requires/exporter/index.ts @@ -2,22 +2,25 @@ const fs = require('fs-extra'), path = require('path'); const basePath = './data/'; -let currentProject, writeDir; +let currentProject: IProject; +let writeDir: string; + +import {resetEventsCache, populateEventCache} from './scriptableProcessor'; const {packImages} = require('./textures'); const {packSkeletons} = require('./skeletons'); const {getSounds} = require('./sounds'); -const {stringifyRooms, getStartingRoom} = require('./rooms'); +import {stringifyRooms, getStartingRoom} from './rooms'; const {stringifyStyles} = require('./styles'); const {stringifyTandems} = require('./emitterTandems'); -const {stringifyTemplates} = require('./templates'); +import {stringifyTemplates} from './templates'; const {stringifyContent} = require('./content'); const {bundleFonts, bakeBitmapFonts} = require('./fonts'); const {bakeFavicons} = require('./icons'); const {getUnwrappedExtends, getCleanKey} = require('./utils'); -const ifMatcher = (varName, symbol = '@') => new RegExp(`/\\* ?if +${symbol}${varName}${symbol} ?\\*/([\\s\\S]*)(?:/\\* ?else +${symbol}${varName}${symbol} ?\\*/([\\s\\S]*?))?/\\* ?endif +${symbol}${varName}${symbol} ?\\*/`, 'g'); -const varMatcher = (varName, symbol = '@') => new RegExp(`/\\* ?${symbol}${varName}${symbol} ?\\*/`, 'g'); +const ifMatcher = (varName: string, symbol = '@') => new RegExp(`/\\* ?if +${symbol}${varName}${symbol} ?\\*/([\\s\\S]*)(?:/\\* ?else +${symbol}${varName}${symbol} ?\\*/([\\s\\S]*?))?/\\* ?endif +${symbol}${varName}${symbol} ?\\*/`, 'g'); +const varMatcher = (varName: string, symbol = '@') => new RegExp(`/\\* ?${symbol}${varName}${symbol} ?\\*/`, 'g'); /** * A little home-brewn string templating function for JS and CSS. @@ -27,18 +30,22 @@ const varMatcher = (varName, symbol = '@') => new RegExp(`/\\* ?${symbol}${varNa * * Supports if/else blocks. Empty arrays are treated as `false`. * - * @param {string} input The source string with template tags - * @param {object} vars The variables to substitute - * @param {object} injections Module-provided injections to substitute + * @param input The source string with template tags + * @param vars The variables to substitute + * @param injections Module-provided injections to substitute */ -const template = (input, vars, injections = {}) => { +const template = ( + input: string, + vars: Record, + injections: Record = {} +) => { let output = input; for (const i in vars) { // .replace(stuff, () => string) prevents pattern substitution, notably // it doesn't break syntax around this.text = '$' // @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter - output = output.replace(varMatcher(i), () => (typeof vars[i] === 'object' ? JSON.stringify(vars[i]) : vars[i])); - output = output.replace(ifMatcher(i), (Array.isArray(vars[i]) ? vars[i].length : vars[i]) ? '$1' : '$2'); + output = output.replace(varMatcher(i), () => (typeof vars[i] === 'object' ? JSON.stringify(vars[i]) : String(vars[i]))); + output = output.replace(ifMatcher(i), (Array.isArray(vars[i]) ? (vars[i] as unknown[]).length : vars[i]) ? '$1' : '$2'); } for (const i in injections) { output = output.replace(varMatcher(i, '%'), () => (typeof injections[i] === 'object' ? JSON.stringify(injections[i]) : injections[i])); @@ -46,7 +53,7 @@ const template = (input, vars, injections = {}) => { return output; }; -const getSubstitution = value => { +const getSubstitution = (value: unknown): unknown => { if (!value) { return ''; } @@ -55,7 +62,7 @@ const getSubstitution = value => { } return value; }; -const parseKeys = function (catmod, str, lib) { +const parseKeys = function (catmod: ICatmodManifest, str: string, lib: string) { var str2 = str; if (catmod.fields) { const {fields} = catmod, @@ -71,14 +78,14 @@ const parseKeys = function (catmod, str, lib) { if (field.type === 'checkbox' && !val) { str2 = str2.replace(RegExp('(/\\*)?%' + cleanKey + '%(\\*/)?', 'g'), 'false'); } else { - str2 = str2.replace(RegExp('(/\\*)?%' + cleanKey + '%(\\*/)?', 'g'), () => getSubstitution(val)); + str2 = str2.replace(RegExp('(/\\*)?%' + cleanKey + '%(\\*/)?', 'g'), () => String(getSubstitution(val))); } } } return str2; }; -const removeBrokenModules = async function removeBrokenModules(project) { +const removeBrokenModules = async function removeBrokenModules(project: IProject) { await Promise.all(Object.keys(project.libs).map(async key => { const moduleJSONPath = path.join(basePath + 'ct.libs/', key, 'module.json'); if (!(await fs.pathExists(moduleJSONPath))) { @@ -107,8 +114,38 @@ const addModules = async () => { // async return pieces.filter(t => t).join('\n'); }; +const enum Injections { + load, + start, + switch, + onbeforecreate, + oncreate, + ondestroy, + beforedraw, + beforestep, + afterdraw, + afterstep, + beforeframe, + beforeroomoncreate, + roomoncreate, + roomonleave, + afterroomdraw, + beforeroomdraw, + beforeroomstep, + afterroomstep, + css, + res, + resload, + templates, + rooms, + styles, + htmltop, + htmlbottom +} +type InjectionName = keyof typeof Injections; + const getInjections = async () => { - const injections = { + const injections: Record = { load: '', start: '', switch: '', @@ -145,9 +182,9 @@ const getInjections = async () => { encoding: 'utf8' }); if (await fs.pathExists(path.join(basePath + 'ct.libs/', lib, 'injections'))) { - const injectFiles = await fs.readdir(path.join(basePath + 'ct.libs/', lib, 'injections')), + const injectFiles: string[] = await fs.readdir(path.join(basePath + 'ct.libs/', lib, 'injections')), injectKeys = injectFiles.map(fname => path.basename(fname, path.extname(fname))); - await Promise.all(injectKeys.map(async (key, ind) => { + await Promise.all(injectKeys.map(async (key: InjectionName, ind) => { if (key in injections) { const injection = await fs.readFile(path.join(basePath + 'ct.libs/', lib, 'injections', injectFiles[ind]), { encoding: 'utf8' @@ -163,9 +200,15 @@ const getInjections = async () => { }; // eslint-disable-next-line max-lines-per-function -const exportCtProject = async (project, projdir, production) => { +const exportCtProject = async ( + project: IProject, + projdir: string, + production: boolean +): Promise => { + window.signals.trigger('exportProject'); currentProject = project; await removeBrokenModules(project); + resetEventsCache(); const {languageJSON} = require('./../i18n'); const {settings} = project; @@ -204,7 +247,7 @@ const exportCtProject = async (project, projdir, production) => { const startroom = getStartingRoom(project); /* Load source files in parallel */ - const sources = {}; + const sources: Record> = {}; const sourcesList = [ 'backgrounds.js', 'camera.js', @@ -231,6 +274,8 @@ const exportCtProject = async (project, projdir, production) => { const skeletonsTask = packSkeletons(project, projdir, writeDir); const bitmapFontsTask = bakeBitmapFonts(project, projdir, writeDir); const favicons = bakeFavicons(project, writeDir); + /* Run event cache population in parallel as well */ + const cacheHandle = populateEventCache(project); let buffer = template(await sources['main.js'], { startwidth: startroom.width, @@ -259,10 +304,22 @@ const exportCtProject = async (project, projdir, production) => { }, injections); buffer += '\n'; - const roomsCode = stringifyRooms(project); + // Process all the scriptables to get combined code for root rooms + await cacheHandle; + + const rooms = stringifyRooms(project); + const templates = stringifyTemplates(project); + const rootRoomOnCreate = rooms.rootRoomOnCreate + '\n' + templates.rootRoomOnCreate; + const rootRoomOnStep = rooms.rootRoomOnStep + '\n' + templates.rootRoomOnStep; + const rootRoomOnDraw = rooms.rootRoomOnDraw + '\n' + templates.rootRoomOnDraw; + const rootRoomOnLeave = rooms.rootRoomOnLeave + '\n' + templates.rootRoomOnLeave; buffer += template(await sources['rooms.js'], { startroom: startroom.name, - rooms: roomsCode + rooms: rooms.libCode, + rootRoomOnCreate, + rootRoomOnStep, + rootRoomOnDraw, + rootRoomOnLeave }, injections); buffer += '\n'; @@ -279,9 +336,8 @@ const exportCtProject = async (project, projdir, production) => { }, injections); } - const templates = stringifyTemplates(project); buffer += template(await sources['templates.js'], { - templates + templates: templates.libCode }, injections); // Add four files in a sequence, without additional transforms @@ -387,7 +443,7 @@ const exportCtProject = async (project, projdir, production) => { fs.writeFile(path.join(writeDir, '/ct.js'), buffer) ]); - await Promise.all(project.sounds.map(async sound => { + await Promise.all(project.sounds.map(async (sound: ISound) => { const ext = sound.origname.slice(-4); await fs.copy(path.join(projdir, '/snd/', sound.origname), path.join(writeDir, '/snd/', sound.uid + ext)); })); @@ -397,4 +453,4 @@ const exportCtProject = async (project, projdir, production) => { return path.join(writeDir, '/index.html'); }; -module.exports = exportCtProject; +export {exportCtProject}; diff --git a/src/node_requires/exporter/rooms.js b/src/node_requires/exporter/rooms.js deleted file mode 100644 index 71a456500..000000000 --- a/src/node_requires/exporter/rooms.js +++ /dev/null @@ -1,116 +0,0 @@ -const glob = require('./../glob'); -const {getUnwrappedExtends} = require('./utils'); - -const getStartingRoom = proj => { - let [startroom] = proj.rooms; // picks the first room by default - for (let i = 0; i < proj.rooms.length; i++) { - if (proj.rooms[i].uid === proj.startroom) { - startroom = proj.rooms[i]; - break; - } - } - return startroom; -}; -const getConstraints = r => { - if (r.restrictCamera) { - let x1 = r.restrictMinX || 0, - y1 = r.restrictMinY || 0, - x2 = r.restrictMaxX === void 0 ? r.width : r.restrictMaxX, - y2 = r.restrictMaxX === void 0 ? r.height : r.restrictMaxY; - if (x1 > x2) { - [x1, x2] = [x2, x1]; - } - if (y1 > y2) { - [y1, y2] = [y2, y1]; - } - return { - x1, - y1, - x2, - y2 - }; - } - return false; -}; - -const stringifyRooms = proj => { - let roomsCode = ''; - for (const k in proj.rooms) { - const r = proj.rooms[k]; - - const roomCopy = JSON.parse(JSON.stringify(r.copies)); - const objs = []; - for (const copy of roomCopy) { - copy.template = proj.templates[glob.templatemap[copy.uid]].name; - delete copy.uid; - objs.push(copy); - } - const bgsCopy = JSON.parse(JSON.stringify(r.backgrounds)); - for (const bg in bgsCopy) { - bgsCopy[bg].texture = glob.texturemap[bgsCopy[bg].texture].g.name; - bgsCopy[bg].depth = Number(bgsCopy[bg].depth); - } - - const tileLayers = []; - /* eslint {max-depth: off} */ - if (r.tiles) { - for (const tileLayer of r.tiles) { - const layer = { - depth: tileLayer.depth, - tiles: [], - extends: tileLayer.extends ? getUnwrappedExtends(tileLayer.extends) : {} - }; - for (const tile of tileLayer.tiles) { - for (let x = 0; x < tile.grid[2]; x++) { - for (let y = 0; y < tile.grid[3]; y++) { - const texture = glob.texturemap[tile.texture].g; - layer.tiles.push({ - texture: texture.name, - frame: tile.grid[0] + x + (y + tile.grid[1]) * texture.grid[0], - x: tile.x + x * (texture.width + texture.marginx), - y: tile.y + y * (texture.height + texture.marginy), - width: texture.width, - height: texture.height - }); - } - } - } - tileLayers.push(layer); - } - } - - const constraints = getConstraints(r); - - roomsCode += ` -ct.rooms.templates['${r.name}'] = { - name: '${r.name}', - width: ${r.width}, - height: ${r.height}, - /* JSON.parse allows for a much faster loading of big objects */ - objects: JSON.parse('${JSON.stringify(objs).replace(/\\/g, '\\\\')}'), - bgs: JSON.parse('${JSON.stringify(bgsCopy).replace(/\\/g, '\\\\')}'), - tiles: JSON.parse('${JSON.stringify(tileLayers).replace(/\\/g, '\\\\')}'), - backgroundColor: '${r.backgroundColor || '#000000'}', - ${constraints ? 'cameraConstraints: ' + JSON.stringify(constraints) + ',' : ''} - onStep() { - ${proj.rooms[k].onstep} - }, - onDraw() { - ${proj.rooms[k].ondraw} - }, - onLeave() { - ${proj.rooms[k].onleave} - }, - onCreate() { - ${proj.rooms[k].oncreate} - }, - extends: ${proj.rooms[k].extends ? JSON.stringify(getUnwrappedExtends(proj.rooms[k].extends), null, 4) : '{}'} -}`; - } - return roomsCode; -}; - -module.exports = { - stringifyRooms, - getStartingRoom -}; diff --git a/src/node_requires/exporter/rooms.ts b/src/node_requires/exporter/rooms.ts new file mode 100644 index 000000000..963b0a9c9 --- /dev/null +++ b/src/node_requires/exporter/rooms.ts @@ -0,0 +1,186 @@ +const glob = require('./../glob'); +const {getUnwrappedExtends} = require('./utils'); +import {getBaseScripts} from './scriptableProcessor'; +import {getTextureFromId} from '../resources/textures'; + +const getStartingRoom = (proj: IProject): IRoom => { + let [startroom] = proj.rooms; // picks the first room by default + for (let i = 0; i < proj.rooms.length; i++) { + if (proj.rooms[i].uid === proj.startroom) { + startroom = proj.rooms[i]; + break; + } + } + return startroom; +}; +const getConstraints = (r: IRoom) => { + if (r.restrictCamera) { + let x1 = r.restrictMinX || 0, + y1 = r.restrictMinY || 0, + x2 = r.restrictMaxX === void 0 ? r.width : r.restrictMaxX, + y2 = r.restrictMaxY === void 0 ? r.height : r.restrictMaxY; + if (x1 > x2) { + [x1, x2] = [x2, x1]; + } + if (y1 > y2) { + [y1, y2] = [y2, y1]; + } + return { + x1, + y1, + x2, + y2 + }; + } + return false; +}; + +interface IExportedTile { + texture: string, + frame: number, + x: number, + y: number, + width: number, + height: number, + opacity: number, + rotation: number, + scale: { + x: number, + y: number + }, + tint: number +} +type ExportedCopy = Omit & {template: string}; + +type ExportedBg = { + texture: string, + depth: number, + exts: { + movementX: number, + movementY: number, + parallaxX: number, + parallaxY: number, + repeat: 'repeat' | 'no-repeat' | 'repeat-x' | 'repeat-y', + scaleX: number, + scaleY: number, + shiftX: number, + shiftY: number + } +}; + +// eslint-disable-next-line max-lines-per-function +const stringifyRooms = (proj: IProject): IScriptablesFragment => { + let roomsCode = ''; + let rootRoomOnCreate = ''; + let rootRoomOnStep = ''; + let rootRoomOnDraw = ''; + let rootRoomOnLeave = ''; + + for (const r of proj.rooms) { + const objs: ExportedCopy[] = []; + for (const copy of r.copies) { + const exportableCopy = { + ...copy, + template: proj.templates[glob.templatemap[copy.uid]].name + }; + delete exportableCopy.uid; + objs.push(exportableCopy); + } + const bgs: ExportedBg[] = []; + for (const bg of r.backgrounds) { + bgs.push({ + texture: getTextureFromId(bg.texture as string).name, + depth: Number(bg.depth), + exts: { + movementX: bg.movementX, + movementY: bg.movementY, + parallaxX: bg.parallaxX, + parallaxY: bg.parallaxY, + repeat: bg.repeat, + scaleX: bg.scaleX, + scaleY: bg.scaleY, + shiftX: bg.shiftX, + shiftY: bg.shiftY + } + }); + } + + const tileLayers = []; + /* eslint {max-depth: off} */ + if (r.tiles) { + for (const tileLayer of r.tiles) { + const layer = { + depth: tileLayer.depth, + tiles: [] as IExportedTile[], + extends: tileLayer.extends ? getUnwrappedExtends(tileLayer.extends) : {} + }; + for (const tile of tileLayer.tiles) { + const texture = glob.texturemap[tile.texture].g; + layer.tiles.push({ + texture: texture.name, + frame: tile.frame, + x: tile.x, + y: tile.y, + width: texture.width, + height: texture.height, + opacity: tile.opacity, + rotation: tile.rotation, + scale: { + x: tile.scale.x, + y: tile.scale.y + }, + tint: tile.tint + }); + } + tileLayers.push(layer); + } + } + + const constraints = getConstraints(r); + const scriptableCode = getBaseScripts(r); + + roomsCode += ` +ct.rooms.templates['${r.name}'] = { + name: '${r.name}', + width: ${r.width}, + height: ${r.height},` + + /* JSON.parse is faster at loading big objects */` + objects: JSON.parse('${JSON.stringify(objs).replace(/\\/g, '\\\\')}'), + bgs: JSON.parse('${JSON.stringify(bgs).replace(/\\/g, '\\\\')}'), + tiles: JSON.parse('${JSON.stringify(tileLayers).replace(/\\/g, '\\\\')}'), + backgroundColor: '${r.backgroundColor || '#000000'}', + ${constraints ? 'cameraConstraints: ' + JSON.stringify(constraints) + ',' : ''} + onStep() { + ${scriptableCode.thisOnStep} + }, + onDraw() { + ${scriptableCode.thisOnDraw} + }, + onLeave() { + ${scriptableCode.thisOnDestroy} + }, + onCreate() { + ${scriptableCode.thisOnCreate} + }, + isUi: ${r.isUi}, + extends: ${r.extends ? JSON.stringify(getUnwrappedExtends(r.extends), null, 4) : '{}'} +} + `; + rootRoomOnCreate += scriptableCode.rootRoomOnCreate; + rootRoomOnStep += scriptableCode.rootRoomOnStep; + rootRoomOnDraw += scriptableCode.rootRoomOnDraw; + rootRoomOnLeave += scriptableCode.rootRoomOnLeave; + } + return { + libCode: roomsCode, + rootRoomOnCreate, + rootRoomOnStep, + rootRoomOnDraw, + rootRoomOnLeave + }; +}; + +export { + stringifyRooms, + getStartingRoom +}; diff --git a/src/node_requires/exporter/scriptableProcessor.ts b/src/node_requires/exporter/scriptableProcessor.ts new file mode 100644 index 000000000..733caa1da --- /dev/null +++ b/src/node_requires/exporter/scriptableProcessor.ts @@ -0,0 +1,126 @@ +type ScriptableCode = Record; + +const {getEventByLib} = require('../events'); +import {readFile} from 'fs-extra'; +import {getModulePathByName, loadModuleByName} from './../resources/modules'; +import {join} from 'path'; + +const eventsCache: Record = {}; +const resetEventsCache = (): void => { + for (const key in eventsCache) { + delete eventsCache[key]; + } +}; +const getEventCacheName = (lib: string, eventCode: string, target: string) => + `${lib};${eventCode};${target}`; +const populateEventCache = async (project: IProject): Promise> => { + const modulesPromises = []; + const libs = Object.keys(project.libs); + for (const libCode in project.libs) { + modulesPromises.push(loadModuleByName(libCode)); + } + const modulesManifests = await Promise.all(modulesPromises); + const eventLoadPromises = []; + for (let i = 0; i < libs.length; i++) { + const libCode = libs[i]; + const modulesManifest = modulesManifests[i]; + if (modulesManifest.events) { + for (const eventCode in modulesManifest.events) { + const event = modulesManifest.events[eventCode]; + for (const eventTarget of event.codeTargets) { + const cacheName = getEventCacheName(libCode, eventCode, eventTarget); + // eslint-disable-next-line max-depth + if (event.inlineCodeTemplates && (eventTarget in event.inlineCodeTemplates)) { + eventsCache[cacheName] = event.inlineCodeTemplates[eventTarget]; + } else { + eventLoadPromises.push(readFile(join( + getModulePathByName(libCode), + 'events', + `${eventCode}_${eventTarget}.js` + ), { + encoding: 'utf8' + }) + .then(content => { + eventsCache[cacheName] = content; + }) + .catch(e => { + throw new Error(`Failed to load the template for eventTarget ${cacheName}: it was neither inlined nor was accessible in the filesystem. It is usually a modder's error. Filesystem error: ${e}`); + })); + } + } + } + } + } + await Promise.all(eventLoadPromises); + return eventsCache; +}; +const getFromCache = (event: IScriptableEvent, target: string): string => { + const cacheName = getEventCacheName(event.lib, event.eventKey, target); + return eventsCache[cacheName]; +}; + +const resourcesAPI = require('./../resources'); +const getAssetName = (assetId: string, assetType: resourceType) => { + if (resourcesAPI[assetType + 's'].getName) { + return resourcesAPI[assetType + 's'].getName(assetId); + } + return resourcesAPI[assetType + 's'].getById(assetId).name; +}; + +const getBaseScripts = function (entity: IScriptable): ScriptableCode { + const domains = { + thisOnStep: '', + thisOnCreate: '', + thisOnDraw: '', + thisOnDestroy: '', + rootRoomOnCreate: '', + rootRoomOnStep: '', + rootRoomOnDraw: '', + rootRoomOnLeave: '' + }; + for (const event of entity.events) { + const {lib, eventKey, code} = event; + const eventArgs = event.arguments; + const eventSpec = getEventByLib(eventKey, lib) as IEventDeclaration; + const requiredArgs = eventSpec.arguments || {}; + for (const target of eventSpec.codeTargets) { + let resultingCode: string; + // Add a preamble to each event for easier debugging by users + resultingCode = `/* ${entity.type} ${entity.name} — ${event.lib}_${event.eventKey} (${eventSpec.name} event) */\n`; + if (lib === 'core') { + resultingCode += eventSpec.inlineCodeTemplates[target]; + } else { + resultingCode += getFromCache(event, target); + } + for (const argCode in requiredArgs) { + if (!(argCode in eventArgs)) { + throw new Error(`Argument ${argCode} is missing in the event ${eventSpec.name}, of a ${entity.type} ${entity.uid}`); + } + const exp = new RegExp(`/\\*%%${argCode}%%\\*/`, 'g'); + const argType = eventSpec.arguments[argCode].type; + if (['template', 'room', 'sound', 'tandem', 'font', 'style', 'texture'].indexOf(argType) !== -1) { + const value = getAssetName(String(eventArgs[argCode]), argType as resourceType); + resultingCode = resultingCode.replace(exp, `'${value.replace(/'/g, '\\\'')}'`); + } else if (typeof eventArgs[argCode] === 'string') { + // Wrap the value into singular quotes, escape existing quotes + resultingCode = resultingCode.replace(exp, `'${String(eventArgs[argCode]).replace(/'/g, '\\\'')}'`); + } else { + resultingCode = resultingCode.replace(exp, String(eventArgs[argCode])); + } + } + resultingCode = resultingCode.replace(/\/\*%%ENTITY_TYPE%%\*\//g, `'${entity.type}'`); + resultingCode = resultingCode.replace(/\/\*%%ENTITY_NAME%%\*\//g, `'${entity.name}'`); + resultingCode = resultingCode.replace(/\/\*%%USER_CODE%%\*\//g, code); + domains[target] += resultingCode; + domains[target] += '\n'; + } + } + return domains; +}; + + +export { + getBaseScripts, + resetEventsCache, + populateEventCache +}; diff --git a/src/node_requires/exporter/templates.js b/src/node_requires/exporter/templates.js deleted file mode 100644 index 0e274b9f6..000000000 --- a/src/node_requires/exporter/templates.js +++ /dev/null @@ -1,36 +0,0 @@ -const {getTextureFromId} = require('../resources/textures'); -const {getUnwrappedExtends} = require('./utils'); - -const stringifyTemplates = function (proj) { - /* Stringify templates */ - var templates = ''; - for (const k in proj.templates) { - var template = proj.templates[k]; - templates += ` -ct.templates.templates["${template.name}"] = { - depth: ${template.depth}, - blendMode: PIXI.BLEND_MODES.${template.blendMode?.toUpperCase() ?? 'NORMAL'}, - playAnimationOnStart: ${Boolean(template.playAnimationOnStart)}, - ${template.texture !== -1 ? 'texture: "' + getTextureFromId(template.texture).name + '",' : ''} - onStep: function () { - ${template.onstep} - }, - onDraw: function () { - ${template.ondraw} - }, - onDestroy: function () { - ${template.ondestroy} - }, - onCreate: function () { - ${template.oncreate} - }, - extends: ${template.extends ? JSON.stringify(getUnwrappedExtends(template.extends), null, 4) : '{}'} -}; -ct.templates.list['${template.name}'] = [];`; - } - return templates; -}; - -module.exports = { - stringifyTemplates -}; diff --git a/src/node_requires/exporter/templates.ts b/src/node_requires/exporter/templates.ts new file mode 100644 index 000000000..b6fb518e9 --- /dev/null +++ b/src/node_requires/exporter/templates.ts @@ -0,0 +1,86 @@ +const {getTextureFromId} = require('../resources/textures'); +const {getUnwrappedExtends} = require('./utils'); + +import {getBaseScripts} from './scriptableProcessor'; + +interface IBlankTexture { + uid: string; + anchorX: number; + anchorY: number; + height: number; + width: number; +} + +const getTextureInfo = (blankTextures: IBlankTexture[], template: ITemplate) => { + const blankTexture = blankTextures.find(tex => tex.uid === template.texture); + if (blankTexture) { + return `anchorX: ${blankTexture.anchorX}, + anchorY: ${blankTexture.anchorY}, + height: ${blankTexture.height}, + width: ${blankTexture.width},`; + } else if (template.texture !== -1) { + return `texture: "${getTextureFromId(template.texture).name}",`; + } + return ''; +}; + +const stringifyTemplates = function (proj: IProject): IScriptablesFragment { + /* Stringify templates */ + let templates = ''; + let rootRoomOnCreate = ''; + let rootRoomOnStep = ''; + let rootRoomOnDraw = ''; + let rootRoomOnLeave = ''; + const blankTextures = proj.textures + .filter(tex => tex.isBlank) + .map(tex => ({ + uid: tex.uid, + anchorX: tex.axis[0] / tex.width, + anchorY: tex.axis[1] / tex.height, + height: tex.height, + width: tex.width + })); + + for (const k in proj.templates) { + var template = proj.templates[k]; + const scripts = getBaseScripts(template); + const textureInfo = getTextureInfo(blankTextures, template); + templates += ` +ct.templates.templates["${template.name}"] = { + depth: ${template.depth}, + blendMode: PIXI.BLEND_MODES.${template.blendMode?.toUpperCase() ?? 'NORMAL'}, + animationFPS: ${template.animationFPS ?? 60}, + playAnimationOnStart: ${Boolean(template.playAnimationOnStart)}, + loopAnimation: ${Boolean(template.loopAnimation)}, + ${textureInfo} + onStep: function () { + ${scripts.thisOnStep} + }, + onDraw: function () { + ${scripts.thisOnDraw} + }, + onDestroy: function () { + ${scripts.thisOnDestroy} + }, + onCreate: function () { + ${scripts.thisOnCreate} + }, + extends: ${template.extends ? JSON.stringify(getUnwrappedExtends(template.extends), null, 4) : '{}'} +}; +ct.templates.list['${template.name}'] = []; + `; + rootRoomOnCreate += scripts.rootRoomOnCreate; + rootRoomOnStep += scripts.rootRoomOnStep; + rootRoomOnDraw += scripts.rootRoomOnDraw; + rootRoomOnLeave += scripts.rootRoomOnLeave; + } + return { + libCode: templates, + rootRoomOnCreate, + rootRoomOnStep, + rootRoomOnDraw, + rootRoomOnLeave + }; +}; + +export {stringifyTemplates}; diff --git a/src/node_requires/exporter/textures.js b/src/node_requires/exporter/textures.js index ab2a22fd6..90727dc7f 100644 --- a/src/node_requires/exporter/textures.js +++ b/src/node_requires/exporter/textures.js @@ -1,6 +1,8 @@ const fs = require('fs-extra'); const glob = require('./../glob'); +/* eslint-disable id-blacklist */ + const getTextureShape = texture => { if (texture.shape === 'rect') { return { @@ -170,34 +172,127 @@ const packerSettings = [atlasWidth, atlasHeight, 0, { // allowRotation: true, pot: true, square: true, - // eslint-disable-next-line id-blacklist tag: true, exclusiveTag: false }]; -const packImages = async (proj, writeDir) => { - const spritedTextures = proj.textures.filter(texture => !texture.tiled), - tiledTextures = proj.textures.filter(texture => texture.tiled); - - // Write functions will be run in parallel, - // and this array will block the finalization of the function - const writePromises = []; - +const getPackerFor = (textures, spritedTextures) => { const packer = new Packer(...packerSettings); - const animationsByTextures = spritedTextures .map(getTextureFrameCrops); const animations = [].concat(...animationsByTextures); + const getFailedPacks = () => { + const failedPacks = []; + const allTags = {}; + textures.forEach(tex => { + allTags[tex.name] = -1; + }); + packer.bins.forEach((bin, binInd) => bin.rects.forEach(rect => { + if (allTags[rect.tag] < 0) { + allTags[rect.tag] = binInd; + } else if (allTags[rect.tag] !== binInd && + failedPacks.indexOf(rect.tag) < 0) { + failedPacks.push(rect.tag); + } + })); + return failedPacks; + }; + if (animations.length) { packer.addArray(animations); + + let failedPacks = getFailedPacks(); + + const addToFailedPacks = (newPacks) => { + failedPacks = failedPacks.concat(newPacks.filter(tag => + failedPacks.indexOf(tag) === -1)); + }; + + if (failedPacks.length) { + let firstRepack = true; + let newFailedPacks = []; + + do { + const lastFailedPack = failedPacks; + + // eslint-disable-next-line no-console + console.warn('Packing failed...repacking...'); + + packer.reset(); + if (firstRepack) { + packer.addArray(animations.filter(tex => lastFailedPack.indexOf(tex.tag) > -1)); + packer.next(); + } else { + textures.forEach(tex => { + const tag = tex.name; + if (lastFailedPack.indexOf(tag) > -1) { + packer.addArray(animations.filter(tex => tex.tag === tag)); + packer.next(); + } + }); + } + packer.addArray(animations.filter(tex => lastFailedPack.indexOf(tex.tag) < 0)); + + newFailedPacks = getFailedPacks(); + firstRepack = false; + addToFailedPacks(newFailedPacks); + } while (newFailedPacks.length); + } + } + + return packer; +}; + +const isBigTexture = (texture) => { + const area = texture.grid[0] * texture.width * texture.grid[1] * texture.height; + if (area > atlasWidth * atlasHeight * 0.9) { + return true; } + if (texture.width > atlasWidth) { + return true; + } + if (texture.height > atlasHeight) { + return true; + } + return false; +}; + +const packImages = async (proj, writeDir) => { + const {textures} = proj; + const bigTextures = textures.filter(isBigTexture); + const spritedTextures = textures.filter(tex => !tex.tiled && bigTextures.indexOf(tex) < 0); + const tiledTextures = textures.filter(tex => tex.tiled && bigTextures.indexOf(tex) < 0); + + // Write functions will be run in parallel, + // and this array will block the finalization of the function + const writePromises = []; + const packer = getPackerFor(textures, spritedTextures); // Output all the atlases into JSON and PNG files const atlases = []; packer.bins.map(drawAtlasFromBin).forEach((atlas, ind) => { writePromises.push(fs.outputJSON(`${writeDir}/img/a${ind}.json`, atlas.json)); - var atlasBase64 = atlas.canvas.toDataURL().replace(/^data:image\/\w+;base64,/, ''); - var buf = Buffer.from(atlasBase64, 'base64'); + const atlasBase64 = atlas.canvas.toDataURL().replace(/^data:image\/\w+;base64,/, ''); + const buf = Buffer.from(atlasBase64, 'base64'); + writePromises.push(fs.writeFile(`${writeDir}/img/a${ind}.png`, buf)); + atlases.push(`./img/a${ind}.json`); + }); + bigTextures.forEach((texture, btInd) => { + const tw = texture.grid[0] * (texture.width + texture.padding * 2); + const th = texture.grid[1] * (texture.height + texture.padding * 2); + const bigPacker = new Packer(tw, th, 0, { + smart: false + }); + bigPacker.addArray(getTextureFrameCrops(texture)); + if (bigPacker.bins.length > 1) { + // eslint-disable-next-line no-console + console.warn('Big packer has failed!'); + } + const ind = packer.bins.length + btInd; + const atlas = drawAtlasFromBin(bigPacker.bins[0], ind); + writePromises.push(fs.outputJSON(`${writeDir}/img/a${ind}.json`, atlas.json)); + const atlasBase64 = atlas.canvas.toDataURL().replace(/^data:image\/\w+;base64,/, ''); + const buf = Buffer.from(atlasBase64, 'base64'); writePromises.push(fs.writeFile(`${writeDir}/img/a${ind}.png`, buf)); atlases.push(`./img/a${ind}.json`); }); @@ -219,7 +314,7 @@ const packImages = async (proj, writeDir) => { atlas.width = tex.width; atlas.height = tex.height; atlas.x.drawImage(img, 0, 0); - var buf = new Buffer(atlas.toDataURL().replace(/^data:image\/\w+;base64,/, ''), 'base64'); + const buf = Buffer.from(atlas.toDataURL().replace(/^data:image\/\w+;base64,/, ''), 'base64'); writePromises.push(fs.writeFile(`${writeDir}/img/t${tiledCounter}.png`, buf)); tiledCounter++; } diff --git a/src/node_requires/extendGlobals.d.ts b/src/node_requires/extendGlobals.d.ts index 01777b231..d832d8f3e 100644 --- a/src/node_requires/extendGlobals.d.ts +++ b/src/node_requires/extendGlobals.d.ts @@ -6,10 +6,13 @@ declare global { var signals: any; var orders: any; var alertify: any; + var brehautColor: any; var languageJSON: any; var monaco: any; var currentProject: IProject; var projdir: string; + var migrationProcess: any[]; + var riot: any; function showOpenDialog(options: any): Promise; function showSaveDialog(options: any): Promise; interface Window { diff --git a/src/node_requires/hotkeys.js b/src/node_requires/hotkeys.js index 116be69a0..61285c16d 100644 --- a/src/node_requires/hotkeys.js +++ b/src/node_requires/hotkeys.js @@ -12,6 +12,13 @@ on key presses in a declarative way, based on HTML markup plus a couple of scopi On each key press, the lib queries the document for the resulting key combination. The selector is `[data-hotkey="Your-Code"]` +Your-Code is in form `Ctrl+Alt+Meta+X`, where X is a pressed letter. +If you need the Shift key modifier, the letter will be an uppercase one. +If not, use the lowercase letter. +The code for Shift+S is just `S`, the code for just S key is `s`. +Every modifier is optional. Examples: `l`, `5`, `Ctrl+1`, `Ctrl+C`. +Do follow the order of modifiers: `Ctrl+Alt+c` is valid, but `Alt+Ctrl+c` is not. + You can narrow the scope of the query by calling `hotkey.push(scope)`. (See more methods below.) The scope is nested, forming a stack. If a scope is specified, it is read from the most recently added part to the outer scope, trying to call the elements that are inside a scoped parent. @@ -67,6 +74,7 @@ const hotkeyRef = Symbol('hotkey'); class Hotkeys { constructor(doc) { + this.isFormField = isFormField; this.document = doc; this.document[hotkeyRef] = this; this.scopeStack = []; @@ -74,8 +82,12 @@ class Hotkeys { this[offDomEventsRef] = new Map(); this[listenerRef] = e => { + // Ignore key events when typing into form fields + if (isFormField(e.target)) { + return; + } const code = getCode(e); - this.trigger(code); + this.trigger(code, e); }; this.document.body.addEventListener('keydown', this[listenerRef]); } @@ -98,12 +110,13 @@ class Hotkeys { this[offDomEventsRef].set(code, []); } } - trigger(code) { + trigger(code, event) { const offDom = this[offDomEventsRef].get(code); if (offDom) { - for (const event of offDom) { - event(); + for (const offDomEvent of offDom) { + offDomEvent(event); } + event.preventDefault(); } // querySelectorAll returns a NodeList, which is not a sortable array. Convert by spreading. @@ -128,6 +141,7 @@ class Hotkeys { } else { elt.click(); } + event.preventDefault(); return; } } @@ -143,6 +157,7 @@ class Hotkeys { } else { elt.click(); } + event.preventDefault(); return; } } diff --git a/src/node_requires/i18n.js b/src/node_requires/i18n.js index 0e5df7bae..e11d406a3 100644 --- a/src/node_requires/i18n.js +++ b/src/node_requires/i18n.js @@ -41,13 +41,16 @@ const loadLanguage = lang => { return languageJSON; }; +const localizeField = (obj, field) => obj[`${field}_${languageJSON.me.id}`] || obj[field]; + const i18n = { loadLanguage, getLanguages, get languageJSON() { return languageJSON; }, - getI18nDir + getI18nDir, + localizeField }; diff --git a/src/node_requires/monaco-themes/Nord.json b/src/node_requires/monaco-themes/Nord.json index 37ddf0b77..614a91b06 100644 --- a/src/node_requires/monaco-themes/Nord.json +++ b/src/node_requires/monaco-themes/Nord.json @@ -1,449 +1,481 @@ { - "base": "vs-dark", - "inherit": true, - "rules": [ + "base": "vs-dark", + "inherit": true, + "rules": [ { - "token": "", - "foreground": "#ECEFF4", - "background": "#2e3440" + "background": "#2E3440", + "foreground": "#d8dee9", + "token": "" }, { - "foreground": "#616E88", - "fontStyle": "italic", - "token": "comment" + "foreground": "#88C0D0", + "token": "pointsOfInterest" }, { - "foreground": "#8FBCBB", - "token": "pointsOfInterest" + "foreground": "#616e88", + "token": "comment" }, { - "foreground": "#81A1C1", - "token": "constant" + "foreground": "#616e88", + "fontStyle": "bold", + "token": "comment.block.preprocessor" }, { - "foreground": "#88C0D0", - "token": "entity" + "foreground": "#81a1c1", + "token": "comment.block.documentation" }, { - "name": "Function names", - "token": "entity.name.function", - "foreground": "#88C0D0" + "foreground": "#d8dee9", + "background": "#bf616a", + "token": "invalid.illegal" }, { - "name": "Language variables", - "token": "variable.language", - "foreground": "#81A1C1", - "fontStyle": "italic" - }, { - "name": "Parameters", - "token": "variable.parameter", - "fontStyle": "italic" + "foreground": "#81a1c1", + "token": "keyword" }, { - "foreground": "#81A1C1", - "token": "keyword" + "foreground": "#81a1c1", + "token": "storage" }, { - "foreground": "#81A1C1", - "token": "storage" + "foreground": "#81a1c1", + "token": "keyword.operator" }, { - "foreground": "#A3BE8C", - "token": "string" + "foreground": "#81a1c1", + "token": "constant.language" }, { - "foreground": "#8FBCBB", - "token": "support" + "foreground": "#81a1c1", + "token": "support.constant" }, { - "foreground": "#D8DEE9", - "fontStyle": "italic", - "token": "invalid.deprecated" + "foreground": "#8fbcbb", + "token": "storage.type" }, { - "foreground": "#D8DEE9", - "token": "invalid.illegal" + "foreground": "#8fBcbb", + "token": "entity.other.attribute-name" }, { - "foreground": "#8FBCBB", - "token": "entity.other.inherited-class" + "foreground": "#d8dee9", + "token": "variable.other" }, { - "foreground": "#8FBCBB", - "token": "meta.tag" + "foreground": "#d8dee9", + "token": "variable.language" }, { - "foreground": "#8FBCBB", - "token": "meta.tag entity" + "foreground": "#8fbcbb", + "token": "entity.name.type" }, { - "foreground": "#8FBCBB", - "token": "entity.name.section" + "foreground": "#8fbcbb", + "fontStyle": "bold", + "token": "entity.other.inherited-class" }, { - "fontStyle": "bold", - "foreground": "#81A1C1", - "token": "keyword.type.variant" + "foreground": "#8fbcbb", + "token": "support.class" }, { - "foreground": "#8FBCBB", - "token": "type" + "foreground": "#8fbcbb", + "token": "variable.other.constant" }, { - "foreground": "#81A1C1", - "token": "source.ocaml keyword.operator.symbol" + "foreground": "#88c0d0", + "token": "entity.name.function" }, { - "foreground": "#81A1C1", - "token": "source.ocaml keyword.operator.symbol.infix" + "foreground": "#88c0d0", + "token": "support.function" }, { - "foreground": "#81A1C1", - "token": "source.ocaml keyword.operator.symbol.prefix" + "foreground": "#88c0d0", + "token": "entity.name.section" }, { - "fontStyle": "underline", - "token": "source.ocaml keyword.operator.symbol.infix.floating-point" + "foreground": "#5e81ac", + "token": "entity.name.tag" }, { - "fontStyle": "underline", - "token": "source.ocaml keyword.operator.symbol.prefix.floating-point" + "foreground": "#d8dee9", + "token": "variable.parameter" }, { - "fontStyle": "underline", - "token": "source.ocaml constant.numeric.floating-point" + "foreground": "#d8dee9", + "token": "support.variable" }, { - "background": "#88C0D0", - "token": "text.tex.latex meta.function.environment" + "foreground": "#b48ead", + "token": "constant" }, { - "background": "#88C0D0", - "token": "text.tex.latex meta.function.environment meta.function.environment" + "foreground": "#b48ead", + "token": "constant.numeric" }, { - "foreground": "#88C0D0", - "token": "text.tex.latex support.function" + "foreground": "#b48ead", + "token": "constant.other" }, { - "foreground": "#D08770", - "token": "source.plist string.unquoted" + "foreground": "#EBCB8B", + "token": "regexp" }, { - "foreground": "#81A1C1", - "token": "source.plist keyword.operator" + "foreground": "#B48EAD", + "token": "number" }, - { - "foreground": "#B48EAD", - "token": "regexp.ts" + { + "foreground": "#B48EAD", + "token": "number.hex" + }, + { + "foreground": "#81A1C1", + "token": "delimiter" + }, + { + "foreground": "#a3be8c", + "token": "string" + }, + { + "foreground": "#a3be8c", + "token": "string - string source" }, - { - "foreground": "#B48EAD", - "token": "regexp.escape.ts" + { + "foreground": "#ebcb8b", + "token": "constant.character" + }, + { + "foreground": "#ebcb8b", + "token": "string.regexp" }, - { - "foreground": "#B48EAD", - "token": "number.ts" + { + "foreground": "#d8dee9", + "fontStyle": "bold", + "token": "constant.other.symbol" }, - { - "foreground": "#B48EAD", - "token": "number.hex.ts" + { + "fontground": "#eceff4", + "token": "punctuation" + }, + { + "foreground": "#bf616a", + "token": "markup.deleted" }, - { - "foreground": "#8FBCBB", - "token": "identifier.ts" + { + "fontStyle": "italic", + "token": "markup.italic" + }, + { + "foreground": "#88c0d0", + "token": "markup.heading" + }, + { + "foreground": "#a3be8c", + "token": "markup.inserted" + }, + { + "fontStyle": "bold", + "token": "markup.bold" + }, + { + "fontStyle": "underline", + "token": "markup.underline" + }, + { + "foreground": "#8fbcbb", + "token": "meta.diff.range" + }, + { + "foreground": "#8fbcbb", + "token": "meta.diff.header.from-file" } - ], - "colors": { - "activityBar.activeBackground": "#3b4252", - "activityBar.activeBorder": "#88c0d0", - "activityBar.background": "#2e3440", - "activityBar.foreground": "#d8dee9", - "activityBarBadge.background": "#88c0d0", - "activityBarBadge.foreground": "#2e3440", - "badge.background": "#88c0d0", - "badge.foreground": "#2e3440", - "button.background": "#88c0d0ee", - "button.foreground": "#2e3440", - "button.hoverBackground": "#88c0d0", - "button.secondaryBackground": "#434c5e", - "button.secondaryForeground": "#d8dee9", - "button.secondaryHoverBackground": "#4c566a", - "charts.blue": "#81a1c1", - "charts.foreground": "#d8dee9", - "charts.green": "#a3be8c", - "charts.lines": "#88c0d0", - "charts.orange": "#d08770", - "charts.purple": "#b48ead", - "charts.red": "#bf616a", - "charts.yellow": "#ebcb8b", - "debugConsole.errorForeground": "#bf616a", - "debugConsole.infoForeground": "#88c0d0", - "debugConsole.sourceForeground": "#616e88", - "debugConsole.warningForeground": "#ebcb8b", - "debugConsoleInputIcon.foreground": "#81a1c1", - "debugExceptionWidget.background": "#4c566a", - "debugExceptionWidget.border": "#2e3440", - "debugToolBar.background": "#3b4252", - "descriptionForeground": "#d8dee9e6", - "diffEditor.insertedTextBackground": "#81a1c133", - "diffEditor.removedTextBackground": "#bf616a4d", - "dropdown.background": "#3b4252", - "dropdown.border": "#3b4252", - "dropdown.foreground": "#d8dee9", - "editor.background": "#2e3440", - "editor.findMatchBackground": "#88c0d066", - "editor.findMatchHighlightBackground": "#88c0d033", - "editor.findRangeHighlightBackground": "#88c0d033", - "editor.focusedStackFrameHighlightBackground": "#5e81ac", - "editor.foreground": "#d8dee9", - "editor.hoverHighlightBackground": "#3b4252", - "editor.inactiveSelectionBackground": "#434c5ecc", - "editor.inlineValuesBackground": "#4c566a", - "editor.inlineValuesForeground": "#eceff4", - "editor.lineHighlightBackground": "#3b4252", - "editor.lineHighlightBorder": "#3b4252", - "editor.rangeHighlightBackground": "#434c5e52", - "editor.selectionBackground": "#434c5ecc", - "editor.selectionHighlightBackground": "#434c5ecc", - "editor.stackFrameHighlightBackground": "#5e81ac", - "editor.wordHighlightBackground": "#81a1c166", - "editor.wordHighlightStrongBackground": "#81a1c199", - "editorActiveLineNumber.foreground": "#d8dee9cc", - "editorBracketHighlight.foreground1": "#8fbcbb", - "editorBracketHighlight.foreground2": "#88c0d0", - "editorBracketHighlight.foreground3": "#81a1c1", - "editorBracketHighlight.foreground4": "#5e81ac", - "editorBracketHighlight.foreground5": "#8fbcbb", - "editorBracketHighlight.foreground6": "#88c0d0", - "editorBracketHighlight.unexpectedBracket.foreground": "#bf616a", - "editorBracketMatch.background": "#2e344000", - "editorBracketMatch.border": "#88c0d0", - "editorCodeLens.foreground": "#4c566a", - "editorCursor.foreground": "#d8dee9", - "editorError.border": "#bf616a00", - "editorError.foreground": "#bf616a", - "editorGroup.border": "#3b425201", - "editorGroup.dropBackground": "#3b425299", - "editorGroupHeader.border": "#3b425200", - "editorGroupHeader.noTabsBackground": "#2e3440", - "editorGroupHeader.tabsBackground": "#2e3440", - "editorGroupHeader.tabsBorder": "#3b425200", - "editorGutter.addedBackground": "#a3be8c", - "editorGutter.background": "#2e3440", - "editorGutter.deletedBackground": "#bf616a", - "editorGutter.modifiedBackground": "#ebcb8b", - "editorHint.border": "#ebcb8b00", - "editorHint.foreground": "#ebcb8b", - "editorHoverWidget.background": "#3b4252", - "editorHoverWidget.border": "#3b4252", - "editorIndentGuide.activeBackground": "#4c566a", - "editorIndentGuide.background": "#434c5eb3", - "editorInlayHint.background": "#434c5e", - "editorInlayHint.foreground": "#d8dee9", - "editorLineNumber.activeForeground": "#d8dee9", - "editorLineNumber.foreground": "#4c566a", - "editorLink.activeForeground": "#88c0d0", - "editorMarkerNavigation.background": "#5e81acc0", - "editorMarkerNavigationError.background": "#bf616ac0", - "editorMarkerNavigationWarning.background": "#ebcb8bc0", - "editorOverviewRuler.addedForeground": "#a3be8c", - "editorOverviewRuler.border": "#3b4252", - "editorOverviewRuler.currentContentForeground": "#3b4252", - "editorOverviewRuler.deletedForeground": "#bf616a", - "editorOverviewRuler.errorForeground": "#bf616a", - "editorOverviewRuler.findMatchForeground": "#88c0d066", - "editorOverviewRuler.incomingContentForeground": "#3b4252", - "editorOverviewRuler.infoForeground": "#81a1c1", - "editorOverviewRuler.modifiedForeground": "#ebcb8b", - "editorOverviewRuler.rangeHighlightForeground": "#88c0d066", - "editorOverviewRuler.selectionHighlightForeground": "#88c0d066", - "editorOverviewRuler.warningForeground": "#ebcb8b", - "editorOverviewRuler.wordHighlightForeground": "#88c0d066", - "editorOverviewRuler.wordHighlightStrongForeground": "#88c0d066", - "editorRuler.foreground": "#434c5e", - "editorSuggestWidget.background": "#2e3440", - "editorSuggestWidget.border": "#3b4252", - "editorSuggestWidget.focusHighlightForeground": "#88c0d0", - "editorSuggestWidget.foreground": "#d8dee9", - "editorSuggestWidget.highlightForeground": "#88c0d0", - "editorSuggestWidget.selectedBackground": "#434c5e", - "editorSuggestWidget.selectedForeground": "#d8dee9", - "editorWarning.border": "#ebcb8b00", - "editorWarning.foreground": "#ebcb8b", - "editorWhitespace.foreground": "#4c566ab3", - "editorWidget.background": "#2e3440", - "editorWidget.border": "#3b4252", - "errorForeground": "#bf616a", - "extensionButton.prominentBackground": "#434c5e", - "extensionButton.prominentForeground": "#d8dee9", - "extensionButton.prominentHoverBackground": "#4c566a", - "focusBorder": "#3b4252", - "foreground": "#d8dee9", - "gitDecoration.conflictingResourceForeground": "#5e81ac", - "gitDecoration.deletedResourceForeground": "#bf616a", - "gitDecoration.ignoredResourceForeground": "#d8dee966", - "gitDecoration.modifiedResourceForeground": "#ebcb8b", - "gitDecoration.stageDeletedResourceForeground": "#bf616a", - "gitDecoration.stageModifiedResourceForeground": "#ebcb8b", - "gitDecoration.submoduleResourceForeground": "#8fbcbb", - "gitDecoration.untrackedResourceForeground": "#a3be8c", - "input.background": "#3b4252", - "input.border": "#3b4252", - "input.foreground": "#d8dee9", - "input.placeholderForeground": "#d8dee999", - "inputOption.activeBackground": "#5e81ac", - "inputOption.activeBorder": "#5e81ac", - "inputOption.activeForeground": "#eceff4", - "inputValidation.errorBackground": "#bf616a", - "inputValidation.errorBorder": "#bf616a", - "inputValidation.infoBackground": "#81a1c1", - "inputValidation.infoBorder": "#81a1c1", - "inputValidation.warningBackground": "#d08770", - "inputValidation.warningBorder": "#d08770", - "keybindingLabel.background": "#4c566a", - "keybindingLabel.border": "#4c566a", - "keybindingLabel.bottomBorder": "#4c566a", - "keybindingLabel.foreground": "#d8dee9", - "list.activeSelectionBackground": "#88c0d0", - "list.activeSelectionForeground": "#2e3440", - "list.dropBackground": "#88c0d099", - "list.errorForeground": "#bf616a", - "list.focusBackground": "#88c0d099", - "list.focusForeground": "#d8dee9", - "list.focusHighlightForeground": "#eceff4", - "list.highlightForeground": "#88c0d0", - "list.hoverBackground": "#3b4252", - "list.hoverForeground": "#eceff4", - "list.inactiveFocusBackground": "#434c5ecc", - "list.inactiveSelectionBackground": "#434c5e", - "list.inactiveSelectionForeground": "#d8dee9", - "list.warningForeground": "#ebcb8b", - "merge.border": "#3b425200", - "merge.currentContentBackground": "#81a1c14d", - "merge.currentHeaderBackground": "#81a1c166", - "merge.incomingContentBackground": "#8fbcbb4d", - "merge.incomingHeaderBackground": "#8fbcbb66", - "minimap.background": "#2e3440", - "minimap.errorHighlight": "#bf616acc", - "minimap.findMatchHighlight": "#88c0d0", - "minimap.selectionHighlight": "#88c0d0cc", - "minimap.warningHighlight": "#ebcb8bcc", - "minimapGutter.addedBackground": "#a3be8c", - "minimapGutter.deletedBackground": "#bf616a", - "minimapGutter.modifiedBackground": "#ebcb8b", - "minimapSlider.activeBackground": "#434c5eaa", - "minimapSlider.background": "#434c5e99", - "minimapSlider.hoverBackground": "#434c5eaa", - "notificationCenter.border": "#3b425200", - "notificationCenterHeader.background": "#2e3440", - "notificationCenterHeader.foreground": "#88c0d0", - "notificationLink.foreground": "#88c0d0", - "notificationToast.border": "#3b425200", - "notifications.background": "#3b4252", - "notifications.border": "#2e3440", - "notifications.foreground": "#d8dee9", - "panel.background": "#2e3440", - "panel.border": "#3b4252", - "panelTitle.activeBorder": "#88c0d000", - "panelTitle.activeForeground": "#88c0d0", - "panelTitle.inactiveForeground": "#d8dee9", - "peekView.border": "#4c566a", - "peekViewEditor.background": "#2e3440", - "peekViewEditor.matchHighlightBackground": "#88c0d04d", - "peekViewEditorGutter.background": "#2e3440", - "peekViewResult.background": "#2e3440", - "peekViewResult.fileForeground": "#88c0d0", - "peekViewResult.lineForeground": "#d8dee966", - "peekViewResult.matchHighlightBackground": "#88c0d0cc", - "peekViewResult.selectionBackground": "#434c5e", - "peekViewResult.selectionForeground": "#d8dee9", - "peekViewTitle.background": "#3b4252", - "peekViewTitleDescription.foreground": "#d8dee9", - "peekViewTitleLabel.foreground": "#88c0d0", - "pickerGroup.border": "#3b4252", - "pickerGroup.foreground": "#88c0d0", - "progressBar.background": "#88c0d0", - "quickInputList.focusBackground": "#88c0d0", - "quickInputList.focusForeground": "#2e3440", - "sash.hoverBorder": "#88c0d0", - "scrollbar.shadow": "#00000066", - "scrollbarSlider.activeBackground": "#434c5eaa", - "scrollbarSlider.background": "#434c5e99", - "scrollbarSlider.hoverBackground": "#434c5eaa", - "selection.background": "#88c0d099", - "sideBar.background": "#2e3440", - "sideBar.border": "#3b4252", - "sideBar.foreground": "#d8dee9", - "sideBarSectionHeader.background": "#3b4252", - "sideBarSectionHeader.foreground": "#d8dee9", - "sideBarTitle.foreground": "#d8dee9", - "statusBar.background": "#3b4252", - "statusBar.border": "#3b425200", - "statusBar.debuggingBackground": "#5e81ac", - "statusBar.debuggingForeground": "#d8dee9", - "statusBar.foreground": "#d8dee9", - "statusBar.noFolderBackground": "#3b4252", - "statusBar.noFolderForeground": "#d8dee9", - "statusBarItem.activeBackground": "#4c566a", - "statusBarItem.errorBackground": "#3b4252", - "statusBarItem.errorForeground": "#bf616a", - "statusBarItem.hoverBackground": "#434c5e", - "statusBarItem.prominentBackground": "#3b4252", - "statusBarItem.prominentHoverBackground": "#434c5e", - "statusBarItem.warningBackground": "#ebcb8b", - "statusBarItem.warningForeground": "#2e3440", - "tab.activeBackground": "#3b4252", - "tab.activeBorder": "#88c0d000", - "tab.activeBorderTop": "#88c0d000", - "tab.activeForeground": "#d8dee9", - "tab.border": "#3b425200", - "tab.hoverBackground": "#3b4252cc", - "tab.hoverBorder": "#88c0d000", - "tab.inactiveBackground": "#2e3440", - "tab.inactiveForeground": "#d8dee966", - "tab.lastPinnedBorder": "#4c566a", - "tab.unfocusedActiveBorder": "#88c0d000", - "tab.unfocusedActiveBorderTop": "#88c0d000", - "tab.unfocusedActiveForeground": "#d8dee999", - "tab.unfocusedHoverBackground": "#3b4252b3", - "tab.unfocusedHoverBorder": "#88c0d000", - "tab.unfocusedInactiveForeground": "#d8dee966", - "terminal.ansiBlack": "#3b4252", - "terminal.ansiBlue": "#81a1c1", - "terminal.ansiBrightBlack": "#4c566a", - "terminal.ansiBrightBlue": "#81a1c1", - "terminal.ansiBrightCyan": "#8fbcbb", - "terminal.ansiBrightGreen": "#a3be8c", - "terminal.ansiBrightMagenta": "#b48ead", - "terminal.ansiBrightRed": "#bf616a", - "terminal.ansiBrightWhite": "#eceff4", - "terminal.ansiBrightYellow": "#ebcb8b", - "terminal.ansiCyan": "#88c0d0", - "terminal.ansiGreen": "#a3be8c", - "terminal.ansiMagenta": "#b48ead", - "terminal.ansiRed": "#bf616a", - "terminal.ansiWhite": "#e5e9f0", - "terminal.ansiYellow": "#ebcb8b", - "terminal.background": "#2e3440", - "terminal.foreground": "#d8dee9", - "terminal.tab.activeBorder": "#88c0d0", - "textBlockQuote.background": "#3b4252", - "textBlockQuote.border": "#81a1c1", - "textCodeBlock.background": "#4c566a", - "textLink.activeForeground": "#88c0d0", - "textLink.foreground": "#88c0d0", - "textPreformat.foreground": "#8fbcbb", - "textSeparator.foreground": "#eceff4", - "titleBar.activeBackground": "#2e3440", - "titleBar.activeForeground": "#d8dee9", - "titleBar.border": "#2e344000", - "titleBar.inactiveBackground": "#2e3440", - "titleBar.inactiveForeground": "#d8dee966", - "tree.indentGuidesStroke": "#616e88", - "walkThrough.embeddedEditorBackground": "#2e3440", - "welcomePage.buttonBackground": "#434c5e", - "welcomePage.buttonHoverBackground": "#4c566a", - "widget.shadow": "#00000066" - } -} \ No newline at end of file + ], + "colors": { + "focusBorder": "#3b4252", + "foreground": "#d8dee9", + "activityBar.background": "#2e3440", + "activityBar.dropBackground": "#3b4252", + "activityBar.foreground": "#d8dee9", + "activityBar.activeBorder": "#88c0d0", + "activityBar.activeBackground": "#3b4252", + "activityBarBadge.background": "#88c0d0", + "activityBarBadge.foreground": "#2e3440", + "badge.foreground": "#2e3440", + "badge.background": "#88c0d0", + "button.background": "#88c0d0ee", + "button.foreground": "#2e3440", + "button.hoverBackground": "#88c0d0", + "button.secondaryBackground": "#434c5e", + "button.secondaryforeground": "#d8dee9", + "button.secondaryHoverBackground": "#4c566a", + "charts.red": "#bf616a", + "charts.blue": "#81a1c1", + "charts.yellow": "#ebcb8b", + "charts.orange": "#d08770", + "charts.green": "#a3be8c", + "charts.purple": "#b48ead", + "charts.foreground": "#d8dee9", + "charts.lines": "#88c0d0", + "debugConsole.infoforeground": "#88c0d0", + "debugConsole.warningforeground": "#ebcb8b", + "debugConsole.errorforeground": "#bf616a", + "debugConsole.sourceforeground": "#616e88", + "debugConsoleInputIcon.foreground": "#81a1c1", + "debugExceptionWidget.background": "#4c566a", + "debugExceptionWidget.border": "#2e3440", + "debugToolBar.background": "#3b4252", + "descriptionforeground": "#d8dee9e6", + "diffEditor.insertedTextBackground": "#81a1c133", + "diffEditor.removedTextBackground": "#bf616a4d", + "dropdown.background": "#3b4252", + "dropdown.border": "#3b4252", + "dropdown.foreground": "#d8dee9", + "editorActiveLineNumber.foreground": "#d8dee9cc", + "editorCursor.foreground": "#D8DEE9", + "editorHint.border": "#ebcb8b00", + "editorHint.foreground": "#ebcb8b", + "editorIndentGuide.background": "#434c5eb3", + "editorIndentGuide.activeBackground": "#4c566a", + "editorInlayHint.background": "#434c5e", + "editorInlayHint.foreground": "#d8dee9", + "editorLineNumber.foreground": "#4c566a", + "editorLineNumber.activeforeground": "#d8dee9", + "editorWhitespace.foreground": "#434C5ECC", + "editorWidget.background": "#2e3440", + "editorWidget.border": "#3b4252", + "editor.background": "#2E3440", + "editor.foreground": "#D8DEE9", + "editor.hoverHighlightBackground": "#3b4252", + "editor.findMatchBackground": "#88c0d066", + "editor.findMatchHighlightBackground": "#88c0d033", + "editor.findRangeHighlightBackground": "#88c0d033", + "editor.lineHighlightBackground": "#3B4252", + "editor.lineHighlightBorder": "#3b4252", + "editor.inactiveSelectionBackground": "#434c5ecc", + "editor.inlineValuesBackground": "#4c566a", + "editor.inlineValuesforeground": "#eceff4", + "editor.selectionBackground": "#434C5ECC", + "editor.selectionHighlightBackground": "#434c5ecc", + "editor.rangeHighlightBackground": "#434c5e52", + "editor.wordHighlightBackground": "#81a1c166", + "editor.wordHighlightStrongBackground": "#81a1c199", + "editor.stackFrameHighlightBackground": "#5e81ac", + "editor.focusedStackFrameHighlightBackground": "#5e81ac", + "editorError.foreground": "#bf616a", + "editorError.border": "#bf616a00", + "editorWarning.foreground": "#ebcb8b", + "editorWarning.border": "#ebcb8b00", + "editorBracketMatch.background": "#2e344000", + "editorBracketMatch.border": "#88c0d0", + "editorBracketHighlight.foreground1": "#8fbcbb", + "editorBracketHighlight.foreground2": "#88c0d0", + "editorBracketHighlight.foreground3": "#81a1c1", + "editorBracketHighlight.foreground4": "#5e81ac", + "editorBracketHighlight.foreground5": "#8fbcbb", + "editorBracketHighlight.foreground6": "#88c0d0", + "editorBracketHighlight.unexpectedBracket.foreground": "#bf616a", + "editorCodeLens.foreground": "#4c566a", + "editorGroup.background": "#2e3440", + "editorGroup.border": "#3b425201", + "editorGroup.dropBackground": "#3b425299", + "editorGroupHeader.border": "#3b425200", + "editorGroupHeader.noTabsBackground": "#2e3440", + "editorGroupHeader.tabsBackground": "#2e3440", + "editorGroupHeader.tabsBorder": "#3b425200", + "editorGutter.background": "#2e3440", + "editorGutter.modifiedBackground": "#ebcb8b", + "editorGutter.addedBackground": "#a3be8c", + "editorGutter.deletedBackground": "#bf616a", + "editorHoverWidget.background": "#3b4252", + "editorHoverWidget.border": "#3b4252", + "editorLink.activeforeground": "#88c0d0", + "editorMarkerNavigation.background": "#5e81acc0", + "editorMarkerNavigationError.background": "#bf616ac0", + "editorMarkerNavigationWarning.background": "#ebcb8bc0", + "editorOverviewRuler.border": "#3b4252", + "editorOverviewRuler.currentContentforeground": "#3b4252", + "editorOverviewRuler.incomingContentforeground": "#3b4252", + "editorOverviewRuler.findMatchforeground": "#88c0d066", + "editorOverviewRuler.rangeHighlightforeground": "#88c0d066", + "editorOverviewRuler.selectionHighlightforeground": "#88c0d066", + "editorOverviewRuler.wordHighlightforeground": "#88c0d066", + "editorOverviewRuler.wordHighlightStrongforeground": "#88c0d066", + "editorOverviewRuler.modifiedforeground": "#ebcb8b", + "editorOverviewRuler.addedforeground": "#a3be8c", + "editorOverviewRuler.deletedforeground": "#bf616a", + "editorOverviewRuler.errorforeground": "#bf616a", + "editorOverviewRuler.warningforeground": "#ebcb8b", + "editorOverviewRuler.infoforeground": "#81a1c1", + "editorRuler.foreground": "#434c5e", + "editorSuggestWidget.background": "#2e3440", + "editorSuggestWidget.border": "#3b4252", + "editorSuggestWidget.foreground": "#d8dee9", + "editorSuggestWidget.focusHighlightforeground": "#88c0d0", + "editorSuggestWidget.highlightforeground": "#88c0d0", + "editorSuggestWidget.selectedBackground": "#434c5e", + "editorSuggestWidget.selectedforeground": "#d8dee9", + "extensionButton.prominentforeground": "#d8dee9", + "extensionButton.prominentBackground": "#434c5e", + "extensionButton.prominentHoverBackground": "#4c566a", + "errorforeground": "#bf616a", + "gitDecoration.modifiedResourceforeground": "#ebcb8b", + "gitDecoration.deletedResourceforeground": "#bf616a", + "gitDecoration.untrackedResourceforeground": "#a3be8c", + "gitDecoration.ignoredResourceforeground": "#d8dee966", + "gitDecoration.conflictingResourceforeground": "#5e81ac", + "gitDecoration.submoduleResourceforeground": "#8fbcbb", + "gitDecoration.stageDeletedResourceforeground": "#bf616a", + "gitDecoration.stageModifiedResourceforeground": "#ebcb8b", + "input.background": "#3b4252", + "input.foreground": "#d8dee9", + "input.placeholderforeground": "#d8dee999", + "input.border": "#3b4252", + "inputOption.activeBackground": "#5e81ac", + "inputOption.activeBorder": "#5e81ac", + "inputOption.activeforeground": "#eceff4", + "inputValidation.errorBackground": "#bf616a", + "inputValidation.errorBorder": "#bf616a", + "inputValidation.infoBackground": "#81a1c1", + "inputValidation.infoBorder": "#81a1c1", + "inputValidation.warningBackground": "#d08770", + "inputValidation.warningBorder": "#d08770", + "keybindingLabel.background": "#4c566a", + "keybindingLabel.border": "#4c566a", + "keybindingLabel.bottomBorder": "#4c566a", + "keybindingLabel.foreground": "#d8dee9", + "list.activeSelectionBackground": "#88c0d0", + "list.activeSelectionforeground": "#2e3440", + "list.inactiveSelectionBackground": "#434c5e", + "list.inactiveSelectionforeground": "#d8dee9", + "list.inactiveFocusBackground": "#434c5ecc", + "list.hoverforeground": "#eceff4", + "list.focusforeground": "#d8dee9", + "list.focusBackground": "#88c0d099", + "list.focusHighlightforeground": "#eceff4", + "list.hoverBackground": "#3b4252", + "list.dropBackground": "#88c0d099", + "list.highlightforeground": "#88c0d0", + "list.errorforeground": "#bf616a", + "list.warningforeground": "#ebcb8b", + "merge.currentHeaderBackground": "#81a1c166", + "merge.currentContentBackground": "#81a1c14d", + "merge.incomingHeaderBackground": "#8fbcbb66", + "merge.incomingContentBackground": "#8fbcbb4d", + "merge.border": "#3b425200", + "minimap.background": "#2e3440", + "minimap.errorHighlight": "#bf616acc", + "minimap.findMatchHighlight": "#88c0d0", + "minimap.selectionHighlight": "#88c0d0cc", + "minimap.warningHighlight": "#ebcb8bcc", + "minimapGutter.addedBackground": "#a3be8c", + "minimapGutter.deletedBackground": "#bf616a", + "minimapGutter.modifiedBackground": "#ebcb8b", + "minimapSlider.activeBackground": "#434c5eaa", + "minimapSlider.background": "#434c5e99", + "minimapSlider.hoverBackground": "#434c5eaa", + "panel.background": "#2e3440", + "panel.border": "#3b4252", + "panelTitle.activeBorder": "#88c0d000", + "panelTitle.activeforeground": "#88c0d0", + "panelTitle.inactiveforeground": "#d8dee9", + "peekView.border": "#4c566a", + "peekViewEditor.background": "#2e3440", + "peekViewEditorGutter.background": "#2e3440", + "peekViewEditor.matchHighlightBackground": "#88c0d04d", + "peekViewResult.background": "#2e3440", + "peekViewResult.fileforeground": "#88c0d0", + "peekViewResult.lineforeground": "#d8dee966", + "peekViewResult.matchHighlightBackground": "#88c0d0cc", + "peekViewResult.selectionBackground": "#434c5e", + "peekViewResult.selectionforeground": "#d8dee9", + "peekViewTitle.background": "#3b4252", + "peekViewTitleDescription.foreground": "#d8dee9", + "peekViewTitleLabel.foreground": "#88c0d0", + "pickerGroup.border": "#3b4252", + "pickerGroup.foreground": "#88c0d0", + "progressBar.background": "#88c0d0", + "quickInputList.focusBackground": "#88c0d0", + "quickInputList.focusforeground": "#2e3440", + "sash.hoverBorder": "#88c0d0", + "scrollbar.shadow": "#00000066", + "scrollbarSlider.activeBackground": "#434c5eaa", + "scrollbarSlider.background": "#434c5e99", + "scrollbarSlider.hoverBackground": "#434c5eaa", + "selection.background": "#88c0d099", + "sideBar.background": "#2e3440", + "sideBar.foreground": "#d8dee9", + "sideBar.border": "#3b4252", + "sideBarSectionHeader.background": "#3b4252", + "sideBarSectionHeader.foreground": "#d8dee9", + "sideBarTitle.foreground": "#d8dee9", + "statusBar.background": "#3b4252", + "statusBar.debuggingBackground": "#5e81ac", + "statusBar.debuggingforeground": "#d8dee9", + "statusBar.noFolderforeground": "#d8dee9", + "statusBar.noFolderBackground": "#3b4252", + "statusBar.foreground": "#d8dee9", + "statusBarItem.activeBackground": "#4c566a", + "statusBarItem.hoverBackground": "#434c5e", + "statusBarItem.prominentBackground": "#3b4252", + "statusBarItem.prominentHoverBackground": "#434c5e", + "statusBarItem.errorBackground": "#3b4252", + "statusBarItem.errorforeground": "#bf616a", + "statusBarItem.warningBackground": "#ebcb8b", + "statusBarItem.warningforeground": "#2e3440", + "statusBar.border": "#3b425200", + "tab.activeBackground": "#3b4252", + "tab.activeforeground": "#d8dee9", + "tab.border": "#3b425200", + "tab.activeBorder": "#88c0d000", + "tab.unfocusedActiveBorder": "#88c0d000", + "tab.inactiveBackground": "#2e3440", + "tab.inactiveforeground": "#d8dee966", + "tab.unfocusedActiveforeground": "#d8dee999", + "tab.unfocusedInactiveforeground": "#d8dee966", + "tab.hoverBackground": "#3b4252cc", + "tab.unfocusedHoverBackground": "#3b4252b3", + "tab.hoverBorder": "#88c0d000", + "tab.unfocusedHoverBorder": "#88c0d000", + "tab.activeBorderTop": "#88c0d000", + "tab.unfocusedActiveBorderTop": "#88c0d000", + "tab.lastPinnedBorder": "#4c566a", + "terminal.background": "#2e3440", + "terminal.foreground": "#d8dee9", + "terminal.ansiBlack": "#3b4252", + "terminal.ansiRed": "#bf616a", + "terminal.ansiGreen": "#a3be8c", + "terminal.ansiYellow": "#ebcb8b", + "terminal.ansiBlue": "#81a1c1", + "terminal.ansiMagenta": "#b48ead", + "terminal.ansiCyan": "#88c0d0", + "terminal.ansiWhite": "#e5e9f0", + "terminal.ansiBrightBlack": "#4c566a", + "terminal.ansiBrightRed": "#bf616a", + "terminal.ansiBrightGreen": "#a3be8c", + "terminal.ansiBrightYellow": "#ebcb8b", + "terminal.ansiBrightBlue": "#81a1c1", + "terminal.ansiBrightMagenta": "#b48ead", + "terminal.ansiBrightCyan": "#8fbcbb", + "terminal.ansiBrightWhite": "#eceff4", + "terminal.tab.activeBorder": "#88c0d0", + "textBlockQuote.background": "#3b4252", + "textBlockQuote.border": "#81a1c1", + "textCodeBlock.background": "#4c566a", + "textLink.activeforeground": "#88c0d0", + "textLink.foreground": "#88c0d0", + "textPreformat.foreground": "#8fbcbb", + "textSeparator.foreground": "#eceff4", + "titleBar.activeBackground": "#2e3440", + "titleBar.activeforeground": "#d8dee9", + "titleBar.border": "#2e344000", + "titleBar.inactiveBackground": "#2e3440", + "titleBar.inactiveforeground": "#d8dee966", + "tree.indentGuidesStroke": "#616e88", + "walkThrough.embeddedEditorBackground": "#2e3440", + "welcomePage.buttonBackground": "#434c5e", + "welcomePage.buttonHoverBackground": "#4c566a", + "widget.shadow": "#00000066" + } +} diff --git a/src/node_requires/monaco-themes/RosePine.json b/src/node_requires/monaco-themes/RosePine.json new file mode 100644 index 000000000..77c0371c4 --- /dev/null +++ b/src/node_requires/monaco-themes/RosePine.json @@ -0,0 +1,665 @@ +{ + "base": "vs-dark", + "inherit": true, + "rules": [ + { + "background": "#191724", + "foreground": "#e0def4", + "token": "" + }, + + { + "foreground": "#c4a7e7", + "token": "pointsOfInterest" + }, + + { + "foreground": "#eb6f92", + "token": "invalid" + }, + { + "fontStyle": "italic", + "token": "emphasis" + }, + { + "fontStyle": "bold", + "token": "strong" + }, + + { + "foreground": "#e0def4", + "token": "variable" + }, + { + "foreground": "#e0def4", + "token": "variable.predefined" + }, + { + "foreground": "#ebbcba", + "token": "constant" + }, + { + "foreground": "#6e6a86", + "token": "comment" + }, + { + "foreground": "#ebbcba", + "token": "number" + }, + { + "foreground": "#ebbcba", + "token": "number.hex" + }, + { + "foreground": "#f6c177", + "token": "regexp" + }, + { + "foreground": "#6e6a86", + "token": "annotation" + }, + { + "foreground": "#e0def4", + "token": "type" + }, + + { + "foreground": "#908caa", + "token": "delimiter" + }, + { + "foreground": "#908caa", + "token": "delimiter.html" + }, + { + "foreground": "#908caa", + "token": "delimiter.xml" + }, + + { + "foreground": "#9ccfd8", + "token": "tag" + }, + { + "foreground": "#9ccfd8", + "token": "tag.id.jade" + }, + { + "foreground": "#9ccfd8", + "token": "tag.class.jade" + }, + { + "foreground": "#9ccfd8", + "token": "meta.scss" + }, + { + "foreground": "#9ccfd8", + "token": "metatag" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.content.html" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.html" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.xml" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.php" + }, + { + "foreground": "#9ccfd8", + "token": "key" + }, + { + "foreground": "#9ccfd8", + "token": "string.key.json" + }, + { + "foreground": "#f6c177", + "token": "string.value.json" + }, + + { + "foreground": "#c4a7e7", + "token": "attribute.name" + }, + { + "foreground": "#f6c177", + "token": "attribute.value" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.number" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.unit" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.html" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.xml" + }, + + { + "foreground": "#f6c177", + "token": "string" + }, + { + "foreground": "#f6c177", + "token": "string.html" + }, + { + "foreground": "#f6c177", + "token": "string.sql" + }, + { + "foreground": "#f6c177", + "token": "string.yaml" + }, + + { + "foreground": "#31748f", + "token": "keyword" + }, + { + "foreground": "#31748f", + "token": "keyword.json" + }, + { + "foreground": "#31748f", + "token": "keyword.flow" + }, + { + "foreground": "#31748f", + "token": "keyword.flow.scss" + }, + + { + "foreground": "#908caa", + "token": "operator.scss" + }, + { + "foreground": "#908caa", + "token": "operator.sql" + }, + { + "foreground": "#908caa", + "token": "operator.swift" + }, + { + "foreground": "#908caa", + "token": "predefined.sql" + }, + + { + "foreground": "#ebbcba", + "token": "identifier" + } + ], + "colors": { + "activityBar.activeBorder": "#e0def4", + "activityBar.background": "#191724", + "activityBar.dropBorder": "#26233a", + "activityBar.foreground": "#e0def4", + "activityBar.inactiveForeground": "#908caa", + "activityBarBadge.background": "#ebbcba", + "activityBarBadge.foreground": "#191724", + "badge.background": "#ebbcba", + "badge.foreground": "#191724", + "banner.background": "#1f1d2e", + "banner.foreground": "#e0def4", + "banner.iconForeground": "#908caa", + "breadcrumb.activeSelectionForeground": "#ebbcba", + "breadcrumb.background": "#191724", + "breadcrumb.focusForeground": "#908caa", + "breadcrumb.foreground": "#6e6a86", + "breadcrumbPicker.background": "#1f1d2e", + "button.background": "#ebbcba", + "button.foreground": "#191724", + "button.hoverBackground": "#ebbcbae6", + "button.secondaryBackground": "#1f1d2e", + "button.secondaryForeground": "#e0def4", + "button.secondaryHoverBackground": "#26233a", + "charts.blue": "#9ccfd8", + "charts.foreground": "#e0def4", + "charts.green": "#31748f", + "charts.lines": "#908caa", + "charts.orange": "#ebbcba", + "charts.purple": "#c4a7e7", + "charts.red": "#eb6f92", + "charts.yellow": "#f6c177", + "checkbox.background": "#1f1d2e", + "checkbox.border": "#6e6a8633", + "checkbox.foreground": "#e0def4", + "debugExceptionWidget.background": "#1f1d2e", + "debugExceptionWidget.border": "#6e6a8633", + "debugIcon.breakpointCurrentStackframeForeground": "#908caa", + "debugIcon.breakpointDisabledForeground": "#908caa", + "debugIcon.breakpointForeground": "#908caa", + "debugIcon.breakpointStackframeForeground": "#908caa", + "debugIcon.breakpointUnverifiedForeground": "#908caa", + "debugIcon.continueForeground": "#908caa", + "debugIcon.disconnectForeground": "#908caa", + "debugIcon.pauseForeground": "#908caa", + "debugIcon.restartForeground": "#908caa", + "debugIcon.startForeground": "#908caa", + "debugIcon.stepBackForeground": "#908caa", + "debugIcon.stepIntoForeground": "#908caa", + "debugIcon.stepOutForeground": "#908caa", + "debugIcon.stepOverForeground": "#908caa", + "debugIcon.stopForeground": "#eb6f92", + "debugToolBar.background": "#1f1d2e", + "debugToolBar.border": "#26233a", + "descriptionForeground": "#908caa", + "diffEditor.border": "#26233a", + "diffEditor.diagonalFill": "#6e6a8666", + "diffEditor.insertedTextBackground": "#9ccfd826", + "diffEditor.removedTextBackground": "#eb6f9226", + "diffEditorOverview.insertedForeground": "#9ccfd880", + "diffEditorOverview.removedForeground": "#eb6f9280", + "dropdown.background": "#1f1d2e", + "dropdown.border": "#6e6a8633", + "dropdown.foreground": "#e0def4", + "dropdown.listBackground": "#1f1d2e", + "editor.background": "#191724", + "editor.findMatchBackground": "#6e6a8666", + "editor.findMatchHighlightBackground": "#6e6a8666", + "editor.findRangeHighlightBackground": "#6e6a8666", + "editor.findRangeHighlightBorder": "#0000", + "editor.focusedStackFrameHighlightBackground": "#6e6a8633", + "editor.foldBackground": "#1f1d2e", + "editor.foreground": "#e0def4", + "editor.hoverHighlightBackground": "#0000", + "editor.inactiveSelectionBackground": "#6e6a861a", + "editor.inlineValuesBackground": "#0000", + "editor.inlineValuesForeground": "#908caa", + "editor.lineHighlightBackground": "#6e6a861a", + "editor.lineHighlightBorder": "#0000", + "editor.linkedEditingBackground": "#1f1d2e", + "editor.rangeHighlightBackground": "#6e6a861a", + "editor.rangeHighlightBorder": "#0000", + "editor.selectionBackground": "#6e6a8633", + "editor.selectionForeground": "#e0def4", + "editor.selectionHighlightBackground": "#6e6a8633", + "editor.selectionHighlightBorder": "#0000", + "editor.snippetFinalTabstopHighlightBackground": "#6e6a8633", + "editor.snippetFinalTabstopHighlightBorder": "#1f1d2e", + "editor.snippetTabstopHighlightBackground": "#6e6a8633", + "editor.snippetTabstopHighlightBorder": "#1f1d2e", + "editor.stackFrameHighlightBackground": "#6e6a8633", + "editor.symbolHighlightBackground": "#6e6a8633", + "editor.symbolHighlightBorder": "#0000", + "editor.wordHighlightBackground": "#6e6a8633", + "editor.wordHighlightBorder": "#0000", + "editor.wordHighlightStrongBackground": "#6e6a8633", + "editor.wordHighlightStrongBorder": "#6e6a8633", + "editorBracketHighlight.foreground1": "#eb6f9280", + "editorBracketHighlight.foreground2": "#31748f80", + "editorBracketHighlight.foreground3": "#f6c17780", + "editorBracketHighlight.foreground4": "#9ccfd880", + "editorBracketHighlight.foreground5": "#ebbcba80", + "editorBracketHighlight.foreground6": "#c4a7e780", + "editorBracketMatch.background": "#0000", + "editorBracketMatch.border": "#908caa", + "editorBracketPairGuide.activeBackground1": "#31748f", + "editorBracketPairGuide.activeBackground2": "#ebbcba", + "editorBracketPairGuide.activeBackground3": "#c4a7e7", + "editorBracketPairGuide.activeBackground4": "#9ccfd8", + "editorBracketPairGuide.activeBackground5": "#f6c177", + "editorBracketPairGuide.activeBackground6": "#eb6f92", + "editorBracketPairGuide.background1": "#31748f80", + "editorBracketPairGuide.background2": "#ebbcba80", + "editorBracketPairGuide.background3": "#c4a7e780", + "editorBracketPairGuide.background4": "#9ccfd880", + "editorBracketPairGuide.background5": "#f6c17780", + "editorBracketPairGuide.background6": "#eb6f9280", + "editorCodeLens.foreground": "#ebbcba", + "editorCursor.background": "#e0def4", + "editorCursor.foreground": "#6e6a86", + "editorError.border": "#0000", + "editorError.foreground": "#eb6f92", + "editorGhostText.foreground": "#908caa", + "editorGroup.border": "#0000", + "editorGroup.dropBackground": "#1f1d2e", + "editorGroup.emptyBackground": "#0000", + "editorGroup.focusedEmptyBorder": "#0000", + "editorGroupHeader.noTabsBackground": "#0000", + "editorGroupHeader.tabsBackground": "#0000", + "editorGroupHeader.tabsBorder": "#0000", + "editorGutter.addedBackground": "#9ccfd8", + "editorGutter.background": "#0000", + "editorGutter.commentRangeForeground": "#908caa", + "editorGutter.deletedBackground": "#eb6f92", + "editorGutter.foldingControlForeground": "#c4a7e7", + "editorGutter.modifiedBackground": "#ebbcba", + "editorHint.border": "#0000", + "editorHint.foreground": "#908caa", + "editorHoverWidget.background": "#1f1d2e", + "editorHoverWidget.border": "#6e6a8680", + "editorHoverWidget.foreground": "#908caa", + "editorHoverWidget.highlightForeground": "#e0def4", + "editorHoverWidget.statusBarBackground": "#0000", + "editorIndentGuide.activeBackground": "#6e6a86", + "editorIndentGuide.background": "#6e6a8666", + "editorInfo.border": "#26233a", + "editorInfo.foreground": "#9ccfd8", + "editorInlayHint.background": "#26233a", + "editorInlayHint.foreground": "#908caa", + "editorInlayHint.parameterBackground": "#26233a", + "editorInlayHint.parameterForeground": "#c4a7e7", + "editorInlayHint.typeBackground": "#26233a", + "editorInlayHint.typeForeground": "#9ccfd8", + "editorLightBulb.foreground": "#31748f", + "editorLightBulbAutoFix.foreground": "#ebbcba", + "editorLineNumber.activeForeground": "#e0def4", + "editorLineNumber.foreground": "#908caa", + "editorLink.activeForeground": "#ebbcba", + "editorMarkerNavigation.background": "#1f1d2e", + "editorMarkerNavigationError.background": "#1f1d2e", + "editorMarkerNavigationInfo.background": "#1f1d2e", + "editorMarkerNavigationWarning.background": "#1f1d2e", + "editorOverviewRuler.addedForeground": "#9ccfd880", + "editorOverviewRuler.background": "#191724", + "editorOverviewRuler.border": "#6e6a8666", + "editorOverviewRuler.bracketMatchForeground": "#908caa", + "editorOverviewRuler.commonContentForeground": "#6e6a861a", + "editorOverviewRuler.currentContentForeground": "#6e6a8633", + "editorOverviewRuler.deletedForeground": "#eb6f9280", + "editorOverviewRuler.errorForeground": "#eb6f9280", + "editorOverviewRuler.findMatchForeground": "#6e6a8666", + "editorOverviewRuler.incomingContentForeground": "#c4a7e780", + "editorOverviewRuler.infoForeground": "#9ccfd880", + "editorOverviewRuler.modifiedForeground": "#ebbcba80", + "editorOverviewRuler.rangeHighlightForeground": "#6e6a8666", + "editorOverviewRuler.selectionHighlightForeground": "#6e6a8666", + "editorOverviewRuler.warningForeground": "#f6c17780", + "editorOverviewRuler.wordHighlightForeground": "#6e6a8633", + "editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8666", + "editorPane.background": "#0000", + "editorRuler.foreground": "#6e6a8666", + "editorSuggestWidget.background": "#1f1d2e", + "editorSuggestWidget.border": "#0000", + "editorSuggestWidget.focusHighlightForeground": "#ebbcba", + "editorSuggestWidget.foreground": "#908caa", + "editorSuggestWidget.highlightForeground": "#ebbcba", + "editorSuggestWidget.selectedBackground": "#6e6a8633", + "editorSuggestWidget.selectedForeground": "#e0def4", + "editorSuggestWidget.selectedIconForeground": "#e0def4", + "editorUnnecessaryCode.border": "#0000", + "editorUnnecessaryCode.opacity": "#00000080", + "editorWarning.border": "#0000", + "editorWarning.foreground": "#f6c177", + "editorWhitespace.foreground": "#6e6a86", + "editorWidget.background": "#1f1d2e", + "editorWidget.border": "#26233a", + "editorWidget.foreground": "#908caa", + "editorWidget.resizeBorder": "#6e6a86", + "errorForeground": "#eb6f92", + "extensionBadge.remoteBackground": "#c4a7e7", + "extensionBadge.remoteForeground": "#191724", + "extensionButton.prominentBackground": "#ebbcba", + "extensionButton.prominentForeground": "#191724", + "extensionButton.prominentHoverBackground": "#ebbcbae6", + "extensionIcon.starForeground": "#ebbcba", + "extensionIcon.verifiedForeground": "#c4a7e7", + "focusBorder": "#6e6a8633", + "foreground": "#e0def4", + "gitDecoration.addedResourceForeground": "#9ccfd8", + "gitDecoration.conflictingResourceForeground": "#eb6f92", + "gitDecoration.deletedResourceForeground": "#908caa", + "gitDecoration.ignoredResourceForeground": "#6e6a86", + "gitDecoration.modifiedResourceForeground": "#ebbcba", + "gitDecoration.renamedResourceForeground": "#31748f", + "gitDecoration.stageDeletedResourceForeground": "#eb6f92", + "gitDecoration.stageModifiedResourceForeground": "#c4a7e7", + "gitDecoration.submoduleResourceForeground": "#f6c177", + "gitDecoration.untrackedResourceForeground": "#f6c177", + "icon.foreground": "#908caa", + "input.background": "#26233a80", + "input.border": "#6e6a8633", + "input.foreground": "#e0def4", + "input.placeholderForeground": "#908caa", + "inputOption.activeBackground": "#ebbcba", + "inputOption.activeBorder": "#0000", + "inputOption.activeForeground": "#191724", + "inputValidation.errorBackground": "#1f1d2e", + "inputValidation.errorBorder": "#6e6a8666", + "inputValidation.errorForeground": "#eb6f92", + "inputValidation.infoBackground": "#1f1d2e", + "inputValidation.infoBorder": "#6e6a8666", + "inputValidation.infoForeground": "#9ccfd8", + "inputValidation.warningBackground": "#1f1d2e", + "inputValidation.warningBorder": "#6e6a8666", + "inputValidation.warningForeground": "#9ccfd880", + "keybindingLabel.background": "#26233a", + "keybindingLabel.border": "#6e6a8666", + "keybindingLabel.bottomBorder": "#6e6a8666", + "keybindingLabel.foreground": "#c4a7e7", + "keybindingTable.headerBackground": "#26233a", + "keybindingTable.rowsBackground": "#1f1d2e", + "list.activeSelectionBackground": "#6e6a8633", + "list.activeSelectionForeground": "#e0def4", + "list.activeSelectionIconForeground": "#e0def4", + "list.deemphasizedForeground": "#908caa", + "list.dropBackground": "#1f1d2e", + "list.errorForeground": "#eb6f92", + "list.filterMatchBackground": "#1f1d2e", + "list.filterMatchBorder": "#ebbcba", + "list.focusBackground": "#6e6a8666", + "list.focusForeground": "#e0def4", + "list.focusOutline": "#6e6a8633", + "list.highlightForeground": "#ebbcba", + "list.hoverBackground": "#6e6a861a", + "list.hoverForeground": "#e0def4", + "list.inactiveFocusBackground": "#6e6a861a", + "list.inactiveSelectionBackground": "#1f1d2e", + "list.inactiveSelectionForeground": "#e0def4", + "list.inactiveSelectionIconForeground": "#908caa", + "list.invalidItemForeground": "#eb6f92", + "list.warningForeground": "#f6c177", + "listFilterWidget.background": "#1f1d2e", + "listFilterWidget.noMatchesOutline": "#eb6f92", + "listFilterWidget.outline": "#26233a", + "menu.background": "#1f1d2e", + "menu.border": "#6e6a861a", + "menu.foreground": "#e0def4", + "menu.selectionBackground": "#6e6a8633", + "menu.selectionBorder": "#26233a", + "menu.selectionForeground": "#e0def4", + "menu.separatorBackground": "#6e6a8666", + "menubar.selectionBackground": "#6e6a8633", + "menubar.selectionBorder": "#6e6a861a", + "menubar.selectionForeground": "#e0def4", + "merge.border": "#26233a", + "merge.commonContentBackground": "#6e6a8633", + "merge.commonHeaderBackground": "#6e6a8633", + "merge.currentContentBackground": "#f6c17780", + "merge.currentHeaderBackground": "#f6c17780", + "merge.incomingContentBackground": "#9ccfd880", + "merge.incomingHeaderBackground": "#9ccfd880", + "minimap.background": "#1f1d2e", + "minimap.errorHighlight": "#eb6f9280", + "minimap.findMatchHighlight": "#6e6a8633", + "minimap.selectionHighlight": "#6e6a8633", + "minimap.warningHighlight": "#f6c17780", + "minimapGutter.addedBackground": "#9ccfd8", + "minimapGutter.deletedBackground": "#eb6f92", + "minimapGutter.modifiedBackground": "#ebbcba", + "minimapSlider.activeBackground": "#6e6a8666", + "minimapSlider.background": "#6e6a8633", + "minimapSlider.hoverBackground": "#6e6a8633", + "notificationCenter.border": "#6e6a8633", + "notificationCenterHeader.background": "#1f1d2e", + "notificationCenterHeader.foreground": "#908caa", + "notificationLink.foreground": "#c4a7e7", + "notifications.background": "#1f1d2e", + "notifications.border": "#6e6a8633", + "notifications.foreground": "#e0def4", + "notificationsErrorIcon.foreground": "#eb6f92", + "notificationsInfoIcon.foreground": "#9ccfd8", + "notificationsWarningIcon.foreground": "#f6c177", + "notificationToast.border": "#6e6a8633", + "panel.background": "#1f1d2e", + "panel.border": "#0000", + "panel.dropBorder": "#26233a", + "panelInput.border": "#1f1d2e", + "panelSection.dropBackground": "#6e6a8633", + "panelSectionHeader.background": "#1f1d2e", + "panelSectionHeader.foreground": "#e0def4", + "panelTitle.activeBorder": "#6e6a8666", + "panelTitle.activeForeground": "#e0def4", + "panelTitle.inactiveForeground": "#908caa", + "peekView.border": "#26233a", + "peekViewEditor.background": "#1f1d2e", + "peekViewEditor.matchHighlightBackground": "#6e6a8666", + "peekViewResult.background": "#1f1d2e", + "peekViewResult.fileForeground": "#908caa", + "peekViewResult.lineForeground": "#908caa", + "peekViewResult.matchHighlightBackground": "#6e6a8666", + "peekViewResult.selectionBackground": "#6e6a8633", + "peekViewResult.selectionForeground": "#e0def4", + "peekViewTitle.background": "#26233a", + "peekViewTitleDescription.foreground": "#908caa", + "pickerGroup.border": "#6e6a8666", + "pickerGroup.foreground": "#c4a7e7", + "ports.iconRunningProcessForeground": "#ebbcba", + "problemsErrorIcon.foreground": "#eb6f92", + "problemsInfoIcon.foreground": "#9ccfd8", + "problemsWarningIcon.foreground": "#f6c177", + "progressBar.background": "#ebbcba", + "quickInput.background": "#1f1d2e", + "quickInput.foreground": "#908caa", + "quickInputList.focusBackground": "#6e6a8633", + "quickInputList.focusForeground": "#e0def4", + "quickInputList.focusIconForeground": "#e0def4", + "scrollbar.shadow": "#0000", + "scrollbarSlider.activeBackground": "#6e6a8666", + "scrollbarSlider.background": "#6e6a861a", + "scrollbarSlider.hoverBackground": "#6e6a8633", + "searchEditor.findMatchBackground": "#6e6a8633", + "selection.background": "#6e6a8666", + "settings.focusedRowBackground": "#1f1d2e", + "settings.headerForeground": "#e0def4", + "settings.modifiedItemIndicator": "#ebbcba", + "settings.focusedRowBorder": "#6e6a8633", + "settings.rowHoverBackground": "#1f1d2e", + "sideBar.background": "#191724", + "sideBar.dropBackground": "#1f1d2e", + "sideBar.foreground": "#908caa", + "sideBarSectionHeader.background": "#0000", + "sideBarSectionHeader.border": "#6e6a8633", + "statusBar.background": "#191724", + "statusBar.debuggingBackground": "#c4a7e7", + "statusBar.debuggingForeground": "#191724", + "statusBar.foreground": "#908caa", + "statusBar.noFolderBackground": "#191724", + "statusBar.noFolderForeground": "#908caa", + "statusBarItem.activeBackground": "#6e6a8666", + "statusBarItem.hoverBackground": "#6e6a8633", + "statusBarItem.prominentBackground": "#26233a", + "statusBarItem.prominentForeground": "#e0def4", + "statusBarItem.prominentHoverBackground": "#6e6a8633", + "statusBarItem.remoteBackground": "#191724", + "statusBarItem.remoteForeground": "#f6c177", + "statusBarItem.errorBackground": "#191724", + "statusBarItem.errorForeground": "#eb6f92", + "symbolIcon.arrayForeground": "#908caa", + "symbolIcon.classForeground": "#908caa", + "symbolIcon.colorForeground": "#908caa", + "symbolIcon.constantForeground": "#908caa", + "symbolIcon.constructorForeground": "#908caa", + "symbolIcon.enumeratorForeground": "#908caa", + "symbolIcon.enumeratorMemberForeground": "#908caa", + "symbolIcon.eventForeground": "#908caa", + "symbolIcon.fieldForeground": "#908caa", + "symbolIcon.fileForeground": "#908caa", + "symbolIcon.folderForeground": "#908caa", + "symbolIcon.functionForeground": "#908caa", + "symbolIcon.interfaceForeground": "#908caa", + "symbolIcon.keyForeground": "#908caa", + "symbolIcon.keywordForeground": "#908caa", + "symbolIcon.methodForeground": "#908caa", + "symbolIcon.moduleForeground": "#908caa", + "symbolIcon.namespaceForeground": "#908caa", + "symbolIcon.nullForeground": "#908caa", + "symbolIcon.numberForeground": "#908caa", + "symbolIcon.objectForeground": "#908caa", + "symbolIcon.operatorForeground": "#908caa", + "symbolIcon.packageForeground": "#908caa", + "symbolIcon.propertyForeground": "#908caa", + "symbolIcon.referenceForeground": "#908caa", + "symbolIcon.snippetForeground": "#908caa", + "symbolIcon.stringForeground": "#908caa", + "symbolIcon.structForeground": "#908caa", + "symbolIcon.textForeground": "#908caa", + "symbolIcon.typeParameterForeground": "#908caa", + "symbolIcon.unitForeground": "#908caa", + "symbolIcon.variableForeground": "#908caa", + "tab.activeBackground": "#6e6a861a", + "tab.activeForeground": "#e0def4", + "tab.activeModifiedBorder": "#9ccfd8", + "tab.border": "#0000", + "tab.hoverBackground": "#6e6a8633", + "tab.inactiveBackground": "#0000", + "tab.inactiveForeground": "#908caa", + "tab.inactiveModifiedBorder": "#9ccfd880", + "tab.lastPinnedBorder": "#6e6a86", + "tab.unfocusedActiveBackground": "#0000", + "tab.unfocusedHoverBackground": "#0000", + "tab.unfocusedInactiveBackground": "#0000", + "tab.unfocusedInactiveModifiedBorder": "#9ccfd880", + "terminal.ansiBlack": "#26233a", + "terminal.ansiBlue": "#9ccfd8", + "terminal.ansiBrightBlack": "#908caa", + "terminal.ansiBrightBlue": "#9ccfd8", + "terminal.ansiBrightCyan": "#ebbcba", + "terminal.ansiBrightGreen": "#31748f", + "terminal.ansiBrightMagenta": "#c4a7e7", + "terminal.ansiBrightRed": "#eb6f92", + "terminal.ansiBrightWhite": "#e0def4", + "terminal.ansiBrightYellow": "#f6c177", + "terminal.ansiCyan": "#ebbcba", + "terminal.ansiGreen": "#31748f", + "terminal.ansiMagenta": "#c4a7e7", + "terminal.ansiRed": "#eb6f92", + "terminal.ansiWhite": "#e0def4", + "terminal.ansiYellow": "#f6c177", + "terminal.dropBackground": "#6e6a8633", + "terminal.foreground": "#e0def4", + "terminal.selectionBackground": "#6e6a8633", + "terminal.tab.activeBorder": "#e0def4", + "terminalCursor.background": "#e0def4", + "terminalCursor.foreground": "#6e6a86", + "textBlockQuote.background": "#1f1d2e", + "textBlockQuote.border": "#6e6a8633", + "textCodeBlock.background": "#1f1d2e", + "textLink.activeForeground": "#c4a7e7e6", + "textLink.foreground": "#c4a7e7", + "textPreformat.foreground": "#f6c177", + "textSeparator.foreground": "#908caa", + "titleBar.activeBackground": "#191724", + "titleBar.activeForeground": "#908caa", + "titleBar.inactiveBackground": "#1f1d2e", + "titleBar.inactiveForeground": "#908caa", + "toolbar.activeBackground": "#6e6a8666", + "toolbar.hoverBackground": "#6e6a8633", + "tree.indentGuidesStroke": "#908caa", + "walkThrough.embeddedEditorBackground": "#191724", + "welcomePage.background": "#191724", + "welcomePage.buttonBackground": "#1f1d2e", + "welcomePage.buttonHoverBackground": "#26233a", + "widget.shadow": "#0101011a", + "window.activeBorder": "#1f1d2e", + "window.inactiveBorder": "#1f1d2e" + } +} diff --git a/src/node_requires/monaco-themes/RosePineDawn.json b/src/node_requires/monaco-themes/RosePineDawn.json new file mode 100644 index 000000000..cad06df06 --- /dev/null +++ b/src/node_requires/monaco-themes/RosePineDawn.json @@ -0,0 +1,665 @@ +{ + "base": "vs", + "inherit": true, + "rules": [ + { + "background": "#faf4ed", + "foreground": "#575279", + "token": "" + }, + + { + "foreground": "#907aa9", + "token": "pointsOfInterest" + }, + + { + "foreground": "#b4637a", + "token": "invalid" + }, + { + "fontStyle": "italic", + "token": "emphasis" + }, + { + "fontStyle": "bold", + "token": "strong" + }, + + { + "foreground": "#575279", + "token": "variable" + }, + { + "foreground": "#575279", + "token": "variable.predefined" + }, + { + "foreground": "#d7827e", + "token": "constant" + }, + { + "foreground": "#9893a5", + "token": "comment" + }, + { + "foreground": "#d7827e", + "token": "number" + }, + { + "foreground": "#d7827e", + "token": "number.hex" + }, + { + "foreground": "#ea9d34", + "token": "regexp" + }, + { + "foreground": "#9893a5", + "token": "annotation" + }, + { + "foreground": "#575279", + "token": "type" + }, + + { + "foreground": "#797593", + "token": "delimiter" + }, + { + "foreground": "#797593", + "token": "delimiter.html" + }, + { + "foreground": "#797593", + "token": "delimiter.xml" + }, + + { + "foreground": "#56949f", + "token": "tag" + }, + { + "foreground": "#56949f", + "token": "tag.id.jade" + }, + { + "foreground": "#56949f", + "token": "tag.class.jade" + }, + { + "foreground": "#56949f", + "token": "meta.scss" + }, + { + "foreground": "#56949f", + "token": "metatag" + }, + { + "foreground": "#56949f", + "token": "metatag.content.html" + }, + { + "foreground": "#56949f", + "token": "metatag.html" + }, + { + "foreground": "#56949f", + "token": "metatag.xml" + }, + { + "foreground": "#56949f", + "token": "metatag.php" + }, + { + "foreground": "#56949f", + "token": "key" + }, + { + "foreground": "#56949f", + "token": "string.key.json" + }, + { + "foreground": "#ea9d34", + "token": "string.value.json" + }, + + { + "foreground": "#907aa9", + "token": "attribute.name" + }, + { + "foreground": "#ea9d34", + "token": "attribute.value" + }, + { + "foreground": "#ea9d34", + "token": "attribute.value.number" + }, + { + "foreground": "#ea9d34", + "token": "attribute.value.unit" + }, + { + "foreground": "#ea9d34", + "token": "attribute.value.html" + }, + { + "foreground": "#ea9d34", + "token": "attribute.value.xml" + }, + + { + "foreground": "#ea9d34", + "token": "string" + }, + { + "foreground": "#ea9d34", + "token": "string.html" + }, + { + "foreground": "#ea9d34", + "token": "string.sql" + }, + { + "foreground": "#ea9d34", + "token": "string.yaml" + }, + + { + "foreground": "#286983", + "token": "keyword" + }, + { + "foreground": "#286983", + "token": "keyword.json" + }, + { + "foreground": "#286983", + "token": "keyword.flow" + }, + { + "foreground": "#286983", + "token": "keyword.flow.scss" + }, + + { + "foreground": "#797593", + "token": "operator.scss" + }, + { + "foreground": "#797593", + "token": "operator.sql" + }, + { + "foreground": "#797593", + "token": "operator.swift" + }, + { + "foreground": "#797593", + "token": "predefined.sql" + }, + + { + "foreground": "#d7827e", + "token": "identifier" + } + ], + "colors": { + "activityBar.activeBorder": "#575279", + "activityBar.background": "#faf4ed", + "activityBar.dropBorder": "#f2e9e1", + "activityBar.foreground": "#575279", + "activityBar.inactiveForeground": "#797593", + "activityBarBadge.background": "#d7827e", + "activityBarBadge.foreground": "#faf4ed", + "badge.background": "#d7827e", + "badge.foreground": "#faf4ed", + "banner.background": "#fffaf3", + "banner.foreground": "#575279", + "banner.iconForeground": "#797593", + "breadcrumb.activeSelectionForeground": "#d7827e", + "breadcrumb.background": "#faf4ed", + "breadcrumb.focusForeground": "#797593", + "breadcrumb.foreground": "#9893a5", + "breadcrumbPicker.background": "#fffaf3", + "button.background": "#d7827e", + "button.foreground": "#faf4ed", + "button.hoverBackground": "#d7827ee6", + "button.secondaryBackground": "#fffaf3", + "button.secondaryForeground": "#575279", + "button.secondaryHoverBackground": "#f2e9e1", + "charts.blue": "#56949f", + "charts.foreground": "#575279", + "charts.green": "#286983", + "charts.lines": "#797593", + "charts.orange": "#d7827e", + "charts.purple": "#907aa9", + "charts.red": "#b4637a", + "charts.yellow": "#ea9d34", + "checkbox.background": "#fffaf3", + "checkbox.border": "#6e6a8614", + "checkbox.foreground": "#575279", + "debugExceptionWidget.background": "#fffaf3", + "debugExceptionWidget.border": "#6e6a8614", + "debugIcon.breakpointCurrentStackframeForeground": "#797593", + "debugIcon.breakpointDisabledForeground": "#797593", + "debugIcon.breakpointForeground": "#797593", + "debugIcon.breakpointStackframeForeground": "#797593", + "debugIcon.breakpointUnverifiedForeground": "#797593", + "debugIcon.continueForeground": "#797593", + "debugIcon.disconnectForeground": "#797593", + "debugIcon.pauseForeground": "#797593", + "debugIcon.restartForeground": "#797593", + "debugIcon.startForeground": "#797593", + "debugIcon.stepBackForeground": "#797593", + "debugIcon.stepIntoForeground": "#797593", + "debugIcon.stepOutForeground": "#797593", + "debugIcon.stepOverForeground": "#797593", + "debugIcon.stopForeground": "#b4637a", + "debugToolBar.background": "#fffaf3", + "debugToolBar.border": "#f2e9e1", + "descriptionForeground": "#797593", + "diffEditor.border": "#f2e9e1", + "diffEditor.diagonalFill": "#6e6a8626", + "diffEditor.insertedTextBackground": "#56949f26", + "diffEditor.removedTextBackground": "#b4637a26", + "diffEditorOverview.insertedForeground": "#56949f80", + "diffEditorOverview.removedForeground": "#b4637a80", + "dropdown.background": "#fffaf3", + "dropdown.border": "#6e6a8614", + "dropdown.foreground": "#575279", + "dropdown.listBackground": "#fffaf3", + "editor.background": "#faf4ed", + "editor.findMatchBackground": "#6e6a8626", + "editor.findMatchHighlightBackground": "#6e6a8626", + "editor.findRangeHighlightBackground": "#6e6a8626", + "editor.findRangeHighlightBorder": "#0000", + "editor.focusedStackFrameHighlightBackground": "#6e6a8614", + "editor.foldBackground": "#fffaf3", + "editor.foreground": "#575279", + "editor.hoverHighlightBackground": "#0000", + "editor.inactiveSelectionBackground": "#6e6a860d", + "editor.inlineValuesBackground": "#0000", + "editor.inlineValuesForeground": "#797593", + "editor.lineHighlightBackground": "#6e6a860d", + "editor.lineHighlightBorder": "#0000", + "editor.linkedEditingBackground": "#fffaf3", + "editor.rangeHighlightBackground": "#6e6a860d", + "editor.rangeHighlightBorder": "#0000", + "editor.selectionBackground": "#6e6a8614", + "editor.selectionForeground": "#575279", + "editor.selectionHighlightBackground": "#6e6a8614", + "editor.selectionHighlightBorder": "#0000", + "editor.snippetFinalTabstopHighlightBackground": "#6e6a8614", + "editor.snippetFinalTabstopHighlightBorder": "#fffaf3", + "editor.snippetTabstopHighlightBackground": "#6e6a8614", + "editor.snippetTabstopHighlightBorder": "#fffaf3", + "editor.stackFrameHighlightBackground": "#6e6a8614", + "editor.symbolHighlightBackground": "#6e6a8614", + "editor.symbolHighlightBorder": "#0000", + "editor.wordHighlightBackground": "#6e6a8614", + "editor.wordHighlightBorder": "#0000", + "editor.wordHighlightStrongBackground": "#6e6a8614", + "editor.wordHighlightStrongBorder": "#6e6a8614", + "editorBracketHighlight.foreground1": "#b4637a80", + "editorBracketHighlight.foreground2": "#28698380", + "editorBracketHighlight.foreground3": "#ea9d3480", + "editorBracketHighlight.foreground4": "#56949f80", + "editorBracketHighlight.foreground5": "#d7827e80", + "editorBracketHighlight.foreground6": "#907aa980", + "editorBracketMatch.background": "#0000", + "editorBracketMatch.border": "#797593", + "editorBracketPairGuide.activeBackground1": "#286983", + "editorBracketPairGuide.activeBackground2": "#d7827e", + "editorBracketPairGuide.activeBackground3": "#907aa9", + "editorBracketPairGuide.activeBackground4": "#56949f", + "editorBracketPairGuide.activeBackground5": "#ea9d34", + "editorBracketPairGuide.activeBackground6": "#b4637a", + "editorBracketPairGuide.background1": "#28698380", + "editorBracketPairGuide.background2": "#d7827e80", + "editorBracketPairGuide.background3": "#907aa980", + "editorBracketPairGuide.background4": "#56949f80", + "editorBracketPairGuide.background5": "#ea9d3480", + "editorBracketPairGuide.background6": "#b4637a80", + "editorCodeLens.foreground": "#d7827e", + "editorCursor.background": "#575279", + "editorCursor.foreground": "#9893a5", + "editorError.border": "#0000", + "editorError.foreground": "#b4637a", + "editorGhostText.foreground": "#797593", + "editorGroup.border": "#0000", + "editorGroup.dropBackground": "#fffaf3", + "editorGroup.emptyBackground": "#0000", + "editorGroup.focusedEmptyBorder": "#0000", + "editorGroupHeader.noTabsBackground": "#0000", + "editorGroupHeader.tabsBackground": "#0000", + "editorGroupHeader.tabsBorder": "#0000", + "editorGutter.addedBackground": "#56949f", + "editorGutter.background": "#0000", + "editorGutter.commentRangeForeground": "#797593", + "editorGutter.deletedBackground": "#b4637a", + "editorGutter.foldingControlForeground": "#907aa9", + "editorGutter.modifiedBackground": "#d7827e", + "editorHint.border": "#0000", + "editorHint.foreground": "#797593", + "editorHoverWidget.background": "#fffaf3", + "editorHoverWidget.border": "#9893a580", + "editorHoverWidget.foreground": "#797593", + "editorHoverWidget.highlightForeground": "#575279", + "editorHoverWidget.statusBarBackground": "#0000", + "editorIndentGuide.activeBackground": "#9893a5", + "editorIndentGuide.background": "#6e6a8626", + "editorInfo.border": "#f2e9e1", + "editorInfo.foreground": "#56949f", + "editorInlayHint.background": "#f2e9e1", + "editorInlayHint.foreground": "#797593", + "editorInlayHint.parameterBackground": "#f2e9e1", + "editorInlayHint.parameterForeground": "#907aa9", + "editorInlayHint.typeBackground": "#f2e9e1", + "editorInlayHint.typeForeground": "#56949f", + "editorLightBulb.foreground": "#286983", + "editorLightBulbAutoFix.foreground": "#d7827e", + "editorLineNumber.activeForeground": "#575279", + "editorLineNumber.foreground": "#797593", + "editorLink.activeForeground": "#d7827e", + "editorMarkerNavigation.background": "#fffaf3", + "editorMarkerNavigationError.background": "#fffaf3", + "editorMarkerNavigationInfo.background": "#fffaf3", + "editorMarkerNavigationWarning.background": "#fffaf3", + "editorOverviewRuler.addedForeground": "#56949f80", + "editorOverviewRuler.background": "#faf4ed", + "editorOverviewRuler.border": "#6e6a8626", + "editorOverviewRuler.bracketMatchForeground": "#797593", + "editorOverviewRuler.commonContentForeground": "#6e6a860d", + "editorOverviewRuler.currentContentForeground": "#6e6a8614", + "editorOverviewRuler.deletedForeground": "#b4637a80", + "editorOverviewRuler.errorForeground": "#b4637a80", + "editorOverviewRuler.findMatchForeground": "#6e6a8626", + "editorOverviewRuler.incomingContentForeground": "#907aa980", + "editorOverviewRuler.infoForeground": "#56949f80", + "editorOverviewRuler.modifiedForeground": "#d7827e80", + "editorOverviewRuler.rangeHighlightForeground": "#6e6a8626", + "editorOverviewRuler.selectionHighlightForeground": "#6e6a8626", + "editorOverviewRuler.warningForeground": "#ea9d3480", + "editorOverviewRuler.wordHighlightForeground": "#6e6a8614", + "editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8626", + "editorPane.background": "#0000", + "editorRuler.foreground": "#6e6a8626", + "editorSuggestWidget.background": "#fffaf3", + "editorSuggestWidget.border": "#0000", + "editorSuggestWidget.focusHighlightForeground": "#d7827e", + "editorSuggestWidget.foreground": "#797593", + "editorSuggestWidget.highlightForeground": "#d7827e", + "editorSuggestWidget.selectedBackground": "#6e6a8614", + "editorSuggestWidget.selectedForeground": "#575279", + "editorSuggestWidget.selectedIconForeground": "#575279", + "editorUnnecessaryCode.border": "#0000", + "editorUnnecessaryCode.opacity": "#00000080", + "editorWarning.border": "#0000", + "editorWarning.foreground": "#ea9d34", + "editorWhitespace.foreground": "#9893a5", + "editorWidget.background": "#fffaf3", + "editorWidget.border": "#f2e9e1", + "editorWidget.foreground": "#797593", + "editorWidget.resizeBorder": "#9893a5", + "errorForeground": "#b4637a", + "extensionBadge.remoteBackground": "#907aa9", + "extensionBadge.remoteForeground": "#faf4ed", + "extensionButton.prominentBackground": "#d7827e", + "extensionButton.prominentForeground": "#faf4ed", + "extensionButton.prominentHoverBackground": "#d7827ee6", + "extensionIcon.starForeground": "#d7827e", + "extensionIcon.verifiedForeground": "#907aa9", + "focusBorder": "#6e6a8614", + "foreground": "#575279", + "gitDecoration.addedResourceForeground": "#56949f", + "gitDecoration.conflictingResourceForeground": "#b4637a", + "gitDecoration.deletedResourceForeground": "#797593", + "gitDecoration.ignoredResourceForeground": "#9893a5", + "gitDecoration.modifiedResourceForeground": "#d7827e", + "gitDecoration.renamedResourceForeground": "#286983", + "gitDecoration.stageDeletedResourceForeground": "#b4637a", + "gitDecoration.stageModifiedResourceForeground": "#907aa9", + "gitDecoration.submoduleResourceForeground": "#ea9d34", + "gitDecoration.untrackedResourceForeground": "#ea9d34", + "icon.foreground": "#797593", + "input.background": "#f2e9e180", + "input.border": "#6e6a8614", + "input.foreground": "#575279", + "input.placeholderForeground": "#797593", + "inputOption.activeBackground": "#d7827e", + "inputOption.activeBorder": "#0000", + "inputOption.activeForeground": "#faf4ed", + "inputValidation.errorBackground": "#fffaf3", + "inputValidation.errorBorder": "#6e6a8626", + "inputValidation.errorForeground": "#b4637a", + "inputValidation.infoBackground": "#fffaf3", + "inputValidation.infoBorder": "#6e6a8626", + "inputValidation.infoForeground": "#56949f", + "inputValidation.warningBackground": "#fffaf3", + "inputValidation.warningBorder": "#6e6a8626", + "inputValidation.warningForeground": "#56949f80", + "keybindingLabel.background": "#f2e9e1", + "keybindingLabel.border": "#6e6a8626", + "keybindingLabel.bottomBorder": "#6e6a8626", + "keybindingLabel.foreground": "#907aa9", + "keybindingTable.headerBackground": "#f2e9e1", + "keybindingTable.rowsBackground": "#fffaf3", + "list.activeSelectionBackground": "#6e6a8614", + "list.activeSelectionForeground": "#575279", + "list.activeSelectionIconForeground": "#575279", + "list.deemphasizedForeground": "#797593", + "list.dropBackground": "#fffaf3", + "list.errorForeground": "#b4637a", + "list.filterMatchBackground": "#fffaf3", + "list.filterMatchBorder": "#d7827e", + "list.focusBackground": "#6e6a8626", + "list.focusForeground": "#575279", + "list.focusOutline": "#6e6a8614", + "list.highlightForeground": "#d7827e", + "list.hoverBackground": "#6e6a860d", + "list.hoverForeground": "#575279", + "list.inactiveFocusBackground": "#6e6a860d", + "list.inactiveSelectionBackground": "#fffaf3", + "list.inactiveSelectionForeground": "#575279", + "list.inactiveSelectionIconForeground": "#797593", + "list.invalidItemForeground": "#b4637a", + "list.warningForeground": "#ea9d34", + "listFilterWidget.background": "#fffaf3", + "listFilterWidget.noMatchesOutline": "#b4637a", + "listFilterWidget.outline": "#f2e9e1", + "menu.background": "#fffaf3", + "menu.border": "#6e6a860d", + "menu.foreground": "#575279", + "menu.selectionBackground": "#6e6a8614", + "menu.selectionBorder": "#f2e9e1", + "menu.selectionForeground": "#575279", + "menu.separatorBackground": "#6e6a8626", + "menubar.selectionBackground": "#6e6a8614", + "menubar.selectionBorder": "#6e6a860d", + "menubar.selectionForeground": "#575279", + "merge.border": "#f2e9e1", + "merge.commonContentBackground": "#6e6a8614", + "merge.commonHeaderBackground": "#6e6a8614", + "merge.currentContentBackground": "#ea9d3480", + "merge.currentHeaderBackground": "#ea9d3480", + "merge.incomingContentBackground": "#56949f80", + "merge.incomingHeaderBackground": "#56949f80", + "minimap.background": "#fffaf3", + "minimap.errorHighlight": "#b4637a80", + "minimap.findMatchHighlight": "#6e6a8614", + "minimap.selectionHighlight": "#6e6a8614", + "minimap.warningHighlight": "#ea9d3480", + "minimapGutter.addedBackground": "#56949f", + "minimapGutter.deletedBackground": "#b4637a", + "minimapGutter.modifiedBackground": "#d7827e", + "minimapSlider.activeBackground": "#6e6a8626", + "minimapSlider.background": "#6e6a8614", + "minimapSlider.hoverBackground": "#6e6a8614", + "notificationCenter.border": "#6e6a8614", + "notificationCenterHeader.background": "#fffaf3", + "notificationCenterHeader.foreground": "#797593", + "notificationLink.foreground": "#907aa9", + "notifications.background": "#fffaf3", + "notifications.border": "#6e6a8614", + "notifications.foreground": "#575279", + "notificationsErrorIcon.foreground": "#b4637a", + "notificationsInfoIcon.foreground": "#56949f", + "notificationsWarningIcon.foreground": "#ea9d34", + "notificationToast.border": "#6e6a8614", + "panel.background": "#fffaf3", + "panel.border": "#0000", + "panel.dropBorder": "#f2e9e1", + "panelInput.border": "#fffaf3", + "panelSection.dropBackground": "#6e6a8614", + "panelSectionHeader.background": "#fffaf3", + "panelSectionHeader.foreground": "#575279", + "panelTitle.activeBorder": "#6e6a8626", + "panelTitle.activeForeground": "#575279", + "panelTitle.inactiveForeground": "#797593", + "peekView.border": "#f2e9e1", + "peekViewEditor.background": "#fffaf3", + "peekViewEditor.matchHighlightBackground": "#6e6a8626", + "peekViewResult.background": "#fffaf3", + "peekViewResult.fileForeground": "#797593", + "peekViewResult.lineForeground": "#797593", + "peekViewResult.matchHighlightBackground": "#6e6a8626", + "peekViewResult.selectionBackground": "#6e6a8614", + "peekViewResult.selectionForeground": "#575279", + "peekViewTitle.background": "#f2e9e1", + "peekViewTitleDescription.foreground": "#797593", + "pickerGroup.border": "#6e6a8626", + "pickerGroup.foreground": "#907aa9", + "ports.iconRunningProcessForeground": "#d7827e", + "problemsErrorIcon.foreground": "#b4637a", + "problemsInfoIcon.foreground": "#56949f", + "problemsWarningIcon.foreground": "#ea9d34", + "progressBar.background": "#d7827e", + "quickInput.background": "#fffaf3", + "quickInput.foreground": "#797593", + "quickInputList.focusBackground": "#6e6a8614", + "quickInputList.focusForeground": "#575279", + "quickInputList.focusIconForeground": "#575279", + "scrollbar.shadow": "#0000", + "scrollbarSlider.activeBackground": "#6e6a8626", + "scrollbarSlider.background": "#6e6a860d", + "scrollbarSlider.hoverBackground": "#6e6a8614", + "searchEditor.findMatchBackground": "#6e6a8614", + "selection.background": "#6e6a8626", + "settings.focusedRowBackground": "#fffaf3", + "settings.headerForeground": "#575279", + "settings.modifiedItemIndicator": "#d7827e", + "settings.focusedRowBorder": "#6e6a8614", + "settings.rowHoverBackground": "#fffaf3", + "sideBar.background": "#faf4ed", + "sideBar.dropBackground": "#fffaf3", + "sideBar.foreground": "#797593", + "sideBarSectionHeader.background": "#0000", + "sideBarSectionHeader.border": "#6e6a8614", + "statusBar.background": "#faf4ed", + "statusBar.debuggingBackground": "#907aa9", + "statusBar.debuggingForeground": "#faf4ed", + "statusBar.foreground": "#797593", + "statusBar.noFolderBackground": "#faf4ed", + "statusBar.noFolderForeground": "#797593", + "statusBarItem.activeBackground": "#6e6a8626", + "statusBarItem.hoverBackground": "#6e6a8614", + "statusBarItem.prominentBackground": "#f2e9e1", + "statusBarItem.prominentForeground": "#575279", + "statusBarItem.prominentHoverBackground": "#6e6a8614", + "statusBarItem.remoteBackground": "#faf4ed", + "statusBarItem.remoteForeground": "#ea9d34", + "statusBarItem.errorBackground": "#faf4ed", + "statusBarItem.errorForeground": "#b4637a", + "symbolIcon.arrayForeground": "#797593", + "symbolIcon.classForeground": "#797593", + "symbolIcon.colorForeground": "#797593", + "symbolIcon.constantForeground": "#797593", + "symbolIcon.constructorForeground": "#797593", + "symbolIcon.enumeratorForeground": "#797593", + "symbolIcon.enumeratorMemberForeground": "#797593", + "symbolIcon.eventForeground": "#797593", + "symbolIcon.fieldForeground": "#797593", + "symbolIcon.fileForeground": "#797593", + "symbolIcon.folderForeground": "#797593", + "symbolIcon.functionForeground": "#797593", + "symbolIcon.interfaceForeground": "#797593", + "symbolIcon.keyForeground": "#797593", + "symbolIcon.keywordForeground": "#797593", + "symbolIcon.methodForeground": "#797593", + "symbolIcon.moduleForeground": "#797593", + "symbolIcon.namespaceForeground": "#797593", + "symbolIcon.nullForeground": "#797593", + "symbolIcon.numberForeground": "#797593", + "symbolIcon.objectForeground": "#797593", + "symbolIcon.operatorForeground": "#797593", + "symbolIcon.packageForeground": "#797593", + "symbolIcon.propertyForeground": "#797593", + "symbolIcon.referenceForeground": "#797593", + "symbolIcon.snippetForeground": "#797593", + "symbolIcon.stringForeground": "#797593", + "symbolIcon.structForeground": "#797593", + "symbolIcon.textForeground": "#797593", + "symbolIcon.typeParameterForeground": "#797593", + "symbolIcon.unitForeground": "#797593", + "symbolIcon.variableForeground": "#797593", + "tab.activeBackground": "#6e6a860d", + "tab.activeForeground": "#575279", + "tab.activeModifiedBorder": "#56949f", + "tab.border": "#0000", + "tab.hoverBackground": "#6e6a8614", + "tab.inactiveBackground": "#0000", + "tab.inactiveForeground": "#797593", + "tab.inactiveModifiedBorder": "#56949f80", + "tab.lastPinnedBorder": "#9893a5", + "tab.unfocusedActiveBackground": "#0000", + "tab.unfocusedHoverBackground": "#0000", + "tab.unfocusedInactiveBackground": "#0000", + "tab.unfocusedInactiveModifiedBorder": "#56949f80", + "terminal.ansiBlack": "#f2e9e1", + "terminal.ansiBlue": "#56949f", + "terminal.ansiBrightBlack": "#797593", + "terminal.ansiBrightBlue": "#56949f", + "terminal.ansiBrightCyan": "#d7827e", + "terminal.ansiBrightGreen": "#286983", + "terminal.ansiBrightMagenta": "#907aa9", + "terminal.ansiBrightRed": "#b4637a", + "terminal.ansiBrightWhite": "#575279", + "terminal.ansiBrightYellow": "#ea9d34", + "terminal.ansiCyan": "#d7827e", + "terminal.ansiGreen": "#286983", + "terminal.ansiMagenta": "#907aa9", + "terminal.ansiRed": "#b4637a", + "terminal.ansiWhite": "#575279", + "terminal.ansiYellow": "#ea9d34", + "terminal.dropBackground": "#6e6a8614", + "terminal.foreground": "#575279", + "terminal.selectionBackground": "#6e6a8614", + "terminal.tab.activeBorder": "#575279", + "terminalCursor.background": "#575279", + "terminalCursor.foreground": "#9893a5", + "textBlockQuote.background": "#fffaf3", + "textBlockQuote.border": "#6e6a8614", + "textCodeBlock.background": "#fffaf3", + "textLink.activeForeground": "#907aa9e6", + "textLink.foreground": "#907aa9", + "textPreformat.foreground": "#ea9d34", + "textSeparator.foreground": "#797593", + "titleBar.activeBackground": "#faf4ed", + "titleBar.activeForeground": "#797593", + "titleBar.inactiveBackground": "#fffaf3", + "titleBar.inactiveForeground": "#797593", + "toolbar.activeBackground": "#6e6a8626", + "toolbar.hoverBackground": "#6e6a8614", + "tree.indentGuidesStroke": "#797593", + "walkThrough.embeddedEditorBackground": "#faf4ed", + "welcomePage.background": "#faf4ed", + "welcomePage.buttonBackground": "#fffaf3", + "welcomePage.buttonHoverBackground": "#f2e9e1", + "widget.shadow": "#f2e9de4d", + "window.activeBorder": "#fffaf3", + "window.inactiveBorder": "#fffaf3" + } +} diff --git a/src/node_requires/monaco-themes/RosePineMoon.json b/src/node_requires/monaco-themes/RosePineMoon.json new file mode 100644 index 000000000..30f7b8558 --- /dev/null +++ b/src/node_requires/monaco-themes/RosePineMoon.json @@ -0,0 +1,665 @@ +{ + "base": "vs-dark", + "inherit": true, + "rules": [ + { + "background": "#232136", + "foreground": "#e0def4", + "token": "" + }, + + { + "foreground": "#c4a7e7", + "token": "pointsOfInterest" + }, + + { + "foreground": "#eb6f92", + "token": "invalid" + }, + { + "fontStyle": "italic", + "token": "emphasis" + }, + { + "fontStyle": "bold", + "token": "strong" + }, + + { + "foreground": "#e0def4", + "token": "variable" + }, + { + "foreground": "#e0def4", + "token": "variable.predefined" + }, + { + "foreground": "#ea9a97", + "token": "constant" + }, + { + "foreground": "#6e6a86", + "token": "comment" + }, + { + "foreground": "#ea9a97", + "token": "number" + }, + { + "foreground": "#ea9a97", + "token": "number.hex" + }, + { + "foreground": "#f6c177", + "token": "regexp" + }, + { + "foreground": "#6e6a86", + "token": "annotation" + }, + { + "foreground": "#e0def4", + "token": "type" + }, + + { + "foreground": "#908caa", + "token": "delimiter" + }, + { + "foreground": "#908caa", + "token": "delimiter.html" + }, + { + "foreground": "#908caa", + "token": "delimiter.xml" + }, + + { + "foreground": "#9ccfd8", + "token": "tag" + }, + { + "foreground": "#9ccfd8", + "token": "tag.id.jade" + }, + { + "foreground": "#9ccfd8", + "token": "tag.class.jade" + }, + { + "foreground": "#9ccfd8", + "token": "meta.scss" + }, + { + "foreground": "#9ccfd8", + "token": "metatag" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.content.html" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.html" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.xml" + }, + { + "foreground": "#9ccfd8", + "token": "metatag.php" + }, + { + "foreground": "#9ccfd8", + "token": "key" + }, + { + "foreground": "#9ccfd8", + "token": "string.key.json" + }, + { + "foreground": "#f6c177", + "token": "string.value.json" + }, + + { + "foreground": "#c4a7e7", + "token": "attribute.name" + }, + { + "foreground": "#f6c177", + "token": "attribute.value" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.number" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.unit" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.html" + }, + { + "foreground": "#f6c177", + "token": "attribute.value.xml" + }, + + { + "foreground": "#f6c177", + "token": "string" + }, + { + "foreground": "#f6c177", + "token": "string.html" + }, + { + "foreground": "#f6c177", + "token": "string.sql" + }, + { + "foreground": "#f6c177", + "token": "string.yaml" + }, + + { + "foreground": "#3e8fb0", + "token": "keyword" + }, + { + "foreground": "#3e8fb0", + "token": "keyword.json" + }, + { + "foreground": "#3e8fb0", + "token": "keyword.flow" + }, + { + "foreground": "#3e8fb0", + "token": "keyword.flow.scss" + }, + + { + "foreground": "#908caa", + "token": "operator.scss" + }, + { + "foreground": "#908caa", + "token": "operator.sql" + }, + { + "foreground": "#908caa", + "token": "operator.swift" + }, + { + "foreground": "#908caa", + "token": "predefined.sql" + }, + + { + "foreground": "#ea9a97", + "token": "identifier" + } + ], + "colors": { + "activityBar.activeBorder": "#e0def4", + "activityBar.background": "#232136", + "activityBar.dropBorder": "#393552", + "activityBar.foreground": "#e0def4", + "activityBar.inactiveForeground": "#908caa", + "activityBarBadge.background": "#ea9a97", + "activityBarBadge.foreground": "#232136", + "badge.background": "#ea9a97", + "badge.foreground": "#232136", + "banner.background": "#2a273f", + "banner.foreground": "#e0def4", + "banner.iconForeground": "#908caa", + "breadcrumb.activeSelectionForeground": "#ea9a97", + "breadcrumb.background": "#232136", + "breadcrumb.focusForeground": "#908caa", + "breadcrumb.foreground": "#6e6a86", + "breadcrumbPicker.background": "#2a273f", + "button.background": "#ea9a97", + "button.foreground": "#232136", + "button.hoverBackground": "#ea9a97e6", + "button.secondaryBackground": "#2a273f", + "button.secondaryForeground": "#e0def4", + "button.secondaryHoverBackground": "#393552", + "charts.blue": "#9ccfd8", + "charts.foreground": "#e0def4", + "charts.green": "#3e8fb0", + "charts.lines": "#908caa", + "charts.orange": "#ea9a97", + "charts.purple": "#c4a7e7", + "charts.red": "#eb6f92", + "charts.yellow": "#f6c177", + "checkbox.background": "#2a273f", + "checkbox.border": "#817c9c26", + "checkbox.foreground": "#e0def4", + "debugExceptionWidget.background": "#2a273f", + "debugExceptionWidget.border": "#817c9c26", + "debugIcon.breakpointCurrentStackframeForeground": "#908caa", + "debugIcon.breakpointDisabledForeground": "#908caa", + "debugIcon.breakpointForeground": "#908caa", + "debugIcon.breakpointStackframeForeground": "#908caa", + "debugIcon.breakpointUnverifiedForeground": "#908caa", + "debugIcon.continueForeground": "#908caa", + "debugIcon.disconnectForeground": "#908caa", + "debugIcon.pauseForeground": "#908caa", + "debugIcon.restartForeground": "#908caa", + "debugIcon.startForeground": "#908caa", + "debugIcon.stepBackForeground": "#908caa", + "debugIcon.stepIntoForeground": "#908caa", + "debugIcon.stepOutForeground": "#908caa", + "debugIcon.stepOverForeground": "#908caa", + "debugIcon.stopForeground": "#eb6f92", + "debugToolBar.background": "#2a273f", + "debugToolBar.border": "#393552", + "descriptionForeground": "#908caa", + "diffEditor.border": "#393552", + "diffEditor.diagonalFill": "#817c9c4d", + "diffEditor.insertedTextBackground": "#9ccfd826", + "diffEditor.removedTextBackground": "#eb6f9226", + "diffEditorOverview.insertedForeground": "#9ccfd880", + "diffEditorOverview.removedForeground": "#eb6f9280", + "dropdown.background": "#2a273f", + "dropdown.border": "#817c9c26", + "dropdown.foreground": "#e0def4", + "dropdown.listBackground": "#2a273f", + "editor.background": "#232136", + "editor.findMatchBackground": "#817c9c4d", + "editor.findMatchHighlightBackground": "#817c9c4d", + "editor.findRangeHighlightBackground": "#817c9c4d", + "editor.findRangeHighlightBorder": "#0000", + "editor.focusedStackFrameHighlightBackground": "#817c9c26", + "editor.foldBackground": "#2a273f", + "editor.foreground": "#e0def4", + "editor.hoverHighlightBackground": "#0000", + "editor.inactiveSelectionBackground": "#817c9c14", + "editor.inlineValuesBackground": "#0000", + "editor.inlineValuesForeground": "#908caa", + "editor.lineHighlightBackground": "#817c9c14", + "editor.lineHighlightBorder": "#0000", + "editor.linkedEditingBackground": "#2a273f", + "editor.rangeHighlightBackground": "#817c9c14", + "editor.rangeHighlightBorder": "#0000", + "editor.selectionBackground": "#817c9c26", + "editor.selectionForeground": "#e0def4", + "editor.selectionHighlightBackground": "#817c9c26", + "editor.selectionHighlightBorder": "#0000", + "editor.snippetFinalTabstopHighlightBackground": "#817c9c26", + "editor.snippetFinalTabstopHighlightBorder": "#2a273f", + "editor.snippetTabstopHighlightBackground": "#817c9c26", + "editor.snippetTabstopHighlightBorder": "#2a273f", + "editor.stackFrameHighlightBackground": "#817c9c26", + "editor.symbolHighlightBackground": "#817c9c26", + "editor.symbolHighlightBorder": "#0000", + "editor.wordHighlightBackground": "#817c9c26", + "editor.wordHighlightBorder": "#0000", + "editor.wordHighlightStrongBackground": "#817c9c26", + "editor.wordHighlightStrongBorder": "#817c9c26", + "editorBracketHighlight.foreground1": "#eb6f9280", + "editorBracketHighlight.foreground2": "#3e8fb080", + "editorBracketHighlight.foreground3": "#f6c17780", + "editorBracketHighlight.foreground4": "#9ccfd880", + "editorBracketHighlight.foreground5": "#ea9a9780", + "editorBracketHighlight.foreground6": "#c4a7e780", + "editorBracketMatch.background": "#0000", + "editorBracketMatch.border": "#908caa", + "editorBracketPairGuide.activeBackground1": "#3e8fb0", + "editorBracketPairGuide.activeBackground2": "#ea9a97", + "editorBracketPairGuide.activeBackground3": "#c4a7e7", + "editorBracketPairGuide.activeBackground4": "#9ccfd8", + "editorBracketPairGuide.activeBackground5": "#f6c177", + "editorBracketPairGuide.activeBackground6": "#eb6f92", + "editorBracketPairGuide.background1": "#3e8fb080", + "editorBracketPairGuide.background2": "#ea9a9780", + "editorBracketPairGuide.background3": "#c4a7e780", + "editorBracketPairGuide.background4": "#9ccfd880", + "editorBracketPairGuide.background5": "#f6c17780", + "editorBracketPairGuide.background6": "#eb6f9280", + "editorCodeLens.foreground": "#ea9a97", + "editorCursor.background": "#e0def4", + "editorCursor.foreground": "#6e6a86", + "editorError.border": "#0000", + "editorError.foreground": "#eb6f92", + "editorGhostText.foreground": "#908caa", + "editorGroup.border": "#0000", + "editorGroup.dropBackground": "#2a273f", + "editorGroup.emptyBackground": "#0000", + "editorGroup.focusedEmptyBorder": "#0000", + "editorGroupHeader.noTabsBackground": "#0000", + "editorGroupHeader.tabsBackground": "#0000", + "editorGroupHeader.tabsBorder": "#0000", + "editorGutter.addedBackground": "#9ccfd8", + "editorGutter.background": "#0000", + "editorGutter.commentRangeForeground": "#908caa", + "editorGutter.deletedBackground": "#eb6f92", + "editorGutter.foldingControlForeground": "#c4a7e7", + "editorGutter.modifiedBackground": "#ea9a97", + "editorHint.border": "#0000", + "editorHint.foreground": "#908caa", + "editorHoverWidget.background": "#2a273f", + "editorHoverWidget.border": "#6e6a8680", + "editorHoverWidget.foreground": "#908caa", + "editorHoverWidget.highlightForeground": "#e0def4", + "editorHoverWidget.statusBarBackground": "#0000", + "editorIndentGuide.activeBackground": "#6e6a86", + "editorIndentGuide.background": "#817c9c4d", + "editorInfo.border": "#393552", + "editorInfo.foreground": "#9ccfd8", + "editorInlayHint.background": "#393552", + "editorInlayHint.foreground": "#908caa", + "editorInlayHint.parameterBackground": "#393552", + "editorInlayHint.parameterForeground": "#c4a7e7", + "editorInlayHint.typeBackground": "#393552", + "editorInlayHint.typeForeground": "#9ccfd8", + "editorLightBulb.foreground": "#3e8fb0", + "editorLightBulbAutoFix.foreground": "#ea9a97", + "editorLineNumber.activeForeground": "#e0def4", + "editorLineNumber.foreground": "#908caa", + "editorLink.activeForeground": "#ea9a97", + "editorMarkerNavigation.background": "#2a273f", + "editorMarkerNavigationError.background": "#2a273f", + "editorMarkerNavigationInfo.background": "#2a273f", + "editorMarkerNavigationWarning.background": "#2a273f", + "editorOverviewRuler.addedForeground": "#9ccfd880", + "editorOverviewRuler.background": "#232136", + "editorOverviewRuler.border": "#817c9c4d", + "editorOverviewRuler.bracketMatchForeground": "#908caa", + "editorOverviewRuler.commonContentForeground": "#817c9c14", + "editorOverviewRuler.currentContentForeground": "#817c9c26", + "editorOverviewRuler.deletedForeground": "#eb6f9280", + "editorOverviewRuler.errorForeground": "#eb6f9280", + "editorOverviewRuler.findMatchForeground": "#817c9c4d", + "editorOverviewRuler.incomingContentForeground": "#c4a7e780", + "editorOverviewRuler.infoForeground": "#9ccfd880", + "editorOverviewRuler.modifiedForeground": "#ea9a9780", + "editorOverviewRuler.rangeHighlightForeground": "#817c9c4d", + "editorOverviewRuler.selectionHighlightForeground": "#817c9c4d", + "editorOverviewRuler.warningForeground": "#f6c17780", + "editorOverviewRuler.wordHighlightForeground": "#817c9c26", + "editorOverviewRuler.wordHighlightStrongForeground": "#817c9c4d", + "editorPane.background": "#0000", + "editorRuler.foreground": "#817c9c4d", + "editorSuggestWidget.background": "#2a273f", + "editorSuggestWidget.border": "#0000", + "editorSuggestWidget.focusHighlightForeground": "#ea9a97", + "editorSuggestWidget.foreground": "#908caa", + "editorSuggestWidget.highlightForeground": "#ea9a97", + "editorSuggestWidget.selectedBackground": "#817c9c26", + "editorSuggestWidget.selectedForeground": "#e0def4", + "editorSuggestWidget.selectedIconForeground": "#e0def4", + "editorUnnecessaryCode.border": "#0000", + "editorUnnecessaryCode.opacity": "#00000080", + "editorWarning.border": "#0000", + "editorWarning.foreground": "#f6c177", + "editorWhitespace.foreground": "#6e6a86", + "editorWidget.background": "#2a273f", + "editorWidget.border": "#393552", + "editorWidget.foreground": "#908caa", + "editorWidget.resizeBorder": "#6e6a86", + "errorForeground": "#eb6f92", + "extensionBadge.remoteBackground": "#c4a7e7", + "extensionBadge.remoteForeground": "#232136", + "extensionButton.prominentBackground": "#ea9a97", + "extensionButton.prominentForeground": "#232136", + "extensionButton.prominentHoverBackground": "#ea9a97e6", + "extensionIcon.starForeground": "#ea9a97", + "extensionIcon.verifiedForeground": "#c4a7e7", + "focusBorder": "#817c9c26", + "foreground": "#e0def4", + "gitDecoration.addedResourceForeground": "#9ccfd8", + "gitDecoration.conflictingResourceForeground": "#eb6f92", + "gitDecoration.deletedResourceForeground": "#908caa", + "gitDecoration.ignoredResourceForeground": "#6e6a86", + "gitDecoration.modifiedResourceForeground": "#ea9a97", + "gitDecoration.renamedResourceForeground": "#3e8fb0", + "gitDecoration.stageDeletedResourceForeground": "#eb6f92", + "gitDecoration.stageModifiedResourceForeground": "#c4a7e7", + "gitDecoration.submoduleResourceForeground": "#f6c177", + "gitDecoration.untrackedResourceForeground": "#f6c177", + "icon.foreground": "#908caa", + "input.background": "#39355280", + "input.border": "#817c9c26", + "input.foreground": "#e0def4", + "input.placeholderForeground": "#908caa", + "inputOption.activeBackground": "#ea9a97", + "inputOption.activeBorder": "#0000", + "inputOption.activeForeground": "#232136", + "inputValidation.errorBackground": "#2a273f", + "inputValidation.errorBorder": "#817c9c4d", + "inputValidation.errorForeground": "#eb6f92", + "inputValidation.infoBackground": "#2a273f", + "inputValidation.infoBorder": "#817c9c4d", + "inputValidation.infoForeground": "#9ccfd8", + "inputValidation.warningBackground": "#2a273f", + "inputValidation.warningBorder": "#817c9c4d", + "inputValidation.warningForeground": "#9ccfd880", + "keybindingLabel.background": "#393552", + "keybindingLabel.border": "#817c9c4d", + "keybindingLabel.bottomBorder": "#817c9c4d", + "keybindingLabel.foreground": "#c4a7e7", + "keybindingTable.headerBackground": "#393552", + "keybindingTable.rowsBackground": "#2a273f", + "list.activeSelectionBackground": "#817c9c26", + "list.activeSelectionForeground": "#e0def4", + "list.activeSelectionIconForeground": "#e0def4", + "list.deemphasizedForeground": "#908caa", + "list.dropBackground": "#2a273f", + "list.errorForeground": "#eb6f92", + "list.filterMatchBackground": "#2a273f", + "list.filterMatchBorder": "#ea9a97", + "list.focusBackground": "#817c9c4d", + "list.focusForeground": "#e0def4", + "list.focusOutline": "#817c9c26", + "list.highlightForeground": "#ea9a97", + "list.hoverBackground": "#817c9c14", + "list.hoverForeground": "#e0def4", + "list.inactiveFocusBackground": "#817c9c14", + "list.inactiveSelectionBackground": "#2a273f", + "list.inactiveSelectionForeground": "#e0def4", + "list.inactiveSelectionIconForeground": "#908caa", + "list.invalidItemForeground": "#eb6f92", + "list.warningForeground": "#f6c177", + "listFilterWidget.background": "#2a273f", + "listFilterWidget.noMatchesOutline": "#eb6f92", + "listFilterWidget.outline": "#393552", + "menu.background": "#2a273f", + "menu.border": "#817c9c14", + "menu.foreground": "#e0def4", + "menu.selectionBackground": "#817c9c26", + "menu.selectionBorder": "#393552", + "menu.selectionForeground": "#e0def4", + "menu.separatorBackground": "#817c9c4d", + "menubar.selectionBackground": "#817c9c26", + "menubar.selectionBorder": "#817c9c14", + "menubar.selectionForeground": "#e0def4", + "merge.border": "#393552", + "merge.commonContentBackground": "#817c9c26", + "merge.commonHeaderBackground": "#817c9c26", + "merge.currentContentBackground": "#f6c17780", + "merge.currentHeaderBackground": "#f6c17780", + "merge.incomingContentBackground": "#9ccfd880", + "merge.incomingHeaderBackground": "#9ccfd880", + "minimap.background": "#2a273f", + "minimap.errorHighlight": "#eb6f9280", + "minimap.findMatchHighlight": "#817c9c26", + "minimap.selectionHighlight": "#817c9c26", + "minimap.warningHighlight": "#f6c17780", + "minimapGutter.addedBackground": "#9ccfd8", + "minimapGutter.deletedBackground": "#eb6f92", + "minimapGutter.modifiedBackground": "#ea9a97", + "minimapSlider.activeBackground": "#817c9c4d", + "minimapSlider.background": "#817c9c26", + "minimapSlider.hoverBackground": "#817c9c26", + "notificationCenter.border": "#817c9c26", + "notificationCenterHeader.background": "#2a273f", + "notificationCenterHeader.foreground": "#908caa", + "notificationLink.foreground": "#c4a7e7", + "notifications.background": "#2a273f", + "notifications.border": "#817c9c26", + "notifications.foreground": "#e0def4", + "notificationsErrorIcon.foreground": "#eb6f92", + "notificationsInfoIcon.foreground": "#9ccfd8", + "notificationsWarningIcon.foreground": "#f6c177", + "notificationToast.border": "#817c9c26", + "panel.background": "#2a273f", + "panel.border": "#0000", + "panel.dropBorder": "#393552", + "panelInput.border": "#2a273f", + "panelSection.dropBackground": "#817c9c26", + "panelSectionHeader.background": "#2a273f", + "panelSectionHeader.foreground": "#e0def4", + "panelTitle.activeBorder": "#817c9c4d", + "panelTitle.activeForeground": "#e0def4", + "panelTitle.inactiveForeground": "#908caa", + "peekView.border": "#393552", + "peekViewEditor.background": "#2a273f", + "peekViewEditor.matchHighlightBackground": "#817c9c4d", + "peekViewResult.background": "#2a273f", + "peekViewResult.fileForeground": "#908caa", + "peekViewResult.lineForeground": "#908caa", + "peekViewResult.matchHighlightBackground": "#817c9c4d", + "peekViewResult.selectionBackground": "#817c9c26", + "peekViewResult.selectionForeground": "#e0def4", + "peekViewTitle.background": "#393552", + "peekViewTitleDescription.foreground": "#908caa", + "pickerGroup.border": "#817c9c4d", + "pickerGroup.foreground": "#c4a7e7", + "ports.iconRunningProcessForeground": "#ea9a97", + "problemsErrorIcon.foreground": "#eb6f92", + "problemsInfoIcon.foreground": "#9ccfd8", + "problemsWarningIcon.foreground": "#f6c177", + "progressBar.background": "#ea9a97", + "quickInput.background": "#2a273f", + "quickInput.foreground": "#908caa", + "quickInputList.focusBackground": "#817c9c26", + "quickInputList.focusForeground": "#e0def4", + "quickInputList.focusIconForeground": "#e0def4", + "scrollbar.shadow": "#0000", + "scrollbarSlider.activeBackground": "#817c9c4d", + "scrollbarSlider.background": "#817c9c14", + "scrollbarSlider.hoverBackground": "#817c9c26", + "searchEditor.findMatchBackground": "#817c9c26", + "selection.background": "#817c9c4d", + "settings.focusedRowBackground": "#2a273f", + "settings.headerForeground": "#e0def4", + "settings.modifiedItemIndicator": "#ea9a97", + "settings.focusedRowBorder": "#817c9c26", + "settings.rowHoverBackground": "#2a273f", + "sideBar.background": "#232136", + "sideBar.dropBackground": "#2a273f", + "sideBar.foreground": "#908caa", + "sideBarSectionHeader.background": "#0000", + "sideBarSectionHeader.border": "#817c9c26", + "statusBar.background": "#232136", + "statusBar.debuggingBackground": "#c4a7e7", + "statusBar.debuggingForeground": "#232136", + "statusBar.foreground": "#908caa", + "statusBar.noFolderBackground": "#232136", + "statusBar.noFolderForeground": "#908caa", + "statusBarItem.activeBackground": "#817c9c4d", + "statusBarItem.hoverBackground": "#817c9c26", + "statusBarItem.prominentBackground": "#393552", + "statusBarItem.prominentForeground": "#e0def4", + "statusBarItem.prominentHoverBackground": "#817c9c26", + "statusBarItem.remoteBackground": "#232136", + "statusBarItem.remoteForeground": "#f6c177", + "statusBarItem.errorBackground": "#232136", + "statusBarItem.errorForeground": "#eb6f92", + "symbolIcon.arrayForeground": "#908caa", + "symbolIcon.classForeground": "#908caa", + "symbolIcon.colorForeground": "#908caa", + "symbolIcon.constantForeground": "#908caa", + "symbolIcon.constructorForeground": "#908caa", + "symbolIcon.enumeratorForeground": "#908caa", + "symbolIcon.enumeratorMemberForeground": "#908caa", + "symbolIcon.eventForeground": "#908caa", + "symbolIcon.fieldForeground": "#908caa", + "symbolIcon.fileForeground": "#908caa", + "symbolIcon.folderForeground": "#908caa", + "symbolIcon.functionForeground": "#908caa", + "symbolIcon.interfaceForeground": "#908caa", + "symbolIcon.keyForeground": "#908caa", + "symbolIcon.keywordForeground": "#908caa", + "symbolIcon.methodForeground": "#908caa", + "symbolIcon.moduleForeground": "#908caa", + "symbolIcon.namespaceForeground": "#908caa", + "symbolIcon.nullForeground": "#908caa", + "symbolIcon.numberForeground": "#908caa", + "symbolIcon.objectForeground": "#908caa", + "symbolIcon.operatorForeground": "#908caa", + "symbolIcon.packageForeground": "#908caa", + "symbolIcon.propertyForeground": "#908caa", + "symbolIcon.referenceForeground": "#908caa", + "symbolIcon.snippetForeground": "#908caa", + "symbolIcon.stringForeground": "#908caa", + "symbolIcon.structForeground": "#908caa", + "symbolIcon.textForeground": "#908caa", + "symbolIcon.typeParameterForeground": "#908caa", + "symbolIcon.unitForeground": "#908caa", + "symbolIcon.variableForeground": "#908caa", + "tab.activeBackground": "#817c9c14", + "tab.activeForeground": "#e0def4", + "tab.activeModifiedBorder": "#9ccfd8", + "tab.border": "#0000", + "tab.hoverBackground": "#817c9c26", + "tab.inactiveBackground": "#0000", + "tab.inactiveForeground": "#908caa", + "tab.inactiveModifiedBorder": "#9ccfd880", + "tab.lastPinnedBorder": "#6e6a86", + "tab.unfocusedActiveBackground": "#0000", + "tab.unfocusedHoverBackground": "#0000", + "tab.unfocusedInactiveBackground": "#0000", + "tab.unfocusedInactiveModifiedBorder": "#9ccfd880", + "terminal.ansiBlack": "#393552", + "terminal.ansiBlue": "#9ccfd8", + "terminal.ansiBrightBlack": "#908caa", + "terminal.ansiBrightBlue": "#9ccfd8", + "terminal.ansiBrightCyan": "#ea9a97", + "terminal.ansiBrightGreen": "#3e8fb0", + "terminal.ansiBrightMagenta": "#c4a7e7", + "terminal.ansiBrightRed": "#eb6f92", + "terminal.ansiBrightWhite": "#e0def4", + "terminal.ansiBrightYellow": "#f6c177", + "terminal.ansiCyan": "#ea9a97", + "terminal.ansiGreen": "#3e8fb0", + "terminal.ansiMagenta": "#c4a7e7", + "terminal.ansiRed": "#eb6f92", + "terminal.ansiWhite": "#e0def4", + "terminal.ansiYellow": "#f6c177", + "terminal.dropBackground": "#817c9c26", + "terminal.foreground": "#e0def4", + "terminal.selectionBackground": "#817c9c26", + "terminal.tab.activeBorder": "#e0def4", + "terminalCursor.background": "#e0def4", + "terminalCursor.foreground": "#6e6a86", + "textBlockQuote.background": "#2a273f", + "textBlockQuote.border": "#817c9c26", + "textCodeBlock.background": "#2a273f", + "textLink.activeForeground": "#c4a7e7e6", + "textLink.foreground": "#c4a7e7", + "textPreformat.foreground": "#f6c177", + "textSeparator.foreground": "#908caa", + "titleBar.activeBackground": "#232136", + "titleBar.activeForeground": "#908caa", + "titleBar.inactiveBackground": "#2a273f", + "titleBar.inactiveForeground": "#908caa", + "toolbar.activeBackground": "#817c9c4d", + "toolbar.hoverBackground": "#817c9c26", + "tree.indentGuidesStroke": "#908caa", + "walkThrough.embeddedEditorBackground": "#232136", + "welcomePage.background": "#232136", + "welcomePage.buttonBackground": "#2a273f", + "welcomePage.buttonHoverBackground": "#393552", + "widget.shadow": "#1917244d", + "window.activeBorder": "#2a273f", + "window.inactiveBorder": "#2a273f" + } +} diff --git a/src/node_requires/resources/IScriptable.d.ts b/src/node_requires/resources/IScriptable.d.ts new file mode 100644 index 000000000..e98c9f6cf --- /dev/null +++ b/src/node_requires/resources/IScriptable.d.ts @@ -0,0 +1,13 @@ +interface IScriptableEvent { + lib: 'core' | string; + arguments: { + [key: string]: assetRef | string | number | boolean; + }; + code: string; + eventKey: string; +} + +interface IScriptable extends IAsset { + name: string; + events: IScriptableEvent[]; +} diff --git a/src/node_requires/resources/emitterTandems/index.ts b/src/node_requires/resources/emitterTandems/index.ts index 885ba209e..0237ec0ac 100644 --- a/src/node_requires/resources/emitterTandems/index.ts +++ b/src/node_requires/resources/emitterTandems/index.ts @@ -2,7 +2,7 @@ const getThumbnail = function getThumbnail(): string { return 'sparkles'; }; const getById = function getById(id: string): ITandem { - const tandem = (window as Window).currentProject.tandems.find((t: ITandem) => t.uid === id); + const tandem = (window as Window).currentProject.emitterTandems.find((t: ITandem) => t.uid === id); if (!tandem) { throw new Error(`Attempt to get a non-existent tandem with ID ${id}`); } diff --git a/src/node_requires/resources/index.ts b/src/node_requires/resources/index.ts index 5546cb1ab..652799061 100644 --- a/src/node_requires/resources/index.ts +++ b/src/node_requires/resources/index.ts @@ -1,7 +1,21 @@ -const textures = require('./textures'); -const particles = require('./particles'); +import * as textures from './textures'; +import * as emitterTandems from './emitterTandems'; +import * as fonts from './fonts'; +import * as modules from './modules'; +import * as projects from './projects'; +import * as sounds from './sounds'; +import * as rooms from './rooms'; +import * as templates from './templates'; +import * as styles from './styles'; -module.exports = { +export { textures, - particles + emitterTandems as tandems, + fonts, + modules, + projects, + sounds, + rooms, + templates, + styles }; diff --git a/src/node_requires/resources/modules/ICatmod.d.ts b/src/node_requires/resources/modules/ICatmod.d.ts index 41c81314d..6b6a8b3b4 100644 --- a/src/node_requires/resources/modules/ICatmod.d.ts +++ b/src/node_requires/resources/modules/ICatmod.d.ts @@ -72,7 +72,9 @@ declare interface ICatmodManifest { tileLayerExtends?: ICatmodField[], copyExtends?: ICatmodField[], roomExtends?: ICatmodField[], - inputMethods?: Record + inputMethods?: Record, + eventCategories?: Record, + events?: Record } declare interface ICatmod { diff --git a/src/node_requires/resources/modules/typedefs.ts b/src/node_requires/resources/modules/typedefs.ts index 7dbfd07a1..074afa003 100644 --- a/src/node_requires/resources/modules/typedefs.ts +++ b/src/node_requires/resources/modules/typedefs.ts @@ -55,7 +55,7 @@ const resetTypedefs = function resetTypedefs(): void { } }; -export = { +export { addTypedefs, removeTypedefs, loadAllTypedefs, diff --git a/src/node_requires/resources/projects/IProject.d.ts b/src/node_requires/resources/projects/IProject.d.ts index c9223a2d7..c0d420fd5 100644 --- a/src/node_requires/resources/projects/IProject.d.ts +++ b/src/node_requires/resources/projects/IProject.d.ts @@ -3,7 +3,44 @@ declare interface IProject { templates: ITemplate[]; sounds: ISound[]; rooms: IRoom[]; - tandems: ITandem[]; + emitterTandems: ITandem[]; fonts: IFont[]; + styles: IStyle[]; + settings: { + authoring: { + author: string, + site: string, + title: string + version: [number, number, number], + versionPostfix: string, + appId: string + }, + rendering: { + usePixiLegacy: boolean, + maxFPS: 60, + pixelatedrender: boolean, + highDensity: boolean, + desktopMode: 'maximized' | 'fullscreen' | 'windowed', + hideCursor: boolean, + mobileScreenOrientation: 'unspecified' | 'landscape' | 'portrait' + }, + export: { + windows: boolean, + linux: boolean, + mac: boolean, + functionWrap: boolean, + codeModifier: 'none' | 'minify' | 'obfuscate' + }, + branding: { + icon: assetRef, + /** A hex color */ + accent: string, + invertPreloaderScheme: boolean, + splashScreen: assetRef, + forceSmoothIcons: boolean, + forceSmoothSplashScreen: boolean, + hideLoadingLogo: boolean + } + }; [key: string]: any; } diff --git a/src/node_requires/resources/projects/defaultProject.js b/src/node_requires/resources/projects/defaultProject.ts similarity index 75% rename from src/node_requires/resources/projects/defaultProject.js rename to src/node_requires/resources/projects/defaultProject.ts index d41306d80..a8a23f089 100644 --- a/src/node_requires/resources/projects/defaultProject.js +++ b/src/node_requires/resources/projects/defaultProject.ts @@ -1,4 +1,4 @@ -const defaultProjectTemplate = { +const defaultProjectTemplate: IProject = { ctjsVersion: process.versions.ctjs, notes: '/* empty */', libs: { @@ -19,6 +19,7 @@ const defaultProjectTemplate = { templates: [], sounds: [], styles: [], + fonts: [], rooms: [], actions: [], emitterTandems: [], @@ -40,14 +41,17 @@ const defaultProjectTemplate = { site: '', title: '', version: [0, 0, 0], - versionPostfix: '' + versionPostfix: '', + appId: '' }, rendering: { usePixiLegacy: true, maxFPS: 60, pixelatedrender: false, highDensity: true, - desktopMode: 'maximized' + desktopMode: 'maximized', + hideCursor: false, + mobileScreenOrientation: 'unspecified' }, export: { windows: true, @@ -57,15 +61,19 @@ const defaultProjectTemplate = { codeModifier: 'none' }, branding: { - icon: -1, accent: '#446adb', // ct.js' crystal blue - invertPreloaderScheme: true + invertPreloaderScheme: true, + icon: -1, + splashScreen: -1, + forceSmoothIcons: false, + forceSmoothSplashScreen: false, + hideLoadingLogo: false } } }; module.exports = { - get() { - return JSON.parse(JSON.stringify(defaultProjectTemplate)); + get(): IProject { + return JSON.parse(JSON.stringify(defaultProjectTemplate)) as IProject; } }; diff --git a/src/node_requires/resources/projects/index.ts b/src/node_requires/resources/projects/index.ts index e28ba747e..e3d47020d 100644 --- a/src/node_requires/resources/projects/index.ts +++ b/src/node_requires/resources/projects/index.ts @@ -1,3 +1,251 @@ +import {populatePixiTextureCache, resetPixiTextureCache, setPixelart} from '../textures'; +import {loadAllTypedefs, resetTypedefs} from '../modules/typedefs'; +import {unloadAllEvents, loadAllModulesEvents} from '../../events'; +import * as path from 'path'; + +const fs = require('fs-extra'); + +// @see https://semver.org/ +const semverRegex = /(\d+)\.(\d+)\.(\d+)(-[A-Za-z.-]*(\d+)?[A-Za-z.-]*)?/; +const semverToArray = (string: string) => { + const raw = semverRegex.exec(string); + return [ + raw[1], + raw[2], + raw[3], + // -next- versions and other postfixes will count as a fourth component. + // They all will apply before regular versions + raw[4] ? raw[5] || 1 : null + ]; +}; + +interface IMigrationPlan { + version: string, + process: (project: Partial) => Promise; +} + +/** +* Applies migration scripts to older projects. +*/ +const adapter = async (project: Partial) => { + var version = semverToArray(project.ctjsVersion || '0.2.0'); + + const migrationToExecute = window.migrationProcess + // Sort all the patches chronologically + .sort((m1: IMigrationPlan, m2: IMigrationPlan) => { + const m1Version = semverToArray(m1.version); + const m2Version = semverToArray(m2.version); + + for (let i = 0; i < 4; i++) { + if (m1Version[i] < m2Version[i] || m1Version[i] === null) { + return -1; + } else if (m1Version[i] > m2Version[i]) { + return 1; + } + } + // eslint-disable-next-line no-console + console.warn(`Two equivalent versions found for migration, ${m1.version} and ${m2.version}.`); + return 0; + }) + // Throw out patches for current and previous versions + .filter((migration: IMigrationPlan) => { + const migrationVersion = semverToArray(migration.version); + for (let i = 0; i < 3; i++) { + // if any of the first three version numbers is lower than project's, + // skip the patch + if (migrationVersion[i] < version[i]) { + return false; + } + if (migrationVersion[i] > version[i]) { + return true; + } + } + // a lazy check for equal base versions + if (migrationVersion.slice(0, 3).join('.') === version.slice(0, 3).join('.')) { + // handle the case with two postfixed versions + if (migrationVersion[3] !== null && version[3] !== null) { + return migrationVersion[3] > version[3]; + } + // postfixed source, unpostfixed patch + if (migrationVersion[3] === null && version[3] !== null) { + return true; + } + return false; + } + return true; + }); + + if (migrationToExecute.length) { + // eslint-disable-next-line no-console + console.debug(`Applying migration sequence: patches ${migrationToExecute.map((m: IMigrationPlan) => m.version).join(', ')}.`); + } + for (const migration of migrationToExecute) { + // eslint-disable-next-line no-console + console.debug(`Migrating project from version ${project.ctjsVersion || '0.2.0'} to ${migration.version}`); + // We do need to apply updates in a sequence + // eslint-disable-next-line no-await-in-loop + await migration.process(project); + } + + // Unfortunately, recent versions of eslint give false positives on this line + // @see https://github.com/eslint/eslint/issues/11900 + // @see https://github.com/eslint/eslint/issues/11899 + // eslint-disable-next-line require-atomic-updates + project.ctjsVersion = process.versions.ctjs; +}; + +/** +* Opens the project and refreshes the whole app. +* +* @param {IProject} projectData Loaded JSON file, in js object form +* @returns {Promise} +*/ +const loadProject = async (projectData: IProject): Promise => { + const glob = require('../../glob'); + window.currentProject = projectData; + window.alertify.log(window.languageJSON.intro.loadingProject); + glob.modified = false; + + try { + await adapter(projectData); + fs.ensureDir(global.projdir); + fs.ensureDir(global.projdir + '/img'); + fs.ensureDir(global.projdir + '/snd'); + + const lastProjects = localStorage.lastProjects ? localStorage.lastProjects.split(';') : []; + if (lastProjects.indexOf(path.normalize(global.projdir + '.ict')) !== -1) { + lastProjects.splice(lastProjects.indexOf(path.normalize(global.projdir + '.ict')), 1); + } + lastProjects.unshift(path.normalize(global.projdir + '.ict')); + if (lastProjects.length > 15) { + lastProjects.pop(); + } + localStorage.lastProjects = lastProjects.join(';'); + + if (window.currentProject.settings.authoring.title) { + document.title = window.currentProject.settings.authoring.title + ' — ct.js'; + } + + glob.scriptTypings = {}; + for (const script of window.currentProject.scripts) { + glob.scriptTypings[script.name] = [ + monaco.languages.typescript.javascriptDefaults.addExtraLib(script.code), + monaco.languages.typescript.typescriptDefaults.addExtraLib(script.code) + ]; + } + + resetTypedefs(); + loadAllTypedefs(); + + unloadAllEvents(); + resetPixiTextureCache(); + setPixelart(projectData.settings.rendering.pixelatedrender); + await Promise.all([ + loadAllModulesEvents(), + populatePixiTextureCache(projectData) + ]); + + window.signals.trigger('projectLoaded'); + setTimeout(() => { + window.riot.update(); + }, 0); + } catch (err) { + window.alertify.alert(window.languageJSON.intro.loadingProjectError + err); + } +}; + +/** +* Checks file format and loads it +* +* @param {String} proj The path to the file. +* @returns {void} +*/ +const readProjectFile = async (proj: string) => { + const textProjData = await fs.readFile(proj, 'utf8'); + let projectData; + // Before v1.3, projects were stored in JSON format + try { + if (textProjData.indexOf('{') === 0) { // First, make a silly check for JSON files + projectData = JSON.parse(textProjData); + } else { + try { + const YAML = require('js-yaml'); + projectData = YAML.load(textProjData); + } catch (e) { + // whoopsie, wrong window + // eslint-disable-next-line no-console + console.warn(`Tried to load a file ${proj} as a YAML, but got an error (see below). Falling back to JSON.`); + console.error(e); + projectData = JSON.parse(textProjData); + } + } + } catch (e) { + window.alertify.error(e); + throw e; + } + if (!projectData) { + window.alertify.error(window.languageJSON.common.wrongFormat); + return; + } + try { + loadProject(projectData); + } catch (e) { + window.alertify.error(e); + throw e; + } +}; + +/** + * Opens a project file, checking for recovery files and asking + * a user about them if needed. + * This is the method that should be used for opening ct.js projects + * from within UI. + */ +const openProject = async (proj: string): Promise => { + if (!proj) { + const baseMessage = 'An attempt to open a project with an empty path.'; + alertify.error(baseMessage + ' See the console for the call stack.'); + const err = new Error(baseMessage); + throw err; + } + sessionStorage.projname = path.basename(proj); + global.projdir = path.dirname(proj) + path.sep + path.basename(proj, '.ict'); + + // Check for recovery files + let recoveryStat; + try { + recoveryStat = await fs.stat(proj + '.recovery'); + } catch (err) { + // no recovery file found + void 0; + } + if (recoveryStat && recoveryStat.isFile()) { + const targetStat = await fs.stat(proj); + const voc = window.languageJSON.intro.recovery; + const userResponse = await window.alertify + .okBtn(voc.loadRecovery) + .cancelBtn(voc.loadTarget) + /* {0} — target file date + {1} — target file state (newer/older) + {2} — recovery file date + {3} — recovery file state (newer/older) + */ + .confirm(voc.message + .replace('{0}', targetStat.mtime.toLocaleString()) + .replace('{1}', targetStat.mtime < recoveryStat.mtime ? voc.older : voc.newer) + .replace('{2}', recoveryStat.mtime.toLocaleString()) + .replace('{3}', recoveryStat.mtime < targetStat.mtime ? voc.older : voc.newer)); + window.alertify + .okBtn(window.languageJSON.common.ok) + .cancelBtn(window.languageJSON.common.cancel); + if (userResponse.buttonClicked === 'ok') { + return readProjectFile(proj + '.recovery'); + } + return readProjectFile(proj); + } + return readProjectFile(proj); +}; + const defaultProject = require('./defaultProject'); /** @@ -20,7 +268,8 @@ const getExamplesDir = function (): string { if (isMac) { return path.join(process.cwd(), 'examples'); } - return path.join((nw.App as any).startPath, 'examples'); + // return path.join((nw.App as any).startPath, 'examples'); + return path.join(path.dirname(process.execPath), 'examples'); } }; @@ -35,7 +284,8 @@ const getTemplatesDir = function (): string { if (isMac) { return path.join(process.cwd(), 'templates'); } - return path.join((nw.App as any).startPath, 'templates'); + // return path.join((nw.App as any).startPath, "templates"); + return path.join(path.dirname(process.execPath), 'templates'); } }; @@ -53,7 +303,7 @@ const getProjectDir = function (projPath: string): string { * @param {string} projPath * @param {boolean} [fs] Whether to return a filesystem path (true) or a URL (false; default). */ -const getProjectThumbnail = function (projPath: string, fs?: boolean) { +const getProjectThumbnail = function (projPath: string, fs?: boolean): string { const path = require('path'); projPath = getProjectDir(projPath); if (fs) { @@ -75,6 +325,7 @@ const getProjectIct = function (projPath: string): string { }; export { + openProject, defaultProject, getDefaultProjectDir, getProjectThumbnail, diff --git a/src/node_requires/resources/rooms/IRoom.d.ts b/src/node_requires/resources/rooms/IRoom.d.ts index 89904b167..8dbd837f3 100644 --- a/src/node_requires/resources/rooms/IRoom.d.ts +++ b/src/node_requires/resources/rooms/IRoom.d.ts @@ -3,52 +3,74 @@ type canvasPatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'; interface IRoomBackground { depth: number, texture: assetRef, - extends: { - parallaxX?: number, - parallaxY?: number, - shiftX?: number, - shiftY?: number, - repeat: canvasPatternRepeat - [key: string]: unknown - } + parallaxX: number, + parallaxY: number, + shiftX: number, + shiftY: number, + movementX: number, + movementY: number, + scaleX: number, + scaleY: number, + repeat: canvasPatternRepeat } interface IRoomCopy { x: number, y: number, - uid: assetRef, - tx?: number, - ty?: number, + uid: string, + scale: { + x: number, + y: number + }, + rotation?: number, + tint?: number, + opacity?: number, exts: { [key: string]: unknown - } + }, + customProperties: Record } interface ITileTemplate { x: number; y: number; + opacity: number; + tint: number; + frame: number; + scale: { + x: number, + y: number + }; + rotation: number; + texture: string; } interface ITileLayerTemplate { depth: number; - tiles: Array + tiles: Array, + extends?: Record + hidden?: boolean; } -interface IRoom extends IAsset { - // Currently just stick to the old structure - width: number, - height: number, - backgrounds: Array, - copies: Array, - tiles: Array - gridX: number, - gridY: number, - oncreate: string, - onstep: string, - ondraw: string, - onleave: string, - thumbnail: string, +interface IRoom extends IScriptable { + width: number; + height: number; + /** A CSS color */ + backgroundColor: string; + backgrounds: Array; + copies: Array; + tiles: Array; + gridX: number; + gridY: number; + diagonalGrid: boolean; + simulate: boolean; + restrictCamera?: boolean; + restrictMinX?: number; + restrictMinY?: number; + restrictMaxX?: number; + restrictMaxY?: number; + isUi: boolean; extends: { [key: string]: unknown - } + }; } diff --git a/src/node_requires/resources/rooms/defaultRoom.ts b/src/node_requires/resources/rooms/defaultRoom.ts index 493c760e1..1a1320c9d 100644 --- a/src/node_requires/resources/rooms/defaultRoom.ts +++ b/src/node_requires/resources/rooms/defaultRoom.ts @@ -8,20 +8,25 @@ const room = { onleave: '', gridX: 64, gridY: 64, + diagonalGrid: false, + simulate: true, width: 1280, - height: 720 + height: 720, + isUi: false }; const get = function (): IRoom { const uid = generateGUID(); - const newRoom = Object.assign({}, room, { + const newRoom: IRoom = Object.assign({}, room, { name: 'Room_' + uid.slice(-6), + backgroundColor: '#000000', + restrictCamera: false, backgrounds: [], copies: [], tiles: [], extends: {}, lastmod: Number(new Date()), - thumbnail: uid, + events: [], uid }); return newRoom; diff --git a/src/node_requires/resources/rooms/index.ts b/src/node_requires/resources/rooms/index.ts index b185744ef..85d9460d9 100644 --- a/src/node_requires/resources/rooms/index.ts +++ b/src/node_requires/resources/rooms/index.ts @@ -1,3 +1,5 @@ +import {outputCanvasToFile} from '../../utils/imageUtils'; + const getDefaultRoom = require('./defaultRoom').get; const fs = require('fs-extra'); const path = require('path'); @@ -31,7 +33,6 @@ const getById = getRoomFromId; * Retrieves the full path to a thumbnail of a given room. * @param {string|IRoom} room Either the id of the room, or its ct.js object * @param {boolean} [x2] If set to true, returns a 340x256 image instead of 64x64. - * (Not implemented, actually!) * @param {boolean} [fs] If set to true, returns a file system path, not a URI. * @returns {string} The full path to the thumbnail. */ @@ -44,16 +45,39 @@ const getRoomPreview = (room: assetRef | IRoom, x2: boolean, fs: boolean): strin room = getRoomFromId(room); } if (fs) { - return `${(global as any).projdir}/img/r${room.thumbnail}.png`; + return `${(global as any).projdir}/img/r${room.uid}${x2 ? '@r' : ''}.png`; } - return `file://${(global as any).projdir}/img/r${room.thumbnail}.png?${room.lastmod}`; + return `file://${(global as any).projdir}/img/r${room.uid}${x2 ? '@r' : ''}.png?${room.lastmod}`; }; const getThumbnail = getRoomPreview; +const writeRoomPreview = ( + room: assetRef | IRoom, + canvas: HTMLCanvasElement, + x2: boolean +): Promise | Promise => { + if (typeof room === 'number') { + throw new Error('Cannot write a room preview for a room -1'); + } + if (typeof room === 'string') { + room = getRoomFromId(room); + } + const path = `${(global as any).projdir}/img/r${room.uid}${x2 ? '@r' : ''}.png`; + if (x2) { + const splash = `${(global as any).projdir}/img/splash.png`; + return Promise.all([ + outputCanvasToFile(canvas, path), + outputCanvasToFile(canvas, splash) + ]); + } + return outputCanvasToFile(canvas, path); +}; + export { createNewRoom, getRoomFromId, getById, getRoomPreview, - getThumbnail + getThumbnail, + writeRoomPreview }; diff --git a/src/node_requires/resources/styles/IStyle.d.ts b/src/node_requires/resources/styles/IStyle.d.ts new file mode 100644 index 000000000..9beb0d678 --- /dev/null +++ b/src/node_requires/resources/styles/IStyle.d.ts @@ -0,0 +1,3 @@ +declare interface IStyle extends IAsset { + //TODO: +} diff --git a/src/node_requires/resources/styles/index.ts b/src/node_requires/resources/styles/index.ts new file mode 100644 index 000000000..7d0b7b6bf --- /dev/null +++ b/src/node_requires/resources/styles/index.ts @@ -0,0 +1,9 @@ +const getById = (id: string): IStyle => { + const style = (global.currentProject as IProject).styles.find((s: IStyle) => s.uid === id); + if (!style) { + throw new Error(`Attempt to get a non-existent style with ID ${id}`); + } + return style; +}; + +export {getById}; diff --git a/src/node_requires/resources/templates/ITemplate.d.ts b/src/node_requires/resources/templates/ITemplate.d.ts new file mode 100644 index 000000000..415fb4448 --- /dev/null +++ b/src/node_requires/resources/templates/ITemplate.d.ts @@ -0,0 +1,14 @@ +type PixiBlendMode = 'NORMAL' | 'ADD' | 'MULTIPLY' | 'SCREEN'; + +interface ITemplate extends IScriptable { + depth: number, + texture: assetRef, + visible: boolean, + blendMode?: PixiBlendMode, + playAnimationOnStart: boolean, + loopAnimation: boolean, + animationFPS: number, + extends: { + [key: string]: unknown + } +} diff --git a/src/node_requires/resources/templates/defaultTemplate.ts b/src/node_requires/resources/templates/defaultTemplate.ts index f0c113a58..59a0a81de 100644 --- a/src/node_requires/resources/templates/defaultTemplate.ts +++ b/src/node_requires/resources/templates/defaultTemplate.ts @@ -4,19 +4,23 @@ const defaultTemplate = { type: 'template' as resourceType, name: 'NewTemplate', depth: 0, - oncreate: '', - onstep: 'this.move();', - ondraw: '', - ondestroy: '', texture: -1 as assetRef, - visible: true, - extends: {} + playAnimationOnStart: false, + loopAnimation: true, + animationFPS: 30, + visible: true }; module.exports = { get(): ITemplate { return ({ ...defaultTemplate, + events: [{ + eventKey: 'OnStep', + lib: 'core', + code: 'this.move();', + arguments: {} + }], extends: {}, lastmod: Number(new Date()), uid: generateGUID() diff --git a/src/node_requires/resources/templates/index.ts b/src/node_requires/resources/templates/index.ts index 9df58908e..9a92c6f4c 100644 --- a/src/node_requires/resources/templates/index.ts +++ b/src/node_requires/resources/templates/index.ts @@ -1,4 +1,5 @@ const getDefaultTemplate = require('./defaultTemplate').get; +import {getTexturePreview, getPixiTexture as getTexturePixiTexture} from '../textures'; const createNewTemplate = function createNewTemplate(name: string): ITemplate { const template = getDefaultTemplate(); @@ -36,7 +37,6 @@ const getTemplatePreview = function getTemplatePreview( x2: boolean, fs: boolean ): string { - const {getTexturePreview} = require('./../textures'); if (typeof template === 'string') { template = getTemplateFromId(template); } @@ -47,11 +47,22 @@ const getTemplatePreview = function getTemplatePreview( }; const getThumbnail = getTemplatePreview; +const getPixiTexture = (template: ITemplate | assetRef): PIXI.Texture[] => { + if (typeof template === 'string') { + template = getTemplateFromId(template); + } + if (template === -1) { + throw new Error('Cannot work with -1 assetRefs'); + } + return getTexturePixiTexture(template.texture, void 0, true); +}; + export { getDefaultTemplate, getTemplateFromId, getById, getTemplatePreview, getThumbnail, - createNewTemplate + createNewTemplate, + getPixiTexture }; diff --git a/src/node_requires/resources/templates/types.d.ts b/src/node_requires/resources/templates/types.d.ts deleted file mode 100644 index 381adbb1f..000000000 --- a/src/node_requires/resources/templates/types.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -interface ITemplate extends IAsset { - depth: number, - texture: assetRef, - visible: boolean, - oncreate: string, - onstep: string, - ondestroy: string, - ondraw: string, - extends: { - [key: string]: unknown - } -} diff --git a/src/node_requires/resources/textures/ITexture.d.ts b/src/node_requires/resources/textures/ITexture.d.ts index e78d9c212..812aeb61d 100644 --- a/src/node_requires/resources/textures/ITexture.d.ts +++ b/src/node_requires/resources/textures/ITexture.d.ts @@ -3,6 +3,7 @@ interface ITexture extends IAsset { uid: string; name: string; origname: string; + /* Number of columns and rows, accordigly */ grid: [number, number]; axis: [number, number]; width: number; @@ -23,4 +24,6 @@ interface ITexture extends IAsset { top?: number; bottom?: number; tiled?: boolean; + isBlank?: boolean; + ignoreTiledUse?: boolean; } diff --git a/src/node_requires/resources/textures/index.ts b/src/node_requires/resources/textures/index.ts index abaef5b4a..240cb1e27 100644 --- a/src/node_requires/resources/textures/index.ts +++ b/src/node_requires/resources/textures/index.ts @@ -1,3 +1,5 @@ +import {imageContain, toBuffer, crop} from '../../utils/imageUtils'; + /** * Gets the ct.js texture object by its id. * @param {string} id The id of the texture @@ -71,6 +73,7 @@ const baseTextureFromTexture = (texture: ITexture): Promise => }); }); +let unknownTexture = PIXI.Texture.from('data/img/unknown.png'); const pixiTextureCache: Record} An array of PIXI.Textures */ @@ -108,11 +113,24 @@ const texturesFromCtTexture = async function (tex: ITexture) { } } } + pixiTextureCache[tex.name] = { + lastmod: tex.lastmod, + texture: frames + }; return frames; }; - -let defaultTexture: PIXI.Texture; - +const resetPixiTextureCache = (): void => { + PIXI.utils.destroyTextureCache(); + unknownTexture = PIXI.Texture.from('data/img/unknown.png'); +}; +const populatePixiTextureCache = async (project: IProject): Promise => { + clearPixiTextureCache(); + const promises = []; + for (const texture of project.textures) { + promises.push(texturesFromCtTexture(texture)); + } + await Promise.all(promises); +}; // async const getDOMImage = function ( texture: assetRef | ITexture, @@ -136,24 +154,36 @@ const getDOMImage = function ( }; /** - * @param {string|-1|any} texture Either a uid of a texture, or a ct.js texture object + * @param {assetRef | ITexture} texture Either a uid of a texture, or a ct.js texture object * @param {number} [frame] The frame to extract. If not defined, will return an array of all frames * @param {boolean} [allowMinusOne] Allows the use of `-1` as a texture uid * @returns {Array|PIXI.Texture} An array of textures, or an individual one. */ -const getPixiTexture = async function ( +function getPixiTexture(texture: assetRef | ITexture): PIXI.Texture[]; +function getPixiTexture( + texture: -1 +): never; +function getPixiTexture( + texture: assetRef | ITexture, + frame: void | null, + allowMinusOne?: boolean +): PIXI.Texture[]; +function getPixiTexture( + texture: assetRef | ITexture, + frame: number, + allowMinusOne?: boolean +): PIXI.Texture; +// eslint-disable-next-line func-style +function getPixiTexture( texture: assetRef | ITexture, - frame?: number, + frame?: number | void | null, allowMinusOne?: boolean -): Promise { +): PIXI.Texture | PIXI.Texture[] { if (allowMinusOne && texture === -1) { - if (!defaultTexture) { - defaultTexture = PIXI.Texture.from('data/img/unknown.png'); - } if (frame || frame === 0) { - return defaultTexture; + return unknownTexture; } - return [defaultTexture]; + return [unknownTexture]; } if (texture === -1) { throw new Error('Cannot turn -1 into a pixi texture in getPixiTexture method unless it is explicitly allowed.'); @@ -161,24 +191,11 @@ const getPixiTexture = async function ( if (typeof texture === 'string') { texture = getTextureFromId(texture); } - const {uid} = texture; - if (!pixiTextureCache[uid] || - pixiTextureCache[uid].lastmod !== texture.lastmod - ) { - const tex = await texturesFromCtTexture(texture); - // Everything is constant, and the key gets overridden. - // Where's the race condition? False positive?? - // eslint-disable-next-line require-atomic-updates - pixiTextureCache[uid] = { - lastmod: texture.lastmod, - texture: tex - }; - } if (frame || frame === 0) { - return pixiTextureCache[uid].texture[frame]; + return pixiTextureCache[texture.name].texture[frame]; } - return pixiTextureCache[uid].texture; -}; + return pixiTextureCache[texture.name].texture; +} /** * Returns a texture object by its name. @@ -200,7 +217,6 @@ const textureGenPreview = async function textureGenPreview( if (typeof texture === 'string') { texture = getTextureFromId(texture); } - const {imageContain, toBuffer, crop} = require('../../imageUtils'); const source = await getDOMImage(texture); const frame = crop( @@ -290,6 +306,7 @@ const importImageToTexture = async ( bottom: image.height, uid: id, padding: 1, + isBlank: false, group }; if (!(src instanceof Buffer)) { @@ -316,7 +333,8 @@ const importImageToTexture = async ( await Promise.all([ textureGenPreview(obj, dest + '_prev.png', 64), - textureGenPreview(obj, dest + '_prev@2.png', 128) + textureGenPreview(obj, dest + '_prev@2.png', 128), + texturesFromCtTexture(obj) ]); global.currentProject.textures.push(obj); @@ -330,7 +348,13 @@ const importImageToTexture = async ( const getCleanTextureName = (name: string): string => name.replace(isBgPostfixTester, '').replace(texturePostfixParser, ''); -const getTexturePivot = (texture: string | ITexture, inPixels?: boolean): [number, number] => { +const getTexturePivot = (texture: assetRef | ITexture, inPixels?: boolean): [number, number] => { + if (texture === -1) { + if (inPixels) { + return [16, 16]; + } + return [0.5, 0.5]; + } if (typeof texture === 'string') { texture = getTextureFromId(texture); } @@ -340,8 +364,19 @@ const getTexturePivot = (texture: string | ITexture, inPixels?: boolean): [numbe return [texture.axis[0] / texture.width, texture.axis[1] / texture.height]; }; +const setPixelart = (pixelart: boolean): void => { + PIXI.settings.SCALE_MODE = pixelart ? + PIXI.SCALE_MODES.NEAREST : + PIXI.SCALE_MODES.LINEAR; + for (const tex in pixiTextureCache) { + pixiTextureCache[tex].texture[0].baseTexture.scaleMode = PIXI.settings.SCALE_MODE; + } +}; + export { clearPixiTextureCache, + populatePixiTextureCache, + resetPixiTextureCache, getTextureFromId, getById, getTextureFromName, @@ -350,6 +385,8 @@ export { getThumbnail, getTexturePivot, getTextureOrig, + texturesFromCtTexture as updatePixiTexture, + setPixelart, getPixiTexture, getDOMImage, importImageToTexture, diff --git a/src/node_requires/roomEditor/IRoomEditorRiotTag.d.ts b/src/node_requires/roomEditor/IRoomEditorRiotTag.d.ts new file mode 100644 index 000000000..9d7b9f6b6 --- /dev/null +++ b/src/node_requires/roomEditor/IRoomEditorRiotTag.d.ts @@ -0,0 +1,39 @@ +import {TileLayer} from './entityClasses/TileLayer'; + +import {ITilePatch} from './interactions/tiles/ITilePatch'; +import {RoomEditor} from '.'; + +type tool = 'select' | 'addCopies' | 'addTiles' | 'manageBackgrounds' | 'roomProperties'; + +export interface IRoomEditorRiotTag { + update(): void; + tilePatch: ITilePatch; + currentTileLayer: TileLayer; + opts: { + room: IRoom; + }; + refs: { + propertiesPanel?: { + updatePropList(): void; + applyChanges(): void; + update(): void; + }, + tileEditor?: { + update(): void; + }, + backgroundsEditor?: { + update(): void; + }, + zoomLabel: HTMLSpanElement + }; + root: HTMLElement; + pixiEditor: RoomEditor; + zoom: number; + gridOn: boolean; + freePlacementMode: boolean; + controlMode: boolean; + currentTool: tool; + currentTemplate: ITemplate | -1; + setTool(tool: tool): () => void; + changeSelectedTemplate(templateId: string): void; +} diff --git a/src/node_requires/roomEditor/common.ts b/src/node_requires/roomEditor/common.ts new file mode 100644 index 000000000..ead9589f5 --- /dev/null +++ b/src/node_requires/roomEditor/common.ts @@ -0,0 +1,116 @@ +interface ISimplePoint { + x: number; + y: number; +} + +export const defaultTextStyle = new PIXI.TextStyle({ + dropShadow: true, + dropShadowDistance: 2, + dropShadowAlpha: 0.35, + fill: '#fff', + fontFamily: '\'Open Sans\',sans-serif,serif', + fontSize: 16 +}); + +/** Converts global coordinates to coordinates on a diagonal grid */ +export const toDiagonal = (pos: ISimplePoint, gridX: number, gridY: number): ISimplePoint => ({ + x: pos.y / gridY + pos.x / gridX, + y: -pos.x / gridX + pos.y / gridY +}); +/** Converts coordinates on a diagonal grid to global coordinates */ +export const fromDiagonal = (pos: ISimplePoint, gridX: number, gridY: number): ISimplePoint => ({ + x: 0.5 * gridX * (pos.x - pos.y), + y: 0.5 * gridY * (pos.x + pos.y) +}); +/** Converts global coordinates to coordinates on a rectangular grid */ +export const toRectangular = (pos: ISimplePoint, gridX: number, gridY: number): ISimplePoint => ({ + x: pos.x / gridX, + y: pos.y / gridY +}); +/** Converts coordinates on a rectangular grid to global coordinates */ +export const fromRectangular = (pos: ISimplePoint, gridX: number, gridY: number): ISimplePoint => ({ + x: pos.x * gridX, + y: pos.y * gridY +}); + +export const snapToDiagonalGrid = ( + pos: ISimplePoint, + gridX: number, + gridY: number +): ISimplePoint => { + const diag = toDiagonal({ + x: pos.x, + y: pos.y + }, gridX, gridY); + return fromDiagonal({ + x: Math.round(diag.x), + y: Math.round(diag.y) + }, gridX, gridY); +}; +export const snapToRectangularGrid = ( + pos: ISimplePoint, + gridX: number, + gridY: number +): ISimplePoint => ({ + x: Math.round(pos.x / gridX) * gridX, + y: Math.round(pos.y / gridY) * gridY +}); + +export const eraseCursor = 'url("data/cursorErase.svg") 1 1, default'; +export const rotateCursor = 'url("data/cursorRotate.svg") 12 12, pointer'; + +/** + * Six filters that recolor any DisplayObject to one of the primary+secondary colors. + * The colors: + * + * 0: Red + * 1: Yellow + * 2: Green + * 3: Aqua + * 4: Blue + * 5: Magenta + */ +export const recolorFilters: PIXI.filters.ColorMatrixFilter[] = []; +for (let i = 0; i < 6; i++) { + const filter = new PIXI.filters.ColorMatrixFilter(); + recolorFilters.push(filter); +} +/* eslint-disable array-element-newline, no-underscore-dangle, no-multi-spaces */ +recolorFilters[0]._loadMatrix([ + 1, 1, 1, 0, 0, + 0.1, 0.1, 0.1, 0, 0, + 0.1, 0.1, 0.1, 0, 0, + 0, 0, 0, 1, 0 +], false); +recolorFilters[1]._loadMatrix([ + 0.5, 0.5, 0.5, 0, 0, + 0.5, 0.5, 0.5, 0, 0, + 0.1, 0.1, 0.1, 0, 0, + 0, 0, 0, 1, 0 +], false); +recolorFilters[2]._loadMatrix([ + 0.1, 0.1, 0.1, 0, 0, + 1, 1, 1, 0, 0, + 0.1, 0.1, 0.1, 0, 0, + 0, 0, 0, 1, 0 +], false); +recolorFilters[3]._loadMatrix([ + 0.1, 0.1, 0.1, 0, 0, + 0.5, 0.5, 0.5, 0, 0, + 0.5, 0.5, 0.5, 0, 0, + 0, 0, 0, 1, 0 +], false); +recolorFilters[4]._loadMatrix([ + 0.1, 0.1, 0.1, 0, 0, + 0.1, 0.1, 0.1, 0, 0, + 1, 1, 1, 0, 0, + 0, 0, 0, 1, 0 +], false); +recolorFilters[5]._loadMatrix([ + 0.5, 0.5, 0.5, 0, 0, + 0.1, 0.1, 0.1, 0, 0, + 0.5, 0.5, 0.5, 0, 0, + 0, 0, 0, 1, 0 +], false); +/* eslint-enable array-element-newline, no-underscore-dangle, no-multi-spaces*/ + diff --git a/src/node_requires/roomEditor/entityClasses/Background.ts b/src/node_requires/roomEditor/entityClasses/Background.ts new file mode 100644 index 000000000..de8d41d04 --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/Background.ts @@ -0,0 +1,129 @@ +import {getPixiTexture} from '../../resources/textures'; +import {RoomEditor} from '..'; + +class Background extends PIXI.TilingSprite { + bgTexture: assetRef; + editor: RoomEditor; + shiftX = 0; + shiftY = 0; + parallaxX = 1; + parallaxY = 1; + movementX = 0; + movementY = 0; + simulatedMovedX = 0; + simulatedMovedY = 0; + repeat: canvasPatternRepeat = 'repeat'; + + constructor(bgInfo: IRoomBackground, editor: RoomEditor) { + super(getPixiTexture(bgInfo.texture, 0, true)); + this.anchor.x = this.anchor.y = 0; + this.editor = editor; + this.deserialize(bgInfo); + this.tick(0); + } + destroy(): void { + const ind = this.editor.backgrounds.indexOf(this); + if (ind !== -1) { + this.editor.backgrounds.splice(ind, 1); + this.editor.riotEditor.refs.backgroundsEditor?.update(); + } + super.destroy(); + } + detach(): this { + const ind = this.editor.backgrounds.indexOf(this); + if (ind === -1) { + throw new Error('Attempt to detach an off-screen background'); + } + this.editor.backgrounds.splice(ind, 1); + this.parent.removeChild(this); + this.editor.riotEditor.refs.backgroundsEditor.update(); + return this; + } + restore(): this { + this.editor.backgrounds.push(this); + this.editor.room.addChild(this); + this.editor.riotEditor.refs.backgroundsEditor.update(); + return this; + } + + changeTexture(id: assetRef): void { + this.texture = getPixiTexture(id, 0, true); + this.anchor.x = this.anchor.y = 0; + this.bgTexture = id; + } + + serialize(): IRoomBackground { + return { + depth: this.zIndex, + texture: this.bgTexture as string, + shiftX: this.shiftX, + shiftY: this.shiftY, + parallaxX: this.parallaxX, + parallaxY: this.parallaxY, + movementX: this.movementX, + movementY: this.movementY, + scaleX: this.tileScale.x, + scaleY: this.tileScale.y, + repeat: this.repeat + }; + } + deserialize(bg: IRoomBackground): void { + this.zIndex = bg.depth; + this.bgTexture = bg.texture; + this.shiftX = bg.shiftX; + this.shiftY = bg.shiftY; + this.parallaxX = bg.parallaxX; + this.parallaxY = bg.parallaxY; + this.movementX = bg.movementX; + this.movementY = bg.movementY; + this.tileScale.set(bg.scaleX, bg.scaleY); + this.repeat = bg.repeat; + } + refreshTexture(): void { + this.texture = getPixiTexture(this.bgTexture, 0); + this.anchor.x = this.anchor.y = 0; + } + tick(deltaTime: number): void { + const {camera, screen} = this.editor; + const cameraBounds = { + x: camera.x - screen.width / 2 * camera.scale.x, + y: camera.y - screen.height / 2 * camera.scale.y, + width: screen.width * camera.scale.x, + height: screen.height * camera.scale.y + }; + if (this.movementX === 0) { + this.simulatedMovedX = 0; + } + if (this.movementY === 0) { + this.simulatedMovedY = 0; + } + if (deltaTime > 0) { + this.simulatedMovedX += deltaTime * this.movementX; + this.simulatedMovedY += deltaTime * this.movementY; + } + const dx = this.editor.camera.x - this.editor.primaryViewport.width / 2, + dy = this.editor.camera.y - this.editor.primaryViewport.height / 2; + const sumShiftX = this.shiftX + this.simulatedMovedX, + sumShiftY = this.shiftY + this.simulatedMovedY; + if (this.repeat !== 'repeat-x' && this.repeat !== 'no-repeat') { + this.y = cameraBounds.y; + this.tilePosition.y = -this.y - dy * (this.parallaxY - 1) + sumShiftY; + this.height = cameraBounds.height + 1; + } else { + this.y = cameraBounds.y * (this.parallaxY - 1) + sumShiftY; + this.height = this.texture.height * this.tileScale.y; + this.tilePosition.y = 0; + } + if (this.repeat !== 'repeat-y' && this.repeat !== 'no-repeat') { + this.x = cameraBounds.x; + this.tilePosition.x = -this.x - dx * (this.parallaxX - 1) + sumShiftX; + this.width = cameraBounds.width + 1; + } else { + this.x = cameraBounds.x * (this.parallaxX - 1) + sumShiftX; + this.width = this.texture.width * this.tileScale.x; + this.tilePosition.x = 0; + } + } +} + +export {Background}; diff --git a/src/node_requires/roomEditor/entityClasses/Copy.ts b/src/node_requires/roomEditor/entityClasses/Copy.ts new file mode 100644 index 000000000..a27e860f1 --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/Copy.ts @@ -0,0 +1,104 @@ +import {RoomEditor} from '..'; +import {getPixiTexture, getTemplateFromId} from '../../resources/templates'; +import {getTexturePivot} from '../../resources/textures'; + +/** + * @notice This class automatically adds and removes itself from editor's copy list + */ +class Copy extends PIXI.AnimatedSprite { + templateId: string; + copyExts: Record; + copyCustomProps: Record; + cachedTemplate: ITemplate; + isGhost: boolean; + editor: RoomEditor; + autoUpdate: boolean; + update: (deltaTime: number) => void; + + constructor(copyInfo: IRoomCopy, editor: RoomEditor, isGhost?: boolean) { + super(getPixiTexture(copyInfo.uid)); + this.editor = editor; + this.templateId = copyInfo.uid; + this.autoUpdate = false; + const t = getTemplateFromId(this.templateId as string); + this.cachedTemplate = t; + this.deserialize(copyInfo); + this.isGhost = Boolean(isGhost); + this.interactive = !this.isGhost; + if (t.playAnimationOnStart) { + this.play(); + } + if (!this.isGhost) { + editor.copies.add(this); + } + } + destroy(): void { + if (!this.isGhost) { + this.editor.copies.delete(this); + } + super.destroy(); + } + detach(): this { + this.editor.copies.delete(this); + this.editor.room.removeChild(this); + return this; + } + restore(): this { + this.editor.copies.add(this); + this.editor.room.addChild(this); + return this; + } + + get animated(): boolean { + return getTemplateFromId(this.templateId as string).playAnimationOnStart; + } + + serialize(): IRoomCopy { + return { + x: this.x, + y: this.y, + opacity: this.alpha, + tint: this.tint, + scale: { + x: this.scale.x, + y: this.scale.y + }, + rotation: this.rotation, + uid: this.templateId, + exts: this.copyExts, + customProperties: this.copyCustomProps + }; + } + deserialize(copy: IRoomCopy): void { + this.x = copy.x; + this.y = copy.y; + this.zIndex = this.cachedTemplate.depth; + this.alpha = copy.opacity ?? 1; + this.tint = copy.tint ?? 0xffffff; + this.scale.x = copy.scale?.x ?? 1; + this.scale.y = copy.scale?.y ?? 1; + this.rotation = copy.rotation ?? 0; + this.templateId = copy.uid; + this.copyExts = copy.exts ?? {}; + this.copyCustomProps = copy.customProperties ?? {}; + const t = getTemplateFromId(this.templateId as string); + this.animationSpeed = (t.animationFPS ?? 60) / 60; + this.loop = t.loopAnimation ?? true; + if (t.texture !== -1) { + [this.anchor.x, this.anchor.y] = getTexturePivot(t.texture); + } else { + this.anchor.x = this.anchor.y = 0.5; + } + } + refreshTexture(): void { + const t = this.cachedTemplate; + this.textures = getPixiTexture(t); + if (t.texture !== -1) { + [this.anchor.x, this.anchor.y] = getTexturePivot(t.texture); + } else { + this.anchor.x = this.anchor.y = 0.5; + } + } +} + +export {Copy}; diff --git a/src/node_requires/roomEditor/entityClasses/MarqueeBox.ts b/src/node_requires/roomEditor/entityClasses/MarqueeBox.ts new file mode 100644 index 000000000..947b9560f --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/MarqueeBox.ts @@ -0,0 +1,24 @@ +import {RoomEditor} from '..'; +import {getPixiSwatch} from '../../themes'; + +export class MarqueeBox extends PIXI.Graphics { + editor: RoomEditor; + constructor(editor: RoomEditor, x: number, y: number, width: number, height: number) { + super(); + this.editor = editor; + this.redrawBox(x, y, width, height); + } + redrawBox(x: number, y: number, width: number, height: number): void { + const x1 = x, + x2 = x + width, + y1 = y, + y2 = y + height; + this.x = Math.min(x1, x2); + this.y = Math.min(y1, y2); + this.clear(); + this.lineStyle(3 * this.editor.camera.scale.x, getPixiSwatch('act')) + .drawRoundedRect(0, 0, Math.abs(width), Math.abs(height), 0.1); + this.lineStyle(this.editor.camera.scale.x, getPixiSwatch('background')) + .drawRoundedRect(0, 0, Math.abs(width), Math.abs(height), 0.1); + } +} diff --git a/src/node_requires/roomEditor/entityClasses/SnapTarget.ts b/src/node_requires/roomEditor/entityClasses/SnapTarget.ts new file mode 100644 index 000000000..74798d013 --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/SnapTarget.ts @@ -0,0 +1,97 @@ +import {getPixiSwatch} from '../../themes'; +import {RoomEditor} from '..'; +import {snapToRectangularGrid, snapToDiagonalGrid} from '../common'; +import {getPixiTexture, getTextureFromId, getTexturePivot} from '../../resources/textures'; +import {createTilePatch} from '../interactions/tiles/placeTile'; + +let unknownTextures = getPixiTexture(-1, void 0, true); + +export class SnapTarget extends PIXI.Container { + editor: RoomEditor; + circle = new PIXI.Graphics(); + ghost: PIXI.AnimatedSprite; + ghostCompound = new PIXI.Container(); + prevGhostTex: ITexture; + prevTilePatch: string; + constructor(editor: RoomEditor) { + super(); + unknownTextures = getPixiTexture(-1, void 0, true); + this.editor = editor; + this.ghost = new PIXI.AnimatedSprite(unknownTextures); + this.ghost.visible = false; + this.ghost.alpha = 0.5; + [this.ghost.anchor.x, this.ghost.anchor.y] = [0.5, 0.5]; + this.addChild(this.ghost, this.ghostCompound); + this.circle.beginFill(getPixiSwatch('act')); + this.circle.drawCircle(0, 0, 4); + this.addChild(this.circle); + } + getPatchString(): string { + const {tilePatch} = this.editor.riotEditor; + return `${tilePatch.texture.uid}:${tilePatch.startX}:${tilePatch.startY}:${tilePatch.spanX}:${tilePatch.spanY}`; + } + update(): void { + this.circle.scale.x = this.editor.camera.scale.x; + this.circle.scale.y = this.editor.camera.scale.y; + + const {riotEditor} = this.editor; + const {currentTemplate} = riotEditor; + if (riotEditor.currentTool === 'addCopies' && currentTemplate !== -1) { + this.ghost.visible = true; + if (currentTemplate.texture === -1 && + this.ghost.textures !== unknownTextures + ) { + this.updateGhost(-1); + this.ghost.textures = unknownTextures; + } + if (currentTemplate.texture !== -1 && + this.prevGhostTex !== getTextureFromId(currentTemplate.texture) + ) { + this.updateGhost(currentTemplate.texture); + this.prevGhostTex = getTextureFromId(currentTemplate.texture); + } + } else { + this.ghost.visible = false; + } + if (riotEditor.currentTool === 'addTiles' && riotEditor.tilePatch?.texture) { + if (this.prevTilePatch !== this.getPatchString()) { + this.ghostCompound.removeChildren(); + this.ghostCompound.visible = true; + this.ghostCompound.addChild(...createTilePatch(riotEditor.tilePatch, { + x: 0, + y: 0 + }, this.editor, true)); + this.prevTilePatch = this.getPatchString(); + } + } else { + this.ghostCompound.visible = false; + if (this.ghostCompound.children.length) { + this.ghostCompound.removeChildren(); + } + } + + const {mouse} = this.editor.renderer.plugins.interaction; + mouse.getLocalPosition(this.editor.overlays, this.position); + if (!riotEditor.gridOn || riotEditor.freePlacementMode) { + return; + } + let snappedPos; + if (this.editor.ctRoom.diagonalGrid) { + snappedPos = snapToDiagonalGrid({ + x: this.x, + y: this.y + }, this.editor.ctRoom.gridX, this.editor.ctRoom.gridY); + } else { + snappedPos = snapToRectangularGrid({ + x: this.x, + y: this.y + }, this.editor.ctRoom.gridX, this.editor.ctRoom.gridY); + } + this.x = snappedPos.x; + this.y = snappedPos.y; + } + updateGhost(texture: assetRef | ITexture): void { + this.ghost.textures = getPixiTexture(texture, void 0, true); + [this.ghost.anchor.x, this.ghost.anchor.y] = getTexturePivot(texture); + } +} diff --git a/src/node_requires/roomEditor/entityClasses/Tile.ts b/src/node_requires/roomEditor/entityClasses/Tile.ts new file mode 100644 index 000000000..07b01162c --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/Tile.ts @@ -0,0 +1,85 @@ +import {getPixiTexture, getTexturePivot} from '../../resources/textures'; +import {RoomEditor} from '..'; +import {TileLayer} from './TileLayer'; + +/** + * @notice This class automatically adds and removes itself from editor's tile list + */ +class Tile extends PIXI.Sprite { + tileTexture: assetRef; + tileFrame: number; + parent: TileLayer | null; + editor: RoomEditor; + isGhost: boolean; + + constructor(tileInfo: ITileTemplate, editor: RoomEditor, isGhost?: boolean) { + super(getPixiTexture(tileInfo.texture, tileInfo.frame, false)); + this.editor = editor; + this.deserialize(tileInfo); + this.isGhost = Boolean(isGhost); + this.interactive = !this.isGhost; + if (this.isGhost) { + this.alpha *= 0.5; + } else { + editor.tiles.add(this); + } + } + destroy(): void { + if (!this.isGhost) { + this.editor.tiles.delete(this); + } + super.destroy(); + } + detach(): this { + this.editor.tiles.delete(this); + this.parent.removeChild(this); + return this; + } + restore(parent: TileLayer): this { + this.editor.tiles.add(this); + parent.addChild(this); + return this; + } + + serialize(): ITileTemplate { + return { + x: this.x, + y: this.y, + opacity: this.alpha, + tint: this.tint, + scale: { + x: this.scale.x, + y: this.scale.y + }, + frame: this.tileFrame, + rotation: this.rotation, + texture: this.tileTexture as string + }; + } + deserialize(tile: ITileTemplate): void { + this.x = tile.x; + this.y = tile.y; + this.alpha = tile.opacity ?? 1; + this.tint = tile.tint ?? 0xffffff; + this.scale.x = tile.scale?.x ?? 1; + this.scale.y = tile.scale?.y ?? 1; + this.rotation = tile.rotation ?? 0; + this.tileTexture = tile.texture; + this.tileFrame = tile.frame; + [this.anchor.x, this.anchor.y] = getTexturePivot(this.tileTexture); + } + refreshTexture(): void { + const frame = getPixiTexture(this.tileTexture, this.tileFrame); + if (frame) { + this.texture = frame; + } else { + // eslint-disable-next-line no-console + console.warn(`Frame ${this.tileFrame} does not exist in the texture ${this.tileTexture}. Removing the tile.`); + // Invalid tile. Desintegrate! + this.destroy(); + } + [this.anchor.x, this.anchor.y] = getTexturePivot(this.tileTexture); + } +} + +export {Tile}; diff --git a/src/node_requires/roomEditor/entityClasses/TileLayer.ts b/src/node_requires/roomEditor/entityClasses/TileLayer.ts new file mode 100644 index 000000000..c8e97f6f4 --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/TileLayer.ts @@ -0,0 +1,89 @@ +import {Tile} from './Tile'; +import {RoomEditor} from '..'; + +let idCounter = 0; + +export const resetCounter = (): void => { + idCounter = 0; +}; + +export class TileLayer extends PIXI.Container { + extends: Record; + children: Tile[]; + editor: RoomEditor; + id: number; + constructor(tileLayer: ITileLayerTemplate, editor: RoomEditor) { + super(); + this.editor = editor; + this.id = idCounter++; + this.deserialize(tileLayer); + } + destroy(): void { + if (this.parent) { + this.parent.removeChild(this); + } + const ind = this.editor.tileLayers.indexOf(this); + if (ind !== -1) { + this.editor.tileLayers.splice(ind, 1); + } + super.destroy({ + children: true + }); + } + detach(writeToHistory?: boolean): this { + const ind = this.editor.tileLayers.indexOf(this); + if (ind !== -1) { + // eslint-disable-next-line no-console + console.warn('Detaching a layer that was not in the editor\'s tileLayer list', this); + this.editor.tileLayers.splice(ind, 1); + } + for (const tile of this.children) { + this.editor.tiles.delete(tile); + } + this.parent.removeChild(this); + if (writeToHistory) { + this.editor.history.pushChange({ + type: 'tileLayerDeletion', + deleted: this + }); + } + return this; + } + restore(): this { + this.editor.addTileLayer(this); + return this; + } + get isHidden(): boolean { + return this.alpha === 0; + } + hide(): void { + this.alpha = 0; + } + show(): void { + this.alpha = 1; + } + showToggle(): boolean { + if (this.alpha === 0) { + this.alpha = 1; + } else { + this.alpha = 0; + } + return this.isHidden; + } + serialize(): ITileLayerTemplate { + return { + depth: this.zIndex, + tiles: this.children.map(c => c.serialize()), + extends: this.extends, + hidden: !this.visible + }; + } + deserialize(tileLayer: ITileLayerTemplate): void { + this.zIndex = tileLayer.depth; + this.extends = tileLayer.extends || {}; + for (const tile of tileLayer.tiles) { + const pixiTile = new Tile(tile, this.editor); + this.addChild(pixiTile); + } + } +} diff --git a/src/node_requires/roomEditor/entityClasses/Transformer.ts b/src/node_requires/roomEditor/entityClasses/Transformer.ts new file mode 100644 index 000000000..f51cba670 --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/Transformer.ts @@ -0,0 +1,289 @@ +import {RoomEditor} from '..'; + +import {getPixiSwatch} from '../../themes'; +import {rotateCursor} from '../common'; +import {ease} from 'node_modules/pixi-ease'; + +import {rotateRad, pdc} from '../../utils/trigo'; + +export class Handle extends PIXI.Graphics { + constructor() { + super(); + this.beginFill(getPixiSwatch('act')); + this.drawCircle(0, 0, 6); + this.interactive = true; + this.cursor = 'pointer'; + } +} +type transformSubset = { + x: number; + y: number; + scale: { + x: number; + y: number; + }; + rotation: number; +} + +export class Transformer extends PIXI.Container { + handleTL = new Handle(); + handleTR = new Handle(); + handleT = new Handle(); + handleL = new Handle(); + handleR = new Handle(); + handleCenter = new Handle(); + handleBL = new Handle(); + handleBR = new Handle(); + handleB = new Handle(); + handleRotate = new Handle(); + scaleHandles = [ + this.handleTL, + this.handleTR, + this.handleT, + this.handleL, + this.handleR, + this.handleBL, + this.handleBR, + this.handleB + ]; + frame = new PIXI.Graphics(); + + applyRotation: number; + applyScaleX: number; + applyScaleY: number; + applyTranslateX: number; + applyTranslateY: number; + transformPivotX: number; + transformPivotY: number; + frameWidth: number; + frameHeight: number; + initialTransforms = new Map(); + + editor: RoomEditor; + + constructor(editor: RoomEditor) { + super(); + this.editor = editor; + this.handleRotate.cursor = rotateCursor; + + this.handleCenter.scale.set(1.25, 1.25); + this.handleCenter.cursor = 'move'; + + this.addChild( + this.frame, + this.handleTL, + this.handleTR, + this.handleT, + this.handleL, + this.handleR, + this.handleCenter, + this.handleBL, + this.handleBR, + this.handleB, + this.handleRotate + ); + this.setup(); + } + + setup(skipHistoryUpdate?: boolean): void { + this.initialTransforms.clear(); + this.applyRotation = 0; + this.applyScaleX = this.applyScaleY = 1; + this.applyTranslateX = this.applyTranslateY = 0; + if (this.editor.currentSelection.size === 0) { + this.visible = false; + return; + } + this.visible = true; + + let rect; + for (const elt of this.editor.currentSelection) { + const w = elt.width, + h = elt.height, + // IDK why this works + px = Math.sign(elt.scale.x) === -1 ? 1 - elt.anchor.x : elt.anchor.x, + py = Math.sign(elt.scale.y) === -1 ? 1 - elt.anchor.y : elt.anchor.y; + const tl = rotateRad(-w * px, -h * py, elt.rotation), + tr = rotateRad(w * (1 - px), -h * py, elt.rotation), + bl = rotateRad(-w * px, h * (1 - py), elt.rotation), + br = rotateRad(w * (1 - px), h * (1 - py), elt.rotation); + const x1 = Math.min(tl[0], bl[0], tr[0], br[0]), + x2 = Math.max(tl[0], bl[0], tr[0], br[0]), + y1 = Math.min(tl[1], bl[1], tr[1], br[1]), + y2 = Math.max(tl[1], bl[1], tr[1], br[1]); + if (!rect) { + rect = new PIXI.Rectangle(x1, y1, x2 - x1, y2 - y1); + rect.x += elt.x; + rect.y += elt.y; + } else { + const newRect = new PIXI.Rectangle(x1, y1, x2 - x1, y2 - y1); + newRect.x += elt.x; + newRect.y += elt.y; + rect.enlarge(newRect); + } + this.initialTransforms.set(elt, { + x: elt.x, + y: elt.y, + scale: { + x: elt.scale.x || 1, + y: elt.scale.y || 1 + }, + rotation: elt.rotation + }); + } + this.frameWidth = rect.width; + this.frameHeight = rect.height; + this.transformPivotX = rect.x + rect.width / 2; + this.transformPivotY = rect.y + rect.height / 2; + if (!skipHistoryUpdate) { + this.editor.history.initiateTransformChange(); + } + this.updateFrame(); + } + clear(): void { + this.editor.currentSelection.clear(); + this.setup(true); + } + + applyTransforms(): void { + for (const elt of this.editor.currentSelection) { + const initial = this.initialTransforms.get(elt); + const delta = { + x: ((initial.x + this.applyTranslateX) - this.transformPivotX) * this.applyScaleX, + y: ((initial.y + this.applyTranslateY) - this.transformPivotY) * this.applyScaleY + }; + const rotatedDelta = rotateRad(delta.x, delta.y, this.applyRotation); + elt.x = this.transformPivotX + rotatedDelta[0]; + elt.y = this.transformPivotY + rotatedDelta[1]; + elt.rotation = initial.rotation + this.applyRotation; + + // Skew isn't in ct.js, so something fancy is introduced as an alternative. + // Works great at 0, 90, 180, 270 degrees. + // Works q̴̿ͅu̵͈͑e̵̖͒s̵͈̎t̸̪̽i̶͈͌o̴̳͊ñ̶̪a̵͜͝b̶̮̈́ĺ̸̲y̸͒͜ on other angles. + const flip = Math.sign(this.applyScaleX) !== Math.sign(this.applyScaleY) ? -1 : 1; + const sin = Math.sin(initial.rotation), + cos = Math.cos(initial.rotation); + + elt.scale.set( + initial.scale.x * + (cos ** 2 * this.applyScaleX + sin ** 2 * this.applyScaleY * flip), + initial.scale.y * + (sin ** 2 * this.applyScaleX * flip + cos ** 2 * this.applyScaleY) + ); + } + } + + outlineSelected(): void { + for (const elt of this.editor.currentSelection) { + const w = elt.width, + h = elt.height, + // IDK why this works + px = Math.sign(elt.scale.x) === -1 ? 1 - elt.anchor.x : elt.anchor.x, + py = Math.sign(elt.scale.y) === -1 ? 1 - elt.anchor.y : elt.anchor.y, + {x, y} = this.editor.room.toGlobal(elt.position), + sx = this.editor.camera.scale.x, + sy = this.editor.camera.scale.y; + const tl = rotateRad(-w * px, -h * py, elt.rotation), + tr = rotateRad(w * (1 - px), -h * py, elt.rotation), + bl = rotateRad(-w * px, h * (1 - py), elt.rotation), + br = rotateRad(w * (1 - px), h * (1 - py), elt.rotation); + // this.frame.lineStyle(3, getPixiSwatch('act')); + this.frame.lineStyle(1, getPixiSwatch('background')); + this.frame.beginFill(getPixiSwatch('act'), 0.15); + this.frame.moveTo(x + tl[0] / sx, y + tl[1] / sy); + this.frame.lineTo(x + tr[0] / sx, y + tr[1] / sy); + this.frame.lineTo(x + br[0] / sx, y + br[1] / sy); + this.frame.lineTo(x + bl[0] / sx, y + bl[1] / sy); + this.frame.lineTo(x + tl[0] / sx, y + tl[1] / sy); + this.frame.endFill(); + // this.frame.lineStyle(1, getPixiSwatch('background')); + // this.frame.moveTo(x + tl[0] / sx, y + tl[1] / sy); + // this.frame.lineTo(x + tr[0] / sx, y + tr[1] / sy); + // this.frame.lineTo(x + br[0] / sx, y + br[1] / sy); + // this.frame.lineTo(x + bl[0] / sx, y + bl[1] / sy); + // this.frame.lineTo(x + tl[0] / sx, y + tl[1] / sy); + } + } + updateFrame(): void { + const halfDiagonalScaled = { + x: this.frameWidth / 2 * this.applyScaleX / this.editor.camera.scale.x, + y: this.frameHeight / 2 * this.applyScaleY / this.editor.camera.scale.y + }; + // Compute position of four corners of the selection frame + const TR = rotateRad(halfDiagonalScaled.x, -halfDiagonalScaled.y, this.applyRotation), + TL = rotateRad(-halfDiagonalScaled.x, -halfDiagonalScaled.y, this.applyRotation), + BR = rotateRad(halfDiagonalScaled.x, halfDiagonalScaled.y, this.applyRotation), + BL = rotateRad(-halfDiagonalScaled.x, halfDiagonalScaled.y, this.applyRotation); + const globalFrom = this.editor.room.toGlobal(new PIXI.Point( + this.transformPivotX, + this.transformPivotY + )); + + TR[0] += globalFrom.x; + TL[0] += globalFrom.x; + BL[0] += globalFrom.x; + BR[0] += globalFrom.x; + TR[1] += globalFrom.y; + TL[1] += globalFrom.y; + BL[1] += globalFrom.y; + BR[1] += globalFrom.y; + + // Move handles to appropriate places + this.handleCenter.x = globalFrom.x; + this.handleCenter.y = globalFrom.y; + [this.handleTL.x, this.handleTL.y] = TL; + [this.handleTR.x, this.handleTR.y] = TR; + [this.handleBL.x, this.handleBL.y] = BL; + [this.handleBR.x, this.handleBR.y] = BR; + this.handleT.x = (TL[0] + TR[0]) / 2; + this.handleT.y = (TL[1] + TR[1]) / 2; + this.handleL.x = (TL[0] + BL[0]) / 2; + this.handleL.y = (TL[1] + BL[1]) / 2; + this.handleR.x = (TR[0] + BR[0]) / 2; + this.handleR.y = (TR[1] + BR[1]) / 2; + this.handleB.x = (BL[0] + BR[0]) / 2; + this.handleB.y = (BL[1] + BR[1]) / 2; + // Rotation handle is placed a bit outside the frame + const shift = rotateRad(21 * Math.sign(this.applyScaleX), 0, this.applyRotation); + this.handleRotate.x = this.handleR.x + shift[0]; + this.handleRotate.y = this.handleR.y + shift[1]; + + // Hide middle handles if they're placed way too close to other elements + if (pdc(TL[0], TL[1], BL[0], BL[1]) < 32 || pdc(TL[0], TL[1], TR[0], TR[1]) <= 16) { + this.handleL.visible = this.handleR.visible = false; + } else { + this.handleL.visible = this.handleR.visible = true; + } + if (pdc(TL[0], TL[1], TR[0], TR[1]) < 32 || pdc(TL[0], TL[1], BL[0], BL[1]) <= 16) { + this.handleT.visible = this.handleB.visible = false; + } else { + this.handleT.visible = this.handleB.visible = true; + } + + this.frame.clear(); + // Outline the selected elements + this.outlineSelected(); + // Draw the frame + this.frame.lineStyle(4, getPixiSwatch('act')); + this.frame.moveTo(TL[0] - 0.5, TL[1] - 0.5); + this.frame.lineTo(TR[0] + 0.5, TR[1] - 0.5); + this.frame.lineTo(BR[0] + 0.5, BR[1] + 0.5); + this.frame.lineTo(BL[0] - 0.5, BL[1] + 0.5); + this.frame.lineTo(TL[0] - 0.5, TL[1] - 0.5); + this.frame.lineStyle(2, getPixiSwatch('background')); + this.frame.moveTo(TL[0] - 0.5, TL[1] - 0.5); + this.frame.lineTo(TR[0] + 0.5, TR[1] - 0.5); + this.frame.lineTo(BR[0] + 0.5, BR[1] + 0.5); + this.frame.lineTo(BL[0] - 0.5, BL[1] + 0.5); + this.frame.lineTo(TL[0] - 0.5, TL[1] - 0.5); + } + + blink(): void { + this.alpha = 0; + ease.add(this, { + alpha: 1 + }, { + duration: 150 + }); + } +} diff --git a/src/node_requires/roomEditor/entityClasses/Viewport.ts b/src/node_requires/roomEditor/entityClasses/Viewport.ts new file mode 100644 index 000000000..a07d4fd6b --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/Viewport.ts @@ -0,0 +1,58 @@ +import {getPixiSwatch} from '../../themes'; +import {RoomEditor} from '..'; + +interface ICtViewport { + width: number; + height: number; + x?: number; + y?: number; +} + +class Viewport extends PIXI.Graphics { + view: ICtViewport; + starting: boolean; + startingIcon: PIXI.Graphics; + editor: RoomEditor; + + constructor(view: ICtViewport, starting: boolean, editor: RoomEditor) { + super(); + this.editor = editor; + this.starting = starting; + this.view = view; + this.x = this.view.x ?? 0; + this.y = this.view.y ?? 0; + this.startingIcon = new PIXI.Graphics(); + this.startingIcon + .lineStyle(2, getPixiSwatch('orange'), 1, 0.5) + .moveTo(0, 0) + .lineTo(17, 10) + .lineTo(0, 20) + .lineTo(0, 0) + .closePath(); + this.startingIcon.y = 16; + this.startingIcon.visible = this.starting; + this.addChild(this.startingIcon); + this.redrawFrame(); + } + destroy(): void { + this.editor.viewports.delete(this); + super.destroy(); + } + + redrawFrame(): void { + this.x = this.view.x ?? 0; + this.y = this.view.y ?? 0; + this.startingIcon.scale.set(this.editor.camera.scale.x); + this.startingIcon.visible = this.starting && + (this.view.height / this.editor.camera.scale.x > 48); + this.clear(); + this.lineStyle(4 * this.editor.camera.scale.x, getPixiSwatch('act')) + .drawRoundedRect(0, 0, this.view.width, this.view.height, 0.1); + this.lineStyle(2 * this.editor.camera.scale.x, getPixiSwatch('background')) + .drawRoundedRect(0, 0, this.view.width, this.view.height, 0.1); + this.startingIcon.x = this.view.width - (16 + 17) * this.editor.camera.scale.x; + this.startingIcon.y = 16 * this.editor.camera.scale.y; + } +} + +export {Viewport}; diff --git a/src/node_requires/roomEditor/entityClasses/ViewportRestriction.ts b/src/node_requires/roomEditor/entityClasses/ViewportRestriction.ts new file mode 100644 index 000000000..a4bd8bce6 --- /dev/null +++ b/src/node_requires/roomEditor/entityClasses/ViewportRestriction.ts @@ -0,0 +1,57 @@ +import {getPixiSwatch} from '../../themes'; +import {RoomEditor} from '..'; + +export class ViewportRestriction extends PIXI.Graphics { + icon: PIXI.Graphics; + editor: RoomEditor; + constructor(editor: RoomEditor) { + super(); + this.editor = editor; + this.x = this.editor.ctRoom.restrictMinX; + this.y = this.editor.ctRoom.restrictMinY; + this.icon = new PIXI.Graphics(); + this.icon + .lineStyle(2, getPixiSwatch('orange'), 1, 0.5); + this.icon.drawRect(0, 10, 20, 14); + this.icon.arc(10, 6, 6, Math.PI, Math.PI * 2); + this.icon.moveTo(10, 14); + this.icon.lineTo(10, 20); + this.icon.moveTo(4, 6); + this.icon.lineTo(4, 10); + this.icon.moveTo(4 + 12, 6); + this.icon.lineTo(4 + 12, 10); + this.icon.y = 16; + this.addChild(this.icon); + this.redrawFrame(); + } + + redrawFrame(): void { + if (!this.editor.ctRoom.restrictCamera) { + this.visible = false; + return; + } + this.visible = true; + this.x = this.editor.ctRoom.restrictMinX; + this.y = this.editor.ctRoom.restrictMinY; + let width = this.editor.ctRoom.restrictMaxX - this.editor.ctRoom.restrictMinX, + height = this.editor.ctRoom.restrictMaxY - this.editor.ctRoom.restrictMinY; + if (width < 0) { + width = Math.abs(width); + this.x = this.editor.ctRoom.restrictMaxX; + } + if (height < 0) { + height = Math.abs(height); + this.y = this.editor.ctRoom.restrictMaxY; + } + this.icon.scale.set(this.editor.camera.scale.x); + this.icon.visible = (height / this.editor.camera.scale.x > 48); + this.clear(); + this.lineStyle(4 * this.editor.camera.scale.x, getPixiSwatch('act')) + .drawRoundedRect(0, 0, width, height, 0.1); + this.lineStyle(2 * this.editor.camera.scale.x, getPixiSwatch('background')) + .drawRoundedRect(0, 0, width, height, 0.1); + this.icon.x = width - (16 + 20) * this.editor.camera.scale.x; + this.icon.y = 16 * this.editor.camera.scale.y; + } +} + diff --git a/src/node_requires/roomEditor/history.ts b/src/node_requires/roomEditor/history.ts new file mode 100644 index 000000000..085ff520d --- /dev/null +++ b/src/node_requires/roomEditor/history.ts @@ -0,0 +1,290 @@ +import {Copy} from './entityClasses/Copy'; +import {Tile} from './entityClasses/Tile'; +import {TileLayer} from './entityClasses/TileLayer'; +import {Background} from './entityClasses/Background'; +import {RoomEditor} from '.'; + +type transformationSnapshot = { + position: { + x: number; + y: number; + } + rotation: number; + scale: { + x: number; + y: number; + } + tint: number; + alpha: number; +}; + +/** + * In order: The entity that was changed, transformation before the change, and after it. + */ +type transformation = { + type: 'transformation', + transformations: Map +}; + +type deletion = { + type: 'deletion', + deleted: Set<[Copy | Tile, TileLayer?]> +}; +type creation = { + type: 'creation', + created: Set<[Copy | Tile, TileLayer?]> +}; + +type tileLayerCreation = { + type: 'tileLayerCreation', + created: TileLayer +} +type tileLayerDeletion = { + type: 'tileLayerDeletion', + deleted: TileLayer +} + +type backgroundCreation = { + type: 'backgroundCreation', + created: Background +} +type backgroundDeletion = { + type: 'backgroundDeletion', + deleted: Background +} + +type propChange = { + type: 'propChange', + key: string, + target: unknown, + before: unknown, + after: unknown +} + +export type change = transformation | deletion | creation | + tileLayerCreation | tileLayerDeletion | + backgroundCreation | backgroundDeletion | + propChange; + +const snapshotTransform = (entity: PIXI.Sprite): transformationSnapshot => ({ + position: { + x: entity.position.x, + y: entity.position.y + }, + rotation: entity.rotation, + scale: { + x: entity.scale.x, + y: entity.scale.y + }, + tint: entity.tint, + alpha: entity.alpha +}); + +export class History { + stack: change[] = []; + /** + * Describes the last change made in the given period of time in history. + * Undo operation undos this change, while redo operation redos the change next to it. + */ + currentChange?: change; + editor: RoomEditor; + + constructor(editor: RoomEditor) { + this.editor = editor; + } + + undo(): boolean { + if (!this.currentChange) { + return false; + } + const change = this.currentChange; + // eslint-disable-next-line default-case + switch (change.type) { + case 'transformation': + this.editor.transformer.clear(); + for (const transform of change.transformations) { + const [entity, [before]] = transform; + entity.position.set(before.position.x, before.position.y); + entity.scale.set(before.scale.x, before.scale.y); + entity.alpha = before.alpha; + entity.rotation = before.rotation; + entity.tint = before.tint; + this.editor.currentSelection.add(entity); + } + this.editor.transformer.setup(true); + this.editor.riotEditor.refs.propertiesPanel?.updatePropList(); + break; + case 'deletion': + for (const deletion of change.deleted) { + const [entity, parent] = deletion; + entity.restore(parent); + } + break; + case 'creation': + this.editor.transformer.clear(); + for (const creation of change.created) { + const [entity] = creation; + entity.detach(); + } + break; + case 'tileLayerCreation': + change.created.detach(); + if (!this.editor.tileLayers.includes(this.editor.riotEditor.currentTileLayer)) { + [this.editor.riotEditor.currentTileLayer] = this.editor.tileLayers; + } + this.editor.riotEditor.refs.tileEditor?.update(); + break; + case 'tileLayerDeletion': + change.deleted.restore(); + this.editor.riotEditor.currentTileLayer = change.deleted; + this.editor.riotEditor.refs.tileEditor?.update(); + break; + case 'backgroundCreation': + change.created.detach(); + this.editor.riotEditor.refs.backgroundsEditor?.update(); + break; + case 'backgroundDeletion': + change.deleted.restore(); + this.editor.riotEditor.refs.backgroundsEditor?.update(); + break; + case 'propChange': + (change.target as Record)[change.key] = change.before; + this.updateUiFor(change); + break; + } + const prevChangeType = change.type; + this.currentChange = this.stack[this.stack.indexOf(change) - 1]; + if (prevChangeType === 'transformation' && !this.currentChange) { + // If we reached history's end with transformation reversal, leave + // this last change as current one, as the transformer selects the same set + // of entities and initial transforms are totally correct. + [this.currentChange] = this.stack; + } + this.editor.riotEditor.update(); + return true; + } + redo(): boolean { + if (this.currentChange === this.stack[this.stack.length - 1]) { + return false; + } + const newChange = this.stack[this.stack.indexOf(this.currentChange) + 1]; + // eslint-disable-next-line default-case + switch (newChange.type) { + case 'transformation': + this.editor.transformer.clear(); + for (const change of newChange.transformations) { + const [entity, [, after]] = change; + entity.position.set(after.position.x, after.position.y); + entity.scale.set(after.scale.x, after.scale.y); + entity.alpha = after.alpha; + entity.rotation = after.rotation; + entity.tint = after.tint; + this.editor.currentSelection.add(entity); + } + this.editor.transformer.setup(true); + this.editor.riotEditor.refs.propertiesPanel?.updatePropList(); + break; + case 'deletion': + this.editor.transformer.clear(); + for (const deletion of newChange.deleted) { + const [entity] = deletion; + entity.detach(); + } + break; + case 'creation': + for (const creation of newChange.created) { + const [entity, parent] = creation; + entity.restore(parent); + } + break; + case 'tileLayerCreation': + newChange.created.restore(); + this.editor.riotEditor.currentTileLayer = newChange.created; + this.editor.riotEditor.refs.tileEditor?.update(); + break; + case 'tileLayerDeletion': + newChange.deleted.detach(); + if (!this.editor.tileLayers.includes(newChange.deleted)) { + [this.editor.riotEditor.currentTileLayer] = this.editor.tileLayers; + } + this.editor.riotEditor.refs.tileEditor?.update(); + break; + case 'backgroundCreation': + newChange.created.restore(); + this.editor.riotEditor.refs.backgroundsEditor?.update(); + break; + case 'backgroundDeletion': + newChange.deleted.detach(); + this.editor.riotEditor.refs.backgroundsEditor?.update(); + break; + case 'propChange': + (newChange.target as Record)[newChange.key] = newChange.after; + this.updateUiFor(newChange); + break; + } + this.currentChange = newChange; + this.editor.riotEditor.update(); + return true; + } + pushChange(change: change): void { + const id = this.stack.indexOf(this.currentChange); + this.stack = this.stack.slice(0, id + 1); + this.stack.push(change); + this.currentChange = change; + if (this.stack.length > 30) { + this.stack.shift(); + } + this.editor.riotEditor.update(); + } + initiateTransformChange(): void { + const transform: change = { + type: 'transformation', + transformations: new Map() + }; + for (const entity of this.editor.currentSelection) { + const initialTransform = snapshotTransform(entity); + transform.transformations.set(entity as Copy | Tile, [ + initialTransform, + { + ...initialTransform + } + ]); + } + this.pushChange(transform); + } + snapshotTransforms(): void { + if (this.currentChange.type !== 'transformation') { + throw new Error('Cannot snapshot transforms as the current change\'s type is not "transformation"'); + } + for (const [entity, value] of this.currentChange.transformations) { + value[1] = snapshotTransform(entity); + } + void this; + } + updateUiFor(change: propChange): void { + const {target, key} = change, + {editor} = this, + riot = editor.riotEditor; + if (target instanceof TileLayer) { + riot.refs.tileEditor?.update(); + } else if (target === editor.ctRoom) { + riot.refs.propertiesPanel?.update(); + if (key === 'backgroundColor') { + editor.renderer.backgroundColor = + PIXI.utils.string2hex(editor.ctRoom.backgroundColor); + } + } else if (target instanceof Background) { + if (key === 'bgTexture') { + target.changeTexture(target.bgTexture); + } + riot.refs.backgroundsEditor?.update(); + } + } + + get canUndo(): boolean { + return Boolean(this.currentChange); + } + get canRedo(): boolean { + return this.currentChange !== this.stack[this.stack.length - 1]; + } +} diff --git a/src/node_requires/roomEditor/index.ts b/src/node_requires/roomEditor/index.ts new file mode 100644 index 000000000..e6af37242 --- /dev/null +++ b/src/node_requires/roomEditor/index.ts @@ -0,0 +1,561 @@ +import {History} from './history'; + +import {Copy} from './entityClasses/Copy'; +import {Tile} from './entityClasses/Tile'; +import {resetCounter as resetTileLayerCounter, TileLayer} from './entityClasses/TileLayer'; +import {Background} from './entityClasses/Background'; +import {Viewport} from './entityClasses/Viewport'; + +import {SnapTarget} from './entityClasses/SnapTarget'; +import {MarqueeBox} from './entityClasses/MarqueeBox'; +import {Transformer} from './entityClasses/Transformer'; +import {ViewportRestriction} from './entityClasses/ViewportRestriction'; + +import {IRoomEditorRiotTag} from './IRoomEditorRiotTag'; +import {IRoomEditorInteraction, AllowedListener, allowedListeners, interactions} from './interactions'; +import {getPixiSwatch} from './../themes'; +import {defaultTextStyle, recolorFilters, eraseCursor} from './common'; +import {ease} from 'node_modules/pixi-ease'; + +const roomEditorDefaults = { + width: 10, + height: 10, + autoDensity: true, + transparent: false, + sharedLoader: true, + sharedTicker: false, + resolution: devicePixelRatio, + antialias: true, + preserveDrawingBuffer: true +}; + +export type tileClipboardData = ['tile', ITileTemplate, TileLayer]; +export type copyClipboardData = ['copy', IRoomCopy]; + +class RoomEditor extends PIXI.Application { + history = new History(this); + riotEditor: IRoomEditorRiotTag; + ctRoom: IRoom; + currentSelection: Set = new Set(); + clipboard: Set = new Set(); + /** A sprite that catches any click events */ + clicktrap = new PIXI.Sprite(PIXI.Texture.WHITE); + /** A small circle that shows currently snapped position and a ghost for copy/tile placement */ + snapTarget = new SnapTarget(this); + /** A secondary ghost container for more complex prefabs and constructions */ + compoundGhost = new PIXI.Container(); + /** + * An empty Container that will be used as a camera. + * The camera provides inverted transforms for proper view placement. + */ + camera = new PIXI.Container(); + /** An overlay showing current rectangular selection */ + marqueeBox = new MarqueeBox(this, 0, 0, 10, 10); + /** A container for all the room's entities */ + room = new PIXI.Container(); + /** A container for viewport boxes, grid, and other overlays */ + overlays = new PIXI.Container(); + /** A free transform widget that exists in **global** coordinates. */ + transformer = new Transformer(this); + primaryViewport: Viewport; + restrictViewport: ViewportRestriction; + grid = new PIXI.Graphics(); + /** + * A label that will display current mouse coords relative to a room, + * in a left-bottom corner. Useful for lining up things in a level. + */ + pointerCoords = new PIXI.Text('(0;0)', defaultTextStyle); + /** + * Whether the room editor currently processes a user interaction. + * While this is true, no new interactions can be started. + */ + interacting = false; + interactions: IRoomEditorInteraction[]; + currentInteraction: IRoomEditorInteraction; + affixedInteractionData: unknown; + + copies = new Set(); + tiles = new Set(); + backgrounds: Background[] = []; + viewports = new Set(); + tileLayers: TileLayer[] = []; + + /** + * Creates a pixi.js app — a room editor + * Its `stage` manipulates the camera, managing panning and zooming. + * All the CRUD operations are in the Room class. + * + * @param {Object} opts A partial set of PIXI.Application options that must + * include a mounting point (`view`) + * @param {RiotTag} editor a tag instance of a `room-editor` + */ + constructor(opts: unknown, editor: IRoomEditorRiotTag, pixelart: boolean) { + super(Object.assign({}, roomEditorDefaults, opts, { + resizeTo: editor.root, + roundPixels: pixelart + })); + this.ticker.maxFPS = 60; + + const {room} = editor.opts; + this.ctRoom = room; + this.riotEditor = editor; + + this.clicktrap.alpha = 0; + this.stage.addChild(this.clicktrap); + this.resizeClicktrap(); + this.room.sortableChildren = true; + + this.camera.x = room.width / 2; + this.camera.y = room.height / 2; + this.stage.addChild(this.camera); + + this.stage.addChild(this.room); + this.redrawGrid(); + this.overlays.addChild(this.grid); + this.stage.addChild(this.overlays); + this.compoundGhost.alpha = 0.5; + this.overlays.addChild(this.compoundGhost); + this.marqueeBox.visible = false; + this.overlays.addChild(this.marqueeBox); + this.overlays.addChild(this.snapTarget); + this.deserialize(editor.opts.room); + this.stage.addChild(this.transformer); + + this.pointerCoords.zIndex = Infinity; + this.pointerCoords.x = 8; + this.stage.addChild(this.pointerCoords); + + this.ticker.add(() => { + this.resizeClicktrap(); + this.realignCamera(); + this.snapTarget.update(); + this.repositionCoordLabel(); + this.tickBackgrounds(); + this.tickCopies(); + if (this.transformer.visible) { + this.transformer.updateFrame(); + } + if (['addCopies', 'addTiles'].includes(this.riotEditor.currentTool)) { + if (this.riotEditor.controlMode && ['default', 'inherit'].includes(this.view.style.cursor)) { + this.view.style.cursor = eraseCursor; + this.snapTarget.visible = false; + } + if (!this.riotEditor.controlMode && this.view.style.cursor.includes('Erase')) { + this.view.style.cursor = 'default'; + this.snapTarget.visible = true; + } + } + }); + + this.stage.interactive = true; + this.interactions = interactions; + for (const event of allowedListeners) { + this.stage.on(event, (e: PIXI.InteractionEvent) => { + this.listen(e, event); + }); + } + + // Riot's observable objects lose function's context, so pass an anonymous function instead + this.updateTexturesHandle = (textureId: string) => this.updateTextures(textureId); + this.updateCopiesHandle = (templateId: string) => this.updateCopies(templateId); + window.signals.on('pixiTextureChanged', this.updateTexturesHandle); + window.signals.on('templateChanged', this.updateCopiesHandle); + } + destroy(removeView: boolean, stageOptions: { + children?: boolean; + texture?: boolean; + baseTexture?: boolean; + }): void { + window.signals.off('pixiTextureChanged', this.updateTexturesHandle); + window.signals.off('templateChanged', this.updateCopiesHandle); + super.destroy(removeView, stageOptions); + } + + listen(event: PIXI.InteractionEvent, listener: AllowedListener): void { + var callback = () => { + this.interacting = false; + this.currentInteraction = this.affixedInteractionData = void 0; + }; + for (const interaction of this.interactions) { + if (!this.interacting && interaction.ifListener === listener) { + if (interaction.if.apply(this, [event, this.riotEditor])) { + this.interacting = true; + this.currentInteraction = interaction; + this.affixedInteractionData = {}; + break; + } + } + } + for (const interaction of this.interactions) { + if (this.interacting && this.currentInteraction === interaction) { + if (listener in this.currentInteraction.listeners) { + this.currentInteraction.listeners[listener].apply( + this, + [event, this.riotEditor, this.affixedInteractionData, callback] + ); + } + } + } + } + + deserialize(room: IRoom): void { + this.simulate = room.simulate ?? true; + this.renderer.backgroundColor = PIXI.utils.string2hex(room.backgroundColor); + // Add primary viewport + this.primaryViewport = new Viewport(room, true, this); + this.restrictViewport = new ViewportRestriction(this); + this.overlays.addChild(this.restrictViewport); + this.overlays.addChild(this.primaryViewport); + this.viewports.add(this.primaryViewport); + // Add the remaining entities + for (const bg of room.backgrounds) { + this.addBackground(bg); + } + for (const copy of room.copies) { + const pixiCopy = new Copy(copy, this); + this.room.addChild(pixiCopy); + } + for (const tileLayer of room.tiles) { + this.addTileLayer(tileLayer); + } + } + serialize(): void { + this.ctRoom.copies = [...this.copies].map(c => c.serialize()); + this.ctRoom.tiles = this.tileLayers.map(tl => tl.serialize()); + this.ctRoom.backgrounds = this.backgrounds.map(bg => bg.serialize()); + this.ctRoom.lastmod = Number(new Date()); + } + + /** + * It is separated into a method to be usable externally. + * room-tile-editor uses it to add new layers. + */ + addTileLayer(tileLayer: ITileLayerTemplate | TileLayer, writeToHistory?: boolean): TileLayer { + const pixiTileLayer = tileLayer instanceof TileLayer ? + tileLayer : + new TileLayer(tileLayer, this); + if (this.colorizeTileLayers) { + pixiTileLayer.filters = [recolorFilters[pixiTileLayer.id % 6]]; + } + this.room.addChild(pixiTileLayer); + this.tileLayers.push(pixiTileLayer); + this.tileLayers.sort((a, b) => b.zIndex - a.zIndex); + if (pixiTileLayer.children) { + for (const tile of pixiTileLayer.children) { + this.tiles.add(tile); + } + } + if (writeToHistory) { + this.history.pushChange({ + type: 'tileLayerCreation', + created: pixiTileLayer + }); + } + return pixiTileLayer; + } + + /** + * It is separated as well to be usable by UI written with Riot. + */ + addBackground(bgTemplate: IRoomBackground): Background { + const bg = new Background(bgTemplate, this); + this.backgrounds.push(bg); + this.room.addChild(bg); + return bg; + } + + resizeClicktrap(): void { + this.clicktrap.width = this.screen.width; + this.clicktrap.height = this.screen.height; + } + redrawGrid(): void { + const w = this.ctRoom.gridX, + h = this.ctRoom.gridY; + this.grid.clear(); + if (!this.riotEditor.gridOn) { + // Grid isn't needed + return; + } + // Don't draw too fine grid + if (w / this.camera.scale.x < 8 || h / this.camera.scale.y < 8) { + return; + } + this.grid.lineStyle(this.camera.scale.x, getPixiSwatch('act'), 0.3); + // Camera boundaries with extra tiles around the border + const cw = this.screen.width * this.camera.scale.x + w * 2, + ch = this.screen.height * this.camera.scale.y + h * 2, + cx = this.camera.x - this.screen.width / 2 * this.camera.scale.x - w, + cy = this.camera.y - this.screen.height / 2 * this.camera.scale.y - h; + const xstart = cx; + const ystart = cy; + this.grid.x = -(cx % w); + this.grid.y = -(cy % h); + if (this.ctRoom.diagonalGrid) { + const angle1 = Math.atan(h / w); + const angle2 = Math.PI - angle1; + const cos1 = Math.cos(angle1), + cos2 = Math.cos(angle2), + sin1 = Math.sin(angle1), + sin2 = Math.sin(angle2); + const max = Math.sqrt(cw * cw + ch * ch); + for (let x = xstart; x < cx + cw; x += w) { + this.grid.moveTo(x, cy); + this.grid.lineTo(x + cos1 * max, cy + sin1 * max); + this.grid.moveTo(x, cy); + this.grid.lineTo(x + cos2 * max, cy + sin2 * max); + } + for (let y = ystart + h; y < cy + ch; y += h) { + this.grid.moveTo(cx, y); + this.grid.lineTo(cx + cos1 * max, y + sin1 * max); + } + const cwCorrected = Math.ceil(cw / w) * w; + for (let y = ystart; y < cy + ch; y += h) { + this.grid.moveTo(cx + cwCorrected, y); + this.grid.lineTo(cx + cwCorrected + cos2 * max, y + sin2 * max); + } + } else { + for (let x = xstart; x < cx + cw; x += w) { + this.grid.moveTo(x, cy); + this.grid.lineTo(x, cy + ch); + } + for (let y = ystart; y < cy + ch; y += h) { + this.grid.moveTo(cx, y); + this.grid.lineTo(cx + cw, y); + } + } + } + redrawViewports(): void { + for (const viewport of this.viewports) { + viewport.redrawFrame(); + } + this.restrictViewport.redrawFrame(); + } + /** + * Updates room position based on the camera position. + * @returns {void} + */ + realignCamera(): void { + this.room.transform.setFromMatrix(this.camera.worldTransform + .clone() + .invert() + .translate( + this.view.width / devicePixelRatio / 2, + this.view.height / devicePixelRatio / 2 + )); + this.overlays.transform = this.room.transform; + this.redrawGrid(); + this.redrawViewports(); + } + tickBackgrounds(): void { + for (const background of this.backgrounds) { + background.tick(this.ticker.deltaTime); + } + } + tickCopies(): void { + if (!this.simulate) { + return; + } + for (const copy of this.copies) { + copy.update(this.ticker.deltaTime); + } + } + repositionCoordLabel(): void { + this.pointerCoords.y = this.screen.height - 30; + } + + updateTextures(textureId: string): void { + for (const child of this.room.children) { + if (child instanceof Copy) { + if (child.cachedTemplate.texture === textureId) { + child.refreshTexture(); + } + } else if (child instanceof Tile) { + if (child.tileTexture === textureId) { + child.refreshTexture(); + } + } else if (child instanceof Background) { + if (child.bgTexture === textureId) { + child.refreshTexture(); + } + } + } + } + updateCopies(templateId: string): void { + for (const child of this.room.children) { + if (child instanceof Copy) { + if (child.templateId === templateId) { + child.refreshTexture(); + } + } + } + } + updateTexturesHandle: (textureId: string) => void; + updateCopiesHandle: (templateId: string) => void; + + #simulate: boolean; + get simulate(): boolean { + return this.#simulate; + } + set simulate(value: boolean) { + this.#simulate = value; + if (this.#simulate) { + this.ticker.speed = 1; + } else { + this.ticker.speed = 0; + } + } + + #copiesVisible = true; + #tilesVisible = true; + #backgroundsVisible = true; + #xrayMode = false; + #colorizeTileLayers = false; + get copiesVisible(): boolean { + return this.#copiesVisible; + } + set copiesVisible(value: boolean) { + value = Boolean(value); + if (value === this.#copiesVisible) { + return; + } + this.#copiesVisible = value; + for (const copy of this.copies) { + copy.visible = this.#copiesVisible; + } + } + get tilesVisible(): boolean { + return this.#tilesVisible; + } + set tilesVisible(value: boolean) { + value = Boolean(value); + if (value === this.#tilesVisible) { + return; + } + this.#tilesVisible = value; + for (const layer of this.tileLayers) { + layer.visible = this.#tilesVisible; + } + } + get backgroundsVisible(): boolean { + return this.#backgroundsVisible; + } + set backgroundsVisible(value: boolean) { + value = Boolean(value); + if (value === this.#backgroundsVisible) { + return; + } + this.#backgroundsVisible = value; + for (const bg of this.backgrounds) { + bg.visible = this.#backgroundsVisible; + } + } + get xrayMode(): boolean { + return this.#xrayMode; + } + set xrayMode(value: boolean) { + this.#xrayMode = Boolean(value); + this.room.alpha = this.#xrayMode ? 0.5 : 1; + } + get colorizeTileLayers(): boolean { + return this.#colorizeTileLayers; + } + set colorizeTileLayers(value: boolean) { + this.#colorizeTileLayers = Boolean(value); + for (const layer of this.tileLayers) { + if (this.#colorizeTileLayers) { + layer.filters = [recolorFilters[layer.id % 6]]; + } else { + layer.filters = []; + } + layer.visible = this.#tilesVisible; + } + } + + #selectCopies = true; + #selectTiles = true; + get selectCopies(): boolean { + return this.#selectCopies; + } + set selectCopies(value: boolean) { + value = Boolean(value); + this.#selectCopies = value; + } + get selectTiles(): boolean { + return this.#selectTiles; + } + set selectTiles(value: boolean) { + value = Boolean(value); + this.#selectTiles = value; + } + + goHome(): void { + this.riotEditor.zoom = 1; + ease.add(this.camera, { + x: this.ctRoom.width / 2, + y: this.ctRoom.height / 2, + scale: 1 + }, { + duration: 500 + }) + .on('each', () => { + this.riotEditor.refs.zoomLabel.innerHTML = `${Math.round(this.getZoom())}%`; + }); + } + zoomTo(zoom: number): void { + const scale = 1 / zoom * 100; + ease.add(this.camera, { + scale + }, { + duration: 500 + }) + .on('each', () => { + this.riotEditor.refs.zoomLabel.innerHTML = `${Math.round(this.getZoom())}%`; + }); + } + getZoom(): number { + // Somehow, when updating a room-editor tag, it loses camera but not the editor itself + return this.camera ? (1 / this.camera.scale.x * 100) : 100; + } + + /** + * Returns a base64 string of a room's main viewport. + * It is expected to be run when the room editor is no longer needed, + * as it repositions the room. + */ + getSplashScreen(big: boolean): HTMLCanvasElement { + const w = big ? 340 : 64, + h = big ? 256 : 64; + const renderTexture = PIXI.RenderTexture.create({ + width: w, + height: h + }); + this.overlays.visible = false; + this.transformer.visible = false; + this.pointerCoords.visible = false; + this.clicktrap.width = w; + this.clicktrap.height = h; + this.clicktrap.alpha = 1; + this.clicktrap.tint = this.renderer.backgroundColor; + this.room.scale.set(Math.min(w / this.ctRoom.width, h / this.ctRoom.height)); + this.room.x = (w - this.ctRoom.width * this.room.scale.x) / 2; + this.room.y = (h - this.ctRoom.height * this.room.scale.y) / 2; + this.renderer.render(this.stage, renderTexture); + return this.renderer.extract.canvas(renderTexture); + } +} + +const setup = (canvas: HTMLCanvasElement, editorTag: IRoomEditorRiotTag): RoomEditor => { + resetTileLayerCounter(); + const pixelart = Boolean(currentProject.settings.rendering.pixelatedrender); + editorTag.pixiEditor = new RoomEditor({ + view: canvas + }, editorTag, pixelart); + return editorTag.pixiEditor; +}; + + +export { + setup, + IRoomEditorInteraction, + RoomEditor +}; diff --git a/src/node_requires/roomEditor/interactions/camera/home.ts b/src/node_requires/roomEditor/interactions/camera/home.ts new file mode 100644 index 000000000..9f5f81583 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/camera/home.ts @@ -0,0 +1,16 @@ +import {IRoomEditorInteraction} from '..'; + +const goHome: IRoomEditorInteraction = { + ifListener: 'home', + if() { + return true; + }, + listeners: { + home(e, riotTag, affixedData, callback) { + this.goHome(); + callback(); + } + } +}; + +export {goHome}; diff --git a/src/node_requires/roomEditor/interactions/camera/move.ts b/src/node_requires/roomEditor/interactions/camera/move.ts new file mode 100644 index 000000000..603a8b427 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/camera/move.ts @@ -0,0 +1,46 @@ +import {IRoomEditorInteraction} from '..'; + +interface IMoveCameraAffixedData { + cameraFromPos: { + x: number, + y: number + }, + fromOffsetPos: { + x: number, + y: number + } +} + +const moveCameraOnWheelPress: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + // Checks for a pressed mouse wheel + return e.data.button === 1; + }, + listeners: { + pointerdown(e, roomTag, affixedData) { + affixedData.cameraFromPos = { + x: this.camera.x, + y: this.camera.y + }; + affixedData.fromOffsetPos = { + x: e.data.global.x, + y: e.data.global.y + }; + }, + pointermove(e, roomTag, affixedData) { + const cfp = affixedData.cameraFromPos, + op = affixedData.fromOffsetPos; + this.camera.x = cfp.x + (op.x - e.data.global.x) * this.camera.scale.x; + this.camera.y = cfp.y + (op.y - e.data.global.y) * this.camera.scale.y; + this.camera.updateTransform(); + this.tickBackgrounds(); + }, + pointerup: (e, roomTag, affixedData, callback) => { + callback(); + } + } +}; +moveCameraOnWheelPress.listeners.pointerupoutside = moveCameraOnWheelPress.listeners.pointerup; + +export {moveCameraOnWheelPress}; diff --git a/src/node_requires/roomEditor/interactions/camera/zoom.ts b/src/node_requires/roomEditor/interactions/camera/zoom.ts new file mode 100644 index 000000000..d3bcb17f2 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/camera/zoom.ts @@ -0,0 +1,48 @@ +import {IRoomEditorInteraction} from '../..'; +import {ease, Easing} from 'node_modules/pixi-ease'; + +interface IZoomData { + ease: Easing +} + +const zoomInteraction: IRoomEditorInteraction = { + ifListener: 'wheel', + if() { + return true; + }, + listeners: { + wheel(e, roomTag, affixedData, finishCallback) { + const oldZoom = roomTag.zoom; + const dx = this.screen.width / 2 - e.data.global.x, + dy = this.screen.height / 2 - e.data.global.y; + let newZoom; + if ((e.data.originalEvent as WheelEvent).deltaY < 0) { + newZoom = oldZoom * 0.75; + } else { + newZoom = oldZoom * 1.25; + } + if (Math.abs(newZoom - 1) < 0.1) { + newZoom = 1; + } + roomTag.zoom = newZoom; + if (affixedData.ease) { + affixedData.ease.remove(); + } + affixedData.ease = ease.add(this.camera, { + scale: newZoom, + x: this.camera.x + dx * (newZoom - this.camera.scale.x), + y: this.camera.y + dy * (newZoom - this.camera.scale.y) + }, { + duration: 200 + }) + .on('each', () => { + this.camera.updateTransform(); + this.realignCamera(); + roomTag.refs.zoomLabel.innerHTML = `${Math.round(this.getZoom())}%`; + }) + .once('complete', finishCallback); + } + } +}; + +export {zoomInteraction}; diff --git a/src/node_requires/roomEditor/interactions/copies/deleteCopies.ts b/src/node_requires/roomEditor/interactions/copies/deleteCopies.ts new file mode 100644 index 000000000..1c9599f1a --- /dev/null +++ b/src/node_requires/roomEditor/interactions/copies/deleteCopies.ts @@ -0,0 +1,41 @@ +import {IRoomEditorInteraction} from '../..'; +import {Copy} from '../../entityClasses/Copy'; + +type affixedData = { + deleted: Set<[Copy]>; +} + +export const deleteCopies: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + if (this.riotEditor.currentTool !== 'addCopies') { + return false; + } + const event = e.data.originalEvent; + return e.data.button === 0 && (event.ctrlKey || event.metaKey); + }, + listeners: { + pointerdown(e, riotTag, affixedData) { + affixedData.deleted = new Set(); + if (e.target instanceof Copy) { + affixedData.deleted.add([e.target.detach()]); + } + }, + pointermove(e, riotTag, affixedData) { + if (e.target instanceof Copy) { + affixedData.deleted.add([e.target.detach()]); + } + }, + pointerup(e, roomTag, affixedData, callback) { + if (affixedData.deleted.size) { + this.history.pushChange({ + type: 'deletion', + deleted: affixedData.deleted + }); + } + callback(); + } + } +}; + +deleteCopies.listeners.pointerupoutside = deleteCopies.listeners.pointerup; diff --git a/src/node_requires/roomEditor/interactions/copies/placeCopy.ts b/src/node_requires/roomEditor/interactions/copies/placeCopy.ts new file mode 100644 index 000000000..16f83a4ce --- /dev/null +++ b/src/node_requires/roomEditor/interactions/copies/placeCopy.ts @@ -0,0 +1,148 @@ +import {IRoomEditorInteraction, RoomEditor} from '../..'; +import {Copy} from '../../entityClasses/Copy'; + +import {calcPlacement} from '../placementCalculator'; + +import {soundbox} from '../../../3rdparty/soundbox'; + +interface IAffixedData { + mode: 'free' | 'straight'; + startPos: PIXI.IPoint; + prevPos: PIXI.IPoint; + prevLength: number; + stepX: number; + stepY: number; + diagonalGrid: boolean; + gridX: number; + gridY: number; + noGrid: boolean; + created: Set<[Copy]>; +} + +const createCopy = ( + pos: PIXI.IPoint, + template: ITemplate, + editor: RoomEditor, + ghost?: boolean +) => new Copy({ + x: pos.x, + y: pos.y, + exts: {}, + customProperties: {}, + scale: { + x: 1, + y: 1 + }, + uid: template.uid, + opacity: 1, + rotation: 0, + tint: 0xffffff +}, editor, ghost); + +export const placeCopy: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e, riotTag) { + if (this.riotEditor.currentTool !== 'addCopies') { + return false; + } + if (e.data.button !== 0) { + return false; + } + return riotTag.currentTemplate && riotTag.currentTemplate !== -1; + }, + listeners: { + pointerdown(e, roomTag, affixedData) { + this.compoundGhost.removeChildren(); + affixedData.created = new Set(); + // Two possible modes: placing in straight vertical/horizontal/diagonal lines + // and in a free form, like drawing with a brush. + // Straight method creates a ghost preview before actually creating all the copies, + // while the free form places copies as a user moves their cursor. + if (e.data.originalEvent.shiftKey) { + affixedData.mode = 'straight'; + affixedData.prevLength = 1; + } else { + affixedData.mode = 'free'; + } + affixedData.gridX = this.ctRoom.gridX; + affixedData.gridY = this.ctRoom.gridY; + affixedData.diagonalGrid = this.ctRoom.diagonalGrid; + affixedData.startPos = affixedData.prevPos = this.snapTarget.position.clone(); + affixedData.noGrid = !roomTag.gridOn || roomTag.freePlacementMode; + const newCopy = createCopy( + affixedData.startPos, + this.riotEditor.currentTemplate as ITemplate, + this + ); + affixedData.created.add([newCopy]); + this.room.addChild(newCopy); + affixedData.stepX = affixedData.stepY = 1; + soundbox.play('Wood_Start'); + }, + pointermove(e, roomTag, affixedData) { + affixedData.noGrid = !roomTag.gridOn || roomTag.freePlacementMode; + const newPos = this.snapTarget.position.clone(); + const ghosts = calcPlacement( + newPos, + affixedData, + ((position): Copy => { + soundbox.play('Wood_Start'); + const copy = createCopy( + position, + this.riotEditor.currentTemplate as ITemplate, + this + ); + this.room.addChild(copy); + affixedData.created.add([copy]); + return copy; + }) + ); + // Play feedback sound on length change + if (ghosts.length !== affixedData.prevLength) { + affixedData.prevLength = ghosts.length; + soundbox.play('Wood_Start'); + } + // Remove excess ghost instances + if (this.compoundGhost.children.length > ghosts.length) { + this.compoundGhost.removeChildren(ghosts.length); + } + // Add missing ghost instances + while (this.compoundGhost.children.length < ghosts.length) { + this.compoundGhost.addChild(createCopy( + affixedData.startPos, + this.riotEditor.currentTemplate as ITemplate, + this, + true + )); + } + for (let i = 0; i < ghosts.length; i++) { + const ghost = this.compoundGhost.children[i]; + ghost.x = ghosts[i].x; + ghost.y = ghosts[i].y; + } + }, + pointerup(e, roomTag, affixedData, callback) { + if (affixedData.mode === 'straight') { + // Replace all the preview copies with real ones + for (const ghost of this.compoundGhost.children) { + const copy = createCopy( + ghost.position, + this.riotEditor.currentTemplate as ITemplate, + this + ); + this.room.addChild(copy); + affixedData.created.add([copy]); + } + } + soundbox.play('Wood_End'); + this.compoundGhost.removeChildren(); + this.history.pushChange({ + type: 'creation', + created: affixedData.created + }); + callback(); + } + } +}; + +placeCopy.listeners.pointerupoutside = placeCopy.listeners.pointerup; diff --git a/src/node_requires/roomEditor/interactions/copyPaste.ts b/src/node_requires/roomEditor/interactions/copyPaste.ts new file mode 100644 index 000000000..fbdd3cf12 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/copyPaste.ts @@ -0,0 +1,126 @@ +import {IRoomEditorInteraction} from '..'; +import {Copy} from '../entityClasses/Copy'; +import {Tile} from '../entityClasses/Tile'; +import {TileLayer} from '../entityClasses/TileLayer'; + +import {snapToDiagonalGrid, snapToRectangularGrid} from '../common'; + +import {getTemplateFromId} from '../../resources/templates'; + +export const copy: IRoomEditorInteraction = { + ifListener: 'copy', + if() { + return this.riotEditor.currentTool === 'select' && this.currentSelection.size > 0; + }, + listeners: { + copy(e, riotEditor, affixedData, callback) { + this.clipboard.clear(); + for (const stuff of this.currentSelection) { + if (stuff instanceof Copy) { + this.clipboard.add([ + 'copy', + stuff.serialize() + ]); + } else if (stuff instanceof Tile) { + this.clipboard.add([ + 'tile', + stuff.serialize(), + stuff.parent + ]); + } + } + this.transformer.blink(); + callback(); + } + } +}; + +export const paste: IRoomEditorInteraction = { + ifListener: 'paste', + if() { + return this.clipboard.size > 0; + }, + listeners: { + paste(e, riotEditor, affixedData, callback) { + const createdSet = new Set<[Copy | Tile, TileLayer?]>(); + if (riotEditor.currentTool === 'select' && + this.currentSelection.size && + this.history.currentChange?.type === 'transformation' + ) { + this.history.snapshotTransforms(); + } + this.transformer.clear(); + const extraTileLayer = this.tileLayers.find(tl => tl.zIndex === 0) || new TileLayer({ + depth: 0, + tiles: [] + }, this); + for (const copied of this.clipboard) { + let created; + if (copied[0] === 'tile') { + const [, template, layer] = copied; + const target = this.tileLayers.includes(layer) ? layer : extraTileLayer; + created = new Tile(template, this, false); + target.addChild(created); + createdSet.add([created, target]); + } else if (copied[0] === 'copy') { + const [, template] = copied; + // Skip copies that no longer exist in the project + try { + getTemplateFromId(template.uid); + created = new Copy(template, this, false); + this.room.addChild(created); + createdSet.add([created]); + } catch (_) { + continue; + } + } else { + // Unsupported selectable entity + continue; + } + this.currentSelection.add(created); + } + if (extraTileLayer.children.length && !this.tileLayers.includes(extraTileLayer)) { + this.addTileLayer(extraTileLayer); + this.history.pushChange({ + type: 'tileLayerCreation', + created: extraTileLayer + }); + } else { + extraTileLayer.destroy(); + } + this.history.pushChange({ + type: 'creation', + created: createdSet + }); + if (riotEditor.currentTool !== 'select') { + riotEditor.setTool('select')(); + riotEditor.update(); + } + this.transformer.setup(true); + + // place the stuff under mouse cursor but do take the grid into account + const {mouse} = this.renderer.plugins.interaction; + const mousePos = mouse.getLocalPosition(this.room); + let dx = mousePos.x - this.transformer.transformPivotX, + dy = mousePos.y - this.transformer.transformPivotY; + if (this.riotEditor.gridOn) { + const snap = this.ctRoom.diagonalGrid ? snapToDiagonalGrid : snapToRectangularGrid; + const snapped = snap({ + x: dx, + y: dy + }, this.ctRoom.gridX, this.ctRoom.gridY); + dx = snapped.x; + dy = snapped.y; + } + this.transformer.transformPivotX += dx; + this.transformer.transformPivotY += dy; + this.transformer.applyTranslateX += dx; + this.transformer.applyTranslateY += dy; + this.transformer.applyTransforms(); + this.transformer.setup(); + riotEditor.refs.propertiesPanel.updatePropList(); + this.transformer.blink(); + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/history.ts b/src/node_requires/roomEditor/interactions/history.ts new file mode 100644 index 000000000..c5040c91a --- /dev/null +++ b/src/node_requires/roomEditor/interactions/history.ts @@ -0,0 +1,37 @@ +import {IRoomEditorInteraction} from '..'; + +export const undo: IRoomEditorInteraction = { + ifListener: 'undo', + if() { + // History object has its internal checks, + // and this is the only interaction that uses this listener, + // so always returning true is okay. + return true; + }, + listeners: { + undo(e, roomTag, affixedData, callback) { + if (this.history.undo()) { + e.data.originalEvent.preventDefault(); + } + callback(); + } + } +}; + +export const redo: IRoomEditorInteraction = { + ifListener: 'redo', + if() { + // History object has its internal checks, + // and this is the only interaction that uses this listener, + // so always returning true is okay. + return true; + }, + listeners: { + redo(e, roomTag, affixedData, callback) { + if (this.history.redo()) { + e.data.originalEvent.preventDefault(); + } + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/index.ts b/src/node_requires/roomEditor/interactions/index.ts new file mode 100644 index 000000000..9c4f228ba --- /dev/null +++ b/src/node_requires/roomEditor/interactions/index.ts @@ -0,0 +1,96 @@ +/* slint-disable no-use-before-define */ +import {RoomEditor} from '..'; +import {IRoomEditorRiotTag} from '../IRoomEditorRiotTag'; + +export enum EAllowedListeners { + pointertap, + pointerup, + pointerupoutside, + pointerdown, + pointermove, + pointerleave, + + // Custom events below + wheel, + + home, + + delete, + copy, + paste, + undo, + redo, + + nudgeright, + nudgeleft, + nudgeup, + nudgedown +} +export type AllowedListener = keyof typeof EAllowedListeners; +export const allowedListeners: AllowedListener[] = + Object.keys(EAllowedListeners) as AllowedListener[]; + +export type InteractionListener = ( + this: RoomEditor, + e: PIXI.InteractionEvent, + roomTag: IRoomEditorRiotTag, + affixedData: affixedInterface, + finishCallback: () => void +) => void; +export interface IRoomEditorInteraction { + ifListener: AllowedListener; + /** + * Checks if it is possible to run an interaction now. + * If this method returns true, all the further interactions will be skipped + * until the startingAction calls the provided finishCallback + */ + if: (this: RoomEditor, e: PIXI.InteractionEvent, roomTag: IRoomEditorRiotTag) => boolean; + listeners: Partial>>; +} + +import {updateMousePosition} from './mousePosLabel'; +import {moveCameraOnWheelPress} from './camera/move'; +import {goHome} from './camera/home'; +import {zoomInteraction} from './camera/zoom'; +import {placeCopy} from './copies/placeCopy'; +import {deleteCopies} from './copies/deleteCopies'; +import {placeTile} from './tiles/placeTile'; +import {deleteTiles} from './tiles/deleteTiles'; +import {select} from './transformer/select'; +import {nudgeLeft, nudgeRight, nudgeUp, nudgeDown} from './transformer/nudge'; +import {rotateSelection} from './transformer/rotate'; +import {moveSelection} from './transformer/move'; +import {scaleSelection} from './transformer/scale'; +import {deleteSelected} from './transformer/delete'; +import {copy, paste} from './copyPaste'; +import {undo, redo} from './history'; + +export const interactions = [ + updateMousePosition, // Ambient interaction — never blocks the queue + + nudgeLeft, + nudgeRight, + nudgeUp, + nudgeDown, + + copy, + paste, + undo, + redo, + + rotateSelection, + moveSelection, + scaleSelection, + deleteSelected, + select, + + deleteCopies, + placeCopy, + + deleteTiles, + placeTile, + + zoomInteraction, + moveCameraOnWheelPress, + goHome +]; diff --git a/src/node_requires/roomEditor/interactions/mousePosLabel.ts b/src/node_requires/roomEditor/interactions/mousePosLabel.ts new file mode 100644 index 000000000..52a0def47 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/mousePosLabel.ts @@ -0,0 +1,15 @@ +import {IRoomEditorInteraction} from '..'; + +const updateMousePosition: IRoomEditorInteraction = { + ifListener: 'pointermove', + if() { + const x = Math.round(this.snapTarget.x * 100) / 100, + y = Math.round(this.snapTarget.y * 100) / 100; + this.pointerCoords.text = `(${x}; ${y})`; + // This interaction never actually marks itself as valid + return false; + }, + listeners: {} +}; + +export {updateMousePosition}; diff --git a/src/node_requires/roomEditor/interactions/placementCalculator.ts b/src/node_requires/roomEditor/interactions/placementCalculator.ts new file mode 100644 index 000000000..0c3ff99ad --- /dev/null +++ b/src/node_requires/roomEditor/interactions/placementCalculator.ts @@ -0,0 +1,136 @@ +/* +This code was separated for DRY principle, as almost the same code +is used while placing tiles and copies. + +This code is intended to be used as part of pointermove event, +and returns a list of locations of ghost objects, which is not empty +only while using parallel placement. + +During the free placement, it may call placeImmediately as a callback +when a new object should be placed. +*/ + +import {fromRectangular, fromDiagonal, toRectangular, toDiagonal} from '../common'; + +type PlacementData = { + mode: 'free' | 'straight'; + startPos: PIXI.IPoint; + prevPos: PIXI.IPoint; + prevLength: number; + stepX: number; + stepY: number; + diagonalGrid: boolean; + gridX: number; + gridY: number; + noGrid: boolean; +}; + +type ghostPoints = { + x: number; + y: number; +}[]; +type ISimplePoint = { + x: number; + y: number; +}; + +// eslint-disable-next-line max-lines-per-function +export const calcPlacement = ( + newPos: PIXI.IPoint, + affixedData: PlacementData, + placeImmediately: (position: PIXI.IPoint) => void +): ghostPoints => { + const from = affixedData.diagonalGrid ? fromDiagonal : fromRectangular; + const to = affixedData.diagonalGrid ? toDiagonal : toRectangular; + // Correct placement position based on step size. + const newPosOnGrid = to(newPos, affixedData.gridX, affixedData.gridY), + startPosOnGrid = to(affixedData.startPos, affixedData.gridX, affixedData.gridY); + let newPosWSkips: ISimplePoint | PIXI.IPoint = from({ + x: newPosOnGrid.x - ((startPosOnGrid.x - newPosOnGrid.x) % affixedData.stepX), + y: newPosOnGrid.y - ((startPosOnGrid.y - newPosOnGrid.y) % affixedData.stepY) + }, affixedData.gridX, affixedData.gridY); + newPosWSkips = new PIXI.Point(newPosWSkips.x, newPosWSkips.y); + + // Free placement (drawing) + if (affixedData.mode === 'free') { + // When working without a grid, place copies in a strip, + // spacing of which depends on the grid size. + if (affixedData.noGrid) { + let dx = (newPos.x - affixedData.prevPos.x) / affixedData.gridX, + dy = (newPos.y - affixedData.prevPos.y) / affixedData.gridY; + const l = Math.sqrt(dx * dx + dy * dy); + if (l >= 1) { + dx /= l; + dy /= l; + const placeX = dx * affixedData.gridX + affixedData.prevPos.x, + placeY = dy * affixedData.gridY + affixedData.prevPos.y; + const newPlace = new PIXI.Point(placeX, placeY); + placeImmediately(newPlace); + affixedData.prevPos = newPlace; + } + return []; + } + // Skip spawning if position on-grid didn't change from the previous frame. + if (newPosWSkips.x === affixedData.prevPos.x && newPosWSkips.y === affixedData.prevPos.y) { + return []; + } + placeImmediately(newPosWSkips as PIXI.Point); + affixedData.prevPos = newPosWSkips as PIXI.Point; + return []; + } + + affixedData.prevPos = newPos; + + // Straight-line placement + const startGrid = to( + affixedData.startPos, + affixedData.gridX, + affixedData.gridY + ); + const endGrid = to( + newPos, + affixedData.gridX, + affixedData.gridY + ); + const dx = Math.abs(startGrid.x - endGrid.x), + dy = Math.abs(startGrid.y - endGrid.y); + const straightEndGrid: ISimplePoint = { + x: 0, + y: 0 + }; + const angle = Math.atan2(dy, dx); + if (Math.abs(angle) > Math.PI * 0.375 && Math.abs(angle) < Math.PI * 0.525) { + // Seems to be a vertical line + straightEndGrid.x = startGrid.x; + straightEndGrid.y = endGrid.y; + } else if (Math.abs(angle) < Math.PI * 0.125) { + // Seems to be a horizontal line + straightEndGrid.x = endGrid.x; + straightEndGrid.y = startGrid.y; + } else { + // It is more or so diagonal + const max = Math.max(dx, dy); + straightEndGrid.x = endGrid.x > startGrid.x ? + startGrid.x + max : + startGrid.x - max; + straightEndGrid.y = endGrid.y > startGrid.y ? + startGrid.y + max : + startGrid.y - max; + } + const incX = Math.sign(straightEndGrid.x - startGrid.x) * affixedData.stepX, + incY = Math.sign(straightEndGrid.y - startGrid.y) * affixedData.stepY; + const l = Math.max(dx / affixedData.stepX, dy / affixedData.stepY); + const ghosts = []; + // Calculate ghost positions + for (let i = 0, {x, y} = startGrid; + i < l; + i++, x += incX, y += incY + ) { + const localPos = from({ + x: x + incX, + y: y + incY + }, affixedData.gridX, affixedData.gridY); + ghosts.push(localPos); + } + return ghosts; +}; diff --git a/src/node_requires/roomEditor/interactions/tiles/ITilePatch.d.ts b/src/node_requires/roomEditor/interactions/tiles/ITilePatch.d.ts new file mode 100644 index 000000000..675800135 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/tiles/ITilePatch.d.ts @@ -0,0 +1,7 @@ +export interface ITilePatch { + startX: number; + startY: number; + spanX: number; + spanY: number; + texture: ITexture; +} diff --git a/src/node_requires/roomEditor/interactions/tiles/deleteTiles.ts b/src/node_requires/roomEditor/interactions/tiles/deleteTiles.ts new file mode 100644 index 000000000..308c60f98 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/tiles/deleteTiles.ts @@ -0,0 +1,44 @@ +import {IRoomEditorInteraction} from '../..'; +import {Tile} from '../../entityClasses/Tile'; +import {TileLayer} from '../../entityClasses/TileLayer'; + +type affixedData = { + deleted: Set<[Tile, TileLayer]>; +} + +export const deleteTiles: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + if (this.riotEditor.currentTool !== 'addTiles' || !this.riotEditor.currentTileLayer) { + return false; + } + const event = e.data.originalEvent; + return e.data.button === 0 && (event.ctrlKey || event.metaKey); + }, + listeners: { + pointerdown(e, riotTag, affixedData) { + affixedData.deleted = new Set(); + if (e.target instanceof Tile && e.target.parent === riotTag.currentTileLayer) { + const {parent} = e.target; + affixedData.deleted.add([e.target.detach(), parent]); + } + }, + pointermove(e, riotTag, affixedData) { + if (e.target instanceof Tile && e.target.parent === riotTag.currentTileLayer) { + const {parent} = e.target; + affixedData.deleted.add([e.target.detach(), parent]); + } + }, + pointerup(e, roomTag, affixedData, callback) { + if (affixedData.deleted.size) { + this.history.pushChange({ + type: 'deletion', + deleted: affixedData.deleted + }); + } + callback(); + } + } +}; + +deleteTiles.listeners.pointerupoutside = deleteTiles.listeners.pointerup; diff --git a/src/node_requires/roomEditor/interactions/tiles/placeTile.ts b/src/node_requires/roomEditor/interactions/tiles/placeTile.ts new file mode 100644 index 000000000..399863478 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/tiles/placeTile.ts @@ -0,0 +1,192 @@ +import {Tile} from '../../entityClasses/Tile'; +import {TileLayer} from '../../entityClasses/TileLayer'; +import {IRoomEditorInteraction, RoomEditor} from '../..'; +import {calcPlacement} from '../placementCalculator'; +import {ITilePatch} from './ITilePatch'; + +import {soundbox} from '../../../3rdparty/soundbox'; + +interface IAffixedData { + mode: 'free' | 'straight'; + startPos: PIXI.IPoint; + prevPos: PIXI.IPoint; + prevLength: number; + stepX: number; + stepY: number; + diagonalGrid: boolean; + gridX: number; + gridY: number; + noGrid: boolean; + created: Set<[Tile, TileLayer]>; +} + +interface ISimplePoint { + x: number; + y: number; +} + +const createTile = ( + pos: ISimplePoint, + texture: string, + frame: number, + editor: RoomEditor, + ghost?: boolean +) => new Tile({ + x: pos.x, + y: pos.y, + scale: { + x: 1, + y: 1 + }, + opacity: 1, + rotation: 0, + tint: 0xffffff, + frame, + texture +}, editor, ghost); + +export const createTilePatch = ( + tilePatch: ITilePatch, + startPos: ISimplePoint, + editor: RoomEditor, + ghost?: boolean +): Tile[] => { + const tiles: Tile[] = []; + const {texture} = tilePatch; + for (let x = 0; x < tilePatch.spanX; x++) { + for (let y = 0; y < tilePatch.spanY; y++) { + const frame = x + tilePatch.startX + + (y + tilePatch.startY) * texture.grid[0]; + tiles.push(createTile({ + x: startPos.x + x * texture.width, + y: startPos.y + y * texture.height + }, texture.uid, frame, editor, ghost)); + } + } + return tiles; +}; + +export const placeTile: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e, riotTag) { + if (this.riotEditor.currentTool !== 'addTiles' || !this.riotEditor.currentTileLayer) { + return false; + } + if (e.data.button !== 0) { + return false; + } + return Boolean(riotTag.tilePatch?.texture); + }, + listeners: { + pointerdown(e, riotTag, affixedData) { + this.compoundGhost.removeChildren(); + affixedData.created = new Set(); + // Two possible modes: placing in straight vertical/horizontal/diagonal lines + // and in a free form, like drawing with a brush. + // Straight method creates a ghost preview before actually creating all the copies, + // while the free form places copies as a user moves their cursor. + if (e.data.originalEvent.shiftKey) { + affixedData.mode = 'straight'; + affixedData.prevLength = 1; + } else { + affixedData.mode = 'free'; + } + affixedData.gridX = this.ctRoom.gridX; + affixedData.gridY = this.ctRoom.gridY; + const {texture} = riotTag.tilePatch; + // Allow skipping grid cells if texture's and room's grids match + if (this.ctRoom.gridX === texture.width && this.ctRoom.gridY === texture.height) { + affixedData.stepX = riotTag.tilePatch.spanX; + affixedData.stepY = riotTag.tilePatch.spanY; + } else { + affixedData.stepX = affixedData.stepY = 1; + } + affixedData.diagonalGrid = this.ctRoom.diagonalGrid; + affixedData.noGrid = !riotTag.gridOn || riotTag.freePlacementMode; + affixedData.startPos = affixedData.prevPos = this.snapTarget.position.clone(); + const newTiles = createTilePatch( + riotTag.tilePatch, + affixedData.startPos, + this + ); + riotTag.currentTileLayer.addChild(...newTiles); + for (const tile of newTiles) { + affixedData.created.add([tile, tile.parent]); + } + soundbox.play('Wood_Start'); + }, + pointermove(e, riotTag, affixedData) { + affixedData.noGrid = !riotTag.gridOn || riotTag.freePlacementMode; + const newPos = this.snapTarget.position.clone(); + const ghosts = calcPlacement( + newPos, + affixedData, + (position => { + soundbox.play('Wood_Start'); + const newTiles = createTilePatch( + riotTag.tilePatch, + position, + this + ); + riotTag.currentTileLayer.addChild(...newTiles); + for (const tile of newTiles) { + affixedData.created.add([tile, tile.parent]); + } + }) + ); + // Play feedback sound on length change + if (ghosts.length !== affixedData.prevLength) { + affixedData.prevLength = ghosts.length; + soundbox.play('Wood_Start'); + } + // Remove excess ghost instances + if (this.compoundGhost.children.length > ghosts.length) { + this.compoundGhost.removeChildren(ghosts.length); + } + // Add missing ghost instances + // Tile patches are grouped into containers + while (this.compoundGhost.children.length < ghosts.length) { + const ghostTilePatch = new PIXI.Container(); + ghostTilePatch.addChild(...createTilePatch(riotTag.tilePatch, { + x: 0, + y: 0 + }, this, true)); + this.compoundGhost.addChild(ghostTilePatch); + } + // Reposition ghost containers + for (let i = 0; i < ghosts.length; i++) { + const ghost = this.compoundGhost.children[i]; + ghost.x = ghosts[i].x; + ghost.y = ghosts[i].y; + } + }, + pointerup(e, riotTag, affixedData, callback) { + if (affixedData.mode === 'straight') { + // Replace all the preview copies with real ones + for (const ghost of this.compoundGhost.children) { + const newTiles = createTilePatch( + riotTag.tilePatch, + ghost.position, + this + ); + riotTag.currentTileLayer.addChild(...newTiles); + for (const tile of newTiles) { + affixedData.created.add([tile, tile.parent]); + } + } + } + soundbox.play('Wood_End'); + this.compoundGhost.removeChildren(); + this.stage.interactive = true; // Causes to rediscover nested elements + if (affixedData.created.size) { + this.history.pushChange({ + type: 'creation', + created: affixedData.created + }); + } + callback(); + } + } +}; + +placeTile.listeners.pointerupoutside = placeTile.listeners.pointerup; diff --git a/src/node_requires/roomEditor/interactions/transformer/delete.ts b/src/node_requires/roomEditor/interactions/transformer/delete.ts new file mode 100644 index 000000000..da6ac95e0 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/transformer/delete.ts @@ -0,0 +1,32 @@ +import {IRoomEditorInteraction} from '..'; +import {Copy} from '../../entityClasses/Copy'; +import {Tile} from '../../entityClasses/Tile'; +import {TileLayer} from '../../entityClasses/TileLayer'; + +export const deleteSelected: IRoomEditorInteraction = { + ifListener: 'delete', + if() { + return this.riotEditor.currentTool === 'select' && this.currentSelection.size > 0; + }, + listeners: { + delete(e, riotEditor, affixedData, callback) { + const changes = new Set<[Copy | Tile, TileLayer?]>(); + for (const stuff of this.currentSelection) { + if (stuff instanceof Tile) { + const {parent} = stuff; + changes.add([stuff.detach(), parent]); + } else if (stuff instanceof Copy) { + changes.add([stuff.detach()]); + } + } + this.history.pushChange({ + type: 'deletion', + deleted: changes + }); + this.transformer.clear(); + riotEditor.refs.propertiesPanel.updatePropList(); + + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/transformer/move.ts b/src/node_requires/roomEditor/interactions/transformer/move.ts new file mode 100644 index 000000000..d31176eae --- /dev/null +++ b/src/node_requires/roomEditor/interactions/transformer/move.ts @@ -0,0 +1,57 @@ +import {IRoomEditorInteraction} from '../..'; +import {snapToRectangularGrid, snapToDiagonalGrid} from '../../common'; + +interface IAffixedData { + startingGlobalPos: PIXI.Point; + startingTranslateX: number; + startingTranslateY: number; + startingPivotX: number; + startingPivotY: number; +} + +export const moveSelection: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + if (this.riotEditor.currentTool !== 'select') { + return false; + } + if (this.currentSelection.size === 0) { + return false; + } + return e.target === this.transformer.handleCenter; + }, + listeners: { + pointerdown(e, roomTag, affixed) { + affixed.startingGlobalPos = e.data.global.clone(); + affixed.startingTranslateX = this.transformer.applyTranslateX; + affixed.startingTranslateY = this.transformer.applyTranslateY; + affixed.startingPivotX = this.transformer.transformPivotX; + affixed.startingPivotY = this.transformer.transformPivotY; + }, + pointermove(e, roomTag, affixed) { + let delta = { + x: (e.data.global.x - affixed.startingGlobalPos.x) * this.camera.scale.x, + y: (e.data.global.y - affixed.startingGlobalPos.y) * this.camera.scale.x + }; + // Ignore grid when alt key is pressed, or when the grid is disabled + if (!e.data.originalEvent.altKey && roomTag.gridOn) { + // Otherwise, snap delta to a grid + if (this.ctRoom.diagonalGrid) { + delta = snapToDiagonalGrid(delta, this.ctRoom.gridX, this.ctRoom.gridY); + } else { + delta = snapToRectangularGrid(delta, this.ctRoom.gridX, this.ctRoom.gridY); + } + } + this.transformer.applyTranslateX = affixed.startingTranslateX + delta.x; + this.transformer.applyTranslateY = affixed.startingTranslateY + delta.y; + this.transformer.transformPivotX = affixed.startingPivotX + delta.x; + this.transformer.transformPivotY = affixed.startingPivotY + delta.y; + this.transformer.applyTransforms(); + this.riotEditor.refs.propertiesPanel.updatePropList(); + }, + pointerup(e, roomTag, affixedData, callback) { + this.history.snapshotTransforms(); + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/transformer/nudge.ts b/src/node_requires/roomEditor/interactions/transformer/nudge.ts new file mode 100644 index 000000000..addc0bc2c --- /dev/null +++ b/src/node_requires/roomEditor/interactions/transformer/nudge.ts @@ -0,0 +1,66 @@ +import {IRoomEditorInteraction} from '..'; + +export const nudgeDown: IRoomEditorInteraction = { + ifListener: 'nudgedown', + if() { + return Boolean(this.riotEditor.currentTool === 'select' && this.currentSelection.size); + }, + listeners: { + nudgedown(e, roomTag, affixedData, callback) { + const delta = e.data.originalEvent.ctrlKey ? 1 : this.ctRoom.gridY; + this.transformer.applyTranslateY += delta; + this.transformer.transformPivotY += delta; + this.transformer.applyTransforms(); + callback(); + } + } +}; + +export const nudgeUp: IRoomEditorInteraction = { + ifListener: 'nudgeup', + if() { + return Boolean(this.riotEditor.currentTool === 'select' && this.currentSelection.size); + }, + listeners: { + nudgeup(e, roomTag, affixedData, callback) { + const delta = e.data.originalEvent.ctrlKey ? 1 : this.ctRoom.gridY; + this.transformer.applyTranslateY -= delta; + this.transformer.transformPivotY -= delta; + this.transformer.applyTransforms(); + callback(); + } + } +}; + +export const nudgeLeft: IRoomEditorInteraction = { + ifListener: 'nudgeleft', + if() { + return Boolean(this.riotEditor.currentTool === 'select' && this.currentSelection.size); + }, + listeners: { + nudgeleft(e, roomTag, affixedData, callback) { + const delta = e.data.originalEvent.ctrlKey ? 1 : this.ctRoom.gridX; + this.transformer.applyTranslateX -= delta; + this.transformer.transformPivotX -= delta; + this.transformer.applyTransforms(); + callback(); + } + } +}; + +export const nudgeRight: IRoomEditorInteraction = { + ifListener: 'nudgeright', + if() { + return Boolean(this.riotEditor.currentTool === 'select' && this.currentSelection.size); + }, + listeners: { + nudgeright(e, roomTag, affixedData, callback) { + const delta = e.data.originalEvent.ctrlKey ? 1 : this.ctRoom.gridX; + this.transformer.applyTranslateX += delta; + this.transformer.transformPivotX += delta; + this.transformer.applyTransforms(); + this.history.snapshotTransforms(); + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/transformer/rotate.ts b/src/node_requires/roomEditor/interactions/transformer/rotate.ts new file mode 100644 index 000000000..d77c3a3c3 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/transformer/rotate.ts @@ -0,0 +1,46 @@ +import {IRoomEditorInteraction} from '../..'; + +import {pdn, degToRad, radToDeg} from '../../../utils/trigo'; + +export const rotateSelection: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + if (this.riotEditor.currentTool !== 'select') { + return false; + } + if (this.currentSelection.size === 0) { + return false; + } + return e.target === this.transformer.handleRotate; + }, + listeners: { + pointermove(e) { + const globalPivot = this.room.toGlobal(new PIXI.Point( + this.transformer.transformPivotX, + this.transformer.transformPivotY + )); + let rad = pdn( + globalPivot.x, + globalPivot.y, + e.data.global.x, + e.data.global.y + ); + // When the group is mirrored horizontally, + // the handle appears on the left side, not on the right side. + if (this.transformer.applyScaleX < 0) { + rad += Math.PI; + } + if (e.data.originalEvent.shiftKey) { + // Snap at 15 degrees + rad = degToRad(Math.round(radToDeg(rad) / 15) * 15); + } + this.transformer.applyRotation = rad; + this.transformer.applyTransforms(); + this.riotEditor.refs.propertiesPanel.updatePropList(); + }, + pointerup(e, roomTag, affixedData, callback) { + this.history.snapshotTransforms(); + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/transformer/scale.ts b/src/node_requires/roomEditor/interactions/transformer/scale.ts new file mode 100644 index 000000000..75d46bc24 --- /dev/null +++ b/src/node_requires/roomEditor/interactions/transformer/scale.ts @@ -0,0 +1,154 @@ +import {IRoomEditorInteraction} from '../..'; +import {Handle} from '../../entityClasses/Transformer'; + +import {rotateRad} from '../../../utils/trigo'; +import {snapToRectangularGrid, snapToDiagonalGrid} from '../../common'; + +interface IAffixedData { + axes: 'x' | 'y' | 'xy'; + startingSX: number; + startingSY: number; + startingTX: number; + startingTY: number; + startingPX: number; + startingPY: number; + startDragRoom: PIXI.IPoint; +} + +export const scaleSelection: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + if (this.riotEditor.currentTool !== 'select') { + return false; + } + if (this.currentSelection.size === 0) { + return false; + } + return this.transformer.scaleHandles.includes(e.target as Handle); + }, + listeners: { + pointerdown(e, roomTag, affixedData) { + // Fix scaling to zero + affixedData.startingSX = this.transformer.applyScaleX || 1; + affixedData.startingSY = this.transformer.applyScaleY || 1; + affixedData.startingTX = this.transformer.applyTranslateX; + affixedData.startingTY = this.transformer.applyTranslateY; + affixedData.startingPX = this.transformer.transformPivotX; + affixedData.startingPY = this.transformer.transformPivotY; + affixedData.startDragRoom = this.room.toLocal(e.target.position); + const t = this.transformer; + if ([t.handleBL, t.handleBR, t.handleTL, t.handleTR].includes(e.target as Handle)) { + affixedData.axes = 'xy'; + } else if ([t.handleR, t.handleL].includes(e.target as Handle)) { + affixedData.axes = 'x'; + } else { + affixedData.axes = 'y'; + } + }, + // eslint-disable-next-line max-lines-per-function + pointermove(e, riotTag, affixedData) { + const {transformer} = this; + const scaleSymmetrically = e.data.originalEvent.ctrlKey; + const proportionalScale = e.data.originalEvent.shiftKey && affixedData.axes === 'xy'; + const snapToGrid = !e.data.originalEvent.altKey && riotTag.gridOn; + const {axes} = affixedData; + const dragEndRoom = this.room.toLocal(e.data.global); + if (snapToGrid) { + if (this.ctRoom.diagonalGrid) { + ({x: dragEndRoom.x, y: dragEndRoom.y} = snapToDiagonalGrid( + dragEndRoom, + this.ctRoom.gridX, + this.ctRoom.gridY + )); + } else { + ({x: dragEndRoom.x, y: dragEndRoom.y} = snapToRectangularGrid( + dragEndRoom, + this.ctRoom.gridX, + this.ctRoom.gridY + )); + } + } + + const startUnrotated = rotateRad( + affixedData.startDragRoom.x - affixedData.startingPX, + affixedData.startDragRoom.y - affixedData.startingPY, + -transformer.applyRotation + ); + const endUnrotated = rotateRad( + dragEndRoom.x - affixedData.startingPX, + dragEndRoom.y - affixedData.startingPY, + -transformer.applyRotation + ); + // kx and ky describe how much a container expanded relative to its starting width + let kx = endUnrotated[0] / startUnrotated[0], + ky = endUnrotated[1] / startUnrotated[1]; + if (!Number.isFinite(kx)) { + kx = 1; + } + if (!Number.isFinite(ky)) { + ky = 1; + } + if (proportionalScale) { + const max = Math.max(Math.abs(kx), Math.abs(ky)); + kx = (Math.sign(kx) || 1) * max; + ky = (Math.sign(ky) || 1) * max; + if (Math.sign(kx * ky) === -1) { + // Constraint handles to its own diagonal + kx *= -1; + } + // Project an end point along a diagonal + endUnrotated[0] = kx * startUnrotated[0]; + endUnrotated[1] = ky * startUnrotated[1]; + } + if (!scaleSymmetrically) { + kx = kx * 0.5 + 0.5; + ky = ky * 0.5 + 0.5; + } + transformer.applyTranslateX = affixedData.startingTX; + transformer.applyTranslateY = affixedData.startingTY; + transformer.transformPivotX = affixedData.startingPX; + transformer.transformPivotY = affixedData.startingPY; + if (axes === 'x' || axes === 'xy') { + transformer.applyScaleX = affixedData.startingSX * kx || 1; + if (!scaleSymmetrically) { + // Shift the pivot and update the translate values of the transformer widget + // so entities slide in the specified direction, + // keeping the opposing side in its place + const shift = rotateRad( + endUnrotated[0] - startUnrotated[0], + 0, + transformer.applyRotation + ); + transformer.applyTranslateX += shift[0] / 2; + transformer.applyTranslateY += shift[1] / 2; + transformer.transformPivotX += shift[0] / 2; + transformer.transformPivotY += shift[1] / 2; + } + } + if (axes === 'y' || axes === 'xy') { + transformer.applyScaleY = affixedData.startingSY * ky || 1; + if (!scaleSymmetrically) { + // Shift the pivot and update the translate values of the transformer widget + // so entities slide in the specified direction, + // keeping the opposing side in its place + const shift = rotateRad( + 0, + endUnrotated[1] - startUnrotated[1], + transformer.applyRotation + ); + transformer.applyTranslateX += shift[0] * 0.5; + transformer.applyTranslateY += shift[1] * 0.5; + transformer.transformPivotX += shift[0] * 0.5; + transformer.transformPivotY += shift[1] * 0.5; + } + } + + transformer.applyTransforms(); + this.riotEditor.refs.propertiesPanel.updatePropList(); + }, + pointerup(e, roomTag, affixedData, callback) { + this.history.snapshotTransforms(); + callback(); + } + } +}; diff --git a/src/node_requires/roomEditor/interactions/transformer/select.ts b/src/node_requires/roomEditor/interactions/transformer/select.ts new file mode 100644 index 000000000..b1dcf12dd --- /dev/null +++ b/src/node_requires/roomEditor/interactions/transformer/select.ts @@ -0,0 +1,165 @@ +import {IRoomEditorInteraction} from '../..'; +import {Copy} from '../../entityClasses/Copy'; +import {Tile} from '../../entityClasses/Tile'; + +interface IAffixedData { + startRoomPos: PIXI.IPoint; + startClientPos: PIXI.IPoint; + startSelected: PIXI.DisplayObject; + mode: 'pick' | 'add' | 'remove' | 'toggle'; +} + +const modifySet = ( + set: Set, + delta: PIXI.DisplayObject[], + mode: IAffixedData['mode'] +) => { + switch (mode) { + case 'add': + for (const elt of delta) { + set.add(elt); + } + break; + case 'remove': + for (const elt of delta) { + set.delete(elt); + } + break; + case 'toggle': + for (const elt of delta) { + if (set.has(elt)) { + set.delete(elt); + } else { + set.add(elt); + } + } + break; + default: + set.clear(); + for (const elt of delta) { + set.add(elt); + } + break; + } +}; + +const getCenter = function (obj: PIXI.DisplayObject, room: PIXI.Container): PIXI.IPoint { + const bounds = obj.getBounds(); + const centerGlobal = new PIXI.Point(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2); + return room.toLocal(centerGlobal); +}; + +/** + * An interaction that selects individual objects on clicks + * and multiple ones on click+drag, in a rectangular selection. + * Manages RoomEditor.marqueeBox position. + * + * Depending on what keys were pressed on selection start (ctrl, shift, alt), + * the operation shifts between three different modes (toggle, add, remove) + */ +const select: IRoomEditorInteraction = { + ifListener: 'pointerdown', + if(e) { + if (e.data.button !== 0) { + return false; + } + return this.riotEditor.currentTool === 'select'; + }, + listeners: { + pointerdown(e, riotTag, affixedData) { + if (e.data.originalEvent.shiftKey) { + affixedData.mode = 'add'; + } else if (e.data.originalEvent.ctrlKey) { + affixedData.mode = 'toggle'; + } else if (e.data.originalEvent.altKey) { + affixedData.mode = 'remove'; + } else { + affixedData.mode = 'pick'; + } + affixedData.startClientPos = e.data.global.clone(); + affixedData.startRoomPos = this.room.toLocal(e.data.global); + this.marqueeBox.redrawBox(affixedData.startRoomPos.x, affixedData.startRoomPos.y, 0, 0); + affixedData.startSelected = e.target; + }, + pointermove(e, riotTag, affixedData) { + const roomPos = this.room.toLocal(e.data.global); + this.marqueeBox.visible = true; + this.marqueeBox.redrawBox( + affixedData.startRoomPos.x, + affixedData.startRoomPos.y, + roomPos.x - affixedData.startRoomPos.x, + roomPos.y - affixedData.startRoomPos.y + ); + }, + pointerup(e, riotTag, affixedData, callback) { + // Apply any possible property changes to the previous selectio set + this.riotEditor.refs.propertiesPanel.applyChanges(); + + const selectMap: [boolean, Iterable][] = [ + [this.selectCopies, this.copies], + [this.selectTiles, this.tiles] + ]; + const roomPos = this.room.toLocal(e.data.global); + const dxClient = e.data.global.x - affixedData.startClientPos.x, + dyClient = e.data.global.y - affixedData.startClientPos.y; + const lClient = Math.sqrt(dxClient ** 2 + dyClient ** 2); + // Too small selections on a client scale count as clicks + if (lClient < 8) { + let s = affixedData.startSelected, + currentSelection; + // Pick a suitable entity under the cursor (try both from pointerdown and pointerup) + if ((s instanceof Copy && this.selectCopies) || + (s instanceof Tile && this.selectTiles && !s.parent.isHidden) + ) { + currentSelection = s; + } else { + s = e.target; + if ((s instanceof Copy && this.selectCopies) || + (s instanceof Tile && this.selectTiles && !s.parent.isHidden) + ) { + currentSelection = s; + } + } + if (currentSelection) { + modifySet(this.currentSelection, [s], affixedData.mode); + } else if (affixedData.mode === 'pick') { + // If no keyboard modifiers were active and a user clicked, clear the selection + this.currentSelection.clear(); + } + } else { + // Rectangular selection + // Loop through all the selectable elements in the room and put into the selection + // those which *visible* centers are inside the rectangle (ignore pivots). + const delta = []; + const rect = new PIXI.Rectangle( + Math.min(affixedData.startRoomPos.x, roomPos.x), + Math.min(affixedData.startRoomPos.y, roomPos.y), + Math.abs(roomPos.x - affixedData.startRoomPos.x), + Math.abs(roomPos.y - affixedData.startRoomPos.y) + ); + for (const selectType of selectMap) { + if (selectType[0]) { + for (const object of selectType[1]) { + if (object instanceof Tile && object.parent.isHidden) { + continue; + } + const {x, y} = getCenter(object, this.room); + if (rect.contains(x, y)) { + delta.push(object); + } + } + } + } + modifySet(this.currentSelection, delta, affixedData.mode); + } + this.transformer.setup(); + this.marqueeBox.visible = false; + this.riotEditor.refs.propertiesPanel.updatePropList(); + callback(); + } + } +}; + +select.listeners.pointerupoutside = select.listeners.pointerup; + +export {select}; diff --git a/src/node_requires/themes/3rdParty/highlight.js/RosePine.css b/src/node_requires/themes/3rdParty/highlight.js/RosePine.css new file mode 100644 index 000000000..567682763 --- /dev/null +++ b/src/node_requires/themes/3rdParty/highlight.js/RosePine.css @@ -0,0 +1,263 @@ +pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em +} + +code.hljs { + padding: 3px 5px +} + +.hljs { + background: #26233a +} + +.hljs, +.hljs-subst { + color: #e0def4 +} + +.hljs-selector-tag { + color: #9ccfd8 +} + +.hljs-selector-id { + color: #c4a7e7; + font-weight: 700 +} + +.hljs-selector-attr, +.hljs-selector-class { + color: #c4a7e7 +} + +.hljs-property, +.hljs-selector-pseudo { + color: #ebbcba +} + +.hljs-addition { + background-color: rgba(156, 207, 216, .5) +} + +.hljs-deletion { + background-color: rgba(235, 111, 146, .5) +} + +.hljs-built_in, +.hljs-class, +.hljs-type { + color: #c4a7e7 +} + +.hljs-function, +.hljs-function>.hljs-title, +.hljs-title.hljs-function { + color: #ebbcba +} + +.hljs-keyword, +.hljs-literal, +.hljs-symbol { + color: #9ccfd8 +} + +.hljs-number { + color: #f6c177 +} + +.hljs-regexp { + color: #f6c177 +} + +.hljs-string { + color: #9ccfd8 +} + +.hljs-title { + color: #c4a7e7 +} + +.hljs-params { + color: #e0def4 +} + +.hljs-bullet { + color: #9ccfd8 +} + +.hljs-code { + color: #c4a7e7 +} + +.hljs-emphasis { + font-style: italic +} + +.hljs-formula { + color: #c4a7e7 +} + +.hljs-strong { + font-weight: 700 +} + +.hljs-link:hover { + text-decoration: underline +} + +.hljs-comment, +.hljs-quote { + color: #6e6a86 +} + +.hljs-doctag { + color: #c4a7e7 +} + +.hljs-meta, +.hljs-meta .hljs-keyword { + color: #31748f +} + +.hljs-meta .hljs-string { + color: #9ccfd8 +} + +.hljs-attr { + color: #c4a7e7 +} + +.hljs-attribute { + color: #e0def4 +} + +.hljs-name { + color: #9ccfd8 +} + +.hljs-section { + color: #ebbcba +} + +.hljs-tag { + color: #9ccfd8 +} + +.hljs-template-variable, +.hljs-variable { + color: #e0def4 +} + +.hljs-template-tag { + color: #31748f +} + +.language-abnf .hljs-attribute { + color: #ebbcba +} + +.language-abnf .hljs-symbol { + color: #f6c177 +} + +.language-apache .hljs-attribute { + color: #ebbcba +} + +.language-apache .hljs-section { + color: #9ccfd8 +} + +.language-arduino .hljs-built_in { + color: #ebbcba +} + +.language-aspectj .hljs-meta { + color: #eb6f92 +} + +.language-aspectj>.hljs-title { + color: #ebbcba +} + +.language-bnf .hljs-attribute { + color: #c4a7e7 +} + +.language-clojure .hljs-name { + color: #ebbcba +} + +.language-clojure .hljs-symbol { + color: #f6c177 +} + +.language-coq .hljs-built_in { + color: #ebbcba +} + +.language-cpp .hljs-meta .hljs-string { + color: #c4a7e7 +} + +.language-css .hljs-built_in { + color: #ebbcba +} + +.language-css .hljs-keyword { + color: #eb6f92 +} + +.language-diff .hljs-meta, +.language-ebnf .hljs-attribute { + color: #c4a7e7 +} + +.language-glsl .hljs-built_in { + color: #ebbcba +} + +.language-groovy .hljs-meta:not(:first-child), +.language-haxe .hljs-meta, +.language-java .hljs-meta { + color: #eb6f92 +} + +.language-ldif .hljs-attribute { + color: #c4a7e7 +} + +.language-lisp .hljs-name, +.language-lua .hljs-built_in, +.language-moonscript .hljs-built_in, +.language-nginx .hljs-attribute { + color: #ebbcba +} + +.language-nginx .hljs-section { + color: #31748f +} + +.language-pf .hljs-built_in, +.language-processing .hljs-built_in { + color: #ebbcba +} + +.language-scss .hljs-keyword, +.language-stylus .hljs-keyword { + color: #9ccfd8 +} + +.language-swift .hljs-meta { + color: #eb6f92 +} + +.language-vim .hljs-built_in { + color: #ebbcba; + font-style: italic +} + +.language-yaml .hljs-meta { + color: #eb6f92 +} diff --git a/src/node_requires/themes/index.ts b/src/node_requires/themes/index.ts index 591bee218..7c67350bc 100644 --- a/src/node_requires/themes/index.ts +++ b/src/node_requires/themes/index.ts @@ -1,4 +1,4 @@ -const path = require('path'); +import {join} from 'path'; const defaultTheme = 'Day'; const defaultMonacoTheme = defaultTheme; @@ -7,13 +7,16 @@ const builtInThemes = [ 'SpringStream', 'Ghost', 'Forest', + 'Nord', 'Horizon', 'PooxelGreen', 'PooxelBlue', + 'RosePineDawn', + 'RosePineMoon', + 'RosePine', 'LucasDracula', 'Night', - 'HCBlack', - 'Nord' + 'HCBlack' ]; interface ITheme { name: string; @@ -22,6 +25,21 @@ interface ITheme { css: string; } +// @see https://mmazzarolo.com/blog/2021-10-10-on-toggling-stylesheets/ +const waitForStylesheet = (): Promise => { + const stylesheet = [...document.styleSheets].find(s => s.ownerNode === document.getElementById('themeCSS')); + const oldHref = stylesheet?.href; + return new Promise((resolve) => { + const interval = setInterval(() => { + const stylesheet2 = [...document.styleSheets].find(s => s.ownerNode === document.getElementById('themeCSS')); + if (stylesheet2 && (!oldHref || (stylesheet2.href && oldHref !== stylesheet2.href))) { + clearInterval(interval); + resolve(); + } + }, 20); + }); +}; + var currentSwatches: Record; const registeredThemes: ITheme[] = []; @@ -34,7 +52,7 @@ const updateSwatches = (): void => { swatchTester.style.display = 'none'; document.body.appendChild(swatchTester); swatchTester.innerText = 'sausage'; - for (const swatch of ['act', 'acttext', 'accent1', 'borderPale', 'borderBright', 'text', 'backgroundDeeper', 'act-contrast', 'acttext-contrast', 'accent1-contrast']) { + for (const swatch of ['act', 'acttext', 'accent1', 'borderPale', 'borderBright', 'text', 'background', 'backgroundDeeper', 'act-contrast', 'acttext-contrast', 'accent1-contrast', 'red', 'green', 'orange']) { swatchTester.setAttribute('css-swatch', swatch); const style = window.getComputedStyle(swatchTester); currentSwatches[swatch] = style.getPropertyValue('color'); @@ -49,12 +67,12 @@ const mod = { } let monacoTheme; try { - monacoTheme = require(path.join('./data/node_requires/monaco-themes', `${name}.json`)); + monacoTheme = require(join('./data/node_requires/monaco-themes', `${name}.json`)); (window as Window).monaco.editor.defineTheme(name, monacoTheme); } catch (e) { // eslint-disable-next-line no-console console.warn('Could not load a monaco theme due to an error:', e, '\nFalling back to the default theme.'); - monacoTheme = require(path.join('./data/node_requires/monaco-themes', `${defaultMonacoTheme}.json`)); + monacoTheme = require(join('./data/node_requires/monaco-themes', `${defaultMonacoTheme}.json`)); (window as Window).monaco.editor.defineTheme(name, monacoTheme); } const css = `./data/theme${name}.css`; @@ -89,20 +107,19 @@ const mod = { } await fs.lstat(theme.css); const link = (document.getElementById('themeCSS') as HTMLLinkElement); - link.addEventListener('load', () => { - updateSwatches(); - }, { - once: true - }); // Avoid flickering on startup theme reloading if (link.href !== theme.css) { + const theWait = waitForStylesheet(); link.href = theme.css; + await theWait; + updateSwatches(); } (window as Window).monaco.editor.setTheme(theme.name); (window as Window).signals.trigger('UIThemeChanged', name); localStorage.UItheme = name; } catch (oO) { (window as Window).alertify.error(`Could not load theme ${name}. Rolling back to the default ${defaultTheme}.`); + console.error(oO); await mod.switchToTheme(defaultTheme); } }, @@ -123,6 +140,18 @@ const mod = { ...currentSwatches }; }, + getPixiSwatch(color: string): number { + if (!currentSwatches) { + updateSwatches(); + } + return PIXI.utils.rgb2hex(currentSwatches[color].split(', ').map(i => parseInt(i.replace(/[^0-9]/g, ''), 10) / 255)); + }, + getSwatch(color: string): string { + if (!currentSwatches) { + updateSwatches(); + } + return currentSwatches[color]; + }, updateSwatches }; diff --git a/src/node_requires/imageUtils.ts b/src/node_requires/utils/imageUtils.ts similarity index 100% rename from src/node_requires/imageUtils.ts rename to src/node_requires/utils/imageUtils.ts diff --git a/src/node_requires/utils/propUtils.ts b/src/node_requires/utils/propUtils.ts new file mode 100644 index 000000000..108357dc0 --- /dev/null +++ b/src/node_requires/utils/propUtils.ts @@ -0,0 +1,30 @@ +const getProp = function (context: unknown, path: string): unknown { + var way = path.split(/(? 1) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + context = (context as any)[way[0]]; + way.shift(); + } + return context; +}; + +const writeProp = function (context: unknown, path: string, value: unknown): void { + var way = path.split(/(? 2) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (!(way[0] in (context as any))) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (context as any)[way[0]] = {}; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + context = (context as any)[way[0]]; + way.shift(); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (context as any)[way[0]] = value; +}; + +export { + getProp, + writeProp +}; diff --git a/src/node_requires/utils/trigo.ts b/src/node_requires/utils/trigo.ts new file mode 100644 index 000000000..9e460f5f4 --- /dev/null +++ b/src/node_requires/utils/trigo.ts @@ -0,0 +1,51 @@ +/** lengthdir_x */ +export var ldx = function ldx(l: number, d: number): number { + return l * Math.cos(d); +}; +/** lengthdir_y */ +export var ldy = function ldy(l: number, d: number): number { + return l * Math.sin(d); +}; +/** Point-point DirectioN */ +export var pdn = function pdn(x1: number, y1: number, x2: number, y2: number): number { + return Math.atan2(y2 - y1, x2 - x1); +}; +/** Point-point DistanCe */ +export var pdc = function pdc(x1: number, y1: number, x2: number, y2: number): number { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); +}; +export var degToRad = function degToRad(deg: number): number { + return deg * Math.PI / -180; +}; +export var radToDeg = function radToDeg(rad: number): number { + return rad / Math.PI * -180; +}; +/** + * Rotates a vector (x; y) by rad around (0; 0) + * @param {number} x The x component + * @param {number} y The y component + * @param {number} rad The radian value to rotate by + * @returns {Array} A pair of new `x` and `y` parameters. + */ +export var rotateRad = function rotateRad(x: number, y: number, rad: number): [number, number] { + const sin = Math.sin(rad), + cos = Math.cos(rad); + return [ + cos * x - sin * y, + cos * y + sin * x + ]; +}; +export var deltaDirRad = function deltaDirRad(dir1: number, dir2: number): number { + dir1 = ((dir1 % (Math.PI * 2)) + Math.PI * 2) % (Math.PI * 2); + dir2 = ((dir2 % (Math.PI * 2)) + Math.PI * 2) % (Math.PI * 2); + var t = dir1, + h = dir2, + ta = h - t; + if (ta > Math.PI) { + ta -= Math.PI * 2; + } + if (ta < -Math.PI) { + ta += Math.PI * 2; + } + return ta; +}; diff --git a/src/projectTemplates/Platformer.ict b/src/projectTemplates/Platformer.ict index 255b90880..665b65ab0 100644 --- a/src/projectTemplates/Platformer.ict +++ b/src/projectTemplates/Platformer.ict @@ -1,4 +1,4 @@ -ctjsVersion: 2.0.0 +ctjsVersion: 2.2.0 notes: /* empty */ libs: place: @@ -316,129 +316,164 @@ templates: - type: template name: Character depth: 10 - oncreate: |- - this.maxSpeed = 10; - this.jumpSpeed = 20; - this.wallJumpSpeed = 10; - this.wallJumpSideSpeed = 15; - this.wallSlideSpeed = 5; + texture: 21FMtPWdzD4gzQ + visible: true + extends: + cgroup: Hero + lastmod: 1661093854880 + uid: N5RBGbB6K894HC + events: + - lib: core + arguments: {} + code: >- + this.maxSpeed = 10; - this.gravity = 1; - this.gravityDir = 90; + this.jumpSpeed = 20; - // Acceleration / Deceleration values for horizontal speed - this.groundAccDec = 1.5; - this.airAccDec = 0.3; // Give little control over character while in air - this.iceAccDec = 0.2; // Give even lesser control while on ice + this.wallJumpSpeed = 10; - this.doubleJumped = false; + this.wallJumpSideSpeed = 15; - ct.camera.follow = this; + this.wallSlideSpeed = 5; - // Assume that the starting coordinates are a safe spot to respawn - this.checkpointX = this.x; - this.checkpointY = this.y; - onstep: >- - // Skip gameplay logic if dying - if (this.dying) { - return; - } + this.gravity = 1; + this.gravityDir = 90; - // Get the surrounding medium - this.onGround = ct.place.occupied(this, this.x, this.y + 2, 'Solid'); + // Acceleration / Deceleration values for horizontal speed - var onIce = false; + this.groundAccDec = 1.5; - if (this.onGround) { - if (ct.place.meet(this, this.x, this.y + 2, 'IceBlock')) { - onIce = true; - } - } + this.airAccDec = 0.3; // Give little control over character while in + air + this.iceAccDec = 0.2; // Give even lesser control while on ice - // Calculate acceleration/deceleration values based on the surrounding - medium - var accDec = this.groundAccDec; + this.doubleJumped = false; - if (!this.onGround) { - accDec = this.airAccDec; - } else if (onIce) { - accDec = this.iceAccDec; - } + ct.camera.follow = this; - var targetHspeed = ct.actions.MoveX.value * this.maxSpeed; - if (this.hspeed > targetHspeed) { - this.hspeed = Math.max(this.hspeed - accDec * ct.delta, targetHspeed); - } else if (this.hspeed < targetHspeed) { - this.hspeed = Math.min(this.hspeed + accDec * ct.delta, targetHspeed); - } + // Assume that the starting coordinates are a safe spot to respawn + this.checkpointX = this.x; - var jumped = false; + this.checkpointY = this.y; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + // Skip gameplay logic if dying - // Regular jumps + if (this.dying) { + return; + } + + + // Get the surrounding medium + + this.onGround = ct.place.occupied(this, this.x, this.y + 2, 'Solid'); + + var onIce = false; - if (ct.actions.Jump.down) { if (this.onGround) { - this.vspeed = -this.jumpSpeed; - this.doubleJumped = false; - jumped = true; + if (ct.place.meet(this, this.x, this.y + 2, 'IceBlock')) { + onIce = true; + } } - } - if (ct.actions.Jump.pressed && !jumped) { + + // Calculate acceleration/deceleration values based on the surrounding + medium + + var accDec = this.groundAccDec; + if (!this.onGround) { - // Wall jump | Right - if (ct.place.occupied(this, this.x - 2, this.y, 'Solid')) { - this.vspeed = -this.wallJumpSpeed; - this.hspeed = this.wallJumpSideSpeed; + accDec = this.airAccDec; + } else if (onIce) { + accDec = this.iceAccDec; + } + + + var targetHspeed = ct.actions.MoveX.value * this.maxSpeed; + + if (this.hspeed > targetHspeed) { + this.hspeed = Math.max(this.hspeed - accDec * ct.delta, targetHspeed); + } else if (this.hspeed < targetHspeed) { + this.hspeed = Math.min(this.hspeed + accDec * ct.delta, targetHspeed); + } + + + var jumped = false; + + // Regular jumps + + if (ct.actions.Jump.down) { + if (this.onGround) { + this.vspeed = -this.jumpSpeed; this.doubleJumped = false; jumped = true; } - else - // Wall jump | Left - if (ct.place.occupied(this, this.x + 2, this.y, 'Solid')) { - this.vspeed = -this.wallJumpSpeed; - this.hspeed = -this.wallJumpSideSpeed; - this.doubleJumped = false; - jumped = true; - } else if (!this.doubleJumped) { - // Double jumps - this.doubleJumped = true; - this.vspeed = -this.jumpSpeed; + } + + if (ct.actions.Jump.pressed && !jumped) { + if (!this.onGround) { + // Wall jump | Right + if (ct.place.occupied(this, this.x - 2, this.y, 'Solid')) { + this.vspeed = -this.wallJumpSpeed; + this.hspeed = this.wallJumpSideSpeed; + this.doubleJumped = false; + jumped = true; + } + else + // Wall jump | Left + if (ct.place.occupied(this, this.x + 2, this.y, 'Solid')) { + this.vspeed = -this.wallJumpSpeed; + this.hspeed = -this.wallJumpSideSpeed; + this.doubleJumped = false; + jumped = true; + } else if (!this.doubleJumped) { + // Double jumps + this.doubleJumped = true; + this.vspeed = -this.jumpSpeed; + } } } - } - // Perform the actual movement. If the hero is facing an obstacle on one - of the + // Perform the actual movement. If the hero is facing an obstacle on + one of the - // sides, stop movement along this axis + // sides, stop movement along this axis - var collisions = this.moveContinuousByAxes('Solid'); + var collisions = this.moveContinuousByAxes('Solid'); - if (collisions) { - if (collisions.x) { - this.hspeed = 0; - // Limit falling speed while sliding on walls - this.vspeed = Math.min(this.vspeed, this.wallSlideSpeed); + if (collisions) { + if (collisions.x) { + this.hspeed = 0; + // Limit falling speed while sliding on walls + this.vspeed = Math.min(this.vspeed, this.wallSlideSpeed); + } + if (collisions.y) { + this.vspeed = 0; + } } - if (collisions.y) { - this.vspeed = 0; + eventKey: OnStep + - lib: core + arguments: {} + code: |- + if (this.hspeed > 0.1) { + this.scale.x = 1; + } else if (this.hspeed < -0.1) { + this.scale.x = -1; } - } - - - // Check for deadly stuff - - if (ct.place.occupied(this, 'Deadly')) { + eventKey: OnDraw + - eventKey: collisionCGroup + code: |- this.dying = true; ct.camera.follow = null; // Make a dying animation @@ -464,208 +499,206 @@ templates: this.alpha = 1; ct.camera.follow = this; }); - return; // Stop further code - } - - - // Check for checkpoints - - const checkpoint = ct.place.meet(this, 'Checkpoint') - - if (ct.templates.valid(checkpoint)) { + arguments: + group: Deadly + lib: place + - eventKey: collisionTemplate + code: |- // Remember safe place to respawn - this.checkpointX = checkpoint.x; - this.checkpointY = checkpoint.y; - } - ondraw: |- - if (this.hspeed > 0.1) { - this.scale.x = 1; - } else if (this.hspeed < -0.1) { - this.scale.x = -1; - } - ondestroy: '' - texture: 21FMtPWdzD4gzQ - visible: true - extends: - cgroup: Hero - lastmod: 1644653580976 - uid: N5RBGbB6K894HC + this.checkpointX = other.x; + this.checkpointY = other.y; + arguments: + template: Qrm2MjP8kzdJcF + lib: place + loopAnimation: true - type: template name: Enemy depth: 0 - oncreate: |- - this.maxSpeed = 5; - this.hspeed = this.maxSpeed; - onstep: >- - const movementDirection = Math.sign(this.hspeed); // Will be +1 for moving - right, -1 for moving left + texture: zbP76b2p1w3m6F + visible: true + extends: + cgroup: Deadly + lastmod: 1644654557416 + uid: 7tfqzm1JDBMDC9 + events: + - lib: core + arguments: {} + code: |- + this.maxSpeed = 5; + this.hspeed = this.maxSpeed; + eventKey: OnCreate + - lib: core + arguments: {} + code: >- + const movementDirection = Math.sign(this.hspeed); // Will be +1 for + moving right, -1 for moving left - // Get info about surroundings + // Get info about surroundings - const emptyBelow = ct.place.free(this, this.x + this.width * - movementDirection, this.y + 20, 'Solid'); + const emptyBelow = ct.place.free(this, this.x + this.width * + movementDirection, this.y + 20, 'Solid'); - const occupiedForwards = ct.place.occupied(this, this.x + this.hspeed, - this.vspeed, 'Solid'); + const occupiedForwards = ct.place.occupied(this, this.x + this.hspeed, + this.vspeed, 'Solid'); - if (emptyBelow || occupiedForwards) { - this.hspeed *= -1; - } + if (emptyBelow || occupiedForwards) { + this.hspeed *= -1; + } - this.move(); - ondraw: 'this.scale.x = this.hspeed > 0? 1 : -1;' - ondestroy: '' - texture: zbP76b2p1w3m6F - visible: true - extends: - cgroup: Deadly - lastmod: 1644654557416 - uid: 7tfqzm1JDBMDC9 + this.move(); + eventKey: OnStep + - lib: core + arguments: {} + code: 'this.scale.x = this.hspeed > 0? 1 : -1;' + eventKey: OnDraw + loopAnimation: true - type: template name: Lava depth: 5 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' texture: 61W6HTT9TnqHqQ visible: true extends: cgroup: Deadly lastmod: 1644654837576 uid: mGhrHH5bHNTqMD + events: [] + loopAnimation: true - type: template name: Finish depth: -5 - oncreate: |- - if (!this.nextRoom) { - console.error(`A copy of Finish template doesn't have a next room set. Please set the "nextRoom" property with custom properties by right-clicking this copy in the room editor.`); - } - onstep: |- - if (this.nextRoom) { - if (ct.place.meet(this, 'Character')) { - ct.rooms.switch(this.nextRoom); - } - } - ondraw: '' - ondestroy: '' texture: JzmH489MfTK1rd visible: true extends: cgroup: Finish - lastmod: 1644652079492 + lastmod: 1661093964695 uid: 5KCCmK7GQQFPQF + events: + - lib: core + arguments: {} + code: |- + if (!this.nextRoom) { + console.error(`A copy of Finish template doesn't have a next room set. Please set the "nextRoom" property with custom properties by right-clicking this copy in the room editor.`); + } + eventKey: OnCreate + - eventKey: collisionTemplate + code: |- + if (this.nextRoom) { + ct.rooms.switch(this.nextRoom); + } + arguments: + template: N5RBGbB6K894HC + lib: place + loopAnimation: true - type: template name: IceBlock depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' texture: DRc8w73MR33bcj visible: true extends: cgroup: Solid - lastmod: 1644654827736 + lastmod: 1661093888247 uid: R8m1cPL7jKN9n4 + events: [] + loopAnimation: true - type: template name: Block depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' texture: 13c1w7mpkqcLQN visible: true extends: cgroup: Solid lastmod: 1644654831312 uid: bqLWK4D3tLLDT1 + events: [] + loopAnimation: true - type: template name: OneWayPlatform depth: 0 - oncreate: '' - onstep: |- - const hero = ct.templates.list['Character'][0]; - // Remove collision group if the player's character is below the platform - // This is dependant on hero's axis and its collision size (the 64 number) - if (hero.y + 64 > this.y || ct.actions.MoveY.value > 0) { - this.cgroup = ''; - } else { - this.cgroup = 'Solid'; - } - ondraw: '' - ondestroy: '' texture: Gz6bH5hMcTTQ2C visible: true extends: cgroup: Solid - lastmod: 1644654336432 + lastmod: 1661093898647 uid: QMBQLBPfmd6wHL + events: + - lib: core + arguments: {} + code: >- + const hero = ct.templates.list['Character'][0]; + + // Remove collision group if the player's character is below the + platform + + // This is dependant on hero's axis and its collision size (the 64 + number) + + if (hero.y + 64 > this.y || ct.actions.MoveY.value > 0) { + this.cgroup = ''; + } else { + this.cgroup = 'Solid'; + } + eventKey: OnStep + loopAnimation: true - type: template name: Checkpoint depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' texture: NNdC85zDP4F3Dz visible: true extends: visible: false - lastmod: 1644654823976 + lastmod: 1661093892398 uid: Qrm2MjP8kzdJcF + events: [] + loopAnimation: true - type: template name: SpringBlock depth: 0 - oncreate: '' - onstep: |- - const character = ct.place.meet(this, 'Character'); - if (ct.templates.valid(character)) { - character.vspeed = -40; // YEET - } - ondraw: '' - ondestroy: '' texture: jNjzLGdJJPtwmh visible: true extends: {} - lastmod: 1644654344623 + lastmod: 1661093884599 uid: 2KgFRd6NM7CwRT + events: + - eventKey: collisionTemplate + code: other.vspeed = -40; // YEET + arguments: + template: N5RBGbB6K894HC + lib: place + loopAnimation: true - type: template name: Key depth: 0 - oncreate: '' - onstep: |- - if (ct.place.meet(this, 'Character')) { + texture: JbrHPd9T9dKfnk + visible: true + extends: {} + lastmod: 1661093921927 + uid: hLJwHbmjjRj3Jh + events: + - eventKey: collisionTemplate + code: |- this.kill = true; // Remove all the locked blocks for (const block of ct.templates.list['LockedBlock']) { block.kill = true; } - } - ondraw: '' - ondestroy: '' - texture: JbrHPd9T9dKfnk - visible: true - extends: {} - lastmod: 1644654854615 - uid: hLJwHbmjjRj3Jh + arguments: + template: N5RBGbB6K894HC + lib: place + loopAnimation: true - type: template name: LockedBlock depth: 0 - oncreate: '' - onstep: '' - ondraw: '' - ondestroy: '' texture: T6jWfjtqDh88F9 visible: true extends: cgroup: Solid - lastmod: 1644654818000 + lastmod: 1661093927127 uid: G17q6cMFtpcQDG + events: [] + loopAnimation: true sounds: [] styles: [] rooms: @@ -683,581 +716,1579 @@ rooms: copies: - x: 256 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: N5RBGbB6K894HC exts: {} + customProperties: {} - x: 192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1024 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 576 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 448 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 576 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 0 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 0 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 448 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 576 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 704 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 960 'y': -1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 5KCCmK7GQQFPQF exts: nextRoom: Room_02 + customProperties: {} - x: 832 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -1280 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1280 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -1344 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false extends: {} - lastmod: 1644653256678 + lastmod: 1661072384530 thumbnail: LKTkBnc4BQMcDm uid: LKTkBnc4BQMcDm + events: [] + simulate: true + isUi: false - type: room oncreate: '' onstep: '' @@ -1272,1001 +2303,2734 @@ rooms: copies: - x: 128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: N5RBGbB6K894HC exts: {} + customProperties: {} - x: 0 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 448 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 576 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 960 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1024 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1408 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1472 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1856 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1920 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1984 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2048 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2048 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 1344 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2560 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2624 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2880 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 3008 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2944 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 3072 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 3136 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3200 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3264 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3264 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 5KCCmK7GQQFPQF exts: nextRoom: Room_03 + customProperties: {} - x: 2624 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2752 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2816 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2624 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2112 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2176 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1280 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 704 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 768 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1152 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1216 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1280 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2112 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2176 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2240 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2304 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2368 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2688 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2752 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2816 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} - - x: -0.0 + customProperties: {} + - x: 0 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1280 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1920 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2624 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2752 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2816 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2944 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3008 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3136 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3200 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3264 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2560 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 2240 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': -384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': -448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': -512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2272 'y': -575 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: hLJwHbmjjRj3Jh exts: {} + customProperties: {} - x: 2496 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: R8m1cPL7jKN9n4 exts: {} + customProperties: {} - x: 2432 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2560 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2560 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2944 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3008 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3136 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1920 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': -832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': -832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2176 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': -832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': -832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2112 'y': -896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} - x: 2496 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} - x: 2496 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false extends: {} - lastmod: 1644655292154 + lastmod: 1661072386242 thumbnail: CgL3z7zmjhfHbt uid: CgL3z7zmjhfHbt + events: [] + simulate: true + isUi: false - type: room oncreate: '' onstep: '' @@ -2281,1733 +5045,4747 @@ rooms: copies: - x: 64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 576 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 0 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 640 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 576 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 0 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1280 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1280 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': -256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': -320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 1344 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 1216 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 7tfqzm1JDBMDC9 exts: {} + customProperties: {} - x: 768 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 1536 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 1792 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 1792 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1856 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1920 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1920 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1664 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1728 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1792 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1856 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1920 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1920 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1664 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1920 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1600 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1664 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1728 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1664 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2112 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2176 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2112 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 1984 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2112 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2176 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1920 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2560 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2624 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2752 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2816 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2944 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3008 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2752 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2560 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2624 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2560 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 7tfqzm1JDBMDC9 exts: {} + customProperties: {} - x: 2816 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2944 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3008 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2752 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3200 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3136 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3136 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3136 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3264 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 7tfqzm1JDBMDC9 exts: {} + customProperties: {} - x: 2880 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 7tfqzm1JDBMDC9 exts: {} + customProperties: {} - x: 2304 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2368 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2432 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2496 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2560 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2624 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3008 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3072 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3136 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3200 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3264 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2816 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2944 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2880 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2816 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2752 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2688 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3456 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3520 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3584 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3648 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3648 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3456 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3520 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3584 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3648 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3648 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3328 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3392 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3712 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 3456 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3520 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3584 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3648 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3648 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3392 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3392 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3456 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3584 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3520 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3648 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 832 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1472 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1472 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 2KgFRd6NM7CwRT exts: {} + customProperties: {} - x: 1280 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 2KgFRd6NM7CwRT exts: {} + customProperties: {} - x: 1344 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1216 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1280 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1088 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1088 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 960 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1152 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1088 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1152 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1856 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1920 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1984 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2048 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1408 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1344 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1472 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2112 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2240 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2176 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': 1088 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 2304 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1536 'y': 1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1728 'y': 1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1792 'y': 1216 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1600 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1728 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1664 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 2176 'y': 1024 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 1088 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 3008 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 3520 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3520 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 3520 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 768 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 832 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 896 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 1024 'y': 960 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 448 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 320 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: N5RBGbB6K894HC exts: {} + customProperties: {} - x: 64 - 'y': -0.0 + 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -128 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -128 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -192 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: -64 - 'y': -0.0 + 'y': 0 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': -64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -128 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -128 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -128 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: -64 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 0 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 0 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 0 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: mGhrHH5bHNTqMD exts: {} + customProperties: {} - x: 256 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 576 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': -128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1024 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': -192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 960 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1664 'y': 64 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: Qrm2MjP8kzdJcF exts: {} + customProperties: {} - x: 1792 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: QMBQLBPfmd6wHL exts: {} + customProperties: {} - x: 1408 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 1920 'y': 1152 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} - x: 256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} - x: 320 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} - x: 384 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: G17q6cMFtpcQDG exts: {} + customProperties: {} - x: 320 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: 5KCCmK7GQQFPQF exts: nextRoom: Room_Finish + customProperties: {} - x: 64 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 64 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 128 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 192 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 704 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 640 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 576 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: hLJwHbmjjRj3Jh exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false extends: {} - lastmod: 1644655467394 + lastmod: 1661072392746 thumbnail: 32n4rJpF9qKMBg uid: 32n4rJpF9qKMBg + events: [] + simulate: true + isUi: false - type: room oncreate: '' onstep: '' @@ -4022,148 +9800,390 @@ rooms: copies: - x: 512 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 256 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 320 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 512 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 448 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 384 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 128 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 192 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 256 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 320 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 640 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 704 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 448 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 832 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 768 'y': 384 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} - x: 896 'y': 512 + opacity: 1 + tint: 16777215 + scale: + x: 1 + 'y': 1 + rotation: 0 uid: bqLWK4D3tLLDT1 exts: {} + customProperties: {} tiles: - depth: -10 tiles: [] extends: {} + hidden: false extends: {} - lastmod: 1644655370602 + lastmod: 1661072390425 thumbnail: BqT9kcCgtp87pc uid: BqT9kcCgtp87pc + events: [] + simulate: true + isUi: false actions: - name: MoveX methods: @@ -4241,4 +10261,4 @@ settings: fps: 30 fonts: [] palette: [] -startroom: 32n4rJpF9qKMBg +startroom: LKTkBnc4BQMcDm diff --git a/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg.png b/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg.png index 867f13d43..4c5853067 100644 Binary files a/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg.png and b/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg.png differ diff --git a/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg@r.png b/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg@r.png new file mode 100644 index 000000000..a79e0a542 Binary files /dev/null and b/src/projectTemplates/Platformer/img/r32n4rJpF9qKMBg@r.png differ diff --git a/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc.png b/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc.png index 617eb2749..021ab4604 100644 Binary files a/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc.png and b/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc.png differ diff --git a/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc@r.png b/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc@r.png new file mode 100644 index 000000000..b76ed21b0 Binary files /dev/null and b/src/projectTemplates/Platformer/img/rBqT9kcCgtp87pc@r.png differ diff --git a/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt.png b/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt.png index 867f13d43..d09b0d6b2 100644 Binary files a/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt.png and b/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt.png differ diff --git a/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt@r.png b/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt@r.png new file mode 100644 index 000000000..5ebea1d46 Binary files /dev/null and b/src/projectTemplates/Platformer/img/rCgL3z7zmjhfHbt@r.png differ diff --git a/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm.png b/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm.png index 5e34c4e86..ce18ff183 100644 Binary files a/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm.png and b/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm.png differ diff --git a/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm@r.png b/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm@r.png new file mode 100644 index 000000000..af9c7d250 Binary files /dev/null and b/src/projectTemplates/Platformer/img/rLKTkBnc4BQMcDm@r.png differ diff --git a/src/projectTemplates/Platformer/img/splash.png b/src/projectTemplates/Platformer/img/splash.png index 617eb2749..a79e0a542 100644 Binary files a/src/projectTemplates/Platformer/img/splash.png and b/src/projectTemplates/Platformer/img/splash.png differ diff --git a/src/pug/includes/head.pug b/src/pug/includes/head.pug index f24bea03d..b1159ae92 100644 --- a/src/pug/includes/head.pug +++ b/src/pug/includes/head.pug @@ -5,7 +5,7 @@ head meta(name='description', content='IDE') meta(name='viewport', content='width=device-width, initial-scale=1') style. - #loading { + #theLoadingScreen { position: fixed; font-family: sans-serif; left: 0; diff --git a/src/pug/index.pug b/src/pug/index.pug index e6edf5320..b3b3e1314 100644 --- a/src/pug/index.pug +++ b/src/pug/index.pug @@ -4,7 +4,7 @@ html body.maximized(data-manage-window) include ../../app/data/icons.svg root-tag - div#loading Loading… + div#theLoadingScreen Loading… script. try { require('gulp'); @@ -88,5 +88,5 @@ html window.hotkeys = require('./data/node_requires/hotkeys')(document); riot.mount('*'); setTimeout(() => { - document.getElementById('loading').classList.add('fadeout'); + document.getElementById('theLoadingScreen').classList.add('fadeout'); }, 0); diff --git a/src/riotTags/app-view.tag b/src/riotTags/app-view.tag index 16600b42a..1a1cc2269 100644 --- a/src/riotTags/app-view.tag +++ b/src/riotTags/app-view.tag @@ -1,64 +1,68 @@ app-view.flexcol - nav.nogrow.flexrow(if="{global.currentProject}") - ul#app.aNav.tabs - li.it30#ctlogo(onclick="{changeTab('menu')}" title="{voc.ctIDE}" class="{active: tab === 'menu'}") + nav.nogrow.flexrow(if="{global.currentProject}" ref="mainNav") + ul.aNav.tabs.nogrow + li.limitwidth(onclick="{changeTab('menu')}" title="{voc.ctIDE}" class="{active: tab === 'menu'}" ref="mainMenuButton") svg.feather.nmr use(xlink:href="#menu") - li.it30(onclick="{changeTab('patrons')}" title="{voc.patrons}" class="{active: tab === 'patrons'}") + li.limitwidth(onclick="{changeTab('patrons')}" title="{voc.patrons}" class="{active: tab === 'patrons'}") svg.feather use(xlink:href="#heart") - li.it30.nbr(onclick="{saveProject}" title="{vocGlob.save} (Control+S)" data-hotkey="Control+s") + li.limitwidth(onclick="{saveProject}" title="{vocGlob.save} (Control+S)" data-hotkey="Control+s") svg.feather use(xlink:href="#save") - - ul#mainnav.aNav.tabs - li.nbl.it30(onclick="{runProject}" class="{active: tab === 'debug'}" title="{voc.launch} {voc.launchHotkeys}" data-hotkey="F5") + li.nbl(onclick="{runProject}" class="{active: tab === 'debug'}" title="{voc.launch} {voc.launchHotkeys}" data-hotkey="F5") svg.feather.rotateccw(show="{exportingProject}") use(xlink:href="#refresh-ccw") svg.feather(hide="{exportingProject}") use(xlink:href="#play") span(if="{tab !== 'debug'}") {voc.launch} span(if="{tab === 'debug'}") {voc.restart} - li(onclick="{changeTab('project')}" class="{active: tab === 'project'}" data-hotkey="Control+1" title="Control+1") + li(onclick="{changeTab('project')}" class="{active: tab === 'project'}" data-hotkey="Control+1" title="Control+1" ref="projectTab") svg.feather use(xlink:href="#sliders") span {voc.project} - li(onclick="{changeTab('textures')}" class="{active: tab === 'textures'}" data-hotkey="Control+2" title="Control+2") + li(onclick="{changeTab('textures')}" class="{active: tab === 'textures'}" data-hotkey="Control+2" title="Control+2" ref="textureTab") svg.feather use(xlink:href="#texture") span {voc.texture} - li(onclick="{changeTab('ui')}" class="{active: tab === 'ui'}" data-hotkey="Control+3" title="Control+3") + li(onclick="{changeTab('ui')}" class="{active: tab === 'ui'}" data-hotkey="Control+3" title="Control+3" ref="uiTab") svg.feather use(xlink:href="#ui") span {voc.ui} - li(onclick="{changeTab('fx')}" class="{active: tab === 'fx'}" data-hotkey="Control+4" title="Control+4") + li(onclick="{changeTab('fx')}" class="{active: tab === 'fx'}" data-hotkey="Control+4" title="Control+4" ref="fxTab") svg.feather use(xlink:href="#sparkles") span {voc.fx} - li(onclick="{changeTab('sounds')}" class="{active: tab === 'sounds'}" data-hotkey="Control+5" title="Control+5") + li(onclick="{changeTab('sounds')}" class="{active: tab === 'sounds'}" data-hotkey="Control+5" title="Control+5" ref="soundsTab") svg.feather use(xlink:href="#headphones") span {voc.sounds} - li(onclick="{changeTab('templates')}" class="{active: tab === 'templates'}" data-hotkey="Control+6" title="Control+6") + li(onclick="{changeTab('templates')}" class="{active: tab === 'templates'}" data-hotkey="Control+6" title="Control+6" ref="templatesTab") svg.feather use(xlink:href="#template") span {voc.templates} - li(onclick="{changeTab('rooms')}" class="{active: tab === 'rooms'}" data-hotkey="Control+7" title="Control+7") + li(onclick="{changeTab('rooms')}" class="{active: tab === 'rooms'}" data-hotkey="Control+7" title="Control+7" ref="roomsTab") svg.feather use(xlink:href="#room") span {voc.rooms} + li(onclick="{callTour}" data-hotkey="F1" title="{voc.tour.header}").relative.nogrow + .aPulser(if="{!localStorage.wizardUsed}") + svg.feather + use(xlink:href="#help-circle") div.flexitem.relative(if="{global.currentProject}") - main-menu(show="{tab === 'menu'}") + main-menu(show="{tab === 'menu'}" ref="mainMenu") debugger-screen-embedded(if="{tab === 'debug'}" params="{debugParams}" data-hotkey-scope="play" ref="debugger") - project-settings(show="{tab === 'project'}" data-hotkey-scope="project") - textures-panel(show="{tab === 'textures'}" data-hotkey-scope="textures") + project-settings(show="{tab === 'project'}" data-hotkey-scope="project" ref="projectsSettings") + textures-panel(show="{tab === 'textures'}" data-hotkey-scope="textures" ref="texturesPanel") ui-panel(show="{tab === 'ui'}" data-hotkey-scope="ui") fx-panel(show="{tab === 'fx'}" data-hotkey-scope="fx") - sounds-panel(show="{tab === 'sounds'}" data-hotkey-scope="sounds") + sounds-panel(show="{tab === 'sounds'}" data-hotkey-scope="sounds" ref="soundsPanel") templates-panel(show="{tab === 'templates'}" data-hotkey-scope="templates") rooms-panel(show="{tab === 'rooms'}" data-hotkey-scope="rooms") patreon-screen(if="{tab === 'patrons'}" data-hotkey-scope="patrons") new-project-onboarding(if="{sessionStorage.showOnboarding && localStorage.showOnboarding !== 'off'}") + notepad-panel(ref="notepadPanel") + tour-guide(tour="{appTour}" onfinish="{onAppTourFinish}" ref="tour" header="{voc.tour.header}") script. const fs = require('fs-extra'); @@ -140,7 +144,7 @@ app-view.flexcol document.body.style.cursor = 'progress'; this.exportingProject = true; this.update(); - const runCtExport = require('./data/node_requires/exporter'); + const runCtExport = require('./data/node_requires/exporter').exportCtProject; runCtExport(global.currentProject, global.projdir) .then(() => { if (localStorage.disableBuiltInDebugger === 'yes') { @@ -169,7 +173,7 @@ app-view.flexcol }); }; this.runProjectAlt = () => { - const runCtExport = require('./data/node_requires/exporter'); + const runCtExport = require('./data/node_requires/exporter').exportCtProject; runCtExport(global.currentProject, global.projdir) .then(() => { nw.Shell.openExternal(`http://localhost:${fileServer.address().port}/`); @@ -180,6 +184,201 @@ app-view.flexcol window.hotkeys.off('Alt+F5', this.runProjectAlt); }); + // eslint-disable-next-line max-lines-per-function + this.callTour = () => { + this.appTour = [{ + message: this.voc.tour.aboutTour + }, { + message: this.voc.tour.helpPanel, + highlight: this.refs.notepadPanel.refs.toggleButton + }, { + message: this.voc.tour.helpPanelTabs, + highlight: this.refs.notepadPanel.refs.tabs, + runBefore: () => new Promise(resolve => { + this.refs.notepadPanel.refs.toggleButton.click(); + setTimeout(() => { + resolve(); + }, 350); + }), + undo: () => new Promise(resolve => { + this.refs.notepadPanel.refs.toggleButton.click(); + setTimeout(() => { + resolve(); + }, 350); + }) + }, { + message: this.voc.tour.projectResources, + highlight: this.refs.mainNav, + runBefore: () => { + this.refs.notepadPanel.refs.toggleButton.click(); + }, + undo: () => { + this.refs.notepadPanel.refs.toggleButton.click(); + } + }, { + message: this.voc.tour.tabTextures, + highlight: this.refs.textureTab, + runBefore: () => { + this.changeTab('textures')(); + this.update(); + } + }, { + message: this.voc.tour.tabTexturesImport, + highlight: this.refs.texturesPanel.refs.textures.refs.importBlock + }, { + message: this.voc.tour.tabTexturesGallery, + highlight: this.refs.texturesPanel.refs.textures.refs.galleryButton + }, { + message: this.voc.tour.tabTexturesClipboard, + highlight: this.refs.texturesPanel.refs.textures.refs.clipboardPaste + }, { + message: this.voc.tour.tabTexturesPlaceholders, + highlight: this.refs.texturesPanel.refs.textures.refs.placeholderGenButton + }, { + message: this.voc.tour.tabTemplates, + highlight: this.refs.templatesTab, + runBefore: () => { + this.changeTab('templates')(); + this.update(); + }, + undo: () => { + this.changeTab('textures')(); + this.update(); + } + }, { + message: this.voc.tour.tabRooms, + highlight: this.refs.roomsTab, + runBefore: () => { + this.changeTab('rooms')(); + this.update(); + }, + undo: () => { + this.changeTab('templates')(); + this.update(); + } + }, { + message: this.voc.tour.tabSounds, + highlight: this.refs.soundsTab, + runBefore: () => { + this.changeTab('sounds')(); + this.update(); + }, + undo: () => { + this.changeTab('rooms')(); + this.update(); + } + }, { + message: this.voc.tour.tabSoundsImport, + highlight: this.refs.soundsPanel.refs.sounds.refs.createButton + }, { + message: this.voc.tour.tabSoundsGallery, + highlight: this.refs.soundsPanel.refs.sounds.refs.galleryButton + }, { + message: this.voc.tour.tabSoundsRecord, + highlight: this.refs.soundsPanel.refs.sounds.refs.recordButton + }, { + message: this.voc.tour.tabInterlude, + highlight: this.refs.mainNav + }, { + message: this.voc.tour.tabUI, + highlight: this.refs.uiTab, + runBefore: () => { + this.changeTab('ui')(); + this.update(); + }, + undo: () => { + this.changeTab('sounds')(); + this.update(); + } + }, { + message: this.voc.tour.tabFX, + highlight: this.refs.fxTab, + runBefore: () => { + this.changeTab('fx')(); + this.update(); + }, + undo: () => { + this.changeTab('ui')(); + this.update(); + } + }, { + message: this.voc.tour.tabProject, + highlight: this.refs.projectTab, + runBefore: () => { + this.changeTab('project')(); + this.update(); + }, + undo: () => { + this.changeTab('fx')(); + this.update(); + } + }, { + message: this.voc.tour.tabProjectModules, + highlight: this.refs.projectsSettings.refs.modulesTab, + runBefore: () => { + this.refs.projectsSettings.refs.modulesTab.click(); + } + }, { + message: this.voc.tour.tabProjectModuleDocs, + highlight: this.refs.notepadPanel.refs.modulesTab, + runBefore: () => new Promise(resolve => { + this.refs.notepadPanel.refs.toggleButton.click(); + setTimeout(() => { + resolve(); + }, 350); + }), + undo: () => new Promise(resolve => { + this.refs.notepadPanel.refs.toggleButton.click(); + setTimeout(() => { + resolve(); + }, 350); + }) + }, { + message: this.voc.tour.tabMainMenu, + highlight: this.refs.mainMenuButton, + runBefore: () => { + this.refs.notepadPanel.refs.toggleButton.click(); + this.changeTab('menu')(); + this.update(); + }, + undo: () => { + this.refs.notepadPanel.refs.toggleButton.click(); + this.changeTab('fx')(); + this.update(); + return new Promise(resolve => { + this.refs.notepadPanel.refs.toggleButton.click(); + setTimeout(() => { + resolve(); + }, 350); + }); + } + }, { + message: this.voc.tour.tabMainMenuSettings, + highlight: this.refs.mainMenu.refs.settings.root + }, { + message: this.voc.tour.tabMainMenuMeta, + highlight: this.refs.mainMenu.refs.meta.root + }, { + message: this.voc.tour.helpPanelReminder, + highlight: this.refs.notepadPanel.refs.toggleButton, + additionalActions: [{ + label: this.voc.tour.buttonStartTutorial, + click: () => { + window.signals.trigger('openDocs', { + path: '/tut-making-shooter.html' + }); + this.refs.tour.stop(); + } + }] + }]; + this.update(); + this.refs.tour.start(); + localStorage.wizardUsed = true; + }; + this.onAppTourFinish = () => { + this.update(); + }; + this.toggleFullscreen = function toggleFullscreen() { nw.Window.get().toggleFullscreen(); }; diff --git a/src/riotTags/debugger/debugger-screen-embedded.tag b/src/riotTags/debugger/debugger-screen-embedded.tag index 0d97339a3..dbcd13985 100644 --- a/src/riotTags/debugger/debugger-screen-embedded.tag +++ b/src/riotTags/debugger/debugger-screen-embedded.tag @@ -15,6 +15,7 @@ debugger-screen-embedded(class="{opts.class} {flexrow: verticalLayout, flexcol: src="empty.html" partition="persist:trusted" style="overflow: hidden;" + allownw ) //allownw nwfaketop .flexfix-footer.aDebuggerToolbar.noshrink( diff --git a/src/riotTags/debugger/debugger-toolbar.tag b/src/riotTags/debugger/debugger-toolbar.tag index 0d32664d4..00502ef38 100644 --- a/src/riotTags/debugger/debugger-toolbar.tag +++ b/src/riotTags/debugger/debugger-toolbar.tag @@ -159,9 +159,8 @@ debugger-toolbar const buff = new Buffer(shotBase64, 'base64'); const stream = fs.createWriteStream(fullPath); stream.on('finish', () => { - if (localStorage.disableSounds !== 'on') { - window.soundbox.play('Success'); - } + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); + soundbox.play('Success'); // eslint-disable-next-line no-new new Notification('Done!', { body: `Saved to ${fullPath} 👌`, @@ -211,4 +210,4 @@ debugger-toolbar nw.Window.get().close(); }; - nw.Window.get().on('close', this.closeItself); \ No newline at end of file + nw.Window.get().on('close', this.closeItself); diff --git a/src/riotTags/main-menu/export-mobile-panel.tag b/src/riotTags/main-menu/export-mobile-panel.tag index a2c56b4de..c18836bee 100644 --- a/src/riotTags/main-menu/export-mobile-panel.tag +++ b/src/riotTags/main-menu/export-mobile-panel.tag @@ -118,7 +118,7 @@ export-mobile-panel.aDimmer fs = require('fs-extra'); const execa = require('execa'); const {getBuildDir, getExportDir} = require('./data/node_requires/platformUtils'); - const runCtExport = require('./data/node_requires/exporter'); + const runCtExport = require('./data/node_requires/exporter').exportCtProject; const appId = projSettings.authoring.appId || 'rocks.ctjs.defaultpackageid'; const version = projSettings.authoring.version.join('.') + projSettings.authoring.versionPostfix; @@ -211,7 +211,7 @@ export-mobile-panel.aDimmer const {getDOMImage} = require('./data/node_requires/resources/textures'); const iconsSplashesPromises = []; const {imageCover, imageContain, imagePlaceInRect, imageRound, outputCanvasToFile} = - require('./data/node_requires/imageUtils'); + require('./data/node_requires/utils/imageUtils'); const projIconImage = await getDOMImage(projSettings.branding.icon || -1, 'ct_ide.png'); for (const name in androidIcons) { const icon = imageContain( diff --git a/src/riotTags/main-menu/export-panel.tag b/src/riotTags/main-menu/export-panel.tag index aa8e874f2..fe9d8dbb2 100644 --- a/src/riotTags/main-menu/export-panel.tag +++ b/src/riotTags/main-menu/export-panel.tag @@ -87,7 +87,7 @@ export-panel.aDimmer this.update(); const {getBuildDir, getExportDir} = require('./data/node_requires/platformUtils'); - const runCtExport = require('./data/node_requires/exporter'); + const runCtExport = require('./data/node_requires/exporter').exportCtProject; const projectDir = global.projdir, exportDir = await getExportDir(), buildDir = await getBuildDir(); diff --git a/src/riotTags/main-menu/license-panel.tag b/src/riotTags/main-menu/license-panel.tag index 042b97061..5c1882e63 100644 --- a/src/riotTags/main-menu/license-panel.tag +++ b/src/riotTags/main-menu/license-panel.tag @@ -1,719 +1,775 @@ -license-panel.aModal.pad - .toright(title="{vocGlob.close}") - span(onclick="{opts.onclose}") +license-panel + .aDimmer.fadein + button.aDimmer-aCloseButton(title="{vocGlob.close}" onclick="{opts.onclose}") svg.feather - use(xlink:href="#x") - h1 {voc.ctjsLicense} - pre - code. - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is furnished - to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - - h1 3rd-party - - h2 alertify.js (alertifyjs.org) - pre - code. - The MIT License - =============== - - Copyright (c) 2009-2014 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - h2 Arkham theme for VSCode - p - | The ct.js' theme called Lucas Dracula is a rough port of a beautiful theme by Lucas Moreira. - | You can get this theme for VSCode, too! See - | - a(href="https://github.com/lucasmsa/arkham-theme") github.com/lucasmsa/arkham-theme - | . - pre - code. - MIT License - - Copyright (c) 2020 Lucas Moreira - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - h2 color.js - pre - code. - Copyright (c) 2008-2010, Andrew Brehaut, Tim Baumann, Matt Wilson - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - h2 DragonBonesJS - pre - code. - The MIT License (MIT) - - Copyright (c) 2012-2018 The DragonBones team and other contributors. - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - h2 Forest Night theme for VSCode - p. - Original theme made by Sainnhe Park; adapted for ct.js by Comigo. - pre - code. - MIT License - - Copyright (c) 2020 sainnhe - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - h2 Open Sans font by Steve Matteson - p Released under #[a(href="http://www.apache.org/licenses/LICENSE-2.0") Apache License 2.0]. - - h2 Iosevka Font by Belleve Invis - pre - code. - The font is licensed under SIL OFL Version 1.1. - - The support code is licensed under Berkeley Software Distribution license. - - --- - --- - - Copyright (c) 2015-2019 Belleve Invis (belleve@typeof.net). - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Belleve Invis nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BELLEVE INVIS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ----------------------- + use(href="#x") + .aModal.pad.appear + h1 {voc.ctjsLicense} + p + b {voc.faq} + ul + li + b {voc.whoOwnsGamesQ} + br + span {voc.whoOwnsGamesA} + li + b {voc.sellingGamesQ} + br + span {voc.sellingGamesA} + li + b {voc.possibleFeesQ} + br + span {voc.possibleFeesA} + li + b {voc.useInStudioQ} + br + span {voc.useInStudioA} + li + b {voc.attributionQ} + br + span {voc.attributionA} + br + span {voc.attributionAAssets} + b {voc.theLicense} + pre + code. + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is furnished + to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. + + + h1 3rd-party + + h2 alertify.js (alertifyjs.org) + pre + code. + The MIT License + =============== + + Copyright (c) 2009-2014 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + h2 Arkham theme for VSCode + p + | The ct.js' theme called Lucas Dracula is a rough port of a beautiful theme by Lucas Moreira. + | You can get this theme for VSCode, too! See + | + a(href="https://github.com/lucasmsa/arkham-theme") github.com/lucasmsa/arkham-theme + | . + pre + code. + MIT License + + Copyright (c) 2020 Lucas Moreira + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + h2 color.js + pre + code. + Copyright (c) 2008-2010, Andrew Brehaut, Tim Baumann, Matt Wilson + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + h2 DragonBonesJS + pre + code. + The MIT License (MIT) + + Copyright (c) 2012-2018 The DragonBones team and other contributors. + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + h2 Forest Night theme for VSCode + p. + Original theme made by Sainnhe Park; adapted for ct.js by Comigo. + pre + code. + MIT License - --- + Copyright (c) 2020 sainnhe - Copyright 2015-2019, Belleve Invis (belleve@typeof.net). + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - This Font Software is licensed under the SIL Open Font License, Version 1.1. + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. - This license is copied below, and is also available with a FAQ at: - http://scripts.sil.org/OFL + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + h2 Open Sans font by Steve Matteson + p Released under #[a(href="http://www.apache.org/licenses/LICENSE-2.0") Apache License 2.0]. - -------------------------- + h2 Iosevka Font by Belleve Invis + pre + code. + The font is licensed under SIL OFL Version 1.1. + The support code is licensed under Berkeley Software Distribution license. - SIL Open Font License v1.1 - ==================================================== - + --- + --- - Preamble - ---------- + Copyright (c) 2015-2019 Belleve Invis (belleve@typeof.net). - The goals of the Open Font License (OFL) are to stimulate worldwide - development of collaborative font projects, to support the font creation - efforts of academic and linguistic communities, and to provide a free and - open framework in which fonts may be shared and improved in partnership - with others. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of Belleve Invis nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - The OFL allows the licensed fonts to be used, studied, modified and - redistributed freely as long as they are not sold by themselves. The - fonts, including any derivative works, can be bundled, embedded, - redistributed and/or sold with any software provided that any reserved - names are not used by derivative works. The fonts and derivatives, - however, cannot be released under any other type of license. The - requirement for fonts to remain under this license does not apply - to any document created using the fonts or their derivatives. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BELLEVE INVIS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ----------------------- - Definitions - ------------- + --- - `"Font Software"` refers to the set of files released by the Copyright - Holder(s) under this license and clearly marked as such. This may - include source files, build scripts and documentation. + Copyright 2015-2019, Belleve Invis (belleve@typeof.net). - `"Reserved Font Name"` refers to any names specified as such after the - copyright statement(s). + This Font Software is licensed under the SIL Open Font License, Version 1.1. - `"Original Version"` refers to the collection of Font Software components as - distributed by the Copyright Holder(s). + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL - `"Modified Version"` refers to any derivative made by adding to, deleting, - or substituting -- in part or in whole -- any of the components of the - Original Version, by changing formats or by porting the Font Software to a - new environment. + -------------------------- - `"Author"` refers to any designer, engineer, programmer, technical - writer or other person who contributed to the Font Software. + SIL Open Font License v1.1 + ==================================================== - Permission & Conditions - ------------------------ - Permission is hereby granted, free of charge, to any person obtaining - a copy of the Font Software, to use, study, copy, merge, embed, modify, - redistribute, and sell modified and unmodified copies of the Font - Software, subject to the following conditions: + Preamble + ---------- - 1. Neither the Font Software nor any of its individual components, - in Original or Modified Versions, may be sold by itself. + The goals of the Open Font License (OFL) are to stimulate worldwide + development of collaborative font projects, to support the font creation + efforts of academic and linguistic communities, and to provide a free and + open framework in which fonts may be shared and improved in partnership + with others. - 2. Original or Modified Versions of the Font Software may be bundled, - redistributed and/or sold with any software, provided that each copy - contains the above copyright notice and this license. These can be - included either as stand-alone text files, human-readable headers or - in the appropriate machine-readable metadata fields within text or - binary files as long as those fields can be easily viewed by the user. + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. The + fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply + to any document created using the fonts or their derivatives. - 3. No Modified Version of the Font Software may use the Reserved Font - Name(s) unless explicit written permission is granted by the corresponding - Copyright Holder. This restriction only applies to the primary font name as - presented to the users. - 4. The name(s) of the Copyright Holder(s) or the Author(s) of the Font - Software shall not be used to promote, endorse or advertise any - Modified Version, except to acknowledge the contribution(s) of the - Copyright Holder(s) and the Author(s) or with their explicit written - permission. + Definitions + ------------- - 5. The Font Software, modified or unmodified, in part or in whole, - must be distributed entirely under this license, and must not be - distributed under any other license. The requirement for fonts to - remain under this license does not apply to any document created - using the Font Software. + `"Font Software"` refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. This may + include source files, build scripts and documentation. + `"Reserved Font Name"` refers to any names specified as such after the + copyright statement(s). + `"Original Version"` refers to the collection of Font Software components as + distributed by the Copyright Holder(s). - Termination - ----------- + `"Modified Version"` refers to any derivative made by adding to, deleting, + or substituting -- in part or in whole -- any of the components of the + Original Version, by changing formats or by porting the Font Software to a + new environment. - This license becomes null and void if any of the above conditions are - not met. + `"Author"` refers to any designer, engineer, programmer, technical + writer or other person who contributed to the Font Software. - DISCLAIMER + Permission & Conditions + ------------------------ - THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT - OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE - COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL - DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM - OTHER DEALINGS IN THE FONT SOFTWARE. + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: - h2 long-press-event.js by John Doherty - pre - code. - The MIT License + 1. Neither the Font Software nor any of its individual components, + in Original or Modified Versions, may be sold by itself. - Copyright (c) 2017 John Doherty. http://www.johndoherty.info + 2. Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + 3. No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the corresponding + Copyright Holder. This restriction only applies to the primary font name as + presented to the users. - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + 4. The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. + 5. The Font Software, modified or unmodified, in part or in whole, + must be distributed entirely under this license, and must not be + distributed under any other license. The requirement for fonts to + remain under this license does not apply to any document created + using the Font Software. - h2 Monaco code editor - pre - code. - The MIT License (MIT) - Copyright (c) 2019 Microsoft Corporation - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + Termination + ----------- - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + This license becomes null and void if any of the above conditions are + not met. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + DISCLAIMER - h2 nw-builder - pre - code. + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE + COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + OTHER DEALINGS IN THE FONT SOFTWARE. + + h2 long-press-event.js by John Doherty + pre + code. + The MIT License + + Copyright (c) 2017 John Doherty. http://www.johndoherty.info + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + h2 Monaco code editor + pre + code. The MIT License (MIT) - Copyright (c) 2014 Steffen Müller - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - h2 OpenSans Font - pre - code. - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - h2 Pixi.js - pre - code. - The MIT License - - Copyright (c) 2013-2017 Mathew Groves, Chad Engler - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - h2 QRCode.js - pre - code. - The MIT License (MIT) - --------------------- - Copyright (c) 2012 davidshimjs - - Permission is hereby granted, free of charge, - to any person obtaining a copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - h2 SSCD by Ronen Ness, modified by CoMiGo Games - pre - code. - SSCD (Super Simple Collision Detection) is distributed with the zlib-license: - - /* - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Made by Ronen Ness - ronenness@gmail.com - - Modified by CoMiGo Games - admin@nersta.ru - */ - h2 Horizon theme - p. - ct.js has an adapted version of this theme. - The original theme for VSCode was created by Jonathan Olaleye at https://github.com/jolaleye/horizon-theme-vscode/. - Its license is: - pre - code. - MIT License - - Copyright (c) 2018 Jonathan Olaleye - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - h2 Nord Theme - p. - ct.js has an adapted version of this theme. - The original color pallete/theme was created by Arctic Ice Studio and Sven Greb at https://github.com/arcticicestudio/nord/. - Its license is: - pre - code. - MIT License (MIT) - - Copyright (c) 2016-present Arctic Ice Studio development@arcticicestudio.com (https://www.arcticicestudio.com) - Copyright (c) 2016-present Sven Greb development@svengreb.de (https://www.svengreb.de) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - h2 node-unzipper - p. - Commits in this fork are (c) Ziggy Jonsson (ziggy.jonsson.nyc@gmail.com) - and fall under same licence structure as the original repo (MIT) - pre - code. - Copyright (c) 2012 - 2013 Near Infinity Corporation - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Copyright (c) 2019 Microsoft Corporation + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + h2 nw-builder + pre + code. + The MIT License (MIT) + + Copyright (c) 2014 Steffen Müller + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + h2 OpenSans Font + pre + code. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + h2 Pixi.js + pre + code. + The MIT License + + Copyright (c) 2013-2017 Mathew Groves, Chad Engler + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + h2 QRCode.js + pre + code. + The MIT License (MIT) + --------------------- + Copyright (c) 2012 davidshimjs + + Permission is hereby granted, free of charge, + to any person obtaining a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + h2 SSCD by Ronen Ness, modified by CoMiGo Games + pre + code. + SSCD (Super Simple Collision Detection) is distributed with the zlib-license: + + /* + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Made by Ronen Ness + ronenness@gmail.com + + Modified by CoMiGo Games + admin@nersta.ru + */ + h2 Horizon theme + p. + ct.js has an adapted version of this theme. + The original theme for VSCode was created by Jonathan Olaleye at https://github.com/jolaleye/horizon-theme-vscode/. + Its license is: + pre + code. + MIT License + + Copyright (c) 2018 Jonathan Olaleye + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + h2 Nord Theme + p. + ct.js has an adapted version of this theme. + The original color pallete/theme was created by Arctic Ice Studio and Sven Greb at https://github.com/arcticicestudio/nord/. + Its license is: + pre + code. + MIT License (MIT) + + Copyright (c) 2016-present Arctic Ice Studio development@arcticicestudio.com (https://www.arcticicestudio.com) + Copyright (c) 2016-present Sven Greb development@svengreb.de (https://www.svengreb.de) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + h2 node-unzipper + p. + Commits in this fork are (c) Ziggy Jonsson (ziggy.jonsson.nyc@gmail.com) + and fall under same licence structure as the original repo (MIT) + pre + code. + Copyright (c) 2012 - 2013 Near Infinity Corporation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + h2 Rosé Pine + p. + ct.js has an adapted version of this theme. + The original color pallete/theme was created by rose-pine at https://github.com/rose-pine + Its license is: + pre + code. + MIT License + + Copyright (c) 2021 rose-pine + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. script. this.namespace = 'licensePanel'; diff --git a/src/riotTags/main-menu/main-menu-deploy.tag b/src/riotTags/main-menu/main-menu-deploy.tag index 135e92917..77ad1b54e 100644 --- a/src/riotTags/main-menu/main-menu-deploy.tag +++ b/src/riotTags/main-menu/main-menu-deploy.tag @@ -24,7 +24,7 @@ main-menu-deploy path = require('path'); const {getBuildDir, getExportDir} = require('./data/node_requires/platformUtils'); const buildFolder = await getBuildDir(); - const runCtExport = require('./data/node_requires/exporter'); + const runCtExport = require('./data/node_requires/exporter').exportCtProject; const exportFile = path.join( buildFolder, `${global.currentProject.settings.authoring.title || 'ct.js game'}.zip` diff --git a/src/riotTags/main-menu/main-menu-latest-projects.tag b/src/riotTags/main-menu/main-menu-latest-projects.tag index cc1765bf5..a89d6f840 100644 --- a/src/riotTags/main-menu/main-menu-latest-projects.tag +++ b/src/riotTags/main-menu/main-menu-latest-projects.tag @@ -21,8 +21,9 @@ main-menu-latest-projects this.loadLatestProject = projPath => { alertify.confirm(window.languageJSON.common.reallyExitConfirm, e => { if (e) { + const {openProject} = require('./data/node_requires/resources/projects'); window.signals.trigger('resetAll'); - window.loadProject(projPath); + openProject(projPath); } }); }; diff --git a/src/riotTags/main-menu/main-menu-meta.tag b/src/riotTags/main-menu/main-menu-meta.tag index 64d574656..5ee346d5b 100644 --- a/src/riotTags/main-menu/main-menu-meta.tag +++ b/src/riotTags/main-menu/main-menu-meta.tag @@ -1,7 +1,7 @@ main-menu-meta h1 {voc.heading} ul.aMenu - li(onclick="{() => nw.Shell.openExternal('https://www.patreon.com/comigo')}") + li(onclick="{() => nw.Shell.openExternal('https://boosty.to/comigo')}") svg.feather use(xlink:href="#heart") span {vocGlob.donate} diff --git a/src/riotTags/main-menu/main-menu-project.tag b/src/riotTags/main-menu/main-menu-project.tag index 5a8f86834..5ae1c39c7 100644 --- a/src/riotTags/main-menu/main-menu-project.tag +++ b/src/riotTags/main-menu/main-menu-project.tag @@ -86,7 +86,8 @@ main-menu-project return; } window.signals.trigger('resetAll'); - window.loadProject(projFile); + const {openProject} = require('./data/node_requires/resources/projects'); + openProject(projFile); }); }; diff --git a/src/riotTags/main-menu/main-menu-settings.tag b/src/riotTags/main-menu/main-menu-settings.tag index 74c51430e..c2884564e 100644 --- a/src/riotTags/main-menu/main-menu-settings.tag +++ b/src/riotTags/main-menu/main-menu-settings.tag @@ -13,7 +13,15 @@ main-menu-settings svg.feather use(xlink:href="#font") span {voc.codeFont} + li(onclick="{togglePrideMode}") + svg.feather + use(xlink:href="#{localStorage.prideMode === 'on' ? 'check-square' : 'square'}") + span {voc.prideMode} ul.aMenu + li(onclick="{toggleTemplatesLayout}") + svg.feather + use(xlink:href="#{localStorage.altTemplateLayout === 'on' ? 'check-square' : 'square'}") + span {voc.altTemplateLayout} li(onclick="{toggleSounds}") svg.feather use(xlink:href="#{localStorage.disableSounds === 'on' ? 'check-square' : 'square'}") @@ -47,10 +55,18 @@ main-menu-settings this.showLanguageSelector = true; }; + this.toggleTemplatesLayout = () => { + localStorage.altTemplateLayout = localStorage.altTemplateLayout === 'on' ? 'off' : 'on'; + }; this.toggleSounds = () => { localStorage.disableSounds = (localStorage.disableSounds || 'off') === 'off' ? 'on' : 'off'; }; + this.togglePrideMode = () => { + localStorage.prideMode = (localStorage.prideMode || 'off') === 'off' ? 'on' : 'off'; + window.signals.trigger('prideModeUpdated'); + }; + this.toggleLigatures = () => { localStorage.codeLigatures = localStorage.codeLigatures === 'off' ? 'on' : 'off'; window.signals.trigger('codeFontUpdated'); diff --git a/src/riotTags/main-menu/main-menu.tag b/src/riotTags/main-menu/main-menu.tag index a098a99e8..b010a66ed 100644 --- a/src/riotTags/main-menu/main-menu.tag +++ b/src/riotTags/main-menu/main-menu.tag @@ -3,8 +3,8 @@ main-menu main-menu-project.main-menu-aDoubleSection main-menu-deploy.main-menu-aSection main-menu-latest-projects.main-menu-aTripleSection - main-menu-settings.main-menu-aQuadrupleSection - main-menu-meta.main-menu-aQuadrupleSection + main-menu-settings.main-menu-aQuadrupleSection(ref="settings") + main-menu-meta.main-menu-aQuadrupleSection(ref="meta") main-menu-troubleshooting.main-menu-aDoubleSection script. this.namespace = 'mainMenu'; diff --git a/src/riotTags/main-menu/stylebook-panel.tag b/src/riotTags/main-menu/stylebook-panel.tag index 299a65b38..590072b34 100644 --- a/src/riotTags/main-menu/stylebook-panel.tag +++ b/src/riotTags/main-menu/stylebook-panel.tag @@ -183,12 +183,15 @@ stylebook-panel.aPanel.aView.pad.flexrow | This is an code.inline inline | code. + stylebook-section(heading="Dimmed elements") + yield(to="example") + .dim Simply drops the opacity of an element to 50% stylebook-section(heading="Notices") yield(to="example") .aNotice Notices are more bleak and are written in italic. stylebook-section(heading="Cropped text with ellipsis") yield(to="example") - .crop Yada yada yada yada yada yada yada yada + .crop Yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada stylebook-section(heading="Contrasting plaques" stripedbg="yes") yield(to="example") .aContrastingPlaque Use these on colored or contrasting backgrounds. @@ -736,6 +739,11 @@ stylebook-panel.aPanel.aView.pad.flexrow p These have absolute positioning and are to be positioned with CSS. yield(to="example") .anErrorNotice There is an error that you should fix immediately! + stylebook-section(heading="A pulser") + yield(to="description") + p A pulsating animation that positions itself in the center of the current layer. + yield(to="example") + .aPulser stylebook-section(heading="16:9 container") yield(to="description") p Takes an iframe, embed, or video tag and positions it so that it occupies all the available width while preserving perfect 16:9 proportions. @@ -881,6 +889,9 @@ stylebook-panel.aPanel.aView.pad.flexrow svg.feather.rotate use(xlink:href="#refresh-cw") span A button with a "wait" cursor + p + button.cursorhelp + span A button with a "help" cursor .aSpacer.nogrow .nogrow button.inline.square(onclick="{opts.onclose}" title="{vocGlob.close}") diff --git a/src/riotTags/notepad-panel.tag b/src/riotTags/notepad-panel.tag index bb2b423ea..bb783dfa0 100644 --- a/src/riotTags/notepad-panel.tag +++ b/src/riotTags/notepad-panel.tag @@ -1,5 +1,5 @@ notepad-panel#notepad.aPanel.dockright(class="{opened: opened}") - ul.aNav.tabs.nogrow.nb + ul.aNav.tabs.nogrow.nb(ref="tabs") li(onclick="{changeTab('notepadlocal')}" class="{active: tab === 'notepadlocal'}") svg.feather use(xlink:href="#edit") @@ -12,7 +12,7 @@ notepad-panel#notepad.aPanel.dockright(class="{opened: opened}") svg.feather use(xlink:href="#life-buoy") span {voc.helpPages} - li(onclick="{changeTab('modulespages')}" class="{active: tab === 'modulespages'}") + li(onclick="{changeTab('modulespages')}" class="{active: tab === 'modulespages'}" ref="modulesTab") svg.feather use(xlink:href="#ctmod") span {voc.modulesPages} @@ -29,7 +29,7 @@ notepad-panel#notepad.aPanel.dockright(class="{opened: opened}") div(show="{tab === 'modulespages'}") docs-panel - button.vertical.dockleft(onclick="{notepadToggle}") + button.vertical.dockleft(onclick="{notepadToggle}" ref="toggleButton") svg.feather use(xlink:href="#{opened? 'chevron-right' : 'chevron-left'}") script. @@ -59,7 +59,9 @@ notepad-panel#notepad.aPanel.dockright(class="{opened: opened}") setTimeout(() => { if (this.tab && this.refs[this.tab] && this.refs[this.tab].codeEditor) { this.refs[this.tab].codeEditor.layout(); - this.refs[this.tab].codeEditor.focus(); + if (this.opened) { + this.refs[this.tab].codeEditor.focus(); + } } }, 0); }); diff --git a/src/riotTags/particles/emitter-tandem-editor.tag b/src/riotTags/particles/emitter-tandem-editor.tag index 2afe453a2..4cff1d30b 100644 --- a/src/riotTags/particles/emitter-tandem-editor.tag +++ b/src/riotTags/particles/emitter-tandem-editor.tag @@ -186,9 +186,7 @@ emitter-tandem-editor.aPanel.aView.flexrow const textures = require('./data/node_requires/resources/textures'); const pivot = textures.getTexturePivot(this.tandem.previewTexture); [this.previewTexture.anchor.x, this.previewTexture.anchor.y] = pivot; - textures.getPixiTexture(this.tandem.previewTexture, 0).then(tex => { - this.previewTexture.texture = tex; - }); + this.previewTexture.texture = textures.getPixiTexture(this.tandem.previewTexture, 0); } else { this.previewTexture.texture = PIXI.Texture.EMPTY; } diff --git a/src/riotTags/project-selector.tag b/src/riotTags/project-selector.tag index 915635168..7c0c1fedd 100644 --- a/src/riotTags/project-selector.tag +++ b/src/riotTags/project-selector.tag @@ -1,5 +1,5 @@ project-selector - #bg.stretch.flexcol + #theIntroBg.stretch.flexcol .pad.left.nogrow button.inline(onclick="{toggleLanguageSelector}") svg.feather @@ -93,7 +93,7 @@ project-selector button.tiny(onclick="{cloneProject}" title="{voc.cloneProject}") svg.feather use(xlink:href="#copy") - #newProject.inset.flexfix-footer.flexrow + #theNewProjectField.inset.flexfix-footer.flexrow h3.nm.inline {voc.newProject.text} input( type='text' @@ -119,9 +119,13 @@ project-selector a(href="https://vk.com/ctjsrocks" title="{voc.vkontakte}" onclick="{openExternal('https://vk.com/ctjsrocks')}") svg.icon use(xlink:href="#vk") - a(href="https:/patreon.com/comigo" title="{voc.patreon}" onclick="{openExternal('https:/patreon.com/comigo')}") + // + a(href="https:/patreon.com/comigo" title="{voc.patreon}" onclick="{openExternal('https:/patreon.com/comigo')}") + svg.icon + use(xlink:href="#patreon") + a(href="https://boosty.to/comigo" title="{voc.boosty}" onclick="{openExternal('https://boosty.to/comigo')}") svg.icon - use(xlink:href="#patreon") + use(xlink:href="#boosty") .inlineblock v{ctjsVersion}. | | @@ -133,6 +137,7 @@ project-selector script. const fs = require('fs-extra'), path = require('path'); + const {openProject} = require('./data/node_requires/resources/projects'); this.ctjsVersion = process.versions.ctjs; this.requirePath = path; this.namespace = 'intro'; @@ -243,7 +248,7 @@ project-selector } }); }, 0); - window.loadProject(path.join(way, codename + '.ict')); + openProject(path.join(way, codename + '.ict')); }; /** @@ -251,7 +256,7 @@ project-selector */ this.loadProjectByPath = e => { const projectPath = e.item.project; - window.loadProject(projectPath); + openProject(projectPath); }; /** * Prompts user to clone a project into a different folder/under a different name. @@ -273,7 +278,7 @@ project-selector } await fs.copy(project, newIctLocation); await fs.copy(project.slice(0, -4), newIctLocation.slice(0, -4)); - window.loadProject(newIctLocation); + openProject(newIctLocation); })(); }; /** @@ -296,10 +301,15 @@ project-selector title: this.voc.newProject.selectProjectFolder, defaultPath: defaultProjectDir, buttonLabel: this.voc.newProject.saveProjectHere, - openDirectory: true + // openDirectory: true, + saveAs: this.refs.projectname.value.trim() }); if (projPath) { - this.newProject(projPath, this.refs.projectname.value.trim()); + const tmpProjPath = projPath.trim(); + const directory = path.dirname(tmpProjPath); + const file = path.basename(tmpProjPath); + this.newProject(directory, file); + // this.newProject(projPath, this.refs.projectname.value.trim()); } }; @@ -325,7 +335,7 @@ project-selector return; } if (path.extname(proj).toLowerCase() === '.ict') { - window.loadProject(proj); + openProject(proj); sessionStorage.projname = path.basename(proj); global.projdir = path.dirname(proj) + path.sep + path.basename(proj, '.ict'); } else { diff --git a/src/riotTags/project-settings/project-settings.tag b/src/riotTags/project-settings/project-settings.tag index c9b3124be..b8d8247d9 100644 --- a/src/riotTags/project-settings/project-settings.tag +++ b/src/riotTags/project-settings/project-settings.tag @@ -17,7 +17,7 @@ project-settings.aPanel.aView.pad.flexrow // A bit of Pug sorcery, destroyed by Riot.js syntax // Iterate over an array of sections. Template out Riot syntax inside `these` backticks. each name in tabs - li(onclick=`{openTab('${name}')}` class=`{active: tab === '${name}'}` title=`{voc.${name}.heading}`) + li(onclick=`{openTab('${name}')}` class=`{active: tab === '${name}'}` title=`{voc.${name}.heading}` ref=`${name}Tab`) svg.feather use(xlink:href=`#${(name in iconMap)? iconMap[name] : iconMap.default}`) span='{voc.' + name + '.heading}' diff --git a/src/riotTags/project-settings/tabs/modules/module-meta.tag b/src/riotTags/project-settings/tabs/modules/module-meta.tag index 2899d27f8..88e9b4025 100644 --- a/src/riotTags/project-settings/tabs/modules/module-meta.tag +++ b/src/riotTags/project-settings/tabs/modules/module-meta.tag @@ -1,4 +1,4 @@ -module-meta(onclick="{toggleModule(opts.module.name)}") +module-meta(onclick="{toggleModule(opts.module.name)}" class="{opts.class} {dim: opts.module.manifest.main.deprecated}") .flexrow div h1.nmt {localizeField(opts.module.manifest.main, 'name')} diff --git a/src/riotTags/project-settings/tabs/rendering-settings.tag b/src/riotTags/project-settings/tabs/rendering-settings.tag index f6fc61ec3..704e98a93 100644 --- a/src/riotTags/project-settings/tabs/rendering-settings.tag +++ b/src/riotTags/project-settings/tabs/rendering-settings.tag @@ -7,7 +7,7 @@ rendering-settings input.short(type="number" min="1" value="{renderSettings.maxFPS || 60}" onchange="{wire('this.renderSettings.maxFPS')}") fieldset label.block.checkbox - input(type="checkbox" value="{renderSettings.pixelatedrender}" checked="{renderSettings.pixelatedrender}" onchange="{wire('this.renderSettings.pixelatedrender')}") + input(type="checkbox" value="{renderSettings.pixelatedrender}" checked="{renderSettings.pixelatedrender}" onchange="{wireAndUpdatePixelated('this.renderSettings.pixelatedrender')}") span {voc.pixelatedRender} label.block.checkbox input(type="checkbox" value="{renderSettings.highDensity}" checked="{renderSettings.highDensity}" onchange="{wire('this.renderSettings.highDensity')}") @@ -40,3 +40,9 @@ rendering-settings this.mixin(window.riotWired); this.currentProject = global.currentProject; this.renderSettings = this.currentProject.settings.rendering; + + this.wireAndUpdatePixelated = path => e => { + this.wire(path)(e); + const {setPixelart} = require('./data/node_requires/resources/textures'); + setPixelart(window.currentProject.settings.rendering.pixelatedrender); + }; diff --git a/src/riotTags/rooms/copy-custom-properties-modal.tag b/src/riotTags/rooms/copy-custom-properties-modal.tag deleted file mode 100644 index 39c3023ef..000000000 --- a/src/riotTags/rooms/copy-custom-properties-modal.tag +++ /dev/null @@ -1,93 +0,0 @@ -// - Shows a table of a copy's extensions object that is modifiable - - @attribute closestcopy (object) - The copy to show its extensions object - - @attribute showme (function) - A function that changes whether this modal is shown - -copy-custom-properties-modal - .aPanel.flexfix(ref="widget" style='overflow: auto; max-height: 600px') - h2.flexfix-header {voc.customProperties} - .flexfix-body - table.wide.aPaddedTable - tr - th {voc.property} - th {voc.value} - th - tr(each="{val, prop in opts.closestcopy.exts}") - td - input.wide(name="copyCustomProp" type="text" value="{prop}" onchange="{onTableChange}") - td - input.wide(name="copyCustomValue" type="text" value="{JSON.stringify(val)}" onchange="{onTableChange}") - td - button.toright.square.inline(onclick="{deleteCustomProperty.bind(null, prop)}" title="{voc.delete}") - svg.feather - use(xlink:href="#trash") - .clear - p - .flexrow.flexfix-footer - .filler - button.nogrow(onclick="{addCustomProperty}") - svg.feather - use(xlink:href="#plus") - span {voc.addProperty} - button.nogrow(onclick="{finished}") - svg.feather - use(xlink:href="#check") - span {vocGlob.apply} - script. - this.namespace = 'copyCustomProperties'; - this.mixin(window.riotVoc); - if (!this.opts.closestcopy.exts) { - this.opts.closestcopy.exts = {}; - } - // an ID to use as newly created property names - this.currentId = 1; - - this.onTableChange = () => { - // read all properties from the table - var propElements = document.getElementsByName('copyCustomProp'); - var props = []; - for (const prop of propElements) { - props.push(prop.value); - } - - // read all values from the table - var valueElements = document.getElementsByName('copyCustomValue'); - var values = []; - - for (const value of valueElements) { - // attempt to parse the value - // only strings will be unparsable with the JSON.parse method - var trueValue; - try { - trueValue = JSON.parse(value.value); // JSON, number, boolean - } catch { - trueValue = value.value; // string - } - values.push(trueValue); - } - - var newExts = {}; - - props.forEach((prop, index) => { - newExts[prop] = values[index]; - }); - - this.opts.closestcopy.exts = newExts; - }; - - this.addCustomProperty = () => { - this.opts.closestcopy.exts['newProperty' + this.currentId] = ''; - this.currentId++; - }; - - this.deleteCustomProperty = (prop) => { - delete this.opts.closestcopy.exts[prop]; - }; - - this.finished = () => { - this.opts.showme(false); - }; diff --git a/src/riotTags/rooms/room-backgrounds-editor.tag b/src/riotTags/rooms/room-backgrounds-editor.tag index 366d30d38..e25b1c8da 100644 --- a/src/riotTags/rooms/room-backgrounds-editor.tag +++ b/src/riotTags/rooms/room-backgrounds-editor.tag @@ -1,74 +1,157 @@ -room-backgrounds-editor.room-editor-Backgrounds.tabbed.tall - ul - li.bg(each="{background, ind in opts.room.backgrounds}" oncontextmenu="{onContextMenu}") - img(src="{getTexturePreview(background.texture)}" onclick="{onChangeBgTexture}") - span - span(class="{active: detailedBackground === background}" onclick="{editBackground}") - svg.feather - use(xlink:href="#settings") - | {getTextureFromId(background.texture).name} ({background.depth}) - .clear - .anErrorNotice(if="{background.texture && background.texture !== -1 && !getTextureFromId(background.texture).tiled && !getTextureFromId(background.texture).ignoreTiledUse}") - | {voc.notBackgroundTextureWarning} +// + @attribute backgrounds (Background[]) + @attribute addbackground (riot function) + @attribute room (IRoom) + @attribute history (History) + +room-backgrounds-editor + collapsible-section( + each="{background, ind in opts.backgrounds}" + icon="settings" + ).aPanel + yield(to="header") + asset-input( + assettype="textures" + assetid="{background.bgTexture}" + compact="true" + onchanged="{parent.changeBgTexture(background)}" + ref="assetInput" + ) + error-notice( + if="{background.bgTexture && background.bgTexture !== -1 && !parent.getTextureFromId(background.bgTexture).tiled && !parent.getTextureFromId(background.bgTexture).ignoreTiledUse}" + target="{refs.assetInput}" + ) + | {parent.parent.voc.notBackgroundTextureWarning} | - span.a(onclick="{fixTexture(background)}") {voc.fixBackground} + span.a(onclick="{parent.parent.fixTexture}") {parent.parent.voc.fixBackground} | | - span.a(onclick="{dismissWarning(background)}") {voc.dismissWarning} - div(if="{detailedBackground === background}") - .clear - label - b {voc.depth} - input.wide(type="number" value="{background.depth || 0}" step="0" oninput="{onChangeBgDepth}") - - b {voc.shift} - .clear - label.fifty.npl.npt - input.wide(type="number" value="{background.extends.shiftX || 0}" step="8" oninput="{wire('this.detailedBackground.extends.shiftX')}") - label.fifty.npr.npt - input.wide(type="number" value="{background.extends.shiftY || 0}" step="8" oninput="{wire('this.detailedBackground.extends.shiftY')}") - - b {voc.scale} - .clear - label.fifty.npl.npt - input.wide(type="number" value="{background.extends.scaleX || 1}" step="0.01" oninput="{wire('this.detailedBackground.extends.scaleX')}") - label.fifty.npr.npt - input.wide(type="number" value="{background.extends.scaleY || 1}" step="0.01" oninput="{wire('this.detailedBackground.extends.scaleY')}") - - b {voc.movement} - .clear - label.fifty.npl.npt - input.wide(type="number" value="{background.extends.movementX || 0}" step="0.1" oninput="{wire('this.detailedBackground.extends.movementX')}") - label.fifty.npr.npt - input.wide(type="number" value="{background.extends.movementY || 0}" step="0.1" oninput="{wire('this.detailedBackground.extends.movementY')}") - - b {voc.parallax} - .clear - label.fifty.npl.npt - input.wide(type="number" value="{background.extends.parallaxX !== void 0 ? background.extends.parallaxX : 1}" step="0.01" oninput="{wire('this.detailedBackground.extends.parallaxX')}") - label.fifty.npr.npt - input.wide(type="number" value="{background.extends.parallaxY !== void 0 ? background.extends.parallaxY : 1}" step="0.01" oninput="{wire('this.detailedBackground.extends.parallaxY')}") - .clear - - b {voc.repeat} - select(onchange="{wire('this.detailedBackground.extends.repeat')}") - option(value="repeat" selected="{detailedBackground.extends.repeat === 'repeat'}") repeat - option(value="repeat-x" selected="{detailedBackground.extends.repeat === 'repeat-x'}") repeat-x - option(value="repeat-y" selected="{detailedBackground.extends.repeat === 'repeat-y'}") repeat-y - option(value="no-repeat" selected="{detailedBackground.extends.repeat === 'no-repeat'}") no-repeat - + span.a(onclick="{parent.parent.dismissWarning}") {parent.parent.voc.dismissWarning} + fieldset + label + b {parent.voc.depth} + input.wide( + type="number" step="1" + onfocus="{parent.rememberValue}" + value="{background.zIndex}" + oninput="{parent.tweak(background, 'zIndex')}" + onchange="{parent.recordChange(background, 'zIndex')}" + ) + fieldset + b {parent.voc.shift} + .aPoint2DInput.compact.wide + label.flexrow + span.nogrow X: + input.nmr( + type="number" step="8" placeholder="0" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background, 'shiftX')}" + onchange="{parent.recordChange(background, 'shiftX')}" + value="{background.shiftX}" + ) + .aSpacer.noshrink.nogrow + label.flexrow + span.nogrow Y: + input.nmr( + type="number" step="8" placeholder="0" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background, 'shiftY')}" + onchange="{parent.recordChange(background, 'shiftY')}" + value="{background.shiftY}" + ) + b {parent.voc.scale} + .aPoint2DInput.compact.wide + label.flexrow + span.nogrow X: + input.nmr( + type="number" step="0.1" placeholder="1" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background.tileScale, 'x')}" + onchange="{parent.recordChange(background.tileScale, 'x')}" + value="{background.tileScale.x}" + ) + .aSpacer.noshrink.nogrow + label.flexrow + span.nogrow Y: + input.nmr( + type="number" step="0.1" placeholder="1" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background.tileScale, 'y')}" + onchange="{parent.recordChange(background.tileScale, 'y')}" + value="{background.tileScale.y}" + ) + fieldset + b {parent.voc.movement} + .aPoint2DInput.compact.wide + label.flexrow + span.nogrow X: + input.nmr( + type="number" step="1" placeholder="0" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background, 'movementX')}" + onchange="{parent.recordChange(background, 'movementX')}" + value="{background.movementX}" + ) + .aSpacer.noshrink.nogrow + label.flexrow + span.nogrow Y: + input.nmr( + type="number" step="1" placeholder="0" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background, 'movementY')}" + onchange="{parent.recordChange(background, 'movementY')}" + value="{background.movementY}" + ) + b {parent.voc.parallax} + .aPoint2DInput.compact.wide + label.flexrow + span.nogrow X: + input.nmr( + type="number" step="0.1" placeholder="1" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background, 'parallaxX')}" + onchange="{parent.recordChange(background, 'parallaxX')}" + value="{background.parallaxX}" + ) + .aSpacer.noshrink.nogrow + label.flexrow + span.nogrow Y: + input.nmr( + type="number" step="0.1" placeholder="1" + onfocus="{parent.rememberValue}" + oninput="{parent.tweak(background, 'parallaxY')}" + onchange="{parent.recordChange(background, 'parallaxY')}" + value="{background.parallaxY}" + ) + fieldset + b {parent.voc.repeat} + | + select( + onfocus="{parent.rememberValue}" + onchange="{parent.recordAndTweak(background, 'repeat')}" + ) + option(value="repeat" selected="{background.repeat === 'repeat'}") repeat + option(value="repeat-x" selected="{background.repeat === 'repeat-x'}") repeat-x + option(value="repeat-y" selected="{background.repeat === 'repeat-y'}") repeat-y + option(value="no-repeat" selected="{background.repeat === 'no-repeat'}") no-repeat + .aSpacer + button.wide(onclick="{parent.removeBg}") + svg.feather + use(xlink:href="#trash") + span {parent.vocGlob.delete} + .aSpacer(if="{opts.backgrounds.length}") button.inline.wide(onclick="{addBg}") svg.feather use(xlink:href="#plus") span {voc.add} + // Used for selecting a texture for newly created backgrounds asset-selector( ref="texturePicker" - if="{pickingBackground}" + if="{newBg}" assettype="textures" oncancelled="{onTextureCancel}" onselected="{onTextureSelected}" ) - context-menu(menu="{roomBgMenu}" ref="roomBgMenu") script. const glob = require('./data/node_requires/glob'); this.glob = glob; @@ -80,85 +163,119 @@ room-backgrounds-editor.room-editor-Backgrounds.tabbed.tall this.pickingBackground = false; this.namespace = 'roomBackgrounds'; this.mixin(window.riotVoc); - this.mixin(window.riotWired); - this.on('update', () => { - if (this.parent.tab === 'roombackgrounds') { - this.parent.refreshRoomCanvas(); + + this.tweak = (obj, field) => e => { + const input = e.target; + if (input.type === 'radio' || input.type === 'checkbox') { + obj[field] = input.checked; + } else if (input.type === 'number') { + obj[field] = Number(input.value); + } else { + obj[field] = input.value; } - }); + }; + + // These two are only for newly created backgrounds, for which an asset selection modal + // is automatically created this.onTextureSelected = textureId => { - this.editingBackground.texture = textureId; - this.pickingBackground = false; - this.creatingBackground = false; + this.newBg.changeTexture(textureId); + this.opts.history.pushChange({ + type: 'backgroundCreation', + created: this.newBg + }); + this.newBg = void 0; this.update(); }; this.onTextureCancel = () => { this.pickingBackground = false; - if (this.creatingBackground) { - const bgs = this.opts.room.backgrounds; - bgs.splice(bgs.indexOf(this.editingBackground), 1); - this.parent.resortRoom(); - this.creatingBackground = false; + if (this.newBg) { + this.newBg.destroy(); } + this.newBg = false; this.update(); }; + this.addBg = () => { - var newBg = { + const bgTemplate = { depth: 0, texture: -1, - extends: {} + parallaxX: 1, + parallaxY: 1, + shiftX: 0, + shiftY: 0, + scaleX: 1, + scaleY: 1, + movementX: 0, + movementY: 0, + repeat: 'repeat' }; - this.opts.room.backgrounds.push(newBg); - this.editingBackground = newBg; + const bg = this.opts.addbackground(bgTemplate); + this.newBg = bg; this.pickingBackground = true; - this.creatingBackground = true; - this.opts.room.backgrounds.sort((a, b) => a.depth - b.depth); - this.parent.resortRoom(); - this.update(); }; - this.onContextMenu = e => { - this.editedBg = Number(e.item.ind); - this.refs.roomBgMenu.popup(e.clientX, e.clientY); - e.preventDefault(); + + this.changeBgTexture = background => textureId => { + const prevId = background.bgTexture; + background.changeTexture(textureId); + this.opts.history.pushChange({ + type: 'propChange', + key: 'bgTexture', + target: background, + before: prevId, + after: textureId + }); + this.update(); }; - this.roomBgMenu = { - opened: false, - items: [{ - label: window.languageJSON.common.delete, - click: () => { - this.opts.room.backgrounds.splice(this.editedBg, 1); - this.parent.resortRoom(); - this.update(); - } - }] + + this.removeBg = e => { + const {background} = e.item; + background.detach(); + this.opts.history.pushChange({ + type: 'backgroundDeletion', + deleted: background + }); }; - this.onChangeBgTexture = e => { - this.pickingBackground = true; - this.editingBackground = e.item.background; + + this.fixTexture = e => { + const {background} = e.item; + const tex = getTextureFromId(background.bgTexture); + tex.tiled = true; + e.stopPropagation(); this.update(); }; - this.onChangeBgDepth = e => { - e.item.background.depth = Number(e.target.value); - this.opts.room.backgrounds.sort((a, b) => a.depth - b.depth); - this.parent.resortRoom(); + this.dismissWarning = e => { + const {background} = e.item; + const tex = getTextureFromId(background.bgTexture); + tex.ignoreTiledUse = true; + e.stopPropagation(); + this.update(); }; - this.editBackground = e => { - if (this.detailedBackground === e.item.background) { - this.detailedBackground = void 0; + var prevValue; + this.rememberValue = e => { + if (e.target.type === 'number') { + prevValue = Number(e.target.value); } else { - this.detailedBackground = e.item.background; - if (!('extends' in this.detailedBackground)) { - this.detailedBackground.extends = {}; - } + prevValue = e.target.value; } }; - - this.fixTexture = background => () => { - const tex = getTextureFromId(background.texture); - tex.tiled = true; + this.recordChange = (entity, key) => e => { + if (!this.opts.history) { + return; + } + let {value} = e.target; + if (e.target.type === 'number') { + value = Number(value); + } + this.opts.history.pushChange({ + type: 'propChange', + key, + target: entity, + before: prevValue, + after: value + }); }; - this.dismissWarning = background => () => { - const tex = getTextureFromId(background.texture); - tex.ignoreTiledUse = true; + this.recordAndTweak = (entity, key) => e => { + this.tweak(entity, key)(e); + this.recordChange(entity, key)(e); }; diff --git a/src/riotTags/rooms/room-copy-properties.tag b/src/riotTags/rooms/room-copy-properties.tag deleted file mode 100644 index cdf4520b6..000000000 --- a/src/riotTags/rooms/room-copy-properties.tag +++ /dev/null @@ -1,65 +0,0 @@ -room-copy-properties.aPanel - b {voc.position}: - .aPoint2DInput.compact.wide - label - span X: - | - input.compact( - step="8" type="number" - oninput="{wire('this.opts.copy.x')}" - value="{opts.copy.x}" - ) - .aSpacer - label - span.nogrow Y: - | - input.compact( - step="8" type="number" - oninput="{wire('this.opts.copy.y')}" - value="{opts.copy.y}" - ) - b {voc.scale}: - .aPoint2DInput.compact.wide - label - span X: - | - input.compact( - step="0.1" type="number" - oninput="{wire('this.opts.copy.tx')}" - value="{opts.copy.tx === void 0 ? 1 : opts.copy.tx}" - ) - .aSpacer - label - span.nogrow Y: - | - input.compact( - step="0.1" type="number" - oninput="{wire('this.opts.copy.ty')}" - value="{opts.copy.ty === void 0 ? 1 : opts.copy.ty}" - ) - b {voc.rotation}: - dd - .flexrow - .aSliderWrap - input.compact( - type="range" min="0" max="360" step="1" - value="{opts.copy.tr || 0}" - oninput="{wire('this.opts.copy.tr')}" - ) - .aSpacer - input.compact( - min="0" max="360" step="1" type="number" - value="{opts.copy.tr || 0}" - oninput="{wire('this.opts.copy.tr')}" - ) - extensions-editor(entity="{opts.copy.exts}" type="copy" compact="yes" wide="yup") - script. - this.namespace = 'roomView.copyProperties'; - this.mixin(window.riotVoc); - this.mixin(window.riotWired); - - this.on('update', () => { - if (this.opts.copy && !this.opts.copy.exts) { - this.opts.copy.exts = {}; - } - }); diff --git a/src/riotTags/rooms/room-editor.tag b/src/riotTags/rooms/room-editor.tag index fd82bd89c..f027ab46e 100644 --- a/src/riotTags/rooms/room-editor.tag +++ b/src/riotTags/rooms/room-editor.tag @@ -1,806 +1,479 @@ -room-editor.aPanel.aView - .toolbar.tall(style="width: {sidebarWidth}px") - copy-custom-properties-modal(if="{showCopyPropertiesModal}" closestcopy="{closestCopy}" showme="{toggleCopyProperties}") - .settings.nogrow.noshrink - b {voc.name} - br - input.wide(type="text" value="{room.name}" onchange="{wire('this.room.name')}") - .anErrorNotice(if="{nameTaken}" ref="errorNotice") {vocGlob.nameTaken} - button.wide(onclick="{openRoomEvents}") - svg.feather(if="{room.oncreate || room.onstep || room.ondestroy || room.ondraw}") - use(xlink:href="#check") - span {voc.events} - .palette - .tabwrap.flexfix - ul.tabs.aNav.noshrink.nogrow.flexfix-header - li(onclick="{changeTab('roomcopies')}" title="{voc.copies}" class="{active: tab === 'roomcopies'}") - svg.feather - use(xlink:href="#template") - span(if="{sidebarWidth > 500}") {voc.copies} - li(onclick="{changeTab('roombackgrounds')}" title="{voc.backgrounds}" class="{active: tab === 'roombackgrounds'}") - svg.feather - use(xlink:href="#image") - span(if="{sidebarWidth > 500}") {voc.backgrounds} - li(onclick="{changeTab('roomtiles')}" title="{voc.tiles}" class="{active: tab === 'roomtiles'}") - svg.feather - use(xlink:href="#texture") - span(if="{sidebarWidth > 500}") {voc.tiles} - li(onclick="{changeTab('properties')}" title="{voc.properties}" class="{active: tab === 'properties'}") - svg.feather - use(xlink:href="#settings") - span(if="{sidebarWidth > 500}") {voc.properties} - .relative.flexfix-body - room-template-picker(show="{tab === 'roomcopies'}" current="{currentTemplate}") - room-backgrounds-editor(show="{tab === 'roombackgrounds'}" room="{room}") - room-tile-editor(show="{tab === 'roomtiles'}" room="{room}") - .pad.aPanel(show="{tab === 'properties'}") - fieldset - .fifty.npt.npb.npl - b {voc.width} - br - input.wide(type="number" value="{room.width}" onchange="{wireAndRedraw('this.room.width')}") - .fifty.npt.npb.npr - b {voc.height} - br - input.wide(type="number" value="{room.height}" onchange="{wireAndRedraw('this.room.height')}") - .clear - fieldset - label.checkbox - input(type="checkbox" checked="{room.restrictCamera}" onchange="{wireAndRedraw('this.room.restrictCamera')}") - span {voc.restrictCamera} - .aPoint2DInput.compact.wide(if="{room.restrictCamera}") - label - span {voc.minimumX}: - | - input.compact( - step="{room.gridX}" type="number" - oninput="{wireAndRedraw('this.room.restrictMinX')}" - value="{room.restrictMinX === void 0 ? 0 : room.restrictMinX}" - ) - .aSpacer - label - span.nogrow {voc.minimumY}: - | - input.compact( - step="{room.gridY}" type="number" - oninput="{wireAndRedraw('this.room.restrictMinY')}" - value="{room.restrictMinY === void 0 ? 0 : room.restrictMinY}" - ) - .aPoint2DInput.compact.wide(if="{room.restrictCamera}") - label - span {voc.maximumX}: - | - input.compact( - step="{room.gridX}" type="number" - oninput="{wireAndRedraw('this.room.restrictMaxX')}" - value="{room.restrictMaxX === void 0 ? room.width : room.restrictMaxX}" - ) - .aSpacer - label - span.nogrow {voc.maximumY}: - | - input.compact( - step="{room.gridY}" type="number" - oninput="{wireAndRedraw('this.room.restrictMaxY')}" - value="{room.restrictMaxY === void 0 ? room.height : room.restrictMaxY}" - ) - - fieldset - b {voc.backgroundColor} - br - color-input.wide(onchange="{updateRoomBackground}" color="{room.backgroundColor || '#000000'}") - - fieldset - extensions-editor(entity="{room.extends}" type="room" wide="aye" compact="sure") +// + @attribute room + The room to edit + @attribute onclose (riot function) - fieldset - label.block.checkbox - input(type="checkbox" checked="{room.extends.isUi}" onchange="{wire('this.room.extends.isUi')}") - b {voc.isUi} - - .done.nogrow - button.wide#roomviewdone(onclick="{roomSave}") +room-editor.aPanel.aView + canvas(ref="canvas" onwheel="{triggerWheelEvent}") + // Toolbar + .room-editor-aToolsetHolder + .room-editor-aToolbar.aButtonGroup.vertical + button.forcebackground( + onclick="{setTool('select')}" + class="{active: currentTool === 'select'}" + title="{voc.tools.select} (Q)" + data-hotkey="q" + data-hotkey-require-scope="rooms" + ) svg.feather - use(xlink:href="#check") - span {voc.done} - .aResizer.vertical(ref="gutter" onmousedown="{gutterMouseDown}") - .editor(ref="canvaswrap") - canvas( - ref="canvas" - onclick="{onCanvasClick}" - onmousedown="{onCanvasPress}" - onmousemove="{onCanvasMove}" - onmouseup="{onCanvasMouseUp}" - onmouseout="{refreshRoomCanvas}" - onmousewheel="{onCanvasWheel}" - oncontextmenu="{onCanvasContextMenu}" - ) - .shift.flexrow - button.inline.square.forcebackground(title="{voc.shift}" onclick="{roomShift}") + use(xlink:href="#cursor") + button.forcebackground( + onclick="{setTool('addCopies')}" + class="{active: currentTool === 'addCopies'}" + title="{voc.tools.addCopies} (W)" + data-hotkey="w" + data-hotkey-require-scope="rooms" + ) svg.feather - use(xlink:href="#move") - .aButtonGroup - button.inline.square.forcebackground( - title="{voc.sortHorizontally}" - onclick="{sortHorizontally}" - if="{tab === 'roomcopies' || tab === 'roomtiles'}" - ) - svg.feather - use(xlink:href="#sort-horizontal") - button.inline.square.forcebackground( - title="{voc.sortVertically}" - onclick="{sortVertically}" - if="{tab === 'roomcopies' || tab === 'roomtiles'}" + use(xlink:href="#template") + button.forcebackground( + onclick="{setTool('addTiles')}" + class="{active: currentTool === 'addTiles'}" + title="{voc.tools.addTiles} (E)" + data-hotkey="e" + data-hotkey-require-scope="rooms" + ) + svg.feather + use(xlink:href="#grid") + button.forcebackground( + onclick="{setTool('manageBackgrounds')}" + class="{active: currentTool === 'manageBackgrounds'}" + title="{voc.tools.manageBackgrounds} (R)" + data-hotkey="r" + data-hotkey-require-scope="rooms" + ) + svg.feather + use(xlink:href="#image") + button.forcebackground( + onclick="{setTool('roomProperties')}" + class="{active: currentTool === 'roomProperties'}" + title="{voc.tools.roomProperties} (T)" + data-hotkey="t" + data-hotkey-require-scope="rooms" + ) + svg.feather + use(xlink:href="#settings") + + // Contextual panels for tools + .room-editor-aContextPanel( + if="{currentTool === 'select' && pixiEditor}" + ) + h3.nogrow.nm.inlineblock {vocGlob.select}: + .aSpacer.inlineblock + .aButtonGroup.nm + button.inline.square( + each="{lockable in lockableTypes}" + class="{active: parent.pixiEditor && parent.pixiEditor[lockable.key]}" + onclick="{toggleSelectables}" + title="{voc[lockable.hintVocKey]}" ) svg.feather - use(xlink:href="#sort-vertical") - span.aContrastingPlaque(if="{window.innerWidth - sidebarWidth > 940}") {voc.hotkeysNotice} - .zoom.flexrow - b.aContrastingPlaque - span(if="{window.innerWidth - sidebarWidth > 980}") {vocGlob.zoom}: - | - | - span {Math.round(zoomFactor * 100)}% - .aSpacer - zoom-slider(onchanged="{setZoom}" ref="zoomslider" value="{zoomFactor}") - .grid - button#roomgrid.forcebackground(onclick="{roomToggleGrid}" class="{active: room.gridX > 0}") - span {voc[room.gridX > 0? 'gridOff' : 'grid']} - .center - button#roomcenter.forcebackground(onclick="{roomToCenter}") {voc.toCenter} - b.aMouseCoord.aContrastingPlaque(show="{window.innerWidth - sidebarWidth > 470}" ref="mousecoords") ({mouseX}:{mouseY}) - room-copy-properties( - if="{this.selectedCopies && this.selectedCopies.length === 1}" - copy="{this.selectedCopies[0]}" - onchange="{refreshRoomCanvas}" oninput="{refreshRoomCanvas}" + use(xlink:href="#{lockable.icon}") + room-entities-properties(ref="propertiesPanel" pixieditor="{pixiEditor}" ontransformchange="{updateSelectFrame}") + room-properties.room-editor-aContextPanel( + if="{currentTool === 'roomProperties'}" + room="{opts.room}" + history="{pixiEditor?.history}" + updatebg="{changeBgColor}" + ref="propertiesPanel" + ) + room-template-picker.room-editor-aContextPanel( + if="{currentTool === 'addCopies'}" + onselect="{changeSelectedTemplate}" + selected="{currentTemplate}" + ) + room-tile-editor.room-editor-aContextPanel( + if="{currentTool === 'addTiles'}" + layer="{currentTileLayer}" + layers="{pixiEditor.tileLayers}" + onchangetile="{changeTilePatch}" + onchangelayer="{changeTileLayer}" + pixieditor="{pixiEditor}" + removelayer="{pixiEditor?.removeLayer?.bind(pixiEditor)}" + addlayer="{pixiEditor?.addTileLayer?.bind(pixiEditor)}" + ref="tileEditor" ) - room-events-editor(if="{editingCode}" room="{room}") - context-menu(menu="{roomCanvasCopiesMenu}" ref="roomCanvasCopiesMenu") - context-menu(menu="{roomCanvasMenu}" ref="roomCanvasMenu") - context-menu(menu="{roomCanvasTileMenu}" ref="roomCanvasTileMenu") - context-menu(menu="{roomCanvasTilesMenu}" ref="roomCanvasTilesMenu") + room-backgrounds-editor.room-editor-aContextPanel( + if="{currentTool === 'manageBackgrounds'}" + backgrounds="{pixiEditor?.backgrounds}" + addbackground="{pixiEditor?.addBackground?.bind(pixiEditor)}" + room="{opts.room}" + history="{pixiEditor?.history}" + ref="backgroundsEditor" + ) + + // Global controls placed at the top-center + .room-editor-aTopPanel + button.slim(onclick="{pixiEditor?.history.undo.bind(pixiEditor.history)}" title="{vocGlob.undo}" class="{dim: !pixiEditor?.history.canUndo}") + svg.feather + use(xlink:href="#undo") + button.slim(onclick="{pixiEditor?.history.redo.bind(pixiEditor.history)}" title="{vocGlob.redo}" class="{dim: !pixiEditor?.history.canRedo}") + svg.feather + use(xlink:href="#redo") + label.checkbox(title="Shift+S") + input( + type="checkbox" + onchange="{changeSimulated}" + checked="{pixiEditor?.simulate}" + data-hotkey="S" + data-hotkey-require-scope="rooms" + ) + span {voc.simulate} + button(onclick="{openZoomMenu}") + span(ref="zoomLabel") {Math.round(pixiEditor?.getZoom() || 100)}% + button(onclick="{openGridMenu}") + span {voc.grid} + button.slim(onclick="{openVisibilityMenu}") + svg.feather + use(xlink:href="#eye") + button(onclick="{openEventsList}") + span {voc.events} + button(onclick="{saveRoom}") + svg.feather + use(xlink:href="#check") + span {vocGlob.save} + + room-events-editor(if="{editingEvents}" room="{opts.room}" onsave="{closeRoomEvents}") + context-menu(menu="{gridMenu}" ref="gridMenu") + context-menu(menu="{zoomMenu}" ref="zoomMenu") + context-menu(menu="{visibilityMenu}" ref="visibilityMenu" if="{pixiEditor}") script. - const minSizeW = 250; - const getMaxSizeW = () => window.innerWidth - 300; - this.sidebarWidth = Math.max( - minSizeW, - Math.min(getMaxSizeW(), localStorage.roomSidebarWidth || 300) - ); + this.namespace = 'roomView'; + this.mixin(window.riotVoc); - this.gutterMouseDown = () => { - this.draggingGutter = true; - }; - const gutterMove = e => { - if (!this.draggingGutter) { + this.freePlacementMode = false; + const modifiersDownListener = e => { + if (e.repeat || + !window.hotkeys.inScope('rooms') || + window.hotkeys.isFormField(e.target) + ) { return; } - this.sidebarWidth = Math.max(minSizeW, Math.min(getMaxSizeW(), e.clientX)); - localStorage.roomSidebarWidth = this.sidebarWidth; - this.update(); - var {canvas} = this.refs, - sizes = this.refs.canvaswrap.getBoundingClientRect(); - if (canvas.width !== sizes.width || canvas.height !== sizes.height) { - canvas.width = sizes.width; - canvas.height = sizes.height; + if (e.key === 'Alt') { + this.freePlacementMode = true; + e.preventDefault(); + } else if (e.key === 'Control' || e.key === 'Meta') { + this.controlMode = true; + e.preventDefault(); } - this.refreshRoomCanvas(); }; - const gutterUp = () => { - if (this.draggingGutter) { - this.draggingGutter = false; - // updateCanvasSize(); - // document.body.removeChild(catcher); + const modifiersUpListener = e => { + if (e.repeat || + !window.hotkeys.inScope('rooms') || + window.hotkeys.isFormField(e.target) + ) { + return; + } + if (e.key === 'Alt') { + this.freePlacementMode = false; + e.preventDefault(); + } else if (e.key === 'Control' || e.key.Meta) { + this.controlMode = false; + e.preventDefault(); } }; - document.addEventListener('mousemove', gutterMove); - document.addEventListener('mouseup', gutterUp); - this.on('unmount', () => { - document.removeEventListener('mousemove', gutterMove); - document.removeEventListener('mouseup', gutterUp); - }); - - this.editingCode = false; - this.forbidDrawing = false; - const fs = require('fs-extra'); - const glob = require('./data/node_requires/glob'); - this.namespace = 'roomView'; - this.mixin(window.riotVoc); - this.mixin(window.riotWired); - this.mixin(window.roomCopyTools); - this.mixin(window.roomTileTools); - this.wireAndRedraw = way => e => { - this.wire(way)(e); - this.refreshRoomCanvas(); - }; - - this.room = this.opts.room; - if (!this.room.extends) { - this.room.extends = {}; - } - - this.mouseX = this.mouseY = 0; - this.roomx = this.room.width / 2; - this.roomy = this.room.height / 2; - this.zoomFactor = 1; - this.room.gridX = this.room.gridX || this.room.grid || 64; - this.room.gridY = this.room.gridY || this.room.grid || 64; - this.dragging = false; - this.tab = 'roomcopies'; - - this.toggleCopyProperties = value => { - this.showCopyPropertiesModal = value; - this.update(); - this.refreshRoomCanvas(); - }; - - this.updateRoomBackground = (e, color) => { - this.room.backgroundColor = color; - this.refreshRoomCanvas(); + const blurListener = () => { + // Specifically designed to catch Alt+Tab + this.freePlacementMode = false; }; - - var updateCanvasSize = () => { - // Firstly, check that we don't need to reflow the layout due to window shrinking - const oldSidebarWidth = this.sidebarWidth; - this.sidebarWidth = Math.max(minSizeW, Math.min(getMaxSizeW(), this.sidebarWidth)); - if (oldSidebarWidth !== this.sidebarWidth) { - this.update(); - } - var {canvas} = this.refs, - sizes = this.refs.canvaswrap.getBoundingClientRect(); - if (canvas.width !== sizes.width || canvas.height !== sizes.height) { - canvas.width = sizes.width; - canvas.height = sizes.height; + const gridToggleListener = e => { + if (!window.hotkeys.inScope('rooms') || window.hotkeys.isFormField(e.target)) { + return; } - setTimeout(this.refreshRoomCanvas, 10); + this.gridOn = !this.gridOn; }; - this.on('update', () => { - if (global.currentProject.rooms.find(room => - this.room.name === room.name && this.room !== room)) { - this.nameTaken = true; - } else { - this.nameTaken = false; - } - }); this.on('mount', () => { - this.room = this.opts.room; - this.refs.canvas.x = this.refs.canvas.getContext('2d'); - this.gridCanvas = document.createElement('canvas'); - this.gridCanvas.x = this.gridCanvas.getContext('2d'); - this.redrawGrid(); - window.addEventListener('resize', updateCanvasSize); - updateCanvasSize(); + window.hotkeys.push('roomEditor'); + window.hotkeys.on('Control+g', gridToggleListener); + document.addEventListener('keydown', modifiersDownListener); + document.addEventListener('keyup', modifiersUpListener); + window.addEventListener('blur', blurListener); }); this.on('unmount', () => { - window.removeEventListener('resize', updateCanvasSize); + window.hotkeys.exit('roomEditor'); + window.hotkeys.off('Control+g', gridToggleListener); + document.removeEventListener('keydown', modifiersDownListener); + document.removeEventListener('keyup', modifiersUpListener); + window.addEventListener('blur', blurListener); }); - this.openRoomEvents = () => { - this.editingCode = true; + this.lockableTypes = [{ + icon: 'template', + hintVocKey: 'copies', + key: 'selectCopies' + }, { + icon: 'grid', + hintVocKey: 'tiles', + key: 'selectTiles' + }]; + this.toggleSelectables = e => { + this.pixiEditor[e.item.lockable.key] = !this.pixiEditor[e.item.lockable.key]; }; - - // Навигация по комнате, настройки вида - this.roomToggleZoom = zoomFactor => () => { - this.zoomFactor = zoomFactor; - this.redrawGrid(); - this.refreshRoomCanvas(); - }; - this.roomToCenter = () => { - this.roomx = this.room.width / 2; - this.roomy = this.room.height / 2; - this.refreshRoomCanvas(); - }; - this.redrawGrid = () => { - this.gridCanvas.width = this.room.gridX; - this.gridCanvas.height = this.room.gridY; - this.gridCanvas.x.clearRect(0, 0, this.room.gridX, this.room.gridY); - this.gridCanvas.x.globalAlpha = 0.3; - this.gridCanvas.x.strokeStyle = localStorage.UItheme === 'Night' ? '#44dbb5' : '#446adb'; - this.gridCanvas.x.lineWidth = 1 / this.zoomFactor; - this.gridCanvas.x.strokeRect( - 0.5 / this.zoomFactor, 0.5 / this.zoomFactor, - this.room.gridX, this.room.gridY - ); - }; - this.roomToggleGrid = () => { - if (this.room.gridX === 0) { - window.alertify - .confirm(this.voc.gridSize + '
x ') - .then(e => { - if (e.buttonClicked === 'ok') { - this.room.gridX = Number(document.getElementById('theGridSizeX').value); - this.room.gridY = Number(document.getElementById('theGridSizeY').value); - } - this.redrawGrid(); - this.refreshRoomCanvas(); - this.update(); - }); - } else { - this.refreshRoomCanvas(); - this.room.gridX = 0; - this.room.gridY = 0; - } - }; - - // Работа с копиями - this.tab = 'roomcopies'; - this.changeTab = tab => () => { - this.tab = tab; - this.selectedCopies = this.selectedTiles = false; - if (tab === 'roombackgrounds' || tab === 'properties') { - this.roomUnpickTemplate(); - } - if (tab !== 'roomcopies') { - this.toggleCopyProperties(false); - } + this.updateSelectFrame = () => { + this.pixiEditor.transformer.setup(); }; - this.roomUnpickTemplate = () => { - this.currentTemplate = -1; - }; - - /** Преобразовать x на канвасе в x на комнате */ - this.xToRoom = x => (x - Math.floor(this.refs.canvas.width / 2)) / this.zoomFactor + this.roomx; - /** Преобразовать y на канвасе в y на комнате */ - this.yToRoom = y => (y - Math.floor(this.refs.canvas.height / 2)) / this.zoomFactor + this.roomy; - /** Преобразовать x в комнате в x на канвасе */ - this.xToCanvas = x => (x - this.roomx) * this.zoomFactor + Math.floor(this.refs.canvas.width / 2); - /** Преобразовать y в комнате в y на канвасе */ - this.yToCanvas = y => (y - this.roomy) * this.zoomFactor + Math.floor(this.refs.canvas.height / 2); - this.onCanvasClick = e => { - if (this.tab === 'roomcopies') { - this.onCanvasClickCopies(e); - } else if (this.tab === 'roomtiles') { - this.onCanvasClickTiles(e); - } + const {setup} = require('./data/node_requires/roomEditor'); + this.on('mount', () => { + setup(this.refs.canvas, this); + // adds this.pixiEditor + [this.currentTileLayer] = this.pixiEditor.tileLayers; + this.update(); + }); + this.on('unmount', () => { + this.pixiEditor.destroy(false, { + children: true + }); + }); + this.triggerWheelEvent = e => { + e.preventUpdate = true; + // pixi v5 doesn't have a wheel event! we will have to fabricate one. + // eslint-disable-next-line no-underscore-dangle + this.pixiEditor.stage._events.wheel.fn({ + type: 'wheel', + target: this.pixiEditor.stage, + currentTarget: this.pixiEditor.stage, + // eslint-disable-next-line id-blacklist + data: { + global: { + x: e.offsetX, + y: e.offsetY + }, + originalEvent: e + } + }); }; - /** При нажатии на канвас, если не выбрана копия, то начинаем перемещение */ - this.onCanvasPress = e => { - this.mouseDown = true; - this.startx = e.offsetX; - this.starty = e.offsetY; - - if (this.tab === 'roomcopies' && this.onCanvasPressCopies(e)) { + // Keyboard events + const phabricateEvent = (name, e) => { + // eslint-disable-next-line no-underscore-dangle + if (!(name in this.pixiEditor.stage._events)) { + console.error(`An event ${name} was triggered on the room editor, but it is not allowed.`); return; } - if ((this.currentTemplate === -1 && !e.shiftKey && this.tab !== 'roomtiles' && e.button === 0 && !e.ctrlKey) || - e.button === 1) { - this.dragging = true; - } + // eslint-disable-next-line no-underscore-dangle + this.pixiEditor.stage._events[name].fn({ + type: name, + target: this.pixiEditor.stage, + currentTarget: this.pixiEditor.stage, + // eslint-disable-next-line id-blacklist + data: { + originalEvent: e + } + }); }; - /** и безусловно прекращаем перемещение при отпускании мыши */ - this.onCanvasMouseUp = e => { - this.mouseDown = false; - this.lastCopyX = null; - this.lastCopyY = null; - this.lastTileX = null; - this.lastTileY = null; - if (this.dragging) { - this.dragging = false; - this.roomx = Math.round(this.roomx); - this.roomy = Math.round(this.roomy); - this.refreshRoomCanvas(); - } else if (this.tab === 'roomtiles') { - this.onCanvasMouseUpTiles(e); - } else if (this.tab === 'roomcopies') { - this.onCanvasMouseUpCopies(e); + const triggerKeyboardEvent = e => { + if (['input', 'textarea', 'select'].includes(e.target.nodeName.toLowerCase())) { + return false; } - setTimeout(() => { - this.movingStuff = false; - }, 0); - }; - this.drawDeleteCircle = e => { - // Рисовка кружка для удаления копий - var maxdist = Math.max(this.room.gridX, this.room.gridY) || 32; - this.refreshRoomCanvas(e); - var cx = this.refs.canvas.x; - cx.fillStyle = '#F00'; - cx.strokeStyle = '#000'; - cx.globalAlpha = 0.5; - cx.beginPath(); - cx.arc(this.xToRoom(e.offsetX), this.yToRoom(e.offsetY), maxdist, 0, 2 * Math.PI); - cx.fill(); - cx.stroke(); - }; - - /** - * Updating mouse coordinates display at the bottom-left corner - */ - this.updateMouseCoords = function updateMouseCoords(e) { - var dx = Math.floor(this.xToRoom(e.offsetX)), - dy = Math.floor(this.yToRoom(e.offsetY)); - if (this.room.gridX === 0 || e.altKey) { - this.mouseX = dx; - this.mouseY = dy; - } else { - this.mouseX = Math.round(dx / this.room.gridX) * this.room.gridX; - this.mouseY = Math.round(dy / this.room.gridY) * this.room.gridY; + if (e.key === 'Delete') { + return phabricateEvent('delete', e); + } else if (e.code === 'KeyC' && e.ctrlKey) { + return phabricateEvent('copy', e); + } else if (e.code === 'KeyV' && e.ctrlKey) { + return phabricateEvent('paste', e); + } else if (e.code === 'KeyZ' && e.ctrlKey && e.shiftKey) { + return phabricateEvent('redo', e); + } else if (e.code === 'KeyZ' && e.ctrlKey) { + return phabricateEvent('undo', e); + } else if (e.code === 'KeyH') { + return phabricateEvent('home', e); + } else if (e.key === 'ArrowRight') { + return phabricateEvent('nudgeright', e); + } else if (e.key === 'ArrowLeft') { + return phabricateEvent('nudgeleft', e); + } else if (e.key === 'ArrowUp') { + return phabricateEvent('nudgeup', e); + } else if (e.key === 'ArrowDown') { + return phabricateEvent('nudgedown', e); } - this.refs.mousecoords.innerHTML = `(${this.mouseX}:${this.mouseY})`; + return false; }; + this.on('mount', () => { + window.addEventListener('keydown', triggerKeyboardEvent); + }); + this.on('unmount', () => { + window.removeEventListener('keydown', triggerKeyboardEvent); + }); - /** Start moving or show a placement preview **/ - this.onCanvasMove = e => { - e.preventUpdate = true; - if (this.dragging && !this.movingStuff) { - // Drag the viewport - this.roomx -= e.movementX / this.zoomFactor; - this.roomy -= e.movementY / this.zoomFactor; - this.refreshRoomCanvas(e); - } else if ( // Make more tiles or copies if Shift key is down - e.shiftKey && this.mouseDown && - ( - (this.tab === 'roomcopies' && this.currentTemplate !== -1) || - this.tab === 'roomtiles' - ) - ) { - this.onCanvasClick(e); - } else if (this.tab === 'roomcopies') { - this.onCanvasMoveCopies(e); - } else if (this.tab === 'roomtiles') { - this.onCanvasMoveTiles(e); - } - this.updateMouseCoords(e); + this.currentTool = 'select'; + const mandatoryVisibilityMap = { + addCopies: 'copiesVisible', + addTiles: 'tilesVisible', + manageBackgrounds: 'backgroundsVisible' }; - - /** Change zoom on mouse wheel */ - this.onCanvasWheel = e => { - if (e.wheelDelta > 0) { - this.refs.zoomslider.zoomIn(); - } else { - this.refs.zoomslider.zoomOut(); + this.setTool = tool => () => { + this.currentTool = tool; + if (tool in mandatoryVisibilityMap) { + this.pixiEditor[mandatoryVisibilityMap[tool]] = true; } - }; - this.setZoom = zoom => { - this.zoomFactor = zoom; - this.update(); - this.redrawGrid(); - this.refreshRoomCanvas(); - }; - - this.onCanvasContextMenu = e => { - this.dragging = false; - this.mouseDown = false; - if (this.tab === 'roomcopies') { - if (this.selectedCopies && this.selectedCopies.length) { - this.onCanvasContextMenuMultipleCopies(e); - } else { - this.onCanvasContextMenuCopies(e); - } - } else if (this.tab === 'roomtiles') { - if (this.selectedTiles && this.selectedTiles.length) { - this.onCanvasContextMenuMultipleTiles(e); - } else { - this.onCanvasContextMenuTiles(e); - } + if (tool !== 'select') { + this.pixiEditor.transformer.clear(); + } + if (tool === 'addTiles' && !this.pixiEditor.tileLayers.includes(this.currentTileLayer)) { + [this.currentTileLayer] = this.pixiEditor.tileLayers; } - e.preventDefault(); - return true; }; - // Shifts all the copies in a room at once. - this.roomShift = () => { - window.alertify.confirm(` - ${window.languageJSON.roomView.shiftLabel} - - - `) - .then(e => { - if (e.buttonClicked === 'ok') { - var dx = Number(document.getElementById('roomshiftx').value) || 0, - dy = Number(document.getElementById('roomshifty').value) || 0; - for (const copy of this.room.copies) { - copy.x += dx; - copy.y += dy; - } - for (const tileLayer of this.room.tiles) { - for (const tile of tileLayer.tiles) { - tile.x += dx; - tile.y += dy; + this.currentTemplate = -1; + this.changeSelectedTemplate = template => { + this.currentTemplate = template; + }; + + this.tilePatch = void 0; + this.changeTilePatch = tilePatch => { + this.tilePatch = tilePatch; + }; + this.changeTileLayer = layer => { + this.currentTileLayer = layer; + }; + + this.zoom = 1; + + this.changeBgColor = (e, color) => { + this.opts.room.backgroundColor = color; + this.pixiEditor.renderer.backgroundColor = PIXI.utils.string2hex(color); + }; + + this.changeSimulated = () => { + this.pixiEditor.simulate = !this.pixiEditor.simulate; + }; + + this.gridOn = true; + this.gridMenu = { + opened: false, + items: [{ + label: this.voc.gridOff, + click: () => { + this.gridOn = !this.gridOn; + }, + type: 'checkbox', + checked: () => !this.gridOn, + hotkeyLabel: 'Ctrl+G' + }, { + label: this.voc.toggleDiagonalGrid, + click: () => { + this.opts.room.diagonalGrid = !this.opts.room.diagonalGrid; + }, + type: 'checkbox', + checked: () => this.opts.room.diagonalGrid + }, { + label: this.voc.changeGridSize, + click: () => { + window.alertify + .confirm(this.voc.gridSize + `
x `) + .then(e => { + if (e.buttonClicked === 'ok') { + this.opts.room.gridX = Number(document.getElementById('theGridSizeX').value); + this.opts.room.gridY = Number(document.getElementById('theGridSizeY').value); } - } - this.refreshRoomCanvas(); + this.update(); + }); } - }); + }] + }; + this.openGridMenu = e => { + this.refs.gridMenu.popup(e.clientX, e.clientY); }; - /** Saves a room (in fact, just marks a project as an unsaved, and closes the room editor) */ - this.roomSave = () => { - if (this.nameTaken) { - // animate the error notice - require('./data/node_requires/jellify')(this.refs.errorNotice); - if (localStorage.disableSounds !== 'on') { - window.soundbox.play('Failure'); + this.zoomMenu = { + opened: false, + items: [...[12.5, 25, 50, 100, 200, 400, 800].map(zoom => ({ + label: `${zoom}%`, + click: () => { + this.zoom = 1 / zoom * 100; + this.pixiEditor.zoomTo(zoom); } - return false; - } - this.room.lastmod = Number(new Date()); - this.roomGenSplash() - .then(() => { - glob.modified = true; - this.parent.editing = false; - this.parent.update(); - }) - .catch(err => { - console.error(err); - glob.modified = true; - this.parent.editing = false; - this.parent.update(); + })), { + type: 'separator' + }, { + label: this.voc.resetView, + click: () => { + this.pixiEditor.goHome(); + }, + hotkeyLabel: 'H' + }] + }; + this.openZoomMenu = e => { + this.refs.zoomMenu.popup(e.clientX, e.clientY); + }; + + const entityToIconMap = { + copies: 'template', + tiles: 'grid', + backgrounds: 'image' + }; + const entityVisibilityItems = []; + for (const entityType in entityToIconMap) { + entityVisibilityItems.push({ + label: this.voc[entityType], + click: () => { + this.pixiEditor[entityType + 'Visible'] = !this.pixiEditor[entityType + 'Visible']; + }, + type: 'checkbox', + checked: () => this.pixiEditor[entityType + 'Visible'] }); - return true; - }; - - this.sortHorizontally = () => { - if (this.tab === 'roomcopies') { - this.room.copies.sort((a, b) => a.x - b.x); - } else { - // tiles - this.currentTileLayer.tiles.sort((a, b) => a.x - b.x); - } - this.resortRoom(); - this.refreshRoomCanvas(); + } + this.visibilityMenu = { + opened: false, + items: [ + ...entityVisibilityItems, + { + type: 'separator' + }, + { + label: this.voc.xrayMode, + click: () => { + this.pixiEditor.xrayMode = !this.pixiEditor.xrayMode; + }, + type: 'checkbox', + checked: () => this.pixiEditor.xrayMode + }, + { + label: this.voc.colorizeTileLayers, + click: () => { + this.pixiEditor.colorizeTileLayers = !this.pixiEditor.colorizeTileLayers; + }, + type: 'checkbox', + checked: () => this.pixiEditor.colorizeTileLayers + } + ] }; - this.sortVertically = () => { - if (this.tab === 'roomcopies') { - this.room.copies.sort((a, b) => a.y - b.y); - } else { - // tiles - this.currentTileLayer.tiles.sort((a, b) => a.y - b.y); - } - this.resortRoom(); - this.refreshRoomCanvas(); + this.openVisibilityMenu = e => { + this.refs.visibilityMenu.popup(e.clientX, e.clientY); }; - this.resortRoom = () => { - // Make an array of all the backgrounds, tile layers and copies, and then sort it. - this.stack = this.room.copies.concat(this.room.backgrounds).concat(this.room.tiles); - const projTemplates = global.currentProject.templates; - this.stack.sort((a, b) => { - const depthA = a.depth !== void 0 ? a.depth : projTemplates[glob.templatemap[a.uid]].depth, - depthB = b.depth !== void 0 ? b.depth : projTemplates[glob.templatemap[b.uid]].depth; - return depthA - depthB; - }); + this.editingEvents = false; + this.openEventsList = () => { + this.editingEvents = true; }; - this.resortRoom(); - var templatesChanged = () => { - this.currentTemplate = -1; - this.resortRoom(); + this.closeRoomEvents = () => { + this.editingEvents = false; + this.update(); }; - window.signals.on('templatesChanged', templatesChanged); - this.on('unmount', () => { - window.signals.off('templatesChanged', templatesChanged); - }); - /** Canvas redrawing, with all the backgrounds, tiles and copies */ - // eslint-disable-next-line max-lines-per-function, complexity - this.refreshRoomCanvas = () => { - if (this.forbidDrawing) { - return; - } - const {canvas} = this.refs, - sizes = this.refs.canvaswrap.getBoundingClientRect(); - // Make sure the canvas size is of correct width - if (Number(canvas.width) !== sizes.width || Number(canvas.height) !== sizes.height) { - canvas.width = sizes.width; - canvas.height = sizes.height; - } - - // Reset drawing transforms - canvas.x.setTransform(1, 0, 0, 1, 0, 0); - canvas.x.globalAlpha = 1; - // Clear the canvas - canvas.x.clearRect(0, 0, canvas.width, canvas.height); - // Fill it with a background color - canvas.x.fillStyle = this.room.backgroundColor || '#000000'; - canvas.x.fillRect(0, 0, canvas.width, canvas.height); - - // Apply camera movement + zoom - canvas.x.translate(Math.floor(canvas.width / 2), Math.floor(canvas.height / 2)); - canvas.x.scale(this.zoomFactor, this.zoomFactor); - canvas.x.translate(-this.roomx, -this.roomy); - - // Disable pixel interpolation, if needed - canvas.x.imageSmoothingEnabled = !global.currentProject.settings.rendering.pixelatedrender; - - for (let i = 0, li = this.stack.length; i < li; i++) { - if (this.stack[i].tiles) { // a tile layer - const layer = this.stack[i]; - if (!layer.hidden) { - for (const tile of layer.tiles) { - const img = glob.texturemap[tile.texture], - tex = img.g; - const x = tex.offx + (tex.width + tex.marginx) * tile.grid[0] - tex.marginx, - y = tex.offy + (tex.height + tex.marginy) * tile.grid[1] - tex.marginy, - w = (tex.width + tex.marginx) * tile.grid[2] - tex.marginx, - h = (tex.height + tex.marginy) * tile.grid[3] - tex.marginy; - canvas.x.drawImage( - img, - x, y, w, h, - tile.x, tile.y, w, h - ); - } - } - } else if (this.stack[i].texture) { // a background layer - if (this.stack[i].texture !== -1) { - if (!('extends' in this.stack[i])) { - this.stack[i].extends = {}; - } - const scx = this.stack[i].extends.scaleX || 1, - scy = this.stack[i].extends.scaleY || 1, - shx = this.stack[i].extends.shiftX || 0, - shy = this.stack[i].extends.shiftY || 0; - canvas.x.save(); - canvas.x.fillStyle = canvas.x.createPattern(glob.texturemap[this.stack[i].texture], this.stack[i].extends.repeat || 'repeat'); - canvas.x.translate(shx, shy); - canvas.x.scale(scx, scy); - canvas.x.fillRect( - (this.xToRoom(0) - shx) / scx, (this.yToRoom(0) - shy) / scy, - canvas.width / scx / this.zoomFactor, - canvas.height / scy / this.zoomFactor - ); - canvas.x.restore(); - } - } else { // A copy - const copy = this.stack[i], - template = global.currentProject.templates[glob.templatemap[copy.uid]]; - let texture, gra, w, h, ox, oy, - grax, gray; // texture's drawing center - if (template.texture !== -1) { - texture = glob.texturemap[template.texture]; - gra = glob.texturemap[template.texture].g; - w = gra.width; - h = gra.height; - ox = gra.offx; - oy = gra.offy; - [grax, gray] = gra.axis; - } else { - texture = glob.texturemap[-1]; - w = h = 32; - grax = gray = 16; - ox = oy = 0; - } - if ((copy.tx || copy.tx === 0) || - (copy.ty || copy.ty === 0) || - (copy.tr && copy.tr !== 0)) { - canvas.x.save(); - canvas.x.translate(copy.x, copy.y); - canvas.x.rotate((copy.tr || 0) * Math.PI / -180); - canvas.x.scale(copy.tx ?? 1, copy.ty ?? 1); - canvas.x.drawImage( - texture, - ox, oy, w, h, - -grax, -gray, w, h - ); - canvas.x.restore(); - } else { - const tex = glob.texturemap[template.texture].g; - canvas.x.drawImage( - texture, - tex.offx, tex.offy, w, h, - copy.x - grax, copy.y - gray, w, h - ); - } - } - } - - // Grid drawing - if (this.room.gridX > 1) { - canvas.x.globalCompositeOperation = 'exclusion'; - canvas.x.fillStyle = canvas.x.createPattern(this.gridCanvas, 'repeat'); - canvas.x.fillRect( - this.xToRoom(0), this.yToRoom(0), - canvas.width / this.zoomFactor, canvas.height / this.zoomFactor - ); - canvas.x.globalCompositeOperation = 'source-over'; - } - // Outline selected tiles - if (this.tab === 'roomtiles' && this.selectedTiles && this.selectedTiles.length) { - for (const tile of this.selectedTiles) { - const {g} = glob.texturemap[tile.texture]; - this.drawSelection( - tile.x, - tile.y, - tile.x + g.width * tile.grid[2], - tile.y + g.height * tile.grid[3] - ); - } - } - // Outline selected copies - if (this.tab === 'roomcopies' && this.selectedCopies && this.selectedCopies.length) { - for (const copy of this.selectedCopies) { - this.drawSelection(copy); - } - } - - // Outline the starting viewport frame - this.drawSelection(-1.5, -1.5, this.room.width + 1.5, this.room.height + 1.5); - - // Outline room's limits - if (this.room.restrictCamera) { - this.drawSelection( - (this.room.restrictMinX || 0) - 1.5, - (this.room.restrictMinY || 0) - 1.5, - (this.room.restrictMaxX === void 0 ? this.room.width : this.room.restrictMaxX) + 1.5, - (this.room.restrictMaxY === void 0 ? this.room.height : this.room.restrictMaxY) + 1.5 - ); - } + this.saveRoom = async () => { + const {writeRoomPreview} = require('./data/node_requires/resources/rooms'); + this.pixiEditor.serialize(); + await Promise.all([ + writeRoomPreview(this.opts.room, this.pixiEditor.getSplashScreen(true), true), + writeRoomPreview(this.opts.room, this.pixiEditor.getSplashScreen(false), false) + ]); + this.opts.onclose(); }; - this.drawSelection = (x1, y1, x2, y2) => { - const cx = this.refs.canvas.x; - cx.lineJoin = 'round'; - cx.lineCap = 'round'; - if (typeof x1 !== 'number') { - const copy = x1, - template = global.currentProject.templates[glob.templatemap[copy.uid]], - texture = glob.texturemap[template.texture].g; - var left, top, height, width; - if (copy.tr) { - cx.strokeStyle = localStorage.UItheme === 'Night' ? '#44dbb5' : '#446adb'; - cx.lineWidth = 3; - cx.beginPath(); - cx.moveTo(copy.x - 32, copy.y); - cx.lineTo(copy.x + 32, copy.y); - cx.moveTo(copy.x, copy.y - 32); - cx.lineTo(copy.x, copy.y + 32); - cx.stroke(); - cx.strokeStyle = localStorage.UItheme === 'Night' ? '#1C2B42' : '#fff'; - cx.lineWidth = 1; - cx.moveTo(copy.x - 32, copy.y); - cx.lineTo(copy.x + 32, copy.y); - cx.moveTo(copy.x, copy.y - 32); - cx.lineTo(copy.x, copy.y + 32); - cx.stroke(); - return; - } - if (template.texture !== -1) { - left = copy.x - texture.axis[0] * (copy.tx ?? 1) - 1.5; - top = copy.y - texture.axis[1] * (copy.ty ?? 1) - 1.5; - width = texture.width * (copy.tx ?? 1) + 3; - height = texture.height * (copy.ty ?? 1) + 3; - } else { - left = copy.x - 16 - 1.5; - top = copy.y - 16 - 1.5; - height = 32 + 3; - width = 32 + 3; - } - x1 = left; - y1 = top; - x2 = left + width; - y2 = top + height; - } - cx.strokeStyle = localStorage.UItheme === 'Night' ? '#44dbb5' : '#446adb'; - cx.lineWidth = 3; - cx.strokeRect(x1, y1, x2 - x1, y2 - y1); - cx.strokeStyle = localStorage.UItheme === 'Night' ? '#1C2B42' : '#fff'; - cx.lineWidth = 1; - cx.strokeRect(x1, y1, x2 - x1, y2 - y1); + const resizeEditor = () => { + setTimeout(() => { + this.pixiEditor.resize(); + }, 10); }; - - /** - * Генерирует миниатюру комнаты - */ - this.roomGenSplash = function roomGenSplash() { - const {imageCover, toBuffer} = require('./data/node_requires/imageUtils'); - return new Promise((accept, decline) => { - const c = imageCover(this.refs.canvas, 340, 256); - const buf = toBuffer(c); - const roomSplashName = global.projdir + '/img/r' + this.room.thumbnail + '.png'; - fs.writeFile(roomSplashName, buf, err => { - if (err) { - decline(err); - } else { - accept(roomSplashName); - } - }); - const projSplashName = global.projdir + '/img/splash.png'; - fs.writeFile(projSplashName, buf, err => { - if (err) { - decline(err); - } - }); - }); + const serialize = () => { + this.pixiEditor.serialize(); }; + this.on('mount', () => { + window.signals.on('exportProject', serialize); + window.signals.on('roomsFocus', resizeEditor); + }); + this.on('unmount', () => { + window.signals.off('exportProject', serialize); + window.signals.off('roomsFocus', resizeEditor); + }); diff --git a/src/riotTags/rooms/room-entities-properties.tag b/src/riotTags/rooms/room-entities-properties.tag new file mode 100644 index 000000000..4ea205b26 --- /dev/null +++ b/src/riotTags/rooms/room-entities-properties.tag @@ -0,0 +1,478 @@ +// + @attribute pixieditor (RoomEditor) + The reference to the current pixi editor + + @attribute ontransformchange (riot function) + This function is called when this widget makes transformation + changes to selected objects. Used to update the selection box. + + @method applyChanges + Call this on selection change to apply changes to the current selection + @method updatePropList + Call this on selection change to re-scan the selection for values + +room-entities-properties + div(if="{opts.pixieditor?.currentSelection.size && changes}") + // Basic properties + virtual(if="{opts.pixieditor?.currentSelection.size && changes}" each="{prop in basicProps}") + b {voc.copyProperties[prop.vocKey]}: + // Point2D + .aPoint2DInput.compact.wide(if="{prop.type === 'xy'}") + label.flexrow + span.nogrow X: + input.nmr( + type="number" + oninput="{wireAndApply('this.changes.basic.' + prop.key + '.x')}" + onchange="{memorizeChanges}" + value="{changes.basic[prop.key].x}" + placeholder="{String(changes.basic[prop.key].x)}" + step="{prop.step}" + ) + .aSpacer.noshrink.nogrow + label.flexrow + span.nogrow Y: + input.nmr( + type="number" + oninput="{wireAndApply('this.changes.basic.' + prop.key + '.y')}" + onchange="{memorizeChanges}" + value="{changes.basic[prop.key].y}" + placeholder="{String(changes.basic[prop.key].y)}" + step="{prop.step}" + ) + .flexrow(if="{prop.type === 'slider'}") + .aSliderWrap + input.compact( + type="range" min="{prop.from}" max="{prop.to}" step="{prop.step}" + value="{(changes.basic[prop.key] === parent.multipleType) ? 0 : (changes.basic[prop.key] || 0)}" + oninput="{wireAndApply('this.changes.basic.' + prop.key)}" + onchange="{memorizeChanges}" + list="{prop.datalist}" + ) + .DataTicks(if="{prop.datalist}") + .aDataTick(each="{value in [-180, -90, 0, 90, 180]}" style="left: {(value + 180) / 3.6}%") + .aSpacer + input.compact( + min="{prop.from}" max="{prop.to}" step="{prop.step}" type="number" + value="{String(changes.basic[prop.key])}" + oninput="{wireAndApply('this.changes.basic.' + prop.key)}" + onchange="{memorizeChanges}" + placeholder="{String(changes.basic[prop.key])}" + ) + color-input( + if="{prop.type === 'color'}" + color="{PIXI.utils.hex2string(changes.basic[prop.key])}" + onchange="{writeColor(prop.key)}" + onapply="{writeColorAndMemorize(prop.key)}" + hidealpha="true" + ) + + // Copies' extensions that come from mods + extensions-editor(show="{hasCopies}" entity="{changes.exts}" ref="exts" type="copy" compact="yes" wide="yup") + + // Custom properties for copies + div(if="{hasCopies}") + h3 {voc.customProperties} + table.wide.aPaddedTable.cellsmiddle + tr + th {voc.copyCustomProperties.property} + th {voc.copyCustomProperties.value} + th + tr(each="{val, prop in changes.customProps}") + td + input.wide( + type="text" + value="{prop}" + onchange="{renameProp}" + ) + p.anErrorNotice(if="{reservedProps.includes(prop)}") {voc.copyCustomProperties.nameOccupied} + td + input.wide( + type="text" + value="{val === multipleType ? '' : JSON.stringify(val)}" + placeholder="{val === multipleType ? String(multipleType) : ''}" + onchange="{changeValue}" + ) + td + button.toright.square.inline.nm(onclick="{deleteCustomProperty(prop)}" title="{vocGlob.delete}") + svg.feather + use(xlink:href="#trash") + .clear + button.nogrow(onclick="{addCustomProperty}") + svg.feather + use(xlink:href="#plus") + span {voc.copyCustomProperties.addProperty} + datalist#theDatalistDegrees + option(value="-180") + option(value="-90") + option(value="0") + option(value="90") + option(value="180") + script. + this.namespace = 'roomView'; + this.mixin(window.riotVoc); + this.mixin(window.riotWired); + + const {Copy} = require('./data/node_requires/roomEditor/entityClasses/Copy'); + + this.changes = false; + + this.basicProps = [{ + // An i18n key to look for in roomView.copyProperties, for a label + vocKey: 'position', + // A key to write to + key: 'position', + // The type of this field. `xy` stands for 2D point input + type: 'xy', + step: 8 + }, { + vocKey: 'scale', + key: 'scale', + type: 'xy', + step: 0.1 + }, { + vocKey: 'rotation', + key: 'angle', + type: 'slider', + from: -180, + to: 180, + step: 1, + datalist: 'theDatalistDegrees' + }, { + vocKey: 'opacity', + key: 'alpha', + type: 'slider', + from: 0, + to: 1, + step: 0.01 + }, { + vocKey: 'tint', + key: 'tint', + type: 'color' + }]; + + // Utilities for writing basic properties + const typeWrap = (prop, entity) => { + if (prop.type === 'xy') { + return { + x: entity[prop.key].x, + y: entity[prop.key].y + }; + } + return entity[prop.key]; + }; + this.writeColor = key => (e, value) => { + this.changes.basic[key] = PIXI.utils.string2hex(value); + this.applyChanges(); + }; + this.wireAndApply = path => e => { + this.wire(path)(e); + this.applyChanges(); + this.opts.ontransformchange(); + e.stopPropagation(); + }; + + const Magic = function Magic() { + void 'sparkles'; + }; + Magic.prototype.toString = () => this.voc.copyProperties.multipleValues; + Magic.prototype.toNumber = () => 0; + this.multipleType = new Magic(); + + this.firstRun = true; + /** + * Rescans the list of selected items and forms a list of matching and different properties. + * Different changes are reflected as this.multipleType. + * + * Before the rescan, it always writes applied changes to the previous selection. + */ + this.updatePropList = () => { + this.firstRun = false; + this.changes = { + exts: {}, + basic: {}, + customProps: {} + }; + + this.hasCopies = false; + const {basic} = this.changes; + const selection = this.opts.pixieditor.currentSelection; + // Quicker run for built-in properties + for (const property of this.basicProps) { + for (const entity of selection) { + if (!(property.key in basic)) { + basic[property.key] = typeWrap(property, entity); + } else if (property.type === 'xy') { + if (basic[property.key].x !== this.multipleType && + basic[property.key].x !== entity[property.key].x + ) { + basic[property.key].x = this.multipleType; + } + if (basic[property.key].y !== this.multipleType && + basic[property.key].y !== entity[property.key].y + ) { + basic[property.key].y = this.multipleType; + } + if (basic[property.key].x === this.multipleType && + basic[property.key].y === this.multipleType + ) { + break; + } + } else if (basic[property.key] !== entity[property.key]) { + basic[property.key] = this.multipleType; + break; + } + } + } + let copyCount = 0; + const propCount = {}; + // Separate run for custom properties and extensions + for (const entity of selection) { + // Skip stuff that doesn't support custom properties + if (!(entity instanceof Copy)) { + continue; + } + this.hasCopies = true; + copyCount++; + for (const property in entity.copyCustomProps) { + if (!(property in this.changes.customProps)) { + this.changes.customProps[property] = entity.copyCustomProps[property]; + propCount[property] = 1; + } else if (this.changes.customProps[property] !== entity.copyCustomProps[property]) { + this.changes.customProps[property] = this.multipleType; + propCount[property]++; + } else { + propCount[property]++; + } + } + } + // check if some copies did not have particular custom properties and mark such as (Multiple) + for (const property in propCount) { + if (propCount[property] !== copyCount) { + this.changes.customProps[property] = this.multipleType; + } + } + this.update(); + }; + + // an ID to use as newly created property names + this.currentId = 1; + this.renameProp = e => { + const {prop, val} = e.item; + const newName = e.target.value.trim(); + delete this.changes.customProps[prop]; + this.changes.customProps[newName] = val; + }; + this.changeValue = e => { + const {prop} = e.item; + // attempt to parse the value + // only strings will be unparsable with the JSON.parse method + let trueValue; + try { + trueValue = JSON.parse(e.target.value); // JSON, number, boolean + } catch { + trueValue = e.target.value; // string + } + this.changes.customProps[prop] = trueValue; + }; + this.addCustomProperty = () => { + this.changes.customProps['newProperty' + this.currentId] = ''; + this.currentId++; + }; + this.deleteCustomProperty = (prop) => () => { + delete this.changes.customProps[prop]; + this.applyChanges(); + }; + + this.reservedProps = [ + '_accessibleActive', + '_accessibleDiv', + '_bounds', + '_boundsID', + '_boundsRect', + '_cachedTint', + '_destroyed', + '_enabledFilters', + '_height', + '_lastSortedIndex', + '_localBounds', + '_localBoundsRect', + '_mask', + '_tempDisplayObjectParent', + '_tintedCanvas', + '_width', + '_zIndex', + 'accessible', + 'accessibleChildren', + 'accessibleHint', + 'accessiblePointerEvents', + 'accessibleTitle', + 'accessibleType', + 'alpha', + 'anchor', + 'angle', + 'animationSpeed', + 'autoUpdate', + 'blendMode', + 'buttonMode', + 'cacheAsBitmap', + 'children', + 'currentFrame', + 'cursor', + 'filterArea', + 'filters', + 'height', + 'hitArea', + 'interactive', + 'interactiveChildren', + 'isMask', + 'isSprite', + 'localTransform', + 'loop', + 'mask', + 'onComplete', + 'onFrameChange', + 'onLoop', + 'parent', + 'pivot', + 'playing', + 'pluginName', + 'position', + 'renderable', + 'rotation', + 'roundPixels', + 'scale', + 'skew', + 'sortableChildren', + 'sortDirty', + 'texture', + 'textures', + 'tint', + 'totalFrames', + 'transform', + 'updateAnchor', + 'visible', + 'width', + 'worldAlpha', + 'worldTransform', + 'worldVisible', + 'x', + 'y', + 'zIndex', + 'fromFrames', + 'fromImages', + '_calculateBounds', + '_onTextureUpdate', + '_recursivePostUpdateTransform', + '_render', + 'addChild', + 'addChildAt', + 'calculateBounds', + 'calculateTrimmedVertices', + 'calculateVertices', + 'containerUpdateTransform', + 'containsPoint', + 'destroy', + 'disableTempParent', + 'displayObjectUpdateTransform', + 'enableTempParent', + 'getBounds', + 'getChildAt', + 'getChildByName', + 'getChildIndex', + 'getGlobalPosition', + 'getLocalBounds', + 'gotoAndPlay', + 'gotoAndStop', + 'onChildrenChange', + 'play', + 'removeChild', + 'removeChildAt', + 'removeChildren', + 'render', + 'renderAdvanced', + 'renderAdvancedWebGL', + 'renderCanvas', + 'renderWebGL', + 'setChildIndex', + 'setParent', + 'setTransform', + 'sortChildren', + 'stop', + 'swapChildren', + 'toGlobal', + 'toLocal', + 'update', + 'updateTransform' + ]; + + this.applyChanges = () => { + if (this.firstRun) { + return; + } + const selection = this.opts.pixieditor.currentSelection || []; + for (const entity of selection) { + // basic properties are applied to everything + for (const property in this.changes.basic) { + const value = this.changes.basic[property]; + if (value === this.multipleType) { + continue; + } + const {type} = this.basicProps.find(prop => prop.key === property); + switch (type) { + case 'xy': + if (value.x !== this.multipleType) { + entity[property].x = value.x; + } + if (value.y !== this.multipleType) { + entity[property].y = value.y; + } + break; + case 'color': + case 'slider': + entity[property] = value; + break; + default: + // eslint-disable-next-line no-console + console.error(`Ignoring unknown property type: ${type}`); + break; + } + } + // Extensions and custom properties are supported for copies only + if (!(entity instanceof Copy)) { + continue; + } + // Write custom properties + for (const property in this.changes.customProps) { + const value = this.changes.customProps[property]; + if (value === this.multipleType) { + continue; + } + entity.copyCustomProps[property] = value; + } + // Custom properties that are missing from the changeset are removed + for (const property in entity.copyCustomProps) { + if (!(property in this.changes.customProps)) { + delete entity.copyCustomProps[property]; + } + } + // Write modded extensions + if (!this.refs.exts) { + // Nothing to write + continue; + } + for (const extension in this.refs.exts.extensions) { + const value = this.changes.exts[extension.key]; + if (value === this.multipleType) { + continue; + } + entity.copyExts[extension.key] = value; + } + } + }; + this.memorizeChanges = () => { + this.opts.pixieditor.history.snapshotTransforms(); + }; + this.writeColorAndMemorize = key => (e, value) => { + this.writeColor(key)(e, value); + this.opts.pixieditor.history.snapshotTransforms(); + }; diff --git a/src/riotTags/rooms/room-events-editor.tag b/src/riotTags/rooms/room-events-editor.tag index 249b5260c..1fd2d54e9 100644 --- a/src/riotTags/rooms/room-events-editor.tag +++ b/src/riotTags/rooms/room-events-editor.tag @@ -1,141 +1,60 @@ -room-events-editor.aView - .tabwrap - ul.tabs.aNav.nogrow.noshrink.nb - li(onclick="{switchTab('roomcreate')}" class="{active: tab === 'roomcreate'}" title="Control-Q" data-hotkey="Control+q") +// + @attribute room (IRoom) + @attribute onsave (riot function) +room-events-editor.aView.flexrow.pad + .tall.flexfix.aPanel.pad.room-events-editor-Properties.nogrow + .flexfix-body + event-list-scriptable.tall( + events="{room.events}" + entitytype="room" + onchanged="{changeCodeTab}" + currentevent="{currentSheet}" + ) + .flexfix-footer + .aSpacer + button.wide(onclick="{roomSaveEvents}" title="Shift+Control+S" data-hotkey="Shift+Control+S") svg.feather - use(xlink:href="#sun") - span {voc.create} - li(onclick="{switchTab('roomstep')}" class="{active: tab === 'roomstep'}" title="Control-W" data-hotkey="Control+w") - svg.feather - use(xlink:href="#skip-forward") - span {voc.step} - li(onclick="{switchTab('roomdraw')}" class="{active: tab === 'roomdraw'}" title="Control-E" data-hotkey="Control+e") - svg.feather - use(xlink:href="#edit-2") - span {voc.draw} - li(onclick="{switchTab('roomleave')}" class="{active: tab === 'roomleave'}" title="Control-R" data-hotkey="Control+r") - svg.feather - use(xlink:href="#trash") - span {voc.leave} - div(style="position: relative;") - .tabbed(show="{tab === 'roomcreate'}") - .aCodeEditor(ref="roomoncreate") - .tabbed(show="{tab === 'roomstep'}") - .aCodeEditor(ref="roomonstep") - .tabbed(show="{tab === 'roomdraw'}") - .aCodeEditor(ref="roomondraw") - .tabbed(show="{tab === 'roomleave'}") - .aCodeEditor(ref="roomonleave") - button.wide.nogrow.noshrink(onclick="{roomSaveEvents}") - svg.feather - use(xlink:href="#check") - span {voc.done} + use(xlink:href="#check") + span {voc.done} + .tabwrap.tall(style="position: relative") + //ul.tabs.aNav.nogrow.noshrink + // li(onclick="{changeTab('javascript')}" class="{active: tab === 'javascript'}" title="JavaScript (Control+Q)" data-hotkey="Control+q") + // svg.feather + // use(xlink:href="#code") + // span {voc.create} + // li(onclick="{changeTab('blocks')}" class="{active: tab === 'blocks'}" title="Blurry (Control+W)" data-hotkey="Control+w") + // svg.feather + // use(xlink:href="#grid") + // span {voc.step} + div + .tabbed.noborder(show="{tab === 'javascript'}") + code-editor-scriptable(event="{currentSheet}" entitytype="room" ref="codeeditor") + // .tabbed(show="{tab === 'blocks'}") + // .aBlocksEditor(ref="blocks") script. this.namespace = 'roomView'; this.mixin(window.riotVoc); - const glob = require('./data/node_requires/glob'); - this.tab = 'roomcreate'; - const tabToEditor = tab => { - tab = tab || this.tab; - if (tab === 'roomcreate') { - return this.roomoncreate; - } else if (tab === 'roomstep') { - return this.roomonstep; - } else if (tab === 'roomdraw') { - return this.roomondraw; - } else if (tab === 'roomleave') { - return this.roomonleave; - } - return null; - }; - this.switchTab = tab => () => { + this.room = this.opts.room; + [this.currentSheet] = this.room.events; // can be undefined, this is ok + this.tab = 'javascript'; + this.changeTab = tab => () => { this.tab = tab; - const editor = tabToEditor(tab); - setTimeout(() => { - editor.layout(); - editor.focus(); - }, 0); }; - const updateEditorSize = () => { - if (tabToEditor()) { - tabToEditor().layout(); - } - }; - const updateEditorSizeDeferred = function () { - setTimeout(updateEditorSize, 0); + this.focusEditor = () => { + this.refs.codeeditor.codeEditor.focus(); }; window.signals.on('roomsFocus', this.focusEditor); - window.signals.on('roomsFocus', updateEditorSizeDeferred); - window.addEventListener('resize', updateEditorSize); this.on('unmount', () => { window.signals.off('roomsFocus', this.focusEditor); - window.signals.off('roomsFocus', updateEditorSizeDeferred); - window.removeEventListener('resize', updateEditorSize); - }); - this.on('mount', () => { - this.room = this.opts.room; - setTimeout(() => { - var editorOptions = { - language: 'typescript', - lockWrapper: true - }; - this.roomoncreate = window.setupCodeEditor( - this.refs.roomoncreate, - Object.assign({}, editorOptions, { - value: this.room.oncreate, - wrapper: ['function onCreate(this: Room) {', '}'] - }) - ); - this.roomonstep = window.setupCodeEditor( - this.refs.roomonstep, - Object.assign({}, editorOptions, { - value: this.room.onstep, - wrapper: ['function onStep(this: Room) {', '}'] - }) - ); - this.roomondraw = window.setupCodeEditor( - this.refs.roomondraw, - Object.assign({}, editorOptions, { - value: this.room.ondraw, - wrapper: ['function onDraw(this: Room) {', '}'] - }) - ); - this.roomonleave = window.setupCodeEditor( - this.refs.roomonleave, - Object.assign({}, editorOptions, { - value: this.room.onleave, - wrapper: ['function onLeave(this: Room) {', '}'] - }) - ); - this.roomoncreate.onDidChangeModelContent(() => { - this.room.oncreate = this.roomoncreate.getPureValue(); - glob.modified = true; - }); - this.roomonstep.onDidChangeModelContent(() => { - this.room.onstep = this.roomonstep.getPureValue(); - glob.modified = true; - }); - this.roomondraw.onDidChangeModelContent(() => { - this.room.ondraw = this.roomondraw.getPureValue(); - glob.modified = true; - }); - this.roomonleave.onDidChangeModelContent(() => { - this.room.onleave = this.roomonleave.getPureValue(); - glob.modified = true; - }); - }, 0); - }); - this.on('unmount', () => { - // Manually destroy editors to free memory - this.roomoncreate.dispose(); - this.roomonstep.dispose(); - this.roomondraw.dispose(); - this.roomonleave.dispose(); }); + this.changeCodeTab = scriptableEvent => { + this.currentSheet = scriptableEvent; + this.update(); + }; + this.roomSaveEvents = () => { - this.parent.editingCode = false; - this.parent.update(); + this.opts.onsave(); }; diff --git a/src/riotTags/rooms/room-properties.tag b/src/riotTags/rooms/room-properties.tag new file mode 100644 index 000000000..c93c5231e --- /dev/null +++ b/src/riotTags/rooms/room-properties.tag @@ -0,0 +1,161 @@ +// + @attribute room + @attribute updatebg (riot function) + @attribute history (History) +room-properties + fieldset + label + b {voc.name} + br + input.wide( + type="text" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.name')}" + onchange="{recordChange(opts.room, 'name')}" + value="{opts.room.name}" + ) + fieldset + .aPoint2DInput.compact.wide + label + b {voc.width} + br + input.wide( + type="number" min="1" step="8" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.width')}" + onchange="{recordChange(opts.room, 'width')}" + value="{opts.room.width}" + ) + .aSpacer + label + b {voc.height} + br + input.wide( + type="number" min="1" step="8" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.height')}" + onchange="{recordChange(opts.room, 'height')}" + value="{opts.room.height}" + ) + fieldset + label.checkbox + input( + type="checkbox" + checked="{opts.room.restrictCamera}" + onchange="{handleToggle(opts.room, 'restrictCamera')}" + ) + span {voc.restrictCamera} + fieldset + .aPoint2DInput.compact.wide(if="{opts.room.restrictCamera}") + label + b {voc.minimumX}: + | + input.compact( + step="{opts.room.gridX}" type="number" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.restrictMinX')}" + onchange="{recordChange(opts.room, 'restrictMinX')}" + value="{opts.room.restrictMinX === void 0 ? 0 : opts.room.restrictMinX}" + ) + .aSpacer + label + b.nogrow {voc.minimumY}: + | + input.compact( + step="{opts.room.gridY}" type="number" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.restrictMinY')}" + onchange="{recordChange(opts.room, 'restrictMinY')}" + value="{opts.room.restrictMinY === void 0 ? 0 : opts.room.restrictMinY}" + ) + .aPoint2DInput.compact.wide(if="{opts.room.restrictCamera}") + label + b {voc.maximumX}: + | + input.compact( + step="{opts.room.gridX}" type="number" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.restrictMaxX')}" + onchange="{recordChange(opts.room, 'restrictMaxX')}" + value="{opts.room.restrictMaxX === void 0 ? opts.room.width : opts.room.restrictMaxX}" + ) + .aSpacer + label + b.nogrow {voc.maximumY}: + | + input.compact( + step="{opts.room.gridY}" type="number" + onfocus="{rememberValue}" + oninput="{wire('this.opts.room.restrictMaxY')}" + onchange="{recordChange(opts.room, 'restrictMaxY')}" + value="{opts.room.restrictMaxY === void 0 ? opts.room.height : opts.room.restrictMaxY}" + ) + + fieldset + b {voc.backgroundColor} + br + color-input.wide(onchange="{changeBgColor}" color="{opts.room.backgroundColor || '#000000'}") + + fieldset + label.block.checkbox + input( + type="checkbox" checked="{opts.room.isUi}" + onchange="{handleToggle(opts.room, 'isUi')}" + ) + b {voc.isUi} + + fieldset + extensions-editor(entity="{opts.room.extends}" type="room" wide="true" compact="true") + + script. + this.namespace = 'roomView'; + this.mixin(window.riotVoc); + this.mixin(window.riotWired); + + var prevValue; + this.rememberValue = e => { + if (e.target.type === 'number') { + prevValue = Number(e.target.value); + } else { + prevValue = e.target.value; + } + }; + this.recordChange = (entity, key) => e => { + if (!this.opts.history) { + return; + } + let {value} = e.target; + if (e.target.type === 'number') { + value = Number(value); + } + this.opts.history.pushChange({ + type: 'propChange', + key, + target: entity, + before: prevValue, + after: value + }); + }; + + this.changeBgColor = (e, color) => { + const prevChange = this.opts.room.backgroundColor; + this.opts.updatebg(e, color); + this.opts.history.pushChange({ + type: 'propChange', + key: 'backgroundColor', + target: this.opts.room, + before: prevChange, + after: this.opts.room.backgroundColor + }); + }; + this.handleToggle = (entity, key) => () => { + const prevValue = entity[key]; + entity[key] = !entity[key]; + this.opts.history.pushChange({ + type: 'propChange', + key, + target: entity, + before: prevValue, + after: entity[key] + }); + }; diff --git a/src/riotTags/rooms/room-template-picker.tag b/src/riotTags/rooms/room-template-picker.tag new file mode 100644 index 000000000..2be51b586 --- /dev/null +++ b/src/riotTags/rooms/room-template-picker.tag @@ -0,0 +1,23 @@ +// + @attribute onselect (riot function) + This function is called when a template is selected. + The only argument passed to this function is the selected template. + @attribute selected (ITemplate | -1) + Currently selected template, piped back from the room editor +room-template-picker + asset-viewer( + collection="{currentProject.templates}" + namespace="templates" + assettype="templates" + forcelayout="list" + click="{selectTemplate}" + thumbnails="{thumbnails}" + compact="true" + shownone="true" + selected="{opts.selected}" + ) + script. + this.thumbnails = require('./data/node_requires/resources/templates').getTemplatePreview; + this.selectTemplate = template => () => { + this.opts.onselect(template); + }; diff --git a/src/riotTags/rooms/room-tile-editor.tag b/src/riotTags/rooms/room-tile-editor.tag index e6bd5224f..f9661b27a 100644 --- a/src/riotTags/rooms/room-tile-editor.tag +++ b/src/riotTags/rooms/room-tile-editor.tag @@ -1,34 +1,56 @@ -room-tile-editor.room-editor-Tiles.tabbed.tall.flexfix +// + @attribute layer (TileLayer) + A pixi.js container with all its tiles. + @attribute layers (Iterable) + All exising tile layers in the current room. + @attribute pixieditor (RoomEditor) + When other attributes are not enough + + @attribute onchangetile (riot function) + Called with ITileSelection instance as its only argument + @attribute onchangelayer (riot function) + Called with TileLayer as its only argument. + + @attribute addlayer (riot function) + Called when a user wants to add a layer. + The only argument is an ITileLayerTemplate instance. + +room-tile-editor.room-editor-Tiles.flexfix(class="{opts.class}") + .flexfix-header + button.inline.wide(onclick="{openTextureSelector}") + svg.feather + use(xlink:href="#search") + span {voc.findTileset} .flexfix-body - canvas( + canvas.room-tile-editor-aCanvas( ref="tiledImage" - onmousedown="{startTileSelection}" - onmouseup="{stopTileSelection}" - onmousemove="{moveTileSelection}" + onpointerdown="{startTileSelection}" + onpointerup="{stopTileSelection}" + onpointermove="{moveTileSelection}" ) .flexfix-footer - button.inline.wide(onclick="{switchTiledImage}") + ul.aMenu.room-tile-editor-aLayerList + li.checkbox(each="{layer in opts.layers}" onclick="{changeTileLayer}" class="{active: layer === parent.opts.layer}") + input(type="checkbox" name="tileLayers" checked="{!layer.isHidden}" onchange="{toggleTileLayer}") + b {layer.zIndex} + span.a(title="{parent.voc.moveTileLayer}") + svg.feather(onclick="{moveTileLayer}") + use(xlink:href="#shuffle") + span.a(title="{parent.vocGlob.delete}") + svg.feather(onclick="{deleteTileLayer}") + use(xlink:href="#trash") + button.inline.wide(onclick="{addTileLayer}") svg.feather - use(xlink:href="#search") - span {voc.findTileset} - .flexrow - select.wide(onchange="{changeTileLayer}" value="{parent.currentTileLayerId}") - option(each="{layer, ind in opts.room.tiles}" selected="{parent.currentTileLayerId === ind}" value="{ind}") {layer.hidden? '❌' : '✅'} {layer.depth} - - span.act(title="{vocGlob.delete}" onclick="{deleteTileLayer}") - svg.feather - use(xlink:href="#trash") - span.act(title="{parent.currentTileLayer.hidden? voc.show: voc.hide}" onclick="{toggleTileLayer}") - svg.feather - use(xlink:href="#{parent.currentTileLayer.hidden? 'eye' : 'eye-off'}") - span.act(title="{voc.moveTileLayer}" onclick="{moveTileLayer}") - svg.feather - use(xlink:href="#shuffle") - span.act(title="{vocGlob.add}" onclick="{addTileLayer}") - svg.feather - use(xlink:href="#plus") + use(xlink:href="#plus") + span {voc.addTileLayer || vocGlob.add} .block - extensions-editor(type="tileLayer" entity="{parent.currentTileLayer.extends}" compact="yep" wide="sure") + extensions-editor( + if="{opts.layer}" + type="tileLayer" + entity="{opts.layer.extends}" + compact="true" + wide="true" + ) asset-selector( ref="tilesetPicker" if="{pickingTileset}" @@ -37,43 +59,35 @@ room-tile-editor.room-editor-Tiles.tabbed.tall.flexfix onselected="{onTilesetSelected}" ) script. - this.parent.tileX = 0; - this.parent.tileY = 0; - this.parent.tileSpanX = 1; - this.parent.tileSpanY = 1; - if (!('tiles' in this.opts.room) || !this.opts.room.tiles.length) { - this.opts.room.tiles = [{ - depth: -10, - tiles: [], - extends: {} - }]; - this.parent.resortRoom(); - } - [this.parent.currentTileLayer] = this.opts.room.tiles; - this.parent.currentTileLayerId = 0; + this.tileX = 0; + this.tileY = 0; + this.tileSpanX = 1; + this.tileSpanY = 1; this.namespace = 'roomTiles'; this.mixin(window.riotVoc); this.mixin(window.riotWired); - this.deleteTileLayer = () => { + this.on('update', () => { + if (!this.opts.layer && this.opts.layers.length) { + this.opts.onchangelayer(this.opts.layers[0]); + this.update(); + } else if (this.opts.layer && !this.opts.layers.length) { + this.opts.onchangelayer(void 0); + this.update(); + } + }); + + this.deleteTileLayer = e => { + const {layer} = e.item; window.alertify .okBtn(window.languageJSON.common.delete) .cancelBtn(window.languageJSON.common.cancel) .confirm(window.languageJSON.common.confirmDelete.replace('{0}', window.languageJSON.common.tileLayer)) .then(e => { if (e.buttonClicked === 'ok') { - var tiles = this.opts.room; - var index = tiles.tiles.indexOf(this.parent.currentTileLayer); - tiles.tiles.splice(index, 1); - if (tiles.tiles.length) { - [this.parent.currentTileLayer] = tiles.tiles; - this.parent.currentTileLayerId = 0; - } else { - this.parent.currentTileLayer = false; - } - this.parent.resortRoom(); - this.parent.refreshRoomCanvas(); + layer.detach(true); + this.opts.onchangelayer(this.opts.layers[0]); this.update(); window.alertify .okBtn(window.languageJSON.common.ok) @@ -81,15 +95,25 @@ room-tile-editor.room-editor-Tiles.tabbed.tall.flexfix } }); }; - this.moveTileLayer = () => { + this.moveTileLayer = e => { + const {layer} = e.item; window.alertify - .defaultValue(this.parent.currentTileLayer.depth) + .defaultValue(layer.zIndex) + .okBtn(window.languageJSON.common.ok) + .cancelBtn(window.languageJSON.common.cancel) .prompt(window.languageJSON.roomView.newDepth) .then(e => { if (e.inputValue && Number(e.inputValue)) { - this.parent.currentTileLayer.depth = Number(e.inputValue); - this.parent.resortRoom(); - this.parent.refreshRoomCanvas(); + const before = layer.zIndex; + layer.zIndex = Number(e.inputValue); + this.opts.layers.sort((a, b) => b.zIndex - a.zIndex); + this.opts.pixieditor.history.pushChange({ + type: 'propChange', + key: 'zIndex', + target: layer, + before, + after: layer.zIndex + }); this.update(); } }); @@ -100,71 +124,68 @@ room-tile-editor.room-editor-Tiles.tabbed.tall.flexfix .prompt(window.languageJSON.roomView.newDepth) .then(e => { if (e.inputValue && Number(e.inputValue)) { - var layer = { + const layer = { depth: Number(e.inputValue), tiles: [], extends: {} }; - this.opts.room.tiles.push(layer); - this.parent.currentTileLayer = layer; - this.parent.currentTileLayerId = this.opts.room.tiles.length - 1; - this.parent.resortRoom(); + const pixiTileLayer = this.opts.addlayer(layer, true); + this.opts.onchangelayer(pixiTileLayer); this.update(); } }); }; this.toggleTileLayer = () => { - this.parent.currentTileLayer.hidden = !this.parent.currentTileLayer.hidden; - this.parent.refreshRoomCanvas(); + this.opts.layer.showToggle(); }; this.changeTileLayer = e => { - this.parent.currentTileLayer = this.opts.room.tiles[Number(e.target.value)]; - if (!this.parent.currentTileLayer.extends) { - this.parent.currentTileLayer.extends = {}; - } - this.parent.currentTileLayerId = Number(e.target.value); + this.opts.onchangelayer(e.item.layer); }; - this.switchTiledImage = () => { + this.openTextureSelector = () => { this.pickingTileset = true; }; this.onTilesetCancel = () => { this.pickingTileset = false; this.update(); }; - this.onTilesetSelected = textureId => { - const textures = require('./data/node_requires/resources/textures'); - this.parent.currentTileset = textures.getById(textureId); + this.onTilesetSelected = async textureId => { + const {getById, getDOMImage} = require('./data/node_requires/resources/textures'); + this.currentTexture = getById(textureId); this.pickingTileset = false; + this.update(); + this.currentTextureImg = await getDOMImage(this.currentTexture); this.redrawTileset(); + this.tileX = this.tileY = 0; + this.tileSpanX = this.tileSpanY = 1; + this.sendTileSelection(); this.update(); }; this.redrawTileset = () => { - const glob = require('./data/node_requires/glob'); var c = this.refs.tiledImage, cx = c.getContext('2d'), - g = this.parent.currentTileset, - i = glob.texturemap[g.uid]; - c.width = i.width; - c.height = i.height; + tex = this.currentTexture, + img = this.currentTextureImg; + c.width = img.width; + c.height = img.height; if (global.currentProject.settings.rendering.pixelatedrender) { c.style.imageRendering = 'pixelated'; } else { c.style.imageRendering = 'unset'; } cx.globalAlpha = 1; - cx.drawImage(i, 0, 0); + cx.drawImage(img, 0, 0); cx.strokeStyle = '#0ff'; cx.lineWidth = 1; cx.globalAlpha = 0.5; cx.globalCompositeOperation = 'exclusion'; - for (let i = 0, l = Math.min(g.grid[0] * g.grid[1], g.untill || Infinity); i < l; i++) { - const xx = i % g.grid[0], - yy = Math.floor(i / g.grid[0]), - x = g.offx + xx * (g.marginx + g.width), - y = g.offy + yy * (g.marginy + g.height), - w = g.width, - h = g.height; + for (let i = 0, l = Math.min(tex.grid[0] * tex.grid[1], tex.untill || Infinity); i < l; i++) { + const xx = i % tex.grid[0], + yy = Math.floor(i / tex.grid[0]), + x = tex.offx + xx * (tex.marginx + tex.width), + y = tex.offy + yy * (tex.marginy + tex.height), + w = tex.width, + h = tex.height; cx.strokeRect(x, y, w, h); } cx.globalCompositeOperation = 'source-over'; @@ -172,33 +193,33 @@ room-tile-editor.room-editor-Tiles.tabbed.tall.flexfix cx.lineJoin = 'round'; cx.strokeStyle = localStorage.UItheme === 'Night' ? '#44dbb5' : '#446adb'; cx.lineWidth = 3; - const selX = g.offx + this.parent.tileX * (g.width + g.marginx), - selY = g.offy + this.parent.tileY * (g.height + g.marginy), - selW = g.width * this.parent.tileSpanX + g.marginx * (this.parent.tileSpanX - 1), - selH = g.height * this.parent.tileSpanY + g.marginy * (this.parent.tileSpanY - 1); + const selX = tex.offx + this.tileX * (tex.width + tex.marginx), + selY = tex.offy + this.tileY * (tex.height + tex.marginy), + selW = tex.width * this.tileSpanX + tex.marginx * (this.tileSpanX - 1), + selH = tex.height * this.tileSpanY + tex.marginy * (this.tileSpanY - 1); cx.strokeRect(-0.5 + selX, -0.5 + selY, selW + 1, selH + 1); cx.strokeStyle = localStorage.UItheme === 'Night' ? '#1C2B42' : '#fff'; cx.lineWidth = 1; cx.strokeRect(-0.5 + selX, -0.5 + selY, selW + 1, selH + 1); }; this.startTileSelection = e => { - if (!this.parent.currentTileset) { + if (!this.currentTexture) { return; } // Adjust the pointer coordinates to account for potential scaling const bbox = e.target.getBoundingClientRect(); const px = e.layerX / bbox.width * e.target.width, py = e.layerY / bbox.height * e.target.height; - var g = this.parent.currentTileset; - this.parent.tileSpanX = 1; - this.parent.tileSpanY = 1; + const tex = this.currentTexture; + this.tileSpanX = 1; + this.tileSpanY = 1; this.selectingTile = true; - this.tileStartX = Math.round((px - g.offx - g.width * 0.5) / (g.width + g.marginx)); - this.tileStartX = Math.max(0, Math.min(g.grid[0], this.tileStartX)); - this.tileStartY = Math.round((py - g.offy - g.height * 0.5) / (g.height + g.marginy)); - this.tileStartY = Math.max(0, Math.min(g.grid[1], this.tileStartY)); - this.parent.tileX = this.tileStartX; - this.parent.tileY = this.tileStartY; + this.tileStartX = Math.round((px - tex.offx - tex.width * 0.5) / (tex.width + tex.marginx)); + this.tileStartX = Math.max(0, Math.min(tex.grid[0], this.tileStartX)); + this.tileStartY = Math.round((py - tex.offy - tex.height * 0.5) / (tex.height + tex.marginy)); + this.tileStartY = Math.max(0, Math.min(tex.grid[1], this.tileStartY)); + this.tileX = this.tileStartX; + this.tileY = this.tileStartY; this.redrawTileset(); }; this.moveTileSelection = e => { @@ -209,21 +230,32 @@ room-tile-editor.room-editor-Tiles.tabbed.tall.flexfix const bbox = e.target.getBoundingClientRect(); const px = e.layerX / bbox.width * e.target.width, py = e.layerY / bbox.height * e.target.height; - var g = this.parent.currentTileset; - this.tileEndX = Math.round((px - g.offx - g.width * 0.5) / (g.width + g.marginx)); - this.tileEndX = Math.max(0, Math.min(g.grid[0], this.tileEndX)); - this.tileEndY = Math.round((py - g.offy - g.height * 0.5) / (g.height + g.marginy)); - this.tileEndY = Math.max(0, Math.min(g.grid[1], this.tileEndY)); - this.parent.tileSpanX = 1 + Math.abs(this.tileStartX - this.tileEndX); - this.parent.tileSpanY = 1 + Math.abs(this.tileStartY - this.tileEndY); - this.parent.tileX = Math.min(this.tileStartX, this.tileEndX); - this.parent.tileY = Math.min(this.tileStartY, this.tileEndY); + const tex = this.currentTexture; + this.tileEndX = Math.round((px - tex.offx - tex.width * 0.5) / (tex.width + tex.marginx)); + this.tileEndX = Math.max(0, Math.min(tex.grid[0], this.tileEndX)); + this.tileEndY = Math.round((py - tex.offy - tex.height * 0.5) / (tex.height + tex.marginy)); + this.tileEndY = Math.max(0, Math.min(tex.grid[1], this.tileEndY)); + this.tileSpanX = 1 + Math.abs(this.tileStartX - this.tileEndX); + this.tileSpanY = 1 + Math.abs(this.tileStartY - this.tileEndY); + this.tileX = Math.min(this.tileStartX, this.tileEndX); + this.tileY = Math.min(this.tileStartY, this.tileEndY); this.redrawTileset(); }; + this.stopTileSelection = e => { if (!this.selectingTile) { return; } this.moveTileSelection(e); + this.sendTileSelection(); this.selectingTile = false; }; + this.sendTileSelection = () => { + this.opts.onchangetile({ + startX: this.tileX, + startY: this.tileY, + spanX: this.tileSpanX, + spanY: this.tileSpanY, + texture: this.currentTexture + }); + }; diff --git a/src/riotTags/rooms/room-type-picker.tag b/src/riotTags/rooms/room-type-picker.tag deleted file mode 100644 index c20849b85..000000000 --- a/src/riotTags/rooms/room-type-picker.tag +++ /dev/null @@ -1,89 +0,0 @@ -room-template-picker.room-editor-TemplateSwatches.tabbed.tall - .aSearchWrap - input.inline(type="text" onkeyup="{fuseSearch}" ref="fusesearch") - svg.feather - use(xlink:href="#search") - .room-editor-aTemplateSwatch( - if="{!searchResults}" - onclick="{parent.roomUnpickTemplate}" - class="{active: opts.current === -1}" - ) - span {voc.selectAndMove} - svg.feather - use(xlink:href="#move") - .room-editor-aTemplateSwatch( - each="{template in (searchResults? searchResults : templates)}" - title="{template.name}" - onclick="{selectTemplate(template)}" - class="{active: parent.opts.current === template}" - ) - span {template.name} - img( - src="{template.texture === -1? 'data/img/notexture.png' : (glob.texturemap[template.texture].src.split('?')[0] + '_prev.png?' + getTextureRevision(template))}" - draggable="false" - ) - .room-editor-aTemplateSwatch.filler - .room-editor-aTemplateSwatch.filler - .room-editor-aTemplateSwatch.filler - .room-editor-aTemplateSwatch.filler - .room-editor-aTemplateSwatch.filler - .room-editor-aTemplateSwatch.filler - .room-editor-aTemplateSwatch.filler - - script. - const glob = require('./data/node_requires/glob'); - this.glob = glob; - this.namespace = 'roomView'; - this.mixin(window.riotVoc); - this.mixin(window.riotWired); - - this.getTextureRevision = template => glob.texturemap[template.texture].g.lastmod; - - const fuseOptions = { - shouldSort: true, - tokenize: true, - threshold: 0.5, - location: 0, - distance: 100, - maxPatternLength: 32, - minMatchCharLength: 1, - keys: ['name'] - }; - const Fuse = require('fuse.js'); - this.fuseSearch = e => { - if (!this.mounted) { - this.searchResults = null; - return; - } - var val = (e ? e.target.value : this.refs.fusesearch.value).trim(); - if (val) { - var fuse = new Fuse(this.templates, fuseOptions); - this.searchResults = fuse.search(val); - } else { - this.searchResults = null; - } - }; - this.selectTemplate = template => () => { - this.parent.currentTemplate = template; - this.parent.selectedCopies = false; - }; - - this.updateTemplateList = () => { - this.templates = [...global.currentProject.templates]; - this.templates.sort((a, b) => a.name.localeCompare(b.name)); - this.fuseSearch(); - }; - this.updateTemplateList(); - var templatesChanged = () => { - this.updateTemplateList(); - this.update(); - }; - - window.signals.on('templatesChanged', templatesChanged); - this.on('unmount', () => { - window.signals.off('templatesChanged', templatesChanged); - }); - - this.on('mount', () => { - this.mounted = true; - }); diff --git a/src/riotTags/rooms/rooms-panel.tag b/src/riotTags/rooms/rooms-panel.tag index 3e22b2453..914d7b7f9 100644 --- a/src/riotTags/rooms/rooms-panel.tag +++ b/src/riotTags/rooms/rooms-panel.tag @@ -15,7 +15,7 @@ rooms-panel.aPanel.aView svg.feather use(xlink:href="#plus") span {parent.voc.create} - room-editor(if="{editing}" room="{editingRoom}") + room-editor(if="{editing}" room="{editingRoom}" onclose="{closeRoomEditor}") context-menu(menu="{roomMenu}" ref="roomMenu") script. const generateGUID = require('./data/node_requires/generateGUID'); @@ -44,6 +44,11 @@ rooms-panel.aPanel.aView this.editingRoom = room; this.editing = true; }; + this.closeRoomEditor = () => { + this.editingRoom = void 0; + this.editing = false; + this.update(); + }; this.roomMenu = { items: [{ @@ -72,14 +77,16 @@ rooms-panel.aPanel.aView .prompt(window.languageJSON.common.newName) .then(e => { if (e.inputValue !== '' && e.buttonClicked !== 'cancel') { - var guid = generateGUID(), - thumbnail = guid.split('-').pop(); + var guid = generateGUID(); var newRoom = JSON.parse(JSON.stringify(this.editingRoom)); newRoom.name = e.inputValue; global.currentProject.rooms.push(newRoom); newRoom.uid = guid; - newRoom.thumbnail = thumbnail; - fs.linkSync(global.projdir + '/img/r' + this.editingRoom.thumbnail + '.png', global.projdir + '/img/r' + thumbnail + '.png'); + try { + fs.linkSync(`${global.projdir}/img/r${this.editingRoom.uid}.png`, `${global.projdir}/img/r${guid}.png`); + } catch (e) { + fs.linkSync('./data/img/notexture.png', `${global.projdir}/img/r${guid}.png`); + } this.refs.rooms.updateList(); this.update(); } @@ -132,17 +139,8 @@ rooms-panel.aPanel.aView if (room.uid === window.currentProject.startroom) { icons.push('play'); } - if (room.oncreate.trim()) { - icons.push('sun'); - } - if (room.onstep.trim()) { - icons.push('skip-forward'); - } - if (room.ondraw.trim()) { - icons.push('edit-2'); - } - if (room.onleave.trim()) { - icons.push('trash'); + if (room.extends && room.extends.isUi) { + icons.push('ui'); } return icons; }; diff --git a/src/riotTags/root-tag.tag b/src/riotTags/root-tag.tag index bf7b80cb1..465a38e13 100644 --- a/src/riotTags/root-tag.tag +++ b/src/riotTags/root-tag.tag @@ -1,6 +1,5 @@ -root-tag +root-tag(class="{pride: localStorage.prideMode === 'on'}") app-view(if="{projectOpened}") - notepad-panel(if="{projectOpened}") dnd-processor(if="{projectOpened}") project-selector(if="{!projectOpened}") writable-folder-prompt(if="{showWritableFolderPrompt}" onsuccess="{onWritableSelected}") @@ -34,7 +33,7 @@ root-tag const stylesheet = document.createElement('style'); document.head.appendChild(stylesheet); const updateStylesheet = () => { - stylesheet.innerHTML = ` + const css = ` code, pre { font-family: ${localStorage.fontFamily || 'Iosevka, monospace'}; font-variant-ligatures: ${localStorage.codeLigatures === 'off' ? 'none' : 'normal'}; @@ -43,6 +42,10 @@ root-tag line-height: ${localStorage.codeDense === 'on' ? 1.5 : 1.75}; } `; + stylesheet.innerHTML = css; }; updateStylesheet(); window.signals.on('codeFontUpdated', updateStylesheet); + window.signals.on('prideModeUpdated', () => { + this.update(); + }); diff --git a/src/riotTags/shared/action-input.tag b/src/riotTags/shared/action-input.tag new file mode 100644 index 000000000..97798c1ab --- /dev/null +++ b/src/riotTags/shared/action-input.tag @@ -0,0 +1,65 @@ +// + A button with a dropdown that lets a user select an Action + + @attribute actionname (string) + The name of the currently selected action + @attribute [allowclear] (atomic) + If set, shows an additional button to clear the input + @attribute [compact] (atomic) + If set, displays a more compact layout + + @attribute onchanged (riot function) + Passes the name of the new event every time the input was changed + (can also change due to having an invalid action) +action-input + .aButtonGroup.nml + button(onclick="{openSelector}" title="{vocGlob.select}" class="{inline: opts.compact}") + svg.feather + use(xlink:href="#airplay") + span(if="{!opts.actionname}") {vocGlob.selectDialogue} + span(if="{opts.actionname}") {opts.actionname} + button.square(if="{actionname && opts.allowclear}" title="{vocGlob.clear}" onclick="{clearField}" class="{inline: opts.compact}") + svg.feather + use(xlink:href="#x") + context-menu(ref="menu" menu="{menu}") + script. + if (!this.opts.onchanged) { + console.error('An action-input tag doesn\'t have its onchanged attrubute set, and thus is pointless!'); + } + if (this.opts.actionName) { + if (!window.currentProject.actions.find(action => action.name === this.opts.actionName)) { + // eslint-disable-next-line no-console + console.warn(`An action-input was passed an invalid action ${this.opts.actionName} and will request to empty its value.`); + if (this.opts.onchanged) { + this.opts.onchanged(); + } + } + } + + this.namespace = 'common.scriptables'; + this.mixin(window.riotVoc); + + this.changeField = affixedData => { + if (this.opts.onchanged) { + this.opts.onchanged(affixedData.actionName); + } + }; + this.clearField = () => { + if (this.opts.onchanged) { + this.opts.onchanged(); + } + }; + + this.openSelector = e => { + this.menu = { + opened: true, + items: window.currentProject.actions.map(action => ({ + label: action.name, + affixedData: { + actionName: action.name + }, + click: this.changeField + })) + }; + this.refs.menu.popup(e.clientX, e.clientY); + }; diff --git a/src/riotTags/shared/array-editor.tag b/src/riotTags/shared/array-editor.tag index 076bfb88b..51db9619f 100644 --- a/src/riotTags/shared/array-editor.tag +++ b/src/riotTags/shared/array-editor.tag @@ -139,9 +139,9 @@ array-editor } }); - this.writeUid = index => obj => { - if (obj) { - this.opts.entity[index] = obj.uid; + this.writeUid = index => uid => { + if (uid) { + this.opts.entity[index] = uid; } else { this.opts.entity[index] = -1; } diff --git a/src/riotTags/shared/asset-input.tag b/src/riotTags/shared/asset-input.tag index 8cfa61fce..499383d00 100644 --- a/src/riotTags/shared/asset-input.tag +++ b/src/riotTags/shared/asset-input.tag @@ -7,6 +7,8 @@ Not all the asset types are supported (e.g. projects are not). @attribute allowclear (atomic) Whether the tag should also show a button to clear input's value. + @attribute disallowjump (atomic) + If set, hides a button to jump to the selected asset. @attribute assetid (string) The asset id of the currently picked asset. It is used to get asset's thumbnail, as well as to prefill the current input's value. @@ -34,7 +36,7 @@ asset-input img(src="{thumbnails(currentAsset || -1, false, false)}") span(if="{opts.assetid == -1 || opts.assetid === void 0}") {vocGlob.select} span(if="{opts.assetid != -1 && opts.assetid !== void 0}") {names(currentAsset)} - button.square(if="{opts.assetid != -1 && opts.assetid !== void 0}" title="{voc.jumpToAsset}" onclick="{openAsset}" class="{inline: opts.compact}") + button.square(if="{opts.assetid != -1 && opts.assetid !== void 0 && !opts.disallowjump}" title="{voc.jumpToAsset}" onclick="{openAsset}" class="{inline: opts.compact}") svg.feather use(xlink:href="#external-link") button.square(if="{(opts.assetid != -1 && opts.assetid !== void 0) && opts.allowclear}" title="{vocGlob.clear}" onclick="{clearAsset}" class="{inline: opts.compact}") @@ -50,7 +52,7 @@ asset-input use(xlink:href="#x") img(src="{thumbnails(currentAsset || -1, true, false)}") .aNotice(if="{opts.assetid == -1 || opts.assetid === void 0}") {vocGlob.select} - div(if="{opts.assetid != -1 && opts.assetid !== void 0}") {names(currentAsset)} + .dim(if="{opts.assetid != -1 && opts.assetid !== void 0}") {names(currentAsset)} asset-selector( if="{showingSelector}" assettype="{opts.assettype}" @@ -76,11 +78,12 @@ asset-input } this.openAsset = e => { - e.stopPropagation(); window.orders.trigger('openAsset', `${this.opts.assettype}/${this.currentAsset.uid}`); + e.stopPropagation(); }; - this.openSelector = () => { + this.openSelector = e => { this.showingSelector = true; + e.stopPropagation(); }; this.closeSelector = () => { this.showingSelector = false; @@ -111,7 +114,7 @@ asset-input } setTimeout(() => { // eslint-disable-next-line eqeqeq - if (this.opts.assetid == -1) { + if (this.opts.assetid == -1 || this.opts.assetid === void 0) { if (this.currentAsset) { this.currentAsset = void 0; this.update(); diff --git a/src/riotTags/shared/asset-selector.tag b/src/riotTags/shared/asset-selector.tag index c4e40c558..cd65f5ca6 100644 --- a/src/riotTags/shared/asset-selector.tag +++ b/src/riotTags/shared/asset-selector.tag @@ -58,8 +58,9 @@ asset-selector.aDimmer.pointer.pad.fadein(onclick="{closeOnDimmer}" ref="dimmer" this.opts.oncancelled(); } } + e.stopPropagation(); }; - this.onAssetPicked = asset => () => { + this.onAssetPicked = asset => e => { if (this.opts.onselected) { if (asset === -1) { this.opts.onselected(-1); @@ -67,4 +68,5 @@ asset-selector.aDimmer.pointer.pad.fadein(onclick="{closeOnDimmer}" ref="dimmer" this.opts.onselected(asset.uid); } } + e.stopPropagation(); }; diff --git a/src/riotTags/shared/asset-viewer.tag b/src/riotTags/shared/asset-viewer.tag index c4e27f517..d8f3d4ae2 100644 --- a/src/riotTags/shared/asset-viewer.tag +++ b/src/riotTags/shared/asset-viewer.tag @@ -7,38 +7,45 @@ @attribute class (string) This tag has its own CSS classes, but allows arbitrary ones added as an attribute. - @attribute namespace (string) + @attribute [namespace] (string) A unique namespace used to store settings. Fallbacks to 'default'. - @attribute defaultlayout (string) + @attribute [defaultlayout] (string) The default listing layout used if the user has not selected one yet. Can be "cards", "list", "largeCards". + @attribute [forcelayout] (string) + Similar to [defaultlayout] + @attribute [compact] (atomic) + If set, the viewer hides several elements to fit in a more tight layout. @attribute assettype (string) The type of assets shown. The attribute is needed for groups to function. @attribute collection (riot function) A collection of items to iterate over while generating markup, sorting and firing events. - @attribute names (riot function) + @attribute [shownone] (atomic) + If set, shows a "none" asset that returns -1 in opts.click event. + @attribute [selected] (IAsset | -1) + Currently selected asset. If set, it will be highlighted in UI. + + @attribute [names] (riot function) A mapping funtion that takes a collection object and returns its human-readable name. Fallbacks to `item.name` if not defined. - @attribute thumbnails (riot function) + @attribute [thumbnails] (riot function) A mapping funtion that takes a collection object and returns a url for its thumbnail. The function is passed with the collection object, `true` or `false` depending on whether the large-card view is active, and `false`, which match the arguments used to get a URL for the thumbnail of the proper size in many get{X}Preview methods. - @attribute useicons (atomic) + @attribute [useicons] (atomic) Tells the asset viewer to use SVG icons instead of img tag. The `thumbnails` function should then return the name of the SVG icon. - @attribute shownone (atomic) - If set, shows a "none" asset that returns -1 in opts.click event. - - @attribute icons (riot function) + @attribute [icons] (riot function) A mapping funtion that takes a collection object and returns an array of icon names. The icons are shown near the asset's name and are used to convey some metadata. + @attribute click (riot function) A two-fold callback (item => e => {…}) fired when a user clicks on an item, passing the associated collection object as its only argument in the first function, and a MouseEvent in a second function - @attribute contextmenu (riot function) + @attribute [contextmenu] (riot function) A two-fold callback (item => e => {…}) that is given a collection object as its only argument in the first function, and a MouseEvent in a second function, when a user tries to call a context menu on an item. @@ -51,11 +58,11 @@ category is selected. Otherwise, groups are meant to be distinguished by their `uid` property. -asset-viewer.flexfix(class="{opts.namespace} {opts.class}") +asset-viewer.flexfix(class="{opts.namespace} {opts.class} {compact: opts.compact}") .flexfix-header - .toright - b {vocGlob.sort} - .aButtonGroup + .toright(class="{flexrow: opts.compact}") + b(if="{!opts.compact}") {vocGlob.sort} + .aButtonGroup.nml button.inline.square( onclick="{switchSort('date')}" class="{selected: sort === 'date' && !searchResults}" @@ -68,17 +75,17 @@ asset-viewer.flexfix(class="{opts.namespace} {opts.class}") ) svg.feather use(xlink:href="#sort-alphabetically") - .aSearchWrap + .aSearchWrap(style="{opts.compact ? 'width: auto;' : ''}") input.inline(type="text" onkeyup="{fuseSearch}") svg.feather use(xlink:href="#search") - button.inline.square(onclick="{switchLayout}") + button.inline.square(if="{!opts.forcelayout}" onclick="{switchLayout}") svg.feather use(xlink:href="#{layoutToIconMap[currentLayout]}") - button.inline.square.nogrow(onclick="{addNewGroup}") + button.inline.square.nogrow.nmr(onclick="{addNewGroup}") svg.feather use(xlink:href="#folder-plus") - span {voc.addNewGroup} + span(if="{!opts.compact}") {voc.addNewGroup} .toleft .clear @@ -86,6 +93,7 @@ asset-viewer.flexfix(class="{opts.namespace} {opts.class}") .aSpacer ul.Cards.nmt( if="{opts.assettype}" + class="{list: opts.compact}" ) li.aCard( onclick="{openGroup({isUngroupedGroup: true})}" @@ -116,14 +124,15 @@ asset-viewer.flexfix(class="{opts.namespace} {opts.class}") use(xlink:href="data/img/weirdFoldersIllustration.svg#illustration") br span {vocGlob.nothingToShowFiller} - ul.Cards(class="{layoutToClassListMap[currentLayout]}") - li.aCard(if="{opts.shownone}" onclick="{opts.click && opts.click(-1)}") + ul.Cards(class="{layoutToClassListMap[opts.forcelayout || currentLayout]}") + li.aCard(if="{opts.shownone}" onclick="{opts.click && opts.click(-1)}" class="{active: opts.selected === -1}") .aCard-aThumbnail img(src="data/img/notexture.png") .aCard-Properties span {vocGlob.none} li.aCard( each="{asset in (searchResults? searchResults : getGrouped(collection))}" + class="{active: opts.selected === asset}" oncontextmenu="{parent.opts.contextmenu && parent.opts.contextmenu(asset)}" onlong-press="{parent.opts.contextmenu && parent.opts.contextmenu(asset)}" onclick="{parent.opts.click && parent.opts.click(asset)}" @@ -143,7 +152,7 @@ asset-viewer.flexfix(class="{opts.namespace} {opts.class}") .asset-viewer-Icons(if="{parent.opts.icons}") svg.feather(each="{icon in parent.opts.icons(asset)}" class="feather-{icon}") use(xlink:href="#{icon}") - span.date(if="{asset.lastmod}") {niceTime(asset.lastmod)} + span.date(if="{asset.lastmod && !parent.opts.compact}") {niceTime(asset.lastmod)} group-editor( if="{showingGroupEditor}" onapply="{closeGroupEditor}" diff --git a/src/riotTags/shared/builtin-asset-gallery.tag b/src/riotTags/shared/builtin-asset-gallery.tag index a8d795d08..03bc8849d 100644 --- a/src/riotTags/shared/builtin-asset-gallery.tag +++ b/src/riotTags/shared/builtin-asset-gallery.tag @@ -14,28 +14,28 @@ builtin-asset-gallery.aPanel.aView.pad .aButtonGroup button( title="{voc.visitSource}" - onclick="{openExternal(currentSet.meta.source)}" + onclick="{() => nw.Shell.openExternal(currentSet.meta.source)}" if="{currentSet && currentSet.meta.source}" ) svg.feather use(xlink:href="#external-link") button( title="{voc.visitAuthorsItch}" - onclick="{openExternal(currentSet.meta.itch)}" + onclick="{() => nw.Shell.openExternal(currentSet.meta.itch)}" if="{currentSet && currentSet.meta.itch}" ) svg.icon use(xlink:href="#itch-dot-io") button( title="{voc.visitAuthorsTwitter}" - onclick="{openExternal(currentSet.meta.twitter)}" + onclick="{() => nw.Shell.openExternal(currentSet.meta.twitter)}" if="{currentSet && currentSet.meta.twitter}" ) svg.icon use(xlink:href="#twitter") button( title="{voc.tipAuthor}" - onclick="{openExternal(currentSet.meta.donate)}" + onclick="{() => nw.Shell.openExternal(currentSet.meta.donate)}" if="{currentSet && currentSet.meta.donate}" ) svg.feather diff --git a/src/riotTags/shared/collapsible-section.tag b/src/riotTags/shared/collapsible-section.tag index c66631211..52a0460a7 100644 --- a/src/riotTags/shared/collapsible-section.tag +++ b/src/riotTags/shared/collapsible-section.tag @@ -11,33 +11,35 @@ @attribute [heading] (string) The heading to display - @attribute hlevel (integer) + @attribute [hlevel] (integer) A heading level from 1 to 7. Can be empty; if it is, a regular h3 is shown. - @attribute defaultstate ("opened"|"closed") + @attribute [icon] (string) + An icon that will be displayed instead of the default chevron. + @attribute [defaultstate] ("opened"|"closed") Sets the default state of the section. If it is not set, the section will appear closed. - @attribute storestatekey (string) + @attribute [storestatekey] (string) If set, remembers the state of this section in localStorage under the specified key. - @attribute preservedom (atomic) + @attribute [preservedom] (atomic) Whether or not to hide the content instead of removing it from DOM. It is recommended to turn this on for larger layouts. - @attribute ontoggle (riot function) + @attribute [ontoggle] (riot function) A callback that triggers when a user folds/unfolds the section. Passes the new state and this tag as two arguments. collapsible-section(class="{opts.class} {opened ? 'opened' : 'closed'}") - .flexrow(onclick="{toggle}") - span(if="{opts.heading}") - h1(if="{opts.hlevel == 1}") {opts.heading} - h2(if="{opts.hlevel == 2}") {opts.heading} - h3(if="{opts.hlevel == 3 || !opts.hlevel}") {opts.heading} - h4(if="{opts.hlevel == 4}") {opts.heading} - h5(if="{opts.hlevel == 5}") {opts.heading} - h6(if="{opts.hlevel == 6}") {opts.heading} - h7(if="{opts.hlevel == 7}") {opts.heading} - yield(from="header") + .collapsible-section-aHeader(onclick="{toggle}") + span + h1(if="{opts.heading && opts.hlevel == 1}") {opts.heading} + h2(if="{opts.heading && opts.hlevel == 2}") {opts.heading} + h3(if="{opts.heading && (opts.hlevel == 3 || !opts.hlevel)}") {opts.heading} + h4(if="{opts.heading && opts.hlevel == 4}") {opts.heading} + h5(if="{opts.heading && opts.hlevel == 5}") {opts.heading} + h6(if="{opts.heading && opts.hlevel == 6}") {opts.heading} + h7(if="{opts.heading && opts.hlevel == 7}") {opts.heading} + yield(from="header") svg.feather.a(class="{rotated: this.opened}") - use(xlink:href="#chevron-up") + use(xlink:href="#{opts.icon ? opts.icon : 'chevron-up'}") .collapsible-section-aWrapper(if="{opened || opts.preservedom}" hide="{!opened && opts.preservedom}") script. diff --git a/src/riotTags/shared/context-menu.tag b/src/riotTags/shared/context-menu.tag index 484461378..7c3941462 100644 --- a/src/riotTags/shared/context-menu.tag +++ b/src/riotTags/shared/context-menu.tag @@ -2,25 +2,13 @@ Shows a generic context menu. @attribute menu (riot object) - Expects a following structure: + Expects a following structure (IMenu): { opened: boolean, // mutable by a context-menu instance items: Array, columns: number } - IMenuItem is: - { - label: string, - icon?: string, // a name of an svg icon, e.g. 'check' - - type?: 'checkbox'|'separator'|any, - click?: function, - checked?: boolean|Function, // valid for 'checkbox' type - submenu?: Array, - - hotkey?: string, // E.g. 'Control+c' - hotkeyLabel?: string // A human-readable variant, e.g. 'Ctrl+C'. Fallbacks to `hotkey`. - } + IMenuItem is https://github.com/ct-js/ct-js/blob/develop/src/node_requires/IMenuItem.d.ts @method popup(x, y) Works with absolute coordinates (in CSS terms) @@ -37,12 +25,13 @@ context-menu(class="{opened: opts.menu.opened}" ref="root" style="{opts.menu.col onclick="{onItemClick}" tabindex="{'-1': item.type === 'separator'}" data-hotkey="{item.hotkey}" + title="{item.hint}" ) svg.context-menu-anIcon(if="{item.icon && item.type !== 'separator' && item.type !== 'checkbox'}" class="{item.iconClass || 'feather'}") use(xlink:href="#{item.icon instanceof Function? item.icon() : item.icon}") input(type="checkbox" checked="{item.checked instanceof Function? item.checked() : item.checked}" if="{item.type === 'checkbox'}") span(if="{!item.type !== 'separator'}") {item.label} - span.hotkey(if="{!item.type !== 'separator' && item.hotkey}") ({item.hotkeyLabel || item.hotkey}) + span.hotkey(if="{!item.type !== 'separator' && (item.hotkey || item.hotkeyLabel)}") ({item.hotkeyLabel || item.hotkey}) svg.feather.context-menu-aChevron(if="{item.submenu && item.type !== 'separator'}") use(xlink:href="#chevron-right") context-menu(if="{item.submenu && item.type !== 'separator'}" menu="{item.submenu}") @@ -56,7 +45,7 @@ context-menu(class="{opened: opts.menu.opened}" ref="root" style="{opts.menu.col // first `item` is a riot's reference to all looped vars, // second is var's name in markup if (e.item.item.click) { - e.item.item.click(); + e.item.item.click(e.item.item.affixedData); e.stopPropagation(); } if (!e.item.item.submenu) { // autoclose on regular items diff --git a/src/riotTags/shared/error-notice.tag b/src/riotTags/shared/error-notice.tag new file mode 100644 index 000000000..8e8799fd7 --- /dev/null +++ b/src/riotTags/shared/error-notice.tag @@ -0,0 +1,21 @@ +// + @slot + @attribute target +error-notice.anErrorNotice + + script. + const reposition = () => { + let {target} = this.opts; + if (target.root) { + target = target.root; + } + const box = target.getBoundingClientRect(); + this.root.style.top = (box.top + box.height) + 'px'; + this.root.style.left = (box.left + box.width / 2) + 'px'; + }; + this.on('update', reposition); + this.on('mount', reposition); + const interval = setInterval(reposition, 150); + this.on('unmount', () => { + clearInterval(interval); + }); diff --git a/src/riotTags/shared/modal-menu.tag b/src/riotTags/shared/modal-menu.tag new file mode 100644 index 000000000..41e28adb5 --- /dev/null +++ b/src/riotTags/shared/modal-menu.tag @@ -0,0 +1,108 @@ +// + A cousin of the context-menu tag that supports the same menu structure + but is intended for two-level menus only, providing a more usable and visual layout. + + It doesn't support checkbox entries or clicking on top-level entries. + + @attribute [title] (string) + An optional title that is shown above all the submenus. + @attribute [enablesearch] (atomic) + If set, shows a searchbar under the title that filters out second-level items + based on their titles. + + @attribute menu (riot object) + Expects a following structure (IMenu): + { + opened: boolean, // mutable by a context-menu instance + items: Array, + columns: number + } + IMenuItem is https://github.com/ct-js/ct-js/blob/develop/src/node_requires/IMenuItem.d.ts + + @method toggle + @method open + @method close + +modal-menu + .aDimmer.pad.fadein(if="{opts.menu.opened}") + button.aDimmer-aCloseButton.forcebackground(title="{vocGlob.close}" onclick="{close}") + svg.feather + use(xlink:href="#x") + .aModal.pad.npb.cursordefault.appear.flexfix + .flexfix-header + h1(if="{opts.title}") {opts.title} + .aSearchWrap.wide(if="{opts.enablesearch}") + input.wide(type="text" oninput="{filterEntries}" value="{filterText}" ref="search") + svg.feather + use(href="#search") + .aSpacer(if="{opts.enablesearch}") + .flexfix-body + virtual( + each="{item in opts.menu.items}" + ) + h2 + svg.alignmiddle(if="{item.icon && item.type !== 'separator'}" class="{item.iconClass || 'feather'}") + use(xlink:href="#{item.icon instanceof Function? item.icon() : item.icon}") + span.ctext.alignmiddle {item.label} + span(if="{item.hint}") + .modal-menu-aGrid(if="{!item.submenu.items || !item.submenu.items.length}") + | {vocGlob.nothingToShowFiller} + .modal-menu-aGrid(if="{item.submenu.items && item.submenu.items.length}") + .modal-menu-aGridItem( + each="{subitem in item.submenu.items}" + if="{!getIsFilteredOut(subitem)}" + onclick="{onItemClick}" + ) + h3 + svg.alignmiddle(if="{subitem.icon && subitem.type !== 'separator'}" class="{subitem.iconClass || 'feather'}") + use(xlink:href="#{subitem.icon instanceof Function? subitem.icon() : subitem.icon}") + span.act.alignmiddle {subitem.label} + div(if="{subitem.hint}") {subitem.hint} + .flexfix-footer.inset + button(onclick="{close}") {vocGlob.close} + script. + this.namespace = 'common'; + this.mixin(window.riotVoc); + + this.onItemClick = e => { + const item = e.item.subitem; + if (item.click) { + item.click(item.affixedData); + } + this.opts.menu.opened = false; + }; + + this.filterEntries = e => { + this.filterText = e.target.value.trim().toLowerCase(); + }; + this.getIsFilteredOut = entry => { + if (!this.filterText) { + return false; + } + return entry.label.toLowerCase().indexOf(this.filterText) === -1; + }; + + this.close = () => { + this.opts.menu.opened = false; + this.update(); + }; + this.open = () => { + this.opts.menu.opened = true; + this.update(); + setTimeout(() => { + if (this.opts.enablesearch) { + this.refs.search.focus(); + } + }, 0); + }; + this.toggle = () => { + this.opts.menu.opened = !this.opts.menu.opened; + this.update(); + if (this.opts.opts.menu.opened) { + setTimeout(() => { + if (this.opts.enablesearch) { + this.refs.search.focus(); + } + }, 0); + } + }; diff --git a/src/riotTags/shared/scriptables/argument-editor-scriptable.tag b/src/riotTags/shared/scriptables/argument-editor-scriptable.tag new file mode 100644 index 000000000..0d6de5b7d --- /dev/null +++ b/src/riotTags/shared/scriptables/argument-editor-scriptable.tag @@ -0,0 +1,137 @@ +// + Displays a list of arguments of an event and lets a user edit its values. + Works as a modal window. + + @argument event (IScriptableEvent) + The event which argument list should be edited + + @argument onapplied (riot function) + A callback that is called with no arguments when the arguments are applied + + @method toggle + @method open + @method close + +argument-editor-scriptable + .aDimmer.pad.fadein(if="{opened}") + .aModal.pad.npb.cursordefault.appear.flexfix + .flexfix-header + h1 {localizeProp(eventFullName, 'name')} + .aSpacer + .flexfix-body + div(if="{!eventSpec}") An error occured :c is it an invalid event? + table.aPaddedTable.wide(if="{eventSpec}") + tr(each="{arg, key in eventSpec.arguments}") + td + b {parent.localizeArgument(eventFullName, key)} + td + action-input( + if="{arg.type === 'action'}" + compact="true" + actionname="{parent.opts.event.arguments[key]}" + onchanged="{writeValueAndUpdate(key)}" + ) + asset-input( + if="{['template', 'room', 'sound', 'tandem', 'font', 'style', 'texture'].indexOf(arg.type) !== -1}" + assettype="{arg.type}s" + assetid="{parent.opts.event.arguments[key]}" + compact="true" + disallowjump="true" + onchanged="{writeValueAndUpdate(key)}" + ) + label.checkbox(if="{arg.type === 'boolean'}") + input( + type="checkbox" + checked="{parent.opts.event.arguments[key] === void 0 ? eventSpec.arguments[key].default : parent.opts.event.arguments[key]}" + onchange="{writeFromInput(key)}" + ) + code.inline {String(parent.opts.event.arguments[key])} + input( + if="{arg.type === 'string'}" + type="text" + value="{parent.opts.event.arguments[key] || eventSpec.arguments[key].default || ''}" + onchange="{writeFromInput(key)}" + ) + input( + if="{arg.type === 'integer'}" + type="number" + value="{parent.opts.event.arguments[key] || eventSpec.arguments[key].default || 0}" + onchange="{writeFromInput(key)}" + pattern="[0-9]+" + step="1" + ) + input( + if="{arg.type === 'float'}" + type="number" + value="{parent.opts.event.arguments[key] || eventSpec.arguments[key].default || 0}" + onchange="{writeFromInput(key)}" + step="0.1" + ) + .flexfix-footer.inset.flexrow + button.nogrow(onclick="{cancelArgs}") + svg.feather + use(xlink:href="#x") + span {vocGlob.cancel} + .aSpacer + button.nmr.nogrow(onclick="{applyArgs}") + svg.feather + use(xlink:href="#check") + span {vocGlob.apply} + script. + const eventsAPI = require('./data/node_requires/events'); + + this.localizeArgument = eventsAPI.localizeArgument; + this.localizeProp = eventsAPI.localizeProp; + + this.allEvents = eventsAPI.events; + this.getEventByLib = eventsAPI.getEventByLib; + + this.namespace = 'scriptables'; + this.mixin(window.riotVoc); + + this.opened = false; + + this.writeValue = eventKey => value => { + this.opts.event.arguments[eventKey] = value; + }; + this.writeValueAndUpdate = eventKey => value => { + this.opts.event.arguments[eventKey] = value; + this.update(); + }; + this.writeFromInput = eventKey => e => { + if (e.target.type === 'checkbox') { + this.opts.event.arguments[eventKey] = e.target.checked; + } else { + this.opts.event.arguments[eventKey] = e.target.value; + } + }; + + this.cancelArgs = () => { + this.opts.event.arguments = JSON.parse(this.oldValues); + this.close(); + }; + this.applyArgs = () => { + if (this.opts.onapplied) { + this.opts.onapplied(); + } + this.close(); + }; + + this.close = () => { + this.opened = false; + this.update(); + }; + this.open = () => { + this.opened = true; + this.eventFullName = `${this.opts.event.lib}_${this.opts.event.eventKey}`; + this.eventSpec = eventsAPI.getEventByLib(this.opts.event.eventKey, this.opts.event.lib); + this.oldValues = JSON.stringify(this.opts.event.arguments || {}); + this.update(); + }; + this.toggle = () => { + if (this.opened) { + this.close(); + } else { + this.open(); + } + }; diff --git a/src/riotTags/shared/scriptables/code-editor-scriptable.tag b/src/riotTags/shared/scriptables/code-editor-scriptable.tag new file mode 100644 index 000000000..09ca0d6eb --- /dev/null +++ b/src/riotTags/shared/scriptables/code-editor-scriptable.tag @@ -0,0 +1,81 @@ +// + @attribute entitytype (EventApplicableEntities) + The asset type that is being added + @attribute event (IScriptableEvent) + The event to edit. + + @attribute [onchanged] (Riot function) + The function is called whenever there was a change in the code. + No arguments are passed as the [event] attribute is edited directly. + +code-editor-scriptable.aCodeEditor + script. + this.namespace = 'scriptables'; + this.mixin(window.riotVoc); + + const eventsAPI = require('./data/node_requires/events'); + this.allEvents = eventsAPI.events; + + const refreshLayout = () => { + setTimeout(() => { + this.codeEditor.layout(); + }, 0); + }; + const updateEvent = () => { + if (this.currentEvent) { + this.codeEditor.updateOptions({ + readOnly: false + }); + this.codeEditor.setValue(this.currentEvent.code); + const eventDeclaration = eventsAPI.getEventByLib( + this.currentEvent.eventKey, + this.currentEvent.lib + ); + const varsDeclaration = eventsAPI.getArgumentsTypeScript(eventDeclaration); + const ctEntity = this.opts.entitytype === 'template' ? 'Copy' : 'Room'; + const codePrefix = `function ctJsEvent(this: ${ctEntity}) {${varsDeclaration}`; + this.codeEditor.setWrapperCode(codePrefix, '}'); + } else { + this.codeEditor.updateOptions({ + readOnly: true + }); + this.codeEditor.setValue(`// ${this.voc.createEventHint}`); + } + }; + + this.on('mount', () => { + var editorOptions = { + language: 'typescript', + lockWrapper: true + }; + setTimeout(() => { + this.codeEditor = window.setupCodeEditor( + this.root, + Object.assign({}, editorOptions, { + value: '', + wrapper: [' ', ' '] + }) + ); + updateEvent(); + this.codeEditor.onDidChangeModelContent(() => { + if (this.currentEvent) { + this.currentEvent.code = this.codeEditor.getPureValue(); + } + }); + this.codeEditor.focus(); + window.addEventListener('resize', refreshLayout); + }, 0); + }); + this.on('unmount', () => { + // Manually destroy code editors, to free memory + this.codeEditor.dispose(); + window.removeEventListener('resize', refreshLayout); + }); + + this.currentEvent = this.opts.event; + this.on('update', () => { + if (this.currentEvent !== this.opts.event) { + this.currentEvent = this.opts.event; + updateEvent(); + } + }); diff --git a/src/riotTags/shared/scriptables/event-list-scriptable.tag b/src/riotTags/shared/scriptables/event-list-scriptable.tag new file mode 100644 index 000000000..0e76b1e29 --- /dev/null +++ b/src/riotTags/shared/scriptables/event-list-scriptable.tag @@ -0,0 +1,205 @@ +// + A tag that displays an editable event list and responds when a user selects a particular event. + Type definitions for attributes described here are placed in node_requires/events folder + and resources/IScriptable interface. + + @attribute events (IScriptableEvent[]) + The event list that is currently in the edited entity. + This array is modified to add new events, edit existing ones. + @attribute entitytype (EventApplicableEntities) + The asset type that is being added + @attribute [currentevent] (IScriptableEvent) + Currently selected event. + Defaults to the first event in the `events` attributes. + + @attribute onchanged (Riot function) + A callback that is called whenever a new event was picked. + It can happen as a direct response to a user input, or can happen, + for example, when the previously selected event was deleted. + + The callback is passed the newly selected event (IScriptableEvent). + +event-list-scriptable.flexfix(class="{opts.class}") + .flexfix-body + ui.aMenu + li.flexrow( + each="{event in opts.events}" + class="{active: currentEvent === event}" + onclick="{pickEvent}" + title="{localizeField(getEventByLib(event.eventKey, event.lib), 'hint')}" + ) + svg.feather.act.nogrow.noshrink(if="{!getIsParametrized(event) || !getIcon(event)}") + use(xlink:href="#{getEventByLib(event.eventKey, event.lib).icon}") + img.icon.nogrow.noshrink(if="{getIsParametrized(event) && getIcon(event)}" src="{getIcon(event)}") + span.nogrow.crop(title="{localizeName(event)}") {localizeName(event)} + .aSpacer.noshrink + svg.feather.nogrow.anActionableIcon.noshrink.nogrow(onclick="{promptEditEvent(event)}" if="{getIsParametrized(event)}") + use(xlink:href="#edit") + svg.feather.nogrow.anActionableIcon.noshrink.nogrow(onclick="{promptRemoveEvent(event)}") + use(xlink:href="#trash") + .flexfix-footer + .event-list-scriptable-LocalVars(if="{getHasLocalVars(currentEvent)}") + h3 {voc.localEventVars} + ul.aStripedList.nmt + li.npl.npr.cursorhelp( + each="{var, varName in getLocals(currentEvent)}" + title="{getLocalDescription(varName, currentEvent)}" + ).flexrow + .nogrow.noshrink + code.inline.nml {varName} + .crop + code \{{var.type}\} + | + | {getLocalDescription(varName, currentEvent)} + .flexrow + docs-shortcut.nogrow( + hidelabel="hidelabel" + path="/ct.templates.html" + button="true" + wide="true" + title="{voc.learnAboutTemplates}" + if="{opts.entitytype === 'template'}" + ) + .aSpacer.nogrow(if="{opts.entitytype === 'template'}") + .relative + button.nm.wide(onclick="{openEventMenu}") + svg.feather + use(xlink:href="#plus") + span {voc.addEvent} + modal-menu(menu="{eventsMenu}" ref="eventsMenu" enablesearch="true") + argument-editor-scriptable(event="{this.currentEvent}" ref="argumentsMenu" onapplied="{onArgumentsApplied}") + script. + const eventsAPI = require('./data/node_requires/events'); + this.allEvents = eventsAPI.events; + this.getEventByLib = eventsAPI.getEventByLib; + + const getFullKey = scriptableEvt => `${scriptableEvt.lib}_${scriptableEvt.eventKey}`; + + this.localizeName = scriptableEvt => { + if (this.getIsParametrized(scriptableEvt)) { + return eventsAPI.localizeParametrized(getFullKey(scriptableEvt), scriptableEvt); + } + return eventsAPI.localizeProp(getFullKey(scriptableEvt), 'name'); + }; + this.getIcon = scriptableEvt => eventsAPI.tryGetIcon(getFullKey(scriptableEvt), scriptableEvt); + + this.namespace = 'scriptables'; + this.mixin(window.riotVoc); + + this.getIsParametrized = scriptableEvt => { + const event = this.getEventByLib(scriptableEvt.eventKey, scriptableEvt.lib); + return event.arguments && Object.keys(event.arguments).length; + }; + this.getHasLocalVars = scriptableEvt => { + const event = this.getEventByLib(scriptableEvt.eventKey, scriptableEvt.lib); + return event.locals && Object.keys(event.locals).length; + }; + this.getLocals = scriptableEvt => this.getEventByLib( + scriptableEvt.eventKey, + scriptableEvt.lib + ).locals; + this.getLocalDescription = (varName, scriptableEvt) => eventsAPI.localizeLocalVarDesc( + getFullKey(scriptableEvt), + varName + ); + + this.addEvent = (affixedData) => { + const parametrized = affixedData.event.arguments && + Object.keys(affixedData.event.arguments).length; + const {repeatable} = affixedData.event; + const newEventPath = eventsAPI.splitEventName(affixedData.eventKey); + if (!repeatable && + this.opts.events.find(event => event.eventKey === newEventPath[1] && + event.lib === newEventPath[0]) + ) { + window.alertify.error(this.voc.eventAlreadyExists); + return; + } + const newEvent = { + eventKey: newEventPath[1], + code: '', + arguments: {}, + lib: newEventPath[0] + }; + this.opts.events.push(newEvent); + this.currentEvent = newEvent; + this.opts.onchanged(this.currentEvent); + if (parametrized) { + const args = affixedData.event.arguments; + for (const key in args) { + if (['integer', 'float'].includes(args[key].type)) { + newEvent.arguments[key] = 0; + } else if (['template', 'room', 'sound', 'tandem', 'font', 'style', 'texture'].includes(args[key].type)) { + newEvent.arguments[key] = -1; + } else if (args[key].type === 'boolean') { + newEvent.arguments[key] = false; + } else { + newEvent.arguments[key] = ''; + } + } + this.update(); + this.refs.argumentsMenu.open(); + } + }; + this.onArgumentsApplied = () => { + this.update(); + }; + + this.eventsMenu = eventsAPI.bakeCategories(this.opts.entitytype, this.addEvent); + + if (!this.opts.events) { + console.error('event-list-scriptable was not provided with an `events` attribute.'); + // eslint-disable-next-line no-console + console.warn(this); + } + if (!this.opts.entitytype) { + console.error('event-list-scriptable was not provided with an `entitytype` attribute.'); + // eslint-disable-next-line no-console + console.warn(this); + } + + // Can turn into `undefined` if `events` is an empty array, this is ok + this.currentEvent = this.opts.currentevent || this.opts.events[0]; + + this.pickEvent = e => { + const {event} = e.item; + this.currentEvent = event; + if (this.opts.onchanged) { + this.opts.onchanged(event); + } + }; + + this.promptEditEvent = event => () => { + this.currentEvent = event; + this.update(); + this.refs.argumentsMenu.open(); + }; + this.promptRemoveEvent = event => () => { + alertify + .okBtn(window.languageJSON.common.delete) + .cancelBtn(window.languageJSON.common.cancel) + .confirm(this.voc.removeEventConfirm) + .then(e => { + alertify + .okBtn(window.languageJSON.common.ok) + .cancelBtn(window.languageJSON.common.cancel); + if (e.buttonClicked !== 'ok') { + return; + } + this.opts.events.splice(this.opts.events.indexOf(event), 1); + if (this.currentEvent === event) { + if (this.opts.events.length) { + [this.currentEvent] = this.opts.events; + } else { + this.currentEvent = void 0; + } + if (this.opts.onchanged) { + this.opts.onchanged(this.currentEvent); + } + } + }); + }; + + this.openEventMenu = () => { + this.refs.eventsMenu.open(); + }; diff --git a/src/riotTags/shared/tour-guide.tag b/src/riotTags/shared/tour-guide.tag new file mode 100644 index 000000000..9f58e721a --- /dev/null +++ b/src/riotTags/shared/tour-guide.tag @@ -0,0 +1,176 @@ +// + Used to create small tours of interface. + + @attribute header (string) + @attribute tour (ITourSteps[]) + highlight?: HTMLTag; + message: string (can contain HTML); + runBefore?: Promise; + undo?: Promise; + additionalActions?: { + label: string; + click: () => void; + icon?: string; + }[] + + @attribute onfinish (riot function) + + @method start + @method stop +tour-guide + div(if="{currentStep}") + .aDimmer(if="{!currentStep.highlight}") + // + |-------------------------------| + | T | + |-------|———————————————|-------| + | L | highlight | R | + |-------|———————————————|-------| + | B | + |-------------------------------| + // top half + .tour-guide-aMask(if="{currentStep.highlight}" style="top: 0; height: {highlightRect.top}px; bottom: unset;") + // bottom half + .tour-guide-aMask(if="{currentStep.highlight}" style="top: {highlightRect.bottom}px; bottom: 0;") + // left segment + .tour-guide-aMask(if="{currentStep.highlight}" style="top: {highlightRect.top}px; height:{highlightRect.height}px; bottom: unset; left: 0; width: {highlightRect.left}px; right: unset;") + // right segment + .tour-guide-aMask(if="{currentStep.highlight}" style="top: {highlightRect.top}px; height:{highlightRect.height}px; bottom: unset; left: {highlightRect.right}px; right: 0;") + .tour-guide-aHighlight(if="{currentStep.highlight}" onclick="{nextStep}" style="top: {highlightRect.top}px; left: {highlightRect.left}px; width: {highlightRect.width}px; height: {highlightRect.height}px;") + .aModal.flexfix.pad.npb(style="{messagePos}" ref="modal") + .flexfix-header + button.toright.nm.tiny(onclick="{stop}" title="{voc.close}") + svg.feather + use(xlink:href="#x") + h2(if="{opts.header}").nm {opts.header} + .flexfix-body + raw(content="{currentStep.message}") + .aProgressbar.wide + div(style="width: {(opts.tour.indexOf(currentStep) + 1) / opts.tour.length * 100}%") + .flexfix-footer.flexrow.inset + button.nml.nogrow(onclick="{prevStep}" if="{opts.tour.indexOf(currentStep) > 0}") + svg.feather + use(xlink:href="#chevron-left") + span {voc.previous} + .aSpacer + button.nogrow( + if="{currentStep.additionalActions}" + each="{action in currentStep.additionalActions}" + onclick="{action.click}" + ) + svg.feather(if="{action.icon}") + use(xlink:href="#{action.icon}") + span {action.label} + button.nmr.nogrow(onclick="{nextStep}" if="{opts.tour.indexOf(currentStep) < opts.tour.length - 1}") + span {voc.next} + svg.feather + use(xlink:href="#chevron-right") + button.nmr.nogrow(onclick="{completeTour}" if="{opts.tour.indexOf(currentStep) === opts.tour.length - 1}") + svg.feather + use(xlink:href="#check") + span {voc.done} + script. + this.namespace = 'common'; + this.mixin(window.riotVoc); + + const clamp = (min, val, max) => Math.min(max, Math.max(min, val)); + const pad = 24; + const modalHWidth = 240; + const updatePositions = () => { + if (!this.currentStep) { + return; + } + this.messagePos = {}; + if (this.currentStep.highlight) { + this.highlightRect = this.currentStep.highlight.getBoundingClientRect(); + const hR = this.highlightRect; + const wide = (hR.width >= modalHWidth * 2) || (hR.width > hR.height); + const middleX = hR.x + hR.width / 2, + middleY = hR.y + hR.height / 2, + winW = window.innerWidth, + winH = window.innerHeight; + // Need to get the height of the modal + this.update(); + const modalsDimensions = this.refs.modal.getBoundingClientRect(); + if (wide) { + // Position the modal beneath or above the highlighted element + if (middleY > winH / 2) { + // Place it above + this.messagePos.top = hR.y - modalsDimensions.height - pad; + } else { + // Place it below + this.messagePos.top = (hR.y + hR.height + pad); + } + // Place at the middle horizontally + this.messagePos.left = hR.x + hR.width / 2 - modalHWidth; + } else { + // Position the modal to the left or right of the highlighted element + if (middleX > winW / 2) { + // Place it on the left + // We know the size of the modal on the needed axis this time + this.messagePos.left = hR.x - modalHWidth * 2 - pad; + } else { + // Place it on the right + this.messagePos.left = hR.x + hR.width + pad; + } + // Place at the middle vertically + this.messagePos.top = hR.y + hR.height / 2 - modalsDimensions.height / 2; + } + // Clamp modal's position and add 'px' unit + this.messagePos.left = clamp(pad, this.messagePos.left, winW - modalsDimensions.width - pad) + 'px'; + this.messagePos.top = clamp(pad, this.messagePos.top, winH - modalsDimensions.height - pad) + 'px'; + } else { + // Position in the center of the screen + this.highlightRect = void 0; + this.messagePos = { + left: '50%', + top: '50%', + transform: 'translate(-50%, -50%)' + }; + } + this.update(); + }; + this.on('mount', () => { + window.addEventListener('resize', updatePositions); + }); + this.on('unmount', () => { + window.removeEventListener('resize', updatePositions); + }); + + this.start = async () => { + [this.currentStep] = this.opts.tour; + if (this.currentStep.runBefore) { + await this.currentStep.runBefore(); + } + updatePositions(); + }; + this.stop = () => { + this.currentStep = void 0; + this.update(); + }; + this.completeTour = () => { + this.stop(); + if (this.opts.onfinish) { + this.opts.onfinish(); + } + }; + this.prevStep = async () => { + if (this.currentStep.undo) { + await this.currentStep.undo(); + } + const currentStepIndex = this.opts.tour.indexOf(this.currentStep); + this.currentStep = this.opts.tour[currentStepIndex - 1]; + updatePositions(); + }; + this.nextStep = async () => { + const currentStepIndex = this.opts.tour.indexOf(this.currentStep); + if (currentStepIndex === this.opts.tour.length - 1) { + return; + } + this.currentStep = this.opts.tour[currentStepIndex + 1]; + if (this.currentStep.runBefore) { + await this.currentStep.runBefore(); + } + updatePositions(); + this.update(); + }; diff --git a/src/riotTags/shared/zoom-slider.tag b/src/riotTags/shared/zoom-slider.tag index f5d25e28b..577dd898d 100644 --- a/src/riotTags/shared/zoom-slider.tag +++ b/src/riotTags/shared/zoom-slider.tag @@ -5,6 +5,8 @@ Calls the funtion when a user changes the zoom value. Passes the new zoom value as the one argument. + @method setZoom + Call this with a new zoom value in percents to manually update this zoom slider. @method zoomIn Call this property to advance the zoom value. This will call opts.onchage callback. @method zoomOut @@ -65,6 +67,11 @@ zoom-slider this.opts.onchanged(this.rawToZoom(e.target.value)); } }; + this.setZoom = newZoom => { + const rawValue = this.zoomToRaw(newZoom); + this.refs.zoomslider.value = rawValue; + this.update(); + }; this.zoomIn = () => { const rawValue = Math.min(Number(this.refs.zoomslider.value) + 10, 100); diff --git a/src/riotTags/sounds/sound-editor.tag b/src/riotTags/sounds/sound-editor.tag index f72fca24e..51d38f37b 100644 --- a/src/riotTags/sounds/sound-editor.tag +++ b/src/riotTags/sounds/sound-editor.tag @@ -53,9 +53,8 @@ sound-editor.aDimmer if (this.nameTaken) { // animate the error notice require('./data/node_requires/jellify')(this.refs.errorNotice); - if (localStorage.disableSounds !== 'on') { - soundbox.play('Failure'); - } + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); + soundbox.play('Failure'); return false; } diff --git a/src/riotTags/sounds/sounds-panel.tag b/src/riotTags/sounds/sounds-panel.tag index 1a9a349ae..1c7de0200 100644 --- a/src/riotTags/sounds/sounds-panel.tag +++ b/src/riotTags/sounds/sounds-panel.tag @@ -10,15 +10,15 @@ sounds-panel.aPanel.aView ref="sounds" class="tall" ) - button#soundcreate(onclick="{parent.soundNew}" title="Control+N" data-hotkey="Control+n") + button#soundcreate(onclick="{parent.soundNew}" title="Control+N" data-hotkey="Control+n" ref="createButton") svg.feather use(xlink:href="#plus") span {parent.voc.create} - button(onclick="{parent.openGallery}") + button(onclick="{parent.openGallery}" ref="galleryButton") svg.feather use(xlink:href="#folder") span {parent.vocGlob.openAssetGallery} - button#soundcreate(onclick="{parent.openRecorder}" title="Control+R" data-hotkey="Control+r") + button#soundcreate(onclick="{parent.openRecorder}" title="Control+R" data-hotkey="Control+r" ref="recordButton") svg.feather use(xlink:href="#mic") span {parent.voc.record} diff --git a/src/riotTags/style-editor.tag b/src/riotTags/style-editor.tag index 794be6254..728ab8409 100644 --- a/src/riotTags/style-editor.tag +++ b/src/riotTags/style-editor.tag @@ -1,5 +1,5 @@ style-editor.aPanel.aView - #styleleft.tall.flexfix + .style-editor-Properties.tall.flexfix .flexfix-header .aPanel.pad b {vocGlob.name} @@ -142,7 +142,7 @@ style-editor.aPanel.aView svg.feather use(xlink:href="#check") span {voc.apply} - #stylepreview.tall(ref="canvasSlot") + .style-editor-aPreview.tall(ref="canvasSlot") asset-selector( if="{selectingFont}" assettype="fonts" @@ -284,9 +284,8 @@ style-editor.aPanel.aView if (this.nameTaken) { // animate the error notice require('./data/node_requires/jellify')(this.refs.errorNotice); - if (localStorage.disableSounds !== 'on') { - soundbox.play('Failure'); - } + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); + soundbox.play('Failure'); return false; } this.styleobj.lastmod = Number(new Date()); diff --git a/src/riotTags/template-editor.tag b/src/riotTags/template-editor.tag index c1ae5bb50..a62718302 100644 --- a/src/riotTags/template-editor.tag +++ b/src/riotTags/template-editor.tag @@ -1,92 +1,111 @@ +mixin templateProperties + collapsible-section.aPanel( + heading="{voc.appearance}" + storestatekey="templateEditorAppearance" + hlevel="4" + ) + fieldset + label.block + b {parent.voc.depth} + input.wide( + type="number" + onchange="{parent.wire('this.template.depth')}" + value="{parent.template.depth}" + ) + label.block + b {parent.voc.opacity} + input.wide( + type="number" min="0" max="1" step="0.1" + onchange="{parent.wire('this.template.extends.alpha')}" + value="{parent.template.extends.alpha ?? 1}" + ) + label.block + b {parent.voc.blendMode} + select.wide(onchange="{parent.wire('this.template.blendMode')}") + option(value="normal" selected="{parent.template.blendMode === 'normal' || !parent.template.blendMode}") {parent.voc.blendModes.normal} + option(value="add" selected="{parent.template.blendMode === 'add'}") {parent.voc.blendModes.add} + option(value="multiply" selected="{parent.template.blendMode === 'multiply'}") {parent.voc.blendModes.multiply} + option(value="screen" selected="{parent.template.blendMode === 'screen'}") {parent.voc.blendModes.screen} + fieldset + label.flexrow + b.nogrow.alignmiddle {parent.voc.animationFPS} + .aSpacer.nogrow + input.alignmiddle(type="number" max="60" min="1" step="1" value="{parent.template.animationFPS ?? 60}" onchange="{parent.wire('this.template.animationFPS')}") + label.block.checkbox + input(type="checkbox" checked="{parent.template.playAnimationOnStart}" onchange="{parent.wire('this.template.playAnimationOnStart')}") + span {parent.voc.playAnimationOnStart} + label.block.checkbox + input(type="checkbox" checked="{parent.template.loopAnimation}" onchange="{parent.wire('this.template.loopAnimation')}") + span {parent.voc.loopAnimation} + label.block.checkbox + input(type="checkbox" checked="{parent.template.extends.visible ?? true}" onchange="{parent.wire('this.template.extends.visible')}") + span {parent.voc.visible} + .aSpacer + extensions-editor(type="template" entity="{template.extends}" wide="yep" compact="probably") + +mixin eventsList + event-list-scriptable( + events="{template.events}" + entitytype="template" + onchanged="{changeCodeTab}" + currentevent="{currentSheet}" + ).tall + template-editor.aPanel.aView.flexrow - .template-editor-Properties + .template-editor-Properties(class="{alt: localStorage.altTemplateLayout === 'on'}") .tall.flexfix.aPanel.pad .flexfix-header asset-input.wide( assettype="textures" assetid="{template.texture || -1}" - large="yup" - allowclear="da" + large="large" + allowclear="allowclear" onchanged="{applyTexture}" ) - .flexfix-body .aSpacer fieldset - label.block - b {voc.name} + label.flexrow + b.nogrow.noshrink {voc.name} + .aSpacer.nogrow input.wide(type="text" onchange="{wire('this.template.name')}" value="{template.name}") - .anErrorNotice(if="{nameTaken}" ref="errorNotice") {vocGlob.nameTaken} - collapsible-section.aPanel( - heading="{voc.appearance}" - storestatekey="templateEditorAppearance" - hlevel="4" - ) - fieldset - label.block - b {parent.voc.depth} - input.wide( - type="number" - onchange="{parent.wire('this.template.depth')}" - value="{parent.template.depth}" - ) - label.block - b {parent.voc.opacity} - input.wide( - type="number" min="0" max="1" step="0.1" - onchange="{parent.wire('this.template.extends.alpha')}" - value="{parent.template.extends.alpha ?? 1}" - ) - label.block - b {parent.voc.blendMode} - select.wide(onchange="{parent.wire('this.template.blendMode')}") - option(value="normal" selected="{parent.template.blendMode === 'normal' || !parent.template.blendMode}") {parent.voc.blendModes.normal} - option(value="add" selected="{parent.template.blendMode === 'add'}") {parent.voc.blendModes.add} - option(value="multiply" selected="{parent.template.blendMode === 'multiply'}") {parent.voc.blendModes.multiply} - option(value="screen" selected="{parent.template.blendMode === 'screen'}") {parent.voc.blendModes.screen} - fieldset - label.block.checkbox - input(type="checkbox" checked="{parent.template.playAnimationOnStart}" onchange="{parent.wire('this.template.playAnimationOnStart')}") - span {parent.voc.playAnimationOnStart} - label.block.checkbox - input(type="checkbox" checked="{parent.template.extends.visible ?? true}" onchange="{parent.wire('this.template.extends.visible')}") - span {parent.voc.visible} - extensions-editor(type="template" entity="{template.extends}" wide="yep" compact="probably") - br - br - docs-shortcut(path="/ct.templates.html" button="true" wide="true" title="{voc.learnAboutTemplates}") + .anErrorNotice(if="{nameTaken}" ref="errorNotice") {vocGlob.nameTaken} + .aSpacer + .flexfix-body(if="{localStorage.altTemplateLayout !== 'on'}") + +eventsList() + .flexfix-body(if="{localStorage.altTemplateLayout === 'on'}") + +templateProperties() .flexfix-footer - button#templatedone.wide(onclick="{templateSave}" title="Shift+Control+S" data-hotkey="Control+S") + .aSpacer + button.wide(onclick="{templateSave}" title="Shift+Control+S" data-hotkey="Shift+Control+S") svg.feather use(xlink:href="#check") span {voc.done} + .template-editor-aSlidingEventList(if="{localStorage.altTemplateLayout === 'on'}") + .aPanel.tall + .template-editor-aSlidingEventListWrap.tall + +eventsList() + svg.feather.template-editor-aSlidingEventListIcon.unclickable + use(xlink:href="#plus") .template-editor-aCodeEditor .tabwrap.tall(style="position: relative") - ul.tabs.aNav.nogrow.noshrink - li(onclick="{changeTab('templateoncreate')}" class="{active: tab === 'templateoncreate'}" title="{voc.create} (Control+Q)" data-hotkey="Control+q") - svg.feather - use(xlink:href="#sun") - span {voc.create} - li(onclick="{changeTab('templateonstep')}" class="{active: tab === 'templateonstep'}" title="{voc.step} (Control+W)" data-hotkey="Control+w") - svg.feather - use(xlink:href="#skip-forward") - span {voc.step} - li(onclick="{changeTab('templateondraw')}" class="{active: tab === 'templateondraw'}" title="{voc.draw} (Control+E)" data-hotkey="Control+e") - svg.feather - use(xlink:href="#edit-2") - span {voc.draw} - li(onclick="{changeTab('templateondestroy')}" class="{active: tab === 'templateondestroy'}" title="{voc.destroy} (Control+R)" data-hotkey="Control+r") - svg.feather - use(xlink:href="#trash") - span {voc.destroy} + //ul.tabs.aNav.nogrow.noshrink + // li(onclick="{changeTab('javascript')}" class="{active: tab === 'javascript'}" title="JavaScript (Control+Q)" data-hotkey="Control+q") + // svg.feather + // use(xlink:href="#code") + // span {voc.create} + // li(onclick="{changeTab('blocks')}" class="{active: tab === 'blocks'}" title="Blurry (Control+W)" data-hotkey="Control+w") + // svg.feather + // use(xlink:href="#grid") + // span {voc.step} div - #templateoncreate.tabbed(show="{tab === 'templateoncreate'}") - .aCodeEditor(ref="templateoncreate") - #templateonstep.tabbed(show="{tab === 'templateonstep'}") - .aCodeEditor(ref="templateonstep") - #templateondraw.tabbed(show="{tab === 'templateondraw'}") - .aCodeEditor(ref="templateondraw") - #templateondestroy.tabbed(show="{tab === 'templateondestroy'}") - .aCodeEditor(ref="templateondestroy") + .tabbed.noborder(show="{tab === 'javascript'}") + code-editor-scriptable(event="{currentSheet}" entitytype="template") + // .tabbed(show="{tab === 'blocks'}") + // .aBlocksEditor(ref="blocks") + .template-editor-Properties.nmr(if="{localStorage.altTemplateLayout !== 'on'}") + .tall.flexfix.aPanel.pad + .flexfix-body + +templateProperties() script. const glob = require('./data/node_requires/glob'); this.glob = glob; @@ -99,98 +118,13 @@ template-editor.aPanel.aView.flexrow this.getTextureRevision = template => textures.getById(template.texture).lastmod; this.template = this.opts.template; - this.tab = 'templateoncreate'; - - const tabToEditor = tab => { - tab = tab || this.tab; - if (tab === 'templateonstep') { - return this.templateonstep; - } else if (tab === 'templateondraw') { - return this.templateondraw; - } else if (tab === 'templateondestroy') { - return this.templateondestroy; - } else if (tab === 'templateoncreate') { - return this.templateoncreate; - } - return null; - }; + this.tab = 'javascript'; + [this.currentSheet] = this.template.events; // can be undefined, this is ok this.changeTab = tab => () => { this.tab = tab; - const editor = tabToEditor(tab); - setTimeout(() => { - editor.layout(); - editor.focus(); - }, 0); - }; - - const updateEditorSize = () => { - if (tabToEditor()) { - tabToEditor().layout(); - } - }; - const updateEditorSizeDeferred = function () { - setTimeout(updateEditorSize, 0); }; - window.signals.on('templatesFocus', this.focusEditor); - window.signals.on('templatesFocus', updateEditorSizeDeferred); - window.addEventListener('resize', updateEditorSize); - this.on('unmount', () => { - window.signals.off('templatesFocus', this.focusEditor); - window.signals.off('templatesFocus', updateEditorSizeDeferred); - window.removeEventListener('resize', updateEditorSize); - }); - - this.on('mount', () => { - var editorOptions = { - language: 'typescript', - lockWrapper: true - }; - setTimeout(() => { - this.templateoncreate = window.setupCodeEditor( - this.refs.templateoncreate, - Object.assign({}, editorOptions, { - value: this.template.oncreate, - wrapper: ['function onCreate(this: Copy) {', '}'] - }) - ); - this.templateonstep = window.setupCodeEditor( - this.refs.templateonstep, - Object.assign({}, editorOptions, { - value: this.template.onstep, - wrapper: ['function onStep(this: Copy) {', '}'] - }) - ); - this.templateondraw = window.setupCodeEditor( - this.refs.templateondraw, - Object.assign({}, editorOptions, { - value: this.template.ondraw, - wrapper: ['function onDraw(this: Copy) {', '}'] - }) - ); - this.templateondestroy = window.setupCodeEditor( - this.refs.templateondestroy, - Object.assign({}, editorOptions, { - value: this.template.ondestroy, - wrapper: ['function onDestroy(this: Copy) {', '}'] - }) - ); - this.templateoncreate.onDidChangeModelContent(() => { - this.template.oncreate = this.templateoncreate.getPureValue(); - }); - this.templateonstep.onDidChangeModelContent(() => { - this.template.onstep = this.templateonstep.getPureValue(); - }); - this.templateondraw.onDidChangeModelContent(() => { - this.template.ondraw = this.templateondraw.getPureValue(); - }); - this.templateondestroy.onDidChangeModelContent(() => { - this.template.ondestroy = this.templateondestroy.getPureValue(); - }); - this.templateoncreate.focus(); - }, 0); - }); this.checkNames = () => { if (global.currentProject.templates.find(template => this.template.name === template.name && this.template !== template)) { @@ -202,13 +136,6 @@ template-editor.aPanel.aView.flexrow this.on('update', () => { this.checkNames(); }); - this.on('unmount', () => { - // Manually destroy code editors, to free memory - this.templateoncreate.dispose(); - this.templateonstep.dispose(); - this.templateondraw.dispose(); - this.templateondestroy.dispose(); - }); this.changeSprite = () => { this.selectingTexture = true; @@ -237,9 +164,8 @@ template-editor.aPanel.aView.flexrow this.update(); // animate the error notice require('./data/node_requires/jellify')(this.refs.errorNotice); - if (localStorage.disableSounds !== 'on') { - soundbox.play('Failure'); - } + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); + soundbox.play('Failure'); return false; } glob.modified = true; @@ -248,5 +174,10 @@ template-editor.aPanel.aView.flexrow this.parent.fillTemplateMap(); this.parent.update(); window.signals.trigger('templatesChanged'); + window.signals.trigger('templateChanged', this.template.uid); return true; }; + this.changeCodeTab = scriptableEvent => { + this.currentSheet = scriptableEvent; + this.update(); + }; diff --git a/src/riotTags/template-panel.tag b/src/riotTags/template-panel.tag index aa5109872..90a98901d 100644 --- a/src/riotTags/template-panel.tag +++ b/src/riotTags/template-panel.tag @@ -29,18 +29,7 @@ templates-panel.aPanel.aView this.thumbnails = require('./data/node_requires/resources/templates').getTemplatePreview; this.icons = function icons(template) { const icons = []; - if (template.oncreate.trim()) { - icons.push('sun'); - } - if (template.onstep.trim()) { - icons.push('skip-forward'); - } - if (template.ondraw.trim()) { - icons.push('edit-2'); - } - if (template.ondestroy.trim()) { - icons.push('trash'); - } + // TODO: return icons; }; diff --git a/src/riotTags/textures/texture-editor.tag b/src/riotTags/textures/texture-editor.tag index f06943c9a..8105a701c 100644 --- a/src/riotTags/textures/texture-editor.tag +++ b/src/riotTags/textures/texture-editor.tag @@ -88,6 +88,11 @@ texture-editor.aPanel.aView label.checkbox(if="{opts.texture.width > 10 && opts.texture.height > 10}") input(checked="{prevShowFrameIndices}" onchange="{wire('this.prevShowFrameIndices')}" type="checkbox") span {voc.showFrameIndices} + fieldset + label.checkbox + input(checked="{texture.isBlank}" onchange="{wire('this.texture.isBlank')}" type="checkbox") + span {voc.blankTexture} + hover-hint(text="{voc.blankTextureNotice}") .flexfix-footer button.wide(onclick="{textureSave}" title="Shift+Control+S" data-hotkey="Control+S") svg.feather @@ -160,60 +165,119 @@ texture-editor.aPanel.aView svg.feather use(xlink:href="#droplet") span {voc.bgColor} - .column.column2.borderleft.tall.flexfix.nogrow.noshrink(show="{!opts.texture.tiled}") + .column.column2.borderleft.tall.flexfix.nogrow.noshrink(show="{!texture.tiled}") .flexfix-body fieldset .flexrow div b {voc.cols} br - input.wide(type="number" value="{opts.texture.grid[0]}" onchange="{wire('this.texture.grid.0')}" oninput="{wire('this.texture.grid.0')}") + input.wide( + type="number" + value="{texture.grid[0]}" + onchange="{wire('this.texture.grid.0')}" + oninput="{wire('this.texture.grid.0')}" + min="1" + ) span   div b {voc.rows} br - input.wide(type="number" value="{opts.texture.grid[1]}" onchange="{wire('this.texture.grid.1')}" oninput="{wire('this.texture.grid.1')}") + input.wide( + type="number" + value="{texture.grid[1]}" + onchange="{wire('this.texture.grid.1')}" + oninput="{wire('this.texture.grid.1')}" + min="1" + ) .flexrow div b {voc.width} br - input.wide(type="number" value="{opts.texture.width}" onchange="{wire('this.texture.width')}" oninput="{wire('this.texture.width')}") + input.wide( + type="number" + value="{texture.width}" + onchange="{wire('this.texture.width')}" + oninput="{wire('this.texture.width')}" + min="1" + ) span   div b {voc.height} br - input.wide(type="number" value="{opts.texture.height}" onchange="{wire('this.texture.height')}" oninput="{wire('this.texture.height')}") + input.wide( + type="number" + value="{texture.height}" + onchange="{wire('this.texture.height')}" + oninput="{wire('this.texture.height')}" + min="1" + ) fieldset .flexrow div b {voc.marginX} br - input.wide(type="number" value="{opts.texture.marginx}" onchange="{wire('this.texture.marginx')}" oninput="{wire('this.texture.marginx')}") + input.wide( + type="number" + value="{texture.marginx}" + onchange="{wire('this.texture.marginx')}" + oninput="{wire('this.texture.marginx')}" + min="0" + ) span   div b {voc.marginY} br - input.wide(type="number" value="{opts.texture.marginy}" onchange="{wire('this.texture.marginy')}" oninput="{wire('this.texture.marginy')}") + input.wide( + type="number" + value="{texture.marginy}" + onchange="{wire('this.texture.marginy')}" + oninput="{wire('this.texture.marginy')}" + min="0" + ) .flexrow div b {voc.offX} br - input.wide(type="number" value="{opts.texture.offx}" onchange="{wire('this.texture.offx')}" oninput="{wire('this.texture.offx')}") + input.wide( + type="number" + value="{texture.offx}" + onchange="{wire('this.texture.offx')}" + oninput="{wire('this.texture.offx')}" + min="0" + ) span   div b {voc.offY} br - input.wide(type="number" value="{opts.texture.offy}" onchange="{wire('this.texture.offy')}" oninput="{wire('this.texture.offy')}") + input.wide( + type="number" + value="{texture.offy}" + onchange="{wire('this.texture.offy')}" + oninput="{wire('this.texture.offy')}" + min="0" + ) fieldset b {voc.frames} br - input#textureframes.wide(type="number" value="{opts.texture.untill}" onchange="{wire('this.texture.untill')}" oninput="{wire('this.texture.untill')}") + input#textureframes.wide( + type="number" + value="{texture.untill}" + onchange="{wire('this.texture.untill')}" + oninput="{wire('this.texture.untill')}" + min="0" + ) fieldset b span {voc.padding} hover-hint(text="{voc.paddingNotice}") br - input.wide(type="number" min="0" max="128" step="1" value="{opts.texture.padding}" onchange="{wire('this.texture.padding')}") + input.wide( + type="number" + min="0" max="128" step="1" + value="{texture.padding}" + onchange="{wire('this.texture.padding')}" + ) .preview.bordertop.flexfix-footer .texture-editor-anAnimationPreview( ref="preview" @@ -237,7 +301,7 @@ texture-editor.aPanel.aView .flexrow b.alignmiddle {voc.speed} .filler - input#grahpspeed.short(type="number" min="1" value="{prevSpeed}" onchange="{wire('this.prevSpeed')}" oninput="{wire('this.prevSpeed')}") + input.texture-editor-anAnimSpeedField.short(type="number" min="1" value="{prevSpeed}" onchange="{wire('this.prevSpeed')}" oninput="{wire('this.prevSpeed')}") p .aNotice {voc.previewAnimationNotice} @@ -250,6 +314,8 @@ texture-editor.aPanel.aView const path = require('path'), fs = require('fs-extra'); const glob = require('./data/node_requires/glob'); + const {getSwatch} = require('./data/node_requires/themes'); + this.namespace = 'textureView'; this.mixin(window.riotVoc); this.mixin(window.riotWired); @@ -268,8 +334,8 @@ texture-editor.aPanel.aView ({textureCanvas, grprCanvas} = this.refs); textureCanvas.x = textureCanvas.getContext('2d'); grprCanvas.x = grprCanvas.getContext('2d'); - var texture = this.texture = this.opts.texture; - var img = document.createElement('img'); + const texture = this.texture = this.opts.texture; + const img = document.createElement('img'); img.onload = () => { textureCanvas.img = img; this.update(); @@ -286,18 +352,49 @@ texture-editor.aPanel.aView }); this.on('update', () => { const {textures} = global.currentProject; - if (textures.find(texture => this.texture.name === texture.name && this.texture !== texture)) { + const t = this.texture; + if (textures.find(texture => t.name === texture.name && t !== texture)) { this.nameTaken = true; } else { this.nameTaken = false; } + const {textureCanvas} = this.refs; + const {img} = textureCanvas; + // Enforce positive/zero values + for (const prop of ['marginx', 'marginy', 'offx', 'offy', 'untill', 'padding']) { + if (t[prop] < 0) { + t[prop] = 0; + } + } + for (const prop of ['width', 'height']) { + if (t[prop] < 1) { + t[prop] = 1; + } + } + if (t.grid[0] < 1) { + t.grid[0] = 1; + } + if (t.grid[1] < 1) { + t.grid[1] = 1; + } + // Calculate frame width for the user if it exceeds image size + if (t.grid[0] * (t.width + t.marginx) - t.marginx > img.width - t.offx) { + t.width = Math.floor((img.width - t.offx) / t.grid[0] - t.marginx); + } + if (t.grid[1] * (t.height + t.marginy) - t.marginy > img.height - t.offy) { + t.height = Math.floor((img.height - t.offy) / t.grid[1] - t.marginy); + } + // Preset frame count can't be larger than the grid table size + if (t.untill > t.grid[0] * t.grid[1]) { + t.untill = t.grid[0] * t.grid[1]; + } this.updateSymmetricalPoints(); }); this.on('updated', () => { this.refreshTextureCanvas(); }); this.on('unmount', () => { - if (this.prevPlaying) { // вырубаем анимацию превью, если редактор был закрыт + if (this.prevPlaying) { // Need to clear a setTimeout handle to prevent memory leaks this.stopTexturePreview(); } }); @@ -513,47 +610,7 @@ texture-editor.aPanel.aView ); // shape if (this.prevShowMask) { - grprCanvas.x.globalAlpha = 0.5; - grprCanvas.x.fillStyle = '#ff0'; - if (this.texture.shape === 'rect') { - grprCanvas.x.fillRect( - this.texture.axis[0] - this.texture.left, - this.texture.axis[1] - this.texture.top, - this.texture.right + this.texture.left, - this.texture.bottom + this.texture.top - ); - } else if (this.texture.shape === 'circle') { - grprCanvas.x.beginPath(); - grprCanvas.x.arc( - this.texture.axis[0], this.texture.axis[1], - this.texture.r, - 0, 2 * Math.PI - ); - grprCanvas.x.fill(); - } else if (this.texture.shape === 'strip' && this.texture.stripPoints.length) { - grprCanvas.x.strokeStyle = '#ff0'; - grprCanvas.x.lineWidth = 3; - grprCanvas.x.beginPath(); - grprCanvas.x.moveTo( - this.texture.stripPoints[0].x + this.texture.axis[0], - this.texture.stripPoints[0].y + this.texture.axis[1] - ); - for (let i = 1, l = this.texture.stripPoints.length; i < l; i++) { - grprCanvas.x.lineTo( - this.texture.stripPoints[i].x + this.texture.axis[0], - this.texture.stripPoints[i].y + this.texture.axis[1] - ); - } - if (this.texture.closedStrip) { - grprCanvas.x.closePath(); - } - grprCanvas.x.stroke(); - } - grprCanvas.x.globalAlpha = 1; - grprCanvas.x.fillStyle = '#f33'; - grprCanvas.x.beginPath(); - grprCanvas.x.arc(this.texture.axis[0], this.texture.axis[1], 3, 0, 2 * Math.PI); - grprCanvas.x.fill(); + this.drawMask(grprCanvas, grprCanvas.x); } }; /** @@ -740,44 +797,43 @@ texture-editor.aPanel.aView } }; - this.drawMask = () => { - const tc = textureCanvas; - tc.x.fillStyle = '#ff0'; - tc.x.globalAlpha = 0.5; + this.drawMask = (tc, context) => { + context.fillStyle = getSwatch('accent1'); + context.globalAlpha = 0.5; if (this.texture.shape === 'rect') { - tc.x.fillRect( + context.fillRect( this.texture.axis[0] - this.texture.left, this.texture.axis[1] - this.texture.top, this.texture.right + this.texture.left, this.texture.bottom + this.texture.top ); } else if (this.texture.shape === 'circle') { - tc.x.beginPath(); - tc.x.arc( + context.beginPath(); + context.arc( this.texture.axis[0], this.texture.axis[1], this.texture.r, 0, 2 * Math.PI ); - tc.x.fill(); + context.fill(); } else if (this.texture.shape === 'strip' && this.texture.stripPoints.length) { - tc.x.strokeStyle = '#ff0'; - tc.x.lineWidth = 3; - tc.x.beginPath(); - tc.x.moveTo( + context.strokeStyle = getSwatch('accent1'); + context.lineWidth = 3; + context.beginPath(); + context.moveTo( this.texture.stripPoints[0].x + this.texture.axis[0], this.texture.stripPoints[0].y + this.texture.axis[1] ); for (let i = 1, l = this.texture.stripPoints.length; i < l; i++) { - tc.x.lineTo( + context.lineTo( this.texture.stripPoints[i].x + this.texture.axis[0], this.texture.stripPoints[i].y + this.texture.axis[1] ); } if (this.texture.closedStrip) { - tc.x.closePath(); + context.closePath(); } - tc.x.stroke(); + context.stroke(); if (this.texture.symmetryStrip) { const movablePoints = this.getMovableStripPoints(); @@ -785,21 +841,22 @@ texture-editor.aPanel.aView const axisPoint2 = movablePoints[movablePoints.length - 1]; // Draw symmetry axis - tc.x.strokeStyle = '#f00'; - tc.x.lineWidth = 3; - tc.x.beginPath(); - tc.x.moveTo( + context.strokeStyle = getSwatch('act'); + context.lineWidth = 3; + context.beginPath(); + context.moveTo( axisPoint1.x + this.texture.axis[0], axisPoint1.y + this.texture.axis[1] ); - tc.x.lineTo( + context.lineTo( axisPoint2.x + this.texture.axis[0], axisPoint2.y + this.texture.axis[1] ); - tc.x.stroke(); + context.stroke(); } } }; + /** * Redraws the canvas with the full image, its collision mask, and its slicing grid */ @@ -807,9 +864,10 @@ texture-editor.aPanel.aView const tc = textureCanvas; tc.width = tc.img.width; tc.height = tc.img.height; - tc.x.strokeStyle = '#0ff'; + const minSide = Math.min(this.texture.width, this.texture.height); + tc.x.strokeStyle = getSwatch('act'); tc.x.lineWidth = 1; - tc.x.font = '10px sans-serif'; + tc.x.font = `${Math.min(24, minSide)}px sans-serif`; tc.x.textAlign = 'left'; tc.x.textBaseline = 'top'; tc.x.globalCompositeOperation = 'source-over'; @@ -828,16 +886,16 @@ texture-editor.aPanel.aView w = this.texture.width, h = this.texture.height; tc.x.globalAlpha = 0.5; - tc.x.strokeStyle = '#0ff'; + tc.x.strokeStyle = getSwatch('act'); tc.x.lineWidth = 1; tc.x.strokeRect(x, y, w, h); if (this.prevShowFrameIndices && - this.opts.texture.width > 10 && - this.opts.texture.height > 10 + this.opts.texture.width > 8 && + this.opts.texture.height > 8 ) { tc.x.lineWidth = 2; tc.x.globalAlpha = 1; - tc.x.strokeStyle = '#000'; + tc.x.strokeStyle = getSwatch('act'); tc.x.fillStyle = '#fff'; tc.x.strokeText(i, x + 2, y + 2); tc.x.fillText(i, x + 2, y + 2); @@ -845,7 +903,7 @@ texture-editor.aPanel.aView } } if (this.prevShowMask) { - this.drawMask(); + this.drawMask(tc, tc.x); } }; @@ -856,15 +914,18 @@ texture-editor.aPanel.aView if (this.nameTaken) { // animate the error notice require('./data/node_requires/jellify')(this.refs.errorNotice); - if (localStorage.disableSounds !== 'on') { - soundbox.play('Failure'); - } + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); + soundbox.play('Failure'); return false; } this.parent.fillTextureMap(); glob.modified = true; this.texture.lastmod = Number(new Date()); - const {textureGenPreview} = require('./data/node_requires/resources/textures'); + const {textureGenPreview, updatePixiTexture} = require('./data/node_requires/resources/textures'); + updatePixiTexture(this.texture) + .then(() => { + window.signals.trigger('pixiTextureChanged', this.texture.uid); + }); textureGenPreview(this.texture, global.projdir + '/img/' + this.texture.origname + '_prev@2.png', 128); textureGenPreview(this.texture, global.projdir + '/img/' + this.texture.origname + '_prev.png', 64) .then(() => { diff --git a/src/riotTags/textures/texture-generator.tag b/src/riotTags/textures/texture-generator.tag index 3a8a2f19d..d9d3bc2c8 100644 --- a/src/riotTags/textures/texture-generator.tag +++ b/src/riotTags/textures/texture-generator.tag @@ -195,9 +195,8 @@ texture-generator.aView if (this.nameTaken) { this.update(); require('./data/node_requires/jellify')(this.refs.errorNotice); - if (localStorage.disableSounds !== 'on') { - soundbox.play('Failure'); - } + const {soundbox} = require('./data/node_requires/3rdparty/soundbox'); + soundbox.play('Failure'); return false; } diff --git a/src/riotTags/textures/textures-panel.tag b/src/riotTags/textures/textures-panel.tag index 30b3cf5db..486f6e9c5 100644 --- a/src/riotTags/textures/textures-panel.tag +++ b/src/riotTags/textures/textures-panel.tag @@ -14,7 +14,7 @@ textures-panel.aPanel.aView h1.inlineblock span {parent.voc.textures} .aSpacer.inlineblock - label.file.inlineblock + label.file.inlineblock(ref="importBlock") input(type="file" multiple accept=".png,.jpg,.jpeg,.bmp,.gif,.json" onchange="{parent.textureImport}") @@ -22,7 +22,7 @@ textures-panel.aPanel.aView svg.feather use(xlink:href="#download") span {parent.voc.import} - button(onclick="{parent.openGallery}") + button(onclick="{parent.openGallery}" ref="galleryButton") svg.feather use(xlink:href="#folder") span {parent.vocGlob.openAssetGallery} @@ -31,12 +31,14 @@ textures-panel.aPanel.aView title="{parent.voc.importFromClipboard}" data-hotkey="Control+v" data-hotkey-require-scope="texture" + ref="clipboardPaste" ) svg.feather use(xlink:href="#clipboard") button( onclick="{parent.openGenerator}" title="{parent.voc.generatePlaceholder}" + ref="placeholderGenButton" ) svg.feather use(xlink:href="#loader") @@ -238,7 +240,16 @@ textures-panel.aPanel.aView click: () => { const templatesAPI = require('./data/node_requires/resources/templates/'); const template = templatesAPI.createNewTemplate(this.currentTexture.name); - template.texture = this.currentTexture.uid; + if (this.currentTextureType === 'skeleton') { + template.oncreate = '// You can set a regular texture to make a collision mask;\n' + + '// ct.js doesn\'t support collisions and in-editor display of skeletal animations yet!\n' + + `this.skel = ct.res.makeSkeleton('${this.currentTexture.name}');\n` + + 'this.skel.animation.play(\'DefaultAnimation\');\n' + + 'this.addChild(this.skel);\n' + + 'this.tex = -1; // This will hide the copy\'s own sprite'; + } else { + template.texture = this.currentTexture.uid; + } window.orders.trigger('openAsset', `templates/${template.uid}`); } }, { @@ -264,6 +275,8 @@ textures-panel.aPanel.aView if (e.inputValue && e.inputValue !== '' && e.buttonClicked !== 'cancel') { this.currentTexture.name = e.inputValue; this.update(); + const {updatePixiTexture} = require('./data/node_requires/resources/textures'); + updatePixiTexture(this.currentTexture); } }); } diff --git a/src/styl/buildingBlocks.styl b/src/styl/buildingBlocks.styl index 914556209..8431479b1 100644 --- a/src/styl/buildingBlocks.styl +++ b/src/styl/buildingBlocks.styl @@ -1,10 +1,15 @@ .aSpacer width 1rem height @width + &.small + width 0.5rem + height @width .aDimmer position fixed background-color rgba(0, 0, 0, 0.3) + if (themeDark) + background-color rgba(0, 0, 0, 0.65) left 0 right 0 top 0 @@ -89,6 +94,8 @@ text-overflow ellipsis white-space nowrap {trans} + &.flexrow + align-items center &:hover, &.hover {transshort} border-bottom-color borderBright @@ -100,7 +107,7 @@ top 0.65rem &:hover, &.hover padding 0.2em 0.5em 0.2em 1.5em - & > svg:first-child, & > .aSpacer:first-child + & > svg:first-child, & > .aSpacer:first-child, & > img.icon:first-child color act margin-right 0.5rem {trans} @@ -112,7 +119,7 @@ background act border-bottom-color transparent color background - & > svg:first-child, & > .aSpacer:first-child + & > svg:first-child, & > .aSpacer:first-child, & > .anActionableIcon color background // панели управления @@ -273,11 +280,12 @@ .aCard background background padding 0.8em + &.compact + padding 0.4em 0.8em margin 0 box-sizing border-box border 1px solid borderPale border-radius 3px - display inline-block vertical-align top cursor pointer transition 0.35s ease all @@ -297,6 +305,7 @@ color background .aCard-Properties flex 1 1 auto + overflow hidden > .date display none span @@ -329,6 +338,16 @@ pointer-events none &:hover img background rgba(act, 0.35) + .aCard.compact & + width 1.5rem + svg + width 1.5rem + height 1.5rem + stroke-width 2 + img + width 2rem + height 2rem + margin -0.25rem 0 -0.25rem -0.25rem .aCard-Actions position absolute top 0.5rem @@ -377,6 +396,9 @@ sounds-panel, rooms-panel th border-bottom 1px solid borderBright text-align left + &.cellsmiddle + td, th + vertical-align middle .aNiceTable margin 1rem 0 border 1px solid borderBright @@ -398,7 +420,7 @@ sounds-panel, rooms-panel position relative border-radius br border 1px solid borderBright - height 1rem + height 0.5rem vertical-align middle display inline-block div @@ -419,3 +441,38 @@ sounds-panel, rooms-panel .anIllustration color act + +@keyframes pulse + 0% + transform translate(-50%, -50%) scale(0) + opacity 0 + 25% + transform translate(-50%, -50%) scale(1) + opacity 1 + 50%, 100% + transform translate(-50%, -50%) scale(2) + opacity 0 + +.aPulser + position absolute + left 50% + top 50% + user-select none + pointer-events none + &::before, &::after + content '' + display block + width 2.5rem + height 2.5rem + position absolute + left 50% + top 50% + transform translate(-50%, -50%) + border-radius 100% + border 3px solid accent1 + z-index 100 + animation pulse 2s infinite linear + &::after + animation-delay -0.2s + width 3rem + height 3rem diff --git a/src/styl/common.styl b/src/styl/common.styl index 630069ffb..0200d7a60 100644 --- a/src/styl/common.styl +++ b/src/styl/common.styl @@ -21,7 +21,7 @@ body filter grayscale(1) position relative &:after - content " " + content "" display block cursor not-allowed top 0 @@ -71,7 +71,7 @@ body width 4em // оверлей загрузки -div#loading +div#theLoadingScreen position fixed left 0 right 0 @@ -188,3 +188,11 @@ icon(icon = 'slash', color = act) color text [css-swatch="backgroundDeeper"] color backgroundDeeper +[css-swatch="background"] + color background +[css-swatch="red"] + color red +[css-swatch="green"] + color green +[css-swatch="orange"] + color orange diff --git a/src/styl/hvost.styl b/src/styl/hvost.styl index 03153572f..339ebc214 100644 --- a/src/styl/hvost.styl +++ b/src/styl/hvost.styl @@ -39,6 +39,7 @@ html font-size 125% .small font-size 87.5% // 14px от 16-и + line-height 1.714 .tiny font-size 75% // 12px .rem @@ -63,8 +64,8 @@ html text-overflow ellipsis white-space nowrap display inline-block - max-width 15em vertical-align text-bottom + max-width 100% .toright float right !important @@ -129,11 +130,14 @@ textarea .grey, .gray color grey .ctext - color ctext + color text .bold font-weight 600 +.dim + opacity 0.5 + .selectable user-select unquote('text') .unclickable @@ -224,6 +228,8 @@ for i in 1 2 3 4 5 6 7 8 cursor pointer .cursordefault cursor default +.cursorhelp + cursor help .aContainer16x9 @@ -285,7 +291,7 @@ for i in 1 2 3 4 5 6 7 8 from opacity 0 to - opacity 100% + opacity 1 @keyframes pop-in from transform scale(0, 0) diff --git a/src/styl/inputs.styl b/src/styl/inputs.styl index 650629391..eea69c34f 100644 --- a/src/styl/inputs.styl +++ b/src/styl/inputs.styl @@ -222,6 +222,25 @@ input[type="reset"], margin 0 button, .button flex 1 1 auto + &.vertical + flex-flow column nowrap + button, .button + margin 0 + border-radius 0 + border-bottom-width 0 + border-right-width 1px + if themeThickBorders + border-right-width 2px + @extend button.square + &:first-child + border-top-left-radius br + border-top-right-radius br + &:last-child + border-bottom-left-radius br + border-bottom-right-radius br + border-bottom-width 1px + if themeThickBorders + border-bottom-width 2px button, input[type="button"], input[type="submit"], @@ -242,15 +261,15 @@ select line-height 2 height calc(2.2rem + 2px) -[type=range] +[type="range"] min-height 1.5em background transparent font inherit width 100% -[type=range], [type=range]::-webkit-slider-thumb +[type="range"], [type="range"]::-webkit-slider-thumb -webkit-appearance none -[type=range]::-webkit-slider-runnable-track +[type="range"]::-webkit-slider-runnable-track box-sizing border-box border 1px solid borderBright border-radius br @@ -259,7 +278,7 @@ select background backgroundDeeper thumbWidth = 1.5em -[type=range]::-webkit-slider-thumb +[type="range"]::-webkit-slider-thumb margin-top -0.425em box-sizing border-box border 0 @@ -280,7 +299,7 @@ thumbWidth = 1.5em height 2em font 1em/1 sans-seri -.aSliderWrap [type=range] +.aSliderWrap [type="range"] flex 1 margin 0 padding 0 @@ -336,6 +355,8 @@ fieldset &::after content '' icon(check, background) + // a hack to fix pixelization of icons in certain context menus + transform scale(1) width 0.85rem height 1rem position absolute diff --git a/src/styl/tabs.styl b/src/styl/tabs.styl index 5f554b789..500ea03b7 100644 --- a/src/styl/tabs.styl +++ b/src/styl/tabs.styl @@ -1,20 +1,59 @@ -// табы -.tabbed - border-radius 0 0 br br - border 1px solid borderBright - border-top 0 none - padding 1em - background background - overflow auto - -.tabbed, .tall - h1, h2, h3, h4, h5, h6 - &:first-child - margin-top 0 -.tabwrap - flex-direction column - max-height 100% - width 100% - display flex - & > * - flex 1 1 auto +// табы +.tabbed + border-radius 0 0 br br + border 1px solid borderBright + border-top 0 none + padding 1em + background background + overflow auto + +.tabbed, .tall + h1, h2, h3, h4, h5, h6 + &:first-child + margin-top 0 +.tabwrap + flex-direction column + max-height 100% + width 100% + display flex + & > * + flex 1 1 auto + +prideR = #E40203 +prideO = #FF8B00 +prideY = #FEED00 +prideG = #00AE25 +prideB = #0078FF +prideP = #AE2FC6 + +root-tag.pride + app-view > nav ul + span + font-weight bolder + li:nth-child(6n + 1) + span, svg + color mix(act, prideR, 10%) + li:nth-child(6n + 2) + span, svg + if (themeDark) + color mix(act, prideO, 10%) + else + color shade(mix(act, prideO, 10%), 10%) + li:nth-child(6n + 3) + span, svg + if (themeDark) + color mix(act, prideY, 10%) + else + color shade(mix(act, prideY, 15%), 35%) + li:nth-child(6n + 4) + span, svg + color mix(act, prideG, 10%) + li:nth-child(6n + 5) + span, svg + if (themeDark) + color tint(mix(act, prideB, 10%), 20%) + else + color mix(act, prideB, 10%) + li:nth-child(6n) + span, svg + color mix(act, prideP, 10%) diff --git a/src/styl/tags/app-view.styl b/src/styl/tags/app-view.styl index cd51d16a8..c35adbf14 100644 --- a/src/styl/tags/app-view.styl +++ b/src/styl/tags/app-view.styl @@ -1,38 +1,24 @@ -app-view - position fixed - top 0 - left 0 - right 0 - bottom 0 - & > .flexrow > nav - flex-flow row wrap - li - position relative -#theCatMenu - top 100% - left 0 -#fullscreen - flex 0 0 3rem -#app - flex 0.35 1 12rem -#mainnav - flex 1 1 60rem - -body.maximized #mainnav - @media (max-width 1000px) - flex-wrap wrap - -body.restored - #mainnav - right 0 - #app - display none - -#mainnav, #app, #fullscreen - border-radius 0 - -@media (max-width 1000px) - #mainnav span - display none - #mainnav svg:first-child - margin-right 0 +app-view + position fixed + top 0 + left 0 + right 0 + bottom 0 + & > .flexrow > nav + flex-flow row wrap + & > nav > .tabs li + position relative + &:last-child + width 2rem + .limitwidth + max-width 5rem + & > nav > .tabs + border-radius 0 + width 100% + +@media (max-width 1100px) + app-view > nav > .tabs + span + display none + svg:first-child + margin-right 0 diff --git a/src/styl/tags/hello.styl b/src/styl/tags/hello.styl deleted file mode 100644 index ecbb99c80..000000000 --- a/src/styl/tags/hello.styl +++ /dev/null @@ -1,37 +0,0 @@ -#hello - position fixed - left 50% - top 50% - transform translate(-50%, -50%) - font-size 2em - max-width 50% - text-align center - line-height 1.47 -#hell - display none - position fixed - top 50% - left 20% - right 20% - transform translate(0, -50%) - font-size 1.25em - text-align center - li - list-style none - display inline-block - position relative - padding 0.35em 0.5em 1em - background backgroundDeeper - border 1px solid borderBright - border-radius br - margin 0 0.5em - cursor pointer - &:after - content attr(title) - position absolute - left 0 - right 0 - bottom 0 - text-align center - display block - font-size 0.9em diff --git a/src/styl/tags/license-panel.styl b/src/styl/tags/license-panel.styl index 3adf1fa9c..860aa7468 100644 --- a/src/styl/tags/license-panel.styl +++ b/src/styl/tags/license-panel.styl @@ -1,12 +1,9 @@ license-panel - overflow auto - max-height 90% - width 55rem - max-width 90% + .aModal + overflow auto + max-height 90% + width 45rem + max-width 90% pre max-height 15rem overflow auto - {shadamb} - svg:hover - cursor pointer - color act \ No newline at end of file diff --git a/src/styl/tags/particles/emitter-editor.styl b/src/styl/tags/particles/emitter-editor.styl index c8dafe831..551bf8ced 100644 --- a/src/styl/tags/particles/emitter-editor.styl +++ b/src/styl/tags/particles/emitter-editor.styl @@ -15,7 +15,6 @@ emitter-editor background backgroundDeeper border-radius br br 0 0 z-index 2 - display flex flex-flow row nowrap align-items center h3 @@ -35,4 +34,4 @@ emitter-editor width 2rem height 2rem margin-right 1rem - flex 0 0 auto \ No newline at end of file + flex 0 0 auto diff --git a/src/styl/tags/project-selector.styl b/src/styl/tags/project-selector.styl index ab2dfeeec..4fde03065 100644 --- a/src/styl/tags/project-selector.styl +++ b/src/styl/tags/project-selector.styl @@ -1,68 +1,65 @@ -project-selector - display block - position absolute - padding 1rem - left 0 - right 0 - top 0 - bottom 0 - z-index 30 - label.file - margin 1em 0 - .aPanel - width 50rem - max-width 95% - max-height calc(100% - 10rem) - margin 0 auto 2rem - background background - z-index 35 - {shadamb} - h2 - align-self flex-end - .inset - margin 0 - border-radius 0 0 br br - .aVersionNumber - position absolute - bottom 0 - left 0 - width 100% - text-align center - z-index 100 - // @stylint off - color #fff - // @stylint on - * - vertical-align text-bottom - .aPartyCarrot - width 2rem - display inline-block - position relative - top -0.1rem - margin-left 0.5rem - svg - margin-right 0.5rem - -.project-selector-aPreview img - max-width 100% - max-height 20em - -#newProject - align-items center - justify-content center - h3, button, input - flex 0 0 auto - input - margin 0 1rem - width 16rem -#bg - background url('../data/img/bg.png') - background-size cover - background-position center center - z-index 25 - text-align center - .aPanel - text-align initial - -#id - width 14.75em \ No newline at end of file +project-selector + display block + position absolute + padding 1rem + left 0 + right 0 + top 0 + bottom 0 + z-index 30 + label.file + margin 1em 0 + .aPanel + width 50rem + max-width 95% + max-height calc(100% - 10rem) + margin 0 auto 2rem + background background + z-index 35 + {shadamb} + h2 + align-self flex-end + .inset + margin 0 + border-radius 0 0 br br + .aVersionNumber + position absolute + bottom 0 + left 0 + width 100% + text-align center + z-index 100 + // @stylint off + color #fff + // @stylint on + * + vertical-align text-bottom + .aPartyCarrot + width 2rem + display inline-block + position relative + top -0.1rem + margin-left 0.5rem + svg + margin-right 0.5rem + +.project-selector-aPreview img + max-width 100% + max-height 20em + +#theNewProjectField + align-items center + justify-content center + h3, button, input + flex 0 0 auto + input + margin 0 1rem + width 16rem +#theIntroBg + background url('../data/img/bg.png') + background-size cover + background-position center center + z-index 25 + text-align center + .aPanel + text-align initial diff --git a/src/styl/tags/rooms/room-backgrounds-editor.styl b/src/styl/tags/rooms/room-backgrounds-editor.styl new file mode 100644 index 000000000..f5d4ea756 --- /dev/null +++ b/src/styl/tags/rooms/room-backgrounds-editor.styl @@ -0,0 +1,3 @@ +room-backgrounds-editor + collapsible-section asset-input > .aButtonGroup + margin-right 0 diff --git a/src/styl/tags/rooms/room-copy-properties.styl b/src/styl/tags/rooms/room-copy-properties.styl deleted file mode 100644 index 1d7f834ca..000000000 --- a/src/styl/tags/rooms/room-copy-properties.styl +++ /dev/null @@ -1,9 +0,0 @@ -room-copy-properties - display block - padding 1rem - room-editor &.aPanel - {shadamb} - position absolute - right 1rem - top 4rem - width 20rem \ No newline at end of file diff --git a/src/styl/tags/rooms/room-editor.styl b/src/styl/tags/rooms/room-editor.styl index c86cd3814..e61b31318 100644 --- a/src/styl/tags/rooms/room-editor.styl +++ b/src/styl/tags/rooms/room-editor.styl @@ -1,173 +1,101 @@ room-editor - display flex - flex-direction row - .room-editor-TemplateSwatches .aSearchWrap - display block - flex 1 1 100% - margin 0 0 3px - input - box-sizing border-box - width 100% - font-size 90% - border-radius 0 - .toolbar - display flex - flex-direction column - padding 0.5em - width 17em - box-sizing border-box - flex 0 0 auto - flex-grow 0 - .settings .fifty - padding 0.5rem - .palette - flex 1 1 auto - .settings button - margin 0.5em 0 - .aNav - border-bottom-right-radius 0 - border-bottom-left-radius 0 - .palette - position relative - .tabwrap - position absolute - left 0 - right 0 - top 0 - bottom 0 - .editor - display flex - position relative - flex 1 1 auto - .shift - position absolute - top 0.5rem - left 0.5rem - .zoom - position absolute - top 0.5rem - right 0.5rem - zoom-slider - width 20rem - .grid - position absolute - bottom 0.5rem - right 0.5rem - .center - position absolute - bottom 0.5rem - left 0.5rem - canvas - width 100% - height 100% - -.room-editor-TemplateSwatches, .room-editor-Backgrounds, .room-editor-Tiles - overflow-y scroll - position absolute - width 100% -.room-editor-TemplateSwatches - padding 0 0 0 1px !important - display flex - flex-flow row wrap - align-content start - align-items flex-start -.room-editor-aTemplateSwatch - list-style none - border 1px solid borderPale - flex 1 0 5rem - display inline-block - box-sizing border-box - text-align center - margin -1px 0 0 -1px - cursor pointer - padding 1.75rem 0.4em 0 - font-size 80% - line-height 1.7 - {trans} - position relative - z-index 1 - svg - width 2.5rem - height @width - color act - line-height 3rem - margin 1.35rem auto 0 - display block - padding-bottom 0.5rem - span - display block - text-overflow ellipsis - overflow hidden - width auto + background backgroundDeeper + & > canvas position absolute - left 0.5rem - top 0.25rem - right 0.5rem - &:hover - border-color act - z-index 10 - {transshort} - &.active - border-color accent1 - z-index 10 - img - height 64px - width 64px - &.filler - height 0 - visibility hidden - -.room-editor-Backgrounds - &.tabbed - padding 0.5rem - ul + left 0 + top 0 + width 100% + height 100% + .&-aToolsetHolder + pointer-events none + & > * + pointer-events initial + position absolute + left 0 + right 0 + top 0 + bottom 0 + overflow hidden + padding 1rem + display grid + grid-template-columns auto auto 1fr + grid-gap 0 1rem + align-items start + .&-aToolbar + border-radius br margin 0 - padding 0 - .bg - list-style none - padding 0.3em 0.8em + {shad} + button + border-color borderBright + .&-aContextPanel + @extends .aPanel + display block + width 18rem + padding 1rem border-radius br - border 1px solid borderBright - margin-bottom 0.2em - img - float left - width 64px - height 64px - border-radius br - cursor pointer - margin-right 1rem - & > span - display block - vertical-align middle - margin-top 1em - span - cursor pointer - {trans} - float right - margin-left 0.5rem - .active - color act - label + label - margin-top 0 - .fifty - padding 0.5rem 0.25rem - -.room-editor-Tiles - canvas - cursor pointer - min-width 100% - .act - color text - cursor pointer + overflow auto + z-index 2 + {shadamb} + resize both + min-width 15rem + max-width 50vw // why would you need it any longer + min-height 4rem + max-height calc(100% - 2rem) + .&-aTopPanel + border-radius br + border borderBright + {shad} + display flex + flex-flow row nowrap + background background + width max-content + justify-self center + grid-column 3 + & > * + padding 0.25rem 1rem + box-shadow none + border-top 0 + border-bottom 0 + border-left 0 + border-right 1px solid borderBright + margin 0 + border-radius 0 + &:first-child + border-radius br 0 0 br + &:last-child + border 0 + border-radius 0 br br 0 + & > .slim + padding 0.25rem 0.5rem + & > .checkbox + padding-left 2.5rem + [type="checkbox"] + top 50% + margin-left 1rem + transform translate(0, -50%) + & > zoom-slider + width 10rem + .&-aSelectionToggle display inline-block - padding 0.35rem 0 - line-height 1 - margin-left 0.5rem - {trans} - &:hover - color act - {transshort} - .flexfix-footer button - margin-bottom 0.25rem - select - padding 0.25rem + position relative + padding 0 1rem 0.5rem 0 + cursor pointer + &.active + svg + color act + &:last-child + color accent1 + svg + {trans} + &:last-child + width 1rem + height @width + padding 0.25rem + display block + //background background + border-radius 100% + overflow visible + position absolute + bottom 0 + right 0 + //{shad} diff --git a/src/styl/tags/rooms/room-events-editor.styl b/src/styl/tags/rooms/room-events-editor.styl index 51c454332..d658cce87 100644 --- a/src/styl/tags/rooms/room-events-editor.styl +++ b/src/styl/tags/rooms/room-events-editor.styl @@ -1,24 +1,7 @@ room-events-editor @extends .aView border-top 0 none - display flex - flex-direction column z-index 11 overflow hidden !important - .tabs, button - border-radius 0 - button - margin-top 1px - .tabwrap, button - flex 1 1 auto - .tabbed - padding 0 - height 100% - position absolute - left 0 - right 0 - top 0 - bottom 0 - border-radius 0 - overflow visible - box-sizing border-box \ No newline at end of file + .&-Properties + width 20rem diff --git a/src/styl/tags/rooms/room-tile-editor.styl b/src/styl/tags/rooms/room-tile-editor.styl new file mode 100644 index 000000000..ee05996a1 --- /dev/null +++ b/src/styl/tags/rooms/room-tile-editor.styl @@ -0,0 +1,26 @@ +room-tile-editor + .&-aCanvas + min-width 100% + margin 1rem 0 + display block + .&-aLayerList + max-height 10rem + li.checkbox + border-radius br + display flex + padding-left 2rem + padding-right 0.5rem + &:hover + padding-left 2rem + padding-right 0.5rem + [type="checkbox"] + left 0.5rem + * + flex 0 0 auto + b + flex 1 1 auto + .a + margin-left 0.5rem + &.active + background rgba(act, 0.25) + color text diff --git a/src/styl/tags/shared/asset-input.styl b/src/styl/tags/shared/asset-input.styl index 770badcd8..938fe3516 100644 --- a/src/styl/tags/shared/asset-input.styl +++ b/src/styl/tags/shared/asset-input.styl @@ -1,4 +1,20 @@ asset-input + line-height 0 + & > * + line-height 1.5 + & > .aButtonGroup + max-width 100% + :first-child + display flex + flex-flow row nowrap + align-items center + overflow hidden + & img, & svg + flex 0 0 auto + & span + flex 1 1 auto + overflow hidden + text-overflow ellipsis &.wide & > .aButtonGroup @extends .aButtonGroup.wide diff --git a/src/styl/tags/shared/asset-viewer.styl b/src/styl/tags/shared/asset-viewer.styl index adc408f30..cfcd1506f 100644 --- a/src/styl/tags/shared/asset-viewer.styl +++ b/src/styl/tags/shared/asset-viewer.styl @@ -22,3 +22,9 @@ asset-viewer height @width & + svg margin-left 0.5rem + &.compact + .aSearchWrap + flex 1 1 auto + input + width 100% + box-sizing border-box diff --git a/src/styl/tags/shared/collapsible-section.styl b/src/styl/tags/shared/collapsible-section.styl index ca1de5bd3..0adf8c73f 100644 --- a/src/styl/tags/shared/collapsible-section.styl +++ b/src/styl/tags/shared/collapsible-section.styl @@ -3,33 +3,36 @@ collapsible-section display block &:first-child margin-top 0 - & > .flexrow + .&-aHeader padding 0.5rem 0 - align-items center - cursor pointer + align-items center border-bottom 1px solid borderBright - h1, h2, h3, h4, h5, h6 - padding 0 - margin 0 - flex 1 1 auto + display grid + grid-template-columns 1fr auto + grid-gap 0.5rem + & > :first-child + display contents + & > h1, & > h2, & > h3, & > h4, & > h5, & > h6 + padding 0 + margin 0 + overflow hidden + text-overflow ellipsis + white-space nowrap + asset-input overflow hidden - text-overflow ellipsis - white-space nowrap - svg + & > svg {trans} - margin-left 0.5rem flex 0 0 auto - align-self flex-end + cursor pointer &.rotated transform rotate(180deg) .&-aWrapper padding 1rem 0 0.5rem &.aPanel - & > .flexrow - h1, h2, h3, h4, h5, h6 + .collapsible-section-aHeader + padding 0.5rem 1rem + & > h1, & > h2, & > h3, & > h4, & > h5, & > h6 margin 0 1rem - svg - margin-right 0.5rem &.closed > .flexrow border-bottom 0 .collapsible-section-aWrapper diff --git a/src/styl/tags/shared/context-menu.styl b/src/styl/tags/shared/context-menu.styl index 7181eb0c5..9df6b1295 100644 --- a/src/styl/tags/shared/context-menu.styl +++ b/src/styl/tags/shared/context-menu.styl @@ -78,8 +78,10 @@ context-menu left 1rem top 0.75rem background background + a.submenu + padding-right 2.5rem .separator padding 0 margin 0.5rem 0 border-top 1px solid borderBright - cursor initial \ No newline at end of file + cursor initial diff --git a/src/styl/tags/shared/error-notice.styl b/src/styl/tags/shared/error-notice.styl new file mode 100644 index 000000000..cc1689dd2 --- /dev/null +++ b/src/styl/tags/shared/error-notice.styl @@ -0,0 +1,6 @@ +error-notice.anErrorNotice + position fixed + width 15rem + z-index 10 + transform translate(-50%, 0) + {trans} diff --git a/src/styl/tags/shared/modal-menu.styl b/src/styl/tags/shared/modal-menu.styl new file mode 100644 index 000000000..90dd33e1e --- /dev/null +++ b/src/styl/tags/shared/modal-menu.styl @@ -0,0 +1,31 @@ +modal-menu + & > .aDimmer + position fixed + & > .aModal + height 35rem + width 55rem + max-height 80vh + max-width 80vw + .&-aGrid + display grid + grid-template-columns repeat(auto-fill, minmax(20em, 1fr)) + grid-gap 0.25rem + margin-top 1rem + padding-bottom 1rem + align-items stretch + justify-items stretch + align-content stretch + .&-aGridItem + border 1px solid transparent + border-radius br + {transshort} + padding 0.5rem 1rem + cursor pointer + &:hover + border-color act + &:active + background-color act + color background + svg, h1, h2, h3, h4, h5, h6, .act + color background + border-color accent1 diff --git a/src/styl/tags/shared/tour-guide.styl b/src/styl/tags/shared/tour-guide.styl new file mode 100644 index 000000000..95095e7f7 --- /dev/null +++ b/src/styl/tags/shared/tour-guide.styl @@ -0,0 +1,39 @@ +tour-guide + position fixed + z-index 40 + & > div + position fixed + display block + left 0 + right 0 + top 0 + bottom 0 + z-index 40 + .aModal + position absolute + z-index 50 + {transshort} + overflow visible + .&-aMask + background-color rgba(0, 0, 0, 0.3) + if (themeDark) + background-color rgba(0, 0, 0, 0.65) + position fixed + left 0 + right 0 + top 0 + bottom 0 + z-index 40 + {transshort} + .&-aHighlight + position fixed + z-index 45 + box-shadow act 0 0 0.5rem, act 0 0 0.25rem inset + animation shadowPulse 2.5s ease infinite + {transshort} + +@keyframes shadowPulse + 0%, 100% + box-shadow act 0 0 0.5rem, act 0 0 0.25rem inset + 50% + box-shadow act 0 0 1rem, act 0 0 0.5rem inset diff --git a/src/styl/tags/styles/style-editor.styl b/src/styl/tags/styles/style-editor.styl index 7441a8fb2..89b6fcc47 100644 --- a/src/styl/tags/styles/style-editor.styl +++ b/src/styl/tags/styles/style-editor.styl @@ -7,9 +7,9 @@ style-editor border-bottom-right-radius 0 .align margin-bottom 0.2em -#stylepreview, #styleleft +.style-editor-aPreview, .style-editor-Properties flex 1 1 auto -#styleleft +.style-editor-Properties flex-grow 0 width 25em padding 0.5em @@ -17,11 +17,3 @@ style-editor margin-bottom 0.5rem .flexfix-footer margin-top 0.5rem -#topleft, #topcenter, #topright - svg - position relative - top -0.5rem -#bottomleft, #bottomcenter, #bottomright - svg - position relative - top 0.5rem \ No newline at end of file diff --git a/src/styl/tags/templates/template-editor.styl b/src/styl/tags/templates/template-editor.styl index 121dca987..f9f4e7228 100644 --- a/src/styl/tags/templates/template-editor.styl +++ b/src/styl/tags/templates/template-editor.styl @@ -29,18 +29,58 @@ template-editor top 0 right 0 bottom 0 - if (theme == 'Horizon') - border 1px solid borderBright - border-top 0 - box-sizing border-box - border-radius 0 0 br br .tabwrap height 100% display flex flex-flow row nowrap padding 1rem - .template-editor-Properties + .&-Properties flex 0 0 19rem margin-right 1rem - .template-editor-aCodeEditor + overflow hidden + &:first-child + flex 0 0 23rem + &.alt + flex 0 0 19rem + .&-aCodeEditor flex 1 1 auto + .&-aSlidingEventListIcon + position absolute + left 0.87rem + bottom @left + z-index 2 + opacity 0.5 + {transshort} + .&-aSlidingEventList + width 3.25rem + flex 0 0 auto + position relative + overflow visible + & > .aPanel + width 3.25rem + z-index 2 + overflow-x hidden + {trans} + .flexfix-footer button, .event-list-scriptable-LocalVars + opacity 0 + {trans} + &:hover .template-editor-aSlidingEventListIcon + opacity 0 + &:hover > .aPanel + position absolute + left 0 + top 0 + bottom 0 + width 22rem + {shadamb} + .flexfix-footer button, .event-list-scriptable-LocalVars + opacity 1 + .&-aSlidingEventListWrap + width 22rem + & > event-list-scriptable + .aMenu > li + & > svg, & > img + &:first-child + margin-right 0.8rem + & > .flexfix-footer + padding 1rem diff --git a/src/styl/tags/textures/texture-editor.styl b/src/styl/tags/textures/texture-editor.styl index 0dcf6fef9..b4005db72 100644 --- a/src/styl/tags/textures/texture-editor.styl +++ b/src/styl/tags/textures/texture-editor.styl @@ -1,7 +1,7 @@ texture-editor .column width 18em - .column, #atlas + .column padding 1em .column2 .flexfix-body @@ -51,24 +51,9 @@ texture-editor overflow scroll position relative -#textureviewdone - bottom 0.5em - left 1em - width 13em - position absolute - -#grahpspeed +.texture-editor-anAnimSpeedField margin-top 0.25rem -#previewbgcolor - position absolute - opacity 0 - left 1em - width 0 - height 0 - top 11em - padding 0 - .texture-editor-Tools position absolute top 0.5em @@ -86,27 +71,9 @@ texture-editor position absolute left 0.5em bottom 0.5em -#textureviewframes - position absolute - left 16em - top 0 - bottom 0 - right 0 - ul - list-style none - position absolute - left 0 - top 0 - right 0 - bottom 0 - overflow auto - padding 3.5em 0.5em 0 - margin 0 -#grahpspeed +.texture-editor-anAnimSpeedField width 3em margin-left 0.5em -#texturecolor - margin-top 0.5em .texture-editor-anAtlas position relative overflow auto diff --git a/src/styl/themeForest.styl b/src/styl/themeForest.styl index 472073fe7..22861d8f0 100644 --- a/src/styl/themeForest.styl +++ b/src/styl/themeForest.styl @@ -66,5 +66,5 @@ input[type="reset"], svg color backgroundDeeper -#bg +#theIntroBg background backgroundDeeper diff --git a/src/styl/themeHCBlack.styl b/src/styl/themeHCBlack.styl index 7e73b54cd..a36419498 100644 --- a/src/styl/themeHCBlack.styl +++ b/src/styl/themeHCBlack.styl @@ -63,5 +63,5 @@ button, .button &, & svg color backgroundDeeper -#bg +#theIntroBg background backgroundDeeper diff --git a/src/styl/themeHorizon.styl b/src/styl/themeHorizon.styl index 280416c00..dddb0671f 100644 --- a/src/styl/themeHorizon.styl +++ b/src/styl/themeHorizon.styl @@ -71,11 +71,6 @@ input[type="reset"], &:hover, &.active color foreground -#moduleinfo .bigpower:not(.off) - border-color success - &:after - background success - @require 'tags/**/*.styl' .anErrorNotice @@ -85,5 +80,5 @@ input[type="reset"], gradCore = #733041 gradTransition = #2e2233 gradOuter = #1c1e26 -#bg +#theIntroBg background radial-gradient(ellipse at bottom, gradCore 0, gradTransition 50%, gradOuter 100%) diff --git a/src/styl/themeLucasDracula.styl b/src/styl/themeLucasDracula.styl index 585a21370..c2a736ba8 100644 --- a/src/styl/themeLucasDracula.styl +++ b/src/styl/themeLucasDracula.styl @@ -51,11 +51,6 @@ themeThickBorders = false @require 'buildingBlocks.styl' @require 'tabs.styl' -#moduleinfo .bigpower:not(.off) - border-color success - &:after - background success - button, input[type="button"], input[type="submit"], diff --git a/src/styl/themeNight.styl b/src/styl/themeNight.styl index a3a0e5883..6e88dd656 100644 --- a/src/styl/themeNight.styl +++ b/src/styl/themeNight.styl @@ -62,5 +62,5 @@ grad3 = #286774 grad4 = #1a3541 grad5 = #0C0D18 -#bg +#theIntroBg background radial-gradient(ellipse at bottom, grad1 0, grad2 9%, grad3 22%, grad4 43%, grad5 74%) diff --git a/src/styl/themeNord.styl b/src/styl/themeNord.styl index d5623cffa..71c1f643c 100644 --- a/src/styl/themeNord.styl +++ b/src/styl/themeNord.styl @@ -1,32 +1,29 @@ @charset "utf-8" -foreground = #fff -text = #D5D8DA -background = #2E3440 +foreground = #ECEFF4 +text = #D8DEE9 +background = #3B4252 backgroundDeeper = #2E3440 -shadows = #88C0D0 +shadows = #292e39 borderPale = #434C5E -borderBright = #434C5E +borderBright = #4C566A -/* handy blocks */ trans = transition 0.35s ease all transshort = transition 0.15s ease all shad = - box-shadow 0 0.15rem 0.35rem rgba(shadows, 0.35) + box-shadow 0 0.1rem 0.2rem rgba(shadows, 0.5) shadamb = - box-shadow 0 0.25rem 1.5rem -0.3rem rgba(shadows, 0.5) + box-shadow 0 0 0.35rem rgba(shadows, 0.5) -/* Fonts */ fonts = font = 'Open Sans', sans-serif, serif font-mono = mono = Iosevka, monospace -br = 0.25rem +br = 0.2rem iconsize = 1.5rem -/* Basic colors & accents */ act = #88C0D0 acttext = act accent1 = #88C0D0 @@ -36,8 +33,6 @@ success = #A3BE8C green = success warning = #D08770 orange = warning -blue = #5E81AC -cyan = #8FBCBB theme = 'Nord' themeDark = true @@ -55,31 +50,16 @@ themeThickBorders = false @require 'buildingBlocks.styl' @require 'tabs.styl' -button, -input[type="button"], -input[type="submit"], -input[type="reset"], -.button - border-width 2px - -.aView - background background - -.aNav li - border-right 0 - border-left 0 - &:hover, &.active - color foreground - -#moduleinfo .bigpower:not(.off) - border-color success - &:after - background success - @require 'tags/**/*.styl' -.anErrorNotice - a, .a - text-decoration underline -#bg - background background +input[type="text"], +input[type="number"], +input[type="url"], +input[type="password"], +select, +textarea, +.aResizer::before + background-color rgba(backgroundDeeper, 0.5) + +#theIntroBg + background backgroundDeeper diff --git a/src/styl/themePooxelGreen.styl b/src/styl/themePooxelGreen.styl index 3053e7fb0..743992f42 100644 --- a/src/styl/themePooxelGreen.styl +++ b/src/styl/themePooxelGreen.styl @@ -83,7 +83,7 @@ input[type="text"], input[type="number"], input[type="url"], input[type="passwor .aNav .bigpower, context-menu, -[type=range]::-webkit-slider-runnable-track, +[type="range"]::-webkit-slider-runnable-track, code.inline, p > code, li > code, pre border-width 2px border-radius 0 @@ -181,7 +181,7 @@ for i in right left top bottom /** * Misc */ -[type=range]::-webkit-slider-thumb +[type="range"]::-webkit-slider-thumb border-radius 0 width 1em height 1em diff --git a/src/styl/themeRosePine.styl b/src/styl/themeRosePine.styl new file mode 100644 index 000000000..f272253ad --- /dev/null +++ b/src/styl/themeRosePine.styl @@ -0,0 +1,67 @@ +@charset "utf-8" + +foreground = #e0def4 // text +text = #e0def4 // text +background = #1f1d2e // surface +backgroundDeeper = #191724 // base +shadows = #26233a // overlay + +borderLight = #524f67 +borderPale = #26233a // overlay +borderBright = #26233a // overlay + +trans = + transition 0.35s ease all +transshort = + transition 0.15s ease all +shad = + box-shadow 0 0.1rem 0.2rem rgba(shadows, 0.5) +shadamb = + box-shadow 0 0 0.35rem rgba(shadows, 0.5) + +fonts = font = 'Open Sans', sans-serif, serif +font-mono = mono = Iosevka, monospace + +br = 0.2rem +iconsize = 1.5rem + +act = #c4a7e7 // iris +acttext = act +accent1 = #ebbcba // rose +error = #eb6f92 // love +red = error +success = #31748f // pine +green = success +warning = #f6c177 // gold +orange = warning + +theme = 'RosePine' +themeDark = true +themeThickBorders = false + +@require 'hvost.styl' + +@require '3rdParty/*.styl' +@require './../node_requires/themes/3rdParty/highlight.js/RosePine.css' + +@require 'common.styl' +@require 'inputs.styl' +@require 'typography.styl' +@require 'confetti.styl' +@require 'buildingBlocks.styl' +@require 'tabs.styl' + +@require 'tags/**/*.styl' + + +input[type="text"], +input[type="number"], +input[type="url"], +input[type="password"], +select, +textarea, +.aResizer::before + border-color borderLight + +#theIntroBg + background borderPale diff --git a/src/styl/themeRosePineDawn.styl b/src/styl/themeRosePineDawn.styl new file mode 100644 index 000000000..d6aec6f75 --- /dev/null +++ b/src/styl/themeRosePineDawn.styl @@ -0,0 +1,66 @@ +@charset "utf-8" + +foreground = #575279 // text +text = #575279 // text +background = #fffaf3 // surface +backgroundDeeper = #faf4ed // base +shadows = #f2e9e1 // overlay + +borderLight = #cecacd // highlight high +borderPale = #f2e9e1 // overlay +borderBright = #f2e9e1 // overlay + +trans = + transition 0.35s ease all +transshort = + transition 0.15s ease all +shad = + box-shadow 0 0.1rem 0.2rem rgba(shadows, 0.5) +shadamb = + box-shadow 0 0 0.35rem rgba(shadows, 0.5) + +fonts = font = 'Open Sans', sans-serif, serif +font-mono = mono = Iosevka, monospace + +br = 0.2rem +iconsize = 1.5rem + +act = #907aa9 // iris +acttext = act +accent1 = #d7827e // rose +error = #b4637a // love +red = error +success = #286983 // pine +green = success +warning = #ea9d34 // gold +orange = warning + +theme = 'RosePineDawn' +themeDark = false +themeThickBorders = false + +@require 'hvost.styl' + +@require '3rdParty/*.styl' +@require './../../app/node_modules/highlight.js/styles/tomorrow.css' + +@require 'common.styl' +@require 'inputs.styl' +@require 'typography.styl' +@require 'confetti.styl' +@require 'buildingBlocks.styl' +@require 'tabs.styl' + +@require 'tags/**/*.styl' + +input[type="text"], +input[type="number"], +input[type="url"], +input[type="password"], +select, +textarea, +.aResizer::before + border-color borderLight + +#theIntroBg + background borderPale diff --git a/src/styl/themeRosePineMoon.styl b/src/styl/themeRosePineMoon.styl new file mode 100644 index 000000000..ae5016319 --- /dev/null +++ b/src/styl/themeRosePineMoon.styl @@ -0,0 +1,66 @@ +@charset "utf-8" + +foreground = #e0def4 // text +text = #e0def4 // text +background = #2a273f // surface +backgroundDeeper = #232136 // base +shadows = #393552 // overlay + +borderLight = #56526e // highlight high +borderPale = #393552 // overlay +borderBright = #393552 // overlay + +trans = + transition 0.35s ease all +transshort = + transition 0.15s ease all +shad = + box-shadow 0 0.1rem 0.2rem rgba(shadows, 0.5) +shadamb = + box-shadow 0 0 0.35rem rgba(shadows, 0.5) + +fonts = font = 'Open Sans', sans-serif, serif +font-mono = mono = Iosevka, monospace + +br = 0.2rem +iconsize = 1.5rem + +act = #c4a7e7 // iris +acttext = act +accent1 = #ea9a97 // rose +error = #eb6f92 // love +red = error +success = #3e8fb0 // pine +green = success +warning = #f6c177 // gold +orange = warning + +theme = 'RosePineMoon' +themeDark = true +themeThickBorders = false + +@require 'hvost.styl' + +@require '3rdParty/*.styl' +@require './../node_requires/themes/3rdParty/highlight.js/RosePine.css' + +@require 'common.styl' +@require 'inputs.styl' +@require 'typography.styl' +@require 'confetti.styl' +@require 'buildingBlocks.styl' +@require 'tabs.styl' + +@require 'tags/**/*.styl' + +input[type="text"], +input[type="number"], +input[type="url"], +input[type="password"], +select, +textarea, +.aResizer::before + border-color borderLight + +#theIntroBg + background borderPale diff --git a/src/styl/themeSpringStream.styl b/src/styl/themeSpringStream.styl index bd618a930..6e07d11ab 100644 --- a/src/styl/themeSpringStream.styl +++ b/src/styl/themeSpringStream.styl @@ -109,8 +109,10 @@ input[type="reset"], color background &.selected background acttext +.aButtonGroup.vertical button, .aButtonGroup.vertical .button + border 0 -#bg +#theIntroBg background introBg .Cards diff --git a/src/styl/typography.styl b/src/styl/typography.styl index 029b37a99..c13307dba 100644 --- a/src/styl/typography.styl +++ b/src/styl/typography.styl @@ -16,7 +16,7 @@ p margin 1em 0 .docs-panel-Docs & margin 0.75em 0 - line-heigth 1.5 + line-height 1.5 a, .a color act diff --git a/src/typedefs/ct.js/Room.d.ts b/src/typedefs/ct.js/Room.d.ts index 05f175fe0..d34e9cec9 100644 --- a/src/typedefs/ct.js/Room.d.ts +++ b/src/typedefs/ct.js/Room.d.ts @@ -49,5 +49,18 @@ declare class Room extends PIXI.Container { /** The unique identifier of a room. Can be used to differentiate rooms without capturing them in a closure. */ uid: number; + /** Time for the next run of the 1st timer, in seconds. */ + timer1: number; + /** Time for the next run of the 2nd timer, in seconds. */ + timer2: number; + /** Time for the next run of the 3rd timer, in seconds. */ + timer3: number; + /** Time for the next run of the 4th timer, in seconds. */ + timer4: number; + /** Time for the next run of the 5th timer, in seconds. */ + timer5: number; + /** Time for the next run of the 6th timer, in seconds. */ + timer6: number; + [key: string]: any -} \ No newline at end of file +} diff --git a/src/typedefs/ct.js/ct.templates.d.ts b/src/typedefs/ct.js/ct.templates.d.ts index 2c2a318e8..c8fa3368c 100644 --- a/src/typedefs/ct.js/ct.templates.d.ts +++ b/src/typedefs/ct.js/ct.templates.d.ts @@ -10,7 +10,15 @@ declare namespace ct { * @param {Copy|PIXI.DisplayObject|any} obj The copy which existence needs to be checked. * @returns {boolean} Returns `true` if a copy exists; `false` otherwise. */ - function valid(obj: Copy): asserts obj is LivingCopy; - function valid(obj: PIXI.DisplayObject | any): obj is PIXI.DisplayObject; + function valid(obj: Copy): obj is LivingCopy; + function valid(obj: PIXI.DisplayObject): obj is PIXI.DisplayObject; + function valid(obj: any): obj is LivingCopy; + + /** + * Checks whether a given object is a ct.js copy. + * @param {any} obj The object which needs to be checked. + * @returns {boolean} Returns `true` if the passed object is a copy; `false` otherwise. + */ + function isCopy(obj: unknown): obj is Copy; } } diff --git a/tsconfig.json b/tsconfig.json index 2d4568437..14a6200fb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,16 @@ "module": "umd", "noImplicitAny": true, "moduleResolution": "node", - "baseUrl": "./" + "baseUrl": "./", + "typeRoots": [ + "./node_modules/@types/", + "./app/node_modules/@types/" + ], + "paths": { + "node_modules/*": [ + "./app/node_modules/*", + "./node_modules/*" + ], + } } }