From 5eff861caebcfb764308d390db3923e14d2661cf Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 09:40:09 -0700 Subject: [PATCH 01/11] In progress - Adding bluetooth --- client/mobile/package-lock.json | 5659 ++++++++++++ client/shared/src/util/sensorsApi.ts | 15 + libs/core/pxt.json | 3 +- libs/core/sensors.ts | 19 + libs/core/sims.d.ts | 6 + package-lock.json | 11723 +++++++++++++++++++++++++ public/pxt/icons.css | 2 +- public/pxt/main.js | 1027 ++- public/pxt/release.manifest | 2 +- public/pxt/rtlsemantic.css | 1122 ++- public/pxt/semantic.css | 1122 ++- public/pxt/semantic.js | 444 +- public/pxt/sim.js | 13 + public/pxt/target.js | 5 +- public/pxt/target.json | 5 +- sim/api.ts | 11 + 16 files changed, 20163 insertions(+), 1015 deletions(-) create mode 100644 client/mobile/package-lock.json create mode 100644 client/shared/src/util/sensorsApi.ts create mode 100644 libs/core/sensors.ts create mode 100644 package-lock.json diff --git a/client/mobile/package-lock.json b/client/mobile/package-lock.json new file mode 100644 index 0000000..c9ce511 --- /dev/null +++ b/client/mobile/package-lock.json @@ -0,0 +1,5659 @@ +{ + "name": "mobile", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/socket.io-client": { + "version": "1.4.29", + "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.29.tgz", + "integrity": "sha1-+HQwcM7pMXXjbgtqd6ivc+WMyzI=", + "dev": true + }, + "abab": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", + "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", + "dev": true + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "accepts": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", + "requires": { + "mime-types": "2.1.11", + "negotiator": "0.5.3" + } + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "dev": true, + "requires": { + "acorn": "4.0.13" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "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.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "art": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/art/-/art-0.10.1.tgz", + "integrity": "sha1-OFQYg+OZIlxeGT/yRujxV897IUY=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "requires": { + "lodash": "4.17.4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "babel-code-frame": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", + "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", + "requires": { + "babel-code-frame": "6.22.0", + "babel-generator": "6.25.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "convert-source-map": "1.5.0", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.6" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + } + } + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz", + "integrity": "sha1-CteRfjPI11HmRtrKTnfMGTd9LLw=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "esutils": "2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-define-map": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", + "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", + "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-jest": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-19.0.0.tgz", + "integrity": "sha1-WTI87ZmjqE01naIZyogQdP/Gzj8=", + "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-plugin-istanbul": "4.1.4", + "babel-preset-jest": "19.0.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-external-helpers": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz", + "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz", + "integrity": "sha1-GN3oS/POMp/d8/QQP66SFFbY5Yc=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "istanbul-lib-instrument": "1.7.4", + "test-exclude": "4.1.1" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz", + "integrity": "sha1-SuKgTqYSpuc2UfP95SwXiZEwS+o=", + "dev": true + }, + "babel-plugin-react-transform": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz", + "integrity": "sha1-UVu/qZaJOYEULZCx+bFjXeKZUQk=", + "requires": { + "lodash": "4.17.4" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz", + "integrity": "sha1-Gew2yxSGtZ+fRorfpCzhOQjKKZk=", + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", + "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.24.1", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", + "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-es3-member-expression-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz", + "integrity": "sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es3-property-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz", + "integrity": "sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz", + "integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "requires": { + "babel-helper-builder-react-jsx": "6.24.1", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", + "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", + "requires": { + "regenerator-transform": "0.9.11" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-polyfill": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", + "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", + "requires": { + "babel-runtime": "6.23.0", + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-preset-es2015-node": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz", + "integrity": "sha1-YLIxVwJLDP6/OmNVTLBe4DW05V8=", + "requires": { + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "semver": "5.3.0" + } + }, + "babel-preset-fbjs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz", + "integrity": "sha512-6XVQwlO26V5/0P9s2Eje8Epqkv/ihaMJ798+W98ktOA8fCn2IFM6wEi7CDW3fTbKFZ/8fDGvGZH01B6GSuNiWA==", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es3-member-expression-literals": "6.22.0", + "babel-plugin-transform-es3-property-literals": "6.22.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.23.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1" + } + }, + "babel-preset-jest": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz", + "integrity": "sha1-ItZyAdAjJKGVgRKI6zgpS7PKw5Y=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "19.0.0" + } + }, + "babel-preset-react-native": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-native/-/babel-preset-react-native-1.9.1.tgz", + "integrity": "sha1-7I43gnRBDXj1UPqfjt1wNT87sv4=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-react-transform": "2.0.2", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.23.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-plugin-transform-regenerator": "6.24.1", + "react-transform-hmr": "1.0.4" + } + }, + "babel-register": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "requires": { + "babel-core": "6.25.0", + "babel-runtime": "6.23.0", + "core-js": "2.4.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15" + }, + "dependencies": { + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + } + } + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.17.4", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + }, + "base64-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", + "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg=" + }, + "basic-auth": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" + }, + "basic-auth-connect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=" + }, + "batch": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "body-parser": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz", + "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=", + "requires": { + "bytes": "2.1.0", + "content-type": "1.0.2", + "debug": "2.2.0", + "depd": "1.0.1", + "http-errors": "1.3.1", + "iconv-lite": "0.4.11", + "on-finished": "2.3.0", + "qs": "4.0.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "iconv-lite": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz", + "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "bplist-creator": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.4.tgz", + "integrity": "sha1-SsBJZ4LhJ6hcHSAmpPXrIqev+ZE=", + "requires": { + "stream-buffers": "0.2.6" + } + }, + "bplist-parser": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", + "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "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.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.3.tgz", + "integrity": "sha1-1j2hnuFzMKDiYNKjRCKyGolSAxc=", + "requires": { + "node-int64": "0.4.0" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "bytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q=" + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "ci-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", + "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", + "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", + "requires": { + "mime-db": "1.27.0" + } + }, + "compression": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz", + "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=", + "requires": { + "accepts": "1.2.13", + "bytes": "2.1.0", + "compressible": "2.0.10", + "debug": "2.2.0", + "on-headers": "1.0.1", + "vary": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "connect": { + "version": "2.30.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz", + "integrity": "sha1-jam8vooFTT0xjXTf7JA7XDmhtgk=", + "requires": { + "basic-auth-connect": "1.0.0", + "body-parser": "1.13.3", + "bytes": "2.1.0", + "compression": "1.5.2", + "connect-timeout": "1.6.2", + "content-type": "1.0.2", + "cookie": "0.1.3", + "cookie-parser": "1.3.5", + "cookie-signature": "1.0.6", + "csurf": "1.8.3", + "debug": "2.2.0", + "depd": "1.0.1", + "errorhandler": "1.4.3", + "express-session": "1.11.3", + "finalhandler": "0.4.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "method-override": "2.3.9", + "morgan": "1.6.1", + "multiparty": "3.3.2", + "on-headers": "1.0.1", + "parseurl": "1.3.1", + "pause": "0.1.0", + "qs": "4.0.0", + "response-time": "2.3.2", + "serve-favicon": "2.3.2", + "serve-index": "1.7.3", + "serve-static": "1.10.3", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vhost": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "connect-timeout": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz", + "integrity": "sha1-3ppexh4zoStu2qt7XwYumMWZuI4=", + "requires": { + "debug": "2.2.0", + "http-errors": "1.3.1", + "ms": "0.7.1", + "on-headers": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + }, + "content-type-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", + "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" + }, + "cookie": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU=" + }, + "cookie-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", + "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz", + "integrity": "sha1-+mIuG8OIvyVzCQgta2UgDOZwkLo=" + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "csrf": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", + "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=", + "requires": { + "rndm": "1.2.0", + "tsscmp": "1.0.5", + "uid-safe": "2.1.4" + } + }, + "cssom": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "0.3.2" + } + }, + "csurf": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz", + "integrity": "sha1-I/KhO/HY/OHQyZZYg5RELLqGpWo=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "csrf": "3.0.6", + "http-errors": "1.3.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "dateformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", + "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=" + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "diff": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz", + "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==", + "dev": true + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "requires": { + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.18" + } + }, + "engine.io-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz", + "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "errorhandler": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz", + "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=", + "requires": { + "accepts": "1.3.3", + "escape-html": "1.0.3" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.11", + "negotiator": "0.6.1" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + } + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" + }, + "event-target-shim": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-1.1.1.tgz", + "integrity": "sha1-qG5e5r2qFgVEddp5fM3fDFVphJE=" + }, + "exec-sh": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", + "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA=", + "requires": { + "merge": "1.2.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + }, + "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.1" + } + }, + "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=", + "requires": { + "fill-range": "2.2.3" + } + }, + "express-session": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz", + "integrity": "sha1-XMmPP1/4Ttg1+Ry/CqvQxxB0AK8=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "crc": "3.3.0", + "debug": "2.2.0", + "depd": "1.0.1", + "on-headers": "1.0.1", + "parseurl": "1.3.1", + "uid-safe": "2.0.0", + "utils-merge": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "uid-safe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", + "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", + "requires": { + "base64-url": "1.2.1" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "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" + } + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "2.0.0" + }, + "dependencies": { + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "0.4.0" + } + } + } + }, + "fbjs": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", + "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.13" + } + }, + "fbjs-scripts": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-0.7.1.tgz", + "integrity": "sha1-TxFeIY4kPjrdvw7dqsHjxi9wP6w=", + "requires": { + "babel-core": "6.25.0", + "babel-preset-fbjs": "1.0.0", + "core-js": "1.2.7", + "cross-spawn": "3.0.1", + "gulp-util": "3.0.8", + "object-assign": "4.1.1", + "semver": "5.3.0", + "through2": "2.0.3" + }, + "dependencies": { + "babel-preset-fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-1.0.0.tgz", + "integrity": "sha1-yXLlybMB1OyeeXH0rsPhSsAXqLA=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es3-member-expression-literals": "6.22.0", + "babel-plugin-transform-es3-property-literals": "6.22.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.23.0", + "object-assign": "4.1.1" + } + } + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz", + "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=", + "requires": { + "debug": "2.2.0", + "escape-html": "1.0.2", + "on-finished": "2.3.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "escape-html": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", + "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "for-in": { + "version": "1.0.2", + "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.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.2.0.tgz", + "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + }, + "dependencies": { + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + } + } + }, + "fresh": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "0.3.1", + "has-unicode": "2.0.1", + "lodash.pad": "4.5.1", + "lodash.padend": "4.6.1", + "lodash.padstart": "4.6.1" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.0.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "requires": { + "glogg": "1.0.0" + } + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "requires": { + "sparkles": "1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + }, + "html-encoding-sniffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", + "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", + "dev": true, + "requires": { + "whatwg-encoding": "1.0.1" + } + }, + "http-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==" + }, + "image-size": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz", + "integrity": "sha1-gyQOqy+1sAsEqrjHSwRx6cunrYw=" + }, + "immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.1.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "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=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + }, + "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=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-ci": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "dev": true, + "requires": { + "ci-info": "1.0.0" + } + }, + "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-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "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=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "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.2.2" + } + }, + "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-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, + "isexe": { + "version": "2.0.0", + "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" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.1", + "whatwg-fetch": "2.0.3" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-api": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.11.tgz", + "integrity": "sha1-/MC0YeKzvaceMFFVE4I4doJX2d4=", + "dev": true, + "requires": { + "async": "2.5.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.0.7", + "istanbul-lib-instrument": "1.7.4", + "istanbul-lib-report": "1.1.1", + "istanbul-lib-source-maps": "1.2.1", + "istanbul-reports": "1.1.1", + "js-yaml": "3.9.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", + "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz", + "integrity": "sha1-6f2SDkdn89Ge3HZeLWs/XMvQ7qg=", + "dev": true, + "requires": { + "babel-generator": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", + "dev": true, + "requires": { + "debug": "2.6.8", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.1", + "source-map": "0.5.6" + } + }, + "istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-P8G873A0kW24XRlxHVGhMJBhQ8gWAec+dae7ZxOBzxT4w+a9ATSPvRVK3LB1RAJ9S8bg2tOyWHAGW40Zd2dKfw==", + "dev": true, + "requires": { + "handlebars": "4.0.10" + } + }, + "jest": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-19.0.2.tgz", + "integrity": "sha1-t5T6r4/0Yec4jyi+71WaVPILLBA=", + "dev": true, + "requires": { + "jest-cli": "19.0.2" + }, + "dependencies": { + "jest-cli": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-19.0.2.tgz", + "integrity": "sha1-zDYgtirKxfLZOlSMtu9pfU7IVEM=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "callsites": "2.0.0", + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "is-ci": "1.0.10", + "istanbul-api": "1.1.11", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-instrument": "1.7.4", + "jest-changed-files": "19.0.2", + "jest-config": "19.0.4", + "jest-environment-jsdom": "19.0.2", + "jest-haste-map": "19.0.0", + "jest-jasmine2": "19.0.2", + "jest-message-util": "19.0.0", + "jest-regex-util": "19.0.0", + "jest-resolve-dependencies": "19.0.0", + "jest-runtime": "19.0.4", + "jest-snapshot": "19.0.2", + "jest-util": "19.0.2", + "micromatch": "2.3.11", + "node-notifier": "5.1.2", + "slash": "1.0.0", + "string-length": "1.0.1", + "throat": "3.2.0", + "which": "1.2.14", + "worker-farm": "1.4.1", + "yargs": "6.6.0" + } + } + } + }, + "jest-changed-files": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-19.0.2.tgz", + "integrity": "sha1-FsVMhMMnC+QI4G0uivPz43qIWCQ=", + "dev": true + }, + "jest-config": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-19.0.4.tgz", + "integrity": "sha1-QpgCEdRkF+kcp6v/0IbCcCNPc/0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "jest-environment-jsdom": "19.0.2", + "jest-environment-node": "19.0.2", + "jest-jasmine2": "19.0.2", + "jest-regex-util": "19.0.0", + "jest-resolve": "19.0.2", + "jest-validate": "19.0.2", + "pretty-format": "19.0.0" + } + }, + "jest-diff": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-19.0.0.tgz", + "integrity": "sha1-0VY8/FbItgIymI+8BdTRbtkPBjw=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "diff": "3.3.0", + "jest-matcher-utils": "19.0.0", + "pretty-format": "19.0.0" + } + }, + "jest-environment-jsdom": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz", + "integrity": "sha1-ztqFnEpLlKs15N59q1S5JvKT5KM=", + "dev": true, + "requires": { + "jest-mock": "19.0.0", + "jest-util": "19.0.2", + "jsdom": "9.12.0" + } + }, + "jest-environment-node": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-19.0.2.tgz", + "integrity": "sha1-boQHnbh+0h0MBeH5Zp8gexFv6Zs=", + "dev": true, + "requires": { + "jest-mock": "19.0.0", + "jest-util": "19.0.2" + } + }, + "jest-file-exists": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-file-exists/-/jest-file-exists-19.0.0.tgz", + "integrity": "sha1-zKLlh6EeyS4kz+qz+KlNZX8/zrg=", + "dev": true + }, + "jest-haste-map": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-19.0.0.tgz", + "integrity": "sha1-rd4Atisf4EQyoQSzJU/FAEUUtV4=", + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "micromatch": "2.3.11", + "sane": "1.5.0", + "worker-farm": "1.4.1" + }, + "dependencies": { + "bser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", + "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", + "requires": { + "node-int64": "0.4.0" + } + }, + "sane": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-1.5.0.tgz", + "integrity": "sha1-pK3q52TQSGIeyyfV+ez1ExAZOfM=", + "requires": { + "anymatch": "1.3.0", + "exec-sh": "0.2.0", + "fb-watchman": "1.9.2", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.10.0" + }, + "dependencies": { + "fb-watchman": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", + "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", + "requires": { + "bser": "1.0.2" + } + } + } + } + } + }, + "jest-jasmine2": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz", + "integrity": "sha1-FnmRrIJZgfsagArxJug6/MqDLHM=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jest-matcher-utils": "19.0.0", + "jest-matchers": "19.0.0", + "jest-message-util": "19.0.0", + "jest-snapshot": "19.0.2" + } + }, + "jest-matcher-utils": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz", + "integrity": "sha1-Xs2bY1ZdKwAfYfv37Ex/U3lkVk0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "pretty-format": "19.0.0" + } + }, + "jest-matchers": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-19.0.0.tgz", + "integrity": "sha1-x07Mbr/sBvOEdnuk1vpKQtZ1V1Q=", + "dev": true, + "requires": { + "jest-diff": "19.0.0", + "jest-matcher-utils": "19.0.0", + "jest-message-util": "19.0.0", + "jest-regex-util": "19.0.0" + } + }, + "jest-message-util": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-19.0.0.tgz", + "integrity": "sha1-cheWuJwOTXYWBvm6jLgoo7YkZBY=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "micromatch": "2.3.11" + } + }, + "jest-mock": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-19.0.0.tgz", + "integrity": "sha1-ZwOGQelgerLOCOxKjLg6q7yJnQE=", + "dev": true + }, + "jest-regex-util": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-19.0.0.tgz", + "integrity": "sha1-t3VFhxEq7eFFZRC7H2r+dO9ZhpE=", + "dev": true + }, + "jest-resolve": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-19.0.2.tgz", + "integrity": "sha1-V5NXXeTweuwy99f/DGwYGWPu+zw=", + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "jest-haste-map": "19.0.0", + "resolve": "1.3.3" + } + }, + "jest-resolve-dependencies": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz", + "integrity": "sha1-p0GtH6CUFA5k7PJkKlBPg07OIu4=", + "dev": true, + "requires": { + "jest-file-exists": "19.0.0" + } + }, + "jest-runtime": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-19.0.4.tgz", + "integrity": "sha1-8WfZ8TR3UvICc2EGeSZIU0n8wkU=", + "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-jest": "19.0.0", + "babel-plugin-istanbul": "4.1.4", + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "jest-config": "19.0.4", + "jest-file-exists": "19.0.0", + "jest-haste-map": "19.0.0", + "jest-regex-util": "19.0.0", + "jest-resolve": "19.0.2", + "jest-util": "19.0.2", + "json-stable-stringify": "1.0.1", + "micromatch": "2.3.11", + "strip-bom": "3.0.0", + "yargs": "6.6.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "jest-snapshot": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-19.0.2.tgz", + "integrity": "sha1-nBshYhT3GHw4v9XHCx76sWsP9Qs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "jest-diff": "19.0.0", + "jest-file-exists": "19.0.0", + "jest-matcher-utils": "19.0.0", + "jest-util": "19.0.2", + "natural-compare": "1.4.0", + "pretty-format": "19.0.0" + } + }, + "jest-util": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-19.0.2.tgz", + "integrity": "sha1-4KAjKiq55rK1Nmi9s1NMK1l37UE=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "jest-file-exists": "19.0.0", + "jest-message-util": "19.0.0", + "jest-mock": "19.0.0", + "jest-validate": "19.0.2", + "leven": "2.1.0", + "mkdirp": "0.5.1" + } + }, + "jest-validate": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-19.0.2.tgz", + "integrity": "sha1-3FNN9fEnjVtj3zKxQkHU2/ckTAw=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "jest-matcher-utils": "19.0.0", + "leven": "2.1.0", + "pretty-format": "19.0.0" + } + }, + "joi": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.18.1", + "topo": "1.1.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", + "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdom": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "dev": true, + "requires": { + "abab": "1.0.3", + "acorn": "4.0.13", + "acorn-globals": "3.1.0", + "array-equal": "1.0.0", + "content-type-parser": "1.0.1", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.8.1", + "html-encoding-sniffer": "1.0.1", + "nwmatcher": "1.4.1", + "parse5": "1.5.1", + "request": "2.81.0", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.2", + "webidl-conversions": "4.0.1", + "whatwg-encoding": "1.0.1", + "whatwg-url": "4.8.0", + "xml-name-validator": "2.0.1" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "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=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "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" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "left-pad": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.1.3.tgz", + "integrity": "sha1-YS9hwDPzqeCOk58crr7qQbbzGZo=" + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "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=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=" + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.4" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=" + }, + "method-override": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.9.tgz", + "integrity": "sha1-vRUfLONM8Bp2ykAKuVwBKxAtj3E=", + "requires": { + "debug": "2.6.8", + "methods": "1.1.2", + "parseurl": "1.3.1", + "vary": "1.1.1" + }, + "dependencies": { + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "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.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=" + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + }, + "mime-types": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", + "requires": { + "mime-db": "1.23.0" + }, + "dependencies": { + "mime-db": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=" + } + } + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "moment": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + }, + "morgan": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz", + "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=", + "requires": { + "basic-auth": "1.0.4", + "debug": "2.2.0", + "depd": "1.0.1", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multiparty": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz", + "integrity": "sha1-Nd5oBNwZZD5SSfPT473GyM4wHT8=", + "requires": { + "readable-stream": "1.1.14", + "stream-counter": "0.2.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "requires": { + "duplexer2": "0.0.2" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", + "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" + }, + "node-fetch": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", + "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-notifier": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.1.2.tgz", + "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=", + "dev": true, + "requires": { + "growly": "1.3.0", + "semver": "5.3.0", + "shellwords": "0.1.0", + "which": "1.2.14" + } + }, + "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==", + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.0.2" + } + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "requires": { + "ansi": "0.3.1", + "are-we-there-yet": "1.1.4", + "gauge": "1.2.7" + } + }, + "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=" + }, + "nwmatcher": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz", + "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "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.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "opn": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", + "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", + "requires": { + "object-assign": "4.1.1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "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", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "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=" + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "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.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "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=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pause": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz", + "integrity": "sha1-68ikqGGf8LioGsFRPDQ0/0af23Q=" + }, + "pegjs": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.9.0.tgz", + "integrity": "sha1-9q76LjzlYWkgjlIXnf5B+JFBo2k=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "plist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz", + "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=", + "requires": { + "base64-js": "0.0.8", + "util-deprecate": "1.0.2", + "xmlbuilder": "4.0.0", + "xmldom": "0.1.27" + }, + "dependencies": { + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "pretty-format": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-19.0.0.tgz", + "integrity": "sha1-VlMNMqy5ij+khRxOK503tCBoTIQ=", + "dev": true, + "requires": { + "ansi-styles": "3.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + } + } + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "2.0.6" + } + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "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.2.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" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "range-parser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", + "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" + }, + "raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + } + } + }, + "react": { + "version": "16.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.6.tgz", + "integrity": "sha1-LMsa+0QlzMEveKEjpmby5MFBrbk=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "react-clone-referenced-element": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz", + "integrity": "sha1-K7qMaUBMXkqUQ5hgC8xMlB+GBoI=" + }, + "react-deep-force-update": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz", + "integrity": "sha1-+RG1vh0qb+OHUH3W6adnqikktMc=" + }, + "react-devtools-core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-2.5.0.tgz", + "integrity": "sha512-sLlDHiY+DoOnzEXdLwSGxob3MtiIwM54s6FBbVAc/iOorNd8Nv1aVUTsZpTnJXDYa8p5VPNdCR4ATQ0HcIBh+Q==", + "requires": { + "shell-quote": "1.6.1", + "ws": "2.3.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + }, + "ws": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz", + "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=", + "requires": { + "safe-buffer": "5.0.1", + "ultron": "1.1.0" + } + } + } + }, + "react-native": { + "version": "0.43.3", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.43.3.tgz", + "integrity": "sha1-T44NjYiCdVN4nALvIcvBr7aEdNA=", + "requires": { + "absolute-path": "0.0.0", + "art": "0.10.1", + "async": "2.5.0", + "babel-core": "6.25.0", + "babel-generator": "6.25.0", + "babel-plugin-external-helpers": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.16.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.23.0", + "babel-polyfill": "6.23.0", + "babel-preset-es2015-node": "6.1.1", + "babel-preset-fbjs": "2.1.4", + "babel-preset-react-native": "1.9.2", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "base64-js": "1.2.1", + "bser": "1.0.3", + "chalk": "1.1.3", + "commander": "2.11.0", + "concat-stream": "1.6.0", + "connect": "2.30.2", + "core-js": "2.4.1", + "debug": "2.6.8", + "denodeify": "1.2.1", + "event-target-shim": "1.1.1", + "fbjs": "0.8.12", + "fbjs-scripts": "0.7.1", + "form-data": "2.2.0", + "fs-extra": "0.26.7", + "glob": "5.0.15", + "graceful-fs": "4.1.11", + "image-size": "0.3.5", + "immutable": "3.7.6", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "jest-haste-map": "19.0.0", + "joi": "6.10.1", + "json-stable-stringify": "1.0.1", + "json5": "0.4.0", + "left-pad": "1.1.3", + "lodash": "4.17.4", + "mime": "1.3.6", + "mime-types": "2.1.11", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "node-fetch": "1.7.1", + "npmlog": "2.0.4", + "opn": "3.0.3", + "optimist": "0.6.1", + "plist": "1.2.0", + "promise": "7.3.1", + "react-clone-referenced-element": "1.0.1", + "react-devtools-core": "2.5.0", + "react-timer-mixin": "0.13.3", + "react-transform-hmr": "1.0.4", + "rebound": "0.0.13", + "regenerator-runtime": "0.9.6", + "request": "2.81.0", + "rimraf": "2.6.1", + "sane": "1.4.1", + "semver": "5.3.0", + "shell-quote": "1.6.1", + "source-map": "0.5.6", + "stacktrace-parser": "0.1.4", + "temp": "0.8.3", + "throat": "3.2.0", + "uglify-js": "2.8.29", + "whatwg-fetch": "1.1.1", + "wordwrap": "1.0.0", + "worker-farm": "1.4.1", + "write-file-atomic": "1.3.4", + "ws": "1.1.4", + "xcode": "0.8.9", + "xmldoc": "0.4.0", + "xpipe": "1.0.5", + "yargs": "6.6.0" + }, + "dependencies": { + "babel-preset-react-native": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz", + "integrity": "sha1-sird0uNV/zs5Zxt5voB+Ut+hRfI=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-react-transform": "2.0.2", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.23.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-plugin-transform-regenerator": "6.24.1", + "react-transform-hmr": "1.0.4" + } + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + }, + "whatwg-fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", + "integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk=" + } + } + }, + "react-native-sm-transformer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-native-sm-transformer/-/react-native-sm-transformer-1.0.3.tgz", + "integrity": "sha1-7zzqH6TBgVzozv2/++u24nReSFI=", + "dev": true + }, + "react-proxy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", + "integrity": "sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=", + "requires": { + "lodash": "4.17.4", + "react-deep-force-update": "1.0.1" + } + }, + "react-test-renderer": { + "version": "16.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.0.0-alpha.6.tgz", + "integrity": "sha1-wDLe8NyDGc7jnKpOQ3OmABnLN4Y=", + "dev": true, + "requires": { + "fbjs": "0.8.12", + "object-assign": "4.1.1" + } + }, + "react-timer-mixin": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz", + "integrity": "sha1-Dai5+AfsB9w+hU0ILHN8ZWBbPSI=" + }, + "react-transform-hmr": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz", + "integrity": "sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=", + "requires": { + "global": "4.3.2", + "react-proxy": "1.1.8" + } + }, + "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.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.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.1.2", + "read-pkg": "1.1.0" + } + }, + "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.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "rebound": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/rebound/-/rebound-0.0.13.tgz", + "integrity": "sha1-SiJSVMr32nVnl7GcWBe/enlB+sE=" + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=" + }, + "regenerator-runtime": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz", + "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck=" + }, + "regenerator-transform": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", + "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "private": "0.1.7" + } + }, + "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" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "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=" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.11", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + }, + "dependencies": { + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + }, + "dependencies": { + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + } + } + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "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=" + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "response-time": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=", + "requires": { + "depd": "1.1.0", + "on-headers": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" + } + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "requires": { + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=" + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "requires": { + "once": "1.4.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sane": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-1.4.1.tgz", + "integrity": "sha1-iPdj10BA9fDCVrYWPbOZvxEKxxU=", + "requires": { + "exec-sh": "0.2.0", + "fb-watchman": "1.9.2", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.10.0" + }, + "dependencies": { + "bser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", + "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", + "requires": { + "node-int64": "0.4.0" + } + }, + "fb-watchman": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", + "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", + "requires": { + "bser": "1.0.2" + } + } + } + }, + "sax": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz", + "integrity": "sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA=" + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "send": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", + "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", + "requires": { + "debug": "2.2.0", + "depd": "1.1.0", + "destroy": "1.0.4", + "escape-html": "1.0.3", + "etag": "1.7.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "mime": "1.3.4", + "ms": "0.7.1", + "on-finished": "2.3.0", + "range-parser": "1.0.3", + "statuses": "1.2.1" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "statuses": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" + } + } + }, + "serve-favicon": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", + "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=", + "requires": { + "etag": "1.7.0", + "fresh": "0.3.0", + "ms": "0.7.2", + "parseurl": "1.3.1" + }, + "dependencies": { + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "serve-index": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz", + "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=", + "requires": { + "accepts": "1.2.13", + "batch": "0.5.3", + "debug": "2.2.0", + "escape-html": "1.0.3", + "http-errors": "1.3.1", + "mime-types": "2.1.11", + "parseurl": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "serve-static": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", + "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", + "requires": { + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.13.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shellwords": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.0.tgz", + "integrity": "sha1-Zq/Ue2oSky2Qccv9mKUueFzQuhQ=", + "dev": true + }, + "simple-plist": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.1.4.tgz", + "integrity": "sha1-EOtRtH4zxVbrjsRtXuZNZOcX210=", + "requires": { + "bplist-creator": "0.0.4", + "bplist-parser": "0.0.6", + "plist": "1.2.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io-client": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", + "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.4", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "requires": { + "source-map": "0.5.6" + } + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=" + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "stacktrace-parser": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz", + "integrity": "sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4=" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "stream-buffers": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-0.2.6.tgz", + "integrity": "sha1-GBwI1bs2kARfaUAbmuanoM8zE/w=" + }, + "stream-counter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", + "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", + "requires": { + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "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.1" + } + }, + "string-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", + "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "dev": true, + "requires": { + "strip-ansi": "3.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + } + } + }, + "test-exclude": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", + "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "throat": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", + "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "topo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "requires": { + "hoek": "2.16.3" + } + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tslib": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", + "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=", + "dev": true + }, + "tslint": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.5.0.tgz", + "integrity": "sha1-EOjas+MGH6YelELozuOYKs8gpqo=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "colors": "1.1.2", + "commander": "2.11.0", + "diff": "3.3.0", + "glob": "7.1.2", + "minimatch": "3.0.4", + "resolve": "1.3.3", + "semver": "5.3.0", + "tslib": "1.7.1", + "tsutils": "2.7.1" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=" + }, + "tsutils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.7.1.tgz", + "integrity": "sha1-QRoOlGZSWisoaSYKVWINcpIVXiQ=", + "dev": true, + "requires": { + "tslib": "1.7.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.15" + }, + "dependencies": { + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + } + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.2.tgz", + "integrity": "sha1-YGAiUIR5tV/6NotY/uljoD39eww=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.13.tgz", + "integrity": "sha1-zZ3S+GSTs/RNvu7zeA/adMXuFL4=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "uid-safe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", + "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=", + "requires": { + "random-bytes": "1.0.0" + } + }, + "ultron": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", + "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", + "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } + }, + "vhost": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz", + "integrity": "sha1-L7HezUxGaqiLD5NBrzPcGv8keNU=" + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.11" + } + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=" + }, + "webidl-conversions": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", + "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", + "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", + "dev": true, + "requires": { + "iconv-lite": "0.4.13" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + } + } + }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + }, + "whatwg-url": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", + "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", + "dev": true, + "requires": { + "tr46": "0.0.3", + "webidl-conversions": "3.0.1" + }, + "dependencies": { + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + } + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "worker-farm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.4.1.tgz", + "integrity": "sha512-tgFAtgOYLPutkAyzgpS6VJFL5HY+0ui1Tvua+fITgz8ByaJTMFGtazR6xxQfwfiAcbwE+2fLG/K49wc2TfwCNw==", + "requires": { + "errno": "0.1.4", + "xtend": "4.0.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "ws": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", + "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + }, + "dependencies": { + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + } + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + }, + "xcode": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-0.8.9.tgz", + "integrity": "sha1-7Gdl9w6dzMzJ9umlubTn6BS0zzU=", + "requires": { + "node-uuid": "1.4.7", + "pegjs": "0.9.0", + "simple-plist": "0.1.4" + }, + "dependencies": { + "node-uuid": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=" + } + } + }, + "xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "dev": true + }, + "xmlbuilder": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz", + "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=", + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, + "xmldoc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-0.4.0.tgz", + "integrity": "sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg=", + "requires": { + "sax": "1.1.6" + } + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + }, + "xpipe": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz", + "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "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": "4.2.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/client/shared/src/util/sensorsApi.ts b/client/shared/src/util/sensorsApi.ts new file mode 100644 index 0000000..5b115d8 --- /dev/null +++ b/client/shared/src/util/sensorsApi.ts @@ -0,0 +1,15 @@ +/// +/// + +import { CodegenRuntime } from './CodegenRuntime'; + +export namespace pxsimsensors { + export function fooImpl(arg:string): void { + console.log('fooImpl called'); + // do whatever the block does + } + + export function listNearbyDevicesImpl(): void { + // TODO: find nearby devices and return them as an array + } +} \ No newline at end of file diff --git a/libs/core/pxt.json b/libs/core/pxt.json index f24c7fd..0d83950 100644 --- a/libs/core/pxt.json +++ b/libs/core/pxt.json @@ -10,7 +10,8 @@ "ui.ts", "data.ts", "style.ts", - "time.ts" + "time.ts", + "sensors.ts" ], "testFiles": [ "test.ts" diff --git a/libs/core/sensors.ts b/libs/core/sensors.ts new file mode 100644 index 0000000..732d23d --- /dev/null +++ b/libs/core/sensors.ts @@ -0,0 +1,19 @@ +//% color=#7fff00 weight=100 +namespace Sensors { + /** + * This is the help text for the Foo block + * @param arg help text for arg goes here + **/ + //% weight=100 + //% color=#935BA5 + //% blockId=sensors_foo + //% block="Foo arg %arg" + //% subcategory=Bluetooth + export function foo(arg: string) { + fooImpl(arg); + } + + export function listNearbyDevices() { + listNearbyDevicesImpl(); + } +} \ No newline at end of file diff --git a/libs/core/sims.d.ts b/libs/core/sims.d.ts index 1df02b6..36bcd46 100644 --- a/libs/core/sims.d.ts +++ b/libs/core/sims.d.ts @@ -218,6 +218,12 @@ declare namespace Time { //% shim=Time::whenAppResetImpl function whenAppResetImpl(body: () => void): void; +} +declare namespace Sensors { + //% + //% shim=Sensors::fooImpl + function fooImpl(arg: string): void; + } // Auto-generated. Do not edit. Really. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..49a2c92 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11723 @@ +{ + "name": "blapp", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/jquery": { + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.48.tgz", + "integrity": "sha512-nNLzUrVjaRV/Ds1eHZLYTd7IZxs38cwwLSaqMJj8OTXY8xNUbxSK69bi9cMLvQ7dm/IBeQ1wHwQ0S1uYa0rd2w==", + "dev": true + }, + "@types/node": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.14.tgz", + "integrity": "sha512-lrtgE/5FeTdcuxgsDbLUIFJ33dTp4TkbKkTDZt/ueUMeqmGYqJRQd908q5Yj9EzzWSMonEhMr1q/CQlgVGEt4w==", + "dev": true + }, + "@types/react": { + "version": "15.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-15.0.21.tgz", + "integrity": "sha1-KdhJQnI3wUY6v7ezcHVe4+W1s3U=", + "dev": true + }, + "@types/react-bootstrap": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/react-bootstrap/-/react-bootstrap-0.0.48.tgz", + "integrity": "sha1-3wMJDi3D9RVtWPTKCgTI2IuiZ3g=", + "dev": true, + "requires": { + "@types/react": "15.0.21" + } + }, + "@types/react-dom": { + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-0.14.23.tgz", + "integrity": "sha1-zs/PrXVLTCdl/l0puBswGImtbC4=", + "dev": true, + "requires": { + "@types/react": "15.0.21" + } + }, + "@types/react-native": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.43.0.tgz", + "integrity": "sha1-7uYEBnAMD99fF4lh8IWBDwaiSeM=", + "dev": true, + "requires": { + "@types/react": "15.0.21" + } + }, + "@types/react-transition-group": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-1.1.0.tgz", + "integrity": "sha1-GexL+hyxgJ7LxFmdDDjS6f+xm/4=", + "dev": true, + "requires": { + "@types/react": "15.0.21" + } + }, + "@types/socket.io": { + "version": "1.4.29", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-1.4.29.tgz", + "integrity": "sha1-hqazqat4z5qQDO74W5totr6oZxI=", + "dev": true, + "requires": { + "@types/node": "8.0.14" + } + }, + "@types/socket.io-client": { + "version": "1.4.29", + "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.29.tgz", + "integrity": "sha1-+HQwcM7pMXXjbgtqd6ivc+WMyzI=", + "dev": true + }, + "@types/uuid": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-2.0.30.tgz", + "integrity": "sha512-nmSJ0AL2mZAi68dYb7nKSIJ9YiM68eToP3Ugz66Ou7qkSatIptDM6CvOUmj4epMKWvO9gr9fFBxEEJkromp1Qg==", + "dev": true, + "requires": { + "@types/node": "8.0.14" + } + }, + "abab": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", + "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "dev": true, + "requires": { + "acorn": "4.0.13" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "animated": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/animated/-/animated-0.2.0.tgz", + "integrity": "sha1-Gg6W8Jez+8W2TX7dxyO8wKb5djM=", + "requires": { + "invariant": "2.2.2", + "normalize-css-color": "1.0.2" + } + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-html": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.5.tgz", + "integrity": "sha1-DcqloIEgaGa8JAo7dzoYTqO4i2Q=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "ansicolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", + "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=", + "dev": true + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "aria-query": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.3.0.tgz", + "integrity": "sha1-y4qZhOKGJxHIPICt5bj1yg3itGc=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "asn1.js": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "requires": { + "bn.js": "4.11.7", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "requires": { + "acorn": "4.0.13" + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "autoprefixer": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.2.tgz", + "integrity": "sha1-Fyqwe5mK6blXUwkopZpAvlSkUCM=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000702", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "babel-code-frame": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.22.1", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.22.1.tgz", + "integrity": "sha1-nF/WWLoXctKNch9tJdlo/HriFkg=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-generator": "6.25.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "convert-source-map": "1.1.3", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.6" + } + }, + "babel-eslint": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.1.1.tgz", + "integrity": "sha1-imqITwhapwYK9pz8dzQcL5k3D7I=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "lodash.pickby": "4.6.0" + } + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz", + "integrity": "sha1-CteRfjPI11HmRtrKTnfMGTd9LLw=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "esutils": "2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-define-map": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", + "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", + "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-jest": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-18.0.0.tgz", + "integrity": "sha1-F+u6jLMoXJBthZ6HB+Tnl5X7ZeM=", + "dev": true, + "requires": { + "babel-core": "6.22.1", + "babel-plugin-istanbul": "3.1.2", + "babel-preset-jest": "18.0.0" + } + }, + "babel-loader": { + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.2.10.tgz", + "integrity": "sha1-re/CskIyDNXRXmWzHOoOixsC1LA=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "loader-utils": "0.2.17", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-istanbul": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-3.1.2.tgz", + "integrity": "sha1-EdWr3hhCXsJLXWSMfgtdJc01SiI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "istanbul-lib-instrument": "1.7.4", + "object-assign": "4.1.1", + "test-exclude": "3.3.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-18.0.0.tgz", + "integrity": "sha1-QVDnDsq1YObnNErchJSYBy004So=", + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz", + "integrity": "sha1-qnj4E0SVx94GwJcRi6BhhE4dwdg=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", + "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.24.1", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", + "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.24.1", + "babel-runtime": "6.23.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz", + "integrity": "sha1-HUGbVeaNLk9kpf8zc71n1zyOg7w=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-constant-elements": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.22.0.tgz", + "integrity": "sha1-SvRW+A0oPovgDwDxKFI1Te+gjuE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "6.24.1", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", + "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", + "dev": true, + "requires": { + "regenerator-transform": "0.9.11" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.22.0.tgz", + "integrity": "sha1-EJaNdgu/ZRckMIHux3jhD6goVRw=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } + }, + "babel-preset-env": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.2.1.tgz", + "integrity": "sha1-ZZF49U33SnR2X3lr5NKQtb7rP18=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.24.1", + "browserslist": "1.7.7", + "electron-to-chromium": "1.3.16", + "invariant": "2.2.2" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.24.1", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.24.1" + } + }, + "babel-preset-es2016": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz", + "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=", + "dev": true, + "requires": { + "babel-plugin-transform-exponentiation-operator": "6.24.1" + } + }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } + }, + "babel-preset-jest": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-18.0.0.tgz", + "integrity": "sha1-hPr4yj7GWrp9Xj9Zu67ZNaskBJ4=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "18.0.0" + } + }, + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } + }, + "babel-preset-react-app": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-2.2.0.tgz", + "integrity": "sha1-MUO88xYEn3i1+dBCL9eCLKRxXKQ=", + "dev": true, + "requires": { + "babel-plugin-transform-class-properties": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.22.0", + "babel-plugin-transform-react-constant-elements": "6.22.0", + "babel-plugin-transform-react-jsx": "6.22.0", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-plugin-transform-regenerator": "6.22.0", + "babel-plugin-transform-runtime": "6.22.0", + "babel-preset-env": "1.2.1", + "babel-preset-react": "6.22.0", + "babel-runtime": "6.22.0" + }, + "dependencies": { + "babel-plugin-transform-react-jsx": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz", + "integrity": "sha1-SFVrfdTD/pfRyUO81U/D8lYcGBc=", + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "6.24.1", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz", + "integrity": "sha1-ZXQFk6MZxEUiFXU41pC4QJRhfqY=", + "dev": true, + "requires": { + "regenerator-transform": "0.9.8" + } + }, + "babel-preset-react": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.22.0.tgz", + "integrity": "sha1-e8l+LXPuxLmA+2tOTgiE6BzNwWU=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.22.0", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0" + } + }, + "babel-runtime": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.22.0.tgz", + "integrity": "sha1-HPi0rGfHek3bDbKuH3TeUqxMphE=", + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + } + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + }, + "regenerator-transform": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.8.tgz", + "integrity": "sha1-D4i7K8A5Mt23trcxLmgHjwECbWw=", + "dev": true, + "requires": { + "babel-runtime": "6.22.0", + "babel-types": "6.25.0", + "private": "0.1.7" + } + } + } + }, + "babel-register": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-runtime": "6.23.0", + "core-js": "2.4.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15" + }, + "dependencies": { + "babel-core": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", + "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-generator": "6.25.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "convert-source-map": "1.1.3", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.6" + } + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + } + } + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.17.4", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", + "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", + "dev": true + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "bindings": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", + "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", + "optional": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + }, + "bn.js": { + "version": "4.11.7", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz", + "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "bowser": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.7.1.tgz", + "integrity": "sha1-pN6PGKGg3JUx6yqSoVIftqm6lqU=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "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=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "requires": { + "combine-source-map": "0.7.2", + "defined": "1.0.0", + "JSONStream": "1.3.1", + "through2": "2.0.3", + "umd": "3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "browserify": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", + "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", + "requires": { + "assert": "1.4.1", + "browser-pack": "6.0.2", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.1", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "0.0.1", + "inherits": "2.0.3", + "insert-module-globals": "7.0.1", + "JSONStream": "1.3.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.1.2", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.3.3", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } + }, + "browserify-aes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "requires": { + "browserify-aes": "1.0.6", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.0" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.7", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.7", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "requires": { + "pako": "0.2.9" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000702", + "electron-to-chromium": "1.3.16" + } + }, + "bser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", + "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", + "dev": true, + "requires": { + "node-int64": "0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", + "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=", + "dev": true + }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000702", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + } + } + }, + "caniuse-db": { + "version": "1.0.30000702", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000702.tgz", + "integrity": "sha1-pgzTDz70Sue17RLp2bcNS/9jUss=", + "dev": true + }, + "cardinal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", + "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", + "dev": true, + "requires": { + "ansicolors": "0.2.1", + "redeyed": "1.0.1" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.4.tgz", + "integrity": "sha1-iq7dVpmobKwrNM9A2bQUV1iXhHI=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chain-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.0.tgz", + "integrity": "sha1-DUqzfn4Y6tC9xHuSB2QRjOWHM9w=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "ci-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", + "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "dev": true + }, + "clap": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", + "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + }, + "clean-css": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.7.tgz", + "integrity": "sha1-ua6k+FZ5iJzz6ui0A0nsTr390DI=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cli-usage": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.4.tgz", + "integrity": "sha1-fAHg3HBsI0s5yTODjI4gshdXduI=", + "dev": true, + "requires": { + "marked": "0.3.6", + "marked-terminal": "1.7.0" + } + }, + "cli-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.2", + "color-convert": "1.9.0", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + }, + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.6" + } + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", + "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "compression": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", + "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "bytes": "2.5.0", + "compressible": "2.0.10", + "debug": "2.6.8", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "content-type-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", + "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", + "dev": true + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.3.tgz", + "integrity": "sha1-lSdx6w3dwcs/ovb75RpSLpOz7go=", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "requires": { + "bn.js": "4.11.7", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "create-react-class": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.0.tgz", + "integrity": "sha1-q0SEl8JlZuHilBPogyB9V8/nvtQ=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.12", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-in-js-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-1.0.3.tgz", + "integrity": "sha1-msfgL3Y8+F2UAXZmVl7WiltfMhU=", + "requires": { + "hyphenate-style-name": "1.0.2" + } + }, + "css-loader": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.1.tgz", + "integrity": "sha1-K6fyATG5NZdJaz6btQB4WknNKeo=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "loader-utils": "0.2.17", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "source-list-map": "0.1.8" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + } + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.2", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.0", + "source-map": "0.5.6" + } + }, + "cssom": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "0.3.2" + } + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.24" + } + }, + "damerau-levenshtein": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", + "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debounce": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.0.2.tgz", + "integrity": "sha1-UDzGdNjX9zcJlmT7dd29NrlibcY=" + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-assign": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", + "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", + "requires": { + "is-obj": "1.0.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "optional": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.5.4" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "requires": { + "JSONStream": "1.3.1", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.3" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-port": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.1.0.tgz", + "integrity": "sha1-/edXRZHqPedERXgmQ8P5IbKkYYw=", + "dev": true, + "requires": { + "debug": "2.6.8" + } + }, + "detective": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", + "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "requires": { + "acorn": "4.0.13", + "defined": "1.0.0" + } + }, + "diff": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz", + "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "requires": { + "bn.js": "4.11.7", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-helpers": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.2.1.tgz", + "integrity": "sha1-MgPgf+0he9H0JLAZc1WC/Deyglo=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dotenv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-2.0.0.tgz", + "integrity": "sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.16", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz", + "integrity": "sha1-0OAmc1dUdwkBrjAaIWZMukXZL30=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.7", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emoji-regex": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.0.tgz", + "integrity": "sha512-Vja85njef5T0kGfRUFkyl0etU9+49L1LNKR5oE41wAGRtJR64/a+JX3I8YCIur/uXj4Kt4cNe5i8bfd58ilgKQ==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.18" + } + }, + "engine.io": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz", + "integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.4" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "engine.io-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz", + "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz", + "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.6" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es5-ext": { + "version": "0.10.24", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", + "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", + "dev": true, + "requires": { + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-iterator": "2.0.1", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.16.1.tgz", + "integrity": "sha1-m8MfxzQWks93LoBgdQj2fXEcVgk=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "chalk": "1.1.3", + "concat-stream": "1.5.2", + "debug": "2.6.8", + "doctrine": "1.5.0", + "escope": "3.6.0", + "espree": "3.4.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.3", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.16.0", + "is-resolvable": "1.0.0", + "js-yaml": "3.7.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-config-react-app": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-0.6.2.tgz", + "integrity": "sha1-7lNcuq+eNXbqFrma/nIDU9hzDsA=", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "dev": true, + "requires": { + "debug": "2.6.8", + "object-assign": "4.1.1", + "resolve": "1.3.3" + } + }, + "eslint-loader": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.6.0.tgz", + "integrity": "sha1-OPmh5sYCpPHz81FiiXJuXSbm4WU=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "loader-utils": "0.2.17", + "object-assign": "4.1.1" + } + }, + "eslint-module-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-1.0.0.tgz", + "integrity": "sha1-xKV/06U+/YQmzC1VUKraubvQX9A=", + "dev": true, + "requires": { + "debug": "2.2.0", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "eslint-plugin-flowtype": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.21.0.tgz", + "integrity": "sha1-pH6Fq83RgdN6M2BUvVUhSa44fZw=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "eslint-plugin-import": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.0.1.tgz", + "integrity": "sha1-3P6WNX1Haz+CJXDULCm+xm9dnFw=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.8", + "doctrine": "1.3.0", + "eslint-import-resolver-node": "0.2.3", + "eslint-module-utils": "1.0.0", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "pkg-up": "1.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.3.0.tgz", + "integrity": "sha1-E+dWgrVVGEJCdvfBc3g0Vu+RPSY=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz", + "integrity": "sha1-d5uw/nsI2lZKQiYkkR3hAGHgSO4=", + "dev": true, + "requires": { + "aria-query": "0.3.0", + "ast-types-flow": "0.0.7", + "damerau-levenshtein": "1.0.4", + "emoji-regex": "6.5.0", + "jsx-ast-utils": "1.4.1", + "object-assign": "4.1.1" + } + }, + "eslint-plugin-react": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.4.1.tgz", + "integrity": "sha1-fRqt50fbFYkvce7h/qSt35e8+is=", + "dev": true, + "requires": { + "doctrine": "1.5.0", + "jsx-ast-utils": "1.4.1" + } + }, + "espree": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", + "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", + "dev": true, + "requires": { + "acorn": "5.1.1", + "acorn-jsx": "3.0.1" + }, + "dependencies": { + "acorn": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", + "dev": true + } + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "requires": { + "create-hash": "1.1.3" + } + }, + "exec-sh": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", + "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA=", + "dev": true, + "requires": { + "merge": "1.2.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "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=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "express": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", + "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "1.1.0", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.4", + "qs": "6.4.0", + "range-parser": "1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extract-text-webpack-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz", + "integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=", + "dev": true, + "requires": { + "async": "1.5.2", + "loader-utils": "0.2.17", + "webpack-sources": "0.1.5" + } + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "requires": { + "websocket-driver": "0.6.5" + } + }, + "fb-watchman": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", + "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", + "dev": true, + "requires": { + "bser": "1.0.2" + } + }, + "fbjs": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", + "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.13" + }, + "dependencies": { + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "2.0.6" + } + } + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.2.2", + "object-assign": "4.1.1" + } + }, + "file-loader": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.0.tgz", + "integrity": "sha1-u+bbdHSsksf1T9wZfPVH6YtrjhI=", + "dev": true, + "requires": { + "loader-utils": "0.2.17" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "filesize": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.3.0.tgz", + "integrity": "sha1-UxSeo0YOOy4CSWKlFkiqVyz5gSI=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", + "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "dev": true, + "requires": { + "debug": "2.6.7", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "requires": { + "colors": "0.6.2", + "commander": "2.1.0" + } + }, + "flat-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "dev": true, + "requires": { + "circular-json": "0.3.1", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "optional": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "forwarded": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", + "dev": true + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "dev": true + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.5.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=" + }, + "fuse.js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-2.6.1.tgz", + "integrity": "sha1-0RjgD5qFn3s1TtT3dAIUJJ4ypXo=" + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "requires": { + "function-bind": "1.1.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "highlight.js": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", + "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", + "dev": true, + "requires": { + "whatwg-encoding": "1.0.1" + } + }, + "html-entities": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.0.tgz", + "integrity": "sha1-QZSMr4XOgv7Tbk5qDtNxpmZDeeI=", + "dev": true + }, + "html-minifier": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.2.tgz", + "integrity": "sha1-1zvD/0SJQkCIGM5gm/P7DqfvTrc=", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.7", + "commander": "2.9.0", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.0.25" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "html-webpack-plugin": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.24.0.tgz", + "integrity": "sha1-U2l86nmp880fjCOaxx+UnVZzyss=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "html-minifier": "3.5.2", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "pretty-error": "2.1.1", + "toposort": "1.0.3" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "http-errors": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", + "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.3.tgz", + "integrity": "sha1-lAOCFHFJuFYIT1U0dS1bWoFozR0=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" + }, + "hyphenate-style-name": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", + "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=" + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==" + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "ignore": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", + "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "optional": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "requires": { + "source-map": "0.5.6" + } + }, + "inline-style-prefixer": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.6.tgz", + "integrity": "sha1-sn/jCbQWijHq84yOjGCrnnwRcx8=", + "requires": { + "bowser": "1.7.1", + "css-in-js-utils": "1.0.3" + } + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.1.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "requires": { + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "1.1.5", + "JSONStream": "1.3.1", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "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=", + "dev": true + }, + "ipaddr.js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", + "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + }, + "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=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-ci": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "dev": true, + "requires": { + "ci-info": "1.0.0" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-my-json-valid": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-resolvable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true, + "requires": { + "tryit": "1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.1", + "whatwg-fetch": "2.0.3" + }, + "dependencies": { + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-api": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.11.tgz", + "integrity": "sha1-/MC0YeKzvaceMFFVE4I4doJX2d4=", + "dev": true, + "requires": { + "async": "2.5.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.0.7", + "istanbul-lib-instrument": "1.7.4", + "istanbul-lib-report": "1.1.1", + "istanbul-lib-source-maps": "1.2.1", + "istanbul-reports": "1.1.1", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + }, + "dependencies": { + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", + "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz", + "integrity": "sha1-6f2SDkdn89Ge3HZeLWs/XMvQ7qg=", + "dev": true, + "requires": { + "babel-generator": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", + "dev": true, + "requires": { + "debug": "2.6.8", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.1", + "source-map": "0.5.6" + }, + "dependencies": { + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + } + } + }, + "istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-P8G873A0kW24XRlxHVGhMJBhQ8gWAec+dae7ZxOBzxT4w+a9ATSPvRVK3LB1RAJ9S8bg2tOyWHAGW40Zd2dKfw==", + "dev": true, + "requires": { + "handlebars": "4.0.10" + } + }, + "jest": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-18.1.0.tgz", + "integrity": "sha1-vOvx4gPe5cKtIJHIBTAKND2ebH0=", + "dev": true, + "requires": { + "jest-cli": "18.1.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "jest-cli": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-18.1.0.tgz", + "integrity": "sha1-Xq027K1CCBfCybqiqnV09jJXs9Y=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "callsites": "2.0.0", + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "is-ci": "1.0.10", + "istanbul-api": "1.1.11", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-instrument": "1.7.4", + "jest-changed-files": "17.0.2", + "jest-config": "18.1.0", + "jest-environment-jsdom": "18.1.0", + "jest-file-exists": "17.0.0", + "jest-haste-map": "18.1.0", + "jest-jasmine2": "18.1.0", + "jest-mock": "18.0.0", + "jest-resolve": "18.1.0", + "jest-resolve-dependencies": "18.1.0", + "jest-runtime": "18.1.0", + "jest-snapshot": "18.1.0", + "jest-util": "18.1.0", + "json-stable-stringify": "1.0.1", + "node-notifier": "4.6.1", + "sane": "1.4.1", + "strip-ansi": "3.0.1", + "throat": "3.2.0", + "which": "1.2.14", + "worker-farm": "1.4.1", + "yargs": "6.6.0" + } + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "jest-changed-files": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-17.0.2.tgz", + "integrity": "sha1-9WV3WHNplvWQpRuH5ck2nZBLp7c=", + "dev": true + }, + "jest-config": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-18.1.0.tgz", + "integrity": "sha1-YRF0Cm1Iqrhv9anmqwuYvZk7b/Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "jest-environment-jsdom": "18.1.0", + "jest-environment-node": "18.1.0", + "jest-jasmine2": "18.1.0", + "jest-mock": "18.0.0", + "jest-resolve": "18.1.0", + "jest-util": "18.1.0", + "json-stable-stringify": "1.0.1" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "jest-diff": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-18.1.0.tgz", + "integrity": "sha1-T/eedN2YjBORlbNl3GXYf2BvSAM=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "diff": "3.3.0", + "jest-matcher-utils": "18.1.0", + "pretty-format": "18.1.0" + } + }, + "jest-environment-jsdom": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-18.1.0.tgz", + "integrity": "sha1-GLQvDE6iuunzbKs2ObHo+MOE4k4=", + "dev": true, + "requires": { + "jest-mock": "18.0.0", + "jest-util": "18.1.0", + "jsdom": "9.12.0" + } + }, + "jest-environment-node": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-18.1.0.tgz", + "integrity": "sha1-TWeXVyyN2pms9frmlutilFVHx3k=", + "dev": true, + "requires": { + "jest-mock": "18.0.0", + "jest-util": "18.1.0" + } + }, + "jest-file-exists": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jest-file-exists/-/jest-file-exists-17.0.0.tgz", + "integrity": "sha1-f2Prc6HEOhP0Yb4mF2i0WvLN0Wk=", + "dev": true + }, + "jest-haste-map": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-18.1.0.tgz", + "integrity": "sha1-BoOcdLdwpAwaEGlohR340oHAg3U=", + "dev": true, + "requires": { + "fb-watchman": "1.9.2", + "graceful-fs": "4.1.11", + "micromatch": "2.3.11", + "sane": "1.4.1", + "worker-farm": "1.4.1" + } + }, + "jest-jasmine2": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-18.1.0.tgz", + "integrity": "sha1-CU4QTCwYlwh2bHcmO7Kuy1hgqAs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jest-matcher-utils": "18.1.0", + "jest-matchers": "18.1.0", + "jest-snapshot": "18.1.0", + "jest-util": "18.1.0" + } + }, + "jest-matcher-utils": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-18.1.0.tgz", + "integrity": "sha1-GsRlGVXuKmDO8ef8yYzf13PA+TI=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "pretty-format": "18.1.0" + } + }, + "jest-matchers": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-18.1.0.tgz", + "integrity": "sha1-A0FIS/h6H9C6wKTSyJnit3o/Hq0=", + "dev": true, + "requires": { + "jest-diff": "18.1.0", + "jest-matcher-utils": "18.1.0", + "jest-util": "18.1.0", + "pretty-format": "18.1.0" + } + }, + "jest-mock": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-18.0.0.tgz", + "integrity": "sha1-XCSIRuoz+lWLUm9TEqtKZ2XkibM=", + "dev": true + }, + "jest-resolve": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-18.1.0.tgz", + "integrity": "sha1-aACsy1NmWMkGzV4p3kErGrmsJJs=", + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "jest-file-exists": "17.0.0", + "jest-haste-map": "18.1.0", + "resolve": "1.3.3" + } + }, + "jest-resolve-dependencies": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-18.1.0.tgz", + "integrity": "sha1-gTT7XK9Zye2EL+AVKrAcUnEfG7s=", + "dev": true, + "requires": { + "jest-file-exists": "17.0.0", + "jest-resolve": "18.1.0" + } + }, + "jest-runtime": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-18.1.0.tgz", + "integrity": "sha1-Or/WhxdbIfw7haK4BkOZ6ZeFmSI=", + "dev": true, + "requires": { + "babel-core": "6.22.1", + "babel-jest": "18.0.0", + "babel-plugin-istanbul": "3.1.2", + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "jest-config": "18.1.0", + "jest-file-exists": "17.0.0", + "jest-haste-map": "18.1.0", + "jest-mock": "18.0.0", + "jest-resolve": "18.1.0", + "jest-snapshot": "18.1.0", + "jest-util": "18.1.0", + "json-stable-stringify": "1.0.1", + "micromatch": "2.3.11", + "yargs": "6.6.0" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "jest-snapshot": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-18.1.0.tgz", + "integrity": "sha1-VbltLuY5ybznb4fyo/1Atxx6WRY=", + "dev": true, + "requires": { + "jest-diff": "18.1.0", + "jest-file-exists": "17.0.0", + "jest-matcher-utils": "18.1.0", + "jest-util": "18.1.0", + "natural-compare": "1.4.0", + "pretty-format": "18.1.0" + } + }, + "jest-util": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-18.1.0.tgz", + "integrity": "sha1-OpnDIRSrF/hL4JQ4JScAbm1L/Go=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "diff": "3.3.0", + "graceful-fs": "4.1.11", + "jest-file-exists": "17.0.0", + "jest-mock": "18.0.0", + "mkdirp": "0.5.1" + } + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=", + "dev": true + }, + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdom": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "dev": true, + "requires": { + "abab": "1.0.3", + "acorn": "4.0.13", + "acorn-globals": "3.1.0", + "array-equal": "1.0.0", + "content-type-parser": "1.0.1", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.8.1", + "html-encoding-sniffer": "1.0.1", + "nwmatcher": "1.4.1", + "parse5": "1.5.1", + "request": "2.81.0", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.2", + "webidl-conversions": "4.0.1", + "whatwg-encoding": "1.0.1", + "whatwg-url": "4.8.0", + "xml-name-validator": "2.0.1" + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz", + "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "requires": { + "jsonify": "0.0.0" + } + }, + "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=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", + "dev": true + }, + "keycode": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", + "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo=" + }, + "keytar": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-3.0.2.tgz", + "integrity": "sha1-TcFd01I/4wYx+dOIV4pAFRpgWG8=", + "optional": true, + "requires": { + "nan": "2.3.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "requires": { + "inherits": "2.0.3", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "less": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", + "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=", + "dev": true, + "requires": { + "errno": "0.1.4", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.3.6", + "mkdirp": "0.5.1", + "promise": "7.1.1", + "request": "2.81.0", + "source-map": "0.5.6" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "requires": { + "astw": "2.2.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "optional": true, + "requires": { + "immediate": "3.0.6" + } + }, + "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=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash._arraycopy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", + "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", + "dev": true + }, + "lodash._arrayeach": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", + "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._baseclone": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", + "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", + "dev": true, + "requires": { + "lodash._arraycopy": "3.0.0", + "lodash._arrayeach": "3.0.0", + "lodash._baseassign": "3.2.0", + "lodash._basefor": "3.0.3", + "lodash.isarray": "3.0.4", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basefor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", + "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", + "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", + "dev": true, + "requires": { + "lodash._baseclone": "3.3.0", + "lodash._bindcallback": "3.0.1" + } + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "dev": true + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "lzma": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/lzma/-/lzma-2.3.2.tgz", + "integrity": "sha1-N4OySFi5wOdHoN88vx+1/KqSxEE=" + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.4" + } + }, + "marked": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=" + }, + "marked-terminal": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-1.7.0.tgz", + "integrity": "sha1-yMRgiBx3LHYEtkNnAH7l938SWQQ=", + "dev": true, + "requires": { + "cardinal": "1.0.0", + "chalk": "1.1.3", + "cli-table": "0.3.1", + "lodash.assign": "4.2.0", + "node-emoji": "1.7.0" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "requires": { + "bn.js": "4.11.7", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "requires": { + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.5.0", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "JSONStream": "1.3.1", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.3.3", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.3.2.tgz", + "integrity": "sha1-TU7PF+HaTpie+08nPY0AIBytCH4=", + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "no-case": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", + "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-emoji": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.7.0.tgz", + "integrity": "sha512-dYx345sjhPJUpWaVQKjP0/43y+nTcfBRTZfSciM3ZEbRGaU/9AKaHBPf7AJ9vOKcK0W3v67AgI4m4oo02NLHhQ==", + "dev": true, + "requires": { + "lodash.toarray": "4.4.0", + "string.prototype.codepointat": "0.2.0" + } + }, + "node-fetch": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", + "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-hid": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-0.5.4.tgz", + "integrity": "sha1-pyRt/AjVJ3QUf6JkNU1dpuq0AlM=", + "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.31" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.0.4", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.2" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.5.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.11.0", + "bundled": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "bundled": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.9.0", + "bundled": true, + "optional": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.2.0", + "bundled": true, + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "deep-extend": { + "version": "0.4.1", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "extend": { + "version": "3.0.0", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.2", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.14" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + } + }, + "gauge": { + "version": "2.7.2", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.0.4", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.0", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "supports-color": "0.2.0", + "wide-align": "1.1.0" + } + }, + "generate-function": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "bundled": true, + "optional": true, + "requires": { + "is-property": "1.0.2" + } + }, + "getpass": { + "version": "0.1.6", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.1", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "graceful-readlink": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "2.0.6", + "bundled": true, + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.2" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-my-json-valid": { + "version": "2.15.0", + "bundled": true, + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "jsbn": { + "version": "0.1.0", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonpointer": { + "version": "4.0.1", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.3.1", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + } + }, + "mime-db": { + "version": "1.26.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.14", + "bundled": true, + "requires": { + "mime-db": "1.26.0" + } + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "1.1.6" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "0.7.1", + "bundled": true, + "optional": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.31", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.0.2", + "rc": "1.1.6", + "request": "2.79.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.3.0" + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "npmlog": { + "version": "4.0.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.2", + "console-control-strings": "1.1.0", + "gauge": "2.7.2", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.0", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "optional": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "optional": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.3.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.1.6", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.1", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.2", + "bundled": true, + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.79.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.2", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.14", + "oauth-sign": "0.8.2", + "qs": "6.3.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "requires": { + "glob": "7.1.1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.10.2", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "bundled": true, + "optional": true + }, + "supports-color": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.2.0", + "fstream": "1.0.10", + "fstream-ignore": "1.0.5", + "once": "1.3.3", + "readable-stream": "2.1.5", + "rimraf": "2.5.4", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "readable-stream": { + "version": "2.1.5", + "bundled": true, + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + } + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true, + "optional": true + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "browserify-aes": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "crypto-browserify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "dev": true, + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "ripemd160": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", + "dev": true + }, + "sha.js": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", + "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + } + } + }, + "node-notifier": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz", + "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=", + "dev": true, + "requires": { + "cli-usage": "0.1.4", + "growly": "1.3.0", + "lodash.clonedeep": "3.0.2", + "minimist": "1.2.0", + "semver": "5.3.0", + "shellwords": "0.1.0", + "which": "1.2.14" + } + }, + "normalize-css-color": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/normalize-css-color/-/normalize-css-color-1.0.2.tgz", + "integrity": "sha1-Apkel8zOxmI/5XOvu/Deah8+n40=" + }, + "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==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "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=", + "dev": true + }, + "nwmatcher": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz", + "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + }, + "object.assign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", + "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", + "optional": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.0", + "object-keys": "1.0.11" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "open": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "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=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.1" + } + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.12" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "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=" + }, + "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=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pbkdf2": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", + "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "pbkdf2-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pkg-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "postcss": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.7.tgz", + "integrity": "sha512-8h/GrGLLyxM5ZvzpCH2XTYPysaSL3Ku5kWD7tKXeKRj8NVg1tyldHFCQGF4NTvRUDvjQfmcCRuowHHFFlAURUg==", + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.0" + } + }, + "supports-color": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", + "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqid": "4.1.1" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.1.3", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.1.3", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.1.3", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.2.2.tgz", + "integrity": "sha1-u/ThmozehVl+DJv9lgFf53WhV6w=", + "dev": true, + "requires": { + "loader-utils": "0.2.17", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-load-config": "1.2.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "requires": { + "postcss": "6.0.7" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.7" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.7" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.7" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.17" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "pretty-format": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-18.1.0.tgz", + "integrity": "sha1-+2Wob3p/kZSWPu6RhlwbzxA54oQ=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1" + } + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "promise": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", + "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", + "dev": true, + "requires": { + "asap": "2.0.6" + } + }, + "prop-types": { + "version": "15.5.10", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", + "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1" + } + }, + "proxy-addr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", + "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "dev": true, + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.3.0" + } + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "requires": { + "bn.js": "4.11.7", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "pxt-core": { + "version": "1.7.16", + "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-1.7.16.tgz", + "integrity": "sha1-NcK2pdB0fKcFC6NArUt6jRGtmJ4=", + "requires": { + "bluebird": "3.5.0", + "browserify": "13.3.0", + "faye-websocket": "0.11.1", + "fuse.js": "2.6.1", + "highlight.js": "9.12.0", + "keytar": "3.0.2", + "lzma": "2.3.2", + "marked": "0.3.6", + "node-hid": "0.5.4", + "request": "2.81.0", + "rimraf": "2.5.4", + "rtlcss": "2.2.0", + "serialport": "4.0.7" + } + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "react": { + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/react/-/react-15.4.2.tgz", + "integrity": "sha1-QfeZGyYYU5K6m66WyIiefgGDl+8=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "react-bootstrap": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.30.10.tgz", + "integrity": "sha1-27ppCVlfKvTZGTfbD5bsjC3y0ag=", + "requires": { + "babel-runtime": "6.23.0", + "classnames": "2.2.5", + "dom-helpers": "3.2.1", + "invariant": "2.2.2", + "keycode": "2.1.9", + "prop-types": "15.5.10", + "react-overlays": "0.6.12", + "react-prop-types": "0.4.0", + "uncontrollable": "4.1.0", + "warning": "3.0.0" + } + }, + "react-dev-utils": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-0.5.2.tgz", + "integrity": "sha1-UNC5YtOpS2wujyAR7WRo5BJLxBA=", + "dev": true, + "requires": { + "ansi-html": "0.0.5", + "chalk": "1.1.3", + "escape-string-regexp": "1.0.5", + "filesize": "3.3.0", + "gzip-size": "3.0.0", + "html-entities": "1.2.0", + "opn": "4.0.2", + "recursive-readdir": "2.1.1", + "sockjs-client": "1.0.1", + "strip-ansi": "3.0.1" + } + }, + "react-dom": { + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.4.2.tgz", + "integrity": "sha1-AVNj8FsKH9Uq6e/dOgBg2QaVII8=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "react-native-web": { + "version": "0.0.95", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.0.95.tgz", + "integrity": "sha1-b66/fjd63sio6f/nJPBh0eHI2wE=", + "requires": { + "animated": "0.2.0", + "array-find-index": "1.0.2", + "babel-runtime": "6.23.0", + "create-react-class": "15.6.0", + "debounce": "1.0.2", + "deep-assign": "2.0.0", + "fbjs": "0.8.12", + "hyphenate-style-name": "1.0.2", + "inline-style-prefixer": "3.0.6", + "normalize-css-color": "1.0.2", + "prop-types": "15.5.10", + "react-timer-mixin": "0.13.3" + } + }, + "react-overlays": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.6.12.tgz", + "integrity": "sha1-oHnHUMxCnX20x0dKlbS1QDPiVcM=", + "requires": { + "classnames": "2.2.5", + "dom-helpers": "3.2.1", + "react-prop-types": "0.4.0", + "warning": "3.0.0" + } + }, + "react-prop-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz", + "integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=", + "requires": { + "warning": "3.0.0" + } + }, + "react-timer-mixin": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz", + "integrity": "sha1-Dai5+AfsB9w+hU0ILHN8ZWBbPSI=" + }, + "react-transition-group": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.0.tgz", + "integrity": "sha1-tR/JIbDDg1p+98Vxx5/ILHPpIE8=", + "requires": { + "chain-function": "1.0.0", + "dom-helpers": "3.2.1", + "loose-envify": "1.3.1", + "prop-types": "15.5.10", + "warning": "3.0.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.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=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "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.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "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.1" + } + } + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.3.3" + } + }, + "recursive-readdir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.1.1.tgz", + "integrity": "sha1-oBz8f384pT7AlqCW9jpQSJw+KXw=", + "dev": true, + "requires": { + "minimatch": "3.0.3" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "redeyed": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", + "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", + "dev": true, + "requires": { + "esprima": "3.0.0" + }, + "dependencies": { + "esprima": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz", + "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=", + "dev": true + } + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + }, + "regenerator-transform": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", + "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "private": "0.1.7" + } + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "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=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "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=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "rtlcss": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.0.tgz", + "integrity": "sha1-E0QVJU0MJrXEA+Lq0sG4v0/AAN0=", + "requires": { + "chalk": "1.1.3", + "findup": "0.1.5", + "mkdirp": "0.5.1", + "postcss": "6.0.7", + "strip-json-comments": "2.0.1" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sane": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-1.4.1.tgz", + "integrity": "sha1-iPdj10BA9fDCVrYWPbOZvxEKxxU=", + "dev": true, + "requires": { + "exec-sh": "0.2.0", + "fb-watchman": "1.9.2", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.10.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semantic-ui-less": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/semantic-ui-less/-/semantic-ui-less-2.2.11.tgz", + "integrity": "sha512-PnqdtS00HGezMdPfJCxw7HX/QjsNwfxttQ0fZpiNwhDI2IFNXv5GhXwL+c+kc9c2rUFWaAOQlFYT3QPwcDP04Q==", + "dev": true, + "requires": { + "jquery": "3.2.1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "send": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", + "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "dev": true, + "requires": { + "debug": "2.6.7", + "depd": "1.1.0", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + } + } + }, + "serialport": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-4.0.7.tgz", + "integrity": "sha1-QhxhiophK9QM+kYbSkYVTa8iKaU=", + "optional": true, + "requires": { + "bindings": "1.2.1", + "commander": "2.11.0", + "debug": "2.6.8", + "lie": "3.1.1", + "nan": "2.6.2", + "node-pre-gyp": "0.6.32", + "object.assign": "4.0.4" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.32", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.0.1", + "rc": "1.1.6", + "request": "2.79.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.3.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.0.9" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "bundled": true, + "optional": true + } + } + }, + "npmlog": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.2", + "console-control-strings": "1.1.0", + "gauge": "2.7.2", + "set-blocking": "2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.2" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "readable-stream": { + "version": "2.2.2", + "bundled": true, + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "optional": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + } + } + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.7.2", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.0.4", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.0", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "supports-color": "0.2.0", + "wide-align": "1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.0.4", + "bundled": true, + "optional": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "bundled": true + } + } + }, + "supports-color": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + } + } + }, + "rc": { + "version": "1.1.6", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.1", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.1", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "strip-json-comments": { + "version": "1.0.4", + "bundled": true, + "optional": true + } + } + }, + "request": { + "version": "2.79.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.2", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.13", + "oauth-sign": "0.8.2", + "qs": "6.3.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + }, + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.5.0", + "bundled": true, + "optional": true + }, + "caseless": { + "version": "0.11.0", + "bundled": true, + "optional": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.0", + "bundled": true, + "optional": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.2", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.13" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + } + } + }, + "har-validator": { + "version": "2.0.6", + "bundled": true, + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "optional": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "bundled": true, + "optional": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "bundled": true, + "optional": true + } + } + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "optional": true + } + } + }, + "is-my-json-valid": { + "version": "2.15.0", + "bundled": true, + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.0", + "xtend": "4.0.1" + }, + "dependencies": { + "generate-function": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "bundled": true, + "optional": true, + "requires": { + "is-property": "1.0.2" + }, + "dependencies": { + "is-property": { + "version": "1.0.2", + "bundled": true, + "optional": true + } + } + }, + "jsonpointer": { + "version": "4.0.0", + "bundled": true, + "optional": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true, + "optional": true + } + } + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "optional": true, + "requires": { + "pinkie": "2.0.4" + }, + "dependencies": { + "pinkie": { + "version": "2.0.4", + "bundled": true, + "optional": true + } + } + } + } + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.1" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.3.1", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + } + } + }, + "sshpk": { + "version": "1.10.1", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.4" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.4" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "getpass": { + "version": "0.1.6", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "jsbn": { + "version": "0.1.0", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.4", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "mime-types": { + "version": "2.1.13", + "bundled": true, + "requires": { + "mime-db": "1.25.0" + }, + "dependencies": { + "mime-db": { + "version": "1.25.0", + "bundled": true + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.3.0", + "bundled": true, + "optional": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + } + } + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true, + "optional": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + } + } + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "requires": { + "glob": "7.1.1" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + }, + "dependencies": { + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "1.1.6" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + }, + "dependencies": { + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + }, + "dependencies": { + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "bundled": true + } + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "tar-pack": { + "version": "3.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.2.0", + "fstream": "1.0.10", + "fstream-ignore": "1.0.5", + "once": "1.3.3", + "readable-stream": "2.1.5", + "rimraf": "2.5.4", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "bundled": true, + "optional": true, + "requires": { + "ms": "0.7.1" + }, + "dependencies": { + "ms": { + "version": "0.7.1", + "bundled": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "1.1.6" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + } + } + } + } + } + } + }, + "once": { + "version": "1.3.3", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1.0.2" + }, + "dependencies": { + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.1.5", + "bundled": true, + "optional": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "optional": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + } + } + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + } + } + } + } + } + } + }, + "serve-index": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", + "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "batch": "0.6.1", + "debug": "2.6.8", + "escape-html": "1.0.3", + "http-errors": "1.6.1", + "mime-types": "2.1.15", + "parseurl": "1.3.1" + } + }, + "serve-static": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", + "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "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=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "requires": { + "inherits": "2.0.3" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.8" + } + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.0.3", + "rechoir": "0.6.2" + } + }, + "shellwords": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.0.tgz", + "integrity": "sha1-Zq/Ue2oSky2Qccv9mKUueFzQuhQ=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", + "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.4", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.4", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-client": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", + "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.4", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.0.1.tgz", + "integrity": "sha1-iUOuBbRlR7wgVIFsQJACz14v4CY=", + "dev": true, + "requires": { + "debug": "2.6.8", + "eventsource": "0.1.6", + "faye-websocket": "0.7.3", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.1.9" + }, + "dependencies": { + "faye-websocket": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.7.3.tgz", + "integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", + "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", + "dev": true + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string.prototype.codepointat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz", + "integrity": "sha1-aybpvTr8qnvjtCabUm3huCAArHg=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "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=" + }, + "style-loader": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.1.tgz", + "integrity": "sha1-RoKA77wEcwI806bNVuM7Wh1/w6k=", + "dev": true, + "requires": { + "loader-utils": "0.2.17" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "requires": { + "minimist": "1.2.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + } + } + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "requires": { + "acorn": "4.0.13" + } + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.4", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "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": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "tapable": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz", + "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0=", + "dev": true + }, + "test-exclude": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-3.3.0.tgz", + "integrity": "sha1-ehfKEjmYjJg2ewYhRW27fUvDiXc=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.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=", + "dev": true + }, + "throat": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", + "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "0.11.10" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "toposort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.3.tgz", + "integrity": "sha1-8CzYp0vYvi/A6YYRw7rLlaFxhpw=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tryit": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "ts-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.3.0.tgz", + "integrity": "sha512-sOqgw/QPjzJl3cwmL/nz9hNxG17fOGNTV+mMfQoy4aLrTwkQBtc6apv+P+fJHMryFHVQMzjjoRr4xA0q5WPaNA==", + "dev": true, + "requires": { + "chalk": "2.0.1", + "enhanced-resolve": "3.3.0", + "loader-utils": "1.1.0", + "semver": "5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.0" + } + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "supports-color": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", + "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.15" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.2.tgz", + "integrity": "sha1-YGAiUIR5tV/6NotY/uljoD39eww=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.13.tgz", + "integrity": "sha1-zZ3S+GSTs/RNvu7zeA/adMXuFL4=" + }, + "uglify-js": { + "version": "3.0.25", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.25.tgz", + "integrity": "sha512-JO1XE0WZ9m6UpDkN7WCyPNAWI6EN3K0g40ekcoJKejViYmryJ0BaLxXjvra1IsAeIlJfq72scTbhl0jknsT2GA==", + "dev": true, + "requires": { + "commander": "2.9.0", + "source-map": "0.5.6" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=" + }, + "uncontrollable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-4.1.0.tgz", + "integrity": "sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak=", + "requires": { + "invariant": "2.2.2" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.7.tgz", + "integrity": "sha1-Z+h3l1n4AA2nSZSQZoDJQ6mwkl0=", + "dev": true, + "requires": { + "loader-utils": "0.2.17", + "mime": "1.2.11" + }, + "dependencies": { + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", + "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.11" + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", + "dev": true + }, + "watchpack": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "dev": true, + "requires": { + "async": "0.9.2", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "webidl-conversions": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", + "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=", + "dev": true + }, + "webpack": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.14.0.tgz", + "integrity": "sha1-VPH/uSBRoyilsgV9auM8KJRiyCM=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "async": "1.5.2", + "clone": "1.0.2", + "enhanced-resolve": "0.9.1", + "interpret": "0.6.6", + "loader-utils": "0.2.17", + "memory-fs": "0.3.0", + "mkdirp": "0.5.1", + "node-libs-browser": "0.7.0", + "optimist": "0.6.1", + "supports-color": "3.2.3", + "tapable": "0.1.10", + "uglify-js": "2.7.5", + "watchpack": "0.2.9", + "webpack-core": "0.6.9" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.2.0", + "tapable": "0.1.10" + }, + "dependencies": { + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", + "dev": true + }, + "memory-fs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", + "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.3.6", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0" + } + }, + "webpack-dev-server": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.2.tgz", + "integrity": "sha1-i+vCxM4cRaFcct12nZugjbMGp5M=", + "dev": true, + "requires": { + "compression": "1.7.0", + "connect-history-api-fallback": "1.3.0", + "express": "4.15.3", + "http-proxy-middleware": "0.17.3", + "open": "0.0.5", + "optimist": "0.6.1", + "serve-index": "1.9.0", + "sockjs": "0.3.18", + "sockjs-client": "1.1.4", + "stream-cache": "0.0.2", + "strip-ansi": "3.0.1", + "supports-color": "3.2.3", + "webpack-dev-middleware": "1.11.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.8", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.1.9" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "webpack-manifest-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-1.1.0.tgz", + "integrity": "sha1-a2xxiq3oolN5lXhLRr0umDYFfKo=", + "dev": true, + "requires": { + "fs-extra": "0.30.0", + "lodash": "4.17.4" + } + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.5.6" + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "requires": { + "websocket-extensions": "0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=" + }, + "whatwg-encoding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", + "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", + "dev": true, + "requires": { + "iconv-lite": "0.4.13" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + } + } + }, + "whatwg-fetch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz", + "integrity": "sha1-/ilNHYnjbFvosxlQV/LkvHT8mA4=", + "dev": true + }, + "whatwg-url": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", + "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", + "dev": true, + "requires": { + "tr46": "0.0.3", + "webidl-conversions": "3.0.1" + }, + "dependencies": { + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + } + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.4.1.tgz", + "integrity": "sha512-tgFAtgOYLPutkAyzgpS6VJFL5HY+0ui1Tvua+fITgz8ByaJTMFGtazR6xxQfwfiAcbwE+2fLG/K49wc2TfwCNw==", + "dev": true, + "requires": { + "errno": "0.1.4", + "xtend": "4.0.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", + "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "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": "4.2.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/public/pxt/icons.css b/public/pxt/icons.css index 3e0d4f2..4d94933 100644 --- a/public/pxt/icons.css +++ b/public/pxt/icons.css @@ -1,6 +1,6 @@ @font-face { font-family: "xicon"; - src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABaIAAsAAAAAIOAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZHIFOLY21hcAAAAYQAAAClAAACiPLHg4VnbHlmAAACLAAAEecAABkAcvkU1WhlYWQAABQUAAAALgAAADYN5WHFaGhlYQAAFEQAAAAYAAAAJAfKA/9obXR4AAAUXAAAABAAAABYUggAAGxvY2EAABRsAAAALgAAAC5QDkqgbWF4cAAAFJwAAAAfAAAAIAEpAWFuYW1lAAAUvAAAAR8AAAHyCM/ZInBvc3QAABXcAAAAqQAAAPYhLhbGeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGTezTiBgZWBgamKaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcPjJ+FGV+AeRGgUmgRhABAPPhCz0AAHic7ZHJDcMwDARHtuwcvnKpi1SSgvJK06rA4WpTRggMByIoQSCBAeiDZ5AhfUgo3lFNrd5zbvXMq/Vk1WvZ98hJOc655S56c7w4cuDIKe5NzCysbFy4cuPOgxKtI/+YldL8OxVN07T5dga5N9pTzUYTr4PRDutokA8G+WiQTwb5bLTbOhnk2eh3dTHIq0HeDPLFIF8N8s0g3w3ywyAXQ/kC5NgzkgAAAHicjVh7jCRHeZ+q6qrq92v6Me9Xz3Tv7OzN7s6r9717e/bd+W59vrPvZR8Y+wLGDk6weUg8ZMHJgExeyiFkA0oCSVCIcAwkIOHg4MgRYOTgEKI4ICBAlH8ARYqikD8Cd5t81TPrM5A/srPT3VNd/VXVV9/3+/2+zqEc/JGj5HO5I7lc2hxMNlEfWYhFfZREm2i4hdJBHQWTdDyKE5Yssz7aRpMx3B33kG8i7tVRDbGEtxIT+Y4XfAcfdoqsYuFy3N1gCLGNblzGZpW5hvQZv4h0HOLxnGnNjeFCR4XCxTux6RTWis6LrmS+8qZB7WfNUEIIW0Xj580ZRQsjJIXm9b9yirnpGl5DfpD7Ri4nZsODMAhrCA4BN1GcxImYsDgznrVzE8OvbE1xwrNG34PGUQoLnYySeBGZKMmTPkqjOGoxcIgwNIHbW8LsZFtYZTwSzeAiuBHU0SQV5uJZb9FZtIvu0+dqiGeXE+gFlremE/RgfJjBtBd8oBsDK9PWLYQ/YHLHklE50HVJIwghxaRMrN6wVJ16uq4SjpCsqpgQRBSN5UumTA05r0rUkLCsov593Y/86VzVlAyTEoZC1y6T0CoEiqkruuYx3aBURq1SEKF20Klotm7VOopmWJSqKK4UOtj3Ct2abuuF0PcRk5umpmIWqjahDapQCeG8WtY40mTHCOF3EhWjWrnncokV5dFSsVGIqVLBd/FGg5ebsso0rbJUKZSVqFhbQDolMiNkecA5tPfLy3JUqPaQxrDM9LhhyIZamgu7UjMotRFY1xQ0mLfQ5v4L4a/dTIiMmnnb0+a8ls0xwngu1hnBhFcs3dDbTlWVEJX7TZUrDGGGCoam6K5tlbhEuJm3ZENzwV+BgW+eW0mObaqmzAkF1621Dw3mo7iSSFhKS55pMNli4BLECkYp35IMVYTdNPb+kvxzLsnl8sNxNB6OR5NhcxBU0dCP/IOvx6JmK95E4n60efXq1aKLiVu6mv2V3OvX3SJc4N57HnzCLRbdJx58z4OPHlw+CkPgbJxvkvfl5NzxXK6TOJHDx2koMnQ4CMWhhrIwNlEPJcPxFoLgjibjUR9FLchTcWJVcfCCoT/kUauPRhBeL1y99+rfPHf9hU12c79Zqb3jxOE33iQNbooPx7/e/+14MoktPL40WT63woz5YrJyd5Kmydf6fxjvxPHOf13dfxbtXn34uefQ5NCGffj09oM7yqlRshP3EZrcOkG2M7k0PnTboheuJHJ6a4r68c6thzuwFJqt5/vkT3IP5a7kfjf36dxXYFWzLO2jdJK+nD/ZurJ0gMwyxQq4yC84RC3oiyFvoQOg0rboOBwEApEgu9KRyDrYjW10YAfyzZ/mm7BAROaK0cSPsIbTiQCE/nSEGspn2Qw2sDAmDODMBgxtolRMdTpF4fvZhBh6+95jS56qmInaCBd6w0o8V4nPVKodt+ASxfYZxQiy1GirDVP2y5rKsYR4ezGsdbBjrJdki5qudsJgjCv+8ZpVgBh1CxKTTM4IpCOBEEeYQ6Dd2nrb5+0KVTU73EgNGVG1O/jPsWEZVTeeEJocrsvhoqoqpXrD1+Saa6hUcwKPW4QF/ZJ72yfUMgWD3kdXyvUk35CixQ/PV3Rr1zg68EyteNsLZ7c213v5vC/LWJXBc2txNF6vel2zpDlacSV0ZYwcqdDSudJfLxVCmTDKOc1TRavoed52VJhb11CYhDknWMYOgI1cKcmaFdcbrkzRp+Sa5a3nA6VSNhbNQoP/WWktaBiGttBupd7+6zDTKeYyc1qtYhPQTa1WTYYVIjdaKqXvpWXVqBnVj4yCUn5lfOyTVU+iOZLF1UtkD660nCU4zWkiyJRxMq6LjCySZ67djFpPvvOdT/Y++MEv4/ftH3vb7h46c+SR+1N4VJrF5fO55dyp3B/nvgQpngWcgPXhNG4EOFuzGIMA2EbDNJpFQjgI0yTOs1mMMYH+aX/Wc9jiLInD7EYIUZo1ih5BOO29iA4sz9qzAIv5wbBwf3GWGmF6wBFZlKaML9dQFoQW9BiKaE+ngS9CPE7Q/4zvrSypiktXzlDZ1o29FSZLeFI72ly9YAP+SoVXH/t9CDHZUmO/XN4jyz3DU+kk6mh2L1X0NF3S+XLsHUKE6pLcrpQULHFqccww7DzFWLMBO02baxLEKmu5m0G9oimma9T0BkWOxgU/qYRyqpiYAazbMh/brucAZrmaYrjKj91oox+oiy2zaVBOwLDFdV8btCLdTSa6Rb4y7B15EAho0j37R6e3eh6SJbRoUd29a63aCQ5990hxAERl20g7hvj+U5ItS73V9cPnP32zbqYbHz09ubfjtRAm9pO4remmyimW8hJMTKMknDNDzVFEhkHENnzJDfoVKzQ4VYOilsdIZxh4gZqK0+GqrwDb8FSTJK4FVqlsBhr9jBMd+dyFhTMNs6gBT0syl7ijzI9XNs5/5qjt5FgWW8+Sp3MF1EUb6Cg6gc5CfA1qkmdKrb402pLyA4CbJB7B1gHCQNwIQErSKfIlKWetPh6nEAZ9NE4XUTBIkzQWj2yjQbbf0BsA0Q9NNI94AncBz8ZpRgKYD2p4mI6hcSLooo5SwDQgDGFcPMFD7vMU4M8HnExCkHZAW5wNB2DQCwSF8DCJRX8vGExS8YDQPRC+SRgsIphawj1AyVjMBJhHShO4EhgcJxlFgcHA53UMK/Z5ABPyTBwlAUvEdQ2RgUgL3hKB3rLQKMoSSkB+soU6Hh+GmTCDIbC0+dDlM6uNxuqZyw+948bl5vLdZ4+VNYrgo2qAlQjpBQVTplGNcWRwzXZ0RAgnEgVhwLANzXag4iozqnbdNMyao3MDMCbv+Spk10lQBoW584c6t9y8XQatpanM1ADFDVOVdNtU86ZqKrasFhVPRQnBWCg00KkKqAYkiMWAY8HJK5Zsg/rSK0VdgvmoruzIqhlBZ9us16saqY5O9AHjQPSAaSJBQipwQAov5jFPZGSrTC7Xm0XHwmq+bIp0cRGEqqQaNOz/LeWmqZtcZyqFECbE3nYspjNF8MtLiJYYg2UzRSVPN9ZOX3747b/ovWtfLvZ3uyWjplaZ5Tky1RWCuBBUFJZEKGYyeBUTCXJAQgbGciUo2JbBIJ2wBONVTSrJOpN1LllFLQSxKnm+VemWNFOjil+n4HTm6EA5ug7YD76XZFmn3NaRBV4DWoSxYI5Ab8zUucltR/gRMZY3HVlSXBVzVckrkuxJBJUFevTHr714vKiAIxTFrNXr5UAhjGkMpqBK2NGxDogjKZDAth/4ihUUQPDKnqubiGLFBzJkDD2LAMUQhRVC2hOSB9CBz9cl1FEURyIQAxkl4Fnu/lNuN/deyNk06ZNRJlZEgo6mCeVPwfwVKmMqWJJ4PNp6WdOMBVFQISeGg3QyimdW4lEfL86YYjTru4XHMMisAMk+vjcdgOy126Wap2BQ/L5VUkyuNea32hDVfr6cV6g7l/dh8wk6uVPRVa6yshWoCsZAENH1d1KCou35uiabSsnyNYVgxasX2+02FDSwnzJAWpnBU3pl5yTGGLSIN+dQBSz76DthaDeXj72+3HR84A3stGWtudn9rN8t+LausnxBK3pBszq5sn0L8I3uchF4oVsvDY4n0fB+73Nzm01NbjsYM8V3GpX7ji+17DAMhlFybFiquyEIcMThQVk7sXUlrTbCfFEr5Jmq20GYe5mjv0m+ClrYyb0p9xLsh8da8WgyCOjBBQKvb6JRMoaKFtwZrqM69WFD8NJyRr7Aj8sCnMDn4202DEFEg2T3Qh9Esti8KAzA65PM6bA7EWzQNk6Gv2xkcGCEriPYTzHaWIwMGBYlP2dkEU2NREDcYhA/GxA2c4iuNBbq9YUGOjM97xv18i0nTz7gurdubUuUMZEWqoslOQ/54zgyoAMlNZF4XKLd6scd63UnT14y8s9bqhYgIFevGog471iWhbQo9Q6MaE5mRDFuGCGSMPI936kdPWpLfumr/6eNc6cqfhE6MNlxcS2o1w/V6+H0tP8ho/yad1+QxtKdj7zZAdgD0OCWBGRZ7Oo6gCuEGwJAk6vynVTjNMNI4j505bw0phcfeUNAyUJl08NUpyY8SmSvN9fAlTXoBXJkZkcLVJGjAher/E6mgngRUTt51yUf5y89suRLOlqobggrzMCQ0BxlZsrAAP7yy72Akmca8R/Ic7lbcrfnLoFGjERpNorGAzhO1pGQ+CzT+lk6TnduWEOwXUO/BUfWQxnviRcJsLOiFoCe2ygveHEUtxg9uPhvdOfp1dXTdz6DsEF0hHtJr2TaADGI2hw9f3ZvdXXv7Bch3AF3CPZqgR8cGmBkSiZCf9de7bRX4v23wbmz0vn27vnX7p26/TUXj2NeUZqlVleSHKVqGYZiHnIZOnb+8plTp+65uMvyI0e1TaflSRKRlpJarDZhC95a67RX4055egIXKJkf/oV8C3RyPhfmyrl6LoI6tpdbhFoWVIADpWJzMBk7oziifnP8yi+KnCF5xfcb+XI5jy+I47X/IM9fW73x3d8/cuTdB/9kC6rdL7mlkos33NIDu7vvPvjHj15bIV+98Z3V1t8l9+aaQiUFoob2mwfnMRSw03p6GcB12PTJHwCCFfevIzI97//74pn+008vnllENv5+e9j+dnvUvoJGF0fDfxuNLg6v3Kjf/56swsqFEkNh6jRTgektobk92GNAA4BwAPkMk9Fnzz/+ptrH9t/ymLcy/6sP3T/X7fW6rlsKCt7q9vbqxt4Jsrr51t2n93d+7+LK3MLC3Pz9b3mg645cz1t94hMfWl2v127wyUvkKkTjPIwMVQoJeZS2DgrgKV9AuM2K3RmxDBP8RVTY/+GPvvCFZ+6+I9ntDav1vOWcObZ+1+Th463V+NBQV2XbKgbN/Pzd6K/3f4iOQk+Jh5XJ2p+fu+uN5VCWnsFEM4a9+I5K0dAIfrWYSjapj5NPwMyyuqmTdNBBEOeHToR+9hforv2frJxZgf/mu971k2vS/tU5CO3VVfzT/e6NNX2efAmsLUzXlE+TKGwdVEMH7Dgc/+IyOX4UDfdfPPXiiy/e9/6dB4+dWxq4ruX0F04dvrzxyOl4a365UvN04/Dq4vHepfvQq/a/hhH0pXKxtrH9K3ffc3l7o1aSpRexpFmV6qWF/qqpS/j1szltkH+8MSdQmAd+FpXTjJVveHr2omCYoB8guv+zTz311Kcu3NPfG2w027ph6O3mxmCvf89auV9rd2XO5W671i+vXcBf3792AbpSpdq66ehDb3jDG48diSoKfYowx7vjyM7h3Tt8h5LzMz/hH5EvAn9VBXcduNmfRhtPSCcRQmEEHkKnJyfH45OTJ7Zb7Sja3D6PGttnF5ebjbfgXDwe743H6PHHRyf2PnnylvHp/R/7p49evu/hV52//X0H71i+R34z9zu5D+Qez304968wWhCyA20yyhgpewGSfQDZBKfB6g8Eh3BEBnRwWEetZagyUnE8KC2n9e+ET2ZNAgSnrziX4ylsTl/pHAiaSZINDAdwfDbw0tBPlpaHyGvlW/wXcFc8O2vDWXkNpoLsBQybQW72uhRgmNXwy0+QNugZT697UKJpgeR2WvWt918Zr7SqhoOIFEDlqclYpwqTKfPNktrrdcbFhiuhb3UxRVrYajFHsXRLlVVGxTtnoCSlaDAFJHWeSViIYigTLRcZyPcZsy1J86hq6AqlpOjnPaApZrHfAP66/gL6qWlt3V8uy2yrvzTuHXVcTnv1VrvcV6GOqC4USrYC9QQ1CfHisL4WS8xzj/cmg6UdENQYxHjewBqVb13fIufSnWrdjULdc4pr83LS7xYHzbi7sD3qpis1mZcbt1ddj1LEqWy4jq/BZGUyq0gEm4LIpormmiXT1AhSDcUvnujaQdNXiroCqtsyZJtUbSJjT8ZEDsrMqRshlwzZZDcVgkavFPqufx2hfag97sDyue3dWzYuF0sKX1/oD+Z2bJuzbrXeKnXzXC6aLQc0tF9abBDa2OwsH5pfY7xaeWC7N68FNpUdbWXl9GNJ95dxWLywTJxmIvZ8IN5leBAxIJVAMGfvNeGDh+cef3PtY+i3HvPT3gMP35/Mw5/rlv2Ct7a1tbb+/8Ph/wVHej4HAHicY2BkYGAA4r8Tf56O57f5ysDN/AIownC1mK8BmWZ+yPwASHEwMIF4AGflC2cAAHicY2BkYGB+wcAAJx8yMDKgAjEARMsC03icY2BgYGB+QX0MAD2xE0gAAAAAAGIBoAHUAjwDaAOIBLYGlAdaCHoI/glOCYAJvAoECiYKcAq6Cu4MRAyAAAB4nGNgZGBgEGMMZeBkAAEmIOYCQgaG/2A+AwAT0gGMAHicXY69TsMwFIVP+odoEAIhMZulC1LSduwDtDMduqeJ0x8lceS4VSsxM/MUzDwFz8WJeyUqbOn6O+ceXxvAA34QoF0B+r62q4Mbqgt3SXfCPfKjcB8hnoUHVC/CQ7xiJBziCW+cEPRu6QyRCXdwj0q4S/9duEf+EO5z+qfwgP6X8BArfAuHGAWD0y411VJvDkViPfuy0rbZmUpNorHXC11pmzidqfVZNcfN1Llc5daUam4qp4vCqNqavU5dtHWunsVxLn6UmhIn7JDC8NdLaGxwQIEE9sr/oxUTFg11qxQmiDC+6i/Yr3wmgeOZMbPGmbXBkbOndB1y6pwZg5I09zfbdMFt6NS+t6eT0o+w9bdqzBBz5//ykX+7/AVV81OKAHicbYzHDsIwFAS9IQ1C6OX7iG0Skxc/ywWJv6eJG3Oa1UgrMvFlIf5zQoYZchQoUaHGHAs0WKLFCmtssMUOexxwxAlnUXbEcgyzLvW5HIxrJHFSyRFfVCGZ2DeSp+liFRmr62uyMhq2RU/c6ewWqjHoycVHOYZrIppPRnp+H+WOXpdeK65D1M7YyO1PyPRDrN6LU/xkvmvf/uSTy5h8JJ0nq1iIJwkEPv4AAAA=) format("woff"); + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABaIAAsAAAAAIOAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZHIFOLY21hcAAAAYQAAAClAAACiPLHg4VnbHlmAAACLAAAEecAABkAcvkU1WhlYWQAABQUAAAALgAAADYOJz/BaGhlYQAAFEQAAAAYAAAAJAfKA/9obXR4AAAUXAAAABAAAABYUggAAGxvY2EAABRsAAAALgAAAC5QDkqgbWF4cAAAFJwAAAAfAAAAIAEpAWFuYW1lAAAUvAAAAR8AAAHyCM/ZInBvc3QAABXcAAAAqQAAAPYhLhbGeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGTezTiBgZWBgamKaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcPjJ+FGV+AeRGgUmgRhABAPPhCz0AAHic7ZHJDcMwDARHtuwcvnKpi1SSgvJK06rA4WpTRggMByIoQSCBAeiDZ5AhfUgo3lFNrd5zbvXMq/Vk1WvZ98hJOc655S56c7w4cuDIKe5NzCysbFy4cuPOgxKtI/+YldL8OxVN07T5dga5N9pTzUYTr4PRDutokA8G+WiQTwb5bLTbOhnk2eh3dTHIq0HeDPLFIF8N8s0g3w3ywyAXQ/kC5NgzkgAAAHicjVh7jCRHeZ+q6qrq92v6Me9Xz3Tv7OzN7s6r9717e/bd+W59vrPvZR8Y+wLGDk6weUg8ZMHJgExeyiFkA0oCSVCIcAwkIOHg4MgRYOTgEKI4ICBAlH8ARYqikD8Cd5t81TPrM5A/srPT3VNd/VXVV9/3+/2+zqEc/JGj5HO5I7lc2hxMNlEfWYhFfZREm2i4hdJBHQWTdDyKE5Yssz7aRpMx3B33kG8i7tVRDbGEtxIT+Y4XfAcfdoqsYuFy3N1gCLGNblzGZpW5hvQZv4h0HOLxnGnNjeFCR4XCxTux6RTWis6LrmS+8qZB7WfNUEIIW0Xj580ZRQsjJIXm9b9yirnpGl5DfpD7Ri4nZsODMAhrCA4BN1GcxImYsDgznrVzE8OvbE1xwrNG34PGUQoLnYySeBGZKMmTPkqjOGoxcIgwNIHbW8LsZFtYZTwSzeAiuBHU0SQV5uJZb9FZtIvu0+dqiGeXE+gFlremE/RgfJjBtBd8oBsDK9PWLYQ/YHLHklE50HVJIwghxaRMrN6wVJ16uq4SjpCsqpgQRBSN5UumTA05r0rUkLCsov593Y/86VzVlAyTEoZC1y6T0CoEiqkruuYx3aBURq1SEKF20Klotm7VOopmWJSqKK4UOtj3Ct2abuuF0PcRk5umpmIWqjahDapQCeG8WtY40mTHCOF3EhWjWrnncokV5dFSsVGIqVLBd/FGg5ebsso0rbJUKZSVqFhbQDolMiNkecA5tPfLy3JUqPaQxrDM9LhhyIZamgu7UjMotRFY1xQ0mLfQ5v4L4a/dTIiMmnnb0+a8ls0xwngu1hnBhFcs3dDbTlWVEJX7TZUrDGGGCoam6K5tlbhEuJm3ZENzwV+BgW+eW0mObaqmzAkF1621Dw3mo7iSSFhKS55pMNli4BLECkYp35IMVYTdNPb+kvxzLsnl8sNxNB6OR5NhcxBU0dCP/IOvx6JmK95E4n60efXq1aKLiVu6mv2V3OvX3SJc4N57HnzCLRbdJx58z4OPHlw+CkPgbJxvkvfl5NzxXK6TOJHDx2koMnQ4CMWhhrIwNlEPJcPxFoLgjibjUR9FLchTcWJVcfCCoT/kUauPRhBeL1y99+rfPHf9hU12c79Zqb3jxOE33iQNbooPx7/e/+14MoktPL40WT63woz5YrJyd5Kmydf6fxjvxPHOf13dfxbtXn34uefQ5NCGffj09oM7yqlRshP3EZrcOkG2M7k0PnTboheuJHJ6a4r68c6thzuwFJqt5/vkT3IP5a7kfjf36dxXYFWzLO2jdJK+nD/ZurJ0gMwyxQq4yC84RC3oiyFvoQOg0rboOBwEApEgu9KRyDrYjW10YAfyzZ/mm7BAROaK0cSPsIbTiQCE/nSEGspn2Qw2sDAmDODMBgxtolRMdTpF4fvZhBh6+95jS56qmInaCBd6w0o8V4nPVKodt+ASxfYZxQiy1GirDVP2y5rKsYR4ezGsdbBjrJdki5qudsJgjCv+8ZpVgBh1CxKTTM4IpCOBEEeYQ6Dd2nrb5+0KVTU73EgNGVG1O/jPsWEZVTeeEJocrsvhoqoqpXrD1+Saa6hUcwKPW4QF/ZJ72yfUMgWD3kdXyvUk35CixQ/PV3Rr1zg68EyteNsLZ7c213v5vC/LWJXBc2txNF6vel2zpDlacSV0ZYwcqdDSudJfLxVCmTDKOc1TRavoed52VJhb11CYhDknWMYOgI1cKcmaFdcbrkzRp+Sa5a3nA6VSNhbNQoP/WWktaBiGttBupd7+6zDTKeYyc1qtYhPQTa1WTYYVIjdaKqXvpWXVqBnVj4yCUn5lfOyTVU+iOZLF1UtkD660nCU4zWkiyJRxMq6LjCySZ67djFpPvvOdT/Y++MEv4/ftH3vb7h46c+SR+1N4VJrF5fO55dyp3B/nvgQpngWcgPXhNG4EOFuzGIMA2EbDNJpFQjgI0yTOs1mMMYH+aX/Wc9jiLInD7EYIUZo1ih5BOO29iA4sz9qzAIv5wbBwf3GWGmF6wBFZlKaML9dQFoQW9BiKaE+ngS9CPE7Q/4zvrSypiktXzlDZ1o29FSZLeFI72ly9YAP+SoVXH/t9CDHZUmO/XN4jyz3DU+kk6mh2L1X0NF3S+XLsHUKE6pLcrpQULHFqccww7DzFWLMBO02baxLEKmu5m0G9oimma9T0BkWOxgU/qYRyqpiYAazbMh/brucAZrmaYrjKj91oox+oiy2zaVBOwLDFdV8btCLdTSa6Rb4y7B15EAho0j37R6e3eh6SJbRoUd29a63aCQ5990hxAERl20g7hvj+U5ItS73V9cPnP32zbqYbHz09ubfjtRAm9pO4remmyimW8hJMTKMknDNDzVFEhkHENnzJDfoVKzQ4VYOilsdIZxh4gZqK0+GqrwDb8FSTJK4FVqlsBhr9jBMd+dyFhTMNs6gBT0syl7ijzI9XNs5/5qjt5FgWW8+Sp3MF1EUb6Cg6gc5CfA1qkmdKrb402pLyA4CbJB7B1gHCQNwIQErSKfIlKWetPh6nEAZ9NE4XUTBIkzQWj2yjQbbf0BsA0Q9NNI94AncBz8ZpRgKYD2p4mI6hcSLooo5SwDQgDGFcPMFD7vMU4M8HnExCkHZAW5wNB2DQCwSF8DCJRX8vGExS8YDQPRC+SRgsIphawj1AyVjMBJhHShO4EhgcJxlFgcHA53UMK/Z5ABPyTBwlAUvEdQ2RgUgL3hKB3rLQKMoSSkB+soU6Hh+GmTCDIbC0+dDlM6uNxuqZyw+948bl5vLdZ4+VNYrgo2qAlQjpBQVTplGNcWRwzXZ0RAgnEgVhwLANzXag4iozqnbdNMyao3MDMCbv+Spk10lQBoW584c6t9y8XQatpanM1ADFDVOVdNtU86ZqKrasFhVPRQnBWCg00KkKqAYkiMWAY8HJK5Zsg/rSK0VdgvmoruzIqhlBZ9us16saqY5O9AHjQPSAaSJBQipwQAov5jFPZGSrTC7Xm0XHwmq+bIp0cRGEqqQaNOz/LeWmqZtcZyqFECbE3nYspjNF8MtLiJYYg2UzRSVPN9ZOX3747b/ovWtfLvZ3uyWjplaZ5Tky1RWCuBBUFJZEKGYyeBUTCXJAQgbGciUo2JbBIJ2wBONVTSrJOpN1LllFLQSxKnm+VemWNFOjil+n4HTm6EA5ug7YD76XZFmn3NaRBV4DWoSxYI5Ab8zUucltR/gRMZY3HVlSXBVzVckrkuxJBJUFevTHr714vKiAIxTFrNXr5UAhjGkMpqBK2NGxDogjKZDAth/4ihUUQPDKnqubiGLFBzJkDD2LAMUQhRVC2hOSB9CBz9cl1FEURyIQAxkl4Fnu/lNuN/deyNk06ZNRJlZEgo6mCeVPwfwVKmMqWJJ4PNp6WdOMBVFQISeGg3QyimdW4lEfL86YYjTru4XHMMisAMk+vjcdgOy126Wap2BQ/L5VUkyuNea32hDVfr6cV6g7l/dh8wk6uVPRVa6yshWoCsZAENH1d1KCou35uiabSsnyNYVgxasX2+02FDSwnzJAWpnBU3pl5yTGGLSIN+dQBSz76DthaDeXj72+3HR84A3stGWtudn9rN8t+LausnxBK3pBszq5sn0L8I3uchF4oVsvDY4n0fB+73Nzm01NbjsYM8V3GpX7ji+17DAMhlFybFiquyEIcMThQVk7sXUlrTbCfFEr5Jmq20GYe5mjv0m+ClrYyb0p9xLsh8da8WgyCOjBBQKvb6JRMoaKFtwZrqM69WFD8NJyRr7Aj8sCnMDn4202DEFEg2T3Qh9Esti8KAzA65PM6bA7EWzQNk6Gv2xkcGCEriPYTzHaWIwMGBYlP2dkEU2NREDcYhA/GxA2c4iuNBbq9YUGOjM97xv18i0nTz7gurdubUuUMZEWqoslOQ/54zgyoAMlNZF4XKLd6scd63UnT14y8s9bqhYgIFevGog471iWhbQo9Q6MaE5mRDFuGCGSMPI936kdPWpLfumr/6eNc6cqfhE6MNlxcS2o1w/V6+H0tP8ho/yad1+QxtKdj7zZAdgD0OCWBGRZ7Oo6gCuEGwJAk6vynVTjNMNI4j505bw0phcfeUNAyUJl08NUpyY8SmSvN9fAlTXoBXJkZkcLVJGjAher/E6mgngRUTt51yUf5y89suRLOlqobggrzMCQ0BxlZsrAAP7yy72Akmca8R/Ic7lbcrfnLoFGjERpNorGAzhO1pGQ+CzT+lk6TnduWEOwXUO/BUfWQxnviRcJsLOiFoCe2ygveHEUtxg9uPhvdOfp1dXTdz6DsEF0hHtJr2TaADGI2hw9f3ZvdXXv7Bch3AF3CPZqgR8cGmBkSiZCf9de7bRX4v23wbmz0vn27vnX7p26/TUXj2NeUZqlVleSHKVqGYZiHnIZOnb+8plTp+65uMvyI0e1TaflSRKRlpJarDZhC95a67RX4055egIXKJkf/oV8C3RyPhfmyrl6LoI6tpdbhFoWVIADpWJzMBk7oziifnP8yi+KnCF5xfcb+XI5jy+I47X/IM9fW73x3d8/cuTdB/9kC6rdL7mlkos33NIDu7vvPvjHj15bIV+98Z3V1t8l9+aaQiUFoob2mwfnMRSw03p6GcB12PTJHwCCFfevIzI97//74pn+008vnllENv5+e9j+dnvUvoJGF0fDfxuNLg6v3Kjf/56swsqFEkNh6jRTgektobk92GNAA4BwAPkMk9Fnzz/+ptrH9t/ymLcy/6sP3T/X7fW6rlsKCt7q9vbqxt4Jsrr51t2n93d+7+LK3MLC3Pz9b3mg645cz1t94hMfWl2v127wyUvkKkTjPIwMVQoJeZS2DgrgKV9AuM2K3RmxDBP8RVTY/+GPvvCFZ+6+I9ntDav1vOWcObZ+1+Th463V+NBQV2XbKgbN/Pzd6K/3f4iOQk+Jh5XJ2p+fu+uN5VCWnsFEM4a9+I5K0dAIfrWYSjapj5NPwMyyuqmTdNBBEOeHToR+9hforv2frJxZgf/mu971k2vS/tU5CO3VVfzT/e6NNX2efAmsLUzXlE+TKGwdVEMH7Dgc/+IyOX4UDfdfPPXiiy/e9/6dB4+dWxq4ruX0F04dvrzxyOl4a365UvN04/Dq4vHepfvQq/a/hhH0pXKxtrH9K3ffc3l7o1aSpRexpFmV6qWF/qqpS/j1szltkH+8MSdQmAd+FpXTjJVveHr2omCYoB8guv+zTz311Kcu3NPfG2w027ph6O3mxmCvf89auV9rd2XO5W671i+vXcBf3792AbpSpdq66ehDb3jDG48diSoKfYowx7vjyM7h3Tt8h5LzMz/hH5EvAn9VBXcduNmfRhtPSCcRQmEEHkKnJyfH45OTJ7Zb7Sja3D6PGttnF5ebjbfgXDwe743H6PHHRyf2PnnylvHp/R/7p49evu/hV52//X0H71i+R34z9zu5D+Qez304968wWhCyA20yyhgpewGSfQDZBKfB6g8Eh3BEBnRwWEetZagyUnE8KC2n9e+ET2ZNAgSnrziX4ylsTl/pHAiaSZINDAdwfDbw0tBPlpaHyGvlW/wXcFc8O2vDWXkNpoLsBQybQW72uhRgmNXwy0+QNugZT697UKJpgeR2WvWt918Zr7SqhoOIFEDlqclYpwqTKfPNktrrdcbFhiuhb3UxRVrYajFHsXRLlVVGxTtnoCSlaDAFJHWeSViIYigTLRcZyPcZsy1J86hq6AqlpOjnPaApZrHfAP66/gL6qWlt3V8uy2yrvzTuHXVcTnv1VrvcV6GOqC4USrYC9QQ1CfHisL4WS8xzj/cmg6UdENQYxHjewBqVb13fIufSnWrdjULdc4pr83LS7xYHzbi7sD3qpis1mZcbt1ddj1LEqWy4jq/BZGUyq0gEm4LIpormmiXT1AhSDcUvnujaQdNXiroCqtsyZJtUbSJjT8ZEDsrMqRshlwzZZDcVgkavFPqufx2hfag97sDyue3dWzYuF0sKX1/oD+Z2bJuzbrXeKnXzXC6aLQc0tF9abBDa2OwsH5pfY7xaeWC7N68FNpUdbWXl9GNJ95dxWLywTJxmIvZ8IN5leBAxIJVAMGfvNeGDh+cef3PtY+i3HvPT3gMP35/Mw5/rlv2Ct7a1tbb+/8Ph/wVHej4HAHicY2BkYGAA4r98tpfj+W2+MnAzvwCKMFyd/LcOmWZ+yPwASHEwMIF4AGSaDEoAAHicY2BkYGB+wcAAJx8yMDKgAjEARMsC03icY2BgYGB+QX0MAD2xE0gAAAAAAGIBoAHUAjwDaAOIBLYGlAdaCHoI/glOCYAJvAoECiYKcAq6Cu4MRAyAAAB4nGNgZGBgEGMMZeBkAAEmIOYCQgaG/2A+AwAT0gGMAHicXY69TsMwFIVP+odoEAIhMZulC1LSduwDtDMduqeJ0x8lceS4VSsxM/MUzDwFz8WJeyUqbOn6O+ceXxvAA34QoF0B+r62q4Mbqgt3SXfCPfKjcB8hnoUHVC/CQ7xiJBziCW+cEPRu6QyRCXdwj0q4S/9duEf+EO5z+qfwgP6X8BArfAuHGAWD0y411VJvDkViPfuy0rbZmUpNorHXC11pmzidqfVZNcfN1Llc5daUam4qp4vCqNqavU5dtHWunsVxLn6UmhIn7JDC8NdLaGxwQIEE9sr/oxUTFg11qxQmiDC+6i/Yr3wmgeOZMbPGmbXBkbOndB1y6pwZg5I09zfbdMFt6NS+t6eT0o+w9bdqzBBz5//ykX+7/AVV81OKAHicbYzHDsIwFAS9IQ1C6OX7iG0Skxc/ywWJv6eJG3Oa1UgrMvFlIf5zQoYZchQoUaHGHAs0WKLFCmtssMUOexxwxAlnUXbEcgyzLvW5HIxrJHFSyRFfVCGZ2DeSp+liFRmr62uyMhq2RU/c6ewWqjHoycVHOYZrIppPRnp+H+WOXpdeK65D1M7YyO1PyPRDrN6LU/xkvmvf/uSTy5h8JJ0nq1iIJwkEPv4AAAA=) format("woff"); } .xicon { diff --git a/public/pxt/main.js b/public/pxt/main.js index a034760..f2ee1d5 100644 --- a/public/pxt/main.js +++ b/public/pxt/main.js @@ -9773,22 +9773,22 @@ function placeHoldersCount (b64) { function byteLength (b64) { // base64 is 4/3 + up to two characters of the original data - return b64.length * 3 / 4 - placeHoldersCount(b64) + return (b64.length * 3 / 4) - placeHoldersCount(b64) } function toByteArray (b64) { - var i, j, l, tmp, placeHolders, arr + var i, l, tmp, placeHolders, arr var len = b64.length placeHolders = placeHoldersCount(b64) - arr = new Arr(len * 3 / 4 - placeHolders) + arr = new Arr((len * 3 / 4) - placeHolders) // if there are placeholders, only get up to the last complete 4 chars l = placeHolders > 0 ? len - 4 : len var L = 0 - for (i = 0, j = 0; i < l; i += 4, j += 3) { + for (i = 0; i < l; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[L++] = (tmp >> 16) & 0xFF arr[L++] = (tmp >> 8) & 0xFF @@ -17417,7 +17417,7 @@ DeferredIterator.prototype._operation = function (method, args) { module.exports = DeferredIterator; -},{"abstract-leveldown":53,"util":303}],49:[function(require,module,exports){ +},{"abstract-leveldown":53,"util":304}],49:[function(require,module,exports){ (function (Buffer,process){ var util = require('util') , AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN @@ -17477,7 +17477,7 @@ module.exports = DeferredLevelDOWN module.exports.DeferredIterator = DeferredIterator }).call(this,{"isBuffer":require("../is-buffer/index.js")},require('_process')) -},{"../is-buffer/index.js":91,"./deferred-iterator":48,"_process":136,"abstract-leveldown":53,"util":303}],50:[function(require,module,exports){ +},{"../is-buffer/index.js":91,"./deferred-iterator":48,"_process":136,"abstract-leveldown":53,"util":304}],50:[function(require,module,exports){ (function (process){ /* Copyright (c) 2013 Rod Vagg, MIT License */ @@ -17889,7 +17889,7 @@ AbstractLevelDOWN.prototype._checkKey = function (obj, type) { module.exports = AbstractLevelDOWN }).call(this,{"isBuffer":require("../../../is-buffer/index.js")},require('_process')) -},{"../../../is-buffer/index.js":91,"./abstract-chained-batch":50,"./abstract-iterator":51,"_process":136,"xtend":305}],53:[function(require,module,exports){ +},{"../../../is-buffer/index.js":91,"./abstract-chained-batch":50,"./abstract-iterator":51,"_process":136,"xtend":306}],53:[function(require,module,exports){ exports.AbstractLevelDOWN = require('./abstract-leveldown') exports.AbstractIterator = require('./abstract-iterator') exports.AbstractChainedBatch = require('./abstract-chained-batch') @@ -21871,7 +21871,7 @@ ReadStream.prototype._cleanup = function(){ }; -},{"inherits":90,"level-errors":96,"readable-stream":104,"xtend":305}],98:[function(require,module,exports){ +},{"inherits":90,"level-errors":96,"readable-stream":104,"xtend":306}],98:[function(require,module,exports){ module.exports = Array.isArray || function (arr) { return Object.prototype.toString.call(arr) == '[object Array]'; }; @@ -22972,7 +22972,7 @@ function indexOf (xs, x) { } }).call(this,require('_process')) -},{"./_stream_duplex":99,"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":90,"isarray":98,"stream":284,"string_decoder/":285,"util":45}],102:[function(require,module,exports){ +},{"./_stream_duplex":99,"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":90,"isarray":98,"stream":285,"string_decoder/":286,"util":45}],102:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -23664,7 +23664,7 @@ function endWritable(stream, state, cb) { } }).call(this,require('_process')) -},{"./_stream_duplex":99,"_process":136,"buffer":46,"core-util-is":47,"inherits":90,"stream":284}],104:[function(require,module,exports){ +},{"./_stream_duplex":99,"_process":136,"buffer":46,"core-util-is":47,"inherits":90,"stream":285}],104:[function(require,module,exports){ (function (process){ exports = module.exports = require('./lib/_stream_readable.js'); exports.Stream = require('stream'); @@ -23678,7 +23678,7 @@ if (!process.browser && process.env.READABLE_STREAM === 'disable') { } }).call(this,require('_process')) -},{"./lib/_stream_duplex.js":99,"./lib/_stream_passthrough.js":100,"./lib/_stream_readable.js":101,"./lib/_stream_transform.js":102,"./lib/_stream_writable.js":103,"_process":136,"stream":284}],105:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":99,"./lib/_stream_passthrough.js":100,"./lib/_stream_readable.js":101,"./lib/_stream_transform.js":102,"./lib/_stream_writable.js":103,"_process":136,"stream":285}],105:[function(require,module,exports){ /* Copyright (c) 2012-2016 LevelUP contributors * See list at * MIT License @@ -24166,7 +24166,7 @@ module.exports.repair = deprecate( }).call(this,require('_process')) -},{"./batch":105,"./util":107,"_process":136,"deferred-leveldown":49,"events":59,"level-codec":94,"level-errors":96,"level-iterator-stream":97,"prr":108,"util":303,"xtend":305}],107:[function(require,module,exports){ +},{"./batch":105,"./util":107,"_process":136,"deferred-leveldown":49,"events":59,"level-codec":94,"level-errors":96,"level-iterator-stream":97,"prr":108,"util":304,"xtend":306}],107:[function(require,module,exports){ /* Copyright (c) 2012-2016 LevelUP contributors * See list at * MIT License @@ -24245,7 +24245,7 @@ module.exports = { , isDefined : isDefined } -},{"../package.json":109,"level-errors":96,"leveldown":45,"leveldown/package":45,"semver":45,"util":303,"xtend":305}],108:[function(require,module,exports){ +},{"../package.json":109,"level-errors":96,"leveldown":45,"leveldown/package":45,"semver":45,"util":304,"xtend":306}],108:[function(require,module,exports){ /*! * prr * (c) 2013 Rod Vagg @@ -24311,52 +24311,29 @@ module.exports = { }) },{}],109:[function(require,module,exports){ module.exports={ - "_args": [ - [ - { - "raw": "levelup@1.3.2", - "scope": null, - "escapedName": "levelup", - "name": "levelup", - "rawSpec": "1.3.2", - "spec": "1.3.2", - "type": "version" - }, - "d:\\src\\cdiddy77\\pxt\\node_modules\\pouchdb" - ] - ], "_from": "levelup@1.3.2", "_id": "levelup@1.3.2", - "_inCache": true, + "_inBundle": false, + "_integrity": "sha1-syHTBx8OdcLfry8P6IZOW5o4e8k=", "_location": "/levelup", - "_nodeVersion": "6.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/levelup-1.3.2.tgz_1463496525467_0.4644940535072237" - }, - "_npmUser": { - "name": "ralphtheninja", - "email": "ralphtheninja@riseup.net" - }, - "_npmVersion": "3.8.6", "_phantomChildren": {}, "_requested": { + "type": "version", + "registry": true, "raw": "levelup@1.3.2", - "scope": null, - "escapedName": "levelup", "name": "levelup", + "escapedName": "levelup", "rawSpec": "1.3.2", - "spec": "1.3.2", - "type": "version" + "saveSpec": null, + "fetchSpec": "1.3.2" }, "_requiredBy": [ "/pouchdb" ], "_resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.2.tgz", "_shasum": "b321d3071f0e75c2dfaf2f0fe8864e5b9a387bc9", - "_shrinkwrap": null, "_spec": "levelup@1.3.2", - "_where": "d:\\src\\cdiddy77\\pxt\\node_modules\\pouchdb", + "_where": "D:\\repos\\pxt\\node_modules\\pouchdb", "browser": { "leveldown": false, "leveldown/package": false, @@ -24365,6 +24342,7 @@ module.exports={ "bugs": { "url": "https://github.com/level/levelup/issues" }, + "bundleDependencies": false, "contributors": [ { "name": "Rod Vagg", @@ -24446,6 +24424,7 @@ module.exports={ "semver": "~5.1.0", "xtend": "~4.0.0" }, + "deprecated": false, "description": "Fast & simple storage - a Node.js-style LevelDB wrapper", "devDependencies": { "async": "~1.5.0", @@ -24461,12 +24440,6 @@ module.exports={ "tap": "~2.3.1", "tape": "~4.2.1" }, - "directories": {}, - "dist": { - "shasum": "b321d3071f0e75c2dfaf2f0fe8864e5b9a387bc9", - "tarball": "https://registry.npmjs.org/levelup/-/levelup-1.3.2.tgz" - }, - "gitHead": "bcc242cfc4ec035f9228a5cd54903cb126659a00", "homepage": "https://github.com/level/levelup", "keywords": [ "leveldb", @@ -24479,23 +24452,7 @@ module.exports={ ], "license": "MIT", "main": "lib/levelup.js", - "maintainers": [ - { - "name": "rvagg", - "email": "rod@vagg.org" - }, - { - "name": "ralphtheninja", - "email": "ralphtheninja@riseup.net" - }, - { - "name": "juliangruber", - "email": "julian@juliangruber.com" - } - ], "name": "levelup", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", "repository": { "type": "git", "url": "git+https://github.com/level/levelup.git" @@ -26509,7 +26466,7 @@ AbstractLevelDOWN.prototype._checkKey = function (obj, type) { module.exports = AbstractLevelDOWN }).call(this,{"isBuffer":require("../../../is-buffer/index.js")},require('_process')) -},{"../../../is-buffer/index.js":91,"./abstract-chained-batch":113,"./abstract-iterator":114,"_process":136,"xtend":305}],116:[function(require,module,exports){ +},{"../../../is-buffer/index.js":91,"./abstract-chained-batch":113,"./abstract-iterator":114,"_process":136,"xtend":306}],116:[function(require,module,exports){ arguments[4][53][0].apply(exports,arguments) },{"./abstract-chained-batch":113,"./abstract-iterator":114,"./abstract-leveldown":115,"./is-leveldown":117,"dup":53}],117:[function(require,module,exports){ arguments[4][54][0].apply(exports,arguments) @@ -30087,7 +30044,7 @@ if (!PDB) { MemoryPouchPlugin(PDB); } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"_process":136,"argsarray":42,"buffer":46,"debug":124,"double-ended-queue":55,"events":59,"inherits":126,"js-extend":93,"levelup":106,"lie":127,"memdown":112,"pouchdb":123,"pouchdb-collections":120,"spark-md5":283,"sublevel-pouchdb":288,"through2":134,"vuvuzela":304}],123:[function(require,module,exports){ +},{"_process":136,"argsarray":42,"buffer":46,"debug":124,"double-ended-queue":55,"events":59,"inherits":126,"js-extend":93,"levelup":106,"lie":127,"memdown":112,"pouchdb":123,"pouchdb-collections":120,"spark-md5":284,"sublevel-pouchdb":289,"through2":134,"vuvuzela":305}],123:[function(require,module,exports){ (function (process,global){ 'use strict'; @@ -40778,7 +40735,7 @@ PouchDB.plugin(IDBPouch) module.exports = PouchDB; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":136,"argsarray":42,"debug":124,"es6-promise-pool":58,"events":59,"inherits":126,"js-extend":93,"lie":127,"pouchdb-collate":118,"pouchdb-collections":120,"scope-eval":282,"spark-md5":283,"vuvuzela":304}],124:[function(require,module,exports){ +},{"_process":136,"argsarray":42,"debug":124,"es6-promise-pool":58,"events":59,"inherits":126,"js-extend":93,"lie":127,"pouchdb-collate":118,"pouchdb-collections":120,"scope-eval":283,"spark-md5":284,"vuvuzela":305}],124:[function(require,module,exports){ /** * This is the web browser implementation of `debug()`. @@ -42490,7 +42447,7 @@ function indexOf(xs, x) { return -1; } }).call(this,require('_process')) -},{"./_stream_duplex":129,"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":126,"isarray":92,"process-nextick-args":135,"string_decoder/":285,"util":45}],131:[function(require,module,exports){ +},{"./_stream_duplex":129,"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":126,"isarray":92,"process-nextick-args":135,"string_decoder/":286,"util":45}],131:[function(require,module,exports){ // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where @@ -43190,7 +43147,7 @@ function CorkedRequest(state) { }; } }).call(this,require('_process')) -},{"./_stream_duplex":129,"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":126,"process-nextick-args":135,"util-deprecate":300}],133:[function(require,module,exports){ +},{"./_stream_duplex":129,"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":126,"process-nextick-args":135,"util-deprecate":301}],133:[function(require,module,exports){ module.exports = require("./lib/_stream_transform.js") },{"./lib/_stream_transform.js":131}],134:[function(require,module,exports){ @@ -43293,7 +43250,7 @@ module.exports.obj = through2(function (options, transform, flush) { }) }).call(this,require('_process')) -},{"_process":136,"readable-stream/transform":133,"util":303,"xtend":305}],135:[function(require,module,exports){ +},{"_process":136,"readable-stream/transform":133,"util":304,"xtend":306}],135:[function(require,module,exports){ (function (process){ 'use strict'; @@ -61208,8 +61165,152 @@ module.exports = require('./lib/React'); module.exports = require('./lib/_stream_duplex.js'); },{"./lib/_stream_duplex.js":269}],269:[function(require,module,exports){ -arguments[4][129][0].apply(exports,arguments) -},{"./_stream_readable":271,"./_stream_writable":273,"core-util-is":47,"dup":129,"inherits":90,"process-nextick-args":135}],270:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node 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. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +var keys = objectKeys(Writable.prototype); +for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + processNextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + processNextTick(cb, err); +}; + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} +},{"./_stream_readable":271,"./_stream_writable":273,"core-util-is":47,"inherits":90,"process-nextick-args":135}],270:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node 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. + // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. @@ -61237,15 +61338,37 @@ PassThrough.prototype._transform = function (chunk, encoding, cb) { cb(null, chunk); }; },{"./_stream_transform":272,"core-util-is":47,"inherits":90}],271:[function(require,module,exports){ -(function (process){ -'use strict'; +(function (process,global){ +// Copyright Joyent, Inc. and other Node 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. -module.exports = Readable; +'use strict'; /**/ + var processNextTick = require('process-nextick-args'); /**/ +module.exports = Readable; + /**/ var isArray = require('isarray'); /**/ @@ -61268,8 +61391,17 @@ var EElistenerCount = function (emitter, type) { var Stream = require('./internal/streams/stream'); /**/ +// TODO(bmeurer): Change this back to const once hole checks are +// properly optimized away early in Ignition+TurboFan. /**/ var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} /**/ /**/ @@ -61288,6 +61420,7 @@ if (debugUtil && debugUtil.debuglog) { /**/ var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); var StringDecoder; util.inherits(Readable, Stream); @@ -61326,7 +61459,7 @@ function ReadableState(options, stream) { this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; // cast to ints. - this.highWaterMark = ~~this.highWaterMark; + this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the // linked list can remove elements from the beginning faster than @@ -61340,10 +61473,10 @@ function ReadableState(options, stream) { this.endEmitted = false; this.reading = false; - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. this.sync = true; // whenever we return null, then we set a flag to say @@ -61353,15 +61486,14 @@ function ReadableState(options, stream) { this.readableListening = false; this.resumeScheduled = false; + // has it been destroyed + this.destroyed = false; + // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - // the number of writers that are awaiting a drain event in .pipe()s this.awaitDrain = 0; @@ -61387,87 +61519,129 @@ function Readable(options) { // legacy this.readable = true; - if (options && typeof options.read === 'function') this._read = options.read; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } Stream.call(this); } +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + // Manually shove something into the read() buffer. // This returns true if the highWaterMark has not been hit yet, // similar to how Writable.write() returns true if you should // write() some more. Readable.prototype.push = function (chunk, encoding) { var state = this._readableState; + var skipChunkCheck; - if (!state.objectMode && typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; } + } else { + skipChunkCheck = true; } - return readableAddChunk(this, state, chunk, encoding, false); + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); }; // Unshift should *always* be something directly out of read() Readable.prototype.unshift = function (chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); + return readableAddChunk(this, chunk, null, true, false); }; -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (chunk === null) { +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { state.reading = false; onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var _e = new Error('stream.unshift() after end event'); - stream.emit('error', _e); - } else { - var skipAdd; - if (state.decoder && !addToFront && !encoding) { - chunk = state.decoder.write(chunk); - skipAdd = !state.objectMode && chunk.length === 0; + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); } - if (!addToFront) state.reading = false; - - // Don't add to the buffer if we've decoded to an empty string chunk and - // we're not in object mode - if (!skipAdd) { - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); + addChunk(stream, state, chunk, false); } } - - maybeReadMore(stream, state); + } else if (!addToFront) { + state.reading = false; } - } else if (!addToFront) { - state.reading = false; } return needMoreData(state); } +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + // if it's past the high water mark, we can push in some more. // Also, if we have no data yet, we can stand some // more bytes. This is to work around cases where hwm=0, @@ -61479,6 +61653,10 @@ function needMoreData(state) { return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); } +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + // backwards compatibility. Readable.prototype.setEncoding = function (enc) { if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; @@ -61627,14 +61805,6 @@ Readable.prototype.read = function (n) { return ret; }; -function chunkInvalid(state, chunk) { - var er = null; - if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - function onEofChunk(stream, state) { if (state.ended) return; if (state.decoder) { @@ -61726,10 +61896,13 @@ Readable.prototype.pipe = function (dest, pipeOpts) { if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); dest.on('unpipe', onunpipe); - function onunpipe(readable) { + function onunpipe(readable, unpipeInfo) { debug('onunpipe'); if (readable === src) { - cleanup(); + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } } } @@ -61848,6 +62021,7 @@ function pipeOnDrain(src) { Readable.prototype.unpipe = function (dest) { var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; // if we're not piping anywhere, then do nothing. if (state.pipesCount === 0) return this; @@ -61863,7 +62037,7 @@ Readable.prototype.unpipe = function (dest) { state.pipes = null; state.pipesCount = 0; state.flowing = false; - if (dest) dest.emit('unpipe', this); + if (dest) dest.emit('unpipe', this, unpipeInfo); return this; } @@ -61878,7 +62052,7 @@ Readable.prototype.unpipe = function (dest) { state.flowing = false; for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this); + dests[i].emit('unpipe', this, unpipeInfo); }return this; } @@ -61890,7 +62064,7 @@ Readable.prototype.unpipe = function (dest) { state.pipesCount -= 1; if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this); + dest.emit('unpipe', this, unpipeInfo); return this; }; @@ -61911,7 +62085,7 @@ Readable.prototype.on = function (ev, fn) { if (!state.reading) { processNextTick(nReadingNextTick, this); } else if (state.length) { - emitReadable(this, state); + emitReadable(this); } } } @@ -62172,8 +62346,29 @@ function indexOf(xs, x) { } return -1; } -}).call(this,require('_process')) -},{"./_stream_duplex":269,"./internal/streams/BufferList":274,"./internal/streams/stream":275,"_process":136,"core-util-is":47,"events":59,"inherits":90,"isarray":92,"process-nextick-args":135,"safe-buffer":281,"string_decoder/":276,"util":45}],272:[function(require,module,exports){ +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./_stream_duplex":269,"./internal/streams/BufferList":274,"./internal/streams/destroy":275,"./internal/streams/stream":276,"_process":136,"core-util-is":47,"events":59,"inherits":90,"isarray":92,"process-nextick-args":135,"safe-buffer":282,"string_decoder/":277,"util":45}],272:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node 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. + // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where @@ -62247,7 +62442,9 @@ function afterTransform(stream, er, data) { var cb = ts.writecb; - if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + if (!cb) { + return stream.emit('error', new Error('write callback called multiple times')); + } ts.writechunk = null; ts.writecb = null; @@ -62340,6 +62537,15 @@ Transform.prototype._read = function (n) { } }; +Transform.prototype._destroy = function (err, cb) { + var _this = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this.emit('close'); + }); +}; + function done(stream, er, data) { if (er) return stream.emit('error', er); @@ -62357,19 +62563,62 @@ function done(stream, er, data) { return stream.push(null); } },{"./_stream_duplex":269,"core-util-is":47,"inherits":90}],273:[function(require,module,exports){ -(function (process){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node 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. + // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all // the drain event emission and buffering. 'use strict'; -module.exports = Writable; - /**/ + var processNextTick = require('process-nextick-args'); /**/ +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + /**/ var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; /**/ @@ -62397,19 +62646,21 @@ var Stream = require('./internal/streams/stream'); /**/ var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} /**/ +var destroyImpl = require('./internal/streams/destroy'); + util.inherits(Writable, Stream); function nop() {} -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - function WritableState(options, stream) { Duplex = Duplex || require('./_stream_duplex'); @@ -62429,7 +62680,10 @@ function WritableState(options, stream) { this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; // cast to ints. - this.highWaterMark = ~~this.highWaterMark; + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; // drain event flag. this.needDrain = false; @@ -62440,6 +62694,9 @@ function WritableState(options, stream) { // when 'finish' is emitted this.finished = false; + // has it been destroyed + this.destroyed = false; + // should we decode strings into buffers before passing to _write? // this is here so that some node-core streams can optimize string // handling at a lower level. @@ -62521,7 +62778,7 @@ WritableState.prototype.getBuffer = function getBuffer() { Object.defineProperty(WritableState.prototype, 'buffer', { get: internalUtil.deprecate(function () { return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') }); } catch (_) {} })(); @@ -62567,6 +62824,10 @@ function Writable(options) { if (typeof options.write === 'function') this._write = options.write; if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; } Stream.call(this); @@ -62607,7 +62868,11 @@ function validChunk(stream, state, chunk, cb) { Writable.prototype.write = function (chunk, encoding, cb) { var state = this._writableState; var ret = false; - var isBuf = Buffer.isBuffer(chunk); + var isBuf = _isUint8Array(chunk) && !state.objectMode; + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } if (typeof encoding === 'function') { cb = encoding; @@ -62662,8 +62927,12 @@ function decodeChunk(state, chunk, encoding) { // If we return false, then we need a drain event, so set that flag. function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { if (!isBuf) { - chunk = decodeChunk(state, chunk, encoding); - if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } } var len = state.objectMode ? 1 : chunk.length; @@ -62675,7 +62944,13 @@ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { if (state.writing || state.corked) { var last = state.lastBufferedRequest; - state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; if (last) { last.next = state.lastBufferedRequest; } else { @@ -62700,10 +62975,26 @@ function doWrite(stream, state, writev, len, chunk, encoding, cb) { function onwriteError(stream, state, sync, er, cb) { --state.pendingcb; - if (sync) processNextTick(cb, er);else cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + processNextTick(cb, er); + // this can emit finish, and it will always happen + // after error + processNextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } } function onwriteStateUpdate(state) { @@ -62768,11 +63059,14 @@ function clearBuffer(stream, state) { holder.entry = entry; var count = 0; + var allBuffers = true; while (entry) { buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; entry = entry.next; count += 1; } + buffer.allBuffers = allBuffers; doWrite(stream, state, true, state.length, buffer, '', holder.finish); @@ -62846,23 +63140,37 @@ Writable.prototype.end = function (chunk, encoding, cb) { function needFinish(state) { return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; } - -function prefinish(stream, state) { - if (!state.prefinished) { +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } state.prefinished = true; stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + processNextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } } } function finishMaybe(stream, state) { var need = needFinish(state); if (need) { + prefinish(stream, state); if (state.pendingcb === 0) { - prefinish(stream, state); state.finished = true; stream.emit('finish'); - } else { - prefinish(stream, state); } } return need; @@ -62878,99 +63186,201 @@ function endWritable(stream, state, cb) { stream.writable = false; } -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} - this.next = null; - this.entry = null; - this.finish = function (err) { - var entry = _this.entry; - _this.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; } - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = _this; - } else { - state.corkedRequestsFree = _this; + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; } - }; -} -}).call(this,require('_process')) -},{"./_stream_duplex":269,"./internal/streams/stream":275,"_process":136,"core-util-is":47,"inherits":90,"process-nextick-args":135,"safe-buffer":281,"util-deprecate":300}],274:[function(require,module,exports){ + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./_stream_duplex":269,"./internal/streams/destroy":275,"./internal/streams/stream":276,"_process":136,"core-util-is":47,"inherits":90,"process-nextick-args":135,"safe-buffer":282,"util-deprecate":301}],274:[function(require,module,exports){ 'use strict'; /**/ +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var Buffer = require('safe-buffer').Buffer; /**/ -module.exports = BufferList; - -function BufferList() { - this.head = null; - this.tail = null; - this.length = 0; +function copyBuffer(src, target, offset) { + src.copy(target, offset); } -BufferList.prototype.push = function (v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; -}; +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); -BufferList.prototype.unshift = function (v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; -}; + this.head = null; + this.tail = null; + this.length = 0; + } -BufferList.prototype.shift = function () { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; -}; + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; -BufferList.prototype.clear = function () { - this.head = this.tail = null; - this.length = 0; -}; + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; -BufferList.prototype.join = function (s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; -}; + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; -BufferList.prototype.concat = function (n) { - if (this.length === 0) return Buffer.alloc(0); - if (this.length === 1) return this.head.data; - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - p.data.copy(ret, i); - i += p.data.length; - p = p.next; + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); +},{"safe-buffer":282}],275:[function(require,module,exports){ +'use strict'; + +/**/ + +var processNextTick = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + processNextTick(emitErrorNT, this, err); + } + return; } - return ret; + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + processNextTick(emitErrorNT, _this, err); + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy }; -},{"safe-buffer":281}],275:[function(require,module,exports){ +},{"process-nextick-args":135}],276:[function(require,module,exports){ module.exports = require('events').EventEmitter; -},{"events":59}],276:[function(require,module,exports){ +},{"events":59}],277:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; @@ -63243,10 +63653,10 @@ function simpleWrite(buf) { function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ''; } -},{"safe-buffer":281}],277:[function(require,module,exports){ +},{"safe-buffer":282}],278:[function(require,module,exports){ module.exports = require('./readable').PassThrough -},{"./readable":278}],278:[function(require,module,exports){ +},{"./readable":279}],279:[function(require,module,exports){ exports = module.exports = require('./lib/_stream_readable.js'); exports.Stream = exports; exports.Readable = exports; @@ -63255,16 +63665,77 @@ exports.Duplex = require('./lib/_stream_duplex.js'); exports.Transform = require('./lib/_stream_transform.js'); exports.PassThrough = require('./lib/_stream_passthrough.js'); -},{"./lib/_stream_duplex.js":269,"./lib/_stream_passthrough.js":270,"./lib/_stream_readable.js":271,"./lib/_stream_transform.js":272,"./lib/_stream_writable.js":273}],279:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":269,"./lib/_stream_passthrough.js":270,"./lib/_stream_readable.js":271,"./lib/_stream_transform.js":272,"./lib/_stream_writable.js":273}],280:[function(require,module,exports){ module.exports = require('./readable').Transform -},{"./readable":278}],280:[function(require,module,exports){ +},{"./readable":279}],281:[function(require,module,exports){ module.exports = require('./lib/_stream_writable.js'); -},{"./lib/_stream_writable.js":273}],281:[function(require,module,exports){ -module.exports = require('buffer') +},{"./lib/_stream_writable.js":273}],282:[function(require,module,exports){ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} -},{"buffer":46}],282:[function(require,module,exports){ +},{"buffer":46}],283:[function(require,module,exports){ // Generated by CoffeeScript 1.9.2 (function() { var hasProp = {}.hasOwnProperty, @@ -63288,7 +63759,7 @@ module.exports = require('buffer') }).call(this); -},{}],283:[function(require,module,exports){ +},{}],284:[function(require,module,exports){ (function (factory) { if (typeof exports === 'object') { // Node/CommonJS @@ -63993,7 +64464,7 @@ module.exports = require('buffer') return SparkMD5; })); -},{}],284:[function(require,module,exports){ +},{}],285:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -64122,7 +64593,7 @@ Stream.prototype.pipe = function(dest, options) { return dest; }; -},{"events":59,"inherits":90,"readable-stream/duplex.js":268,"readable-stream/passthrough.js":277,"readable-stream/readable.js":278,"readable-stream/transform.js":279,"readable-stream/writable.js":280}],285:[function(require,module,exports){ +},{"events":59,"inherits":90,"readable-stream/duplex.js":268,"readable-stream/passthrough.js":278,"readable-stream/readable.js":279,"readable-stream/transform.js":280,"readable-stream/writable.js":281}],286:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -64345,7 +64816,7 @@ function base64DetectIncompleteChar(buffer) { this.charLength = this.charReceived ? 3 : 0; } -},{"buffer":46}],286:[function(require,module,exports){ +},{"buffer":46}],287:[function(require,module,exports){ module.exports = { encode: function (decodedKey) { return '\xff' + decodedKey[0] + '\xff' + decodedKey[1] @@ -64360,7 +64831,7 @@ module.exports = { } -},{}],287:[function(require,module,exports){ +},{}],288:[function(require,module,exports){ /* Copyright (c) 2012-2014 LevelUP contributors * See list at * MIT License @@ -64384,7 +64855,7 @@ module.exports = { , EncodingError : createError('EncodingError', LevelUPError) } -},{"errno":57}],288:[function(require,module,exports){ +},{"errno":57}],289:[function(require,module,exports){ var nut = require('./nut') var shell = require('./shell') //the shell surrounds the nut var Codec = require('level-codec') @@ -64399,7 +64870,7 @@ module.exports = function (db) { } -},{"./codec/legacy":286,"./nut":289,"./read-stream":290,"./shell":291,"level-codec":94}],289:[function(require,module,exports){ +},{"./codec/legacy":287,"./nut":290,"./read-stream":291,"./shell":292,"level-codec":94}],290:[function(require,module,exports){ var ltgt = require('ltgt') function isFunction (f) { @@ -64581,7 +65052,7 @@ module.exports = function (db, precodec, codec, compare) { } -},{"ltgt":293}],290:[function(require,module,exports){ +},{"ltgt":294}],291:[function(require,module,exports){ /* Copyright (c) 2012-2014 LevelUP contributors * See list at * MIT License @@ -64676,7 +65147,7 @@ ReadStream.prototype.toString = function () { module.exports = ReadStream -},{"./errors":287,"inherits":90,"readable-stream":299}],291:[function(require,module,exports){ +},{"./errors":288,"inherits":90,"readable-stream":300}],292:[function(require,module,exports){ (function (process){ var EventEmitter = require('events').EventEmitter @@ -64821,9 +65292,9 @@ var sublevel = module.exports = function (nut, prefix, createStream, options) { } }).call(this,require('_process')) -},{"./errors":287,"_process":136,"events":59}],292:[function(require,module,exports){ +},{"./errors":288,"_process":136,"events":59}],293:[function(require,module,exports){ arguments[4][98][0].apply(exports,arguments) -},{"dup":98}],293:[function(require,module,exports){ +},{"dup":98}],294:[function(require,module,exports){ (function (Buffer){ exports.compare = function (a, b) { @@ -64973,11 +65444,11 @@ exports.filter = function (range, compare) { } }).call(this,{"isBuffer":require("../../../is-buffer/index.js")}) -},{"../../../is-buffer/index.js":91}],294:[function(require,module,exports){ +},{"../../../is-buffer/index.js":91}],295:[function(require,module,exports){ arguments[4][99][0].apply(exports,arguments) -},{"./_stream_readable":296,"./_stream_writable":298,"_process":136,"core-util-is":47,"dup":99,"inherits":90}],295:[function(require,module,exports){ +},{"./_stream_readable":297,"./_stream_writable":299,"_process":136,"core-util-is":47,"dup":99,"inherits":90}],296:[function(require,module,exports){ arguments[4][100][0].apply(exports,arguments) -},{"./_stream_transform":297,"core-util-is":47,"dup":100,"inherits":90}],296:[function(require,module,exports){ +},{"./_stream_transform":298,"core-util-is":47,"dup":100,"inherits":90}],297:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -65963,7 +66434,7 @@ function indexOf (xs, x) { } }).call(this,require('_process')) -},{"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":90,"isarray":292,"stream":284,"string_decoder/":285}],297:[function(require,module,exports){ +},{"_process":136,"buffer":46,"core-util-is":47,"events":59,"inherits":90,"isarray":293,"stream":285,"string_decoder/":286}],298:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -66175,7 +66646,7 @@ function done(stream, er) { return stream.push(null); } -},{"./_stream_duplex":294,"core-util-is":47,"inherits":90}],298:[function(require,module,exports){ +},{"./_stream_duplex":295,"core-util-is":47,"inherits":90}],299:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -66565,7 +67036,7 @@ function endWritable(stream, state, cb) { } }).call(this,require('_process')) -},{"./_stream_duplex":294,"_process":136,"buffer":46,"core-util-is":47,"inherits":90,"stream":284}],299:[function(require,module,exports){ +},{"./_stream_duplex":295,"_process":136,"buffer":46,"core-util-is":47,"inherits":90,"stream":285}],300:[function(require,module,exports){ var Stream = require('stream'); // hack to fix a circular dependency issue when used with browserify exports = module.exports = require('./lib/_stream_readable.js'); exports.Stream = Stream; @@ -66575,7 +67046,7 @@ exports.Duplex = require('./lib/_stream_duplex.js'); exports.Transform = require('./lib/_stream_transform.js'); exports.PassThrough = require('./lib/_stream_passthrough.js'); -},{"./lib/_stream_duplex.js":294,"./lib/_stream_passthrough.js":295,"./lib/_stream_readable.js":296,"./lib/_stream_transform.js":297,"./lib/_stream_writable.js":298,"stream":284}],300:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":295,"./lib/_stream_passthrough.js":296,"./lib/_stream_readable.js":297,"./lib/_stream_transform.js":298,"./lib/_stream_writable.js":299,"stream":285}],301:[function(require,module,exports){ (function (global){ /** @@ -66646,16 +67117,16 @@ function config (name) { } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],301:[function(require,module,exports){ +},{}],302:[function(require,module,exports){ arguments[4][90][0].apply(exports,arguments) -},{"dup":90}],302:[function(require,module,exports){ +},{"dup":90}],303:[function(require,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } -},{}],303:[function(require,module,exports){ +},{}],304:[function(require,module,exports){ (function (process,global){ // Copyright Joyent, Inc. and other Node contributors. // @@ -67245,7 +67716,7 @@ function hasOwnProperty(obj, prop) { } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":302,"_process":136,"inherits":301}],304:[function(require,module,exports){ +},{"./support/isBuffer":303,"_process":136,"inherits":302}],305:[function(require,module,exports){ 'use strict'; /** @@ -67420,7 +67891,7 @@ exports.parse = function (str) { } }; -},{}],305:[function(require,module,exports){ +},{}],306:[function(require,module,exports){ module.exports = extend var hasOwnProperty = Object.prototype.hasOwnProperty; diff --git a/public/pxt/release.manifest b/public/pxt/release.manifest index 50d65fd..e2b8c76 100644 --- a/public/pxt/release.manifest +++ b/public/pxt/release.manifest @@ -52,7 +52,7 @@ https://az416426.vo.msecnd.net/scripts/a/ai.0.js /pxt/worker.js /pxt/monacoworker.js -# ver Wed Jul 12 2017 14:08:10 GMT-0700 (Pacific Daylight Time) +# ver Thu Jul 20 2017 17:13:08 GMT-0700 (Pacific Daylight Time) /pxt/target.js diff --git a/public/pxt/rtlsemantic.css b/public/pxt/rtlsemantic.css index b73276e..147df9c 100644 --- a/public/pxt/rtlsemantic.css +++ b/public/pxt/rtlsemantic.css @@ -112,6 +112,10 @@ /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -336,6 +340,10 @@ /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -569,142 +577,161 @@ input[type="password"] { -moz-appearance: none; /* mobile firefox too! */ } -/******************************* - Theme Overrides -*******************************/ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ -/** - * Correct `block` display not defined in IE 8/9. - */ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ /** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. */ html { - font-family: sans-serif; + line-height: 1.15; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } +/* Sections + ========================================================================== */ /** - * Remove default margin. + * Remove the margin in all browsers (opinionated). */ body { margin: 0; } -/* HTML5 display definitions - ========================================================================== */ /** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. - * Correct `block` display not defined for `main` in IE 11. + * Add the correct display in IE 9-. */ article, aside, -details, -figcaption, -figure, footer, header, -hgroup, -main, nav, -section, -summary { +section { display: block; } /** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. */ -audio, -canvas, -progress, -video { - display: inline-block; +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/* Grouping content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ +figcaption, +figure, +main { /* 1 */ - vertical-align: baseline; - /* 2 */ + display: block; } /** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. + * Add the correct margin in IE 8. */ -audio:not([controls]) { - display: none; +figure { + margin: 1em 40px; +} +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ height: 0; + /* 1 */ + overflow: visible; + /* 2 */ } /** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. */ -[hidden], -template { - display: none; +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } -/* Links +/* Text-level semantics ========================================================================== */ /** - * Remove the gray background color from active links in IE 10. + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { - background: transparent; + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ } /** - * Improve readability when focused and also mouse hovered in all browsers. + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ -a:active, -a:hover { - outline: 0; +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ } -/* Text-level semantics - ========================================================================== */ /** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ -abbr[title] { - border-bottom: 1px dotted; +b, +strong { + font-weight: inherit; } /** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { - font-weight: bold; + font-weight: bolder; } /** - * Address styling not present in Safari and Chrome. + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. */ -dfn { - font-style: italic; +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } /** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. + * Add the correct font style in Android 4.3-. */ -h1 { - font-size: 2em; - margin: 0.67em 0; +dfn { + font-style: italic; } /** - * Address styling not present in IE 8/9. + * Add the correct background and color in IE 9-. */ mark { - background: #ff0; + background-color: #ff0; color: #000; } /** - * Address inconsistent and variable font size in all browsers. + * Add the correct font size in all browsers. */ small { font-size: 80%; } /** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. */ sub, sup { @@ -713,218 +740,233 @@ sup { position: relative; vertical-align: baseline; } -sup { - top: -0.5em; -} sub { bottom: -0.25em; } -/* Embedded content - ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. - */ -img { - border: 0; -} -/** - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; +sup { + top: -0.5em; } -/* Grouping content +/* Embedded content ========================================================================== */ /** - * Address margin not present in IE 8/9 and Safari. + * Add the correct display in IE 9-. */ -figure { - margin: 1em 40px; +audio, +video { + display: inline-block; } /** - * Address differences between Firefox and other browsers. + * Add the correct display in iOS 4-7. */ -hr { +audio:not([controls]) { + display: none; height: 0; } /** - * Contain overflow in all browsers. + * Remove the border on images inside links in IE 10-. */ -pre { - overflow: auto; +img { + border-style: none; } /** - * Address odd `em`-unit font size rendering in all browsers. + * Hide the overflow in IE. */ -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; +svg:not(:root) { + overflow: hidden; } /* Forms ========================================================================== */ /** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { - color: inherit; + font-family: sans-serif; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; /* 1 */ - font: inherit; - /* 2 */ margin: 0; - /* 3 */ + /* 2 */ } /** - * Address `overflow` set to `hidden` in IE 8/9/10/11. + * Show the overflow in IE. + * 1. Show the overflow in Edge. */ -button { +button, +input { + /* 1 */ overflow: visible; } /** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. */ button, select { + /* 1 */ text-transform: none; } /** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. */ button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { +html [type="button"], +[type="reset"], +[type="submit"] { -webkit-appearance: button; /* 2 */ - cursor: pointer; - /* 3 */ } /** - * Re-set default cursor for disabled elements. + * Remove the inner border and padding in Firefox. */ -button[disabled], -html input[disabled] { - cursor: default; +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; } /** - * Remove inner padding and border in Firefox 4+. + * Restore the focus styles unset by the previous rule. */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ } /** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ -input { - line-height: normal; +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } /** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. + * Remove the default vertical scrollbar in IE. */ -input[type="checkbox"], -input[type="radio"] { +textarea { + overflow: auto; +} +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. + * Correct the cursor style of increment and decrement buttons in Chrome. */ -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } /** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. */ -input[type="search"] { +[type="search"] { -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; + /* 2 */ } /** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** - * Define consistent border, margin, and padding. - */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. */ -legend { - border: 0; +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ - padding: 0; + font: inherit; /* 2 */ } +/* Interactive + ========================================================================== */ +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ +details, +menu { + display: block; +} +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} +/* Scripting + ========================================================================== */ /** - * Remove default vertical scrollbar in IE 8/9/10/11. + * Add the correct display in IE 9-. */ -textarea { - overflow: auto; +canvas { + display: inline-block; } /** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + * Add the correct display in IE. */ -optgroup { - font-weight: bold; +template { + display: none; } -/* Tables +/* Hidden ========================================================================== */ /** - * Remove most spacing between table cells. + * Add the correct display in IE 10-. */ -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; +[hidden] { + display: none; } /******************************* Site Overrides @@ -1030,6 +1072,10 @@ th { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -1351,6 +1397,10 @@ th { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -1677,6 +1727,9 @@ a:hover { color: #00b2f3; text-decoration: none; } +/******************************* + Scrollbars +*******************************/ /******************************* Highlighting *******************************/ @@ -1709,6 +1762,40 @@ input::selection { background-color: rgba(100, 100, 100, 0.4); color: #212121; } +/* Force Simple Scrollbars */ +body ::-webkit-scrollbar { + -webkit-appearance: none; + width: 10px; +} +body ::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.1); + border-radius: 0px; +} +body ::-webkit-scrollbar-thumb { + cursor: pointer; + border-radius: 5px; + background: rgba(0, 0, 0, 0.25); + transition: color 0.2s ease; +} +body ::-webkit-scrollbar-thumb:window-inactive { + background: rgba(0, 0, 0, 0.15); +} +body ::-webkit-scrollbar-thumb:hover { + background: rgba(128, 135, 139, 0.8); +} +/* Inverted UI */ +body .ui.inverted::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); +} +body .ui.inverted::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); +} +body .ui.inverted::-webkit-scrollbar-thumb:window-inactive { + background: rgba(255, 255, 255, 0.15); +} +body .ui.inverted::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.35); +} /******************************* Site Overrides *******************************/ @@ -1817,6 +1904,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -5485,6 +5576,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -6002,6 +6097,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -6608,6 +6707,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -7033,6 +7136,10 @@ i.flag:not(.icon):before { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -8065,6 +8172,10 @@ a.ui.inverted.grey.header:hover { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -8289,6 +8400,10 @@ a.ui.inverted.grey.header:hover { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -8900,6 +9015,30 @@ i.icons .corner.icon { font-size: 0.45em; text-shadow: 1px -1px 0 #FFFFFF, -1px -1px 0 #FFFFFF, 1px 1px 0 #FFFFFF, -1px 1px 0 #FFFFFF; } +i.icons .top.right.corner.icon { + top: 0; + right: auto; + left: 0; + bottom: auto; +} +i.icons .top.left.corner.icon { + top: 0; + right: 0; + left: auto; + bottom: auto; +} +i.icons .bottom.left.corner.icon { + top: auto; + right: 0; + left: auto; + bottom: 0; +} +i.icons .bottom.right.corner.icon { + top: auto; + right: auto; + left: 0; + bottom: 0; +} i.icons .inverted.corner.icon { text-shadow: 1px -1px 0 #1B1C1D, -1px -1px 0 #1B1C1D, 1px 1px 0 #1B1C1D, -1px 1px 0 #1B1C1D; } @@ -11784,6 +11923,10 @@ i.icon.times.rectangle.outline:before { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -12453,6 +12596,10 @@ img.ui.bordered.image { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -12816,11 +12963,11 @@ img.ui.bordered.image { Disabled ---------------------*/ .ui.disabled.input, -.ui.input input[disabled] { +.ui.input:not(.disabled) input[disabled] { opacity: 0.45; } .ui.disabled.input input, -.ui.input input[disabled] { +.ui.input:not(.disabled) input[disabled] { pointer-events: none; } /*-------------------- @@ -12925,6 +13072,7 @@ img.ui.bordered.image { background-color: transparent !important; padding: 0em !important; box-shadow: none !important; + border-radius: 0px !important; } /* Transparent Icon */ .ui.transparent.icon.input > i.icon { @@ -13293,6 +13441,10 @@ img.ui.bordered.image { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -14839,6 +14991,10 @@ a.ui.basic.label:hover { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -16116,6 +16272,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -16829,6 +16989,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -17351,6 +17515,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -17955,6 +18123,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -18685,7 +18857,7 @@ ol.ui.horizontal.list li:before, --------------------*/ /* Red */ .ui.red.segment:not(.inverted) { - border-top: 2px solid #F44336; + border-top: 2px solid #F44336 !important; } .ui.inverted.red.segment { background-color: #F44336 !important; @@ -18693,7 +18865,7 @@ ol.ui.horizontal.list li:before, } /* Orange */ .ui.orange.segment:not(.inverted) { - border-top: 2px solid #FF9800; + border-top: 2px solid #FF9800 !important; } .ui.inverted.orange.segment { background-color: #FF9800 !important; @@ -18701,7 +18873,7 @@ ol.ui.horizontal.list li:before, } /* Yellow */ .ui.yellow.segment:not(.inverted) { - border-top: 2px solid #FFEB3B; + border-top: 2px solid #FFEB3B !important; } .ui.inverted.yellow.segment { background-color: #FFEB3B !important; @@ -18709,7 +18881,7 @@ ol.ui.horizontal.list li:before, } /* Olive */ .ui.olive.segment:not(.inverted) { - border-top: 2px solid #B5CC18; + border-top: 2px solid #B5CC18 !important; } .ui.inverted.olive.segment { background-color: #B5CC18 !important; @@ -18717,7 +18889,7 @@ ol.ui.horizontal.list li:before, } /* Green */ .ui.green.segment:not(.inverted) { - border-top: 2px solid #4CAF50; + border-top: 2px solid #4CAF50 !important; } .ui.inverted.green.segment { background-color: #4CAF50 !important; @@ -18725,7 +18897,7 @@ ol.ui.horizontal.list li:before, } /* Teal */ .ui.teal.segment:not(.inverted) { - border-top: 2px solid #1de9b6; + border-top: 2px solid #1de9b6 !important; } .ui.inverted.teal.segment { background-color: #1de9b6 !important; @@ -18733,7 +18905,7 @@ ol.ui.horizontal.list li:before, } /* Blue */ .ui.blue.segment:not(.inverted) { - border-top: 2px solid #2196F3; + border-top: 2px solid #2196F3 !important; } .ui.inverted.blue.segment { background-color: #2196F3 !important; @@ -18741,7 +18913,7 @@ ol.ui.horizontal.list li:before, } /* Violet */ .ui.violet.segment:not(.inverted) { - border-top: 2px solid #B4009E; + border-top: 2px solid #B4009E !important; } .ui.inverted.violet.segment { background-color: #B4009E !important; @@ -18749,7 +18921,7 @@ ol.ui.horizontal.list li:before, } /* Purple */ .ui.purple.segment:not(.inverted) { - border-top: 2px solid #9C27B0; + border-top: 2px solid #9C27B0 !important; } .ui.inverted.purple.segment { background-color: #9C27B0 !important; @@ -18757,7 +18929,7 @@ ol.ui.horizontal.list li:before, } /* Pink */ .ui.pink.segment:not(.inverted) { - border-top: 2px solid #E91E63; + border-top: 2px solid #E91E63 !important; } .ui.inverted.pink.segment { background-color: #E91E63 !important; @@ -18765,7 +18937,7 @@ ol.ui.horizontal.list li:before, } /* Brown */ .ui.brown.segment:not(.inverted) { - border-top: 2px solid #00BCF2; + border-top: 2px solid #00BCF2 !important; } .ui.inverted.brown.segment { background-color: #00BCF2 !important; @@ -18773,7 +18945,7 @@ ol.ui.horizontal.list li:before, } /* Grey */ .ui.grey.segment:not(.inverted) { - border-top: 2px solid #9E9E9E; + border-top: 2px solid #9E9E9E !important; } .ui.inverted.grey.segment { background-color: #9E9E9E !important; @@ -18781,7 +18953,7 @@ ol.ui.horizontal.list li:before, } /* Black */ .ui.black.segment:not(.inverted) { - border-top: 2px solid #1B1C1D; + border-top: 2px solid #1B1C1D !important; } .ui.inverted.black.segment { background-color: #1B1C1D !important; @@ -19040,6 +19212,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -19563,35 +19739,35 @@ ol.ui.horizontal.list li:before, ----------------*/ /* Mobile (Default) */ @media only screen and (max-width: 767px) { - .ui.steps { + .ui.steps:not(.unstackable) { display: inline-flex; overflow: visible; flex-direction: column; } - .ui.steps .step { + .ui.steps:not(.unstackable) .step { width: 100% !important; flex-direction: column; border-radius: 0em; padding: 1.14285714em 2em; } - .ui.steps .step:first-child { + .ui.steps:not(.unstackable) .step:first-child { padding: 1.14285714em 2em; border-radius: 4px 4px 0em 0em; } - .ui.steps .step:last-child { + .ui.steps:not(.unstackable) .step:last-child { border-radius: 0em 0em 4px 4px; } /* Arrow */ - .ui.steps .step:after { + .ui.steps:not(.unstackable) .step:after { display: none !important; } /* Content */ - .ui.steps .step .content { + .ui.steps:not(.unstackable) .step .content { text-align: center; } /* Icon */ - .ui.steps .step > .icon, - .ui.ordered.steps .step:before { + .ui.steps:not(.unstackable) .step > .icon, + .ui.ordered.steps:not(.unstackable) .step:before { margin: 0em 0em 1rem 0em; } } @@ -19935,6 +20111,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -20159,6 +20339,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -20576,6 +20760,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -20800,6 +20988,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -21791,26 +21983,26 @@ ol.ui.horizontal.list li:before, .ui.form .fields { flex-wrap: wrap; } - .ui[class*="equal width"].form .fields > .field, - .ui.form [class*="equal width"].fields > .field, - .ui.form .two.fields > .fields, - .ui.form .two.fields > .field, - .ui.form .three.fields > .fields, - .ui.form .three.fields > .field, - .ui.form .four.fields > .fields, - .ui.form .four.fields > .field, - .ui.form .five.fields > .fields, - .ui.form .five.fields > .field, - .ui.form .six.fields > .fields, - .ui.form .six.fields > .field, - .ui.form .seven.fields > .fields, - .ui.form .seven.fields > .field, - .ui.form .eight.fields > .fields, - .ui.form .eight.fields > .field, - .ui.form .nine.fields > .fields, - .ui.form .nine.fields > .field, - .ui.form .ten.fields > .fields, - .ui.form .ten.fields > .field { + .ui[class*="equal width"].form:not(.unstackable) .fields > .field, + .ui.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field { width: 100% !important; margin: 0em 0em 1em; } @@ -21871,29 +22063,29 @@ ol.ui.horizontal.list li:before, } /* Swap to full width on mobile */ @media only screen and (max-width: 767px) { - .ui.form .two.fields > .fields, - .ui.form .two.fields > .field, - .ui.form .three.fields > .fields, - .ui.form .three.fields > .field, - .ui.form .four.fields > .fields, - .ui.form .four.fields > .field, - .ui.form .five.fields > .fields, - .ui.form .five.fields > .field, - .ui.form .fields > .two.wide.field, - .ui.form .fields > .three.wide.field, - .ui.form .fields > .four.wide.field, - .ui.form .fields > .five.wide.field, - .ui.form .fields > .six.wide.field, - .ui.form .fields > .seven.wide.field, - .ui.form .fields > .eight.wide.field, - .ui.form .fields > .nine.wide.field, - .ui.form .fields > .ten.wide.field, - .ui.form .fields > .eleven.wide.field, - .ui.form .fields > .twelve.wide.field, - .ui.form .fields > .thirteen.wide.field, - .ui.form .fields > .fourteen.wide.field, - .ui.form .fields > .fifteen.wide.field, - .ui.form .fields > .sixteen.wide.field { + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field { width: 100% !important; } .ui.form .fields { @@ -22103,6 +22295,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -24310,6 +24506,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -25721,6 +25921,10 @@ Floated Menu / Item .ui.stackable.menu .right.item { margin-right: 0 !important; } + .ui.stackable.menu .right.menu, + .ui.stackable.menu .left.menu { + flex-direction: column; + } } /*-------------- Colors @@ -26088,6 +26292,9 @@ Floated Menu / Item text-align: center; justify-content: center; } +.ui.attached.item.menu { + margin: 0em -1px !important; +} .ui.item.menu .item:last-child:before { display: none; } @@ -26509,6 +26716,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -26733,6 +26944,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -27111,6 +27326,9 @@ Floated Menu / Item .ui.compact.message { display: inline-block; } +.ui.compact.icon.message { + display: inline-flex; +} /*-------------- Attached ---------------*/ @@ -27480,6 +27698,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -27704,6 +27926,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -28823,7 +29049,7 @@ Floated Menu / Item .ui.inverted.table th { background-color: rgba(0, 0, 0, 0.15); border-color: rgba(255, 255, 255, 0.1) !important; - color: rgba(255, 255, 255, 0.9); + color: rgba(255, 255, 255, 0.9) !important; } .ui.inverted.table tr td { border-color: rgba(255, 255, 255, 0.1) !important; @@ -29063,6 +29289,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -29287,6 +29517,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -29806,6 +30040,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -30030,6 +30268,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -31246,6 +31488,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -31470,6 +31716,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -32038,6 +32288,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -32262,6 +32516,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -32858,6 +33116,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -33082,6 +33344,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -33833,6 +34099,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -34057,6 +34327,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -34887,6 +35161,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -35111,6 +35389,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -35654,6 +35936,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -35878,6 +36164,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -36757,6 +37047,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -36981,6 +37275,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -37218,7 +37516,7 @@ a.ui.card:hover, /******************************* Dimmer *******************************/ -.dimmable:not(.body) { +.dimmable:not(body) { position: relative; } .ui.dimmer { @@ -37256,6 +37554,19 @@ a.ui.card:hover, .ui.segment > .ui.dimmer { border-radius: inherit !important; } +/* Scrollbars */ +.ui.dimmer:not(.inverted)::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive { + background: rgba(255, 255, 255, 0.15); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.35); +} /******************************* States *******************************/ @@ -37461,6 +37772,10 @@ body.dimmable > .dimmer { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -37685,6 +38000,10 @@ body.dimmable > .dimmer { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -38205,8 +38524,8 @@ body.dimmable > .dimmer { ---------------*/ .ui.dropdown .menu .menu { top: 0% !important; - right: 100% !important; - left: auto !important; + right: 100%; + left: auto; margin: 0em -0.5em 0em 0em !important; border-radius: 4px !important; z-index: 21 !important; @@ -38255,8 +38574,10 @@ body.dimmable > .dimmer { .ui.dropdown .menu > .item > .image, .ui.dropdown .menu > .item > img { display: inline-block; - vertical-align: middle; + vertical-align: top; width: auto; + margin-top: -0.5em; + margin-bottom: -0.5em; max-height: 2em; } /******************************* @@ -38345,7 +38666,7 @@ select.ui.dropdown { left: 1em; z-index: 3; margin: -0.78571429em; - padding: 0.78571429em; + padding: 0.91666667em; opacity: 0.8; transition: opacity 0.1s ease; } @@ -38672,7 +38993,9 @@ select.ui.dropdown { ---------------------*/ .ui.loading.dropdown > i.icon { height: 1em !important; - padding: 1.14285714em 1.07142857em !important; +} +.ui.loading.selection.dropdown > i.icon { + padding: 1.5em 1.28571429em !important; } .ui.loading.dropdown > i.icon:before { position: absolute; @@ -38737,6 +39060,14 @@ select.ui.dropdown { visibility: hidden; z-index: -1; } +.ui.dropdown > .loading.menu { + right: 0px !important; + left: auto !important; +} +.ui.dropdown > .menu .loading.menu { + right: 100% !important; + left: auto !important; +} /*-------------------- Keyboard Select ----------------------*/ @@ -38816,28 +39147,34 @@ select.ui.dropdown { left: auto !important; border-radius: 4px !important; } -/* Left Flyout Menu */ +/* Leftward Opening Menu */ +.ui.dropdown > .left.menu { + right: auto !important; + left: 0px !important; +} .ui.dropdown > .left.menu .menu, .ui.dropdown .menu .left.menu { - right: auto !important; - left: 100% !important; + right: auto; + left: 100%; + margin: 0em 0em 0em -0.5em !important; border-radius: 4px !important; } .ui.dropdown .item .left.dropdown.icon, .ui.dropdown .left.menu .item .dropdown.icon { width: auto; float: right; - margin: 0em 0em 0em 0.78571429rem; + margin: 0em 0em 0em 0em; } .ui.dropdown .item .left.dropdown.icon, .ui.dropdown .left.menu .item .dropdown.icon { width: auto; float: right; - margin: 0em 0em 0em 0.78571429rem; + margin: 0em 0em 0em 0em; } .ui.dropdown .item .left.dropdown.icon + .text, .ui.dropdown .left.menu .item .dropdown.icon + .text { margin-right: 1em; + margin-left: 0em; } /*-------------- Upward @@ -39049,7 +39386,7 @@ select.ui.dropdown { transform: rotate(-45deg); width: 0.5em; height: 0.5em; - box-shadow: 1px -1px 0px 1px rgba(34, 36, 38, 0.15); + box-shadow: 1px -1px 0px 0px rgba(34, 36, 38, 0.15); background: #FFFFFF; z-index: 2; } @@ -39080,7 +39417,7 @@ select.ui.dropdown { margin: 0em; transform: rotate(-45deg); } -/* Top Right Pointing */ +/* Top Right Pointing */ .ui.top.right.pointing.dropdown > .menu { top: 100%; bottom: auto; @@ -39088,10 +39425,11 @@ select.ui.dropdown { right: auto; margin: 1em 0em 0em; } +.ui.top.pointing.dropdown > .left.menu:after, .ui.top.right.pointing.dropdown > .menu:after { top: -0.25em; - right: auto; - left: 1em; + right: auto !important; + left: 1em !important; margin: 0em; transform: rotate(-45deg); } @@ -39108,6 +39446,18 @@ select.ui.dropdown { margin: 0em 0em 0em 0em; transform: rotate(45deg); } +.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu { + right: auto !important; + left: 100% !important; + margin: 0em 0em 0em 1em; +} +.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after { + top: 1em; + right: auto; + left: -0.25em; + margin: 0em 0em 0em 0em; + transform: rotate(-135deg); +} /* Right Pointing */ .ui.right.pointing.dropdown > .menu { top: 0%; @@ -39161,43 +39511,43 @@ select.ui.dropdown { left: 1em; } /* Upward pointing */ -.ui.upward.pointing.dropdown > .menu, -.ui.upward.top.pointing.dropdown > .menu { - top: auto; - bottom: 100%; +.ui.pointing.upward.dropdown .menu, +.ui.top.pointing.upward.dropdown .menu { + top: auto !important; + bottom: 100% !important; margin: 0em 0em 0.78571429rem; border-radius: 4px; } -.ui.upward.pointing.dropdown > .menu:after, -.ui.upward.top.pointing.dropdown > .menu:after { - top: 100%; - bottom: auto; - box-shadow: -1px 1px 0px 1px rgba(34, 36, 38, 0.15); +.ui.pointing.upward.dropdown .menu:after, +.ui.top.pointing.upward.dropdown .menu:after { + top: 100% !important; + bottom: auto !important; + box-shadow: -1px 1px 0px 0px rgba(34, 36, 38, 0.15); margin: -0.25em 0em 0em; } /* Right Pointing Upward */ -.ui.upward.right.pointing.dropdown:not(.top):not(.bottom) > .menu { - top: auto; - bottom: 0; +.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu { + top: auto !important; + bottom: 0 !important; margin: 0em 0em 0em 1em; } -.ui.upward.right.pointing.dropdown:not(.top):not(.bottom) > .menu:after { - top: auto; - bottom: 0; +.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after { + top: auto !important; + bottom: 0 !important; margin: 0em 0em 1em 0em; - box-shadow: 1px -1px 0px 1px rgba(34, 36, 38, 0.15); + box-shadow: 1px -1px 0px 0px rgba(34, 36, 38, 0.15); } /* Left Pointing Upward */ -.ui.upward.left.pointing.dropdown:not(.top):not(.bottom) > .menu { - top: auto; - bottom: 0; +.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu { + top: auto !important; + bottom: 0 !important; margin: 0em 1em 0em 0em; } -.ui.upward.left.pointing.dropdown:not(.top):not(.bottom) > .menu:after { - top: auto; - bottom: 0; +.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after { + top: auto !important; + bottom: 0 !important; margin: 0em 0em 1em 0em; - box-shadow: 1px -1px 0px 1px rgba(34, 36, 38, 0.15); + box-shadow: 1px -1px 0px 0px rgba(34, 36, 38, 0.15); } /******************************* Theme Overrides @@ -39355,6 +39705,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -39579,6 +39933,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -40042,6 +40400,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -40330,6 +40692,7 @@ select.ui.dropdown { --------------------*/ /* Basic */ /* Scrolling Margin */ +/* Scrolling Content */ /*------------------- Variations --------------------*/ @@ -40663,6 +41026,11 @@ select.ui.dropdown { margin-bottom: 1rem !important; } } +/* Scrolling Content */ +.ui.modal .scrolling.content { + max-height: calc(70vh); + overflow: auto; +} /*-------------- Full Screen ---------------*/ @@ -40688,6 +41056,76 @@ select.ui.dropdown { .ui.modal { font-size: 1rem; } +/* Mini */ +.ui.mini.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Mini Modal Width */ +@media only screen and (max-width: 767px) { + .ui.mini.modal { + width: 95%; + margin: 0em -47.5% 0em 0em; + } +} +@media only screen and (min-width: 768px) { + .ui.mini.modal { + width: 35.2%; + margin: 0em -17.6% 0em 0em; + } +} +@media only screen and (min-width: 992px) { + .ui.mini.modal { + width: 340px; + margin: 0em -170px 0em 0em; + } +} +@media only screen and (min-width: 1200px) { + .ui.mini.modal { + width: 360px; + margin: 0em -180px 0em 0em; + } +} +@media only screen and (min-width: 1920px) { + .ui.mini.modal { + width: 380px; + margin: 0em -190px 0em 0em; + } +} +/* mini */ +.ui.small.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Tiny Modal Width */ +@media only screen and (max-width: 767px) { + .ui.tiny.modal { + width: 95%; + margin: 0em -47.5% 0em 0em; + } +} +@media only screen and (min-width: 768px) { + .ui.tiny.modal { + width: 52.8%; + margin: 0em -26.4% 0em 0em; + } +} +@media only screen and (min-width: 992px) { + .ui.tiny.modal { + width: 510px; + margin: 0em -255px 0em 0em; + } +} +@media only screen and (min-width: 1200px) { + .ui.tiny.modal { + width: 540px; + margin: 0em -270px 0em 0em; + } +} +@media only screen and (min-width: 1920px) { + .ui.tiny.modal { + width: 570px; + margin: 0em -285px 0em 0em; + } +} /* Small */ .ui.small.modal > .header:not(.ui) { font-size: 1.3em; @@ -40864,6 +41302,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -41088,6 +41530,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -41546,6 +41992,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -41770,6 +42220,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -42746,6 +43200,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -42970,6 +43428,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -43747,6 +44209,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -43971,6 +44437,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -44505,6 +44975,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -44729,6 +45203,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -45422,6 +45900,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -45646,6 +46128,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -46077,6 +46563,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -46301,6 +46791,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -46720,14 +47214,6 @@ body.pushable > .pusher { /*-------------- iOS ---------------*/ -/* - iOS incorrectly sizes document when content - is presented outside of view with 2Dtranslate -*/ -html.ios { - overflow-x: hidden; - -webkit-overflow-scrolling: touch; -} /******************************* Variations *******************************/ @@ -47088,6 +47574,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -47312,6 +47802,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -47673,6 +48167,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -47897,6 +48395,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -48274,6 +48776,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -48498,6 +49004,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -51268,6 +51778,10 @@ code.lang-filterblocks { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ diff --git a/public/pxt/semantic.css b/public/pxt/semantic.css index dfbea2f..a227527 100644 --- a/public/pxt/semantic.css +++ b/public/pxt/semantic.css @@ -112,6 +112,10 @@ /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -336,6 +340,10 @@ /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -569,142 +577,161 @@ input[type="password"] { -moz-appearance: none; /* mobile firefox too! */ } -/******************************* - Theme Overrides -*******************************/ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ -/** - * Correct `block` display not defined in IE 8/9. - */ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ /** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. */ html { - font-family: sans-serif; + line-height: 1.15; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } +/* Sections + ========================================================================== */ /** - * Remove default margin. + * Remove the margin in all browsers (opinionated). */ body { margin: 0; } -/* HTML5 display definitions - ========================================================================== */ /** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. - * Correct `block` display not defined for `main` in IE 11. + * Add the correct display in IE 9-. */ article, aside, -details, -figcaption, -figure, footer, header, -hgroup, -main, nav, -section, -summary { +section { display: block; } /** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. */ -audio, -canvas, -progress, -video { - display: inline-block; +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/* Grouping content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ +figcaption, +figure, +main { /* 1 */ - vertical-align: baseline; - /* 2 */ + display: block; } /** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. + * Add the correct margin in IE 8. */ -audio:not([controls]) { - display: none; +figure { + margin: 1em 40px; +} +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ height: 0; + /* 1 */ + overflow: visible; + /* 2 */ } /** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. */ -[hidden], -template { - display: none; +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } -/* Links +/* Text-level semantics ========================================================================== */ /** - * Remove the gray background color from active links in IE 10. + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { - background: transparent; + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ } /** - * Improve readability when focused and also mouse hovered in all browsers. + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ -a:active, -a:hover { - outline: 0; +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ } -/* Text-level semantics - ========================================================================== */ /** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ -abbr[title] { - border-bottom: 1px dotted; +b, +strong { + font-weight: inherit; } /** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { - font-weight: bold; + font-weight: bolder; } /** - * Address styling not present in Safari and Chrome. + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. */ -dfn { - font-style: italic; +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ } /** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. + * Add the correct font style in Android 4.3-. */ -h1 { - font-size: 2em; - margin: 0.67em 0; +dfn { + font-style: italic; } /** - * Address styling not present in IE 8/9. + * Add the correct background and color in IE 9-. */ mark { - background: #ff0; + background-color: #ff0; color: #000; } /** - * Address inconsistent and variable font size in all browsers. + * Add the correct font size in all browsers. */ small { font-size: 80%; } /** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. */ sub, sup { @@ -713,218 +740,233 @@ sup { position: relative; vertical-align: baseline; } -sup { - top: -0.5em; -} sub { bottom: -0.25em; } -/* Embedded content - ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. - */ -img { - border: 0; -} -/** - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; +sup { + top: -0.5em; } -/* Grouping content +/* Embedded content ========================================================================== */ /** - * Address margin not present in IE 8/9 and Safari. + * Add the correct display in IE 9-. */ -figure { - margin: 1em 40px; +audio, +video { + display: inline-block; } /** - * Address differences between Firefox and other browsers. + * Add the correct display in iOS 4-7. */ -hr { +audio:not([controls]) { + display: none; height: 0; } /** - * Contain overflow in all browsers. + * Remove the border on images inside links in IE 10-. */ -pre { - overflow: auto; +img { + border-style: none; } /** - * Address odd `em`-unit font size rendering in all browsers. + * Hide the overflow in IE. */ -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; +svg:not(:root) { + overflow: hidden; } /* Forms ========================================================================== */ /** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { - color: inherit; + font-family: sans-serif; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; /* 1 */ - font: inherit; - /* 2 */ margin: 0; - /* 3 */ + /* 2 */ } /** - * Address `overflow` set to `hidden` in IE 8/9/10/11. + * Show the overflow in IE. + * 1. Show the overflow in Edge. */ -button { +button, +input { + /* 1 */ overflow: visible; } /** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. */ button, select { + /* 1 */ text-transform: none; } /** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. */ button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { +html [type="button"], +[type="reset"], +[type="submit"] { -webkit-appearance: button; /* 2 */ - cursor: pointer; - /* 3 */ } /** - * Re-set default cursor for disabled elements. + * Remove the inner border and padding in Firefox. */ -button[disabled], -html input[disabled] { - cursor: default; +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; } /** - * Remove inner padding and border in Firefox 4+. + * Restore the focus styles unset by the previous rule. */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ } /** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ -input { - line-height: normal; +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } /** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. + * Remove the default vertical scrollbar in IE. */ -input[type="checkbox"], -input[type="radio"] { +textarea { + overflow: auto; +} +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. + * Correct the cursor style of increment and decrement buttons in Chrome. */ -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } /** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. */ -input[type="search"] { +[type="search"] { -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; + /* 2 */ } /** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** - * Define consistent border, margin, and padding. - */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. */ -legend { - border: 0; +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ - padding: 0; + font: inherit; /* 2 */ } +/* Interactive + ========================================================================== */ +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ +details, +menu { + display: block; +} +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} +/* Scripting + ========================================================================== */ /** - * Remove default vertical scrollbar in IE 8/9/10/11. + * Add the correct display in IE 9-. */ -textarea { - overflow: auto; +canvas { + display: inline-block; } /** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + * Add the correct display in IE. */ -optgroup { - font-weight: bold; +template { + display: none; } -/* Tables +/* Hidden ========================================================================== */ /** - * Remove most spacing between table cells. + * Add the correct display in IE 10-. */ -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; +[hidden] { + display: none; } /******************************* Site Overrides @@ -1030,6 +1072,10 @@ th { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -1351,6 +1397,10 @@ th { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -1677,6 +1727,9 @@ a:hover { color: #00b2f3; text-decoration: none; } +/******************************* + Scrollbars +*******************************/ /******************************* Highlighting *******************************/ @@ -1709,6 +1762,40 @@ input::selection { background-color: rgba(100, 100, 100, 0.4); color: #212121; } +/* Force Simple Scrollbars */ +body ::-webkit-scrollbar { + -webkit-appearance: none; + width: 10px; +} +body ::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.1); + border-radius: 0px; +} +body ::-webkit-scrollbar-thumb { + cursor: pointer; + border-radius: 5px; + background: rgba(0, 0, 0, 0.25); + transition: color 0.2s ease; +} +body ::-webkit-scrollbar-thumb:window-inactive { + background: rgba(0, 0, 0, 0.15); +} +body ::-webkit-scrollbar-thumb:hover { + background: rgba(128, 135, 139, 0.8); +} +/* Inverted UI */ +body .ui.inverted::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); +} +body .ui.inverted::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); +} +body .ui.inverted::-webkit-scrollbar-thumb:window-inactive { + background: rgba(255, 255, 255, 0.15); +} +body .ui.inverted::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.35); +} /******************************* Site Overrides *******************************/ @@ -1817,6 +1904,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -5485,6 +5576,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -6002,6 +6097,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -6608,6 +6707,10 @@ input::selection { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -7033,6 +7136,10 @@ i.flag:not(.icon):before { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -8065,6 +8172,10 @@ a.ui.inverted.grey.header:hover { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -8289,6 +8400,10 @@ a.ui.inverted.grey.header:hover { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -8900,6 +9015,30 @@ i.icons .corner.icon { font-size: 0.45em; text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF; } +i.icons .top.right.corner.icon { + top: 0; + left: auto; + right: 0; + bottom: auto; +} +i.icons .top.left.corner.icon { + top: 0; + left: 0; + right: auto; + bottom: auto; +} +i.icons .bottom.left.corner.icon { + top: auto; + left: 0; + right: auto; + bottom: 0; +} +i.icons .bottom.right.corner.icon { + top: auto; + left: auto; + right: 0; + bottom: 0; +} i.icons .inverted.corner.icon { text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D; } @@ -11784,6 +11923,10 @@ i.icon.times.rectangle.outline:before { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -12453,6 +12596,10 @@ img.ui.bordered.image { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -12816,11 +12963,11 @@ img.ui.bordered.image { Disabled ---------------------*/ .ui.disabled.input, -.ui.input input[disabled] { +.ui.input:not(.disabled) input[disabled] { opacity: 0.45; } .ui.disabled.input input, -.ui.input input[disabled] { +.ui.input:not(.disabled) input[disabled] { pointer-events: none; } /*-------------------- @@ -12925,6 +13072,7 @@ img.ui.bordered.image { background-color: transparent !important; padding: 0em !important; box-shadow: none !important; + border-radius: 0px !important; } /* Transparent Icon */ .ui.transparent.icon.input > i.icon { @@ -13293,6 +13441,10 @@ img.ui.bordered.image { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -14839,6 +14991,10 @@ a.ui.basic.label:hover { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -16116,6 +16272,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -16829,6 +16989,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -17351,6 +17515,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -17955,6 +18123,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -18685,7 +18857,7 @@ ol.ui.horizontal.list li:before, --------------------*/ /* Red */ .ui.red.segment:not(.inverted) { - border-top: 2px solid #F44336; + border-top: 2px solid #F44336 !important; } .ui.inverted.red.segment { background-color: #F44336 !important; @@ -18693,7 +18865,7 @@ ol.ui.horizontal.list li:before, } /* Orange */ .ui.orange.segment:not(.inverted) { - border-top: 2px solid #FF9800; + border-top: 2px solid #FF9800 !important; } .ui.inverted.orange.segment { background-color: #FF9800 !important; @@ -18701,7 +18873,7 @@ ol.ui.horizontal.list li:before, } /* Yellow */ .ui.yellow.segment:not(.inverted) { - border-top: 2px solid #FFEB3B; + border-top: 2px solid #FFEB3B !important; } .ui.inverted.yellow.segment { background-color: #FFEB3B !important; @@ -18709,7 +18881,7 @@ ol.ui.horizontal.list li:before, } /* Olive */ .ui.olive.segment:not(.inverted) { - border-top: 2px solid #B5CC18; + border-top: 2px solid #B5CC18 !important; } .ui.inverted.olive.segment { background-color: #B5CC18 !important; @@ -18717,7 +18889,7 @@ ol.ui.horizontal.list li:before, } /* Green */ .ui.green.segment:not(.inverted) { - border-top: 2px solid #4CAF50; + border-top: 2px solid #4CAF50 !important; } .ui.inverted.green.segment { background-color: #4CAF50 !important; @@ -18725,7 +18897,7 @@ ol.ui.horizontal.list li:before, } /* Teal */ .ui.teal.segment:not(.inverted) { - border-top: 2px solid #1de9b6; + border-top: 2px solid #1de9b6 !important; } .ui.inverted.teal.segment { background-color: #1de9b6 !important; @@ -18733,7 +18905,7 @@ ol.ui.horizontal.list li:before, } /* Blue */ .ui.blue.segment:not(.inverted) { - border-top: 2px solid #2196F3; + border-top: 2px solid #2196F3 !important; } .ui.inverted.blue.segment { background-color: #2196F3 !important; @@ -18741,7 +18913,7 @@ ol.ui.horizontal.list li:before, } /* Violet */ .ui.violet.segment:not(.inverted) { - border-top: 2px solid #B4009E; + border-top: 2px solid #B4009E !important; } .ui.inverted.violet.segment { background-color: #B4009E !important; @@ -18749,7 +18921,7 @@ ol.ui.horizontal.list li:before, } /* Purple */ .ui.purple.segment:not(.inverted) { - border-top: 2px solid #9C27B0; + border-top: 2px solid #9C27B0 !important; } .ui.inverted.purple.segment { background-color: #9C27B0 !important; @@ -18757,7 +18929,7 @@ ol.ui.horizontal.list li:before, } /* Pink */ .ui.pink.segment:not(.inverted) { - border-top: 2px solid #E91E63; + border-top: 2px solid #E91E63 !important; } .ui.inverted.pink.segment { background-color: #E91E63 !important; @@ -18765,7 +18937,7 @@ ol.ui.horizontal.list li:before, } /* Brown */ .ui.brown.segment:not(.inverted) { - border-top: 2px solid #00BCF2; + border-top: 2px solid #00BCF2 !important; } .ui.inverted.brown.segment { background-color: #00BCF2 !important; @@ -18773,7 +18945,7 @@ ol.ui.horizontal.list li:before, } /* Grey */ .ui.grey.segment:not(.inverted) { - border-top: 2px solid #9E9E9E; + border-top: 2px solid #9E9E9E !important; } .ui.inverted.grey.segment { background-color: #9E9E9E !important; @@ -18781,7 +18953,7 @@ ol.ui.horizontal.list li:before, } /* Black */ .ui.black.segment:not(.inverted) { - border-top: 2px solid #1B1C1D; + border-top: 2px solid #1B1C1D !important; } .ui.inverted.black.segment { background-color: #1B1C1D !important; @@ -19040,6 +19212,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -19563,35 +19739,35 @@ ol.ui.horizontal.list li:before, ----------------*/ /* Mobile (Default) */ @media only screen and (max-width: 767px) { - .ui.steps { + .ui.steps:not(.unstackable) { display: inline-flex; overflow: visible; flex-direction: column; } - .ui.steps .step { + .ui.steps:not(.unstackable) .step { width: 100% !important; flex-direction: column; border-radius: 0em; padding: 1.14285714em 2em; } - .ui.steps .step:first-child { + .ui.steps:not(.unstackable) .step:first-child { padding: 1.14285714em 2em; border-radius: 4px 4px 0em 0em; } - .ui.steps .step:last-child { + .ui.steps:not(.unstackable) .step:last-child { border-radius: 0em 0em 4px 4px; } /* Arrow */ - .ui.steps .step:after { + .ui.steps:not(.unstackable) .step:after { display: none !important; } /* Content */ - .ui.steps .step .content { + .ui.steps:not(.unstackable) .step .content { text-align: center; } /* Icon */ - .ui.steps .step > .icon, - .ui.ordered.steps .step:before { + .ui.steps:not(.unstackable) .step > .icon, + .ui.ordered.steps:not(.unstackable) .step:before { margin: 0em 0em 1rem 0em; } } @@ -19935,6 +20111,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -20159,6 +20339,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -20576,6 +20760,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -20800,6 +20988,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -21791,26 +21983,26 @@ ol.ui.horizontal.list li:before, .ui.form .fields { flex-wrap: wrap; } - .ui[class*="equal width"].form .fields > .field, - .ui.form [class*="equal width"].fields > .field, - .ui.form .two.fields > .fields, - .ui.form .two.fields > .field, - .ui.form .three.fields > .fields, - .ui.form .three.fields > .field, - .ui.form .four.fields > .fields, - .ui.form .four.fields > .field, - .ui.form .five.fields > .fields, - .ui.form .five.fields > .field, - .ui.form .six.fields > .fields, - .ui.form .six.fields > .field, - .ui.form .seven.fields > .fields, - .ui.form .seven.fields > .field, - .ui.form .eight.fields > .fields, - .ui.form .eight.fields > .field, - .ui.form .nine.fields > .fields, - .ui.form .nine.fields > .field, - .ui.form .ten.fields > .fields, - .ui.form .ten.fields > .field { + .ui[class*="equal width"].form:not(.unstackable) .fields > .field, + .ui.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field { width: 100% !important; margin: 0em 0em 1em; } @@ -21871,29 +22063,29 @@ ol.ui.horizontal.list li:before, } /* Swap to full width on mobile */ @media only screen and (max-width: 767px) { - .ui.form .two.fields > .fields, - .ui.form .two.fields > .field, - .ui.form .three.fields > .fields, - .ui.form .three.fields > .field, - .ui.form .four.fields > .fields, - .ui.form .four.fields > .field, - .ui.form .five.fields > .fields, - .ui.form .five.fields > .field, - .ui.form .fields > .two.wide.field, - .ui.form .fields > .three.wide.field, - .ui.form .fields > .four.wide.field, - .ui.form .fields > .five.wide.field, - .ui.form .fields > .six.wide.field, - .ui.form .fields > .seven.wide.field, - .ui.form .fields > .eight.wide.field, - .ui.form .fields > .nine.wide.field, - .ui.form .fields > .ten.wide.field, - .ui.form .fields > .eleven.wide.field, - .ui.form .fields > .twelve.wide.field, - .ui.form .fields > .thirteen.wide.field, - .ui.form .fields > .fourteen.wide.field, - .ui.form .fields > .fifteen.wide.field, - .ui.form .fields > .sixteen.wide.field { + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field { width: 100% !important; } .ui.form .fields { @@ -22103,6 +22295,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -24310,6 +24506,10 @@ ol.ui.horizontal.list li:before, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -25721,6 +25921,10 @@ Floated Menu / Item .ui.stackable.menu .right.item { margin-left: 0 !important; } + .ui.stackable.menu .right.menu, + .ui.stackable.menu .left.menu { + flex-direction: column; + } } /*-------------- Colors @@ -26088,6 +26292,9 @@ Floated Menu / Item text-align: center; justify-content: center; } +.ui.attached.item.menu { + margin: 0em -1px !important; +} .ui.item.menu .item:last-child:before { display: none; } @@ -26509,6 +26716,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -26733,6 +26944,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -27111,6 +27326,9 @@ Floated Menu / Item .ui.compact.message { display: inline-block; } +.ui.compact.icon.message { + display: inline-flex; +} /*-------------- Attached ---------------*/ @@ -27480,6 +27698,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -27704,6 +27926,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -28823,7 +29049,7 @@ Floated Menu / Item .ui.inverted.table th { background-color: rgba(0, 0, 0, 0.15); border-color: rgba(255, 255, 255, 0.1) !important; - color: rgba(255, 255, 255, 0.9); + color: rgba(255, 255, 255, 0.9) !important; } .ui.inverted.table tr td { border-color: rgba(255, 255, 255, 0.1) !important; @@ -29063,6 +29289,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -29287,6 +29517,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -29806,6 +30040,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -30030,6 +30268,10 @@ Floated Menu / Item /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -31246,6 +31488,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -31470,6 +31716,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -32038,6 +32288,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -32262,6 +32516,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -32858,6 +33116,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -33082,6 +33344,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -33833,6 +34099,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -34057,6 +34327,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -34887,6 +35161,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -35111,6 +35389,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -35654,6 +35936,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -35878,6 +36164,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -36757,6 +37047,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -36981,6 +37275,10 @@ a.ui.card:hover, /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -37218,7 +37516,7 @@ a.ui.card:hover, /******************************* Dimmer *******************************/ -.dimmable:not(.body) { +.dimmable:not(body) { position: relative; } .ui.dimmer { @@ -37256,6 +37554,19 @@ a.ui.card:hover, .ui.segment > .ui.dimmer { border-radius: inherit !important; } +/* Scrollbars */ +.ui.dimmer:not(.inverted)::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive { + background: rgba(255, 255, 255, 0.15); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.35); +} /******************************* States *******************************/ @@ -37461,6 +37772,10 @@ body.dimmable > .dimmer { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -37685,6 +38000,10 @@ body.dimmable > .dimmer { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -38205,8 +38524,8 @@ body.dimmable > .dimmer { ---------------*/ .ui.dropdown .menu .menu { top: 0% !important; - left: 100% !important; - right: auto !important; + left: 100%; + right: auto; margin: 0em 0em 0em -0.5em !important; border-radius: 4px !important; z-index: 21 !important; @@ -38255,8 +38574,10 @@ body.dimmable > .dimmer { .ui.dropdown .menu > .item > .image, .ui.dropdown .menu > .item > img { display: inline-block; - vertical-align: middle; + vertical-align: top; width: auto; + margin-top: -0.5em; + margin-bottom: -0.5em; max-height: 2em; } /******************************* @@ -38345,7 +38666,7 @@ select.ui.dropdown { right: 1em; z-index: 3; margin: -0.78571429em; - padding: 0.78571429em; + padding: 0.91666667em; opacity: 0.8; transition: opacity 0.1s ease; } @@ -38672,7 +38993,9 @@ select.ui.dropdown { ---------------------*/ .ui.loading.dropdown > i.icon { height: 1em !important; - padding: 1.14285714em 1.07142857em !important; +} +.ui.loading.selection.dropdown > i.icon { + padding: 1.5em 1.28571429em !important; } .ui.loading.dropdown > i.icon:before { position: absolute; @@ -38737,6 +39060,14 @@ select.ui.dropdown { visibility: hidden; z-index: -1; } +.ui.dropdown > .loading.menu { + left: 0px !important; + right: auto !important; +} +.ui.dropdown > .menu .loading.menu { + left: 100% !important; + right: auto !important; +} /*-------------------- Keyboard Select ----------------------*/ @@ -38816,28 +39147,34 @@ select.ui.dropdown { right: auto !important; border-radius: 4px !important; } -/* Left Flyout Menu */ +/* Leftward Opening Menu */ +.ui.dropdown > .left.menu { + left: auto !important; + right: 0px !important; +} .ui.dropdown > .left.menu .menu, .ui.dropdown .menu .left.menu { - left: auto !important; - right: 100% !important; + left: auto; + right: 100%; + margin: 0em -0.5em 0em 0em !important; border-radius: 4px !important; } .ui.dropdown .item .left.dropdown.icon, .ui.dropdown .left.menu .item .dropdown.icon { width: auto; float: left; - margin: 0em 0.78571429rem 0em 0em; + margin: 0em 0em 0em 0em; } .ui.dropdown .item .left.dropdown.icon, .ui.dropdown .left.menu .item .dropdown.icon { width: auto; float: left; - margin: 0em 0.78571429rem 0em 0em; + margin: 0em 0em 0em 0em; } .ui.dropdown .item .left.dropdown.icon + .text, .ui.dropdown .left.menu .item .dropdown.icon + .text { margin-left: 1em; + margin-right: 0em; } /*-------------- Upward @@ -39049,7 +39386,7 @@ select.ui.dropdown { transform: rotate(45deg); width: 0.5em; height: 0.5em; - box-shadow: -1px -1px 0px 1px rgba(34, 36, 38, 0.15); + box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15); background: #FFFFFF; z-index: 2; } @@ -39080,7 +39417,7 @@ select.ui.dropdown { margin: 0em; transform: rotate(45deg); } -/* Top Right Pointing */ +/* Top Right Pointing */ .ui.top.right.pointing.dropdown > .menu { top: 100%; bottom: auto; @@ -39088,10 +39425,11 @@ select.ui.dropdown { left: auto; margin: 1em 0em 0em; } +.ui.top.pointing.dropdown > .left.menu:after, .ui.top.right.pointing.dropdown > .menu:after { top: -0.25em; - left: auto; - right: 1em; + left: auto !important; + right: 1em !important; margin: 0em; transform: rotate(45deg); } @@ -39108,6 +39446,18 @@ select.ui.dropdown { margin: 0em 0em 0em 0em; transform: rotate(-45deg); } +.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu { + left: auto !important; + right: 100% !important; + margin: 0em 1em 0em 0em; +} +.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after { + top: 1em; + left: auto; + right: -0.25em; + margin: 0em 0em 0em 0em; + transform: rotate(135deg); +} /* Right Pointing */ .ui.right.pointing.dropdown > .menu { top: 0%; @@ -39161,43 +39511,43 @@ select.ui.dropdown { right: 1em; } /* Upward pointing */ -.ui.upward.pointing.dropdown > .menu, -.ui.upward.top.pointing.dropdown > .menu { - top: auto; - bottom: 100%; +.ui.pointing.upward.dropdown .menu, +.ui.top.pointing.upward.dropdown .menu { + top: auto !important; + bottom: 100% !important; margin: 0em 0em 0.78571429rem; border-radius: 4px; } -.ui.upward.pointing.dropdown > .menu:after, -.ui.upward.top.pointing.dropdown > .menu:after { - top: 100%; - bottom: auto; - box-shadow: 1px 1px 0px 1px rgba(34, 36, 38, 0.15); +.ui.pointing.upward.dropdown .menu:after, +.ui.top.pointing.upward.dropdown .menu:after { + top: 100% !important; + bottom: auto !important; + box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15); margin: -0.25em 0em 0em; } /* Right Pointing Upward */ -.ui.upward.right.pointing.dropdown:not(.top):not(.bottom) > .menu { - top: auto; - bottom: 0; +.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu { + top: auto !important; + bottom: 0 !important; margin: 0em 1em 0em 0em; } -.ui.upward.right.pointing.dropdown:not(.top):not(.bottom) > .menu:after { - top: auto; - bottom: 0; +.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after { + top: auto !important; + bottom: 0 !important; margin: 0em 0em 1em 0em; - box-shadow: -1px -1px 0px 1px rgba(34, 36, 38, 0.15); + box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15); } /* Left Pointing Upward */ -.ui.upward.left.pointing.dropdown:not(.top):not(.bottom) > .menu { - top: auto; - bottom: 0; +.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu { + top: auto !important; + bottom: 0 !important; margin: 0em 0em 0em 1em; } -.ui.upward.left.pointing.dropdown:not(.top):not(.bottom) > .menu:after { - top: auto; - bottom: 0; +.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after { + top: auto !important; + bottom: 0 !important; margin: 0em 0em 1em 0em; - box-shadow: -1px -1px 0px 1px rgba(34, 36, 38, 0.15); + box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15); } /******************************* Theme Overrides @@ -39355,6 +39705,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -39579,6 +39933,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -40042,6 +40400,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -40330,6 +40692,7 @@ select.ui.dropdown { --------------------*/ /* Basic */ /* Scrolling Margin */ +/* Scrolling Content */ /*------------------- Variations --------------------*/ @@ -40666,6 +41029,11 @@ select.ui.dropdown { margin-bottom: 1rem !important; } } +/* Scrolling Content */ +.ui.modal .scrolling.content { + max-height: calc(70vh); + overflow: auto; +} /*-------------- Full Screen ---------------*/ @@ -40691,6 +41059,76 @@ select.ui.dropdown { .ui.modal { font-size: 1rem; } +/* Mini */ +.ui.mini.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Mini Modal Width */ +@media only screen and (max-width: 767px) { + .ui.mini.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.mini.modal { + width: 35.2%; + margin: 0em 0em 0em -17.6%; + } +} +@media only screen and (min-width: 992px) { + .ui.mini.modal { + width: 340px; + margin: 0em 0em 0em -170px; + } +} +@media only screen and (min-width: 1200px) { + .ui.mini.modal { + width: 360px; + margin: 0em 0em 0em -180px; + } +} +@media only screen and (min-width: 1920px) { + .ui.mini.modal { + width: 380px; + margin: 0em 0em 0em -190px; + } +} +/* mini */ +.ui.small.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Tiny Modal Width */ +@media only screen and (max-width: 767px) { + .ui.tiny.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.tiny.modal { + width: 52.8%; + margin: 0em 0em 0em -26.4%; + } +} +@media only screen and (min-width: 992px) { + .ui.tiny.modal { + width: 510px; + margin: 0em 0em 0em -255px; + } +} +@media only screen and (min-width: 1200px) { + .ui.tiny.modal { + width: 540px; + margin: 0em 0em 0em -270px; + } +} +@media only screen and (min-width: 1920px) { + .ui.tiny.modal { + width: 570px; + margin: 0em 0em 0em -285px; + } +} /* Small */ .ui.small.modal > .header:not(.ui) { font-size: 1.3em; @@ -40867,6 +41305,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -41091,6 +41533,10 @@ select.ui.dropdown { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -41549,6 +41995,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -41773,6 +42223,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -42755,6 +43209,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -42979,6 +43437,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -43756,6 +44218,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -43980,6 +44446,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -44514,6 +44984,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -44738,6 +45212,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -45431,6 +45909,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -45655,6 +46137,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -46086,6 +46572,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -46310,6 +46800,10 @@ a.ui.nag { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -46729,14 +47223,6 @@ body.pushable > .pusher { /*-------------- iOS ---------------*/ -/* - iOS incorrectly sizes document when content - is presented outside of view with 2Dtranslate -*/ -html.ios { - overflow-x: hidden; - -webkit-overflow-scrolling: touch; -} /******************************* Variations *******************************/ @@ -47097,6 +47583,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -47321,6 +47811,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -47682,6 +48176,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -47906,6 +48404,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -48283,6 +48785,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -48507,6 +49013,10 @@ html.ios { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ @@ -51277,6 +51787,10 @@ code.lang-filterblocks { /*------------------- Links --------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ /*------------------- Highlighted Text --------------------*/ diff --git a/public/pxt/semantic.js b/public/pxt/semantic.js index 6cd9351..fbcea27 100644 --- a/public/pxt/semantic.js +++ b/public/pxt/semantic.js @@ -3318,7 +3318,9 @@ $.fn.dropdown = function(parameters) { if(module.is.multiple()) { module.filterActive(); } - module.select.firstUnfiltered(); + if(query || (!query && module.get.activeItem().length == 0)) { + module.select.firstUnfiltered(); + } if( module.has.allResultsFiltered() ) { if( settings.onNoResults.call(element, searchTerm) ) { if(settings.allowAdditions) { @@ -4109,7 +4111,6 @@ $.fn.dropdown = function(parameters) { // down arrow (open menu) if(pressedKey == keys.downArrow && !module.is.visible()) { module.verbose('Down key pressed, showing dropdown'); - module.select.firstUnfiltered(); module.show(); event.preventDefault(); } @@ -5008,21 +5009,31 @@ $.fn.dropdown = function(parameters) { }, direction: function($menu) { if(settings.direction == 'auto') { - if(module.is.onScreen($menu)) { + // reset position + module.remove.upward(); + + if(module.can.openDownward($menu)) { module.remove.upward($menu); } else { module.set.upward($menu); } + if(!module.is.leftward($menu) && !module.can.openRightward($menu)) { + module.set.leftward($menu); + } } else if(settings.direction == 'upward') { module.set.upward($menu); } }, - upward: function($menu) { - var $element = $menu || $module; + upward: function($currentMenu) { + var $element = $currentMenu || $module; $element.addClass(className.upward); }, + leftward: function($currentMenu) { + var $element = $currentMenu || $menu; + $element.addClass(className.leftward); + }, value: function(value, text, $selected) { var escapedValue = module.escape.value(value), @@ -5370,10 +5381,14 @@ $.fn.dropdown = function(parameters) { initialLoad: function() { initialLoad = false; }, - upward: function($menu) { - var $element = $menu || $module; + upward: function($currentMenu) { + var $element = $currentMenu || $module; $element.removeClass(className.upward); }, + leftward: function($currentMenu) { + var $element = $currentMenu || $menu; + $element.removeClass(className.leftward); + }, visible: function() { $module.removeClass(className.visible); }, @@ -5678,6 +5693,10 @@ $.fn.dropdown = function(parameters) { : $menu.transition && $menu.transition('is animating') ; }, + leftward: function($subMenu) { + var $selectedMenu = $subMenu || $menu; + return $selectedMenu.hasClass(className.leftward); + }, disabled: function() { return $module.hasClass(className.disabled); }, @@ -5696,46 +5715,6 @@ $.fn.dropdown = function(parameters) { initialLoad: function() { return initialLoad; }, - onScreen: function($subMenu) { - var - $currentMenu = $subMenu || $menu, - canOpenDownward = true, - onScreen = {}, - calculations - ; - $currentMenu.addClass(className.loading); - calculations = { - context: { - scrollTop : $context.scrollTop(), - height : $context.outerHeight() - }, - menu : { - offset: $currentMenu.offset(), - height: $currentMenu.outerHeight() - } - }; - if(module.is.verticallyScrollableContext()) { - calculations.menu.offset.top += calculations.context.scrollTop; - } - onScreen = { - above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height, - below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height - }; - if(onScreen.below) { - module.verbose('Dropdown can fit in context downward', onScreen); - canOpenDownward = true; - } - else if(!onScreen.below && !onScreen.above) { - module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen); - canOpenDownward = true; - } - else { - module.verbose('Dropdown cannot fit below, opening upward', onScreen); - canOpenDownward = false; - } - $currentMenu.removeClass(className.loading); - return canOpenDownward; - }, inObject: function(needle, object) { var found = false @@ -5798,6 +5777,14 @@ $.fn.dropdown = function(parameters) { : false ; return (overflowY == 'auto' || overflowY == 'scroll'); + }, + horizontallyScrollableContext: function() { + var + overflowX = ($context.get(0) !== window) + ? $context.css('overflow-X') + : false + ; + return (overflowX == 'auto' || overflowX == 'scroll'); } }, @@ -5814,6 +5801,79 @@ $.fn.dropdown = function(parameters) { } return false; }, + openDownward: function($subMenu) { + var + $currentMenu = $subMenu || $menu, + canOpenDownward = true, + onScreen = {}, + calculations + ; + $currentMenu + .addClass(className.loading) + ; + calculations = { + context: { + scrollTop : $context.scrollTop(), + height : $context.outerHeight() + }, + menu : { + offset: $currentMenu.offset(), + height: $currentMenu.outerHeight() + } + }; + if(module.is.verticallyScrollableContext()) { + calculations.menu.offset.top += calculations.context.scrollTop; + } + onScreen = { + above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height, + below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height + }; + if(onScreen.below) { + module.verbose('Dropdown can fit in context downward', onScreen); + canOpenDownward = true; + } + else if(!onScreen.below && !onScreen.above) { + module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen); + canOpenDownward = true; + } + else { + module.verbose('Dropdown cannot fit below, opening upward', onScreen); + canOpenDownward = false; + } + $currentMenu.removeClass(className.loading); + return canOpenDownward; + }, + openRightward: function($subMenu) { + var + $currentMenu = $subMenu || $menu, + canOpenRightward = true, + isOffscreenRight = false, + calculations + ; + $currentMenu + .addClass(className.loading) + ; + calculations = { + context: { + scrollLeft : $context.scrollLeft(), + width : $context.outerWidth() + }, + menu: { + offset : $currentMenu.offset(), + width : $currentMenu.outerWidth() + } + }; + if(module.is.horizontallyScrollableContext()) { + calculations.menu.offset.left += calculations.context.scrollLeft; + } + isOffscreenRight = (calculations.menu.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width); + if(isOffscreenRight) { + module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight); + canOpenRightward = false; + } + $currentMenu.removeClass(className.loading); + return canOpenRightward; + }, click: function() { return (hasTouch || settings.on == 'click'); }, @@ -5915,9 +5975,6 @@ $.fn.dropdown = function(parameters) { queue : true, onStart : start, onComplete : function() { - if(settings.direction == 'auto') { - module.remove.upward($subMenu); - } callback.call(element); } }) @@ -6347,6 +6404,7 @@ $.fn.dropdown.settings = { selected : 'selected', selection : 'selection', upward : 'upward', + leftward : 'left', visible : 'visible' } @@ -7229,25 +7287,15 @@ $.fn.modal = function(parameters) { var defaultSettings = { debug : settings.debug, - dimmerName : 'modals', - duration : { - show : settings.duration, - hide : settings.duration - } + dimmerName : 'modals' }, dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings) ; - if(settings.inverted) { - dimmerSettings.variation = (dimmerSettings.variation !== undefined) - ? dimmerSettings.variation + ' inverted' - : 'inverted' - ; - } if($.fn.dimmer === undefined) { module.error(error.dimmer); return; } - module.debug('Creating dimmer with settings', dimmerSettings); + module.debug('Creating dimmer'); $dimmable = $context.dimmer(dimmerSettings); if(settings.detachable) { module.verbose('Modal is detachable, moving content into dimmer'); @@ -7256,9 +7304,6 @@ $.fn.modal = function(parameters) { else { module.set.undetached(); } - if(settings.blurring) { - $dimmable.addClass(className.blurring); - } $dimmer = $dimmable.dimmer('get dimmer'); }, id: function() { @@ -7411,7 +7456,7 @@ $.fn.modal = function(parameters) { } }, resize: function() { - if( $dimmable.dimmer('is active') ) { + if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) { requestAnimationFrame(module.refresh); } } @@ -7432,6 +7477,7 @@ $.fn.modal = function(parameters) { : function(){} ; module.refreshModals(); + module.set.dimmerSettings(); module.showModal(callback); }, @@ -7725,6 +7771,42 @@ $.fn.modal = function(parameters) { ; } }, + dimmerSettings: function() { + if($.fn.dimmer === undefined) { + module.error(error.dimmer); + return; + } + var + defaultSettings = { + debug : settings.debug, + dimmerName : 'modals', + variation : false, + closable : 'auto', + duration : { + show : settings.duration, + hide : settings.duration + } + }, + dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings) + ; + if(settings.inverted) { + dimmerSettings.variation = (dimmerSettings.variation !== undefined) + ? dimmerSettings.variation + ' inverted' + : 'inverted' + ; + $dimmer.addClass(className.inverted); + } + else { + $dimmer.removeClass(className.inverted); + } + if(settings.blurring) { + $dimmable.addClass(className.blurring); + } + else { + $dimmable.removeClass(className.blurring); + } + $context.dimmer('setting', dimmerSettings); + }, screenHeight: function() { if( module.can.fit() ) { $body.css('height', ''); @@ -8033,6 +8115,7 @@ $.fn.modal.settings = { active : 'active', animating : 'animating', blurring : 'blurring', + inverted : 'inverted', scrolling : 'scrolling', undetached : 'undetached' } @@ -8168,10 +8251,10 @@ $.fn.popup = function(parameters) { } if(settings.popup) { $popup.addClass(className.loading); - $offsetParent = module.get.offsetParent(); + $offsetParent = module.get.offsetParent($target); $popup.removeClass(className.loading); if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) { - module.debug('Moving popup to the same offset parent as activating element'); + module.debug('Moving popup to the same offset parent as target'); $popup .detach() .appendTo($offsetParent) @@ -8182,7 +8265,7 @@ $.fn.popup = function(parameters) { $offsetParent = (settings.inline) ? module.get.offsetParent($target) : module.has.popup() - ? module.get.offsetParent($popup) + ? module.get.offsetParent($target) : $body ; } @@ -8403,7 +8486,7 @@ $.fn.popup = function(parameters) { hideAll: function() { $(selector.popup) - .filter('.' + className.visible) + .filter('.' + className.popupVisible) .each(function() { $(this) .data(metadata.activator) @@ -8458,7 +8541,7 @@ $.fn.popup = function(parameters) { }, supports: { svg: function() { - return (typeof SVGGraphicsElement === undefined); + return (typeof SVGGraphicsElement === 'undefined'); } }, animate: { @@ -9029,28 +9112,38 @@ $.fn.popup = function(parameters) { }, close: function() { if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) { - $scrollContext - .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully) - ; + module.bind.closeOnScroll(); } if(settings.on == 'hover' && openedWithTouch) { - module.verbose('Binding popup close event to document'); - $document - .on('touchstart' + elementNamespace, function(event) { - module.verbose('Touched away from popup'); - module.event.hideGracefully.call(element, event); - }) - ; + module.bind.touchClose(); } if(settings.on == 'click' && settings.closable) { - module.verbose('Binding popup close event to document'); - $document - .on('click' + elementNamespace, function(event) { - module.verbose('Clicked away from popup'); - module.event.hideGracefully.call(element, event); - }) - ; + module.bind.clickaway(); } + }, + closeOnScroll: function() { + module.verbose('Binding scroll close event to document'); + $scrollContext + .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully) + ; + }, + touchClose: function() { + module.verbose('Binding popup touchclose event to document'); + $document + .on('touchstart' + elementNamespace, function(event) { + module.verbose('Touched away from popup'); + module.event.hideGracefully.call(element, event); + }) + ; + }, + clickaway: function() { + module.verbose('Binding popup close event to document'); + $document + .on('click' + elementNamespace, function(event) { + module.verbose('Clicked away from popup'); + module.event.hideGracefully.call(element, event); + }) + ; } }, @@ -9111,7 +9204,7 @@ $.fn.popup = function(parameters) { return ($popup !== undefined && $popup.hasClass(className.fluid)); }, visible: function() { - return ($popup !== undefined && $popup.hasClass(className.visible)); + return ($popup !== undefined && $popup.hasClass(className.popupVisible)); }, dropdown: function() { return $module.hasClass(className.dropdown); @@ -9457,14 +9550,15 @@ $.fn.popup.settings = { }, className : { - active : 'active', - animating : 'animating', - dropdown : 'dropdown', - fluid : 'fluid', - loading : 'loading', - popup : 'ui popup', - position : 'top left center bottom right', - visible : 'visible' + active : 'active', + animating : 'animating', + dropdown : 'dropdown', + fluid : 'fluid', + loading : 'loading', + popup : 'ui popup', + position : 'top left center bottom right', + visible : 'visible', + popupVisible : 'visible' }, selector : { @@ -9662,8 +9756,17 @@ $.fn.search = function(parameters) { event: { input: function() { - clearTimeout(module.timer); - module.timer = setTimeout(module.query, settings.searchDelay); + if(settings.searchDelay) { + clearTimeout(module.timer); + module.timer = setTimeout(function() { + if(module.is.focused()) { + module.query(); + } + }, settings.searchDelay); + } + else { + module.query(); + } }, focus: function() { module.set.focus(); @@ -11051,10 +11154,6 @@ $.fn.sidebar = function(parameters) { transitionEvent = module.get.transitionEvent(); - if(module.is.ios()) { - module.set.ios(); - } - // avoids locking rendering if initialized in onReady if(settings.delaySetup) { requestAnimationFrame(module.setup.layout); @@ -11531,6 +11630,7 @@ $.fn.sidebar = function(parameters) { set: { // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios + // (This is no longer necessary in latest iOS) ios: function() { $html.addClass(className.ios); }, @@ -14796,6 +14896,17 @@ $.fn.form = function(parameters) { bracketedRule: function(rule) { return (rule.type && rule.type.match(settings.regExp.bracket)); }, + shorthandFields: function(fields) { + var + fieldKeys = Object.keys(fields), + firstRule = fields[fieldKeys[0]] + ; + return module.is.shorthandRules(firstRule); + }, + // duck type rule test + shorthandRules: function(rules) { + return (typeof rules == 'string' || $.isArray(rules)); + }, empty: function($field) { if(!$field || $field.length === 0) { return true; @@ -14947,6 +15058,23 @@ $.fn.form = function(parameters) { : 'keyup' ; }, + fieldsFromShorthand: function(fields) { + var + fullFields = {} + ; + $.each(fields, function(name, rules) { + if(typeof rules == 'string') { + rules = [rules]; + } + fullFields[name] = { + rules: [] + }; + $.each(rules, function(index, rule) { + fullFields[name].rules.push({ type: rule }); + }); + }); + return fullFields; + }, prompt: function(rule, field) { var ruleName = module.get.ruleName(rule), @@ -14997,23 +15125,9 @@ $.fn.form = function(parameters) { } else { // 2.x - if(parameters.fields) { - ruleKeys = Object.keys(parameters.fields); - if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) { - $.each(parameters.fields, function(name, rules) { - if(typeof rules == 'string') { - rules = [rules]; - } - parameters.fields[name] = { - rules: [] - }; - $.each(rules, function(index, rule) { - parameters.fields[name].rules.push({ type: rule }); - }); - }); - } + if(parameters.fields && module.is.shorthandFields(parameters.fields)) { + parameters.fields = module.get.fieldsFromShorthand(parameters.fields); } - settings = $.extend(true, {}, $.fn.form.settings, parameters); validation = $.extend({}, $.fn.form.settings.defaults, settings.fields); module.verbose('Extending settings', validation, settings); @@ -15133,8 +15247,11 @@ $.fn.form = function(parameters) { } else { if(isRadio) { - if(isChecked) { - values[name] = value; + if(values[name] === undefined) { + values[name] = (isChecked) + ? true + : false + ; } } else if(isCheckbox) { @@ -15185,6 +15302,44 @@ $.fn.form = function(parameters) { }, add: { + // alias + rule: function(name, rules) { + module.add.field(name, rules); + }, + field: function(name, rules) { + var + newValidation = {} + ; + if(module.is.shorthandRules(rules)) { + rules = $.isArray(rules) + ? rules + : [rules] + ; + newValidation[name] = { + rules: [] + }; + $.each(rules, function(index, rule) { + newValidation[name].rules.push({ type: rule }); + }); + } + else { + newValidation[name] = rules; + } + validation = $.extend({}, validation, newValidation); + module.debug('Adding rules', newValidation, validation); + }, + fields: function(fields) { + var + newValidation + ; + if(fields && module.is.shorthandFields(fields)) { + newValidation = module.get.fieldsFromShorthand(fields); + } + else { + newValidation = fields; + } + validation = $.extend({}, validation, newValidation); + }, prompt: function(identifier, errors) { var $field = module.get.field(identifier), @@ -15237,6 +15392,51 @@ $.fn.form = function(parameters) { }, remove: { + rule: function(field, rule) { + var + rules = $.isArray(rule) + ? rule + : [rule] + ; + if(rule == undefined) { + module.debug('Removed all rules'); + validation[field].rules = []; + return; + } + if(validation[field] == undefined || !$.isArray(validation[field].rules)) { + return; + } + $.each(validation[field].rules, function(index, rule) { + if(rules.indexOf(rule.type) !== -1) { + module.debug('Removed rule', rule.type); + validation[field].rules.splice(index, 1); + } + }); + }, + field: function(field) { + var + fields = $.isArray(field) + ? field + : [field] + ; + $.each(fields, function(index, field) { + module.remove.rule(field); + }); + }, + // alias + rules: function(field, rules) { + if($.isArray(field)) { + $.each(fields, function(index, field) { + module.remove.rule(field, rules); + }); + } + else { + module.remove.rule(field, rules); + } + }, + fields: function(fields) { + module.remove.field(fields); + }, prompt: function(identifier) { var $field = module.get.field(identifier), @@ -15401,7 +15601,7 @@ $.fn.form = function(parameters) { if(typeof field == 'string') { module.verbose('Validating field', field); fieldName = field; - field = validation[field]; + field = validation[field]; } var identifier = field.identifier || fieldName, diff --git a/public/pxt/sim.js b/public/pxt/sim.js index f7c3232..e90c16b 100644 --- a/public/pxt/sim.js +++ b/public/pxt/sim.js @@ -266,6 +266,19 @@ var pxsim; Time.whenAppResetImpl = whenAppResetImpl; })(Time = pxsim.Time || (pxsim.Time = {})); })(pxsim || (pxsim = {})); +(function (pxsim) { + var Sensors; + (function (Sensors) { + //% + function fooImpl(arg) { + // leave this blank or return null if the block returns a value + } + Sensors.fooImpl = fooImpl; + function listNearbyDevices() { + } + Sensors.listNearbyDevices = listNearbyDevices; + })(Sensors = pxsim.Sensors || (pxsim.Sensors = {})); +})(pxsim || (pxsim = {})); /// /// var pxsim; diff --git a/public/pxt/target.js b/public/pxt/target.js index 59d29bd..186ec25 100644 --- a/public/pxt/target.js +++ b/public/pxt/target.js @@ -533,8 +533,9 @@ var pxtTargetBundle = { "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", - "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", + "sensors.ts": "//% color=#7fff00 weight=100\r\nnamespace Sensors { \r\n /**\r\n * This is the help text for the Foo block\r\n * @param arg help text for arg goes here\r\n **/\r\n //% weight=100\r\n //% color=#935BA5\r\n //% blockId=sensors_foo\r\n //% block=\"Foo arg %arg\"\r\n //% subcategory=Bluetooth\r\n export function foo(arg: string) {\r\n fooImpl(arg);\r\n } \r\n\r\n export function listNearbyDevices() {\r\n listNearbyDevicesImpl();\r\n }\r\n}", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/public/pxt/target.json b/public/pxt/target.json index b98177b..2c1627b 100644 --- a/public/pxt/target.json +++ b/public/pxt/target.json @@ -533,8 +533,9 @@ "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", - "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", + "sensors.ts": "//% color=#7fff00 weight=100\r\nnamespace Sensors { \r\n /**\r\n * This is the help text for the Foo block\r\n * @param arg help text for arg goes here\r\n **/\r\n //% weight=100\r\n //% color=#935BA5\r\n //% blockId=sensors_foo\r\n //% block=\"Foo arg %arg\"\r\n //% subcategory=Bluetooth\r\n export function foo(arg: string) {\r\n fooImpl(arg);\r\n } \r\n\r\n export function listNearbyDevices() {\r\n listNearbyDevicesImpl();\r\n }\r\n}", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/sim/api.ts b/sim/api.ts index db2c4d2..0f489a1 100644 --- a/sim/api.ts +++ b/sim/api.ts @@ -312,3 +312,14 @@ namespace pxsim.Time { } +namespace pxsim.Sensors { + //% + export function fooImpl(arg:string):void { + // leave this blank or return null if the block returns a value + } + + export function listNearbyDevices(): void { + + } +} + From 8f5152345eb7a891153f0c238e509279cc55b090 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 13:01:48 -0700 Subject: [PATCH 02/11] Added "String Manipulation" sub cat to Data -added join funciton -added split function --- client/shared/src/util/dataApi.ts | 39 +++++++++++++++++++++++++++++++ libs/core/data.ts | 29 +++++++++++++++++++++++ sim/api.ts | 15 ++++++++++-- 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/client/shared/src/util/dataApi.ts b/client/shared/src/util/dataApi.ts index 1d00d37..af9cbfc 100644 --- a/client/shared/src/util/dataApi.ts +++ b/client/shared/src/util/dataApi.ts @@ -64,4 +64,43 @@ export namespace pxsimdata { } } + export function joinImpl(arrayToBeJoined: any[], joinString: string): string { + console.log('joinImpl called'); + + let s: string = ""; + + for(var v in arrayToBeJoined) { + s += v.toString() + joinString; + } + + return s; + } + + export function splitImpl(stringToSplit: string, splitValue: string): string[] { + console.log('splitImpl called'); + + let a: string[] = []; + let index: number = -1; + + do { + index = stringToSplit.indexOf(splitValue); + + if (index > -1) { + a.push(stringToSplit.substr(0, index - 1)); + + var index2 = index + splitValue.length; + + if (index2 >= stringToSplit.length) + index2 = stringToSplit.length - 1; + + stringToSplit = stringToSplit.substr(index2); + } else { + a.push(stringToSplit); + } + + } while(index > -1); + + return a; + } + } \ No newline at end of file diff --git a/libs/core/data.ts b/libs/core/data.ts index ad26281..2a7bb17 100644 --- a/libs/core/data.ts +++ b/libs/core/data.ts @@ -100,6 +100,7 @@ namespace Data { //% weight=20 //% blockId=convert_number_to_text //% block="To text %value" + //% subcategory="String Manipulation" export function convertNumberToText(value: number): string { if (value === undefined) return null; @@ -107,4 +108,32 @@ namespace Data { return value.toString(); } + /** + * joins an array into a joined string + */ + //% weight=20 + //% blockId=data_array_join + //% block="Join %list |with %joinString" + //% subcategory="String Manipulation" + export function joinArray(list: any[], joinString: string = ""): string { + if (list === undefined || list.length == 0) + return ""; + else + return joinImpl(list, joinString); + } + + /** + * splits a string + */ + //% weight=20 + //% blockId=data_split_string + //% block="Split %value |with %splitValue" + //% subcategory="String Manipulation" + export function split(value: string, splitValue: string): string[] { + if (value === undefined || splitValue === undefined || splitValue.length == 0) + return null; + else + return splitImpl(value, splitValue); + } + } \ No newline at end of file diff --git a/sim/api.ts b/sim/api.ts index 0f489a1..db37c40 100644 --- a/sim/api.ts +++ b/sim/api.ts @@ -287,6 +287,16 @@ namespace pxsim.Data { export function onSharedVariableChangeImpl(name: string, body: pxsim.RefAction): void { } + + //% + export function joinImpl(arrayToBeJoined: any[], joinString: string): string { + return ""; + } + + //% + export function splitImpl(stringToSplit: string, splitValue: string): string[] { + return []; + } } namespace pxsim.Time { @@ -318,8 +328,9 @@ namespace pxsim.Sensors { // leave this blank or return null if the block returns a value } - export function listNearbyDevices(): void { - + //% + export function getNearbyDevicesImpl(): string[] { + return []; } } From 9b3107794dc69c3a9a11995b7d6701f14b5f3900 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 13:02:13 -0700 Subject: [PATCH 03/11] Added batch file for easier dev cycle. --- rebuild.bat | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 rebuild.bat diff --git a/rebuild.bat b/rebuild.bat new file mode 100644 index 0000000..a654d86 --- /dev/null +++ b/rebuild.bat @@ -0,0 +1,2 @@ +call npm run build-pxt +call npm run start From 4078a28d8ab41eb9ae0a13dcf4165877c0db184a Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 13:02:22 -0700 Subject: [PATCH 04/11] More BT work --- client/shared/src/util/sensorsApi.ts | 5 +++- libs/core/sensors.ts | 40 +++++++++++++++++----------- libs/core/sims.d.ts | 12 +++++++++ public/pxt/icons.css | 2 +- public/pxt/main.js | 2 +- public/pxt/release.manifest | 2 +- public/pxt/sim.js | 16 +++++++++-- public/pxt/target.js | 6 ++--- public/pxt/target.json | 6 ++--- 9 files changed, 63 insertions(+), 28 deletions(-) diff --git a/client/shared/src/util/sensorsApi.ts b/client/shared/src/util/sensorsApi.ts index 5b115d8..8580055 100644 --- a/client/shared/src/util/sensorsApi.ts +++ b/client/shared/src/util/sensorsApi.ts @@ -9,7 +9,10 @@ export namespace pxsimsensors { // do whatever the block does } - export function listNearbyDevicesImpl(): void { + export function getNearbyDevicesImpl(): string[] { // TODO: find nearby devices and return them as an array + console.log('getNearbyDevicesImpl called'); + + return ["device1", "device2"]; } } \ No newline at end of file diff --git a/libs/core/sensors.ts b/libs/core/sensors.ts index 732d23d..7d8cf49 100644 --- a/libs/core/sensors.ts +++ b/libs/core/sensors.ts @@ -1,19 +1,27 @@ //% color=#7fff00 weight=100 -namespace Sensors { - /** - * This is the help text for the Foo block - * @param arg help text for arg goes here - **/ - //% weight=100 - //% color=#935BA5 - //% blockId=sensors_foo - //% block="Foo arg %arg" - //% subcategory=Bluetooth - export function foo(arg: string) { - fooImpl(arg); - } +namespace Sensors { + /** + * This is the help text for the Foo block + * @param arg help text for arg goes here + **/ + //% weight=100 + //% color=#935BA5 + //% blockId=sensors_foo + //% block="Foo arg %arg" + //% subcategory=Bluetooth + export function foo(arg: string) { + fooImpl(arg); + } - export function listNearbyDevices() { - listNearbyDevicesImpl(); - } + /** + * Returns an array of all nearby bluetooth devices + **/ + //% weight=100 + //% color=#935BA5 + //% blockId=sensors_listNearbyDevices + //% block="ListNearbyDevices" + //% subcategory=Bluetooth + export function getNearbyDevices(): string[] { + return getNearbyDevicesImpl(); + } } \ No newline at end of file diff --git a/libs/core/sims.d.ts b/libs/core/sims.d.ts index 36bcd46..01362ed 100644 --- a/libs/core/sims.d.ts +++ b/libs/core/sims.d.ts @@ -200,6 +200,14 @@ declare namespace Data { //% shim=Data::onSharedVariableChangeImpl function onSharedVariableChangeImpl(name: string, body: () => void): void; + //% + //% shim=Data::joinImpl + function joinImpl(arrayToBeJoined: any[], joinString: string): string; + + //% + //% shim=Data::splitImpl + function splitImpl(stringToSplit: string, splitValue: string): string[]; + } declare namespace Time { //% @@ -224,6 +232,10 @@ declare namespace Sensors { //% shim=Sensors::fooImpl function fooImpl(arg: string): void; + //% + //% shim=Sensors::getNearbyDevicesImpl + function getNearbyDevicesImpl(): string[]; + } // Auto-generated. Do not edit. Really. diff --git a/public/pxt/icons.css b/public/pxt/icons.css index 4d94933..584d903 100644 --- a/public/pxt/icons.css +++ b/public/pxt/icons.css @@ -1,6 +1,6 @@ @font-face { font-family: "xicon"; - src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABaIAAsAAAAAIOAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZHIFOLY21hcAAAAYQAAAClAAACiPLHg4VnbHlmAAACLAAAEecAABkAcvkU1WhlYWQAABQUAAAALgAAADYOJz/BaGhlYQAAFEQAAAAYAAAAJAfKA/9obXR4AAAUXAAAABAAAABYUggAAGxvY2EAABRsAAAALgAAAC5QDkqgbWF4cAAAFJwAAAAfAAAAIAEpAWFuYW1lAAAUvAAAAR8AAAHyCM/ZInBvc3QAABXcAAAAqQAAAPYhLhbGeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGTezTiBgZWBgamKaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcPjJ+FGV+AeRGgUmgRhABAPPhCz0AAHic7ZHJDcMwDARHtuwcvnKpi1SSgvJK06rA4WpTRggMByIoQSCBAeiDZ5AhfUgo3lFNrd5zbvXMq/Vk1WvZ98hJOc655S56c7w4cuDIKe5NzCysbFy4cuPOgxKtI/+YldL8OxVN07T5dga5N9pTzUYTr4PRDutokA8G+WiQTwb5bLTbOhnk2eh3dTHIq0HeDPLFIF8N8s0g3w3ywyAXQ/kC5NgzkgAAAHicjVh7jCRHeZ+q6qrq92v6Me9Xz3Tv7OzN7s6r9717e/bd+W59vrPvZR8Y+wLGDk6weUg8ZMHJgExeyiFkA0oCSVCIcAwkIOHg4MgRYOTgEKI4ICBAlH8ARYqikD8Cd5t81TPrM5A/srPT3VNd/VXVV9/3+/2+zqEc/JGj5HO5I7lc2hxMNlEfWYhFfZREm2i4hdJBHQWTdDyKE5Yssz7aRpMx3B33kG8i7tVRDbGEtxIT+Y4XfAcfdoqsYuFy3N1gCLGNblzGZpW5hvQZv4h0HOLxnGnNjeFCR4XCxTux6RTWis6LrmS+8qZB7WfNUEIIW0Xj580ZRQsjJIXm9b9yirnpGl5DfpD7Ri4nZsODMAhrCA4BN1GcxImYsDgznrVzE8OvbE1xwrNG34PGUQoLnYySeBGZKMmTPkqjOGoxcIgwNIHbW8LsZFtYZTwSzeAiuBHU0SQV5uJZb9FZtIvu0+dqiGeXE+gFlremE/RgfJjBtBd8oBsDK9PWLYQ/YHLHklE50HVJIwghxaRMrN6wVJ16uq4SjpCsqpgQRBSN5UumTA05r0rUkLCsov593Y/86VzVlAyTEoZC1y6T0CoEiqkruuYx3aBURq1SEKF20Klotm7VOopmWJSqKK4UOtj3Ct2abuuF0PcRk5umpmIWqjahDapQCeG8WtY40mTHCOF3EhWjWrnncokV5dFSsVGIqVLBd/FGg5ebsso0rbJUKZSVqFhbQDolMiNkecA5tPfLy3JUqPaQxrDM9LhhyIZamgu7UjMotRFY1xQ0mLfQ5v4L4a/dTIiMmnnb0+a8ls0xwngu1hnBhFcs3dDbTlWVEJX7TZUrDGGGCoam6K5tlbhEuJm3ZENzwV+BgW+eW0mObaqmzAkF1621Dw3mo7iSSFhKS55pMNli4BLECkYp35IMVYTdNPb+kvxzLsnl8sNxNB6OR5NhcxBU0dCP/IOvx6JmK95E4n60efXq1aKLiVu6mv2V3OvX3SJc4N57HnzCLRbdJx58z4OPHlw+CkPgbJxvkvfl5NzxXK6TOJHDx2koMnQ4CMWhhrIwNlEPJcPxFoLgjibjUR9FLchTcWJVcfCCoT/kUauPRhBeL1y99+rfPHf9hU12c79Zqb3jxOE33iQNbooPx7/e/+14MoktPL40WT63woz5YrJyd5Kmydf6fxjvxPHOf13dfxbtXn34uefQ5NCGffj09oM7yqlRshP3EZrcOkG2M7k0PnTboheuJHJ6a4r68c6thzuwFJqt5/vkT3IP5a7kfjf36dxXYFWzLO2jdJK+nD/ZurJ0gMwyxQq4yC84RC3oiyFvoQOg0rboOBwEApEgu9KRyDrYjW10YAfyzZ/mm7BAROaK0cSPsIbTiQCE/nSEGspn2Qw2sDAmDODMBgxtolRMdTpF4fvZhBh6+95jS56qmInaCBd6w0o8V4nPVKodt+ASxfYZxQiy1GirDVP2y5rKsYR4ezGsdbBjrJdki5qudsJgjCv+8ZpVgBh1CxKTTM4IpCOBEEeYQ6Dd2nrb5+0KVTU73EgNGVG1O/jPsWEZVTeeEJocrsvhoqoqpXrD1+Saa6hUcwKPW4QF/ZJ72yfUMgWD3kdXyvUk35CixQ/PV3Rr1zg68EyteNsLZ7c213v5vC/LWJXBc2txNF6vel2zpDlacSV0ZYwcqdDSudJfLxVCmTDKOc1TRavoed52VJhb11CYhDknWMYOgI1cKcmaFdcbrkzRp+Sa5a3nA6VSNhbNQoP/WWktaBiGttBupd7+6zDTKeYyc1qtYhPQTa1WTYYVIjdaKqXvpWXVqBnVj4yCUn5lfOyTVU+iOZLF1UtkD660nCU4zWkiyJRxMq6LjCySZ67djFpPvvOdT/Y++MEv4/ftH3vb7h46c+SR+1N4VJrF5fO55dyp3B/nvgQpngWcgPXhNG4EOFuzGIMA2EbDNJpFQjgI0yTOs1mMMYH+aX/Wc9jiLInD7EYIUZo1ih5BOO29iA4sz9qzAIv5wbBwf3GWGmF6wBFZlKaML9dQFoQW9BiKaE+ngS9CPE7Q/4zvrSypiktXzlDZ1o29FSZLeFI72ly9YAP+SoVXH/t9CDHZUmO/XN4jyz3DU+kk6mh2L1X0NF3S+XLsHUKE6pLcrpQULHFqccww7DzFWLMBO02baxLEKmu5m0G9oimma9T0BkWOxgU/qYRyqpiYAazbMh/brucAZrmaYrjKj91oox+oiy2zaVBOwLDFdV8btCLdTSa6Rb4y7B15EAho0j37R6e3eh6SJbRoUd29a63aCQ5990hxAERl20g7hvj+U5ItS73V9cPnP32zbqYbHz09ubfjtRAm9pO4remmyimW8hJMTKMknDNDzVFEhkHENnzJDfoVKzQ4VYOilsdIZxh4gZqK0+GqrwDb8FSTJK4FVqlsBhr9jBMd+dyFhTMNs6gBT0syl7ijzI9XNs5/5qjt5FgWW8+Sp3MF1EUb6Cg6gc5CfA1qkmdKrb402pLyA4CbJB7B1gHCQNwIQErSKfIlKWetPh6nEAZ9NE4XUTBIkzQWj2yjQbbf0BsA0Q9NNI94AncBz8ZpRgKYD2p4mI6hcSLooo5SwDQgDGFcPMFD7vMU4M8HnExCkHZAW5wNB2DQCwSF8DCJRX8vGExS8YDQPRC+SRgsIphawj1AyVjMBJhHShO4EhgcJxlFgcHA53UMK/Z5ABPyTBwlAUvEdQ2RgUgL3hKB3rLQKMoSSkB+soU6Hh+GmTCDIbC0+dDlM6uNxuqZyw+948bl5vLdZ4+VNYrgo2qAlQjpBQVTplGNcWRwzXZ0RAgnEgVhwLANzXag4iozqnbdNMyao3MDMCbv+Spk10lQBoW584c6t9y8XQatpanM1ADFDVOVdNtU86ZqKrasFhVPRQnBWCg00KkKqAYkiMWAY8HJK5Zsg/rSK0VdgvmoruzIqhlBZ9us16saqY5O9AHjQPSAaSJBQipwQAov5jFPZGSrTC7Xm0XHwmq+bIp0cRGEqqQaNOz/LeWmqZtcZyqFECbE3nYspjNF8MtLiJYYg2UzRSVPN9ZOX3747b/ovWtfLvZ3uyWjplaZ5Tky1RWCuBBUFJZEKGYyeBUTCXJAQgbGciUo2JbBIJ2wBONVTSrJOpN1LllFLQSxKnm+VemWNFOjil+n4HTm6EA5ug7YD76XZFmn3NaRBV4DWoSxYI5Ab8zUucltR/gRMZY3HVlSXBVzVckrkuxJBJUFevTHr714vKiAIxTFrNXr5UAhjGkMpqBK2NGxDogjKZDAth/4ihUUQPDKnqubiGLFBzJkDD2LAMUQhRVC2hOSB9CBz9cl1FEURyIQAxkl4Fnu/lNuN/deyNk06ZNRJlZEgo6mCeVPwfwVKmMqWJJ4PNp6WdOMBVFQISeGg3QyimdW4lEfL86YYjTru4XHMMisAMk+vjcdgOy126Wap2BQ/L5VUkyuNea32hDVfr6cV6g7l/dh8wk6uVPRVa6yshWoCsZAENH1d1KCou35uiabSsnyNYVgxasX2+02FDSwnzJAWpnBU3pl5yTGGLSIN+dQBSz76DthaDeXj72+3HR84A3stGWtudn9rN8t+LausnxBK3pBszq5sn0L8I3uchF4oVsvDY4n0fB+73Nzm01NbjsYM8V3GpX7ji+17DAMhlFybFiquyEIcMThQVk7sXUlrTbCfFEr5Jmq20GYe5mjv0m+ClrYyb0p9xLsh8da8WgyCOjBBQKvb6JRMoaKFtwZrqM69WFD8NJyRr7Aj8sCnMDn4202DEFEg2T3Qh9Esti8KAzA65PM6bA7EWzQNk6Gv2xkcGCEriPYTzHaWIwMGBYlP2dkEU2NREDcYhA/GxA2c4iuNBbq9YUGOjM97xv18i0nTz7gurdubUuUMZEWqoslOQ/54zgyoAMlNZF4XKLd6scd63UnT14y8s9bqhYgIFevGog471iWhbQo9Q6MaE5mRDFuGCGSMPI936kdPWpLfumr/6eNc6cqfhE6MNlxcS2o1w/V6+H0tP8ho/yad1+QxtKdj7zZAdgD0OCWBGRZ7Oo6gCuEGwJAk6vynVTjNMNI4j505bw0phcfeUNAyUJl08NUpyY8SmSvN9fAlTXoBXJkZkcLVJGjAher/E6mgngRUTt51yUf5y89suRLOlqobggrzMCQ0BxlZsrAAP7yy72Akmca8R/Ic7lbcrfnLoFGjERpNorGAzhO1pGQ+CzT+lk6TnduWEOwXUO/BUfWQxnviRcJsLOiFoCe2ygveHEUtxg9uPhvdOfp1dXTdz6DsEF0hHtJr2TaADGI2hw9f3ZvdXXv7Bch3AF3CPZqgR8cGmBkSiZCf9de7bRX4v23wbmz0vn27vnX7p26/TUXj2NeUZqlVleSHKVqGYZiHnIZOnb+8plTp+65uMvyI0e1TaflSRKRlpJarDZhC95a67RX4055egIXKJkf/oV8C3RyPhfmyrl6LoI6tpdbhFoWVIADpWJzMBk7oziifnP8yi+KnCF5xfcb+XI5jy+I47X/IM9fW73x3d8/cuTdB/9kC6rdL7mlkos33NIDu7vvPvjHj15bIV+98Z3V1t8l9+aaQiUFoob2mwfnMRSw03p6GcB12PTJHwCCFfevIzI97//74pn+008vnllENv5+e9j+dnvUvoJGF0fDfxuNLg6v3Kjf/56swsqFEkNh6jRTgektobk92GNAA4BwAPkMk9Fnzz/+ptrH9t/ymLcy/6sP3T/X7fW6rlsKCt7q9vbqxt4Jsrr51t2n93d+7+LK3MLC3Pz9b3mg645cz1t94hMfWl2v127wyUvkKkTjPIwMVQoJeZS2DgrgKV9AuM2K3RmxDBP8RVTY/+GPvvCFZ+6+I9ntDav1vOWcObZ+1+Th463V+NBQV2XbKgbN/Pzd6K/3f4iOQk+Jh5XJ2p+fu+uN5VCWnsFEM4a9+I5K0dAIfrWYSjapj5NPwMyyuqmTdNBBEOeHToR+9hforv2frJxZgf/mu971k2vS/tU5CO3VVfzT/e6NNX2efAmsLUzXlE+TKGwdVEMH7Dgc/+IyOX4UDfdfPPXiiy/e9/6dB4+dWxq4ruX0F04dvrzxyOl4a365UvN04/Dq4vHepfvQq/a/hhH0pXKxtrH9K3ffc3l7o1aSpRexpFmV6qWF/qqpS/j1szltkH+8MSdQmAd+FpXTjJVveHr2omCYoB8guv+zTz311Kcu3NPfG2w027ph6O3mxmCvf89auV9rd2XO5W671i+vXcBf3792AbpSpdq66ehDb3jDG48diSoKfYowx7vjyM7h3Tt8h5LzMz/hH5EvAn9VBXcduNmfRhtPSCcRQmEEHkKnJyfH45OTJ7Zb7Sja3D6PGttnF5ebjbfgXDwe743H6PHHRyf2PnnylvHp/R/7p49evu/hV52//X0H71i+R34z9zu5D+Qez304968wWhCyA20yyhgpewGSfQDZBKfB6g8Eh3BEBnRwWEetZagyUnE8KC2n9e+ET2ZNAgSnrziX4ylsTl/pHAiaSZINDAdwfDbw0tBPlpaHyGvlW/wXcFc8O2vDWXkNpoLsBQybQW72uhRgmNXwy0+QNugZT697UKJpgeR2WvWt918Zr7SqhoOIFEDlqclYpwqTKfPNktrrdcbFhiuhb3UxRVrYajFHsXRLlVVGxTtnoCSlaDAFJHWeSViIYigTLRcZyPcZsy1J86hq6AqlpOjnPaApZrHfAP66/gL6qWlt3V8uy2yrvzTuHXVcTnv1VrvcV6GOqC4USrYC9QQ1CfHisL4WS8xzj/cmg6UdENQYxHjewBqVb13fIufSnWrdjULdc4pr83LS7xYHzbi7sD3qpis1mZcbt1ddj1LEqWy4jq/BZGUyq0gEm4LIpormmiXT1AhSDcUvnujaQdNXiroCqtsyZJtUbSJjT8ZEDsrMqRshlwzZZDcVgkavFPqufx2hfag97sDyue3dWzYuF0sKX1/oD+Z2bJuzbrXeKnXzXC6aLQc0tF9abBDa2OwsH5pfY7xaeWC7N68FNpUdbWXl9GNJ95dxWLywTJxmIvZ8IN5leBAxIJVAMGfvNeGDh+cef3PtY+i3HvPT3gMP35/Mw5/rlv2Ct7a1tbb+/8Ph/wVHej4HAHicY2BkYGAA4r98tpfj+W2+MnAzvwCKMFyd/LcOmWZ+yPwASHEwMIF4AGSaDEoAAHicY2BkYGB+wcAAJx8yMDKgAjEARMsC03icY2BgYGB+QX0MAD2xE0gAAAAAAGIBoAHUAjwDaAOIBLYGlAdaCHoI/glOCYAJvAoECiYKcAq6Cu4MRAyAAAB4nGNgZGBgEGMMZeBkAAEmIOYCQgaG/2A+AwAT0gGMAHicXY69TsMwFIVP+odoEAIhMZulC1LSduwDtDMduqeJ0x8lceS4VSsxM/MUzDwFz8WJeyUqbOn6O+ceXxvAA34QoF0B+r62q4Mbqgt3SXfCPfKjcB8hnoUHVC/CQ7xiJBziCW+cEPRu6QyRCXdwj0q4S/9duEf+EO5z+qfwgP6X8BArfAuHGAWD0y411VJvDkViPfuy0rbZmUpNorHXC11pmzidqfVZNcfN1Llc5daUam4qp4vCqNqavU5dtHWunsVxLn6UmhIn7JDC8NdLaGxwQIEE9sr/oxUTFg11qxQmiDC+6i/Yr3wmgeOZMbPGmbXBkbOndB1y6pwZg5I09zfbdMFt6NS+t6eT0o+w9bdqzBBz5//ykX+7/AVV81OKAHicbYzHDsIwFAS9IQ1C6OX7iG0Skxc/ywWJv6eJG3Oa1UgrMvFlIf5zQoYZchQoUaHGHAs0WKLFCmtssMUOexxwxAlnUXbEcgyzLvW5HIxrJHFSyRFfVCGZ2DeSp+liFRmr62uyMhq2RU/c6ewWqjHoycVHOYZrIppPRnp+H+WOXpdeK65D1M7YyO1PyPRDrN6LU/xkvmvf/uSTy5h8JJ0nq1iIJwkEPv4AAAA=) format("woff"); + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABaIAAsAAAAAIOAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZHIFOLY21hcAAAAYQAAAClAAACiPLHg4VnbHlmAAACLAAAEecAABkAcvkU1WhlYWQAABQUAAAALwAAADYONvO/aGhlYQAAFEQAAAAYAAAAJAfKA/9obXR4AAAUXAAAABAAAABYUggAAGxvY2EAABRsAAAALgAAAC5QDkqgbWF4cAAAFJwAAAAfAAAAIAEpAWFuYW1lAAAUvAAAAR8AAAHyCM/ZInBvc3QAABXcAAAAqQAAAPYhLhbGeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGTezTiBgZWBgamKaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcPjJ+FGV+AeRGgUmgRhABAPPhCz0AAHic7ZHJDcMwDARHtuwcvnKpi1SSgvJK06rA4WpTRggMByIoQSCBAeiDZ5AhfUgo3lFNrd5zbvXMq/Vk1WvZ98hJOc655S56c7w4cuDIKe5NzCysbFy4cuPOgxKtI/+YldL8OxVN07T5dga5N9pTzUYTr4PRDutokA8G+WiQTwb5bLTbOhnk2eh3dTHIq0HeDPLFIF8N8s0g3w3ywyAXQ/kC5NgzkgAAAHicjVh7jCRHeZ+q6qrq92v6Me9Xz3Tv7OzN7s6r9717e/bd+W59vrPvZR8Y+wLGDk6weUg8ZMHJgExeyiFkA0oCSVCIcAwkIOHg4MgRYOTgEKI4ICBAlH8ARYqikD8Cd5t81TPrM5A/srPT3VNd/VXVV9/3+/2+zqEc/JGj5HO5I7lc2hxMNlEfWYhFfZREm2i4hdJBHQWTdDyKE5Yssz7aRpMx3B33kG8i7tVRDbGEtxIT+Y4XfAcfdoqsYuFy3N1gCLGNblzGZpW5hvQZv4h0HOLxnGnNjeFCR4XCxTux6RTWis6LrmS+8qZB7WfNUEIIW0Xj580ZRQsjJIXm9b9yirnpGl5DfpD7Ri4nZsODMAhrCA4BN1GcxImYsDgznrVzE8OvbE1xwrNG34PGUQoLnYySeBGZKMmTPkqjOGoxcIgwNIHbW8LsZFtYZTwSzeAiuBHU0SQV5uJZb9FZtIvu0+dqiGeXE+gFlremE/RgfJjBtBd8oBsDK9PWLYQ/YHLHklE50HVJIwghxaRMrN6wVJ16uq4SjpCsqpgQRBSN5UumTA05r0rUkLCsov593Y/86VzVlAyTEoZC1y6T0CoEiqkruuYx3aBURq1SEKF20Klotm7VOopmWJSqKK4UOtj3Ct2abuuF0PcRk5umpmIWqjahDapQCeG8WtY40mTHCOF3EhWjWrnncokV5dFSsVGIqVLBd/FGg5ebsso0rbJUKZSVqFhbQDolMiNkecA5tPfLy3JUqPaQxrDM9LhhyIZamgu7UjMotRFY1xQ0mLfQ5v4L4a/dTIiMmnnb0+a8ls0xwngu1hnBhFcs3dDbTlWVEJX7TZUrDGGGCoam6K5tlbhEuJm3ZENzwV+BgW+eW0mObaqmzAkF1621Dw3mo7iSSFhKS55pMNli4BLECkYp35IMVYTdNPb+kvxzLsnl8sNxNB6OR5NhcxBU0dCP/IOvx6JmK95E4n60efXq1aKLiVu6mv2V3OvX3SJc4N57HnzCLRbdJx58z4OPHlw+CkPgbJxvkvfl5NzxXK6TOJHDx2koMnQ4CMWhhrIwNlEPJcPxFoLgjibjUR9FLchTcWJVcfCCoT/kUauPRhBeL1y99+rfPHf9hU12c79Zqb3jxOE33iQNbooPx7/e/+14MoktPL40WT63woz5YrJyd5Kmydf6fxjvxPHOf13dfxbtXn34uefQ5NCGffj09oM7yqlRshP3EZrcOkG2M7k0PnTboheuJHJ6a4r68c6thzuwFJqt5/vkT3IP5a7kfjf36dxXYFWzLO2jdJK+nD/ZurJ0gMwyxQq4yC84RC3oiyFvoQOg0rboOBwEApEgu9KRyDrYjW10YAfyzZ/mm7BAROaK0cSPsIbTiQCE/nSEGspn2Qw2sDAmDODMBgxtolRMdTpF4fvZhBh6+95jS56qmInaCBd6w0o8V4nPVKodt+ASxfYZxQiy1GirDVP2y5rKsYR4ezGsdbBjrJdki5qudsJgjCv+8ZpVgBh1CxKTTM4IpCOBEEeYQ6Dd2nrb5+0KVTU73EgNGVG1O/jPsWEZVTeeEJocrsvhoqoqpXrD1+Saa6hUcwKPW4QF/ZJ72yfUMgWD3kdXyvUk35CixQ/PV3Rr1zg68EyteNsLZ7c213v5vC/LWJXBc2txNF6vel2zpDlacSV0ZYwcqdDSudJfLxVCmTDKOc1TRavoed52VJhb11CYhDknWMYOgI1cKcmaFdcbrkzRp+Sa5a3nA6VSNhbNQoP/WWktaBiGttBupd7+6zDTKeYyc1qtYhPQTa1WTYYVIjdaKqXvpWXVqBnVj4yCUn5lfOyTVU+iOZLF1UtkD660nCU4zWkiyJRxMq6LjCySZ67djFpPvvOdT/Y++MEv4/ftH3vb7h46c+SR+1N4VJrF5fO55dyp3B/nvgQpngWcgPXhNG4EOFuzGIMA2EbDNJpFQjgI0yTOs1mMMYH+aX/Wc9jiLInD7EYIUZo1ih5BOO29iA4sz9qzAIv5wbBwf3GWGmF6wBFZlKaML9dQFoQW9BiKaE+ngS9CPE7Q/4zvrSypiktXzlDZ1o29FSZLeFI72ly9YAP+SoVXH/t9CDHZUmO/XN4jyz3DU+kk6mh2L1X0NF3S+XLsHUKE6pLcrpQULHFqccww7DzFWLMBO02baxLEKmu5m0G9oimma9T0BkWOxgU/qYRyqpiYAazbMh/brucAZrmaYrjKj91oox+oiy2zaVBOwLDFdV8btCLdTSa6Rb4y7B15EAho0j37R6e3eh6SJbRoUd29a63aCQ5990hxAERl20g7hvj+U5ItS73V9cPnP32zbqYbHz09ubfjtRAm9pO4remmyimW8hJMTKMknDNDzVFEhkHENnzJDfoVKzQ4VYOilsdIZxh4gZqK0+GqrwDb8FSTJK4FVqlsBhr9jBMd+dyFhTMNs6gBT0syl7ijzI9XNs5/5qjt5FgWW8+Sp3MF1EUb6Cg6gc5CfA1qkmdKrb402pLyA4CbJB7B1gHCQNwIQErSKfIlKWetPh6nEAZ9NE4XUTBIkzQWj2yjQbbf0BsA0Q9NNI94AncBz8ZpRgKYD2p4mI6hcSLooo5SwDQgDGFcPMFD7vMU4M8HnExCkHZAW5wNB2DQCwSF8DCJRX8vGExS8YDQPRC+SRgsIphawj1AyVjMBJhHShO4EhgcJxlFgcHA53UMK/Z5ABPyTBwlAUvEdQ2RgUgL3hKB3rLQKMoSSkB+soU6Hh+GmTCDIbC0+dDlM6uNxuqZyw+948bl5vLdZ4+VNYrgo2qAlQjpBQVTplGNcWRwzXZ0RAgnEgVhwLANzXag4iozqnbdNMyao3MDMCbv+Spk10lQBoW584c6t9y8XQatpanM1ADFDVOVdNtU86ZqKrasFhVPRQnBWCg00KkKqAYkiMWAY8HJK5Zsg/rSK0VdgvmoruzIqhlBZ9us16saqY5O9AHjQPSAaSJBQipwQAov5jFPZGSrTC7Xm0XHwmq+bIp0cRGEqqQaNOz/LeWmqZtcZyqFECbE3nYspjNF8MtLiJYYg2UzRSVPN9ZOX3747b/ovWtfLvZ3uyWjplaZ5Tky1RWCuBBUFJZEKGYyeBUTCXJAQgbGciUo2JbBIJ2wBONVTSrJOpN1LllFLQSxKnm+VemWNFOjil+n4HTm6EA5ug7YD76XZFmn3NaRBV4DWoSxYI5Ab8zUucltR/gRMZY3HVlSXBVzVckrkuxJBJUFevTHr714vKiAIxTFrNXr5UAhjGkMpqBK2NGxDogjKZDAth/4ihUUQPDKnqubiGLFBzJkDD2LAMUQhRVC2hOSB9CBz9cl1FEURyIQAxkl4Fnu/lNuN/deyNk06ZNRJlZEgo6mCeVPwfwVKmMqWJJ4PNp6WdOMBVFQISeGg3QyimdW4lEfL86YYjTru4XHMMisAMk+vjcdgOy126Wap2BQ/L5VUkyuNea32hDVfr6cV6g7l/dh8wk6uVPRVa6yshWoCsZAENH1d1KCou35uiabSsnyNYVgxasX2+02FDSwnzJAWpnBU3pl5yTGGLSIN+dQBSz76DthaDeXj72+3HR84A3stGWtudn9rN8t+LausnxBK3pBszq5sn0L8I3uchF4oVsvDY4n0fB+73Nzm01NbjsYM8V3GpX7ji+17DAMhlFybFiquyEIcMThQVk7sXUlrTbCfFEr5Jmq20GYe5mjv0m+ClrYyb0p9xLsh8da8WgyCOjBBQKvb6JRMoaKFtwZrqM69WFD8NJyRr7Aj8sCnMDn4202DEFEg2T3Qh9Esti8KAzA65PM6bA7EWzQNk6Gv2xkcGCEriPYTzHaWIwMGBYlP2dkEU2NREDcYhA/GxA2c4iuNBbq9YUGOjM97xv18i0nTz7gurdubUuUMZEWqoslOQ/54zgyoAMlNZF4XKLd6scd63UnT14y8s9bqhYgIFevGog471iWhbQo9Q6MaE5mRDFuGCGSMPI936kdPWpLfumr/6eNc6cqfhE6MNlxcS2o1w/V6+H0tP8ho/yad1+QxtKdj7zZAdgD0OCWBGRZ7Oo6gCuEGwJAk6vynVTjNMNI4j505bw0phcfeUNAyUJl08NUpyY8SmSvN9fAlTXoBXJkZkcLVJGjAher/E6mgngRUTt51yUf5y89suRLOlqobggrzMCQ0BxlZsrAAP7yy72Akmca8R/Ic7lbcrfnLoFGjERpNorGAzhO1pGQ+CzT+lk6TnduWEOwXUO/BUfWQxnviRcJsLOiFoCe2ygveHEUtxg9uPhvdOfp1dXTdz6DsEF0hHtJr2TaADGI2hw9f3ZvdXXv7Bch3AF3CPZqgR8cGmBkSiZCf9de7bRX4v23wbmz0vn27vnX7p26/TUXj2NeUZqlVleSHKVqGYZiHnIZOnb+8plTp+65uMvyI0e1TaflSRKRlpJarDZhC95a67RX4055egIXKJkf/oV8C3RyPhfmyrl6LoI6tpdbhFoWVIADpWJzMBk7oziifnP8yi+KnCF5xfcb+XI5jy+I47X/IM9fW73x3d8/cuTdB/9kC6rdL7mlkos33NIDu7vvPvjHj15bIV+98Z3V1t8l9+aaQiUFoob2mwfnMRSw03p6GcB12PTJHwCCFfevIzI97//74pn+008vnllENv5+e9j+dnvUvoJGF0fDfxuNLg6v3Kjf/56swsqFEkNh6jRTgektobk92GNAA4BwAPkMk9Fnzz/+ptrH9t/ymLcy/6sP3T/X7fW6rlsKCt7q9vbqxt4Jsrr51t2n93d+7+LK3MLC3Pz9b3mg645cz1t94hMfWl2v127wyUvkKkTjPIwMVQoJeZS2DgrgKV9AuM2K3RmxDBP8RVTY/+GPvvCFZ+6+I9ntDav1vOWcObZ+1+Th463V+NBQV2XbKgbN/Pzd6K/3f4iOQk+Jh5XJ2p+fu+uN5VCWnsFEM4a9+I5K0dAIfrWYSjapj5NPwMyyuqmTdNBBEOeHToR+9hforv2frJxZgf/mu971k2vS/tU5CO3VVfzT/e6NNX2efAmsLUzXlE+TKGwdVEMH7Dgc/+IyOX4UDfdfPPXiiy/e9/6dB4+dWxq4ruX0F04dvrzxyOl4a365UvN04/Dq4vHepfvQq/a/hhH0pXKxtrH9K3ffc3l7o1aSpRexpFmV6qWF/qqpS/j1szltkH+8MSdQmAd+FpXTjJVveHr2omCYoB8guv+zTz311Kcu3NPfG2w027ph6O3mxmCvf89auV9rd2XO5W671i+vXcBf3792AbpSpdq66ehDb3jDG48diSoKfYowx7vjyM7h3Tt8h5LzMz/hH5EvAn9VBXcduNmfRhtPSCcRQmEEHkKnJyfH45OTJ7Zb7Sja3D6PGttnF5ebjbfgXDwe743H6PHHRyf2PnnylvHp/R/7p49evu/hV52//X0H71i+R34z9zu5D+Qez304968wWhCyA20yyhgpewGSfQDZBKfB6g8Eh3BEBnRwWEetZagyUnE8KC2n9e+ET2ZNAgSnrziX4ylsTl/pHAiaSZINDAdwfDbw0tBPlpaHyGvlW/wXcFc8O2vDWXkNpoLsBQybQW72uhRgmNXwy0+QNugZT697UKJpgeR2WvWt918Zr7SqhoOIFEDlqclYpwqTKfPNktrrdcbFhiuhb3UxRVrYajFHsXRLlVVGxTtnoCSlaDAFJHWeSViIYigTLRcZyPcZsy1J86hq6AqlpOjnPaApZrHfAP66/gL6qWlt3V8uy2yrvzTuHXVcTnv1VrvcV6GOqC4USrYC9QQ1CfHisL4WS8xzj/cmg6UdENQYxHjewBqVb13fIufSnWrdjULdc4pr83LS7xYHzbi7sD3qpis1mZcbt1ddj1LEqWy4jq/BZGUyq0gEm4LIpormmiXT1AhSDcUvnujaQdNXiroCqtsyZJtUbSJjT8ZEDsrMqRshlwzZZDcVgkavFPqufx2hfag97sDyue3dWzYuF0sKX1/oD+Z2bJuzbrXeKnXzXC6aLQc0tF9abBDa2OwsH5pfY7xaeWC7N68FNpUdbWXl9GNJ95dxWLywTJxmIvZ8IN5leBAxIJVAMGfvNeGDh+cef3PtY+i3HvPT3gMP35/Mw5/rlv2Ct7a1tbb+/8Ph/wVHej4HAHicY2BkYGAA4j/vrl6P57f5ysDN/AIownB19vVaZJr5IfMDIMXBwATiAQCg2g2HAHicY2BkYGB+wcAAJx8yMDKgAjEARMsC03icY2BgYGB+QX0MAD2xE0gAAAAAAGIBoAHUAjwDaAOIBLYGlAdaCHoI/glOCYAJvAoECiYKcAq6Cu4MRAyAAAB4nGNgZGBgEGMMZeBkAAEmIOYCQgaG/2A+AwAT0gGMAHicXY69TsMwFIVP+odoEAIhMZulC1LSduwDtDMduqeJ0x8lceS4VSsxM/MUzDwFz8WJeyUqbOn6O+ceXxvAA34QoF0B+r62q4Mbqgt3SXfCPfKjcB8hnoUHVC/CQ7xiJBziCW+cEPRu6QyRCXdwj0q4S/9duEf+EO5z+qfwgP6X8BArfAuHGAWD0y411VJvDkViPfuy0rbZmUpNorHXC11pmzidqfVZNcfN1Llc5daUam4qp4vCqNqavU5dtHWunsVxLn6UmhIn7JDC8NdLaGxwQIEE9sr/oxUTFg11qxQmiDC+6i/Yr3wmgeOZMbPGmbXBkbOndB1y6pwZg5I09zfbdMFt6NS+t6eT0o+w9bdqzBBz5//ykX+7/AVV81OKAHicbYzHDsIwFAS9IQ1C6OX7iG0Skxc/ywWJv6eJG3Oa1UgrMvFlIf5zQoYZchQoUaHGHAs0WKLFCmtssMUOexxwxAlnUXbEcgyzLvW5HIxrJHFSyRFfVCGZ2DeSp+liFRmr62uyMhq2RU/c6ewWqjHoycVHOYZrIppPRnp+H+WOXpdeK65D1M7YyO1PyPRDrN6LU/xkvmvf/uSTy5h8JJ0nq1iIJwkEPv4AAAA=) format("woff"); } .xicon { diff --git a/public/pxt/main.js b/public/pxt/main.js index f2ee1d5..42feca3 100644 --- a/public/pxt/main.js +++ b/public/pxt/main.js @@ -24333,7 +24333,7 @@ module.exports={ "_resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.2.tgz", "_shasum": "b321d3071f0e75c2dfaf2f0fe8864e5b9a387bc9", "_spec": "levelup@1.3.2", - "_where": "D:\\repos\\pxt\\node_modules\\pouchdb", + "_where": "C:\\Users\\thero\\hackathon2017\\pxt\\node_modules\\pouchdb", "browser": { "leveldown": false, "leveldown/package": false, diff --git a/public/pxt/release.manifest b/public/pxt/release.manifest index e2b8c76..7c05dbd 100644 --- a/public/pxt/release.manifest +++ b/public/pxt/release.manifest @@ -52,7 +52,7 @@ https://az416426.vo.msecnd.net/scripts/a/ai.0.js /pxt/worker.js /pxt/monacoworker.js -# ver Thu Jul 20 2017 17:13:08 GMT-0700 (Pacific Daylight Time) +# ver Mon Jul 24 2017 12:59:45 GMT-0700 (Pacific Daylight Time) /pxt/target.js diff --git a/public/pxt/sim.js b/public/pxt/sim.js index e90c16b..8092e1c 100644 --- a/public/pxt/sim.js +++ b/public/pxt/sim.js @@ -243,6 +243,16 @@ var pxsim; function onSharedVariableChangeImpl(name, body) { } Data.onSharedVariableChangeImpl = onSharedVariableChangeImpl; + //% + function joinImpl(arrayToBeJoined, joinString) { + return ""; + } + Data.joinImpl = joinImpl; + //% + function splitImpl(stringToSplit, splitValue) { + return []; + } + Data.splitImpl = splitImpl; })(Data = pxsim.Data || (pxsim.Data = {})); })(pxsim || (pxsim = {})); (function (pxsim) { @@ -274,9 +284,11 @@ var pxsim; // leave this blank or return null if the block returns a value } Sensors.fooImpl = fooImpl; - function listNearbyDevices() { + //% + function getNearbyDevicesImpl() { + return []; } - Sensors.listNearbyDevices = listNearbyDevices; + Sensors.getNearbyDevicesImpl = getNearbyDevicesImpl; })(Sensors = pxsim.Sensors || (pxsim.Sensors = {})); })(pxsim || (pxsim = {})); /// diff --git a/public/pxt/target.js b/public/pxt/target.js index 186ec25..024bd77 100644 --- a/public/pxt/target.js +++ b/public/pxt/target.js @@ -530,12 +530,12 @@ var pxtTargetBundle = { "bundledpkgs": { "core": { "README.md": "# basic\n\nAdd your docs here...", - "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n}", + "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: any[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", - "sensors.ts": "//% color=#7fff00 weight=100\r\nnamespace Sensors { \r\n /**\r\n * This is the help text for the Foo block\r\n * @param arg help text for arg goes here\r\n **/\r\n //% weight=100\r\n //% color=#935BA5\r\n //% blockId=sensors_foo\r\n //% block=\"Foo arg %arg\"\r\n //% subcategory=Bluetooth\r\n export function foo(arg: string) {\r\n fooImpl(arg);\r\n } \r\n\r\n export function listNearbyDevices() {\r\n listNearbyDevicesImpl();\r\n }\r\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n}", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: any[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/public/pxt/target.json b/public/pxt/target.json index 2c1627b..2e45fe3 100644 --- a/public/pxt/target.json +++ b/public/pxt/target.json @@ -530,12 +530,12 @@ "bundledpkgs": { "core": { "README.md": "# basic\n\nAdd your docs here...", - "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n}", + "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: any[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", - "sensors.ts": "//% color=#7fff00 weight=100\r\nnamespace Sensors { \r\n /**\r\n * This is the help text for the Foo block\r\n * @param arg help text for arg goes here\r\n **/\r\n //% weight=100\r\n //% color=#935BA5\r\n //% blockId=sensors_foo\r\n //% block=\"Foo arg %arg\"\r\n //% subcategory=Bluetooth\r\n export function foo(arg: string) {\r\n fooImpl(arg);\r\n } \r\n\r\n export function listNearbyDevices() {\r\n listNearbyDevicesImpl();\r\n }\r\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n}", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: any[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", From 4b7647f530c3158d383d4ab5a0c1e1b20dc16d1d Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 15:59:07 -0700 Subject: [PATCH 05/11] Fixing unsupported type from any[] to string[] --- libs/core/data.ts | 2 +- libs/core/sims.d.ts | 2 +- sim/api.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/core/data.ts b/libs/core/data.ts index 2a7bb17..0f14a50 100644 --- a/libs/core/data.ts +++ b/libs/core/data.ts @@ -115,7 +115,7 @@ namespace Data { //% blockId=data_array_join //% block="Join %list |with %joinString" //% subcategory="String Manipulation" - export function joinArray(list: any[], joinString: string = ""): string { + export function joinArray(list: string[], joinString: string = ""): string { if (list === undefined || list.length == 0) return ""; else diff --git a/libs/core/sims.d.ts b/libs/core/sims.d.ts index 01362ed..5f0f90f 100644 --- a/libs/core/sims.d.ts +++ b/libs/core/sims.d.ts @@ -202,7 +202,7 @@ declare namespace Data { //% //% shim=Data::joinImpl - function joinImpl(arrayToBeJoined: any[], joinString: string): string; + function joinImpl(arrayToBeJoined: string[], joinString: string): string; //% //% shim=Data::splitImpl diff --git a/sim/api.ts b/sim/api.ts index db37c40..4ac866b 100644 --- a/sim/api.ts +++ b/sim/api.ts @@ -289,7 +289,7 @@ namespace pxsim.Data { } //% - export function joinImpl(arrayToBeJoined: any[], joinString: string): string { + export function joinImpl(arrayToBeJoined: string[], joinString: string): string { return ""; } From 4b37cd43178b14d64e5a30d0156af510fedf2bf5 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 20:19:04 -0700 Subject: [PATCH 06/11] Added missing namespace declarations. --- client/shared/src/util/PxtExec.ts | 2 ++ client/web/src/pxt/Board.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/client/shared/src/util/PxtExec.ts b/client/shared/src/util/PxtExec.ts index 1d3d957..15379de 100644 --- a/client/shared/src/util/PxtExec.ts +++ b/client/shared/src/util/PxtExec.ts @@ -2,12 +2,14 @@ import * as uiApi from '../../../shared/src/util/uiApi'; import * as dataApi from '../../../shared/src/util/dataApi'; import * as styleApi from '../../../shared/src/util/styleApi'; import * as timeApi from '../../../shared/src/util/timeApi'; +import * as sensorsApi from '../../../shared/src/util/sensorsApi'; /// export namespace pxsim { export var UI = uiApi.pxsimui; export var Data = dataApi.pxsimdata; export var Style = styleApi.pxsimstyle; export var Time = timeApi.pxsimtime; + export var Sensors = sensorsApi.pxsimsensors; export interface SimulatorMessage { type: string; diff --git a/client/web/src/pxt/Board.ts b/client/web/src/pxt/Board.ts index bfb60b2..a34a406 100644 --- a/client/web/src/pxt/Board.ts +++ b/client/web/src/pxt/Board.ts @@ -3,6 +3,7 @@ import * as uiApi from '../../../shared/src/util/uiApi'; import * as dataApi from '../../../shared/src/util/dataApi'; import * as styleApi from '../../../shared/src/util/styleApi'; import * as timeApi from '../../../shared/src/util/timeApi'; +import * as sensorsApi from '../../../shared/src/util/sensorsApi'; import { CodegenRuntime } from '../../../shared/src/util/CodegenRuntime'; import { AppModel } from './AppModel'; @@ -13,6 +14,7 @@ hackPxsim.UI = uiApi.pxsimui; hackPxsim.Data = dataApi.pxsimdata; hackPxsim.Style = styleApi.pxsimstyle; hackPxsim.Time = timeApi.pxsimtime; +hackPxsim.Sensors = sensorsApi.pxsimsensors; // // end of brutal hack From 4517e5e6558147b2d01bdbb42b46499a939bb925 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 24 Jul 2017 21:02:53 -0700 Subject: [PATCH 07/11] BT pipeline functioning. Implementation incomplete. --- .vscode/settings.json | 3 +++ client/shared/src/util/dataApi.ts | 7 ++++--- client/shared/src/util/sensorsApi.ts | 9 ++++++++- public/pxt/release.manifest | 2 +- public/pxt/target.js | 4 ++-- public/pxt/target.json | 4 ++-- rebuild.bat | 6 ++++++ web.config | 16 ++++++++++++++++ 8 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..20af2f6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +// Place your settings in this file to overwrite default and user settings. +{ +} \ No newline at end of file diff --git a/client/shared/src/util/dataApi.ts b/client/shared/src/util/dataApi.ts index af9cbfc..764e9e6 100644 --- a/client/shared/src/util/dataApi.ts +++ b/client/shared/src/util/dataApi.ts @@ -64,13 +64,14 @@ export namespace pxsimdata { } } - export function joinImpl(arrayToBeJoined: any[], joinString: string): string { + export function joinImpl(arrayToBeJoined: pxsim.RefCollection, joinString: string): string { console.log('joinImpl called'); let s: string = ""; - for(var v in arrayToBeJoined) { - s += v.toString() + joinString; + //for(var v in arrayToBeJoined.) { + for(var i: number = 0; i < arrayToBeJoined.getLength(); i++) { + s += arrayToBeJoined.getAt(i) + joinString; } return s; diff --git a/client/shared/src/util/sensorsApi.ts b/client/shared/src/util/sensorsApi.ts index 8580055..dad3eae 100644 --- a/client/shared/src/util/sensorsApi.ts +++ b/client/shared/src/util/sensorsApi.ts @@ -13,6 +13,13 @@ export namespace pxsimsensors { // TODO: find nearby devices and return them as an array console.log('getNearbyDevicesImpl called'); - return ["device1", "device2"]; + //return ["device1", "device2"]; + //return null; + let retVal = CodegenRuntime.getCodegenHost().createRefCollection(); + //let retVal = new Array(); + retVal.push("device1"); + retVal.push("device2"); + + return retVal; } } \ No newline at end of file diff --git a/public/pxt/release.manifest b/public/pxt/release.manifest index 7c05dbd..15d11a4 100644 --- a/public/pxt/release.manifest +++ b/public/pxt/release.manifest @@ -52,7 +52,7 @@ https://az416426.vo.msecnd.net/scripts/a/ai.0.js /pxt/worker.js /pxt/monacoworker.js -# ver Mon Jul 24 2017 12:59:45 GMT-0700 (Pacific Daylight Time) +# ver Mon Jul 24 2017 20:35:29 GMT-0700 (Pacific Daylight Time) /pxt/target.js diff --git a/public/pxt/target.js b/public/pxt/target.js index 024bd77..60308c5 100644 --- a/public/pxt/target.js +++ b/public/pxt/target.js @@ -530,12 +530,12 @@ var pxtTargetBundle = { "bundledpkgs": { "core": { "README.md": "# basic\n\nAdd your docs here...", - "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: any[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", + "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: string[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: any[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: string[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/public/pxt/target.json b/public/pxt/target.json index 2e45fe3..493aefa 100644 --- a/public/pxt/target.json +++ b/public/pxt/target.json @@ -530,12 +530,12 @@ "bundledpkgs": { "core": { "README.md": "# basic\n\nAdd your docs here...", - "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: any[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", + "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: string[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: any[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: string[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/rebuild.bat b/rebuild.bat index a654d86..f2e5800 100644 --- a/rebuild.bat +++ b/rebuild.bat @@ -1,2 +1,8 @@ +REM kill open browser tabs +REM taskkill /IM microsoftedgecp.exe /FI "WINDOWTITLE eq *Blapp*PXT + +REM rebuild PXT call npm run build-pxt + +REM start web app call npm run start diff --git a/web.config b/web.config index a207bd0..bd49f1f 100644 --- a/web.config +++ b/web.config @@ -15,6 +15,10 @@ + + + + @@ -60,5 +64,17 @@ --> + + + + + + + + + + + +--> From e46aac913b7c8c5736f7d6edcdb8567ab7795aa1 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Tue, 25 Jul 2017 11:09:40 -0700 Subject: [PATCH 08/11] Slow BT progress --- client/mobile/android/app/build.gradle | 3 +- .../android/app/src/main/AndroidManifest.xml | 3 ++ .../main/java/com/mobile/MainApplication.java | 5 +++- client/mobile/android/settings.gradle | 5 ++++ client/mobile/package.json | 1 + client/shared/src/util/sensorsApi.ts | 10 +++++++ libs/core/data.ts | 2 +- libs/core/sensors.ts | 28 +++++++++++++++++-- libs/core/sims.d.ts | 8 ++++++ public/pxt/release.manifest | 2 +- public/pxt/sim.js | 9 ++++++ public/pxt/target.js | 6 ++-- public/pxt/target.json | 6 ++-- sim/api.ts | 10 +++++++ 14 files changed, 86 insertions(+), 12 deletions(-) diff --git a/client/mobile/android/app/build.gradle b/client/mobile/android/app/build.gradle index f116c71..973fbdf 100644 --- a/client/mobile/android/app/build.gradle +++ b/client/mobile/android/app/build.gradle @@ -88,7 +88,7 @@ android { defaultConfig { applicationId "com.mobile" - minSdkVersion 16 + minSdkVersion 18 targetSdkVersion 22 versionCode 1 versionName "1.0" @@ -140,6 +140,7 @@ dependencies { compile fileTree(dir: "libs", include: ["*.jar"]) compile "com.android.support:appcompat-v7:23.0.1" compile "com.facebook.react:react-native:+" // From node_modules + compile project(':react-native-ble-manager') // ble support } // Run this once to be able to run the application with BUCK diff --git a/client/mobile/android/app/src/main/AndroidManifest.xml b/client/mobile/android/app/src/main/AndroidManifest.xml index e5c0774..9f13da1 100644 --- a/client/mobile/android/app/src/main/AndroidManifest.xml +++ b/client/mobile/android/app/src/main/AndroidManifest.xml @@ -5,6 +5,9 @@ + + + getPackages() { return Arrays.asList( - new MainReactPackage() + new MainReactPackage(), + new BleManagerPackage() ); } }; diff --git a/client/mobile/android/settings.gradle b/client/mobile/android/settings.gradle index f336862..2cd85cc 100644 --- a/client/mobile/android/settings.gradle +++ b/client/mobile/android/settings.gradle @@ -1,3 +1,8 @@ rootProject.name = 'mobile' include ':app' + +// ble support +include ':react-native-ble-manager' +project(':react-native-ble-manager').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-ble-manager/android') +// end ble support diff --git a/client/mobile/package.json b/client/mobile/package.json index 547d5d1..da0641f 100644 --- a/client/mobile/package.json +++ b/client/mobile/package.json @@ -13,6 +13,7 @@ "dependencies": { "react": "16.0.0-alpha.6", "react-native": "0.43.3", + "react-native-ble-manager": "^5.1.1", "socket.io-client": "^1.7.3" }, "devDependencies": { diff --git a/client/shared/src/util/sensorsApi.ts b/client/shared/src/util/sensorsApi.ts index dad3eae..51f2b3a 100644 --- a/client/shared/src/util/sensorsApi.ts +++ b/client/shared/src/util/sensorsApi.ts @@ -2,6 +2,7 @@ /// import { CodegenRuntime } from './CodegenRuntime'; +//import BleManager from 'react-native-ble-manager'; export namespace pxsimsensors { export function fooImpl(arg:string): void { @@ -22,4 +23,13 @@ export namespace pxsimsensors { return retVal; } + + export function getBluetoothStatusImpl(): boolean { + // TODO: implement + return false; + } + + export function toggleBlueToothStatusImpl(): void { + // TODO: implement + } } \ No newline at end of file diff --git a/libs/core/data.ts b/libs/core/data.ts index 0f14a50..2f31aff 100644 --- a/libs/core/data.ts +++ b/libs/core/data.ts @@ -99,7 +99,7 @@ namespace Data { */ //% weight=20 //% blockId=convert_number_to_text - //% block="To text %value" + //% block="Number To text %value" //% subcategory="String Manipulation" export function convertNumberToText(value: number): string { if (value === undefined) diff --git a/libs/core/sensors.ts b/libs/core/sensors.ts index 7d8cf49..bd51f72 100644 --- a/libs/core/sensors.ts +++ b/libs/core/sensors.ts @@ -5,7 +5,7 @@ namespace Sensors { * @param arg help text for arg goes here **/ //% weight=100 - //% color=#935BA5 + //% color=#7fff00 //% blockId=sensors_foo //% block="Foo arg %arg" //% subcategory=Bluetooth @@ -17,11 +17,35 @@ namespace Sensors { * Returns an array of all nearby bluetooth devices **/ //% weight=100 - //% color=#935BA5 + //% color=#7fff00 //% blockId=sensors_listNearbyDevices //% block="ListNearbyDevices" //% subcategory=Bluetooth export function getNearbyDevices(): string[] { return getNearbyDevicesImpl(); } + + /** + * returns true or false depending on whether or not bluetooth is turned On or not + **/ + //% weight=100 + //% color=#7fff00 + //% blockId=sensors_getBluetoothStatus + //% block="IsBluetoothTurnedOn" + //% subcategory=Bluetooth + export function getBluetoothStatus(): boolean { + return getBluetoothStatusImpl(); + } + + /** + * toggles BT status + **/ + //% weight=100 + //% color=#7fff00 + //% blockId=sensors_toggleBlueToothStatus + //% block="ToggleBluetoothOnOrOff" + //% subcategory=Bluetooth + export function toggleBlueToothStatus(): void { + toggleBlueToothStatusImpl(); + } } \ No newline at end of file diff --git a/libs/core/sims.d.ts b/libs/core/sims.d.ts index 5f0f90f..ab2548e 100644 --- a/libs/core/sims.d.ts +++ b/libs/core/sims.d.ts @@ -236,6 +236,14 @@ declare namespace Sensors { //% shim=Sensors::getNearbyDevicesImpl function getNearbyDevicesImpl(): string[]; + //% + //% shim=Sensors::getBluetoothStatusImpl + function getBluetoothStatusImpl(): boolean; + + //% + //% shim=Sensors::toggleBlueToothStatusImpl + function toggleBlueToothStatusImpl(): void; + } // Auto-generated. Do not edit. Really. diff --git a/public/pxt/release.manifest b/public/pxt/release.manifest index 15d11a4..3d0185b 100644 --- a/public/pxt/release.manifest +++ b/public/pxt/release.manifest @@ -52,7 +52,7 @@ https://az416426.vo.msecnd.net/scripts/a/ai.0.js /pxt/worker.js /pxt/monacoworker.js -# ver Mon Jul 24 2017 20:35:29 GMT-0700 (Pacific Daylight Time) +# ver Tue Jul 25 2017 10:41:16 GMT-0700 (Pacific Daylight Time) /pxt/target.js diff --git a/public/pxt/sim.js b/public/pxt/sim.js index 8092e1c..80a5180 100644 --- a/public/pxt/sim.js +++ b/public/pxt/sim.js @@ -289,6 +289,15 @@ var pxsim; return []; } Sensors.getNearbyDevicesImpl = getNearbyDevicesImpl; + //% + function getBluetoothStatusImpl() { + return false; + } + Sensors.getBluetoothStatusImpl = getBluetoothStatusImpl; + //% + function toggleBlueToothStatusImpl() { + } + Sensors.toggleBlueToothStatusImpl = toggleBlueToothStatusImpl; })(Sensors = pxsim.Sensors || (pxsim.Sensors = {})); })(pxsim || (pxsim = {})); /// diff --git a/public/pxt/target.js b/public/pxt/target.js index 60308c5..15dbd74 100644 --- a/public/pxt/target.js +++ b/public/pxt/target.js @@ -530,12 +530,12 @@ var pxtTargetBundle = { "bundledpkgs": { "core": { "README.md": "# basic\n\nAdd your docs here...", - "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: string[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", + "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"Number To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: string[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", - "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: string[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n\n /**\n * returns true or false depending on whether or not bluetooth is turned On or not\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_getBluetoothStatus\n //% block=\"IsBluetoothTurnedOn\"\n //% subcategory=Bluetooth\n export function getBluetoothStatus(): boolean {\n return getBluetoothStatusImpl();\n }\n\n /**\n * toggles BT status\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_toggleBlueToothStatus\n //% block=\"ToggleBluetoothOnOrOff\"\n //% subcategory=Bluetooth\n export function toggleBlueToothStatus(): void {\n toggleBlueToothStatusImpl();\n }\n}", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: string[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n //%\n //% shim=Sensors::getBluetoothStatusImpl\n function getBluetoothStatusImpl(): boolean;\n\n //%\n //% shim=Sensors::toggleBlueToothStatusImpl\n function toggleBlueToothStatusImpl(): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/public/pxt/target.json b/public/pxt/target.json index 493aefa..4b8c49e 100644 --- a/public/pxt/target.json +++ b/public/pxt/target.json @@ -530,12 +530,12 @@ "bundledpkgs": { "core": { "README.md": "# basic\n\nAdd your docs here...", - "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: string[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", + "data.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=80\nnamespace Data {\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_string\n //% block=\"shared string %name\"\n export function getSharedString(name: string): string {\n return getSharedStringImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_number\n //% block=\"shared number %name\"\n export function getSharedNumber(name: string): number {\n return getSharedNumberImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_boolean\n //% block=\"shared true/false value %name\"\n export function getSharedBoolean(name: string): boolean {\n return getSharedBooleanImpl(name);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=get_shared_list\n //% block=\"shared list %name\"\n export function getSharedList(name: string): string[] {\n return getSharedListImpl(name);\n }\n\n /**\n * set the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_string\n //% block=\"set shared string %name|to %v\"\n export function setSharedString(name: string, v: string): void {\n return setSharedStringImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_number\n //% block=\"set shared number %name|to %v\"\n export function setSharedNumber(name: string, v: number): void {\n return setSharedNumberImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_boolean\n //% block=\"set shared true/false value %name|to %v\"\n export function setSharedBoolean(name: string, v: boolean): void {\n return setSharedBooleanImpl(name, v);\n }\n\n /**\n * get the current value of a shared variable\n */\n //% weight=50\n //% blockId=set_shared_list\n //% block=\"set shared list %name|to %v\"\n //% acceptArrays=true\n export function setSharedList(name: string, v: string[]): void {\n return setSharedListImpl(name, v);\n }\n\n /**\n * when the UI is updated, execute some code\n **/\n //% weight=30\n //% blockId=on_shared_change\n //% block=\"When shared %name|changes\"\n export function onSharedVariableChange(name: string, body: Action): void {\n onSharedVariableChangeImpl(name, body);\n }\n\n /**\n * convert number to text\n */\n //% weight=20\n //% blockId=convert_number_to_text\n //% block=\"Number To text %value\"\n //% subcategory=\"String Manipulation\"\n export function convertNumberToText(value: number): string {\n if (value === undefined)\n return null;\n else\n return value.toString();\n }\n\n /**\n * joins an array into a joined string\n */\n //% weight=20\n //% blockId=data_array_join\n //% block=\"Join %list |with %joinString\"\n //% subcategory=\"String Manipulation\"\n export function joinArray(list: string[], joinString: string = \"\"): string {\n if (list === undefined || list.length == 0)\n return \"\";\n else\n return joinImpl(list, joinString);\n }\n\n /**\n * splits a string\n */\n //% weight=20\n //% blockId=data_split_string\n //% block=\"Split %value |with %splitValue\"\n //% subcategory=\"String Manipulation\"\n export function split(value: string, splitValue: string): string[] {\n if (value === undefined || splitValue === undefined || splitValue.length == 0)\n return null;\n else\n return splitImpl(value, splitValue);\n }\n\n}", "pxt-core.d.ts": "/// \n\ninterface Array {\n /**\n * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n //% shim=Array_::length weight=84\n //% blockId=\"lists_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"arrays\"\n length: number;\n\n /**\n * Appends new elements to an array.\n * @param items New elements of the Array.\n */\n //% help=arrays/push\n //% shim=Array_::push weight=49\n //% blockId=\"array_push\" block=\"%list| add value %value| to end\" blockNamespace=\"arrays\"\n push(item: T): void;\n\n /**\n * Removes the last element from an array and returns it.\n */\n //% help=arrays/pop\n //% shim=Array_::pop weight=48\n //% blockId=\"array_pop\" block=\"get and remove last value from %list\" blockNamespace=\"arrays\"\n pop(): T;\n\n /**\n * Reverses the elements in an Array. The first array element becomes the last, and the last array element becomes the first.\n */\n //% help=arrays/reverse\n //% helper=arrayReverse weight=10 advanced=true\n //% blockId=\"array_reverse\" block=\"reverse %list\" blockNamespace=\"arrays\"\n reverse(): void;\n\n /**\n * Removes the first element from an array and returns that element. This method changes the length of the array.\n */\n //% help=arrays/shift\n //% helper=arrayShift weight=70 advanced=true\n //% blockId=\"array_shift\" block=\"get and remove first value from %list\" blockNamespace=\"arrays\"\n shift(): T;\n\n /**\n * Adds one element to the beginning of an array and returns the new length of the array.\n * @param element to insert at the start of the Array.\n */\n //% help=arrays/unshift\n //% helper=arrayUnshift weight=69 advanced=true\n //% blockId=\"array_unshift\" block=\"%list| insert %value| at beginning\" blockNamespace=\"arrays\"\n //unshift(...values:T[]): number; //rest is not supported in our compiler yet.\n unshift(value: T): number;\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array. eg: 0\n * @param end The end of the specified portion of the array. eg: 0\n */\n //% help=arrays/slice\n //% helper=arraySlice weight=41 advanced=true blockNamespace=\"arrays\"\n slice(start: number, end: number): T[];\n\n /**\n * Removes elements from an array.\n * @param start The zero-based location in the array from which to start removing elements. eg: 0\n * @param deleteCount The number of elements to remove. eg: 0\n */\n //% helper=arraySplice weight=40\n splice(start: number, deleteCount: number): void;\n\n /**\n * Sorts the elements of an array in place and returns the array. The sort is not necessarily stable.\n * @param specifies a function that defines the sort order. If omitted, the array is sorted according to the prmitive type\n */\n //% helper=arraySort weight=40\n sort(callbackfn?: (value1: T, value2: T) => number): T[];\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayMap weight=40\n map(callbackfn: (value: T, index: number) => U): U[];\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.\n */\n //% helper=arrayFilter weight=40\n filter(callbackfn: (value: T, index: number) => boolean): T[];\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n //% helper=arrayReduce weight=40\n reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U;\n\n\n /** Removes the first occurence of an object. Returns true if removed. */\n //% shim=Array_::removeElement weight=48\n removeElement(element: T): boolean;\n\n /** Removes the object at position index. */\n //% help=arrays/removeat\n //% shim=Array_::removeAt weight=49 advanced=true\n //% blockId=\"array_removeat\" block=\"%list| remove value at %index\" blockNamespace=\"arrays\"\n removeAt(index: number): T;\n\n /**\n * Insert the value at a particular index, increases length by 1\n * @param index the zero-based position in the list to insert the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/insertat\n //% shim=Array_::insertAt weight=84 advanced=true\n //% blockId=\"array_insertAt\" block=\"%list| insert at %index| value %value\" blockNamespace=\"arrays\"\n insertAt(index: number, value: T): void;\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param item The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n //% help=arrays/indexof\n //% shim=Array_::indexOf weight=50 advanced=true\n //% blockId=\"array_indexof\" block=\"%list| find index of %value\" blockNamespace=\"arrays\"\n indexOf(item: T, fromIndex?: number): number;\n\n /**\n * Gets the value at a particular index\n * @param index the zero-based position in the list of the item, eg: 0\n */\n //% help=arrays/get\n //% shim=Array_::getAt weight=85\n get(index: number): T;\n\n /**\n * Stores the value at a particular index\n * @param index the zero-based position in the list to store the value, eg: 0\n * @param the value to insert, eg: 0\n */\n //% help=arrays/set\n //% shim=Array_::setAt weight=84\n set(index: number, value: T): void;\n\n [n: number]: T;\n}\n\ndeclare interface String {\n // This block is currently disabled in favor of the built-in Blockly \"Create text with\" block, which compiles to \"\" + \"\"\n // Add % sign back to the block annotation to re-enable\n /**\n * Returns a string that contains the concatenation of two or more strings.\n * @param other The string to append to the end of the string.\n */\n //% shim=String_::concat weight=49\n //% blockId=\"string_concat\" blockNamespace=\"text\"\n // block=\"join %list=text|%other\"\n concat(other: string): string;\n\n /**\n * Returns the character at the specified index.\n * @param index The zero-based index of the desired character.\n */\n //% shim=String_::charAt weight=48\n //% blockId=\"string_get\" block=\"char from %this=text|at %pos\" blockNamespace=\"text\"\n charAt(index: number): string;\n\n /** Returns the length of a String object. */\n //% property shim=String_::length weight=47\n //% blockId=\"text_length\" block=\"length of %VALUE\" blockBuiltin=true blockNamespace=\"text\"\n length: number;\n\n /**\n * Returns the Unicode value of the character at the specified location.\n * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n */\n //% shim=String_::charCodeAt\n charCodeAt(index: number): number;\n\n /**\n * Determines whether relative order of two strings (in ASCII encoding).\n * @param that String to compare to target string\n */\n //% shim=String_::compare\n //% blockId=\"string_compare\" block=\"compare %this=text| to %that\" blockNamespace=\"text\"\n compare(that: string): number;\n\n /**\n * Return substring of the current string.\n * @param start first character index; can be negative from counting from the end, eg:0\n * @param length number of characters to extract\n */\n //% shim=String_::substr length.defl=1000000\n //% blockId=\"string_substr\" block=\"substring of %this=text|from %start|of length %length\" blockNamespace=\"text\"\n substr(start: number, length?: number): string;\n\n // This block is currently disabled, as it does not compile in some targets\n // Add % sign back to the block annotation to re-enable\n /** Returns a value indicating if the string is empty */\n //% shim=String_::isEmpty\n //% blockId=\"string_isempty\" blockNamespace=\"text\"\n // block=\"%this=text| is empty\"\n isEmpty(): boolean;\n\n [index: number]: string;\n}\n\n/**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n */\n//% shim=String_::toNumber\n//% blockId=\"string_parseint\" block=\"parse to integer %text\" blockNamespace=\"text\"\ndeclare function parseInt(text: string): number;\n\ninterface Object { }\ninterface Function { }\ninterface IArguments { }\ninterface RegExp { }\n\ntype uint8 = number;\ntype uint16 = number;\ntype uint32 = number;\ntype int8 = number;\ntype int16 = number;\ntype int32 = number;\n\n\ndeclare interface Boolean {\n /**\n * Returns a string representation of an object.\n */\n //% shim=Boolean_::toString\n toString(): string;\n}\n\ndeclare namespace String {\n\n /**\n * Make a string from the given ASCII character code.\n */\n //% help=math/string-from-char-code\n //% shim=String_::fromCharCode\n //% advanced=true\n //% blockNamespace=\"Math\" blockId=\"stringFromCharCode\" block=\"text from char code %code\" weight=1\n function fromCharCode(code: number): string;\n}\n\n\ndeclare interface Number {\n /**\n * Returns a string representation of a number.\n */\n //% shim=Number_::toString\n toString(): string;\n}\n\ndeclare namespace Math {\n /**\n * Returns the value of a base expression taken to a specified power.\n * @param x The base value of the expression.\n * @param y The exponent value of the expression.\n */\n //% shim=Math_::pow\n function pow(x: number, y: number): number;\n\n /**\n * Returns a pseudorandom number between 0 and 1.\n */\n //% shim=Math_::random\n //% helpUrl=\"/reference/math/random\"\n function random(): number;\n\n /**\n * Returns a pseudorandom number between min and max included. \n * If both numbers are integral, the result is integral.\n * @param min the lower inclusive bound, eg: 0\n * @param max the upper inclusive bound, eg: 10\n */\n //% blockId=\"device_random\" block=\"pick random %min|to %limit\"\n //% helpUrl=\"/reference/math/random-range\"\n //% shim=Math_::randomRange\n function randomRange(min: number, max: number): number;\n\n /**\n * Returns the natural logarithm (base e) of a number.\n * @param x A number\n */\n //% shim=Math_::log\n function log(x: number): number;\n\n /**\n * Returns returns ``e^x``.\n * @param x A number\n */\n //% shim=Math_::exp\n function exp(x: number): number;\n\n /**\n * Returns the sine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::sin\n function sin(x: number): number;\n\n /**\n * Returns the cosine of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::cos\n function cos(x: number): number;\n\n /**\n * Returns the tangent of a number.\n * @param x An angle in radians\n */\n //% shim=Math_::tan\n function tan(x: number): number;\n\n /**\n * Returns the arcsine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::asin\n function asin(x: number): number;\n\n /**\n * Returns the arccosine (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::acos\n function acos(x: number): number;\n\n /**\n * Returns the arctangent (in radians) of a number\n * @param x A number\n */\n //% shim=Math_::atan\n function atan(x: number): number;\n\n /**\n * Returns the arctangent of the quotient of its arguments.\n * @param y A number\n * @param x A number\n */\n //% shim=Math_::atan2\n function atan2(y: number, x: number): number;\n\n /**\n * Returns the square root of a number.\n * @param x A numeric expression.\n */\n //% shim=Math_::sqrt\n function sqrt(x: number): number;\n\n /**\n * Returns the smallest number greater than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::ceil\n function ceil(x: number): number;\n\n /**\n * Returns the greatest number less than or equal to its numeric argument.\n * @param x A numeric expression.\n */\n //% shim=Math_::floor\n function floor(x: number): number;\n\n /**\n * Returns the number with the decimal part truncated.\n * @param x A numeric expression.\n */\n //% shim=Math_::trunc\n function trunc(x: number): number;\n\n /**\n * Returns a supplied numeric expression rounded to the nearest number.\n * @param x The value to be rounded to the nearest number.\n */\n //% shim=Math_::round\n function round(x: number): number;\n\n /**\n * Returns the value of integer signed 32 bit multiplication of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::imul\n function imul(x: number, y: number): number;\n\n /**\n * Returns the value of integer signed 32 bit division of two numbers.\n * @param x The first number\n * @param y The second number\n */\n //% shim=Math_::idiv\n function idiv(x: number, y: number): number;\n}\n", "pxt-helpers.ts": "type Action = () => void;\n\nnamespace helpers {\n export function arraySplice(arr: T[], start: number, len: number) {\n if (start < 0) {\n return;\n }\n for (let i = 0; i < len; ++i) {\n arr.removeAt(start)\n }\n }\n\n export function arrayReverse(arr: T[]): void {\n let len = arr.length;\n for (let i = 0; i < len / 2; i++) {\n swap(arr, i, len - i - 1);\n }\n }\n\n export function arrayShift(arr: T[]): T {\n return arr.removeAt(0);\n }\n\n /*TODO: Enable this multiple value unshift, after rest is enabled in our compiler.\n export function arrayUnshift(arr: T[], ...values: T[]) : number {\n for(let i = values.length; i > 0; --i) {\n arr.insertAt(0, values[i - 1]);\n }\n return arr.length;\n }\n */\n export function arrayUnshift(arr: T[], value: T): number {\n arr.insertAt(0, value);\n return arr.length;\n }\n\n function swap(arr: T[], i: number, j: number): void {\n let temp: T = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n }\n\n function sortHelper(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (arr.length <= 0 || !callbackfn) {\n return arr;\n }\n let len = arr.length;\n // simple selection sort.\n for (let i = 0; i < len - 1; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (callbackfn(arr[i], arr[j]) > 0) {\n swap(arr, i, j);\n }\n }\n }\n return arr;\n }\n\n export function arraySort(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {\n if (!callbackfn) {\n //TODO: support native strings and number sorting\n /* callbackfn = function (value1: string, value2: string) : number {\n return value1.compare(value2);\n }*/\n }\n return sortHelper(arr, callbackfn);\n }\n\n export function arrayMap(arr: T[], callbackfn: (value: T, index: number) => U): U[] {\n let res: U[] = []\n let len = arr.length // caching this seems to match V8\n for (let i = 0; i < len; ++i) {\n res.push(callbackfn(arr[i], i))\n }\n return res\n }\n\n export function arrayFilter(arr: T[], callbackfn: (value: T, index: number) => boolean): T[] {\n let res: T[] = []\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n let v = arr[i] // need to cache\n if (callbackfn(v, i)) res.push(v)\n }\n return res\n }\n\n export function arrayReduce(arr: T[], callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U {\n let len = arr.length\n for (let i = 0; i < len; ++i) {\n initialValue = callbackfn(initialValue, arr[i], i)\n }\n return initialValue\n }\n\n export function arraySlice(arr: T[], start: number, end: number): T[] {\n const res: T[] = [];\n const len = arr.length;\n\n if (start < 0) {\n start = Math.max(len + start, 0);\n }\n\n if (end < 0) {\n end = len + end;\n }\n\n const sliceLength = end - start;\n\n for (let i = 0; i < sliceLength; ++i) {\n const index = i + start;\n if (index >= len) {\n break;\n }\n res.push(arr[index]);\n }\n return res;\n }\n}\n\nnamespace Math {\n export function clamp(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n * For example, the absolute value of -5 is the same as the absolute value of 5.\n * @param x A numeric expression for which the absolute value is needed.\n */\n export function abs(x: number): number {\n return x < 0 ? -x : x;\n }\n\n /**\n * Returns the sign of the x, indicating whether x is positive, negative or zero.\n * @param x The numeric expression to test\n */\n export function sign(x: number): number {\n if (x == 0) return 0;\n if (x > 0) return 1;\n return -1;\n }\n\n /**\n * Returns the larger of two supplied numeric expressions.\n */\n export function max(a: number, b: number): number {\n if (a >= b) return a;\n return b;\n }\n\n /**\n * Returns the smaller of two supplied numeric expressions.\n */\n export function min(a: number, b: number): number {\n if (a <= b) return a;\n return b;\n }\n}\n", "pxt.json": "{\n \"name\": \"core\",\n \"description\": \"PXT blapp\",\n \"files\": [\n \"README.md\",\n \"pxt-core.d.ts\",\n \"pxt-helpers.ts\",\n \"types.d.ts\",\n \"sims.d.ts\",\n \"ui.ts\",\n \"data.ts\",\n \"style.ts\",\n \"time.ts\",\n \"sensors.ts\"\n ],\n \"testFiles\": [\n \"test.ts\"\n ],\n \"public\": true,\n \"dependencies\": {}\n}", - "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#935BA5\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n}", - "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: string[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n}\n\n// Auto-generated. Do not edit. Really.\n", + "sensors.ts": "//% color=#7fff00 weight=100\nnamespace Sensors {\n /**\n * This is the help text for the Foo block\n * @param arg help text for arg goes here\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_foo\n //% block=\"Foo arg %arg\"\n //% subcategory=Bluetooth\n export function foo(arg: string) {\n fooImpl(arg);\n }\n\n /**\n * Returns an array of all nearby bluetooth devices\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_listNearbyDevices\n //% block=\"ListNearbyDevices\"\n //% subcategory=Bluetooth\n export function getNearbyDevices(): string[] {\n return getNearbyDevicesImpl();\n }\n\n /**\n * returns true or false depending on whether or not bluetooth is turned On or not\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_getBluetoothStatus\n //% block=\"IsBluetoothTurnedOn\"\n //% subcategory=Bluetooth\n export function getBluetoothStatus(): boolean {\n return getBluetoothStatusImpl();\n }\n\n /**\n * toggles BT status\n **/\n //% weight=100\n //% color=#7fff00\n //% blockId=sensors_toggleBlueToothStatus\n //% block=\"ToggleBluetoothOnOrOff\"\n //% subcategory=Bluetooth\n export function toggleBlueToothStatus(): void {\n toggleBlueToothStatusImpl();\n }\n}", + "sims.d.ts": "// Auto-generated from simulator. Do not edit.\ndeclare namespace UI {\n //%\n //% shim=UI::userInterfaceImpl\n function userInterfaceImpl(theme: UITheme, body: () => void): void;\n\n //%\n //% shim=UI::groupElementImpl\n function groupElementImpl(name: string, direction: UIGroupDirection, flex: boolean, className: UIGroupClass, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::scrollerElementImpl\n function scrollerElementImpl(name: string, flex: boolean, className: UIGroupClass, horz: boolean, style: string[], children: () => void): void;\n\n //%\n //% shim=UI::buttonElementImpl\n function buttonElementImpl(name: string, flex: boolean, className: UIButtonClass, style: string[], children: () => void, whenPressed: () => void): void;\n\n //%\n //% shim=UI::textElementImpl\n function textElementImpl(flex: boolean, className: UITextClass, style: string[], value: string): void;\n\n //%\n //% shim=UI::textInputElementImpl\n function textInputElementImpl(name: string, flex: boolean, className: UITextInputClass, style: string[], initialValue: string, whenTextChanges: (text: string) => void): void;\n\n //%\n //% shim=UI::imageElementImpl\n function imageElementImpl(flex: boolean, width: number, height: number, style: string[], url: string): void;\n\n //%\n //% shim=UI::dividerElementImpl\n function dividerElementImpl(className: UIDividerClass, style: string[]): void;\n\n //%\n //% shim=UI::updateUIImpl\n function updateUIImpl(): void;\n\n //%\n //% shim=UI::iconElementImpl\n function iconElementImpl(category: string, name: number, iconType: IconType, size: number, style: string[]): void;\n\n}\ndeclare namespace Style {\n //%\n //% shim=Style::stylePropAlignContentImpl\n function stylePropAlignContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropAlignItemsImpl\n function stylePropAlignItemsImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropAlignSelfImpl\n function stylePropAlignSelfImpl(v: StyAlignItems): string;\n\n //%\n //% shim=Style::stylePropFlexDirectionImpl\n function stylePropFlexDirectionImpl(v: StyFlexDirection): string;\n\n //%\n //% shim=Style::stylePropJustifyContentImpl\n function stylePropJustifyContentImpl(v: StyAlignContent): string;\n\n //%\n //% shim=Style::stylePropFlexWrapImpl\n function stylePropFlexWrapImpl(v: StyFlexWrap): string;\n\n //%\n //% shim=Style::stylePropPositionImpl\n function stylePropPositionImpl(v: StyPosition): string;\n\n //%\n //% shim=Style::stylePropOffsetImpl\n function stylePropOffsetImpl(v: StyOffsetType, p: number): string;\n\n //%\n //% shim=Style::stylePropAspectRatioImpl\n function stylePropAspectRatioImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropBackgroundColorImpl\n function stylePropBackgroundColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropBorderColorImpl\n function stylePropBorderColorImpl(p: StyBoxSide, v: string): string;\n\n //%\n //% shim=Style::stylePropBorderRadiusImpl\n function stylePropBorderRadiusImpl(p: StyBoxCorner, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderWidthImpl\n function stylePropBorderWidthImpl(p: StyBoxSide, v: number): string;\n\n //%\n //% shim=Style::stylePropBorderStyleImpl\n function stylePropBorderStyleImpl(v: StyBorderStyle): string;\n\n //%\n //% shim=Style::stylePropFlexValuesImpl\n function stylePropFlexValuesImpl(p: StyFlexType, v: number): string;\n\n //%\n //% shim=Style::stylePropSizeImpl\n function stylePropSizeImpl(p: StyPropSize, v: number): string;\n\n //%\n //% shim=Style::stylePropMarginImpl\n function stylePropMarginImpl(p: StyPropMargin, v: number): string;\n\n //%\n //% shim=Style::stylePropPaddingImpl\n function stylePropPaddingImpl(p: StyPropPadding, v: number): string;\n\n //%\n //% shim=Style::stylePropOverflowImpl\n function stylePropOverflowImpl(v: StyPropOverflow): string;\n\n //%\n //% shim=Style::stylePropOpacityImpl\n function stylePropOpacityImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropImageResizeModeImpl\n function stylePropImageResizeModeImpl(v: StyImageResizeMode): string;\n\n //%\n //% shim=Style::stylePropImageTintColorImpl\n function stylePropImageTintColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextColorImpl\n function stylePropTextColorImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontFamilyImpl\n function stylePropTextFontFamilyImpl(v: string): string;\n\n //%\n //% shim=Style::stylePropTextFontSizeImpl\n function stylePropTextFontSizeImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextFontStyleImpl\n function stylePropTextFontStyleImpl(v: StyTextFontStyle): string;\n\n //%\n //% shim=Style::stylePropTextFontWeightImpl\n function stylePropTextFontWeightImpl(v: StyTextFontWeight): string;\n\n //%\n //% shim=Style::stylePropTextLineHeightImpl\n function stylePropTextLineHeightImpl(v: number): string;\n\n //%\n //% shim=Style::stylePropTextAlignImpl\n function stylePropTextAlignImpl(v: StyTextAlign): string;\n\n //%\n //% shim=Style::stylePropTextDecorationLineImpl\n function stylePropTextDecorationLineImpl(v: StyTextDecorationLine): string;\n\n}\ndeclare namespace Data {\n //%\n //% shim=Data::getSharedStringImpl\n function getSharedStringImpl(name: string): string;\n\n //%\n //% shim=Data::getSharedNumberImpl\n function getSharedNumberImpl(name: string): number;\n\n //%\n //% shim=Data::getSharedBooleanImpl\n function getSharedBooleanImpl(name: string): boolean;\n\n //%\n //% shim=Data::getSharedListImpl\n function getSharedListImpl(name: string): string[];\n\n //%\n //% shim=Data::setSharedStringImpl\n function setSharedStringImpl(name: string, v: string): void;\n\n //%\n //% shim=Data::setSharedNumberImpl\n function setSharedNumberImpl(name: string, v: number): void;\n\n //%\n //% shim=Data::setSharedBooleanImpl\n function setSharedBooleanImpl(name: string, v: boolean): void;\n\n //%\n //% shim=Data::setSharedListImpl\n function setSharedListImpl(name: string, v: string[]): void;\n\n //%\n //% shim=Data::onSharedVariableChangeImpl\n function onSharedVariableChangeImpl(name: string, body: () => void): void;\n\n //%\n //% shim=Data::joinImpl\n function joinImpl(arrayToBeJoined: string[], joinString: string): string;\n\n //%\n //% shim=Data::splitImpl\n function splitImpl(stringToSplit: string, splitValue: string): string[];\n\n}\ndeclare namespace Time {\n //%\n //% shim=Time::afterTimeImpl\n function afterTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::everyTimeImpl\n function everyTimeImpl(ms: number, body: () => void): void;\n\n //%\n //% shim=Time::resetApplicationImpl\n function resetApplicationImpl(): void;\n\n //%\n //% shim=Time::whenAppResetImpl\n function whenAppResetImpl(body: () => void): void;\n\n}\ndeclare namespace Sensors {\n //%\n //% shim=Sensors::fooImpl\n function fooImpl(arg: string): void;\n\n //%\n //% shim=Sensors::getNearbyDevicesImpl\n function getNearbyDevicesImpl(): string[];\n\n //%\n //% shim=Sensors::getBluetoothStatusImpl\n function getBluetoothStatusImpl(): boolean;\n\n //%\n //% shim=Sensors::toggleBlueToothStatusImpl\n function toggleBlueToothStatusImpl(): void;\n\n}\n\n// Auto-generated. Do not edit. Really.\n", "style.ts": "\n/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Style {\n /**\n * align content\n */\n //% blockId=styleprop_aligncontent\n //% block=\"align content %v\"\n //% subcategory=Layout\n export function stylePropAlignContent(v: StyAlignContent): string {\n return stylePropAlignContentImpl(v);\n }\n\n //% blockId=styleprop_alignitems\n //% block=\"align items %v\"\n //% subcategory=Layout\n export function stylePropAlignItems(v: StyAlignItems): string {\n return stylePropAlignItemsImpl(v);\n }\n\n //% blockId=styleprop_alignself\n //% block=\"align self %v\"\n //% subcategory=Layout\n export function stylePropAlignSelf(v: StyAlignItems): string {\n return stylePropAlignSelfImpl(v);\n }\n\n //% blockId=styleprop_flexdirection\n //% block=\"flex direction %v\"\n //% subcategory=Layout\n export function stylePropFlexDirection(v: StyFlexDirection): string {\n return stylePropFlexDirectionImpl(v);\n }\n\n //% blockId=styleprop_justifycontent\n //% block=\"justify content %v\"\n //% subcategory=Layout\n export function stylePropJustifyContent(v: StyAlignContent): string {\n return stylePropJustifyContentImpl(v);\n }\n\n //% blockId=styleprop_flexwrap\n //% block=\"wrap content %v\"\n //% subcategory=Layout\n export function stylePropFlexWrap(v: StyFlexWrap): string {\n return stylePropFlexWrapImpl(v);\n }\n\n //% blockId=styleprop_position\n //% block=\"position %v\"\n //% subcategory=Layout\n export function stylePropPosition(v: StyPosition): string {\n return stylePropPositionImpl(v);\n }\n\n\n //% blockId=styleprop_offset\n //% block=\"offset %v|%p\"\n //% subcategory=Layout\n export function stylePropOffset(v: StyOffsetType, p: number): string {\n return stylePropOffsetImpl(v,p);\n }\n\n //% blockId=styleprop_aspectratio\n //% block=\"aspect ratio %v\"\n //% subcategory=Layout\n export function stylePropAspectRatio(v: number): string {\n return stylePropAspectRatioImpl(v);\n }\n\n //% blockId=styleprop_backgroundcolor\n //% block=\"background color %v\"\n //% subcategory=Color\n export function stylePropBackgroundColor(v: string): string {\n return stylePropBackgroundColorImpl(v);\n }\n\n // //% blockId=styleprop_generic'] = {\n // init: function () {\n // this.appendValueInput(\"VALUE\")\n // .setCheck(null)\n // .appendField(\"style property\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"align items\", \"alignItems\"],\n // [\"align self\", \"alignSelf\"],\n // [\"backface visibility\", \"backfaceVisibility\"],\n // [\"background color\", \"backgroundColor\"],\n // [\"border bottom color\", \"borderBottomColor\"],\n // [\"border bottom left radius\", \"borderBottomLeftRadius\"],\n // [\"border bottom right radius\", \"borderBottomRightRadius\"],\n // [\"border bottom width\", \"borderBottomWidth\"],\n // [\"border color\", \"borderColor\"],\n // [\"border left color\", \"borderLeftColor\"],\n // [\"border left width\", \"borderLeftWidth\"],\n // [\"border radius\", \"borderRadius\"],\n // [\"border right color\", \"borderRightColor\"],\n // [\"border right width\", \"borderRightWidth\"],\n // [\"border style\", \"borderStyle\"],\n // [\"border top color\", \"borderTopColor\"],\n // [\"border top left radius\", \"borderTopLeftRadius\"],\n // [\"border top right radius\", \"borderTopRightRadius\"],\n // [\"border top width\", \"borderTopWidth\"],\n // [\"border width\", \"borderWidth\"],\n // [\"direction\", \"direction\"],\n // [\"display\", \"display\"],\n // [\"flex\", \"flex\"],\n // [\"flex basis\", \"flexBasis\"],\n // [\"flex direction\", \"flexDirection\"],\n // [\"flex grow,\", \"flexGrow\"],\n // [\"flex shrink\", \"flexShrink\"],\n // [\"flex wrap\", \"flexWrap\"],\n // [\"height\", \"height\"],\n // [\"justify content\", \"justifyContent\"],\n // [\"left\", \"left\"],\n // [\"margin\", \"margin\"],\n // [\"margin bottom\", \"marginBottom\"],\n // [\"margin horizontal\", \"marginHorizontal\"],\n // [\"margin left\", \"marginLeft\"],\n // [\"margin right\", \"marginRight\"],\n // [\"margin top\", \"marginTop\"],\n // [\"margin vertical\", \"marginVertical\"],\n // [\"max height\", \"maxHeight\"],\n // [\"max width\", \"maxWidth\"],\n // [\"min height\", \"minHeight\"],\n // [\"min width\", \"minWidth\"],\n // [\"opacity\", \"opacity\"],\n // [\"overflow\", \"overflow\"],\n // [\"padding\", \"padding\"],\n // [\"padding bottom\", \"paddingBottom\"],\n // [\"padding horizontal\", \"paddingHorizontal\"],\n // [\"padding left\", \"paddingLeft\"],\n // [\"padding right\", \"paddingRight\"],\n // [\"padding top\", \"paddingTop\"],\n // [\"padding vertical\", \"paddingVertical\"],\n // [\"position\", \"position\"],\n // [\"right\", \"right\"],\n // [\"top\", \"top\"],\n // [\"width\", \"width\"]]), \"PROPNAME\");\n // this.setPreviousStatement(true, \"STYLEPROP\");\n // this.setNextStatement(true, \"STYLEPROP\");\n // this.setColour(230);\n // this.setTooltip('');\n // this.setHelpUrl('');\n // }\n // };\n\n //% blockId=styleprop_bordercolor\n //% block=\"border color %p|%v\"\n //% subcategory=Box\n export function stylePropBorderColor(p: StyBoxSide, v: string): string {\n return stylePropBorderColorImpl(p,v);\n }\n\n //% blockId=styleprop_borderradius\n //% block=\"border radius %p|%v\"\n //% subcategory=Box\n export function stylePropBorderRadius(p: StyBoxCorner, v: number): string {\n return stylePropBorderRadiusImpl(p,v);\n }\n\n //% blockId=styleprop_borderwidth\n //% block=\"border width %p|%v\"\n //% subcategory=Box\n export function stylePropBorderWidth(p: StyBoxSide, v: number): string {\n return stylePropBorderWidthImpl(p,v);\n }\n\n //% blockId=styleprop_borderstyle\n //% block=\"border style %v\"\n //% subcategory=Box\n export function stylePropBorderStyle(v: StyBorderStyle): string {\n return stylePropBorderStyleImpl(v);\n }\n\n //% blockId=styleprop_flexvalues\n //% block=\"flex %p|%v\"\n //% subcategory=Layout\n export function stylePropFlexValues(p: StyFlexType, v: number): string {\n return stylePropFlexValuesImpl(p,v);\n }\n\n //% blockId=styleprop_size\n //% block=\"size %p|%v\"\n //% subcategory=Layout\n export function stylePropSize(p: StyPropSize, v: number): string {\n return stylePropSizeImpl(p,v);\n }\n\n //% blockId=styleprop_margin\n //% block=\"margin %p|%v\"\n //% subcategory=Box\n export function stylePropMargin(p: StyPropMargin, v: number): string {\n return stylePropMarginImpl(p,v);\n }\n\n //% blockId=styleprop_padding\n //% block=\"padding %p|%v\"\n //% subcategory=Box\n export function stylePropPadding(p: StyPropPadding, v: number): string {\n return stylePropPaddingImpl(p,v);\n }\n\n //% blockId=styleprop_overflow\n //% block=\"overflow %v\"\n //% subcategory=Layout\n export function stylePropOverflow(v: StyPropOverflow): string {\n return stylePropOverflowImpl(v);\n }\n\n /**\n * \n * @param v [0-1] e.g. 1\n */\n //% blockId=styleprop_opacity\n //% block=\"opacity %v\"\n //% subcategory=Color\n export function stylePropOpacity(v: number): string {\n return stylePropOpacityImpl(v);\n }\n\n //% blockId=styleprop_image_resizemode\n //% block=\"resize mode %v\"\n //% subcategory=Image\n export function stylePropImageResizeMode(v: StyImageResizeMode): string {\n return stylePropImageResizeModeImpl(v);\n }\n\n //% blockId=styleprop_image_tintcolor\n //% block=\"tint color %v\"\n //% subcategory=Image\n export function stylePropImageTintColor(v: string): string {\n return stylePropImageTintColorImpl(v);\n }\n\n //% blockId=styleprop_text_color\n //% block=\"text color %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextColor(v: string): string {\n return stylePropTextColorImpl(v);\n }\n\n //% blockId=styleprop_text_fontfamily\n //% block=\"font family %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontFamily(v: string): string {\n return stylePropTextFontFamilyImpl(v);\n }\n\n /**\n * \n * @param v : [5-144] eg. 12\n */\n //% blockId=styleprop_text_fontsize\n //% block=\"font size %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontSize(v: number): string {\n return stylePropTextFontSizeImpl(v);\n }\n\n //% blockId=styleprop_text_fontstyle\n //% block=\"font style %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontStyle(v: StyTextFontStyle): string {\n return stylePropTextFontStyleImpl(v);\n }\n\n //% blockId=styleprop_text_fontweight\n //% block=\"font weight %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextFontWeight(v: StyTextFontWeight): string {\n return stylePropTextFontWeightImpl(v);\n }\n\n //% blockId=styleprop_text_lineheight\n //% block=\"line height %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextLineHeight(v: number): string {\n return stylePropTextLineHeightImpl(v);\n }\n\n //% blockId=styleprop_text_textalign\n //% block=\"alignment %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextAlign(v: StyTextAlign): string {\n return stylePropTextAlignImpl(v);\n }\n\n //% blockId=styleprop_text_textdecorationline\n //% block=\"decoration %v\"\n //% subcategory=\"Text styles\"\n export function stylePropTextDecorationLine(v: StyTextDecorationLine): string {\n return stylePropTextDecorationLineImpl(v);\n }\n\n}\n", "test.ts": "// let s = new Sprite()\n// s.forward(10)\n// let y = s.x\n", "time.ts": "/**\n * Basic functionalities.\n */\n//% color=#00BCD4 weight=90\nnamespace Time {\n /**\n * After a certain amount of time, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=90\n //% blockId=set_timeout\n //% block=\"After %ms|milliseconds\"\n //% handlerStmt=true\n export function afterTime(\n ms: number,\n body: ()=>void): void {\n afterTimeImpl(ms, body);\n }\n /**\n * Every so often, take some actions\n * @param ms number of milliseconds to wait before executing, eg: 500\n */\n //% weight=80\n //% blockId=set_interval\n //% block=\"Every %ms|milliseconds\"\n //% handlerStmt=true\n export function everyTime(\n ms: number,\n body: ()=>void): void {\n everyTimeImpl(ms, body);\n }\n\n /**\n * Cause the application to reset\n */\n //% weight=70\n //% blockId=reset_application\n //% block=\"Reset Application\"\n export function resetApplication(): void {\n resetApplicationImpl();\n }\n\n /**\n * When the application is reset, take some actions\n */\n //% weight=60\n //% blockId=when_application_reset\n //% block=\"When Application is Reset\"\n export function whenAppReset(body: ()=>void): void {\n whenAppResetImpl(body);\n }\n\n}", diff --git a/sim/api.ts b/sim/api.ts index 4ac866b..1bcb555 100644 --- a/sim/api.ts +++ b/sim/api.ts @@ -332,5 +332,15 @@ namespace pxsim.Sensors { export function getNearbyDevicesImpl(): string[] { return []; } + + //% + export function getBluetoothStatusImpl(): boolean { + return false; + } + + //% + export function toggleBlueToothStatusImpl(): void { + + } } From 6cf22d5ee7940edc305bc7300dd890889ff81677 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Wed, 26 Jul 2017 09:02:18 -0700 Subject: [PATCH 09/11] commented out additions that are NOT working --- web.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web.config b/web.config index bd49f1f..9368f25 100644 --- a/web.config +++ b/web.config @@ -15,10 +15,12 @@ + From 3989b1fc21ecb6e61c57d9bedf584ef97648d60d Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Wed, 26 Jul 2017 11:55:38 -0700 Subject: [PATCH 10/11] Scanning for BT devices working, connecting to BT device almost working. --- client/mobile/package-lock.json | 5 + client/mobile/src/models/AppModel.ts | 202 ++++- client/shared/src/util/CodegenRuntime.ts | 17 + client/shared/src/util/sensorsApi.ts | 35 +- client/web/src/models/AppModel.ts | 48 +- client/web/src/pxt/AppModel.ts | 49 +- libs/core/sensors.ts | 54 +- libs/core/sims.d.ts | 16 +- public/pxt/blockly/blockly_compressed.js | 678 ++++++++------- public/pxt/blockly/blocks_compressed.js | 40 +- public/pxt/blockly/msg/js/en.js | 9 +- public/pxt/blockly/msg/json/en.json | 11 +- public/pxt/controller.html | 3 + public/pxt/custom.css | 2 +- public/pxt/docfiles/docs.js | 14 +- public/pxt/docfiles/editorcards.html | 56 +- public/pxt/docfiles/footer.html | 28 +- public/pxt/docfiles/macros.html | 18 +- public/pxt/docfiles/tracking.html | 4 +- public/pxt/docs.html | 2 +- public/pxt/docs/_locales/pl/about.html | 107 +-- public/pxt/docs/_locales/pl/about.md | 6 + public/pxt/docs/about.html | 107 +-- public/pxt/docs/about.md | 5 + public/pxt/docs/docs.html | 107 +-- public/pxt/docs/docs.md | 14 + public/pxt/embed.js | 2 +- public/pxt/index.html | 6 +- public/pxt/main.js | 779 ++++++++++++------ public/pxt/pxtblocks.js | 601 ++++++++++---- public/pxt/pxtcompiler.js | 61 +- public/pxt/pxteditor.js | 21 +- public/pxt/pxtlib.js | 113 ++- public/pxt/pxtrunner.js | 8 + public/pxt/pxtsim.js | 5 +- public/pxt/pxtwinrt.js | 199 +++-- public/pxt/release.manifest | 2 +- public/pxt/rtlsemantic.css | 295 ++++++- public/pxt/run.html | 2 +- public/pxt/semantic.css | 295 ++++++- public/pxt/sim.js | 22 +- public/pxt/target.js | 79 +- public/pxt/target.json | 79 +- public/pxt/targetlight.json | 2 +- public/pxt/theme.json | 73 +- .../suggest/browser/media/String_16x.svg | 1 + .../browser/media/String_inverse_16x.svg | 1 + public/pxt/vs/editor/editor.main.nls.hu.js | 7 + public/pxt/vs/editor/editor.main.nls.pt-br.js | 7 + public/pxt/vs/editor/editor.main.nls.tr.js | 7 + .../browser/quickOpen/symbol-sprite.svg | 1 + sim/api.ts | 17 +- 52 files changed, 2871 insertions(+), 1451 deletions(-) create mode 100644 public/pxt/docs/_locales/pl/about.md create mode 100644 public/pxt/docs/about.md create mode 100644 public/pxt/docs/docs.md create mode 100644 public/pxt/vs/editor/contrib/suggest/browser/media/String_16x.svg create mode 100644 public/pxt/vs/editor/contrib/suggest/browser/media/String_inverse_16x.svg create mode 100644 public/pxt/vs/editor/editor.main.nls.hu.js create mode 100644 public/pxt/vs/editor/editor.main.nls.pt-br.js create mode 100644 public/pxt/vs/editor/editor.main.nls.tr.js create mode 100644 public/pxt/vs/editor/standalone/browser/quickOpen/symbol-sprite.svg diff --git a/client/mobile/package-lock.json b/client/mobile/package-lock.json index c9ce511..d3354fe 100644 --- a/client/mobile/package-lock.json +++ b/client/mobile/package-lock.json @@ -4312,6 +4312,11 @@ } } }, + "react-native-ble-manager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-native-ble-manager/-/react-native-ble-manager-5.1.1.tgz", + "integrity": "sha512-k2dKuVbU3l2PMynyYtcWl77b6PcFhDDx+m5+IgiQ6n3eJoNvC/BfmC8z7m930WOWWXJr2muKqNO7GqIZcpbRfg==" + }, "react-native-sm-transformer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/react-native-sm-transformer/-/react-native-sm-transformer-1.0.3.tgz", diff --git a/client/mobile/src/models/AppModel.ts b/client/mobile/src/models/AppModel.ts index 2a03546..7710253 100644 --- a/client/mobile/src/models/AppModel.ts +++ b/client/mobile/src/models/AppModel.ts @@ -1,13 +1,49 @@ // import React, { Component } from 'react'; -import { AsyncStorage } from 'react-native'; +import { + AsyncStorage, + NativeAppEventEmitter, + NativeEventEmitter, + NativeModules, + } from 'react-native'; import { ModelBase } from './ModelBase'; -import { CodegenRuntime, CodegenHost } from '../../../shared/src/util/CodegenRuntime'; +import { CodegenRuntime, CodegenHost, BlueTooth } from '../../../shared/src/util/CodegenRuntime'; import * as pxtexec from '../../../shared/src/util/PxtExec'; +import BleManager from 'react-native-ble-manager'; + +const BleManagerModule = NativeModules.BleManager; +const bleManagerEmitter = new NativeEventEmitter(BleManagerModule); export class AppModel extends ModelBase implements CodegenHost { constructor() { super(); CodegenRuntime.setCodegenHost(this); + + // start bluetooth + BleManager.start({showAlert: false}) + .then(() => { + // Success code + console.log('Module initialized'); + }); + + bleManagerEmitter.addListener('BleManagerDidUpdateState', + (args: any) => { + console.log("BleManagerDidUpdateState: " + args.state); + // The new state: args.state + this.blueTooth.btState = args.state; + }); + + this.handleDiscoverPeripheral = this.handleDiscoverPeripheral.bind(this); + this.handleStopScan = this.handleStopScan.bind(this); + this.handleUpdateValueForCharacteristic = this.handleUpdateValueForCharacteristic.bind(this); + this.handleDisconnectedPeripheral = this.handleDisconnectedPeripheral.bind(this); + + BleManager.start({showAlert: false, allowDuplicates: false}); + + this.handlerDiscover = bleManagerEmitter.addListener('BleManagerDiscoverPeripheral', this.handleDiscoverPeripheral ); + this.handlerStop = bleManagerEmitter.addListener('BleManagerStopScan', this.handleStopScan ); + this.handlerDisconnect = bleManagerEmitter.addListener('BleManagerDisconnectPeripheral', this.handleDisconnectedPeripheral ); + this.handlerUpdate = bleManagerEmitter.addListener('BleManagerDidUpdateValueForCharacteristic', this.handleUpdateValueForCharacteristic ); + } readonly serverUri: string; @@ -15,6 +51,20 @@ export class AppModel extends ModelBase implements CodegenHost { readonly lastEvalError: Error; readonly code: string; readonly connectionState: string = 'not connected'; + private handlerDiscover: any; + private handlerStop: any; + private handlerDisconnect: any; + private handlerUpdate: any; + + componentDidMount() { + } + + componentWillUnmount() { + this.handlerDiscover.remove(); + this.handlerStop.remove(); + this.handlerDisconnect.remove(); + this.handlerUpdate.update(); + } loadSettings(): Promise { let p1 = AsyncStorage.getItem('serverUri').then((v) => { @@ -81,6 +131,154 @@ export class AppModel extends ModelBase implements CodegenHost { createRefCollection(): any { return new pxtexec.pxsim.RefCollection(); } + + blueTooth: BlueTooth = { + + btState: "off", + devices: [], + deviceNames: null, + codeGenHost: null, + scanning: false, + scanningCompleteCallback: null, + + toggleBlueToothState: function toggleBlueToothState(): string { + BleManager.enableBluetooth() + .then(() => { + // Success code + console.log('The bluetooh is already enabled or the user confirm'); + }) + .catch((error: any) => { + // Failure code + console.log('The user refuse to enable bluetooth'); + }); + + return this.btState; + }, + getBlueToothStatus: function getBlueToothStatus(): string { + BleManager.checkState(); + + return this.btState; + }, + scanForDevices(scanDurationMilliseconds: number, callback: pxsim.RefAction): void { + // setup callback + this.scanningCompleteCallback = callback; + + // reset device list + this.devices = []; + this.deviceNames = new pxtexec.pxsim.RefCollection(); + + // start scanning for devices + if (!this.scanning) { + BleManager.scan([], Math.floor(scanDurationMilliseconds / 1000), false) + .then((results: any) => { + console.log('BleManger Scanning'); + + this.scanning = true; + }) + .catch((error: any) => { + console.log('scanForDevices: ' + error); + }); + } else { + console.log("scanForDevices: skipping starting new scan. scan currently in progress."); + } + }, + getDeviceList(): any { + return this.deviceNames; + }, + connectToDevice(deviceName: string, callback: any): void { + // TODO: finish implementing + + // find the existing device + for(var i: number = 0; i < this.devices.length; i++) { + if (this.devices[i].name == deviceName) { + BleManager.connect(this.devices[i].id).then(() => { + + this.bluetooth.devices[i].connected = true; + console.log('Connected to ' + this.bluetooth.devices[i]); + /* + this.setTimeout(() => { + BleManager.retrieveServices(peripheral.id).then((peripheralData) => { + console.log('Retrieved peripheral services', peripheralData); + BleManager.readRSSI(peripheral.id).then((rssi) => { + console.log('Retrieved actual RSSI value', rssi); + }); + }); + // Specific to test my device + BleManager.retrieveServices(peripheral.id).then((peripheralInfo) => { + this.setTimeout(() => { + BleManager.startNotification(peripheral.id, '00035B03-58E6-07DD-021A-08123A000300', '00035B03-58E6-07DD-021A-08123A000301').then(() => { + console.log('Started notification on ' + peripheral.id); + this.setTimeout(() => { + + let messages = [[0, 7, 2, 52, 2, 19, 181],[0, 7, 2, 103, 2, 47, 69],[0, 7, 2, 32, 2, 28, 181], [0, 7, 2, 120, 2, 39, 117]]; + let message = messages[Math.floor(Math.random() * 3)]; + //console.log(message); + BleManager.write(peripheral.id, '00035B03-58E6-07DD-021A-08123A000300', '00035B03-58E6-07DD-021A-08123A000301', message).then(() => { + console.log('Write confirmed'); + }); + }, 500); + }).catch((error) => { + console.log('Notification error', error); + }); + }, 200); + }); + }, 900);*/ + }).catch((e: any) => { + console.log('Connection error: ', e); + }); + } + } + } + } + // //////////////////////////////////////////////////////////////////////////// + + handleDisconnectedPeripheral(data: any) { + + // let peripherals = this.state.peripherals; + // let peripheral = peripherals.get(data.peripheral); + + // if (peripheral) { + // peripheral.connected = false; + // peripherals.set(peripheral.id, peripheral); + // this.setState({peripherals}); + // } + + console.log('Disconnected from ' + data.peripheral); + } + + + + handleUpdateValueForCharacteristic(data: any) { + console.log('Received data from ' + data.peripheral + ' characteristic ' + data.characteristic, data.value); + } + + + + handleStopScan() { + console.log('Scan is stopped'); + + this.blueTooth.scanning = false; + + // call the stop scanning callback + this.runFiberSync(this.blueTooth.scanningCompleteCallback, (r) => {}); + } + + + handleDiscoverPeripheral(peripheral: any){ + // var peripherals = this.state.peripherals; + + // if (!peripherals.has(peripheral.id)){ + console.log('Found ble peripheral!', peripheral); + // peripherals.set(peripheral.id, peripheral); + // this.setState({ peripherals }) + // } + + if (peripheral.name != null) { + this.blueTooth.deviceNames.push(peripheral.name); + this.blueTooth.devices.push(peripheral); + } + } + } \ No newline at end of file diff --git a/client/shared/src/util/CodegenRuntime.ts b/client/shared/src/util/CodegenRuntime.ts index 60f9d1a..ce5b8a4 100644 --- a/client/shared/src/util/CodegenRuntime.ts +++ b/client/shared/src/util/CodegenRuntime.ts @@ -28,10 +28,27 @@ import { CanvasBlock } from '../components/CanvasBlock'; import * as BlockThemes from '../util/BlockThemes'; + +export interface BlueTooth { + btState: string; + devices: any[]; + deviceNames: pxsim.RefCollection; + codeGenHost: any; + scanning: boolean; + scanningCompleteCallback: pxsim.RefAction; + + toggleBlueToothState(): string; + getBlueToothStatus(): string; + scanForDevices(scanDurationMilliseconds: number, callback: pxsim.RefAction): void; + getDeviceList(): pxsim.RefCollection; + connectToDevice(deviceName: string, callback: pxsim.RefAction): void; +} + export interface CodegenHost { runFiberAsync(a: any, arg0?: any, arg1?: any, arg2?: any): Promise; runFiberSync(a: any, resolve: (thenableOrResult?: any) => void, arg0?: any, arg1?: any, arg2?: any): void; createRefCollection():any; + blueTooth: BlueTooth; } export type EdgeKind = 'none' | 'left' | 'top' | 'right' | 'bottom'; diff --git a/client/shared/src/util/sensorsApi.ts b/client/shared/src/util/sensorsApi.ts index 51f2b3a..a24ff4f 100644 --- a/client/shared/src/util/sensorsApi.ts +++ b/client/shared/src/util/sensorsApi.ts @@ -10,26 +10,35 @@ export namespace pxsimsensors { // do whatever the block does } - export function getNearbyDevicesImpl(): string[] { + export function scanForNearbyDevicesImpl(scanDurationMilliseconds: number, callback: pxsim.RefAction): void { // TODO: find nearby devices and return them as an array - console.log('getNearbyDevicesImpl called'); + console.log('scanForNearbyDevicesImpl called'); - //return ["device1", "device2"]; - //return null; - let retVal = CodegenRuntime.getCodegenHost().createRefCollection(); - //let retVal = new Array(); - retVal.push("device1"); - retVal.push("device2"); + // let retVal = CodegenRuntime.getCodegenHost().createRefCollection(); + // //let retVal = new Array(); + // retVal.push("device1"); + // retVal.push("device2"); - return retVal; + // return retVal; + //CodegenRuntime.setIntervalr(() => { + // CodegenRuntime.getCodegenHost().runFiberSync(body, (r) => {}); + //}); + CodegenRuntime.getCodegenHost().blueTooth.scanForDevices(scanDurationMilliseconds, callback); } - export function getBluetoothStatusImpl(): boolean { - // TODO: implement - return false; + export function getDeviceListImpl() { + return CodegenRuntime.getCodegenHost().blueTooth.getDeviceList(); + } + + export function getBlueToothStatusImpl(): string { + return CodegenRuntime.getCodegenHost().blueTooth.getBlueToothStatus(); } export function toggleBlueToothStatusImpl(): void { - // TODO: implement + CodegenRuntime.getCodegenHost().blueTooth.toggleBlueToothState(); + } + + export function connectToDeviceImpl(deviceName: string, callback: pxsim.RefAction): void { + CodegenRuntime.getCodegenHost().blueTooth.connectToDevice(deviceName, callback); } } \ No newline at end of file diff --git a/client/web/src/models/AppModel.ts b/client/web/src/models/AppModel.ts index f151c3c..d0f4d04 100644 --- a/client/web/src/models/AppModel.ts +++ b/client/web/src/models/AppModel.ts @@ -8,7 +8,7 @@ import * as UIBlockConfig from '../blocks/UIBlockConfig'; import * as UIBlockDefs from '../blocks/UIBlockDefs'; import * as UIMethodDefs from '../blocks/UIMethodDefs'; import * as SpriteCanvasDefs from '../blocks/SpriteCanvasDefs'; -import { CodegenRuntime, CodegenHost } from '../../../shared/src/util/CodegenRuntime'; +import { CodegenRuntime, CodegenHost, BlueTooth } from '../../../shared/src/util/CodegenRuntime'; import { SimplePromptModel } from './SimplePromptModel'; import { InputFilePromptModel } from './InputFilePromptModel'; import * as svcConn from '../util/ServiceConnection'; @@ -35,6 +35,8 @@ export class AppModel extends ModelWithEvents statusMessage: null }); CodegenRuntime.setCodegenHost(this); + + this.blueTooth.codeGenHost = this; } // CodegenHost interface /////////////////////////////////////////////////// @@ -50,6 +52,50 @@ export class AppModel extends ModelWithEvents jsutil.notYetImplemented('createRefCollection'); return null; } + + blueTooth: BlueTooth = { + + btState: "off", + devices: [], + deviceNames: null, + codeGenHost: null, + scanning: false, + scanningCompleteCallback: null, + + toggleBlueToothState: function toggleBlueToothState(): string { + this.btState = !this.btState; + return this.btState; + }, + getBlueToothStatus: function getBlueToothStatus(): string { + return this.btState; + }, + scanForDevices(scanDurationMilliseconds: number, callback: any): void { + console.log("scanForDevices - started scanning"); + + setTimeout(function(caller: any) { + + // "scan" for devices + // caller.devices = Array(); + // let numDevices: number = Math.floor((Math.random() * 5)); + // for(var i: number = 0; i < numDevices; i++) { + // caller.devices.push("device" + i); + // } + + console.log("scanForDevices - completed scanning"); + + // call callback function + callback(); + + }, scanDurationMilliseconds, this); + }, + getDeviceList(): any { + return this.devices; + }, + connectToDevice(deviceName: string, callback: any): void { + // TODO: simulate + } + } + // //////////////////////////////////////////////////////////////////////////// diff --git a/client/web/src/pxt/AppModel.ts b/client/web/src/pxt/AppModel.ts index b96743a..1a3588c 100644 --- a/client/web/src/pxt/AppModel.ts +++ b/client/web/src/pxt/AppModel.ts @@ -1,7 +1,7 @@ /// import * as jsutil from '../../../shared/src/util/jsutil'; import { ModelWithEvents } from '../models/ModelWithEvents'; -import { CodegenRuntime, CodegenHost } from '../../../shared/src/util/CodegenRuntime'; +import { CodegenRuntime, CodegenHost, BlueTooth } from '../../../shared/src/util/CodegenRuntime'; import * as svcConn from '../util/ServiceConnection'; // import * as pxtexec from '../../../shared/src/util/PxtExec'; @@ -20,6 +20,8 @@ export class AppModel extends ModelWithEvents pairingCode: null }); CodegenRuntime.setCodegenHost(this); + + this.blueTooth.codeGenHost = this; } // CodegenHost interface /////////////////////////////////////////////////// @@ -45,6 +47,51 @@ export class AppModel extends ModelWithEvents createRefCollection(): any { return new pxsim.RefCollection(); } + + blueTooth: BlueTooth = { + + btState: "off", + devices: [], + deviceNames: null, + codeGenHost: null, + scanning: false, + scanningCompleteCallback: null, + + toggleBlueToothState: function toggleBlueToothState(): string { + this.btState = this.btState == "on" ? "off" : "on"; + return this.btState; + }, + getBlueToothStatus: function getBlueToothStatus(): string { + return this.btState; + }, + scanForDevices(scanDurationMilliseconds: number, callback: any): void { + console.log("scanForDevices - started scanning"); + + setTimeout(function(caller: BlueTooth) { + + // "scan" for devices + caller.devices = []; + caller.deviceNames = caller.codeGenHost.createRefCollection(); + let numDevices: number = Math.floor((Math.random() * 5)); + for(var i: number = 0; i < numDevices; i++) { + caller.deviceNames.push("device" + i); + } + + console.log("scanForDevices - completed scanning"); + + // call callback function + caller.codeGenHost.runFiberAsync(callback); + + }, scanDurationMilliseconds, this); + }, + getDeviceList(): any { + return this.deviceNames; + }, + connectToDevice(deviceName: string, callback: any): void { + // TODO: simulate + console.log("Attempting to connect to device: " + deviceName); + } + } // //////////////////////////////////////////////////////////////////////////// diff --git a/libs/core/sensors.ts b/libs/core/sensors.ts index bd51f72..fc699c1 100644 --- a/libs/core/sensors.ts +++ b/libs/core/sensors.ts @@ -1,11 +1,11 @@ -//% color=#7fff00 weight=100 +//% color=#00e600 weight=100 namespace Sensors { /** * This is the help text for the Foo block * @param arg help text for arg goes here **/ //% weight=100 - //% color=#7fff00 + //% color=#00e600 //% blockId=sensors_foo //% block="Foo arg %arg" //% subcategory=Bluetooth @@ -14,38 +14,66 @@ namespace Sensors { } /** - * Returns an array of all nearby bluetooth devices + * scans for nearby bluetooth devices **/ //% weight=100 - //% color=#7fff00 - //% blockId=sensors_listNearbyDevices - //% block="ListNearbyDevices" + //% color=#00e600 + //% blockId=sensors_scanNearbyDevices + //% block="Scan for %scanDurationMilliseconds milliseconds| for nearby devices" + //% scanDurationMilliseconds.defl=3000 //% subcategory=Bluetooth - export function getNearbyDevices(): string[] { - return getNearbyDevicesImpl(); + //% handlerStmt=true + export function scanForNearbyDevices(scanDurationMilliseconds: number, callback: () => void): void { + scanForNearbyDevicesImpl(scanDurationMilliseconds, callback); } + /** + * scans for nearby bluetooth devices + **/ + //% weight=100 + //% color=#00e600 + //% blockId=sensors_list + //% block="list all devices found nearby" + //% subcategory=Bluetooth + export function listDevices(): string[] { + return getDeviceListImpl(); + } + + /** * returns true or false depending on whether or not bluetooth is turned On or not **/ //% weight=100 - //% color=#7fff00 + //% color=#00e600 //% blockId=sensors_getBluetoothStatus - //% block="IsBluetoothTurnedOn" + //% block="BlueToothStatus" //% subcategory=Bluetooth - export function getBluetoothStatus(): boolean { - return getBluetoothStatusImpl(); + export function getBluetoothStatus(): string { + return getBlueToothStatusImpl(); } /** * toggles BT status **/ //% weight=100 - //% color=#7fff00 + //% color=#00e600 //% blockId=sensors_toggleBlueToothStatus //% block="ToggleBluetoothOnOrOff" //% subcategory=Bluetooth export function toggleBlueToothStatus(): void { toggleBlueToothStatusImpl(); } + + /** + * connects to the named device + **/ + //% weight=100 + //% color=#00e600 + //% blockId=sensors_connectToBTDevice + //% block="Connect to BT device called %deviceName" + //% subcategory=Bluetooth + //% handlerStmt=true + export function connectToDevice(deviceName: string, callback: () => void): void { + connectToDeviceImpl(deviceName, callback); + } } \ No newline at end of file diff --git a/libs/core/sims.d.ts b/libs/core/sims.d.ts index ab2548e..e707524 100644 --- a/libs/core/sims.d.ts +++ b/libs/core/sims.d.ts @@ -233,17 +233,25 @@ declare namespace Sensors { function fooImpl(arg: string): void; //% - //% shim=Sensors::getNearbyDevicesImpl - function getNearbyDevicesImpl(): string[]; + //% shim=Sensors::scanForNearbyDevicesImpl + function scanForNearbyDevicesImpl(scanDurationMilliseconds: number, callback: () => void): void; //% - //% shim=Sensors::getBluetoothStatusImpl - function getBluetoothStatusImpl(): boolean; + //% shim=Sensors::getBlueToothStatusImpl + function getBlueToothStatusImpl(): string; //% //% shim=Sensors::toggleBlueToothStatusImpl function toggleBlueToothStatusImpl(): void; + //% + //% shim=Sensors::getDeviceListImpl + function getDeviceListImpl(): string[]; + + //% + //% shim=Sensors::connectToDeviceImpl + function connectToDeviceImpl(deviceName: string, callback: () => void): void; + } // Auto-generated. Do not edit. Really. diff --git a/public/pxt/blockly/blockly_compressed.js b/public/pxt/blockly/blockly_compressed.js index 16caa5e..106e6c9 100644 --- a/public/pxt/blockly/blockly_compressed.js +++ b/public/pxt/blockly/blockly_compressed.js @@ -897,8 +897,8 @@ goog.ui.Slider.prototype.getCssClass=function(a){return a==goog.ui.SliderBase.Or goog.ui.Slider.prototype.createThumb_=function(){var a=this.getDomHelper().createDom("DIV",goog.ui.Slider.THUMB_CSS_CLASS);goog.a11y.aria.setRole(a,goog.a11y.aria.Role.BUTTON);return a};goog.events.FocusHandler=function(a){goog.events.EventTarget.call(this);this.element_=a;a=goog.userAgent.IE?"focusout":"blur";this.listenKeyIn_=goog.events.listen(this.element_,goog.userAgent.IE?"focusin":"focus",this,!goog.userAgent.IE);this.listenKeyOut_=goog.events.listen(this.element_,a,this,!goog.userAgent.IE)};goog.inherits(goog.events.FocusHandler,goog.events.EventTarget);goog.events.FocusHandler.EventType={FOCUSIN:"focusin",FOCUSOUT:"focusout"}; goog.events.FocusHandler.prototype.handleEvent=function(a){var b=a.getBrowserEvent(),b=new goog.events.BrowserEvent(b);b.type="focusin"==a.type||"focus"==a.type?goog.events.FocusHandler.EventType.FOCUSIN:goog.events.FocusHandler.EventType.FOCUSOUT;this.dispatchEvent(b)};goog.events.FocusHandler.prototype.disposeInternal=function(){goog.events.FocusHandler.superClass_.disposeInternal.call(this);goog.events.unlistenByKey(this.listenKeyIn_);goog.events.unlistenByKey(this.listenKeyOut_);delete this.element_};goog.debug.LOGGING_ENABLED=goog.DEBUG;goog.debug.FORCE_SLOPPY_STACKS=!1;goog.debug.catchErrors=function(a,b,c){c=c||goog.global;var d=c.onerror,e=!!b;goog.userAgent.WEBKIT&&!goog.userAgent.isVersionOrHigher("535.3")&&(e=!e);c.onerror=function(b,c,h,k,l){d&&d(b,c,h,k,l);a({message:b,fileName:c,line:h,col:k,error:l});return e}}; goog.debug.expose=function(a,b){if("undefined"==typeof a)return"undefined";if(null==a)return"NULL";var c=[],d;for(d in a)if(b||!goog.isFunction(a[d])){var e=d+" = ";try{e+=a[d]}catch(f){e+="*** "+f+" ***"}c.push(e)}return c.join("\n")}; -goog.debug.deepExpose=function(a,b){var c=[],d=[],e={},f=function(a,g){var h=g+" ";try{if(goog.isDef(a))if(goog.isNull(a))c.push("NULL");else if(goog.isString(a))c.push('"'+a.replace(/\n/g,"\n"+g)+'"');else if(goog.isFunction(a))c.push(String(a).replace(/\n/g,"\n"+g));else if(goog.isObject(a)){goog.hasUid(a)||d.push(a);var k=goog.getUid(a);if(e[k])c.push("*** reference loop detected (id="+k+") ***");else{e[k]=!0;c.push("{");for(var m in a)if(b||!goog.isFunction(a[m]))c.push("\n"),c.push(h),c.push(m+ -" = "),f(a[m],h);c.push("\n"+g+"}");delete e[k]}}else c.push(a);else c.push("undefined")}catch(q){c.push("*** "+q+" ***")}};f(a,"");for(var g=0;g=goog.debug.MAX_STACK_DEPTH){b.push("[...long stack...]");break}}a&&d>=a?b.push("[...reached max depth limit...]"):b.push("[end]");return b.join("")}; @@ -1104,28 +1104,36 @@ goog.ui.CustomButtonRenderer.trimTextNodes_=function(a,b){if(a)for(var c=b?a.fir // Copyright 2013 Google Inc. Apache License 2.0 var Blockly={};Blockly.Blocks=Object(null); // Copyright 2016 Google Inc. Apache License 2.0 -Blockly.Touch={};Blockly.Touch.touchIdentifier_=null;Blockly.Touch.onTouchUpWrapper_=null;Blockly.Touch.TOUCH_MAP={};goog.events.BrowserFeature.TOUCH_ENABLED&&(Blockly.Touch.TOUCH_MAP={mousedown:["touchstart"],mousemove:["touchmove"],mouseup:["touchend","touchcancel"]});Blockly.longPid_=0; -Blockly.longStart_=function(a,b){Blockly.longStop_();1==a.changedTouches.length&&(Blockly.longPid_=setTimeout(function(){a.button=2;a.clientX=a.changedTouches[0].clientX;a.clientY=a.changedTouches[0].clientY;b.onMouseDown_(a)},Blockly.LONGPRESS))};Blockly.longStop_=function(){Blockly.longPid_&&(clearTimeout(Blockly.longPid_),Blockly.longPid_=0)}; -Blockly.onMouseUp_=function(a){a=Blockly.getMainWorkspace();a.dragMode_!=Blockly.DRAG_NONE&&(Blockly.Touch.clearTouchIdentifier(),a.resetDragSurface(),a.dragMode_=Blockly.DRAG_NONE,Blockly.Touch.onTouchUpWrapper_&&(Blockly.unbindEvent_(Blockly.Touch.onTouchUpWrapper_),Blockly.Touch.onTouchUpWrapper_=null),Blockly.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.onMouseMoveWrapper_),Blockly.onMouseMoveWrapper_=null))}; -Blockly.onMouseMove_=function(a){var b=Blockly.getMainWorkspace();if(b.dragMode_!=Blockly.DRAG_NONE){var c=a.clientX-b.startDragMouseX,d=a.clientY-b.startDragMouseY,e=b.startDragMetrics,f=b.startScrollX+c,g=b.startScrollY+d,f=Math.min(f,-e.contentLeft),g=Math.min(g,-e.contentTop),f=Math.max(f,e.viewWidth-e.contentLeft-e.contentWidth),g=Math.max(g,e.viewHeight-e.contentTop-e.contentHeight);b.scrollbar.set(-f-e.contentLeft,-g-e.contentTop);Math.sqrt(c*c+d*d)>Blockly.DRAG_RADIUS&&(Blockly.longStop_(), -b.dragMode_=Blockly.DRAG_FREE);a.stopPropagation();a.preventDefault()}};Blockly.Touch.clearTouchIdentifier=function(){Blockly.Touch.touchIdentifier_=null};Blockly.Touch.shouldHandleEvent=function(a){return!Blockly.Touch.isMouseOrTouchEvent(a)||Blockly.Touch.checkTouchIdentifier(a)};Blockly.Touch.getTouchIdentifierFromEvent=function(a){return a.changedTouches&&a.changedTouches[0]&&void 0!=a.changedTouches[0].identifier&&null!=a.changedTouches[0].identifier?a.changedTouches[0].identifier:"mouse"}; +Blockly.Touch={};Blockly.Touch.touchIdentifier_=null;Blockly.Touch.TOUCH_MAP={};goog.events.BrowserFeature.TOUCH_ENABLED&&(Blockly.Touch.TOUCH_MAP={mousedown:["touchstart"],mousemove:["touchmove"],mouseup:["touchend","touchcancel"]});Blockly.longPid_=0;Blockly.longStart_=function(a,b){Blockly.longStop_();1==a.changedTouches.length&&(Blockly.longPid_=setTimeout(function(){a.button=2;a.clientX=a.changedTouches[0].clientX;a.clientY=a.changedTouches[0].clientY;b&&b.handleRightClick(a)},Blockly.LONGPRESS))}; +Blockly.longStop_=function(){Blockly.longPid_&&(clearTimeout(Blockly.longPid_),Blockly.longPid_=0)};Blockly.Touch.clearTouchIdentifier=function(){Blockly.Touch.touchIdentifier_=null};Blockly.Touch.shouldHandleEvent=function(a){return!Blockly.Touch.isMouseOrTouchEvent(a)||Blockly.Touch.checkTouchIdentifier(a)}; +Blockly.Touch.getTouchIdentifierFromEvent=function(a){return a.changedTouches&&a.changedTouches[0]&&void 0!=a.changedTouches[0].identifier&&null!=a.changedTouches[0].identifier?a.changedTouches[0].identifier:"mouse"}; Blockly.Touch.checkTouchIdentifier=function(a){var b=Blockly.Touch.getTouchIdentifierFromEvent(a);return void 0!=Blockly.Touch.touchIdentifier_&&null!=Blockly.Touch.touchIdentifier_?Blockly.Touch.touchIdentifier_==b:"mousedown"==a.type||"touchstart"==a.type?(Blockly.Touch.touchIdentifier_=b,!0):!1};Blockly.Touch.setClientFromTouch=function(a){if(goog.string.startsWith(a.type,"touch")){var b=a.changedTouches[0];a.clientX=b.clientX;a.clientY=b.clientY}}; Blockly.Touch.isMouseOrTouchEvent=function(a){return goog.string.startsWith(a.type,"touch")||goog.string.startsWith(a.type,"mouse")};Blockly.Touch.splitEventByTouches=function(a){var b=[];if(a.changedTouches)for(var c=0;cthis.MAX_UNDO&&this.undoStack_.unshift());for(var b=0,c;c=this.listeners_[b];b++)c(a)}; -Blockly.Workspace.prototype.getBlockById=function(a){return this.blockDB_[a]||null};Blockly.Workspace.prototype.allInputsFilled=function(a){for(var b=this.getTopBlocks(!1),c=0,d;d=b[c];c++)if(!d.allInputsFilled(a))return!1;return!0};Blockly.Workspace.WorkspaceDB_=Object.create(null);Blockly.Workspace.getById=function(a){return Blockly.Workspace.WorkspaceDB_[a]||null};Blockly.Workspace.prototype.clear=Blockly.Workspace.prototype.clear;Blockly.Workspace.prototype.clearUndo=Blockly.Workspace.prototype.clearUndo; -Blockly.Workspace.prototype.addChangeListener=Blockly.Workspace.prototype.addChangeListener;Blockly.Workspace.prototype.removeChangeListener=Blockly.Workspace.prototype.removeChangeListener;Blockly.Bubble=function(a,b,c,d,e,f){this.workspace_=a;this.content_=b;this.shape_=c;c=Blockly.Bubble.ARROW_ANGLE;this.workspace_.RTL&&(c=-c);this.arrow_radians_=goog.math.toRadians(c);a.getBubbleCanvas().appendChild(this.createDom_(b,!(!e||!f)));this.setAnchorLocation(d);e&&f||(b=this.content_.getBBox(),e=b.width+2*Blockly.Bubble.BORDER_WIDTH,f=b.height+2*Blockly.Bubble.BORDER_WIDTH);this.setBubbleSize(e,f);this.positionBubble_();this.renderArrow_();this.rendered_=!0;a.options.readOnly||(Blockly.bindEventWithChecks_(this.bubbleBack_, +Blockly.Workspace.prototype.getBlockById=function(a){return this.blockDB_[a]||null};Blockly.Workspace.prototype.allInputsFilled=function(a){for(var b=this.getTopBlocks(!1),c=0,d;d=b[c];c++)if(!d.allInputsFilled(a))return!1;return!0};Blockly.Workspace.prototype.getVariablesOfType=function(a){return this.variableMap_.getVariablesOfType(a)};Blockly.Workspace.prototype.getVariableTypes=function(){return this.variableMap_.getVariableTypes()};Blockly.Workspace.prototype.getAllVariables=function(){return this.variableMap_.getAllVariables()}; +Blockly.Workspace.WorkspaceDB_=Object.create(null);Blockly.Workspace.getById=function(a){return Blockly.Workspace.WorkspaceDB_[a]||null};Blockly.Workspace.prototype.clear=Blockly.Workspace.prototype.clear;Blockly.Workspace.prototype.clearUndo=Blockly.Workspace.prototype.clearUndo;Blockly.Workspace.prototype.addChangeListener=Blockly.Workspace.prototype.addChangeListener;Blockly.Workspace.prototype.removeChangeListener=Blockly.Workspace.prototype.removeChangeListener;Blockly.Bubble=function(a,b,c,d,e,f){this.workspace_=a;this.content_=b;this.shape_=c;c=Blockly.Bubble.ARROW_ANGLE;this.workspace_.RTL&&(c=-c);this.arrow_radians_=goog.math.toRadians(c);a.getBubbleCanvas().appendChild(this.createDom_(b,!(!e||!f)));this.setAnchorLocation(d);e&&f||(b=this.content_.getBBox(),e=b.width+2*Blockly.Bubble.BORDER_WIDTH,f=b.height+2*Blockly.Bubble.BORDER_WIDTH);this.setBubbleSize(e,f);this.positionBubble_();this.renderArrow_();this.rendered_=!0;a.options.readOnly||(Blockly.bindEventWithChecks_(this.bubbleBack_, "mousedown",this,this.bubbleMouseDown_),this.resizeGroup_&&Blockly.bindEventWithChecks_(this.resizeGroup_,"mousedown",this,this.resizeMouseDown_))};Blockly.Bubble.BORDER_WIDTH=6;Blockly.Bubble.ARROW_THICKNESS=5;Blockly.Bubble.ARROW_ANGLE=20;Blockly.Bubble.ARROW_BEND=4;Blockly.Bubble.ANCHOR_RADIUS=8;Blockly.Bubble.onMouseUpWrapper_=null;Blockly.Bubble.onMouseMoveWrapper_=null;Blockly.Bubble.prototype.resizeCallback_=null; Blockly.Bubble.unbindDragEvents_=function(){Blockly.Bubble.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Bubble.onMouseUpWrapper_),Blockly.Bubble.onMouseUpWrapper_=null);Blockly.Bubble.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Bubble.onMouseMoveWrapper_),Blockly.Bubble.onMouseMoveWrapper_=null)};Blockly.Bubble.bubbleMouseUp_=function(){Blockly.Touch.clearTouchIdentifier();Blockly.Bubble.unbindDragEvents_()};Blockly.Bubble.prototype.rendered_=!1;Blockly.Bubble.prototype.anchorXY_=null; Blockly.Bubble.prototype.relativeLeft_=0;Blockly.Bubble.prototype.relativeTop_=0;Blockly.Bubble.prototype.width_=0;Blockly.Bubble.prototype.height_=0;Blockly.Bubble.prototype.autoLayout_=!0; @@ -1152,18 +1160,17 @@ Blockly.Icon.prototype.setIconLocation=function(a){this.iconXY_=a;this.isVisible Blockly.Comment=function(a){Blockly.Comment.superClass_.constructor.call(this,a);this.createIcon()};goog.inherits(Blockly.Comment,Blockly.Icon);Blockly.Comment.prototype.text_="";Blockly.Comment.prototype.width_=160;Blockly.Comment.prototype.height_=80; Blockly.Comment.prototype.drawIcon_=function(a){Blockly.utils.createSvgElement("circle",{"class":"blocklyIconShape",r:"8",cx:"8",cy:"8"},a);Blockly.utils.createSvgElement("path",{"class":"blocklyIconSymbol",d:"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.405 0.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25 -1.201,0.998 -1.201,1.528 -1.204,2.19z"},a);Blockly.utils.createSvgElement("rect",{"class":"blocklyIconSymbol",x:"6.8",y:"10.78",height:"2",width:"2"},a)}; Blockly.Comment.prototype.createEditor_=function(){this.foreignObject_=Blockly.utils.createSvgElement("foreignObject",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);var a=document.createElementNS(Blockly.HTML_NS,"body");a.setAttribute("xmlns",Blockly.HTML_NS);a.className="blocklyMinimalBody";var b=document.createElementNS(Blockly.HTML_NS,"textarea");b.className="blocklyCommentTextarea";b.setAttribute("dir",this.block_.RTL?"RTL":"LTR");a.appendChild(b);this.textarea_=b;this.foreignObject_.appendChild(a); -Blockly.bindEventWithChecks_(b,"mouseup",this,this.textareaFocus_);Blockly.bindEventWithChecks_(b,"wheel",this,function(a){a.stopPropagation()});Blockly.bindEventWithChecks_(b,"change",this,function(a){this.text_!=b.value&&(Blockly.Events.fire(new Blockly.Events.Change(this.block_,"comment",null,this.text_,b.value)),this.text_=b.value)});setTimeout(function(){b.focus()},0);return this.foreignObject_}; +Blockly.bindEventWithChecks_(b,"mouseup",this,this.textareaFocus_);Blockly.bindEventWithChecks_(b,"wheel",this,function(a){a.stopPropagation()});Blockly.bindEventWithChecks_(b,"change",this,function(a){this.text_!=b.value&&(Blockly.Events.fire(new Blockly.Events.BlockChange(this.block_,"comment",null,this.text_,b.value)),this.text_=b.value)});setTimeout(function(){b.focus()},0);return this.foreignObject_}; Blockly.Comment.prototype.updateEditable=function(){this.isVisible()&&(this.setVisible(!1),this.setVisible(!0));Blockly.Icon.prototype.updateEditable.call(this)};Blockly.Comment.prototype.resizeBubble_=function(){if(this.isVisible()){var a=this.bubble_.getBubbleSize(),b=2*Blockly.Bubble.BORDER_WIDTH;this.foreignObject_.setAttribute("width",a.width-b);this.foreignObject_.setAttribute("height",a.height-b);this.textarea_.style.width=a.width-b-4+"px";this.textarea_.style.height=a.height-b-4+"px"}}; Blockly.Comment.prototype.setVisible=function(a){if(a!=this.isVisible())if(Blockly.Events.fire(new Blockly.Events.Ui(this.block_,"commentOpen",!a,a)),!this.block_.isEditable()&&!this.textarea_||goog.userAgent.IE)Blockly.Warning.prototype.setVisible.call(this,a);else{var b=this.getText(),c=this.getBubbleSize();a?(this.bubble_=new Blockly.Bubble(this.block_.workspace,this.createEditor_(),this.block_.svgPath_,this.iconXY_,this.width_,this.height_),this.bubble_.registerResizeEvent(this.resizeBubble_.bind(this)), this.updateColour()):(this.bubble_.dispose(),this.foreignObject_=this.textarea_=this.bubble_=null);this.setText(b);this.setBubbleSize(c.width,c.height)}};Blockly.Comment.prototype.textareaFocus_=function(a){this.bubble_.promote_();this.textarea_.focus()};Blockly.Comment.prototype.getBubbleSize=function(){return this.isVisible()?this.bubble_.getBubbleSize():{width:this.width_,height:this.height_}}; -Blockly.Comment.prototype.setBubbleSize=function(a,b){this.textarea_?this.bubble_.setBubbleSize(a,b):(this.width_=a,this.height_=b)};Blockly.Comment.prototype.getText=function(){return this.textarea_?this.textarea_.value:this.text_};Blockly.Comment.prototype.setText=function(a){this.text_!=a&&(Blockly.Events.fire(new Blockly.Events.Change(this.block_,"comment",null,this.text_,a)),this.text_=a);this.textarea_&&(this.textarea_.value=a)}; +Blockly.Comment.prototype.setBubbleSize=function(a,b){this.textarea_?this.bubble_.setBubbleSize(a,b):(this.width_=a,this.height_=b)};Blockly.Comment.prototype.getText=function(){return this.textarea_?this.textarea_.value:this.text_};Blockly.Comment.prototype.setText=function(a){this.text_!=a&&(Blockly.Events.fire(new Blockly.Events.BlockChange(this.block_,"comment",null,this.text_,a)),this.text_=a);this.textarea_&&(this.textarea_.value=a)}; Blockly.Comment.prototype.dispose=function(){Blockly.Events.isEnabled()&&this.setText("");this.block_.comment=null;Blockly.Icon.prototype.dispose.call(this)};Blockly.Connection=function(a,b){this.sourceBlock_=a;this.type=b;a.workspace.connectionDBList&&(this.db_=a.workspace.connectionDBList[b],this.dbOpposite_=a.workspace.connectionDBList[Blockly.OPPOSITE_TYPE[b]],this.hidden_=!this.db_)};Blockly.Connection.CAN_CONNECT=0;Blockly.Connection.REASON_SELF_CONNECTION=1;Blockly.Connection.REASON_WRONG_TYPE=2;Blockly.Connection.REASON_TARGET_NULL=3;Blockly.Connection.REASON_CHECKS_FAILED=4;Blockly.Connection.REASON_DIFFERENT_WORKSPACES=5; Blockly.Connection.REASON_SHADOW_PARENT=6;Blockly.Connection.prototype.targetConnection=null;Blockly.Connection.prototype.check_=null;Blockly.Connection.prototype.shadowDom_=null;Blockly.Connection.prototype.x_=0;Blockly.Connection.prototype.y_=0;Blockly.Connection.prototype.inDB_=!1;Blockly.Connection.prototype.db_=null;Blockly.Connection.prototype.dbOpposite_=null;Blockly.Connection.prototype.hidden_=null; Blockly.Connection.prototype.connect_=function(a){var b=this,c=b.getSourceBlock(),d=a.getSourceBlock();a.isConnected()&&a.disconnect();if(b.isConnected()){var e=b.targetBlock(),f=b.getShadowDom();b.setShadowDom(null);if(e.isShadow())f=Blockly.Xml.blockToDom(e),e.dispose(),e=null;else if(b.type==Blockly.INPUT_VALUE){if(!e.outputConnection)throw"Orphan block does not have an output connection.";var g=Blockly.Connection.lastConnectionInRow_(d,e);g&&(e.outputConnection.connect(g),e=null)}else if(b.type== Blockly.NEXT_STATEMENT){if(!e.previousConnection)throw"Orphan block does not have a previous connection.";for(g=d;g.nextConnection;){var h=g.getNextBlock();if(h&&!h.isShadow())g=h;else{e.previousConnection.checkType_(g.nextConnection)&&(g.nextConnection.connect(e.previousConnection),e=null);break}}}if(e&&(b.disconnect(),Blockly.Events.recordUndo)){var k=Blockly.Events.getGroup();setTimeout(function(){e.workspace&&!e.getParent()&&(Blockly.Events.setGroup(k),e.outputConnection?e.outputConnection.bumpAwayFrom_(b): -e.previousConnection&&e.previousConnection.bumpAwayFrom_(b),Blockly.Events.setGroup(!1))},Blockly.BUMP_DELAY)}b.setShadowDom(f)}var l;Blockly.Events.isEnabled()&&(l=new Blockly.Events.Move(d));Blockly.Connection.connectReciprocally_(b,a);d.setParent(c);l&&(l.recordNew(),Blockly.Events.fire(l))}; -Blockly.Connection.prototype.dispose=function(){if(this.isConnected())throw"Disconnect connection before disposing of it.";this.inDB_&&this.db_.removeConnection_(this);Blockly.highlightedConnection_==this&&(Blockly.highlightedConnection_=null);Blockly.localConnection_==this&&(Blockly.localConnection_=null);this.dbOpposite_=this.db_=null};Blockly.Connection.prototype.getSourceBlock=function(){return this.sourceBlock_}; -Blockly.Connection.prototype.isSuperior=function(){return this.type==Blockly.INPUT_VALUE||this.type==Blockly.NEXT_STATEMENT};Blockly.Connection.prototype.isConnected=function(){return!!this.targetConnection}; +e.previousConnection&&e.previousConnection.bumpAwayFrom_(b),Blockly.Events.setGroup(!1))},Blockly.BUMP_DELAY)}b.setShadowDom(f)}var l;Blockly.Events.isEnabled()&&(l=new Blockly.Events.BlockMove(d));Blockly.Connection.connectReciprocally_(b,a);d.setParent(c);l&&(l.recordNew(),Blockly.Events.fire(l))};Blockly.Connection.prototype.dispose=function(){if(this.isConnected())throw"Disconnect connection before disposing of it.";this.inDB_&&this.db_.removeConnection_(this);this.dbOpposite_=this.db_=null}; +Blockly.Connection.prototype.getSourceBlock=function(){return this.sourceBlock_};Blockly.Connection.prototype.isSuperior=function(){return this.type==Blockly.INPUT_VALUE||this.type==Blockly.NEXT_STATEMENT};Blockly.Connection.prototype.isConnected=function(){return!!this.targetConnection}; Blockly.Connection.prototype.canConnectWithReason_=function(a){if(!a)return Blockly.Connection.REASON_TARGET_NULL;if(this.isSuperior()){var b=this.sourceBlock_;var c=a.getSourceBlock()}else c=this.sourceBlock_,b=a.getSourceBlock();return b&&b==c?Blockly.Connection.REASON_SELF_CONNECTION:a.type!=Blockly.OPPOSITE_TYPE[this.type]?Blockly.Connection.REASON_WRONG_TYPE:b&&c&&b.workspace!==c.workspace?Blockly.Connection.REASON_DIFFERENT_WORKSPACES:this.checkType_(a)?Blockly.Connection.CAN_CONNECT:Blockly.Connection.REASON_CHECKS_FAILED}; Blockly.Connection.prototype.checkConnection_=function(a){switch(this.canConnectWithReason_(a)){case Blockly.Connection.CAN_CONNECT:break;case Blockly.Connection.REASON_SELF_CONNECTION:throw"Attempted to connect a block to itself.";case Blockly.Connection.REASON_DIFFERENT_WORKSPACES:throw"Blocks not on same workspace.";case Blockly.Connection.REASON_WRONG_TYPE:throw"Attempt to connect incompatible types.";case Blockly.Connection.REASON_TARGET_NULL:throw"Target connection is null.";case Blockly.Connection.REASON_CHECKS_FAILED:throw"Connection checks failed. "+ (this+" expected "+this.check_+", found "+a.check_);case Blockly.Connection.REASON_SHADOW_PARENT:throw"Connecting non-shadow to shadow block.";default:throw"Unknown connection failure: this should never happen!";}}; @@ -1171,14 +1178,12 @@ Blockly.Connection.prototype.isConnectionAllowed=function(a){if(this.canConnectW -1!=Blockly.draggingConnections_.indexOf(a)?!1:!0};Blockly.Connection.prototype.connect=function(a){this.targetConnection!=a&&(this.checkConnection_(a),this.isSuperior()?this.connect_(a):a.connect_(this))};Blockly.Connection.connectReciprocally_=function(a,b){goog.asserts.assert(a&&b,"Cannot connect null connections.");a.targetConnection=b;b.targetConnection=a}; Blockly.Connection.singleConnection_=function(a,b){for(var c=!1,d=0;db?!1:Blockly.RenderedConnection.superClass_.isConnectionAllowed.call(this,a)}; +Blockly.RenderedConnection.prototype.disconnectInternal_=function(a,b){Blockly.RenderedConnection.superClass_.disconnectInternal_.call(this,a,b);a.rendered&&a.render();b.rendered&&(b.updateDisabled(),b.render())}; +Blockly.RenderedConnection.prototype.respawnShadow_=function(){var a=this.getSourceBlock(),b=this.getShadowDom();if(a.workspace&&b&&Blockly.Events.recordUndo){Blockly.RenderedConnection.superClass_.respawnShadow_.call(this);b=this.targetBlock();if(!b)throw"Couldn't respawn the shadow block that should exist here.";b.initSvg();b.render(!1);a.rendered&&a.render()}};Blockly.RenderedConnection.prototype.neighbours_=function(a){return this.dbOpposite_.getNeighbours(this,a)}; +Blockly.RenderedConnection.prototype.connect_=function(a){Blockly.RenderedConnection.superClass_.connect_.call(this,a);var b=this.getSourceBlock();a=a.getSourceBlock();b.rendered&&b.updateDisabled();a.rendered&&a.updateDisabled();b.rendered&&a.rendered&&(this.type==Blockly.NEXT_STATEMENT||this.type==Blockly.PREVIOUS_STATEMENT?a.render():b.render())}; +Blockly.RenderedConnection.prototype.onCheckChanged_=function(){this.isConnected()&&!this.checkType_(this.targetConnection)&&((this.isSuperior()?this.targetBlock():this.sourceBlock_).unplug(),this.sourceBlock_.bumpNeighbours_())};Blockly.DraggedConnectionManager=function(a){this.topBlock_=Blockly.selected=a;this.workspace_=a.workspace;this.availableConnections_=this.initAvailableConnections_();this.localConnection_=this.closestConnection_=null;this.radiusConnection_=0;this.wouldDeleteBlock_=!1};Blockly.DraggedConnectionManager.prototype.dispose=function(){this.workspace_=this.topBlock_=null;this.availableConnections_.length=0;this.localConnection_=this.closestConnection_=null}; +Blockly.DraggedConnectionManager.prototype.wouldDeleteBlock=function(){return this.wouldDeleteBlock_};Blockly.DraggedConnectionManager.prototype.applyConnections=function(){this.closestConnection_&&(this.localConnection_.connect(this.closestConnection_),this.topBlock_.rendered&&(this.localConnection_.isSuperior()?this.closestConnection_:this.localConnection_).getSourceBlock().connectionUiEffect(),this.removeHighlighting_())}; +Blockly.DraggedConnectionManager.prototype.update=function(a,b){var c=this.closestConnection_,d=this.updateClosest_(a);d&&c&&c.unhighlight();c=!!this.closestConnection_&&b!=Blockly.DELETE_AREA_TOOLBOX;this.wouldDeleteBlock_=!!b&&!this.topBlock_.getParent()&&this.topBlock_.isDeletable()&&!c;!this.wouldDeleteBlock_&&d&&this.closestConnection_&&this.addHighlighting_()};Blockly.DraggedConnectionManager.prototype.removeHighlighting_=function(){this.closestConnection_&&this.closestConnection_.unhighlight()}; +Blockly.DraggedConnectionManager.prototype.addHighlighting_=function(){this.closestConnection_&&this.closestConnection_.highlight()};Blockly.DraggedConnectionManager.prototype.initAvailableConnections_=function(){var a=this.topBlock_.getConnections_(!1),b=this.topBlock_.lastConnectionInStack_();b&&b!=this.topBlock_.nextConnection&&a.push(b);return a}; +Blockly.DraggedConnectionManager.prototype.updateClosest_=function(a){var b=this.closestConnection_;this.localConnection_=this.closestConnection_=null;this.radiusConnection_=Blockly.SNAP_RADIUS;for(var c=0;cBlockly.Tooltip.RADIUS_OK&&Blockly.Tooltip.hide()}else Blockly.Tooltip.poisonedElement_!=Blockly.Tooltip.element_&&(clearTimeout(Blockly.Tooltip.showPid_),Blockly.Tooltip.lastX_=a.pageX,Blockly.Tooltip.lastY_=a.pageY,Blockly.Tooltip.showPid_= +setTimeout(Blockly.Tooltip.show_,Blockly.Tooltip.HOVER_MS))};Blockly.Tooltip.hide=function(){Blockly.Tooltip.visible&&(Blockly.Tooltip.visible=!1,Blockly.Tooltip.DIV&&(Blockly.Tooltip.DIV.style.display="none"));clearTimeout(Blockly.Tooltip.showPid_)};Blockly.Tooltip.block=function(){Blockly.Tooltip.hide();Blockly.Tooltip.blocked_=!0};Blockly.Tooltip.unblock=function(){Blockly.Tooltip.blocked_=!1}; +Blockly.Tooltip.show_=function(){if(!Blockly.Tooltip.blocked_&&(Blockly.Tooltip.poisonedElement_=Blockly.Tooltip.element_,Blockly.Tooltip.DIV)){goog.dom.removeChildren(Blockly.Tooltip.DIV);for(var a=Blockly.Tooltip.element_.tooltip;goog.isFunction(a);)a=a();for(var a=Blockly.utils.wrap(a,Blockly.Tooltip.LIMIT),a=a.split("\n"),b=0;bb.height+window.scrollY&&(d-=Blockly.Tooltip.DIV.offsetHeight+2*Blockly.Tooltip.OFFSET_Y);a?c=Math.max(Blockly.Tooltip.MARGINS-window.scrollX,c):c+Blockly.Tooltip.DIV.offsetWidth> +b.width+window.scrollX-2*Blockly.Tooltip.MARGINS&&(c=b.width-Blockly.Tooltip.DIV.offsetWidth-2*Blockly.Tooltip.MARGINS);Blockly.Tooltip.DIV.style.top=d+"px";Blockly.Tooltip.DIV.style.left=c+"px"}};Blockly.Gesture=function(a,b){this.mouseDownXY_=null;this.currentDragDeltaXY_=0;this.startWorkspace_=this.targetBlock_=this.startBlock_=this.startField_=null;this.creatorWorkspace_=b;this.isDraggingBlock_=this.isDraggingWorkspace_=this.hasExceededDragRadius_=!1;this.mostRecentEvent_=a;this.flyout_=this.workspaceDragger_=this.blockDragger_=this.onUpWrapper_=this.onMoveWrapper_=null;this.isEnding_=this.hasStarted_=this.calledUpdateIsDragging_=!1}; +Blockly.Gesture.prototype.dispose=function(){Blockly.Touch.clearTouchIdentifier();Blockly.Tooltip.unblock();this.creatorWorkspace_.clearGesture();this.onMoveWrapper_&&Blockly.unbindEvent_(this.onMoveWrapper_);this.onUpWrapper_&&Blockly.unbindEvent_(this.onUpWrapper_);this.flyout_=this.startWorkspace_=this.targetBlock_=this.startBlock_=this.startField_=null;this.blockDragger_&&(this.blockDragger_.dispose(),this.blockDragger_=null);this.workspaceDragger_&&(this.workspaceDragger_.dispose(),this.workspaceDragger_= +null)};Blockly.Gesture.prototype.updateFromEvent_=function(a){var b=new goog.math.Coordinate(a.clientX,a.clientY);this.updateDragDelta_(b)&&(this.updateIsDragging_(),Blockly.longStop_());this.mostRecentEvent_=a}; +Blockly.Gesture.prototype.updateDragDelta_=function(a){this.currentDragDeltaXY_=goog.math.Coordinate.difference(a,this.mouseDownXY_);return this.hasExceededDragRadius_?!1:this.hasExceededDragRadius_=goog.math.Coordinate.magnitude(this.currentDragDeltaXY_)>(this.flyout_?Blockly.FLYOUT_DRAG_RADIUS:Blockly.DRAG_RADIUS)}; +Blockly.Gesture.prototype.updateIsDraggingFromFlyout_=function(){return this.targetBlock_.disabled?!1:!this.flyout_.isScrollable()||this.flyout_.isDragTowardWorkspace(this.currentDragDeltaXY_)?(this.startWorkspace_=this.flyout_.targetWorkspace_,this.startWorkspace_.updateScreenCalculationsIfScrolled(),Blockly.Events.getGroup()||Blockly.Events.setGroup(!0),this.startBlock_=null,this.targetBlock_=this.flyout_.createBlock(this.targetBlock_),this.targetBlock_.select(),!0):!1}; +Blockly.Gesture.prototype.updateIsDraggingBlock_=function(){if(!this.targetBlock_)return!1;this.flyout_?this.isDraggingBlock_=this.updateIsDraggingFromFlyout_():this.targetBlock_.isMovable()&&(this.isDraggingBlock_=!0);return this.isDraggingBlock_?(this.startDraggingBlock_(),!0):!1}; +Blockly.Gesture.prototype.updateIsDraggingWorkspace_=function(){if(this.flyout_?this.flyout_.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.workspaceDragger_=this.flyout_?new Blockly.FlyoutDragger(this.flyout_):new Blockly.WorkspaceDragger(this.startWorkspace_),this.isDraggingWorkspace_=!0,this.workspaceDragger_.startDrag()}; +Blockly.Gesture.prototype.updateIsDragging_=function(){goog.asserts.assert(!this.calledUpdateIsDragging_,"updateIsDragging_ should only be called once per gesture.");this.calledUpdateIsDragging_=!0;this.updateIsDraggingBlock_()||this.updateIsDraggingWorkspace_()}; +Blockly.Gesture.prototype.startDraggingBlock_=function(){this.blockDragger_=new Blockly.BlockDragger(this.targetBlock_,this.startWorkspace_);this.blockDragger_.startBlockDrag(this.currentDragDeltaXY_);this.blockDragger_.dragBlock(this.mostRecentEvent_,this.currentDragDeltaXY_)}; +Blockly.Gesture.prototype.doStart=function(a){Blockly.utils.isTargetInput(a)?this.cancel():(this.hasStarted_=!0,Blockly.BlockSvg.disconnectUiStop_(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),this.startWorkspace_.markFocused(),this.mostRecentEvent_=a,Blockly.hideChaff(!!this.flyout_),Blockly.Tooltip.block(),this.targetBlock_&&this.targetBlock_.select(),Blockly.utils.isRightButton(a)?this.handleRightClick(a):(goog.string.caseInsensitiveEquals(a.type, +"touchstart")&&Blockly.longStart_(a,this),this.mouseDownXY_=new goog.math.Coordinate(a.clientX,a.clientY),this.onMoveWrapper_=Blockly.bindEventWithChecks_(document,"mousemove",null,this.handleMove.bind(this)),this.onUpWrapper_=Blockly.bindEventWithChecks_(document,"mouseup",null,this.handleUp.bind(this)),a.preventDefault(),a.stopPropagation()))}; +Blockly.Gesture.prototype.handleMove=function(a){this.updateFromEvent_(a);this.isDraggingWorkspace_?this.workspaceDragger_.drag(this.currentDragDeltaXY_):this.isDraggingBlock_&&this.blockDragger_.dragBlock(this.mostRecentEvent_,this.currentDragDeltaXY_);a.preventDefault();a.stopPropagation()}; +Blockly.Gesture.prototype.handleUp=function(a){this.updateFromEvent_(a);Blockly.longStop_();this.isEnding_?console.log("Trying to end a gesture recursively."):(this.isEnding_=!0,this.isDraggingBlock_?this.blockDragger_.endBlockDrag(a,this.currentDragDeltaXY_):this.isDraggingWorkspace_?this.workspaceDragger_.endDrag(this.currentDragDeltaXY_):this.isFieldClick_()?this.doFieldClick_():this.isBlockClick_()?this.doBlockClick_():this.isWorkspaceClick_()&&this.doWorkspaceClick_(),a.preventDefault(),a.stopPropagation(), +this.dispose())};Blockly.Gesture.prototype.cancel=function(){this.isEnding_||(Blockly.longStop_(),this.isDraggingBlock_?this.blockDragger_.endBlockDrag(this.mostRecentEvent_,this.currentDragDeltaXY_):this.isDraggingWorkspace_&&this.workspaceDragger_.endDrag(this.currentDragDeltaXY_),this.dispose())}; +Blockly.Gesture.prototype.handleRightClick=function(a){this.targetBlock_?(this.bringBlockToFront_(),Blockly.hideChaff(this.flyout_),this.targetBlock_.showContextMenu_(a)):this.startWorkspace_&&!this.flyout_&&(Blockly.hideChaff(),this.startWorkspace_.showContextMenu_(a));a.preventDefault();a.stopPropagation();this.dispose()}; +Blockly.Gesture.prototype.handleWsStart=function(a,b){goog.asserts.assert(!this.hasStarted_,"Tried to call gesture.handleWsStart, but the gesture had already been started.");this.setStartWorkspace_(b);this.mostRecentEvent_=a;this.doStart(a)};Blockly.Gesture.prototype.handleFlyoutStart=function(a,b){goog.asserts.assert(!this.hasStarted_,"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.");this.setStartFlyout_(b);this.handleWsStart(a,b.getWorkspace())}; +Blockly.Gesture.prototype.handleBlockStart=function(a,b){goog.asserts.assert(!this.hasStarted_,"Tried to call gesture.handleBlockStart, but the gesture had already been started.");this.setStartBlock(b);this.mostRecentEvent_=a};Blockly.Gesture.prototype.doFieldClick_=function(){this.startField_.showEditor_();this.bringBlockToFront_()}; +Blockly.Gesture.prototype.doBlockClick_=function(){this.flyout_&&this.flyout_.autoClose?this.targetBlock_.disabled||(Blockly.Events.getGroup()||Blockly.Events.setGroup(!0),this.flyout_.createBlock(this.targetBlock_).scheduleSnapAndBump()):Blockly.Events.fire(new Blockly.Events.Ui(this.startBlock_,"click",void 0,void 0));this.bringBlockToFront_();Blockly.Events.setGroup(!1)};Blockly.Gesture.prototype.doWorkspaceClick_=function(){Blockly.selected&&Blockly.selected.unselect()}; +Blockly.Gesture.prototype.bringBlockToFront_=function(){this.targetBlock_&&!this.flyout_&&this.targetBlock_.bringToFront()};Blockly.Gesture.prototype.setStartField=function(a){goog.asserts.assert(!this.hasStarted_,"Tried to call gesture.setStartField, but the gesture had already been started.");this.startField_||(this.startField_=a)};Blockly.Gesture.prototype.setStartBlock=function(a){this.startBlock_||(this.startBlock_=a,a.isInFlyout&&a!=a.getRootBlock()?this.setTargetBlock_(a.getRootBlock()):this.setTargetBlock_(a))}; +Blockly.Gesture.prototype.setTargetBlock_=function(a){a.isShadow()?this.setTargetBlock_(a.getParent()):this.targetBlock_=a};Blockly.Gesture.prototype.setStartWorkspace_=function(a){this.startWorkspace_||(this.startWorkspace_=a)};Blockly.Gesture.prototype.setStartFlyout_=function(a){this.flyout_||(this.flyout_=a)};Blockly.Gesture.prototype.isBlockClick_=function(){return!!this.startBlock_&&!this.hasExceededDragRadius_&&!this.isFieldClick_()}; +Blockly.Gesture.prototype.isFieldClick_=function(){return(this.startField_?this.startField_.isCurrentlyEditable():!1)&&!this.hasExceededDragRadius_&&(!this.flyout_||!this.flyout_.autoClose)};Blockly.Gesture.prototype.isWorkspaceClick_=function(){return!this.startBlock_&&!this.startField_&&!this.hasExceededDragRadius_};Blockly.Gesture.prototype.isDragging=function(){return this.isDraggingWorkspace_||this.isDraggingBlock_};Blockly.Gesture.prototype.hasStarted=function(){return this.hasStarted_};Blockly.Field=function(a,b){this.size_=new goog.math.Size(0,Blockly.BlockSvg.MIN_BLOCK_Y);this.setValue(a);this.setValidator(b)};Blockly.Field.cacheWidths_=null;Blockly.Field.cacheReference_=0;Blockly.Field.prototype.name=void 0;Blockly.Field.prototype.maxDisplayLength=50;Blockly.Field.prototype.text_="";Blockly.Field.prototype.sourceBlock_=null;Blockly.Field.prototype.visible_=!0;Blockly.Field.prototype.validator_=null;Blockly.Field.NBSP="\u00a0";Blockly.Field.prototype.EDITABLE=!0; Blockly.Field.prototype.setSourceBlock=function(a){goog.asserts.assert(!this.sourceBlock_,"Field already bound to a block.");this.sourceBlock_=a}; Blockly.Field.prototype.init=function(){this.fieldGroup_||(this.fieldGroup_=Blockly.utils.createSvgElement("g",{},null),this.visible_||(this.fieldGroup_.style.display="none"),this.borderRect_=Blockly.utils.createSvgElement("rect",{rx:4,ry:4,x:-Blockly.BlockSvg.SEP_SPACE_X/2,y:0,height:16},this.fieldGroup_,this.sourceBlock_.workspace),this.textElement_=Blockly.utils.createSvgElement("text",{"class":"blocklyText",y:this.size_.height-12.5},this.fieldGroup_),this.updateEditable(),this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_), -this.mouseUpWrapper_=Blockly.bindEventWithChecks_(this.fieldGroup_,"mouseup",this,this.onMouseUp_),this.render_())};Blockly.Field.prototype.initModel=function(){};Blockly.Field.prototype.dispose=function(){this.mouseUpWrapper_&&(Blockly.unbindEvent_(this.mouseUpWrapper_),this.mouseUpWrapper_=null);this.sourceBlock_=null;goog.dom.removeNode(this.fieldGroup_);this.validator_=this.borderRect_=this.textElement_=this.fieldGroup_=null}; +this.mouseDownWrapper_=Blockly.bindEventWithChecks_(this.fieldGroup_,"mousedown",this,this.onMouseDown_),this.render_())};Blockly.Field.prototype.initModel=function(){};Blockly.Field.prototype.dispose=function(){this.mouseDownWrapper_&&(Blockly.unbindEvent_(this.mouseDownWrapper_),this.mouseDownWrapper_=null);this.sourceBlock_=null;goog.dom.removeNode(this.fieldGroup_);this.validator_=this.borderRect_=this.textElement_=this.fieldGroup_=null}; Blockly.Field.prototype.updateEditable=function(){var a=this.fieldGroup_;this.EDITABLE&&a&&(this.sourceBlock_.isEditable()?(Blockly.utils.addClass(a,"blocklyEditableText"),Blockly.utils.removeClass(a,"blocklyNonEditableText"),this.fieldGroup_.style.cursor=this.CURSOR):(Blockly.utils.addClass(a,"blocklyNonEditableText"),Blockly.utils.removeClass(a,"blocklyEditableText"),this.fieldGroup_.style.cursor=""))}; Blockly.Field.prototype.isCurrentlyEditable=function(){return this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()};Blockly.Field.prototype.isVisible=function(){return this.visible_};Blockly.Field.prototype.setVisible=function(a){if(this.visible_!=a){this.visible_=a;var b=this.getSvgRoot();b&&(b.style.display=a?"block":"none",this.render_())}};Blockly.Field.prototype.setValidator=function(a){this.validator_=a};Blockly.Field.prototype.getValidator=function(){return this.validator_}; Blockly.Field.prototype.classValidator=function(a){return a};Blockly.Field.prototype.callValidator=function(a){var b=this.classValidator(a);if(null===b)return null;void 0!==b&&(a=b);if(b=this.getValidator()){b=b.call(this,a);if(null===b)return null;void 0!==b&&(a=b)}return a};Blockly.Field.prototype.getSvgRoot=function(){return this.fieldGroup_}; @@ -1202,15 +1263,8 @@ Blockly.Field.getCachedWidth=function(a){var b=a.textContent+"\n"+a.className.ba Blockly.Field.stopCache=function(){Blockly.Field.cacheReference_--;Blockly.Field.cacheReference_||(Blockly.Field.cacheWidths_=null)};Blockly.Field.prototype.getSize=function(){this.size_.width||this.render_();return this.size_};Blockly.Field.prototype.getScaledBBox_=function(){var a=this.borderRect_.getBBox();return new goog.math.Size(a.width*this.sourceBlock_.workspace.scale,a.height*this.sourceBlock_.workspace.scale)}; Blockly.Field.prototype.getDisplayText_=function(){var a=this.text_;if(!a)return Blockly.Field.NBSP;a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+"\u2026");a=a.replace(/\s/g,Blockly.Field.NBSP);this.sourceBlock_.RTL&&(a+="\u200f");return a};Blockly.Field.prototype.getText=function(){return this.text_}; Blockly.Field.prototype.setText=function(a){null!==a&&(a=String(a),a!==this.text_&&(this.text_=a,this.size_.width=0,this.sourceBlock_&&this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_())))};Blockly.Field.prototype.getValue=function(){return this.getText()}; -Blockly.Field.prototype.setValue=function(a){if(null!==a){var b=this.getValue();b!=a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.Change(this.sourceBlock_,"field",this.name,b,a)),this.setText(a))}}; -Blockly.Field.prototype.onMouseUp_=function(a){if(!goog.userAgent.IPHONE&&!goog.userAgent.IPAD||goog.userAgent.isVersionOrHigher("537.51.2")||0===a.layerX||0===a.layerY)Blockly.utils.isRightButton(a)||this.sourceBlock_.workspace.isDragging()||this.sourceBlock_.isEditable()&&this.showEditor_()};Blockly.Field.prototype.setTooltip=function(a){};Blockly.Field.prototype.getAbsoluteXY_=function(){return goog.style.getPageOffset(this.borderRect_)};Blockly.Tooltip={};Blockly.Tooltip.visible=!1;Blockly.Tooltip.LIMIT=50;Blockly.Tooltip.mouseOutPid_=0;Blockly.Tooltip.showPid_=0;Blockly.Tooltip.lastX_=0;Blockly.Tooltip.lastY_=0;Blockly.Tooltip.element_=null;Blockly.Tooltip.poisonedElement_=null;Blockly.Tooltip.OFFSET_X=0;Blockly.Tooltip.OFFSET_Y=10;Blockly.Tooltip.RADIUS_OK=10;Blockly.Tooltip.HOVER_MS=750;Blockly.Tooltip.MARGINS=5;Blockly.Tooltip.DIV=null; -Blockly.Tooltip.createDom=function(){Blockly.Tooltip.DIV||(Blockly.Tooltip.DIV=goog.dom.createDom("DIV","blocklyTooltipDiv"),document.body.appendChild(Blockly.Tooltip.DIV))};Blockly.Tooltip.bindMouseEvents=function(a){Blockly.bindEvent_(a,"mouseover",null,Blockly.Tooltip.onMouseOver_);Blockly.bindEvent_(a,"mouseout",null,Blockly.Tooltip.onMouseOut_);a.addEventListener("mousemove",Blockly.Tooltip.onMouseMove_,!1)}; -Blockly.Tooltip.onMouseOver_=function(a){for(a=a.target;!goog.isString(a.tooltip)&&!goog.isFunction(a.tooltip);)a=a.tooltip;Blockly.Tooltip.element_!=a&&(Blockly.Tooltip.hide(),Blockly.Tooltip.poisonedElement_=null,Blockly.Tooltip.element_=a);clearTimeout(Blockly.Tooltip.mouseOutPid_)};Blockly.Tooltip.onMouseOut_=function(a){Blockly.Tooltip.mouseOutPid_=setTimeout(function(){Blockly.Tooltip.element_=null;Blockly.Tooltip.poisonedElement_=null;Blockly.Tooltip.hide()},1);clearTimeout(Blockly.Tooltip.showPid_)}; -Blockly.Tooltip.onMouseMove_=function(a){if(Blockly.Tooltip.element_&&Blockly.Tooltip.element_.tooltip&&Blockly.dragMode_==Blockly.DRAG_NONE&&!Blockly.WidgetDiv.isVisible())if(Blockly.Tooltip.visible){var b=Blockly.Tooltip.lastX_-a.pageX;a=Blockly.Tooltip.lastY_-a.pageY;Math.sqrt(b*b+a*a)>Blockly.Tooltip.RADIUS_OK&&Blockly.Tooltip.hide()}else Blockly.Tooltip.poisonedElement_!=Blockly.Tooltip.element_&&(clearTimeout(Blockly.Tooltip.showPid_),Blockly.Tooltip.lastX_=a.pageX,Blockly.Tooltip.lastY_=a.pageY, -Blockly.Tooltip.showPid_=setTimeout(Blockly.Tooltip.show_,Blockly.Tooltip.HOVER_MS))};Blockly.Tooltip.hide=function(){Blockly.Tooltip.visible&&(Blockly.Tooltip.visible=!1,Blockly.Tooltip.DIV&&(Blockly.Tooltip.DIV.style.display="none"));clearTimeout(Blockly.Tooltip.showPid_)}; -Blockly.Tooltip.show_=function(){Blockly.Tooltip.poisonedElement_=Blockly.Tooltip.element_;if(Blockly.Tooltip.DIV){goog.dom.removeChildren(Blockly.Tooltip.DIV);for(var a=Blockly.Tooltip.element_.tooltip;goog.isFunction(a);)a=a();for(var a=Blockly.utils.wrap(a,Blockly.Tooltip.LIMIT),a=a.split("\n"),b=0;bb.height+window.scrollY&&(d-=Blockly.Tooltip.DIV.offsetHeight+2*Blockly.Tooltip.OFFSET_Y);a?c=Math.max(Blockly.Tooltip.MARGINS-window.scrollX,c):c+Blockly.Tooltip.DIV.offsetWidth>b.width+window.scrollX-2*Blockly.Tooltip.MARGINS&& -(c=b.width-Blockly.Tooltip.DIV.offsetWidth-2*Blockly.Tooltip.MARGINS);Blockly.Tooltip.DIV.style.top=d+"px";Blockly.Tooltip.DIV.style.left=c+"px"}};Blockly.FieldLabel=function(a,b){this.size_=new goog.math.Size(0,17.5);this.class_=b;this.setValue(a)};goog.inherits(Blockly.FieldLabel,Blockly.Field);Blockly.FieldLabel.prototype.EDITABLE=!1; +Blockly.Field.prototype.setValue=function(a){if(null!==a){var b=this.getValue();b!=a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,b,a)),this.setText(a))}};Blockly.Field.prototype.onMouseDown_=function(a){this.sourceBlock_&&this.sourceBlock_.workspace&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)};Blockly.Field.prototype.setTooltip=function(a){}; +Blockly.Field.prototype.getAbsoluteXY_=function(){return goog.style.getPageOffset(this.borderRect_)};Blockly.FieldLabel=function(a,b){this.size_=new goog.math.Size(0,17.5);this.class_=b;this.setValue(a)};goog.inherits(Blockly.FieldLabel,Blockly.Field);Blockly.FieldLabel.prototype.EDITABLE=!1; Blockly.FieldLabel.prototype.init=function(){this.textElement_||(this.textElement_=Blockly.utils.createSvgElement("text",{"class":"blocklyText",y:this.size_.height-5},null),this.class_&&Blockly.utils.addClass(this.textElement_,this.class_),this.visible_||(this.textElement_.style.display="none"),this.sourceBlock_.getSvgRoot().appendChild(this.textElement_),this.textElement_.tooltip=this.sourceBlock_,Blockly.Tooltip.bindMouseEvents(this.textElement_),this.render_())}; Blockly.FieldLabel.prototype.dispose=function(){goog.dom.removeNode(this.textElement_);this.textElement_=null};Blockly.FieldLabel.prototype.getSvgRoot=function(){return this.textElement_};Blockly.FieldLabel.prototype.setTooltip=function(a){this.textElement_.tooltip=a};Blockly.Input=function(a,b,c,d){if(a!=Blockly.DUMMY_INPUT&&!b)throw"Value inputs and statement inputs must have non-empty name.";this.type=a;this.name=b;this.sourceBlock_=c;this.connection=d;this.fieldRow=[]};Blockly.Input.prototype.align=Blockly.ALIGN_LEFT;Blockly.Input.prototype.visible_=!0;Blockly.Input.prototype.appendField=function(a,b){this.insertFieldAt(this.fieldRow.length,a,b);return this}; Blockly.Input.prototype.insertFieldAt=function(a,b,c){if(0>a||a>this.fieldRow.length)throw Error("index "+a+" out of bounds.");if(!b&&!c)return this;goog.isString(b)&&(b=new Blockly.FieldLabel(b));b.setSourceBlock(this.sourceBlock_);this.sourceBlock_.rendered&&b.init();b.name=c;b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);++a;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_()); @@ -1221,11 +1275,30 @@ Blockly.ConnectionDB.prototype.findConnection=function(a){if(!this.length)return Blockly.ConnectionDB.prototype.findPositionForConnection_=function(a){if(!this.length)return 0;for(var b=0,c=this.length;ba.y_)c=d;else{b=d;break}}return b};Blockly.ConnectionDB.prototype.removeConnection_=function(a){if(!a.inDB_)throw"Connection not in database.";var b=this.findConnection(a);if(-1==b)throw"Unable to find connection in connectionDB.";a.inDB_=!1;this.splice(b,1)}; Blockly.ConnectionDB.prototype.getNeighbours=function(a,b){function c(a){var c=e-d[a].x_,g=f-d[a].y_;Math.sqrt(c*c+g*g)<=b&&l.push(d[a]);return g=k?(e=2,g=k,(k=f.join(""))&&c.push(k),f.length=0):"{"==k?e=3:(f.push("%",k),e=0):2==e?"0"<=k&&"9">=k?g+=k:(c.push(parseInt(g,10)),h--,e=0):3==e&&(""==k?(f.splice(0,0,"%{"),h--,e=0):"}"!=k?f.push(k):(k=f.join(""),/[a-zA-Z][a-zA-Z0-9_]*/.test(k)?(e=k.toUpperCase(), +(e=goog.string.startsWith(e,"BKY_")?e.substring(4):null)&&e in Blockly.Msg?(k=Blockly.Msg[e],goog.isString(k)?Array.prototype.push.apply(c,Blockly.utils.tokenizeInterpolation(k)):b?c.push(String(k)):c.push(k)):c.push("%{"+k+"}")):c.push("%{"+k+"}"),e=f.length=0))}(k=f.join(""))&&c.push(k);d=[];for(h=f.length=0;hc;c++)b[c]=Blockly.utils.genUid.soup_.charAt(Math.random()*a);return b.join("")};Blockly.utils.genUid.soup_="!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";Blockly.utils.wrap=function(a,b){for(var c=a.split("\n"),d=0;db&&(b=c[d].length);var d=-Infinity,e=1;do{var f=d;var g=a;for(var h=[],k=c.length/e,l=1,d=0;df);return g}; +Blockly.utils.wrapScore_=function(a,b,c){for(var d=[0],e=[],f=0;fd&&(d=h,e=g)}return e?Blockly.utils.wrapMutate_(a,e,c):b};Blockly.utils.wrapToText_=function(a,b){for(var c=[],d=0;dthis.lidOpen_&&(this.lidTask_=goog.Timer.callOnce(this.animateLid_,20,this))}; -Blockly.Trashcan.prototype.close=function(){this.setOpen_(!1)};Blockly.Trashcan.prototype.click=function(){var a=this.workspace_.startScrollX-this.workspace_.scrollX,b=this.workspace_.startScrollY-this.workspace_.scrollY;Math.sqrt(a*a+b*b)>Blockly.DRAG_RADIUS||console.log("TODO: Inspect trash.")};Blockly.utils={};Blockly.utils.removeAttribute=function(a,b){goog.userAgent.IE&&goog.userAgent.isVersion("10.0")?a.setAttribute(b,null):a.removeAttribute(b)};Blockly.utils.addClass=function(a,b){var c=a.getAttribute("class")||"";if(-1!=(" "+c+" ").indexOf(" "+b+" "))return!1;c&&(c+=" ");a.setAttribute("class",c+b);return!0}; -Blockly.utils.removeClass=function(a,b){var c=a.getAttribute("class");if(-1==(" "+c+" ").indexOf(" "+b+" "))return!1;for(var c=c.split(/\s+/),d=0;d=k?(e=2,g=k,(k=f.join(""))&&c.push(k),f.length=0):"{"==k?e=3:(f.push("%",k),e=0):2==e?"0"<=k&&"9">=k?g+=k:(c.push(parseInt(g,10)),h--,e=0):3==e&&(""==k?(f.splice(0,0,"%{"),h--,e=0):"}"!=k?f.push(k):(k=f.join(""),/[a-zA-Z][a-zA-Z0-9_]*/.test(k)?(e=k.toUpperCase(), -(e=goog.string.startsWith(e,"BKY_")?e.substring(4):null)&&e in Blockly.Msg?(k=Blockly.Msg[e],goog.isString(k)?Array.prototype.push.apply(c,Blockly.utils.tokenizeInterpolation(k)):b?c.push(String(k)):c.push(k)):c.push("%{"+k+"}")):c.push("%{"+k+"}"),e=f.length=0))}(k=f.join(""))&&c.push(k);d=[];for(h=f.length=0;hc;c++)b[c]=Blockly.utils.genUid.soup_.charAt(Math.random()*a);return b.join("")};Blockly.utils.genUid.soup_="!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";Blockly.utils.wrap=function(a,b){for(var c=a.split("\n"),d=0;db&&(b=c[d].length);var d=-Infinity,e=1;do{var f=d;var g=a;for(var h=[],k=c.length/e,l=1,d=0;df);return g}; -Blockly.utils.wrapScore_=function(a,b,c){for(var d=[0],e=[],f=0;fd&&(d=h,e=g)}return e?Blockly.utils.wrapMutate_(a,e,c):b};Blockly.utils.wrapToText_=function(a,b){for(var c=[],d=0;dBlockly.DRAG_RADIUS||console.log("TODO: Inspect trash.")};Blockly.WorkspaceAudio=function(a){this.parentWorkspace_=a;this.SOUNDS_=Object.create(null)};Blockly.WorkspaceAudio.prototype.lastSound_=null;Blockly.WorkspaceAudio.prototype.dispose=function(){this.SOUNDS_=this.parentWorkspace_=null};Blockly.WorkspaceAudio.prototype.load=function(a,b){if(a.length){try{var c=new window.Audio}catch(h){return}for(var d,e=0;e"!=d.slice(-2)&&(b+=" ")}a=a.join("\n");a=a.replace(/(<(\w+)\b[^>]*>[^\n]*)\n *<\/\2>/g,"$1");return a.replace(/^\n/,"")}; Blockly.Xml.textToDom=function(a){(a=(new DOMParser).parseFromString(a,"text/xml"))&&a.firstChild&&"xml"==a.firstChild.nodeName.toLowerCase()&&a.firstChild===a.lastChild||goog.asserts.fail("Blockly.Xml.textToDom did not obtain a valid XML tree.");return a.firstChild}; -Blockly.Xml.domToWorkspace=function(a,b){if(a instanceof Blockly.Workspace){var c=a;a=b;b=c;console.warn("Deprecated call to Blockly.Xml.domToWorkspace, swap the arguments.")}var d;b.RTL&&(d=b.getWidth());c=[];Blockly.Field.startCache();var e=a.childNodes.length,f=Blockly.Events.getGroup();f||Blockly.Events.setGroup(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);for(var g=0;g=this.remainingCapacity())){Blockly.terminateDrag_();Blockly.Events.disable();try{var b=Blockly.Xml.domToBlock(a,this);var c=parseInt(a.getAttribute("x"),10),d=parseInt(a.getAttribute("y"),10);if(!isNaN(c)&&!isNaN(d)){this.RTL&&(c=-c);do{var e=!1;var f=this.getAllBlocks();a=0;for(var g;g=f[a];a++){var h=g.getRelativeToSurfaceXY();if(1>=Math.abs(c-h.x)&&1>=Math.abs(d-h.y)){e=!0;break}}if(!e){var k= -b.getConnections_(!1);a=0;for(var l;l=k[a];a++)if(l.closest(Blockly.SNAP_RADIUS,new goog.math.Coordinate(c,d)).connection){e=!0;break}}e&&(c=this.RTL?c-Blockly.SNAP_RADIUS:c+Blockly.SNAP_RADIUS,d+=2*Blockly.SNAP_RADIUS)}while(e);b.moveBy(c,d)}}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&!b.isShadow()&&Blockly.Events.fire(new Blockly.Events.Create(b));b.select()}}; -Blockly.WorkspaceSvg.prototype.createVariable=function(a){Blockly.WorkspaceSvg.superClass_.createVariable.call(this,a);this.toolbox_&&this.toolbox_.flyout_&&!Blockly.Flyout.startFlyout_&&this.toolbox_.refreshSelection()};Blockly.WorkspaceSvg.prototype.recordDeleteAreas=function(){this.deleteAreaTrash_=this.trashcan?this.trashcan.getClientRect():null;this.deleteAreaToolbox_=this.flyout_?this.flyout_.getClientRect():this.toolbox_?this.toolbox_.getClientRect():null}; -Blockly.WorkspaceSvg.prototype.isDeleteArea=function(a){a=new goog.math.Coordinate(a.clientX,a.clientY);return this.deleteAreaTrash_&&this.deleteAreaTrash_.contains(a)?Blockly.DELETE_AREA_TRASH:this.deleteAreaToolbox_&&this.deleteAreaToolbox_.contains(a)?Blockly.DELETE_AREA_TOOLBOX:null}; -Blockly.WorkspaceSvg.prototype.onMouseDown_=function(a){this.markFocused();Blockly.utils.isTargetInput(a)?Blockly.Touch.clearTouchIdentifier():(Blockly.terminateDrag_(),Blockly.hideChaff(),a.target&&a.target.nodeName&&("svg"==a.target.nodeName.toLowerCase()||a.target==this.svgBackground_)&&Blockly.selected&&!this.options.readOnly&&Blockly.selected.unselect(),Blockly.utils.isRightButton(a)?(this.showContextMenu_(a),Blockly.onMouseUp_(a),Blockly.Touch.clearTouchIdentifier()):this.scrollbar?(this.dragMode_= -Blockly.DRAG_BEGIN,this.startDragMouseX=a.clientX,this.startDragMouseY=a.clientY,this.startDragMetrics=this.getMetrics(),this.startScrollX=this.scrollX,this.startScrollY=this.scrollY,this.setupDragSurface(),"mouseup"in Blockly.Touch.TOUCH_MAP&&(Blockly.Touch.onTouchUpWrapper_=Blockly.Touch.onTouchUpWrapper_||[],Blockly.Touch.onTouchUpWrapper_=Blockly.Touch.onTouchUpWrapper_.concat(Blockly.bindEventWithChecks_(document,"mouseup",null,Blockly.onMouseUp_))),Blockly.onMouseMoveWrapper_=Blockly.onMouseMoveWrapper_|| -[],Blockly.onMouseMoveWrapper_=Blockly.onMouseMoveWrapper_.concat(Blockly.bindEventWithChecks_(document,"mousemove",null,Blockly.onMouseMove_))):Blockly.Touch.clearTouchIdentifier(),a.stopPropagation(),a.preventDefault())};Blockly.WorkspaceSvg.prototype.startDrag=function(a,b){var c=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());c.x/=this.scale;c.y/=this.scale;this.dragDeltaXY_=goog.math.Coordinate.difference(b,c)}; -Blockly.WorkspaceSvg.prototype.moveDrag=function(a){a=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());a.x/=this.scale;a.y/=this.scale;return goog.math.Coordinate.sum(this.dragDeltaXY_,a)};Blockly.WorkspaceSvg.prototype.isDragging=function(){return Blockly.dragMode_==Blockly.DRAG_FREE||Blockly.Flyout.startFlyout_&&Blockly.Flyout.startFlyout_.dragMode_==Blockly.DRAG_FREE||this.dragMode_==Blockly.DRAG_FREE};Blockly.WorkspaceSvg.prototype.isDraggable=function(){return!!this.scrollbar}; -Blockly.WorkspaceSvg.prototype.onMouseWheel_=function(a){Blockly.terminateDrag_();var b=-a.deltaY/50,c=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());a.ctrlKey||a.metaKey?this.zoom(c.x,c.y,b):this.scrollbar&&(b=parseFloat(this.scrollbar.vScroll.svgHandle_.getAttribute("y")||"0"),b/=this.scrollbar.vScroll.ratio_,this.scrollbar.vScroll.set(b+a.deltaY),this.scrollbar.resize(),Blockly.hideChaff(!1));a.preventDefault()}; +Blockly.WorkspaceSvg.prototype.paste=function(a){if(this.rendered&&!(a.getElementsByTagName("block").length>=this.remainingCapacity())){this.currentGesture_&&this.currentGesture_.cancel();Blockly.Events.disable();try{var b=Blockly.Xml.domToBlock(a,this);if(goog.userAgent.IE||goog.userAgent.EDGE)for(var c=b.getDescendants(),d=c.length-1;0<=d;d--)c[d].render(!1);var e=parseInt(a.getAttribute("x"),10),f=parseInt(a.getAttribute("y"),10);if(!isNaN(e)&&!isNaN(f)){this.RTL&&(e=-e);do{var g=!1;for(var h= +this.getAllBlocks(),d=0,k;k=h[d];d++){var l=k.getRelativeToSurfaceXY();if(1>=Math.abs(e-l.x)&&1>=Math.abs(f-l.y)){g=!0;break}}if(!g)for(var m=b.getConnections_(!1),d=0,n;n=m[d];d++)if(n.closest(Blockly.SNAP_RADIUS,new goog.math.Coordinate(e,f)).connection){g=!0;break}g&&(e=this.RTL?e-Blockly.SNAP_RADIUS:e+Blockly.SNAP_RADIUS,f+=2*Blockly.SNAP_RADIUS)}while(g);b.moveBy(e,f)}}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&!b.isShadow()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(b)); +b.select()}};Blockly.WorkspaceSvg.prototype.refreshToolboxSelection_=function(){this.toolbox_&&this.toolbox_.flyout_&&!this.currentGesture_&&this.toolbox_.refreshSelection()};Blockly.WorkspaceSvg.prototype.renameVariable=function(a,b){Blockly.WorkspaceSvg.superClass_.renameVariable.call(this,a,b);this.refreshToolboxSelection_()};Blockly.WorkspaceSvg.prototype.renameVariableById=function(a,b){Blockly.WorkspaceSvg.superClass_.renameVariableById.call(this,a,b);this.refreshToolboxSelection_()}; +Blockly.WorkspaceSvg.prototype.deleteVariable=function(a){Blockly.WorkspaceSvg.superClass_.deleteVariable.call(this,a);this.refreshToolboxSelection_()};Blockly.WorkspaceSvg.prototype.deleteVariableById=function(a){Blockly.WorkspaceSvg.superClass_.deleteVariableById.call(this,a);this.refreshToolboxSelection_()};Blockly.WorkspaceSvg.prototype.createVariable=function(a,b,c){a=Blockly.WorkspaceSvg.superClass_.createVariable.call(this,a,b,c);this.refreshToolboxSelection_();return a}; +Blockly.WorkspaceSvg.prototype.recordDeleteAreas=function(){this.deleteAreaTrash_=this.trashcan?this.trashcan.getClientRect():null;this.deleteAreaToolbox_=this.flyout_?this.flyout_.getClientRect():this.toolbox_?this.toolbox_.getClientRect():null}; +Blockly.WorkspaceSvg.prototype.isDeleteArea=function(a){a=new goog.math.Coordinate(a.clientX,a.clientY);return this.deleteAreaTrash_&&this.deleteAreaTrash_.contains(a)?Blockly.DELETE_AREA_TRASH:this.deleteAreaToolbox_&&this.deleteAreaToolbox_.contains(a)?Blockly.DELETE_AREA_TOOLBOX:Blockly.DELETE_AREA_NONE};Blockly.WorkspaceSvg.prototype.onMouseDown_=function(a){var b=this.getGesture(a);b&&b.handleWsStart(a,this)}; +Blockly.WorkspaceSvg.prototype.startDrag=function(a,b){var c=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());c.x/=this.scale;c.y/=this.scale;this.dragDeltaXY_=goog.math.Coordinate.difference(b,c)};Blockly.WorkspaceSvg.prototype.moveDrag=function(a){a=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());a.x/=this.scale;a.y/=this.scale;return goog.math.Coordinate.sum(this.dragDeltaXY_,a)}; +Blockly.WorkspaceSvg.prototype.isDragging=function(){return this.currentGesture_&&this.currentGesture_.isDragging()};Blockly.WorkspaceSvg.prototype.isDraggable=function(){return!!this.scrollbar}; +Blockly.WorkspaceSvg.prototype.onMouseWheel_=function(a){this.currentGesture_&&this.currentGesture_.cancel();var b=-a.deltaY/50,c=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());a.ctrlKey||a.metaKey?this.zoom(c.x,c.y,b):this.scrollbar&&(b=parseFloat(this.scrollbar.vScroll.svgHandle_.getAttribute("y")||"0"),b/=this.scrollbar.vScroll.ratio_,this.scrollbar.vScroll.set(b+a.deltaY),this.scrollbar.resize(),Blockly.hideChaff(!1));a.preventDefault()}; Blockly.WorkspaceSvg.prototype.getBlocksBoundingBox=function(){var a=this.getTopBlocks(!1);if(!a.length)return{x:0,y:0,width:0,height:0};for(var b=a[0].getBoundingRectangle(),c=1;cb.bottomRight.x&&(b.bottomRight.x=d.bottomRight.x);d.topLeft.yb.bottomRight.y&&(b.bottomRight.y=d.bottomRight.y)}return{x:b.topLeft.x,y:b.topLeft.y,width:b.bottomRight.x- b.topLeft.x,height:b.bottomRight.y-b.topLeft.y}};Blockly.WorkspaceSvg.prototype.cleanUp=function(){Blockly.Events.setGroup(!0);for(var a=this.getTopBlocks(!0),b=0,c=0,d;d=a[c];c++){var e=d.getRelativeToSurfaceXY();d.moveBy(-e.x,b-e.y);d.snapToGrid();b=d.getRelativeToSurfaceXY().y+d.getHeightWidth().height+Blockly.BlockSvg.MIN_BLOCK_Y}Blockly.Events.setGroup(!1);this.resizeContents()}; -Blockly.WorkspaceSvg.prototype.showContextMenu_=function(a){function b(a){if(a.isDeletable())m=m.concat(a.getDescendants());else{a=a.getChildren();for(var c=0;cm.length?c():Blockly.confirm(Blockly.Msg.DELETE_ALL_BLOCKS.replace("%1",m.length),function(a){a&&c()})}};d.push(g);Blockly.ContextMenu.show(a,d,this.RTL)}}; -Blockly.WorkspaceSvg.prototype.loadAudio_=function(a,b){if(a.length){try{var c=new window.Audio}catch(h){return}for(var d,e=0;ep.length?c():Blockly.confirm(Blockly.Msg.DELETE_ALL_BLOCKS.replace("%1",p.length),function(a){a&& +c()})}};d.push(h);Blockly.ContextMenu.show(a,d,this.RTL)}}; Blockly.WorkspaceSvg.prototype.updateToolbox=function(a){if(a=Blockly.Options.parseToolboxTree(a)){if(!this.options.languageTree)throw"Existing toolbox is null. Can't create new toolbox.";if(a.getElementsByTagName("category").length){if(!this.toolbox_)throw"Existing toolbox has no categories. Can't change mode.";this.options.languageTree=a;var b=this.toolbox_.populate_(a);b?this.toolbox_.tree_.setSelectedItem(b):this.toolbox_.flyout_.hide();this.toolbox_.populate_(a);this.toolbox_.addColour_()}else{if(!this.flyout_)throw"Existing toolbox has categories. Can't change mode."; this.options.languageTree=a;this.flyout_.show(a.childNodes)}}else if(this.options.languageTree)throw"Can't nullify an existing toolbox.";};Blockly.WorkspaceSvg.prototype.markFocused=function(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(Blockly.mainWorkspace=this,this.setBrowserFocus())};Blockly.WorkspaceSvg.prototype.setBrowserFocus=function(){document.activeElement&&document.activeElement.blur();try{this.getParentSvg().focus()}catch(a){try{this.getParentSvg().parentNode.setActive()}catch(b){this.getParentSvg().parentNode.focus()}}}; Blockly.WorkspaceSvg.prototype.zoom=function(a,b,c){var d=this.options.zoomOptions.scaleSpeed,e=this.getMetrics(),f=this.getParentSvg().createSVGPoint();f.x=a;f.y=b;f=f.matrixTransform(this.getCanvas().getCTM().inverse());a=f.x;b=f.y;f=this.getCanvas();d=Math.pow(d,c);c=this.scale*d;c>this.options.zoomOptions.maxScale?d=this.options.zoomOptions.maxScale/this.scale:cthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&athis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&ad.y+e.height&&a.moveBy(0,20-e.height-d.y)}if(this.rootBlock_.workspace==this.workspace_){Blockly.Events.setGroup(!0);a=this.block_;b=(b=a.mutationToDom())&&Blockly.Xml.domToText(b);c=a.rendered;a.rendered=!1;a.compose(this.rootBlock_);a.rendered=c;a.initSvg();c=(c=a.mutationToDom())&& -Blockly.Xml.domToText(c);if(b!=c){Blockly.Events.fire(new Blockly.Events.Change(a,"mutation",null,b,c));var f=Blockly.Events.getGroup();setTimeout(function(){Blockly.Events.setGroup(f);a.bumpNeighbours_();Blockly.Events.setGroup(!1)},Blockly.BUMP_DELAY)}a.rendered&&a.render();this.resizeBubble_();Blockly.Events.setGroup(!1)}};Blockly.Mutator.prototype.getFlyoutMetrics_=function(){return{viewHeight:this.workspaceHeight_,viewWidth:this.workspaceWidth_,absoluteTop:0,absoluteLeft:0}}; +Blockly.Mutator.prototype.workspaceChanged_=function(){var a;if(!this.workspace_.isDragging())for(var b=this.workspace_.getTopBlocks(!1),c=0;a=b[c];c++){var d=a.getRelativeToSurfaceXY(),e=a.getHeightWidth();20>d.y+e.height&&a.moveBy(0,20-e.height-d.y)}if(this.rootBlock_.workspace==this.workspace_){Blockly.Events.setGroup(!0);a=this.block_;b=(b=a.mutationToDom())&&Blockly.Xml.domToText(b);c=a.rendered;a.rendered=!1;a.compose(this.rootBlock_);a.rendered=c;a.initSvg();c=(c=a.mutationToDom())&&Blockly.Xml.domToText(c); +if(b!=c){Blockly.Events.fire(new Blockly.Events.BlockChange(a,"mutation",null,b,c));var f=Blockly.Events.getGroup();setTimeout(function(){Blockly.Events.setGroup(f);a.bumpNeighbours_();Blockly.Events.setGroup(!1)},Blockly.BUMP_DELAY)}a.rendered&&a.render();this.workspace_.isDragging()||this.resizeBubble_();Blockly.Events.setGroup(!1)}};Blockly.Mutator.prototype.getFlyoutMetrics_=function(){return{viewHeight:this.workspaceHeight_,viewWidth:this.workspaceWidth_,absoluteTop:0,absoluteLeft:0}}; Blockly.Mutator.prototype.dispose=function(){this.block_.mutator=null;Blockly.Icon.prototype.dispose.call(this)};Blockly.Mutator.reconnect=function(a,b,c){if(!a||!a.getSourceBlock().workspace)return!1;c=b.getInput(c).connection;var d=a.targetBlock();return d&&d!=b||c.targetConnection==a?!1:(c.isConnected()&&c.disconnect(),c.connect(a),!0)};goog.global.Blockly||(goog.global.Blockly={});goog.global.Blockly.Mutator||(goog.global.Blockly.Mutator={});goog.global.Blockly.Mutator.reconnect=Blockly.Mutator.reconnect;Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon();this.text_={}};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.prototype.collapseHidden=!1; Blockly.Warning.prototype.drawIcon_=function(a){Blockly.utils.createSvgElement("path",{"class":"blocklyIconShape",d:"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z"},a);Blockly.utils.createSvgElement("path",{"class":"blocklyIconSymbol",d:"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z"},a);Blockly.utils.createSvgElement("rect",{"class":"blocklyIconSymbol",x:"7",y:"11",height:"2",width:"2"},a)}; Blockly.Warning.textToDom_=function(a){var b=Blockly.utils.createSvgElement("text",{"class":"blocklyText blocklyBubbleText",y:Blockly.Bubble.BORDER_WIDTH},null);a=a.split("\n");for(var c=0;c=h||h>b.length)throw Error('Block "'+this.type+'": Message index %'+h+" out of range.");if(e[h])throw Error('Block "'+this.type+'": Message index %'+h+" duplicated.");e[h]=!0;f++;a.push(b[h-1])}else(h=h.trim())&&a.push(h)}if(f!=b.length)throw Error('Block "'+this.type+'": Message does not reference all '+b.length+ +" arg(s).");a.length&&("string"==typeof a[a.length-1]||goog.string.startsWith(a[a.length-1].type,"field_"))&&(g={type:"input_dummy"},c&&(g.align=c),a.push(g));c={LEFT:Blockly.ALIGN_LEFT,RIGHT:Blockly.ALIGN_RIGHT,CENTRE:Blockly.ALIGN_CENTRE};b=[];for(g=0;g=b.height&&(k-=f.height);c?f.width>=a.clientX&&(g+=f.width):a.clientX+f.width>=b.width&&(g-=f.width);Blockly.WidgetDiv.position(g,k,b,e,c);d.setAllowAutoFocus(!0); -setTimeout(function(){h.focus()},1);Blockly.ContextMenu.currentBlock=null}else Blockly.ContextMenu.hide()};Blockly.ContextMenu.hide=function(){Blockly.WidgetDiv.hideIfOwner(Blockly.ContextMenu);Blockly.ContextMenu.currentBlock=null}; -Blockly.ContextMenu.callbackFactory=function(a,b){return function(){Blockly.Events.disable();try{var c=Blockly.Xml.domToBlock(b,a.workspace);var d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-Blockly.SNAP_RADIUS:d.x+Blockly.SNAP_RADIUS;d.y+=2*Blockly.SNAP_RADIUS;c.moveBy(d.x,d.y)}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&!c.isShadow()&&Blockly.Events.fire(new Blockly.Events.Create(c));c.select()}};Blockly.RenderedConnection=function(a,b){Blockly.RenderedConnection.superClass_.constructor.call(this,a,b);this.offsetInBlock_=new goog.math.Coordinate(0,0)};goog.inherits(Blockly.RenderedConnection,Blockly.Connection);Blockly.RenderedConnection.prototype.distanceFrom=function(a){var b=this.x_-a.x_;a=this.y_-a.y_;return Math.sqrt(b*b+a*a)}; -Blockly.RenderedConnection.prototype.bumpAwayFrom_=function(a){if(Blockly.dragMode_==Blockly.DRAG_NONE){var b=this.sourceBlock_.getRootBlock();if(!b.isInFlyout){var c=!1;if(!b.isMovable()){b=a.getSourceBlock().getRootBlock();if(!b.isMovable())return;a=this;c=!0}var d=Blockly.selected==b;d||b.addSelect();var e=a.x_+Blockly.SNAP_RADIUS-this.x_;a=a.y_+Blockly.SNAP_RADIUS-this.y_;c&&(a=-a);b.RTL&&(e=-e);b.moveBy(e,a);d||b.removeSelect()}}}; -Blockly.RenderedConnection.prototype.moveTo=function(a,b){this.inDB_&&this.db_.removeConnection_(this);this.x_=a;this.y_=b;this.hidden_||this.db_.addConnection(this)};Blockly.RenderedConnection.prototype.moveBy=function(a,b){this.moveTo(this.x_+a,this.y_+b)};Blockly.RenderedConnection.prototype.moveToOffset=function(a){this.moveTo(a.x+this.offsetInBlock_.x,a.y+this.offsetInBlock_.y)}; -Blockly.RenderedConnection.prototype.setOffsetInBlock=function(a,b){this.offsetInBlock_.x=a;this.offsetInBlock_.y=b};Blockly.RenderedConnection.prototype.tighten_=function(){var a=this.targetConnection.x_-this.x_,b=this.targetConnection.y_-this.y_;if(0!=a||0!=b){var c=this.targetBlock(),d=c.getSvgRoot();if(!d)throw"block is not rendered.";d=Blockly.utils.getRelativeXY(d);c.getSvgRoot().setAttribute("transform","translate("+(d.x-a)+","+(d.y-b)+")");c.moveConnections_(-a,-b)}}; -Blockly.RenderedConnection.prototype.closest=function(a,b,c){return this.dbOpposite_.searchForClosest(this,a,b,c)}; -Blockly.RenderedConnection.prototype.highlight=function(){var a=this.type==Blockly.INPUT_VALUE||this.type==Blockly.OUTPUT_VALUE?"m 0,0 "+Blockly.BlockSvg.TAB_PATH_DOWN+" v 5":"m -20,0 h 5 "+Blockly.BlockSvg.NOTCH_PATH_LEFT+" h 5";var b=this.sourceBlock_.getRelativeToSurfaceXY();Blockly.Connection.highlightedPath_=Blockly.utils.createSvgElement("path",{"class":"blocklyHighlightedConnectionPath",d:a,transform:"translate("+(this.x_-b.x)+","+(this.y_-b.y)+")"+(this.sourceBlock_.RTL?" scale(-1 1)":"")}, -this.sourceBlock_.getSvgRoot())}; -Blockly.RenderedConnection.prototype.unhideAll=function(){this.setHidden(!1);var a=[];if(this.type!=Blockly.INPUT_VALUE&&this.type!=Blockly.NEXT_STATEMENT)return a;var b=this.targetBlock();if(b){if(b.isCollapsed()){var c=[];b.outputConnection&&c.push(b.outputConnection);b.nextConnection&&c.push(b.nextConnection);b.previousConnection&&c.push(b.previousConnection)}else c=b.getConnections_(!0);for(var d=0;db?!1:Blockly.RenderedConnection.superClass_.isConnectionAllowed.call(this,a)}; -Blockly.RenderedConnection.prototype.disconnectInternal_=function(a,b){Blockly.RenderedConnection.superClass_.disconnectInternal_.call(this,a,b);a.rendered&&a.render();b.rendered&&(b.updateDisabled(),b.render())}; -Blockly.RenderedConnection.prototype.respawnShadow_=function(){var a=this.getSourceBlock(),b=this.getShadowDom();if(a.workspace&&b&&Blockly.Events.recordUndo){Blockly.RenderedConnection.superClass_.respawnShadow_.call(this);b=this.targetBlock();if(!b)throw"Couldn't respawn the shadow block that should exist here.";b.initSvg();b.render(!1);a.rendered&&a.render()}};Blockly.RenderedConnection.prototype.neighbours_=function(a){return this.dbOpposite_.getNeighbours(this,a)}; -Blockly.RenderedConnection.prototype.connect_=function(a){Blockly.RenderedConnection.superClass_.connect_.call(this,a);var b=this.getSourceBlock();a=a.getSourceBlock();b.rendered&&b.updateDisabled();a.rendered&&a.updateDisabled();b.rendered&&a.rendered&&(this.type==Blockly.NEXT_STATEMENT||this.type==Blockly.PREVIOUS_STATEMENT?a.render():b.render())}; -Blockly.RenderedConnection.prototype.onCheckChanged_=function(){this.isConnected()&&!this.checkType_(this.targetConnection)&&((this.isSuperior()?this.targetBlock():this.sourceBlock_).unplug(),this.sourceBlock_.bumpNeighbours_())};Blockly.BlockSvg=function(a,b,c){this.svgGroup_=Blockly.utils.createSvgElement("g",{},null);this.svgPathDark_=Blockly.utils.createSvgElement("path",{"class":"blocklyPathDark",transform:"translate(1,1)"},this.svgGroup_);this.svgPath_=Blockly.utils.createSvgElement("path",{"class":"blocklyPath"},this.svgGroup_);this.svgPathLight_=Blockly.utils.createSvgElement("path",{"class":"blocklyPathLight"},this.svgGroup_);this.svgPath_.tooltip=this;this.rendered=!1;this.useDragSurface_=Blockly.utils.is3dSupported()&& -!!a.blockDragSurface_;Blockly.Tooltip.bindMouseEvents(this.svgPath_);Blockly.BlockSvg.superClass_.constructor.call(this,a,b,c)};goog.inherits(Blockly.BlockSvg,Blockly.Block);Blockly.BlockSvg.prototype.height=0;Blockly.BlockSvg.prototype.width=0;Blockly.BlockSvg.prototype.dragStartXY_=null;Blockly.BlockSvg.INLINE=-1; -Blockly.BlockSvg.prototype.initSvg=function(){goog.asserts.assert(this.workspace.rendered,"Workspace is headless.");for(var a=0,b;b=this.inputList[a];a++)b.init();b=this.getIcons();for(a=0;a=d.height&&(g-=a.height);c?a.width>=b.clientX&&(f+=a.width):b.clientX+a.width>=d.width&&(f-=a.width);Blockly.WidgetDiv.position(f, +g,d,e,c)};Blockly.ContextMenu.hide=function(){Blockly.WidgetDiv.hideIfOwner(Blockly.ContextMenu);Blockly.ContextMenu.currentBlock=null;Blockly.ContextMenu.eventWrapper_&&Blockly.unbindEvent_(Blockly.ContextMenu.eventWrapper_)}; +Blockly.ContextMenu.callbackFactory=function(a,b){return function(){Blockly.Events.disable();try{var c=Blockly.Xml.domToBlock(b,a.workspace);var d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-Blockly.SNAP_RADIUS:d.x+Blockly.SNAP_RADIUS;d.y+=2*Blockly.SNAP_RADIUS;c.moveBy(d.x,d.y)}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&!c.isShadow()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(c));c.select()}};Blockly.BlockSvg=function(a,b,c){this.svgGroup_=Blockly.utils.createSvgElement("g",{},null);this.svgGroup_.translate_="";this.svgPathDark_=Blockly.utils.createSvgElement("path",{"class":"blocklyPathDark",transform:"translate(1,1)"},this.svgGroup_);this.svgPath_=Blockly.utils.createSvgElement("path",{"class":"blocklyPath"},this.svgGroup_);this.svgPathLight_=Blockly.utils.createSvgElement("path",{"class":"blocklyPathLight"},this.svgGroup_);this.svgPath_.tooltip=this;this.rendered=!1;this.useDragSurface_= +Blockly.utils.is3dSupported()&&!!a.blockDragSurface_;Blockly.Tooltip.bindMouseEvents(this.svgPath_);Blockly.BlockSvg.superClass_.constructor.call(this,a,b,c)};goog.inherits(Blockly.BlockSvg,Blockly.Block);Blockly.BlockSvg.prototype.height=0;Blockly.BlockSvg.prototype.width=0;Blockly.BlockSvg.prototype.dragStartXY_=null;Blockly.BlockSvg.INLINE=-1; +Blockly.BlockSvg.prototype.initSvg=function(){goog.asserts.assert(this.workspace.rendered,"Workspace is headless.");for(var a=0,b;b=this.inputList[a];a++)b.init();b=this.getIcons();for(a=0;athis.workspace.remainingCapacity()&&(d.enabled=!1);c.push(d);this.isEditable()&&!this.collapsed_&&this.workspace.options.comments&&(d={enabled:!goog.userAgent.IE},this.comment?(d.text=Blockly.Msg.REMOVE_COMMENT, d.callback=function(){b.setCommentText(null)}):(d.text=Blockly.Msg.ADD_COMMENT,d.callback=function(){b.setCommentText("")}),c.push(d));if(!this.collapsed_)for(d=1;d=a.clientX&&0==a.clientY&&0==a.button)a.stopPropagation();else{var b=this.getRelativeToSurfaceXY(),c=this.workspace.moveDrag(a);if(Blockly.dragMode_==Blockly.DRAG_STICKY&&goog.math.Coordinate.distance(b,c)*this.workspace.scale>Blockly.DRAG_RADIUS){Blockly.dragMode_=Blockly.DRAG_FREE;Blockly.longStop_();this.workspace.setResizesEnabled(!1);var d=!!this.parentBlock_;var e=!Blockly.DRAG_STACK;if(a.altKey||a.ctrlKey||a.metaKey)e= -!e;this.unplug(e);d&&(d=this.getSvgRoot(),d.translate_="translate("+c.x+","+c.y+")",this.disconnectUiEffect());this.setDragging_(!0);this.moveToDragSurface_()}if(Blockly.dragMode_==Blockly.DRAG_FREE){b=goog.math.Coordinate.difference(b,this.dragStartXY_);d=this.getSvgRoot();this.useDragSurface_?this.workspace.blockDragSurface_.translateSurface(c.x,c.y):(d.translate_="translate("+c.x+","+c.y+")",d.setAttribute("transform",d.translate_+d.skew_));for(c=0;cthis.workspace.scale)){var a=this.workspace.getSvgXY(this.svgGroup_);this.outputConnection?(a.x+=(this.RTL?3:-3)*this.workspace.scale,a.y+=13*this.workspace.scale):this.previousConnection&&(a.x+=(this.RTL?-23:23)*this.workspace.scale,a.y+=3*this.workspace.scale);a=Blockly.utils.createSvgElement("circle",{cx:a.x,cy:a.y,r:0,fill:"none",stroke:"#888","stroke-width":10},this.workspace.getParentSvg());Blockly.BlockSvg.connectionUiStep_(a, -new Date,this.workspace.scale)}};Blockly.BlockSvg.connectionUiStep_=function(a,b,c){var d=(new Date-b)/150;1this.workspace.scale)){var a=this.getHeightWidth().height,a=Math.atan(10/a)/Math.PI*180;this.RTL||(a*=-1);Blockly.BlockSvg.disconnectUiStep_(this.svgGroup_,a,new Date)}}; +Blockly.BlockSvg.prototype.connectionUiEffect=function(){this.workspace.getAudioManager().play("click");if(!(1>this.workspace.scale)){var a=this.workspace.getSvgXY(this.svgGroup_);this.outputConnection?(a.x+=(this.RTL?3:-3)*this.workspace.scale,a.y+=13*this.workspace.scale):this.previousConnection&&(a.x+=(this.RTL?-23:23)*this.workspace.scale,a.y+=3*this.workspace.scale);a=Blockly.utils.createSvgElement("circle",{cx:a.x,cy:a.y,r:0,fill:"none",stroke:"#888","stroke-width":10},this.workspace.getParentSvg()); +Blockly.BlockSvg.connectionUiStep_(a,new Date,this.workspace.scale)}};Blockly.BlockSvg.connectionUiStep_=function(a,b,c){var d=(new Date-b)/150;1this.workspace.scale)){var a=this.getHeightWidth().height,a=Math.atan(10/a)/Math.PI*180;this.RTL||(a*=-1);Blockly.BlockSvg.disconnectUiStep_(this.svgGroup_,a,new Date)}}; Blockly.BlockSvg.disconnectUiStep_=function(a,b,c){var d=(new Date-c)/200;1"+a.xml+"").firstChild;this.ids=a.ids}; -Blockly.Events.Create.prototype.run=function(a){var b=Blockly.Workspace.getById(this.workspaceId);if(a)a=goog.dom.createDom("xml"),a.appendChild(this.xml),Blockly.Xml.domToWorkspace(a,b);else{a=0;for(var c;c=this.ids[a];a++){var d=b.getBlockById(c);d?d.dispose(!1,!1):c==this.blockId&&console.warn("Can't uncreate non-existant block: "+c)}}}; -Blockly.Events.Delete=function(a){if(a){if(a.getParent())throw"Connected blocks cannot be deleted.";Blockly.Events.Delete.superClass_.constructor.call(this,a);this.oldXml=a.workspace.rendered?Blockly.Xml.blockToDomWithXY(a):Blockly.Xml.blockToDom(a);this.ids=Blockly.Events.getDescendantIds_(a)}};goog.inherits(Blockly.Events.Delete,Blockly.Events.Abstract);Blockly.Events.Delete.prototype.type=Blockly.Events.DELETE; +Blockly.Events.fromJson=function(a,b){switch(a.type){case Blockly.Events.CREATE:var c=new Blockly.Events.Create(null);break;case Blockly.Events.DELETE:c=new Blockly.Events.Delete(null);break;case Blockly.Events.CHANGE:c=new Blockly.Events.Change(null);break;case Blockly.Events.MOVE:c=new Blockly.Events.Move(null);break;case Blockly.Events.VAR_CREATE:c=new Blockly.Events.VarCreate(null);break;case Blockly.Events.VAR_DELETE:c=new Blockly.Events.VarDelete(null);break;case Blockly.Events.VAR_RENAME:c= +new Blockly.Events.VarRename(null);break;case Blockly.Events.UI:c=new Blockly.Events.Ui(null);break;default:throw"Unknown event type.";}c.fromJson(a);c.workspaceId=b.id;return c};Blockly.Events.Abstract=function(a){a instanceof Blockly.Block?(this.blockId=a.id,this.workspaceId=a.workspace.id):a instanceof Blockly.VariableModel&&(this.workspaceId=a.workspace.id,this.varId=a.getId());this.group=Blockly.Events.group_;this.recordUndo=Blockly.Events.recordUndo}; +Blockly.Events.Abstract.prototype.toJson=function(){var a={type:this.type};this.blockId&&(a.blockId=this.blockId);this.varId&&(a.varId=this.varId);this.group&&(a.group=this.group);return a};Blockly.Events.Abstract.prototype.fromJson=function(a){this.blockId=a.blockId;this.varId=a.varId;this.group=a.group};Blockly.Events.Abstract.prototype.isNull=function(){return!1};Blockly.Events.Abstract.prototype.run=function(a){}; +Blockly.Events.Abstract.prototype.getEventWorkspace_=function(){var a=Blockly.Workspace.getById(this.workspaceId);if(!a)throw Error("Workspace is null. Event must have been generated from real Blockly events.");return a};Blockly.Events.Create=function(a){a&&(Blockly.Events.Create.superClass_.constructor.call(this,a),this.xml=a.workspace.rendered?Blockly.Xml.blockToDomWithXY(a):Blockly.Xml.blockToDom(a),this.ids=Blockly.Events.getDescendantIds_(a))};goog.inherits(Blockly.Events.Create,Blockly.Events.Abstract); +Blockly.Events.BlockCreate=Blockly.Events.Create;Blockly.Events.Create.prototype.type=Blockly.Events.CREATE;Blockly.Events.Create.prototype.toJson=function(){var a=Blockly.Events.Create.superClass_.toJson.call(this);a.xml=Blockly.Xml.domToText(this.xml);a.ids=this.ids;return a};Blockly.Events.Create.prototype.fromJson=function(a){Blockly.Events.Create.superClass_.fromJson.call(this,a);this.xml=Blockly.Xml.textToDom(""+a.xml+"").firstChild;this.ids=a.ids}; +Blockly.Events.Create.prototype.run=function(a){var b=this.getEventWorkspace_();if(a)a=goog.dom.createDom("xml"),a.appendChild(this.xml),Blockly.Xml.domToWorkspace(a,b);else{a=0;for(var c;c=this.ids[a];a++){var d=b.getBlockById(c);d?d.dispose(!1,!1):c==this.blockId&&console.warn("Can't uncreate non-existant block: "+c)}}}; +Blockly.Events.Delete=function(a){if(a){if(a.getParent())throw"Connected blocks cannot be deleted.";Blockly.Events.Delete.superClass_.constructor.call(this,a);this.oldXml=a.workspace.rendered?Blockly.Xml.blockToDomWithXY(a):Blockly.Xml.blockToDom(a);this.ids=Blockly.Events.getDescendantIds_(a)}};goog.inherits(Blockly.Events.Delete,Blockly.Events.Abstract);Blockly.Events.BlockDelete=Blockly.Events.Delete;Blockly.Events.Delete.prototype.type=Blockly.Events.DELETE; Blockly.Events.Delete.prototype.toJson=function(){var a=Blockly.Events.Delete.superClass_.toJson.call(this);a.ids=this.ids;return a};Blockly.Events.Delete.prototype.fromJson=function(a){Blockly.Events.Delete.superClass_.fromJson.call(this,a);this.ids=a.ids}; -Blockly.Events.Delete.prototype.run=function(a){var b=Blockly.Workspace.getById(this.workspaceId);if(a){a=0;for(var c;c=this.ids[a];a++){var d=b.getBlockById(c);d?d.dispose(!1,!1):c==this.blockId&&console.warn("Can't delete non-existant block: "+c)}}else a=goog.dom.createDom("xml"),a.appendChild(this.oldXml),Blockly.Xml.domToWorkspace(a,b)}; -Blockly.Events.Change=function(a,b,c,d,e){a&&(Blockly.Events.Change.superClass_.constructor.call(this,a),this.element=b,this.name=c,this.oldValue=d,this.newValue=e)};goog.inherits(Blockly.Events.Change,Blockly.Events.Abstract);Blockly.Events.Change.prototype.type=Blockly.Events.CHANGE;Blockly.Events.Change.prototype.toJson=function(){var a=Blockly.Events.Change.superClass_.toJson.call(this);a.element=this.element;this.name&&(a.name=this.name);a.newValue=this.newValue;return a}; +Blockly.Events.Delete.prototype.run=function(a){var b=this.getEventWorkspace_();if(a){a=0;for(var c;c=this.ids[a];a++){var d=b.getBlockById(c);d?d.dispose(!1,!1):c==this.blockId&&console.warn("Can't delete non-existant block: "+c)}}else a=goog.dom.createDom("xml"),a.appendChild(this.oldXml),Blockly.Xml.domToWorkspace(a,b)};Blockly.Events.Change=function(a,b,c,d,e){a&&(Blockly.Events.Change.superClass_.constructor.call(this,a),this.element=b,this.name=c,this.oldValue=d,this.newValue=e)}; +goog.inherits(Blockly.Events.Change,Blockly.Events.Abstract);Blockly.Events.BlockChange=Blockly.Events.Change;Blockly.Events.Change.prototype.type=Blockly.Events.CHANGE;Blockly.Events.Change.prototype.toJson=function(){var a=Blockly.Events.Change.superClass_.toJson.call(this);a.element=this.element;this.name&&(a.name=this.name);a.newValue=this.newValue;return a}; Blockly.Events.Change.prototype.fromJson=function(a){Blockly.Events.Change.superClass_.fromJson.call(this,a);this.element=a.element;this.name=a.name;this.newValue=a.newValue};Blockly.Events.Change.prototype.isNull=function(){return this.oldValue==this.newValue}; -Blockly.Events.Change.prototype.run=function(a){var b=Blockly.Workspace.getById(this.workspaceId).getBlockById(this.blockId);if(b)switch(b.mutator&&b.mutator.setVisible(!1),a=a?this.newValue:this.oldValue,this.element){case "field":(b=b.getField(this.name))?(b.callValidator(a),b.setValue(a)):console.warn("Can't set non-existant field: "+this.name);break;case "comment":b.setCommentText(a||null);break;case "collapsed":b.setCollapsed(a);break;case "disabled":b.setDisabled(a);break;case "inline":b.setInputsInline(a); -break;case "mutation":var c="";b.mutationToDom&&(c=(c=b.mutationToDom())&&Blockly.Xml.domToText(c));if(b.domToMutation){a=a||"";var d=Blockly.Xml.textToDom(""+a+"");b.domToMutation(d.firstChild)}Blockly.Events.fire(new Blockly.Events.Change(b,"mutation",null,c,a));break;default:console.warn("Unknown change type: "+this.element)}else console.warn("Can't change non-existant block: "+this.blockId)}; -Blockly.Events.Move=function(a){a&&(Blockly.Events.Move.superClass_.constructor.call(this,a),a=this.currentLocation_(),this.oldParentId=a.parentId,this.oldInputName=a.inputName,this.oldCoordinate=a.coordinate)};goog.inherits(Blockly.Events.Move,Blockly.Events.Abstract);Blockly.Events.Move.prototype.type=Blockly.Events.MOVE; +Blockly.Events.Change.prototype.run=function(a){var b=this.getEventWorkspace_().getBlockById(this.blockId);if(b)switch(b.mutator&&b.mutator.setVisible(!1),a=a?this.newValue:this.oldValue,this.element){case "field":(b=b.getField(this.name))?(b.callValidator(a),b.setValue(a)):console.warn("Can't set non-existant field: "+this.name);break;case "comment":b.setCommentText(a||null);break;case "collapsed":b.setCollapsed(a);break;case "disabled":b.setDisabled(a);break;case "inline":b.setInputsInline(a);break; +case "mutation":var c="";b.mutationToDom&&(c=(c=b.mutationToDom())&&Blockly.Xml.domToText(c));if(b.domToMutation){a=a||"";var d=Blockly.Xml.textToDom(""+a+"");b.domToMutation(d.firstChild)}Blockly.Events.fire(new Blockly.Events.Change(b,"mutation",null,c,a));break;default:console.warn("Unknown change type: "+this.element)}else console.warn("Can't change non-existant block: "+this.blockId)}; +Blockly.Events.Move=function(a){a&&(Blockly.Events.Move.superClass_.constructor.call(this,a),a=this.currentLocation_(),this.oldParentId=a.parentId,this.oldInputName=a.inputName,this.oldCoordinate=a.coordinate)};goog.inherits(Blockly.Events.Move,Blockly.Events.Abstract);Blockly.Events.BlockMove=Blockly.Events.Move;Blockly.Events.Move.prototype.type=Blockly.Events.MOVE; Blockly.Events.Move.prototype.toJson=function(){var a=Blockly.Events.Move.superClass_.toJson.call(this);this.newParentId&&(a.newParentId=this.newParentId);this.newInputName&&(a.newInputName=this.newInputName);this.newCoordinate&&(a.newCoordinate=Math.round(this.newCoordinate.x)+","+Math.round(this.newCoordinate.y));return a}; Blockly.Events.Move.prototype.fromJson=function(a){Blockly.Events.Move.superClass_.fromJson.call(this,a);this.newParentId=a.newParentId;this.newInputName=a.newInputName;a.newCoordinate&&(a=a.newCoordinate.split(","),this.newCoordinate=new goog.math.Coordinate(parseFloat(a[0]),parseFloat(a[1])))};Blockly.Events.Move.prototype.recordNew=function(){var a=this.currentLocation_();this.newParentId=a.parentId;this.newInputName=a.inputName;this.newCoordinate=a.coordinate}; Blockly.Events.Move.prototype.currentLocation_=function(){var a=Blockly.Workspace.getById(this.workspaceId).getBlockById(this.blockId),b={},c=a.getParent();if(c){if(b.parentId=c.id,a=c.getInputWithBlock(a))b.inputName=a.name}else b.coordinate=a.getRelativeToSurfaceXY();return b};Blockly.Events.Move.prototype.isNull=function(){return this.oldParentId==this.newParentId&&this.oldInputName==this.newInputName&&goog.math.Coordinate.equals(this.oldCoordinate,this.newCoordinate)}; -Blockly.Events.Move.prototype.run=function(a){var b=Blockly.Workspace.getById(this.workspaceId),c=b.getBlockById(this.blockId);if(c){var d=a?this.newParentId:this.oldParentId,e=a?this.newInputName:this.oldInputName;a=a?this.newCoordinate:this.oldCoordinate;var f=null;if(d&&(f=b.getBlockById(d),!f)){console.warn("Can't connect to non-existant block: "+d);return}c.getParent()&&c.unplug();if(a)e=c.getRelativeToSurfaceXY(),c.moveBy(a.x-e.x,a.y-e.y);else{var c=c.outputConnection||c.previousConnection; -if(e){if(b=f.getInput(e))var g=b.connection}else c.type==Blockly.PREVIOUS_STATEMENT&&(g=f.nextConnection);g?c.connect(g):console.warn("Can't connect to non-existant input: "+e)}}else console.warn("Can't move non-existant block: "+this.blockId)};Blockly.Events.Ui=function(a,b,c,d){Blockly.Events.Ui.superClass_.constructor.call(this,a);this.element=b;this.oldValue=c;this.newValue=d;this.recordUndo=!1};goog.inherits(Blockly.Events.Ui,Blockly.Events.Abstract);Blockly.Events.Ui.prototype.type=Blockly.Events.UI; -Blockly.Events.Ui.prototype.toJson=function(){var a=Blockly.Events.Ui.superClass_.toJson.call(this);a.element=this.element;void 0!==this.newValue&&(a.newValue=this.newValue);return a};Blockly.Events.Ui.prototype.fromJson=function(a){Blockly.Events.Ui.superClass_.fromJson.call(this,a);this.element=a.element;this.newValue=a.newValue}; -Blockly.Events.disableOrphans=function(a){if(a.type==Blockly.Events.MOVE||a.type==Blockly.Events.CREATE){Blockly.Events.disable();if(a=Blockly.Workspace.getById(a.workspaceId).getBlockById(a.blockId))if(a.getParent()&&!a.getParent().disabled){a=a.getDescendants();for(var b=0,c;c=a[b];b++)c.setDisabled(!1)}else if((a.outputConnection||a.previousConnection)&&Blockly.dragMode_==Blockly.DRAG_NONE){do a.setDisabled(!0),a=a.getNextBlock();while(a)}Blockly.Events.enable()}};Blockly.Msg={};goog.getMsgOrig=goog.getMsg;goog.getMsg=function(a,b){var c=goog.getMsg.blocklyMsgMap[a];c&&(a=Blockly.Msg[c]);return goog.getMsgOrig(a,b)};goog.getMsg.blocklyMsgMap={Today:"TODAY"};Blockly.FieldTextInput=function(a,b){Blockly.FieldTextInput.superClass_.constructor.call(this,a,b)};goog.inherits(Blockly.FieldTextInput,Blockly.Field);Blockly.FieldTextInput.FONTSIZE=11;Blockly.FieldTextInput.prototype.CURSOR="text";Blockly.FieldTextInput.prototype.spellcheck_=!0;Blockly.FieldTextInput.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldTextInput.superClass_.dispose.call(this)}; -Blockly.FieldTextInput.prototype.setValue=function(a){if(null!==a){if(this.sourceBlock_){var b=this.callValidator(a);null!==b&&(a=b)}Blockly.Field.prototype.setValue.call(this,a)}};Blockly.FieldTextInput.prototype.setText=function(a){null!==a&&(a=String(a),a!==this.text_&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.Change(this.sourceBlock_,"field",this.name,this.text_,a)),Blockly.Field.prototype.setText.call(this,a)))}; +Blockly.Events.Move.prototype.run=function(a){var b=this.getEventWorkspace_(),c=b.getBlockById(this.blockId);if(c){var d=a?this.newParentId:this.oldParentId,e=a?this.newInputName:this.oldInputName;a=a?this.newCoordinate:this.oldCoordinate;var f=null;if(d&&(f=b.getBlockById(d),!f)){console.warn("Can't connect to non-existant block: "+d);return}c.getParent()&&c.unplug();if(a)e=c.getRelativeToSurfaceXY(),c.moveBy(a.x-e.x,a.y-e.y);else{var c=c.outputConnection||c.previousConnection;if(e){if(b=f.getInput(e))var g= +b.connection}else c.type==Blockly.PREVIOUS_STATEMENT&&(g=f.nextConnection);g?c.connect(g):console.warn("Can't connect to non-existant input: "+e)}}else console.warn("Can't move non-existant block: "+this.blockId)};Blockly.Events.Ui=function(a,b,c,d){Blockly.Events.Ui.superClass_.constructor.call(this,a);this.element=b;this.oldValue=c;this.newValue=d;this.recordUndo=!1};goog.inherits(Blockly.Events.Ui,Blockly.Events.Abstract);Blockly.Events.Ui.prototype.type=Blockly.Events.UI; +Blockly.Events.Ui.prototype.toJson=function(){var a=Blockly.Events.Ui.superClass_.toJson.call(this);a.element=this.element;void 0!==this.newValue&&(a.newValue=this.newValue);return a};Blockly.Events.Ui.prototype.fromJson=function(a){Blockly.Events.Ui.superClass_.fromJson.call(this,a);this.element=a.element;this.newValue=a.newValue};Blockly.Events.VarCreate=function(a){a&&(Blockly.Events.VarCreate.superClass_.constructor.call(this,a),this.varType=a.type,this.varName=a.name)}; +goog.inherits(Blockly.Events.VarCreate,Blockly.Events.Abstract);Blockly.Events.VarCreate.prototype.type=Blockly.Events.VAR_CREATE;Blockly.Events.VarCreate.prototype.toJson=function(){var a=Blockly.Events.VarCreate.superClass_.toJson.call(this);a.varType=this.varType;a.varName=this.varName;return a};Blockly.Events.VarCreate.prototype.fromJson=function(a){Blockly.Events.VarCreate.superClass_.fromJson.call(this,a);this.varType=a.varType;this.varName=a.varName}; +Blockly.Events.VarCreate.prototype.run=function(a){var b=this.getEventWorkspace_();a?b.createVariable(this.varName,this.varType,this.varId):b.deleteVariableById(this.varId)};Blockly.Events.VarDelete=function(a){a&&(Blockly.Events.VarDelete.superClass_.constructor.call(this,a),this.varType=a.type,this.varName=a.name)};goog.inherits(Blockly.Events.VarDelete,Blockly.Events.Abstract);Blockly.Events.VarDelete.prototype.type=Blockly.Events.VAR_DELETE; +Blockly.Events.VarDelete.prototype.toJson=function(){var a=Blockly.Events.VarDelete.superClass_.toJson.call(this);a.varType=this.varType;a.varName=this.varName;return a};Blockly.Events.VarDelete.prototype.fromJson=function(a){Blockly.Events.VarDelete.superClass_.fromJson.call(this,a);this.varType=a.varType;this.varName=a.varName};Blockly.Events.VarDelete.prototype.run=function(a){var b=this.getEventWorkspace_();a?b.deleteVariableById(this.varId):b.createVariable(this.varName,this.varType,this.varId)}; +Blockly.Events.VarRename=function(a,b){a&&(Blockly.Events.VarRename.superClass_.constructor.call(this,a),this.oldName=a.name,this.newName=b)};goog.inherits(Blockly.Events.VarRename,Blockly.Events.Abstract);Blockly.Events.VarRename.prototype.type=Blockly.Events.VAR_RENAME;Blockly.Events.VarRename.prototype.toJson=function(){var a=Blockly.Events.VarRename.superClass_.toJson.call(this);a.oldName=this.oldName;a.newName=this.newName;return a}; +Blockly.Events.VarRename.prototype.fromJson=function(a){Blockly.Events.VarRename.superClass_.fromJson.call(this,a);this.oldName=a.oldName;this.newName=a.newName};Blockly.Events.VarRename.prototype.run=function(a){var b=this.getEventWorkspace_();a?b.renameVariableById(this.varId,this.newName):b.renameVariableById(this.varId,this.oldName)}; +Blockly.Events.disableOrphans=function(a){if(a.type==Blockly.Events.MOVE||a.type==Blockly.Events.CREATE){Blockly.Events.disable();var b=Blockly.Workspace.getById(a.workspaceId);if(a=b.getBlockById(a.blockId))if(a.getParent()&&!a.getParent().disabled){b=a.getDescendants();a=0;for(var c;c=b[a];a++)c.setDisabled(!1)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabled(!0),a=a.getNextBlock();while(a)}Blockly.Events.enable()}};Blockly.Msg={};goog.getMsgOrig=goog.getMsg;goog.getMsg=function(a,b){var c=goog.getMsg.blocklyMsgMap[a];c&&(a=Blockly.Msg[c]);return goog.getMsgOrig(a,b)};goog.getMsg.blocklyMsgMap={Today:"TODAY"};Blockly.FieldTextInput=function(a,b){Blockly.FieldTextInput.superClass_.constructor.call(this,a,b)};goog.inherits(Blockly.FieldTextInput,Blockly.Field);Blockly.FieldTextInput.FONTSIZE=11;Blockly.FieldTextInput.prototype.CURSOR="text";Blockly.FieldTextInput.prototype.spellcheck_=!0;Blockly.FieldTextInput.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldTextInput.superClass_.dispose.call(this)}; +Blockly.FieldTextInput.prototype.setValue=function(a){if(null!==a){if(this.sourceBlock_){var b=this.callValidator(a);null!==b&&(a=b)}Blockly.Field.prototype.setValue.call(this,a)}};Blockly.FieldTextInput.prototype.setText=function(a){null!==a&&(a=String(a),a!==this.text_&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,this.text_,a)),Blockly.Field.prototype.setText.call(this,a)))}; Blockly.FieldTextInput.prototype.setSpellcheck=function(a){this.spellcheck_=a}; Blockly.FieldTextInput.prototype.showEditor_=function(a){this.workspace_=this.sourceBlock_.workspace;a=a||!1;if(!a&&(goog.userAgent.MOBILE||goog.userAgent.ANDROID||goog.userAgent.IPAD)){var b=this;Blockly.prompt(Blockly.Msg.CHANGE_VALUE_TITLE,this.text_,function(a){b.sourceBlock_&&(a=b.callValidator(a));b.setValue(a)})}else{Blockly.WidgetDiv.show(this,this.sourceBlock_.RTL,this.widgetDispose_());var c=Blockly.WidgetDiv.DIV,d=goog.dom.createDom("INPUT","blocklyHtmlInput");d.setAttribute("spellcheck", this.spellcheck_);var e=Blockly.FieldTextInput.FONTSIZE*this.workspace_.scale+"pt";c.style.fontSize=e;d.style.fontSize=e;Blockly.FieldTextInput.htmlInput_=d;c.appendChild(d);d.value=d.defaultValue=this.text_;d.oldValue_=null;this.validate_();this.resizeEditor_();a||(d.focus(),d.select());d.onKeyDownWrapper_=Blockly.bindEventWithChecks_(d,"keydown",this,this.onHtmlInputKeyDown_);d.onKeyUpWrapper_=Blockly.bindEventWithChecks_(d,"keyup",this,this.onHtmlInputChange_);d.onKeyPressWrapper_=Blockly.bindEventWithChecks_(d, @@ -1599,8 +1638,8 @@ Blockly.FieldAngle.prototype.updateGraph_=function(){if(this.gauge_){var a=Numbe Blockly.FieldAngle.RADIUS;b=Math.abs(Math.floor((b-e)/Math.PI)%2);Blockly.FieldAngle.CLOCKWISE&&(b=1-b);a.push(" l ",f,",",g," A ",Blockly.FieldAngle.RADIUS,",",Blockly.FieldAngle.RADIUS," 0 ",b," ",Number(Blockly.FieldAngle.CLOCKWISE)," ",c,",",d," z")}this.gauge_.setAttribute("d",a.join(""));this.line_.setAttribute("x2",c);this.line_.setAttribute("y2",d)}}; Blockly.FieldAngle.prototype.classValidator=function(a){if(null===a)return null;a=parseFloat(a||0);if(isNaN(a))return null;a%=360;0>a&&(a+=360);a>Blockly.FieldAngle.WRAP&&(a-=360);return String(a)};Blockly.FieldCheckbox=function(a,b){Blockly.FieldCheckbox.superClass_.constructor.call(this,"",b);this.setValue(a)};goog.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.CHECK_CHAR="\u2713";Blockly.FieldCheckbox.prototype.CURSOR="default"; Blockly.FieldCheckbox.prototype.init=function(){if(!this.fieldGroup_){Blockly.FieldCheckbox.superClass_.init.call(this);this.checkElement_=Blockly.utils.createSvgElement("text",{"class":"blocklyText blocklyCheckbox",x:-3,y:14},this.fieldGroup_);var a=document.createTextNode(Blockly.FieldCheckbox.CHECK_CHAR);this.checkElement_.appendChild(a);this.checkElement_.style.display=this.state_?"block":"none"}};Blockly.FieldCheckbox.prototype.getValue=function(){return String(this.state_).toUpperCase()}; -Blockly.FieldCheckbox.prototype.setValue=function(a){a="string"==typeof a?"TRUE"==a.toUpperCase():!!a;this.state_!==a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.Change(this.sourceBlock_,"field",this.name,this.state_,a)),this.state_=a,this.checkElement_&&(this.checkElement_.style.display=a?"block":"none"))};Blockly.FieldCheckbox.prototype.showEditor_=function(){var a=!this.state_;this.sourceBlock_&&(a=this.callValidator(a));null!==a&&this.setValue(String(a).toUpperCase())};Blockly.FieldColour=function(a,b){Blockly.FieldColour.superClass_.constructor.call(this,a,b);this.setText(Blockly.Field.NBSP+Blockly.Field.NBSP+Blockly.Field.NBSP)};goog.inherits(Blockly.FieldColour,Blockly.Field);Blockly.FieldColour.prototype.colours_=null;Blockly.FieldColour.prototype.columns_=0;Blockly.FieldColour.prototype.init=function(){Blockly.FieldColour.superClass_.init.call(this);this.borderRect_.style.fillOpacity=1;this.setValue(this.getValue())};Blockly.FieldColour.prototype.CURSOR="default"; -Blockly.FieldColour.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldColour.superClass_.dispose.call(this)};Blockly.FieldColour.prototype.getValue=function(){return this.colour_};Blockly.FieldColour.prototype.setValue=function(a){this.sourceBlock_&&Blockly.Events.isEnabled()&&this.colour_!=a&&Blockly.Events.fire(new Blockly.Events.Change(this.sourceBlock_,"field",this.name,this.colour_,a));this.colour_=a;this.borderRect_&&(this.borderRect_.style.fill=a)}; +Blockly.FieldCheckbox.prototype.setValue=function(a){a="string"==typeof a?"TRUE"==a.toUpperCase():!!a;this.state_!==a&&(this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,this.state_,a)),this.state_=a,this.checkElement_&&(this.checkElement_.style.display=a?"block":"none"))};Blockly.FieldCheckbox.prototype.showEditor_=function(){var a=!this.state_;this.sourceBlock_&&(a=this.callValidator(a));null!==a&&this.setValue(String(a).toUpperCase())};Blockly.FieldColour=function(a,b){Blockly.FieldColour.superClass_.constructor.call(this,a,b);this.setText(Blockly.Field.NBSP+Blockly.Field.NBSP+Blockly.Field.NBSP)};goog.inherits(Blockly.FieldColour,Blockly.Field);Blockly.FieldColour.prototype.colours_=null;Blockly.FieldColour.prototype.columns_=0;Blockly.FieldColour.prototype.init=function(){Blockly.FieldColour.superClass_.init.call(this);this.borderRect_.style.fillOpacity=1;this.setValue(this.getValue())};Blockly.FieldColour.prototype.CURSOR="default"; +Blockly.FieldColour.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldColour.superClass_.dispose.call(this)};Blockly.FieldColour.prototype.getValue=function(){return this.colour_};Blockly.FieldColour.prototype.setValue=function(a){this.sourceBlock_&&Blockly.Events.isEnabled()&&this.colour_!=a&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name,this.colour_,a));this.colour_=a;this.borderRect_&&(this.borderRect_.style.fill=a)}; Blockly.FieldColour.prototype.getText=function(){var a=this.colour_,b=a.match(/^#(.)\1(.)\2(.)\3$/);b&&(a="#"+b[1]+b[2]+b[3]);return a};Blockly.FieldColour.COLOURS=goog.ui.ColorPicker.SIMPLE_GRID_COLORS;Blockly.FieldColour.COLUMNS=7;Blockly.FieldColour.prototype.setColours=function(a){this.colours_=a;return this};Blockly.FieldColour.prototype.setColumns=function(a){this.columns_=a;return this}; Blockly.FieldColour.prototype.showEditor_=function(){Blockly.WidgetDiv.show(this,this.sourceBlock_.RTL,Blockly.FieldColour.widgetDispose_);var a=new goog.ui.ColorPicker;a.setSize(this.columns_||Blockly.FieldColour.COLUMNS);a.setColors(this.colours_||Blockly.FieldColour.COLOURS);var b=goog.dom.getViewportSize(),c=goog.style.getViewportPageOffset(document),d=this.getAbsoluteXY_(),e=this.getScaledBBox_();a.render(Blockly.WidgetDiv.DIV);a.setSelectedColor(this.getValue());var f=goog.style.getSize(a.getElement()); d.y=d.y+f.height+e.height>=b.height+c.y?d.y-(f.height-1):d.y+(e.height-1);this.sourceBlock_.RTL?(d.x+=e.width,d.x-=f.width,d.xb.width+c.x-f.width&&(d.x=b.width+c.x-f.width);Blockly.WidgetDiv.position(d.x,d.y,b,c,this.sourceBlock_.RTL);var g=this;Blockly.FieldColour.changeEventKey_=goog.events.listen(a,goog.ui.ColorPicker.EventType.CHANGE,function(a){a=a.target.getSelectedColor()||"#000000";Blockly.WidgetDiv.hide();g.sourceBlock_&&(a=g.callValidator(a));null!==a&&g.setValue(a)})}; @@ -1612,27 +1651,29 @@ e=this.getScaledBBox_();b.render(Blockly.WidgetDiv.DIV);g=b.getElement();Blockly b.setAllowAutoFocus(!0);g.focus()};Blockly.FieldDropdown.prototype.onItemSelected=function(a,b){var c=b.getValue();this.sourceBlock_&&(c=this.callValidator(c));null!==c&&this.setValue(c)}; Blockly.FieldDropdown.prototype.trimOptions_=function(){this.suffixField=this.prefixField=null;var a=this.menuGenerator_;if(goog.isArray(a)){for(var b=!1,c=0;ca.length)){for(var e=[],c=0;c'+b[0]+"",d=Blockly.Xml.textToDom(d).firstChild,c.push(d)),Blockly.Blocks.math_change&&(a=Blockly.Blocks.variables_get?20:8,d=''+b[0]+'1',d=Blockly.Xml.textToDom(d).firstChild,c.push(d)),a=0;a'+ -b[a]+"",d=Blockly.Xml.textToDom(d).firstChild,c.push(d));return c};Blockly.Variables.generateUniqueName=function(a){a=a.variableList;var b="";if(a.length)for(var c=1,d=0,e="ijkmnopqrstuvwxyzabcdefgh".charAt(d);!b;){for(var f=!1,g=0;g'+Blockly.Variables.generateVariableFieldXml_(c)+"";d=Blockly.Xml.textToDom(d).firstChild;b.push(d)}Blockly.Blocks.math_change&&(d=Blockly.Blocks.variables_get?20:8,d=''+ +Blockly.Variables.generateVariableFieldXml_(c)+'1',d=Blockly.Xml.textToDom(d).firstChild,b.push(d));for(c=0;d=a[c];c++)Blockly.Blocks.variables_get&&(d=''+Blockly.Variables.generateVariableFieldXml_(d)+"",d=Blockly.Xml.textToDom(d).firstChild,b.push(d))}return b}; +Blockly.Variables.generateUniqueName=function(a){a=a.getAllVariables();var b="";if(a.length)for(var c=1,d=0,e="ijkmnopqrstuvwxyzabcdefgh".charAt(d);!b;){for(var f=!1,g=0;g'+a.name+""};Blockly.FieldVariable=function(a,b){Blockly.FieldVariable.superClass_.constructor.call(this,Blockly.FieldVariable.dropdownCreate,b);this.setValue(a||"")};goog.inherits(Blockly.FieldVariable,Blockly.FieldDropdown);Blockly.FieldVariable.prototype.init=function(){this.fieldGroup_||(Blockly.FieldVariable.superClass_.init.call(this),this.initModel())}; Blockly.FieldVariable.prototype.initModel=function(){this.getValue()||this.setValue(Blockly.Variables.generateUniqueName(this.sourceBlock_.isInFlyout?this.sourceBlock_.workspace.targetWorkspace:this.sourceBlock_.workspace));this.sourceBlock_.isInFlyout||this.sourceBlock_.workspace.createVariable(this.getValue())}; Blockly.FieldVariable.prototype.setSourceBlock=function(a){goog.asserts.assert(!a.isShadow(),"Variable fields are not allowed to exist on shadow blocks.");Blockly.FieldVariable.superClass_.setSourceBlock.call(this,a)};Blockly.FieldVariable.prototype.getValue=function(){return this.getText()}; -Blockly.FieldVariable.prototype.setValue=function(a){this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.Change(this.sourceBlock_,"field",this.name,this.value_,a));this.value_=a;this.setText(a)}; -Blockly.FieldVariable.dropdownCreate=function(){var a=this.sourceBlock_&&this.sourceBlock_.workspace?this.sourceBlock_.workspace.variableList.slice(0):[];var b=this.getText();b&&-1==a.indexOf(b)&&a.push(b);a.sort(goog.string.caseInsensitiveCompare);this.renameVarItemIndex_=a.length;a.push(Blockly.Msg.RENAME_VARIABLE);this.deleteVarItemIndex_=a.length;a.push(Blockly.Msg.DELETE_VARIABLE.replace("%1",b));for(var b=[],c=0;cb.contentWidth-b.viewWidth)){var c=a.clientX-this.startDragMouseX_;this.startDragMouseX_=a.clientX;a=b.viewLeft-c;a=goog.math.clamp(a,0,b.contentWidth-b.viewWidth);this.scrollbar_.set(a)}}else 0>b.contentHeight-b.viewHeight||(c=a.clientY-this.startDragMouseY_,this.startDragMouseY_=a.clientY,a=b.viewTop-c,a=goog.math.clamp(a,0,b.contentHeight-b.viewHeight),this.scrollbar_.set(a))}; -Blockly.Flyout.prototype.onMouseMoveBlock_=function(a){"mousemove"==a.type&&1>=a.clientX&&0==a.clientY&&0==a.button||(this.determineDragIntention_(a.clientX-Blockly.Flyout.startDownEvent_.clientX,a.clientY-Blockly.Flyout.startDownEvent_.clientY)?(Blockly.longStop_(),this.createBlockFunc_(Blockly.Flyout.startBlock_)(Blockly.Flyout.startDownEvent_)):this.dragMode_==Blockly.DRAG_FREE&&(Blockly.longStop_(),this.onMouseMove_(a)));a.stopPropagation()}; -Blockly.Flyout.prototype.determineDragIntention_=function(a,b){if(this.dragMode_==Blockly.DRAG_FREE)return!1;if(Math.sqrt(a*a+b*b)90-d||c>-90-d&&c<-90+d)return!0}else if(c-d||c<-180+d||c>180-d)return!0;return!1}; -Blockly.Flyout.prototype.createBlockFunc_=function(a){var b=this;return function(c){if(!Blockly.utils.isRightButton(c)&&!a.disabled){Blockly.Events.disable();b.targetWorkspace_.setResizesEnabled(!1);try{var d=b.placeNewBlock_(a)}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&(Blockly.Events.setGroup(!0),Blockly.Events.fire(new Blockly.Events.Create(d)));b.autoClose?b.hide():b.filterForCapacity_();if(goog.userAgent.IE||goog.userAgent.EDGE)for(var e=d.getDescendants(),f=e.length-1;0<=f;f--)e[f].render(!1); -d.onMouseDown_(c);Blockly.dragMode_=Blockly.DRAG_FREE;d.setDragging_(!0);d.moveToDragSurface_()}}}; -Blockly.Flyout.prototype.placeNewBlock_=function(a){var b=this.targetWorkspace_;var c=a.getSvgRoot();if(!c)throw"originBlock is not rendered.";c=b.isMutator?this.workspace_.getSvgXY(c):Blockly.utils.getInjectionDivXY_(c);var d=this.workspace_.scrollX;var e=this.workspace_.scale;c.x+=d/e-d;this.toolboxPosition_==Blockly.TOOLBOX_AT_RIGHT&&(d=b.getMetrics().viewWidth-this.width_,e=b.scale,c.x+=d/e-d);d=this.workspace_.scrollY;e=this.workspace_.scale;c.y+=d/e-d;this.toolboxPosition_==Blockly.TOOLBOX_AT_BOTTOM&& -(d=b.getMetrics().viewHeight-this.height_,e=b.scale,c.y+=d/e-d);a=Blockly.Xml.blockToDom(a);a=Blockly.Xml.domToBlock(a,b);e=a.getSvgRoot();if(!e)throw"block is not rendered.";e=b.isMutator?b.getSvgXY(e):Blockly.utils.getInjectionDivXY_(e);e.x+=b.scrollX/b.scale-b.scrollX;e.y+=b.scrollY/b.scale-b.scrollY;b.toolbox_&&!b.scrollbar&&(e.x+=b.toolbox_.getWidth()/b.scale,e.y+=b.toolbox_.getHeight()/b.scale);a.moveBy(c.x-e.x,c.y-e.y);return a}; -Blockly.Flyout.prototype.filterForCapacity_=function(){for(var a=this.targetWorkspace_.remainingCapacity(),b=this.workspace_.getTopBlocks(!1),c=0,d;d=b[c];c++)if(-1==this.permanentlyDisabled_.indexOf(d)){var e=d.getDescendants();d.setDisabled(e.length>a)}}; -Blockly.Flyout.prototype.getClientRect=function(){if(!this.svgGroup_)return null;var a=this.svgGroup_.getBoundingClientRect(),b=a.left,c=a.top,d=a.width,a=a.height;return this.toolboxPosition_==Blockly.TOOLBOX_AT_TOP?new goog.math.Rect(-1E9,c-1E9,2E9,1E9+a):this.toolboxPosition_==Blockly.TOOLBOX_AT_BOTTOM?new goog.math.Rect(-1E9,c,2E9,1E9+a):this.toolboxPosition_==Blockly.TOOLBOX_AT_LEFT?new goog.math.Rect(b-1E9,-1E9,1E9+d,2E9):new goog.math.Rect(b,-1E9,1E9+d,2E9)}; -Blockly.Flyout.terminateDrag_=function(){Blockly.Flyout.startFlyout_&&(Blockly.Flyout.startFlyout_.dragMode_==Blockly.DRAG_FREE&&Blockly.Touch.clearTouchIdentifier(),Blockly.Flyout.startFlyout_.dragMode_=Blockly.DRAG_NONE,Blockly.Flyout.startFlyout_=null);Blockly.Flyout.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Flyout.onMouseUpWrapper_),Blockly.Flyout.onMouseUpWrapper_=null);Blockly.Flyout.onMouseMoveBlockWrapper_&&(Blockly.unbindEvent_(Blockly.Flyout.onMouseMoveBlockWrapper_),Blockly.Flyout.onMouseMoveBlockWrapper_= -null);Blockly.Flyout.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Flyout.onMouseMoveWrapper_),Blockly.Flyout.onMouseMoveWrapper_=null);Blockly.Flyout.startDownEvent_=null;Blockly.Flyout.startBlock_=null}; -Blockly.Flyout.prototype.reflowHorizontal=function(a){this.workspace_.scale=this.targetWorkspace_.scale;for(var b=0,c=0,d;d=a[c];c++)b=Math.max(b,d.getHeightWidth().height);b+=1.5*this.MARGIN;b*=this.workspace_.scale;b+=Blockly.Scrollbar.scrollbarThickness;if(this.height_!=b){for(c=0;d=a[c];c++){var e=d.getHeightWidth();if(d.flyoutRect_){d.flyoutRect_.setAttribute("width",e.width);d.flyoutRect_.setAttribute("height",e.height);var f=d.outputConnection?Blockly.BlockSvg.TAB_WIDTH:0,g=d.getRelativeToSurfaceXY(); -d.flyoutRect_.setAttribute("y",g.y);d.flyoutRect_.setAttribute("x",this.RTL?g.x-e.width+f:g.x-f);(e=d.startHat_?Blockly.BlockSvg.START_HAT_HEIGHT:0)&&d.moveBy(0,e);d.flyoutRect_.setAttribute("y",g.y)}}this.height_=b;this.targetWorkspace_.resize()}}; -Blockly.Flyout.prototype.reflowVertical=function(a){this.workspace_.scale=this.targetWorkspace_.scale;for(var b=0,c=0,d;d=a[c];c++){var e=d.getHeightWidth().width;d.outputConnection&&(e-=Blockly.BlockSvg.TAB_WIDTH);b=Math.max(b,e)}for(c=0;d=this.buttons_[c];c++)b=Math.max(b,d.width);b+=1.5*this.MARGIN+Blockly.BlockSvg.TAB_WIDTH;b*=this.workspace_.scale;b+=Blockly.Scrollbar.scrollbarThickness;if(this.width_!=b){for(c=0;d=a[c];c++){e=d.getHeightWidth();if(this.RTL){var f=d.getRelativeToSurfaceXY().x, -g=b/this.workspace_.scale-this.MARGIN,g=g-Blockly.BlockSvg.TAB_WIDTH;d.moveBy(g-f,0)}d.flyoutRect_&&(d.flyoutRect_.setAttribute("width",e.width),d.flyoutRect_.setAttribute("height",e.height),g=d.outputConnection?Blockly.BlockSvg.TAB_WIDTH:0,f=d.getRelativeToSurfaceXY(),d.flyoutRect_.setAttribute("x",this.RTL?f.x-e.width+g:f.x-g),(e=d.startHat_?Blockly.BlockSvg.START_HAT_HEIGHT:0)&&d.moveBy(0,e),d.flyoutRect_.setAttribute("y",f.y))}this.width_=b;this.targetWorkspace_.resize()}}; -Blockly.Flyout.prototype.reflow=function(){this.reflowWrapper_&&this.workspace_.removeChangeListener(this.reflowWrapper_);var a=this.workspace_.getTopBlocks(!1);this.horizontalLayout_?this.reflowHorizontal(a):this.reflowVertical(a);this.reflowWrapper_&&this.workspace_.addChangeListener(this.reflowWrapper_)};Blockly.Toolbox=function(a){this.workspace_=a;this.RTL=a.options.RTL;this.horizontalLayout_=a.options.horizontalLayout;this.toolboxPosition=a.options.toolboxPosition;this.config_={indentWidth:19,cssRoot:"blocklyTreeRoot",cssHideRoot:"blocklyHidden",cssItem:"",cssTreeRow:"blocklyTreeRow",cssItemLabel:"blocklyTreeLabel",cssTreeIcon:"blocklyTreeIcon",cssExpandedFolderIcon:"blocklyTreeIconOpen",cssFileIcon:"blocklyTreeIconNone",cssSelectedRow:"blocklyTreeSelected"};this.treeSeparatorConfig_={cssTreeRow:"blocklyTreeSeparator"}; +"mouseout",b,b.removeSelect))};Blockly.Flyout.prototype.blockMouseDown_=function(a){var b=this;return function(c){var d=b.targetWorkspace_.getGesture(c);d&&(d.setStartBlock(a),d.handleFlyoutStart(c,b))}};Blockly.Flyout.prototype.onMouseDown_=function(a){var b=this.targetWorkspace_.getGesture(a);b&&b.handleFlyoutStart(a,this)}; +Blockly.Flyout.prototype.createBlock=function(a){var b=null;Blockly.Events.disable();this.targetWorkspace_.setResizesEnabled(!1);try{b=this.placeNewBlock_(a);if(goog.userAgent.IE||goog.userAgent.EDGE)for(var c=b.getDescendants(),d=c.length-1;0<=d;d--)c[d].render(!1);Blockly.hideChaff()}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&(Blockly.Events.setGroup(!0),Blockly.Events.fire(new Blockly.Events.Create(b)));this.autoClose?this.hide():this.filterForCapacity_();return b}; +Blockly.Flyout.prototype.initFlyoutButton_=function(a,b,c){var d=a.createDom();a.moveTo(b,c);a.show();this.listeners_.push(Blockly.bindEventWithChecks_(d,"mousedown",this,this.onMouseDown_));this.buttons_.push(a)}; +Blockly.Flyout.prototype.createRect_=function(a,b,c,d,e){b=Blockly.utils.createSvgElement("rect",{"fill-opacity":0,x:b,y:c,height:d.height,width:d.width},null);b.tooltip=a;Blockly.Tooltip.bindMouseEvents(b);this.workspace_.getCanvas().insertBefore(b,a.getSvgRoot());a.flyoutRect_=b;return this.backgroundButtons_[e]=b}; +Blockly.Flyout.prototype.moveRectToBlock_=function(a,b){var c=b.getHeightWidth();a.setAttribute("width",c.width);a.setAttribute("height",c.height);var d=b.startHat_?Blockly.BlockSvg.START_HAT_HEIGHT:0;d&&b.moveBy(0,d);var d=b.outputConnection?Blockly.BlockSvg.TAB_WIDTH:0,e=b.getRelativeToSurfaceXY();a.setAttribute("y",e.y);a.setAttribute("x",this.RTL?e.x-c.width+d:e.x-d)}; +Blockly.Flyout.prototype.filterForCapacity_=function(){for(var a=this.targetWorkspace_.remainingCapacity(),b=this.workspace_.getTopBlocks(!1),c=0,d;d=b[c];c++)if(-1==this.permanentlyDisabled_.indexOf(d)){var e=d.getDescendants();d.setDisabled(e.length>a)}};Blockly.Flyout.prototype.reflow=function(){this.reflowWrapper_&&this.workspace_.removeChangeListener(this.reflowWrapper_);var a=this.workspace_.getTopBlocks(!1);this.reflowInternal_(a);this.reflowWrapper_&&this.workspace_.addChangeListener(this.reflowWrapper_)}; +Blockly.Flyout.prototype.isScrollable=function(){return this.scrollbar_?this.scrollbar_.isVisible():!1};Blockly.HorizontalFlyout=function(a){a.getMetrics=this.getMetrics_.bind(this);a.setMetrics=this.setMetrics_.bind(this);Blockly.HorizontalFlyout.superClass_.constructor.call(this,a);this.horizontalLayout_=!0};goog.inherits(Blockly.HorizontalFlyout,Blockly.Flyout); +Blockly.HorizontalFlyout.prototype.getMetrics_=function(){if(!this.isVisible())return null;try{var a=this.workspace_.getCanvas().getBBox()}catch(e){a={height:0,y:0,width:0,x:0}}var b=this.SCROLLBAR_PADDING,c=this.SCROLLBAR_PADDING;this.toolboxPosition_==Blockly.TOOLBOX_AT_BOTTOM&&(b=0);var d=this.height_;this.toolboxPosition_==Blockly.TOOLBOX_AT_TOP&&(d-=this.SCROLLBAR_PADDING);return{viewHeight:d,viewWidth:this.width_-2*this.SCROLLBAR_PADDING,contentHeight:(a.height+2*this.MARGIN)*this.workspace_.scale, +contentWidth:(a.width+2*this.MARGIN)*this.workspace_.scale,viewTop:-this.workspace_.scrollY,viewLeft:-this.workspace_.scrollX,contentTop:a.y,contentLeft:a.x,absoluteTop:b,absoluteLeft:c}};Blockly.HorizontalFlyout.prototype.setMetrics_=function(a){var b=this.getMetrics_();b&&(goog.isNumber(a.x)&&(this.workspace_.scrollX=-b.contentWidth*a.x),this.workspace_.translate(this.workspace_.scrollX+b.absoluteLeft,this.workspace_.scrollY+b.absoluteTop))}; +Blockly.HorizontalFlyout.prototype.position=function(){if(this.isVisible()){var a=this.targetWorkspace_.getMetrics();if(a){this.width_=a.viewWidth;this.setBackgroundPath_(a.viewWidth-2*this.CORNER_RADIUS,this.height_-this.CORNER_RADIUS);var b=a.absoluteLeft,c=a.absoluteTop;this.toolboxPosition_==Blockly.TOOLBOX_AT_BOTTOM&&(c+=a.viewHeight-this.height_);this.positionAt_(this.width_,this.height_,b,c)}}}; +Blockly.HorizontalFlyout.prototype.setBackgroundPath_=function(a,b){var c=this.toolboxPosition_==Blockly.TOOLBOX_AT_TOP,d=["M 0,"+(c?0:this.CORNER_RADIUS)];c?(d.push("h",a+2*this.CORNER_RADIUS),d.push("v",b),d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push("h",-1*a),d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS), +d.push("h",a),d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push("v",b),d.push("h",-a-2*this.CORNER_RADIUS));d.push("z");this.svgBackground_.setAttribute("d",d.join(" "))};Blockly.HorizontalFlyout.prototype.scrollToStart=function(){this.scrollbar_.set(this.RTL?Infinity:0)}; +Blockly.HorizontalFlyout.prototype.wheel_=function(a){var b=a.deltaX;if(b){goog.userAgent.GECKO&&(b*=10);var c=this.getMetrics_(),b=c.viewLeft+b,b=Math.min(b,c.contentWidth-c.viewWidth),b=Math.max(b,0);this.scrollbar_.set(b);Blockly.WidgetDiv.hide()}a.preventDefault();a.stopPropagation()}; +Blockly.HorizontalFlyout.prototype.layout_=function(a,b){var c;this.workspace_.scale=this.targetWorkspace_.scale;var d=this.MARGIN,e=this.RTL?d:d+Blockly.BlockSvg.TAB_WIDTH;this.RTL&&(a=a.reverse());for(var f=0,g;g=a[f];f++)if("block"==g.type){g=g.block;for(var h=g.getDescendants(),k=0;c=h[k];k++)c.isInFlyout=!0;g.render();h=g.getSvgRoot();k=g.getHeightWidth();c=g.outputConnection?Blockly.BlockSvg.TAB_WIDTH:0;c=this.RTL?e+k.width:e+c;g.moveBy(c,d);c=this.createRect_(g,c,d,k,f);e+=k.width+b[f];this.addBlockListeners_(h, +g,c)}else"button"==g.type&&(this.initFlyoutButton_(g.button,e,d),e+=g.button.width+b[f])};Blockly.HorizontalFlyout.prototype.isDragTowardWorkspace=function(a){a=Math.atan2(a.y,a.x)/Math.PI*180;var b=this.dragAngleRange_;if(this.toolboxPosition_==Blockly.TOOLBOX_AT_TOP){if(a<90+b&&a>90-b)return!0}else if(a>-90-b&&a<-90+b)return!0;return!1}; +Blockly.HorizontalFlyout.prototype.placeNewBlock_=function(a){var b=this.targetWorkspace_;var c=a.getSvgRoot();if(!c)throw"originBlock is not rendered.";c=b.isMutator?this.workspace_.getSvgXY(c):Blockly.utils.getInjectionDivXY_(c);var d=this.workspace_.scrollX;var e=this.workspace_.scale;c.x+=d/e-d;d=this.workspace_.scrollY;e=this.workspace_.scale;c.y+=d/e-d;this.toolboxPosition_==Blockly.TOOLBOX_AT_BOTTOM&&(d=b.getMetrics().viewHeight-this.height_,e=b.scale,c.y+=d/e-d);a=Blockly.Xml.blockToDom(a); +a=Blockly.Xml.domToBlock(a,b);e=a.getSvgRoot();if(!e)throw"block is not rendered.";e=b.isMutator?b.getSvgXY(e):Blockly.utils.getInjectionDivXY_(e);e.x+=b.scrollX/b.scale-b.scrollX;e.y+=b.scrollY/b.scale-b.scrollY;b.toolbox_&&!b.scrollbar&&(e.x+=b.toolbox_.getWidth()/b.scale,e.y+=b.toolbox_.getHeight()/b.scale);a.moveBy(c.x-e.x,c.y-e.y);return a}; +Blockly.HorizontalFlyout.prototype.getClientRect=function(){if(!this.svgGroup_)return null;var a=this.svgGroup_.getBoundingClientRect(),b=a.top,a=a.height;if(this.toolboxPosition_==Blockly.TOOLBOX_AT_TOP)return new goog.math.Rect(-1E9,b-1E9,2E9,1E9+a);if(this.toolboxPosition_==Blockly.TOOLBOX_AT_BOTTOM)return new goog.math.Rect(-1E9,b,2E9,1E9+a)}; +Blockly.HorizontalFlyout.prototype.reflowInternal_=function(a){this.workspace_.scale=this.targetWorkspace_.scale;for(var b=0,c=0,d;d=a[c];c++)b=Math.max(b,d.getHeightWidth().height);b+=1.5*this.MARGIN;b*=this.workspace_.scale;b+=Blockly.Scrollbar.scrollbarThickness;if(this.height_!=b){for(c=0;d=a[c];c++)d.flyoutRect_&&this.moveRectToBlock_(d.flyoutRect_,d);this.height_=b;this.targetWorkspace_.resize()}};Blockly.VerticalFlyout=function(a){a.getMetrics=this.getMetrics_.bind(this);a.setMetrics=this.setMetrics_.bind(this);Blockly.VerticalFlyout.superClass_.constructor.call(this,a);this.horizontalLayout_=!1};goog.inherits(Blockly.VerticalFlyout,Blockly.Flyout); +Blockly.VerticalFlyout.prototype.getMetrics_=function(){if(!this.isVisible())return null;try{var a=this.workspace_.getCanvas().getBBox()}catch(e){a={height:0,y:0,width:0,x:0}}var b=this.SCROLLBAR_PADDING,c=this.height_-2*this.SCROLLBAR_PADDING,d=this.width_;this.RTL||(d-=this.SCROLLBAR_PADDING);return{viewHeight:c,viewWidth:d,contentHeight:a.height*this.workspace_.scale+2*this.MARGIN,contentWidth:a.width*this.workspace_.scale+2*this.MARGIN,viewTop:-this.workspace_.scrollY+a.y,viewLeft:-this.workspace_.scrollX, +contentTop:a.y,contentLeft:a.x,absoluteTop:b,absoluteLeft:0}};Blockly.VerticalFlyout.prototype.setMetrics_=function(a){var b=this.getMetrics_();b&&(goog.isNumber(a.y)&&(this.workspace_.scrollY=-b.contentHeight*a.y),this.workspace_.translate(this.workspace_.scrollX+b.absoluteLeft,this.workspace_.scrollY+b.absoluteTop))}; +Blockly.VerticalFlyout.prototype.position=function(){if(this.isVisible()){var a=this.targetWorkspace_.getMetrics();if(a){this.height_=a.viewHeight;this.setBackgroundPath_(this.width_-this.CORNER_RADIUS,a.viewHeight-2*this.CORNER_RADIUS);var b=a.absoluteTop,c=a.absoluteLeft;this.toolboxPosition_==Blockly.TOOLBOX_AT_RIGHT&&(c+=a.viewWidth-this.width_);this.positionAt_(this.width_,this.height_,c,b)}}}; +Blockly.VerticalFlyout.prototype.setBackgroundPath_=function(a,b){var c=this.toolboxPosition_==Blockly.TOOLBOX_AT_RIGHT,d=a+this.CORNER_RADIUS,d=["M "+(c?d:0)+",0"];d.push("h",c?-a:a);d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,c?0:1,c?-this.CORNER_RADIUS:this.CORNER_RADIUS,this.CORNER_RADIUS);d.push("v",Math.max(0,b));d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,c?0:1,c?this.CORNER_RADIUS:-this.CORNER_RADIUS,this.CORNER_RADIUS);d.push("h",c?a:-a);d.push("z");this.svgBackground_.setAttribute("d", +d.join(" "))};Blockly.VerticalFlyout.prototype.scrollToStart=function(){this.scrollbar_.set(0)};Blockly.VerticalFlyout.prototype.wheel_=function(a){var b=a.deltaY;if(b){goog.userAgent.GECKO&&(b*=10);var c=this.getMetrics_(),b=c.viewTop+b,b=Math.min(b,c.contentHeight-c.viewHeight),b=Math.max(b,0);this.scrollbar_.set(b);Blockly.WidgetDiv.hide()}a.preventDefault();a.stopPropagation()}; +Blockly.VerticalFlyout.prototype.layout_=function(a,b){this.workspace_.scale=this.targetWorkspace_.scale;for(var c=this.MARGIN,d=this.RTL?c:c+Blockly.BlockSvg.TAB_WIDTH,e=0,f;f=a[e];e++)if("block"==f.type){f=f.block;for(var g=f.getDescendants(),h=0,k;k=g[h];h++)k.isInFlyout=!0;f.render();g=f.getSvgRoot();h=f.getHeightWidth();f.moveBy(d,c);k=this.createRect_(f,this.RTL?d-h.width:d,c,h,e);this.addBlockListeners_(g,f,k);c+=h.height+b[e]}else"button"==f.type&&(this.initFlyoutButton_(f.button,d,c),c+= +f.button.height+b[e])};Blockly.VerticalFlyout.prototype.isDragTowardWorkspace=function(a){a=Math.atan2(a.y,a.x)/Math.PI*180;var b=this.dragAngleRange_;if(this.toolboxPosition_==Blockly.TOOLBOX_AT_LEFT){if(a-b)return!0}else if(a<-180+b||a>180-b)return!0;return!1}; +Blockly.VerticalFlyout.prototype.placeNewBlock_=function(a){var b=this.targetWorkspace_;var c=a.getSvgRoot();if(!c)throw"originBlock is not rendered.";c=b.isMutator?this.workspace_.getSvgXY(c):Blockly.utils.getInjectionDivXY_(c);var d=this.workspace_.scrollX;var e=this.workspace_.scale;c.x+=d/e-d;d=b.getMetrics();this.toolboxPosition_==Blockly.TOOLBOX_AT_RIGHT&&(d=d.viewWidth-this.width_,c.x+=d/e-d);d=this.workspace_.scrollY;e=this.workspace_.scale;c.y+=d/e-d;a=Blockly.Xml.blockToDom(a);a=Blockly.Xml.domToBlock(a, +b);e=a.getSvgRoot();if(!e)throw"block is not rendered.";e=b.isMutator?b.getSvgXY(e):Blockly.utils.getInjectionDivXY_(e);e.x+=b.scrollX/b.scale-b.scrollX;e.y+=b.scrollY/b.scale-b.scrollY;b.toolbox_&&!b.scrollbar&&(e.x+=b.toolbox_.getWidth()/b.scale,e.y+=b.toolbox_.getHeight()/b.scale);a.moveBy(c.x-e.x,c.y-e.y);return a}; +Blockly.VerticalFlyout.prototype.getClientRect=function(){if(!this.svgGroup_)return null;var a=this.svgGroup_.getBoundingClientRect(),b=a.left,a=a.width;return this.toolboxPosition_==Blockly.TOOLBOX_AT_LEFT?new goog.math.Rect(b-1E9,-1E9,1E9+a,2E9):new goog.math.Rect(b,-1E9,1E9+a,2E9)}; +Blockly.VerticalFlyout.prototype.reflowInternal_=function(a){this.workspace_.scale=this.targetWorkspace_.scale;for(var b=0,c=0,d;d=a[c];c++){var e=d.getHeightWidth().width;d.outputConnection&&(e-=Blockly.BlockSvg.TAB_WIDTH);b=Math.max(b,e)}for(c=0;d=this.buttons_[c];c++)b=Math.max(b,d.width);b+=1.5*this.MARGIN+Blockly.BlockSvg.TAB_WIDTH;b*=this.workspace_.scale;b+=Blockly.Scrollbar.scrollbarThickness;if(this.width_!=b){for(c=0;d=a[c];c++){if(this.RTL){var e=d.getRelativeToSurfaceXY().x,f=b/this.workspace_.scale- +this.MARGIN,f=f-Blockly.BlockSvg.TAB_WIDTH;d.moveBy(f-e,0)}d.flyoutRect_&&this.moveRectToBlock_(d.flyoutRect_,d)}this.width_=b;this.targetWorkspace_.resize()}};Blockly.Toolbox=function(a){this.workspace_=a;this.RTL=a.options.RTL;this.horizontalLayout_=a.options.horizontalLayout;this.toolboxPosition=a.options.toolboxPosition;this.config_={indentWidth:19,cssRoot:"blocklyTreeRoot",cssHideRoot:"blocklyHidden",cssItem:"",cssTreeRow:"blocklyTreeRow",cssItemLabel:"blocklyTreeLabel",cssTreeIcon:"blocklyTreeIcon",cssExpandedFolderIcon:"blocklyTreeIconOpen",cssFileIcon:"blocklyTreeIconNone",cssSelectedRow:"blocklyTreeSelected"};this.treeSeparatorConfig_={cssTreeRow:"blocklyTreeSeparator"}; this.horizontalLayout_&&(this.config_.cssTreeRow+=a.RTL?" blocklyHorizontalTreeRtl":" blocklyHorizontalTree",this.treeSeparatorConfig_.cssTreeRow="blocklyTreeSeparatorHorizontal "+(a.RTL?"blocklyHorizontalTreeRtl":"blocklyHorizontalTree"),this.config_.cssTreeIcon="")};Blockly.Toolbox.prototype.width=0;Blockly.Toolbox.prototype.height=0;Blockly.Toolbox.prototype.selectedOption_=null;Blockly.Toolbox.prototype.lastCategory_=null; Blockly.Toolbox.prototype.init=function(){var a=this.workspace_,b=this.workspace_.getParentSvg();this.HtmlDiv=goog.dom.createDom("DIV","blocklyToolboxDiv");this.HtmlDiv.setAttribute("dir",a.RTL?"RTL":"LTR");b.parentNode.insertBefore(this.HtmlDiv,b);Blockly.bindEventWithChecks_(this.HtmlDiv,"mousedown",this,function(a){a.target==this.HtmlDiv?Blockly.hideChaff(!1):Blockly.hideChaff(!0);Blockly.Touch.clearTouchIdentifier()},!1,!0);Blockly.bindEventWithChecks_(this.HtmlDiv,"contextmenu",this,Blockly.utils.noEvent); -this.flyout_=new Blockly.Flyout({disabledPatternId:a.options.disabledPatternId,parentWorkspace:a,RTL:a.RTL,oneBasedIndex:a.options.oneBasedIndex,horizontalLayout:a.horizontalLayout,toolboxPosition:a.options.toolboxPosition});goog.dom.insertSiblingAfter(this.flyout_.createDom("svg"),this.workspace_.getParentSvg());this.flyout_.init(a);this.config_.cleardotPath=a.options.pathToMedia+"1x1.gif";this.config_.cssCollapsedFolderIcon="blocklyTreeIconClosed"+(a.RTL?"Rtl":"Ltr");this.tree_=b=new Blockly.Toolbox.TreeControl(this, -this.config_);b.setShowRootNode(!1);b.setShowLines(!1);b.setShowExpandIcons(!1);b.setSelectedItem(null);a=this.populate_(a.options.languageTree);b.render(this.HtmlDiv);a&&b.setSelectedItem(a);this.addColour_();this.position()};Blockly.Toolbox.prototype.dispose=function(){this.flyout_.dispose();this.tree_.dispose();goog.dom.removeNode(this.HtmlDiv);this.lastCategory_=this.workspace_=null};Blockly.Toolbox.prototype.getWidth=function(){return this.width};Blockly.Toolbox.prototype.getHeight=function(){return this.height}; +b={disabledPatternId:a.options.disabledPatternId,parentWorkspace:a,RTL:a.RTL,oneBasedIndex:a.options.oneBasedIndex,horizontalLayout:a.horizontalLayout,toolboxPosition:a.options.toolboxPosition};this.flyout_=null;this.flyout_=a.horizontalLayout?new Blockly.HorizontalFlyout(b):new Blockly.VerticalFlyout(b);goog.dom.insertSiblingAfter(this.flyout_.createDom("svg"),this.workspace_.getParentSvg());this.flyout_.init(a);this.config_.cleardotPath=a.options.pathToMedia+"1x1.gif";this.config_.cssCollapsedFolderIcon= +"blocklyTreeIconClosed"+(a.RTL?"Rtl":"Ltr");this.tree_=b=new Blockly.Toolbox.TreeControl(this,this.config_);b.setShowRootNode(!1);b.setShowLines(!1);b.setShowExpandIcons(!1);b.setSelectedItem(null);a=this.populate_(a.options.languageTree);b.render(this.HtmlDiv);a&&b.setSelectedItem(a);this.addColour_();this.position()};Blockly.Toolbox.prototype.dispose=function(){this.flyout_.dispose();this.tree_.dispose();goog.dom.removeNode(this.HtmlDiv);this.lastCategory_=this.workspace_=null}; +Blockly.Toolbox.prototype.getWidth=function(){return this.width};Blockly.Toolbox.prototype.getHeight=function(){return this.height}; Blockly.Toolbox.prototype.position=function(){var a=this.HtmlDiv;if(a){var b=this.workspace_.getParentSvg(),b=Blockly.svgSize(b);this.horizontalLayout_?(a.style.left="0",a.style.height="auto",a.style.width=b.width+"px",this.height=a.offsetHeight,this.toolboxPosition==Blockly.TOOLBOX_AT_TOP?a.style.top="0":a.style.bottom="0"):(this.toolboxPosition==Blockly.TOOLBOX_AT_RIGHT?a.style.right="0":a.style.left="0",a.style.height=b.height+"px",this.width=a.offsetWidth);this.flyout_.position()}}; Blockly.Toolbox.prototype.populate_=function(a){this.tree_.removeChildren();this.tree_.blocks=[];this.hasColours_=!1;a=this.syncTrees_(a,this.tree_,this.workspace_.options.pathToMedia);if(this.tree_.blocks.length)throw"Toolbox cannot have both blocks and categories in the root level.";this.workspace_.resizeContents();return a}; Blockly.Toolbox.prototype.syncTrees_=function(a,b,c){for(var d=null,e=null,f=0,g;g=a.childNodes[f];f++)if(g.tagName)switch(g.tagName.toUpperCase()){case "CATEGORY":e=Blockly.utils.replaceMessageReferences(g.getAttribute("name"));e=this.tree_.createNode(e);e.blocks=[];b.add(e);var h=g.getAttribute("custom");h?e.blocks=h:(h=this.syncTrees_(g,e,c))&&(d=h);h=Blockly.utils.replaceMessageReferences(g.getAttribute("colour"));goog.isString(h)?(h.match(/^#[0-9a-fA-F]{6}$/)?e.hexColour=h:e.hexColour=Blockly.hueToRgb(h), @@ -1733,56 +1773,56 @@ Blockly.Toolbox.TreeSeparator=function(a){Blockly.Toolbox.TreeNode.call(this,nul "mouseenter",e,function(a){this.isSelected()||(this.getRowElement().style.background=Blockly.PXTUtils.fadeColour(this.hexColour||"#ddd",m,!1))}),Blockly.bindEvent_(e.getRowElement(),"mouseleave",e,function(a){this.isSelected()||(this.getRowElement().style.background=this.hexColour||"#ddd")}))}}else n.border&&(a=this.hasColours_?"8px solid "+(e.hexColour||"#ddd"):"none",this.workspace_.RTL?l.style.borderRight=a:l.style.borderLeft=a),n.colour&&this.hasColours_&&(l.style.color=e.hexColour||"#000");e.disabled&& (l.style.opacity=n.disabledOpacity)}this.addColour_(e)}};return b}(Blockly.Toolbox);a.PXTToolbox=b})(pxtblocky||(pxtblocky={}));Blockly.Toolbox=pxtblocky.PXTToolbox;Blockly.Css={};Blockly.Css.Cursor={OPEN:"handopen",CLOSED:"handclosed",DELETE:"handdelete"};Blockly.Css.currentCursor_="";Blockly.Css.styleSheet_=null;Blockly.Css.mediaPath_=""; Blockly.Css.inject=function(a,b){if(!Blockly.Css.styleSheet_){var c=".blocklyDraggable {}\n";a&&(c+=Blockly.Css.CONTENT.join("\n"),Blockly.FieldDate&&(c+=Blockly.FieldDate.CSS.join("\n")));Blockly.Css.mediaPath_=b.replace(/[\\\/]$/,"");var c=c.replace(/<<>>/g,Blockly.Css.mediaPath_),d=document.createElement("style");document.head.insertBefore(d,document.head.firstChild);c=document.createTextNode(c);d.appendChild(c);Blockly.Css.styleSheet_=d.sheet}};Blockly.Css.setCursor=function(a){console.warn("Deprecated call to Blockly.Css.setCursor.See https://github.com/google/blockly/issues/981 for context")}; -Blockly.Css.CONTENT=[".blocklySvg {","background-color: #fff;","outline: none;","overflow: hidden;","position: absolute;","display: block;","}",".blocklyWidgetDiv {","display: none;","position: absolute;","z-index: 99999;","}",".injectionDiv {","height: 100%;","position: relative;","overflow: hidden;","}",".blocklyNonSelectable {","user-select: none;","-moz-user-select: none;","-webkit-user-select: none;","-ms-user-select: none;","}",".blocklyWsDragSurface {","display: none;","position: absolute;", -"overflow: visible;","top: 0;","left: 0;","}",".blocklyBlockDragSurface {","display: none;","position: absolute;","top: 0;","left: 0;","right: 0;","bottom: 0;","overflow: visible !important;","z-index: 50;","}",".blocklyTooltipDiv {","background-color: #ffffc7;","border: 1px solid #ddc;","box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);","color: #000;","display: none;","font-family: sans-serif;","font-size: 9pt;","opacity: 0.9;","padding: 2px;","position: absolute;","z-index: 100000;","}",".blocklyResizeSE {", -"cursor: se-resize;","fill: #aaa;","}",".blocklyResizeSW {","cursor: sw-resize;","fill: #aaa;","}",".blocklyResizeLine {","stroke: #888;","stroke-width: 1;","}",".blocklyHighlightedConnectionPath {","fill: none;","stroke: #fc3;","stroke-width: 4px;","}",".blocklyPathLight {","fill: none;","stroke-linecap: round;","stroke-width: 1;","}",".blocklySelected>.blocklyPath {","stroke: #fc3;","stroke-width: 3px;","}",".blocklySelected>.blocklyPathLight {","display: none;","}",".blocklyDraggable {",'cursor: url("<<>>/handopen.cur"), auto;', -"cursor: grab;","cursor: -webkit-grab;","cursor: -moz-grab;","}",".blocklyDragging {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","cursor: -moz-grabbing;","}",".blocklyDraggable:active {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","cursor: -moz-grabbing;","}",".blocklyBlockDragSurface .blocklyDraggable {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;", -"cursor: -moz-grabbing;","}",".blocklyDragging.blocklyDraggingDelete {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyToolboxDelete {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyDragging>.blocklyPath,",".blocklyDragging>.blocklyPathLight {","fill-opacity: .8;","stroke-opacity: .8;","}",".blocklyDragging>.blocklyPathDark {","display: none;","}",".blocklyDisabled>.blocklyPath {","fill-opacity: .5;","stroke-opacity: .5;","}",".blocklyDisabled>.blocklyPathLight,", -".blocklyDisabled>.blocklyPathDark {","display: none;","}",".blocklyText {","cursor: default;","fill: #fff;","font-family: sans-serif;","font-size: 11pt;","}",".blocklyNonEditableText>text {","pointer-events: none;","}",".blocklyNonEditableText>rect,",".blocklyEditableText>rect {","fill: #fff;","fill-opacity: .6;","}",".blocklyNonEditableText>text,",".blocklyEditableText>text {","fill: #000;","}",".blocklyEditableText:hover>rect {","stroke: #fff;","stroke-width: 2;","}",".blocklyBubbleText {","fill: #000;", -"}",".blocklyFlyout {","position: absolute;","z-index: 20;","}",".blocklyFlyoutButton {","fill: #888;","cursor: default;","}",".blocklyFlyoutButtonShadow {","fill: #666;","}",".blocklyFlyoutButton:hover {","fill: #aaa;","}",".blocklyFlyoutLabel {","cursor: default;","}",".blocklyFlyoutLabelBackground {","opacity: 0;","}",".blocklyFlyoutLabelText {","fill: #000;","}",".blocklySvg text, .blocklyBlockDragSurface text {","user-select: none;","-moz-user-select: none;","-webkit-user-select: none;","cursor: inherit;", -"}",".blocklyHidden {","display: none;","}",".blocklyFieldDropdown:not(.blocklyHidden) {","display: block;","}",".blocklyIconGroup {","cursor: default;","}",".blocklyIconGroup:not(:hover),",".blocklyIconGroupReadonly {","opacity: .6;","}",".blocklyIconShape {","fill: #00f;","stroke: #fff;","stroke-width: 1px;","}",".blocklyIconSymbol {","fill: #fff;","}",".blocklyMinimalBody {","margin: 0;","padding: 0;","}",".blocklyCommentTextarea {","background-color: #ffc;","border: 0;","margin: 0;","padding: 2px;", -"resize: none;","}",".blocklyHtmlInput {","border: none;","border-radius: 4px;","font-family: sans-serif;","height: 100%;","margin: 0;","outline: none;","padding: 0 1px;","width: 100%","}",".blocklyMainBackground {","stroke-width: 1;","stroke: #c6c6c6;","}",".blocklyMutatorBackground {","fill: #fff;","stroke: #ddd;","stroke-width: 1;","}",".blocklyFlyoutBackground {","fill: #ddd;","fill-opacity: .8;","}",".blocklyMainWorkspaceScrollbar {","z-index: 20;","}",".blocklyFlyoutScrollbar {","z-index: 30;", -"}",".blocklyScrollbarHorizontal, .blocklyScrollbarVertical {","position: absolute;","outline: none;","}",".blocklyScrollbarBackground {","opacity: 0;","}",".blocklyScrollbarHandle {","fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,",".blocklyScrollbarHandle:hover {","fill: #bbb;","}",".blocklyZoom>image {","opacity: .4;","}",".blocklyZoom>image:hover {","opacity: .6;","}",".blocklyZoom>image:active {","opacity: .8;","}",".blocklyFlyout .blocklyScrollbarHandle {","fill: #bbb;", -"}",".blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,",".blocklyFlyout .blocklyScrollbarHandle:hover {","fill: #aaa;","}",".blocklyInvalidInput {","background: #faa;","}",".blocklyAngleCircle {","stroke: #444;","stroke-width: 1;","fill: #ddd;","fill-opacity: .8;","}",".blocklyAngleMarks {","stroke: #444;","stroke-width: 1;","}",".blocklyAngleGauge {","fill: #f88;","fill-opacity: .8;","}",".blocklyAngleLine {","stroke: #f00;","stroke-width: 2;","stroke-linecap: round;","pointer-events: none;", -"}",".blocklyContextMenu {","border-radius: 4px;","}",".blocklyDropdownMenu {","padding: 0 !important;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {","background: url(<<>>/sprites.png) no-repeat -48px -16px !important;","}",".blocklyToolboxDiv {","background-color: #ddd;","overflow-x: visible;","overflow-y: auto;","position: absolute;","z-index: 70;","}",".blocklyTreeRoot {","padding: 4px 0;","}",".blocklyTreeRoot:focus {", -"outline: none;","}",".blocklyTreeRow {","height: 22px;","line-height: 22px;","margin-bottom: 3px;","padding-right: 8px;","white-space: nowrap;","}",".blocklyHorizontalTree {","float: left;","margin: 1px 5px 8px 0;","}",".blocklyHorizontalTreeRtl {","float: right;","margin: 1px 0 8px 5px;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {',"margin-left: 8px;","}",".blocklyTreeRow:not(.blocklyTreeSelected):hover {","background-color: #e4e4e4;","}",".blocklyTreeSeparator {","border-bottom: solid #e5e5e5 1px;", -"height: 0;","margin: 5px 0;","}",".blocklyTreeSeparatorHorizontal {","border-right: solid #e5e5e5 1px;","width: 0;","padding: 5px 0;","margin: 0 5px;","}",".blocklyTreeIcon {","background-image: url(<<>>/sprites.png);","height: 16px;","vertical-align: middle;","width: 16px;","}",".blocklyTreeIconClosedLtr {","background-position: -32px -1px;","}",".blocklyTreeIconClosedRtl {","background-position: 0px -1px;","}",".blocklyTreeIconOpen {","background-position: -16px -1px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedLtr {", -"background-position: -32px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedRtl {","background-position: 0px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconOpen {","background-position: -16px -17px;","}",".blocklyTreeIconNone,",".blocklyTreeSelected>.blocklyTreeIconNone {","background-position: -48px -1px;","}",".blocklyTreeLabel {","cursor: default;","font-family: sans-serif;","font-size: 16px;","padding: 0 3px;","vertical-align: middle;","}",".blocklyTreeSelected .blocklyTreeLabel {", -"color: #fff;","}",".blocklyWidgetDiv .goog-palette {","outline: none;","cursor: default;","}",".blocklyWidgetDiv .goog-palette-table {","border: 1px solid #666;","border-collapse: collapse;","}",".blocklyWidgetDiv .goog-palette-cell {","height: 13px;","width: 15px;","margin: 0;","border: 0;","text-align: center;","vertical-align: middle;","border-right: 1px solid #666;","font-size: 1px;","}",".blocklyWidgetDiv .goog-palette-colorswatch {","position: relative;","height: 13px;","width: 15px;","border: 1px solid #666;", -"}",".blocklyWidgetDiv .goog-palette-cell-hover .goog-palette-colorswatch {","border: 1px solid #FFF;","}",".blocklyWidgetDiv .goog-palette-cell-selected .goog-palette-colorswatch {","border: 1px solid #000;","color: #fff;","}",".blocklyWidgetDiv .goog-menu {","background: #fff;","border-color: #ccc #666 #666 #ccc;","border-style: solid;","border-width: 1px;","cursor: default;","font: normal 13px Arial, sans-serif;","margin: 0;","outline: none;","padding: 4px 0;","position: absolute;","overflow-y: auto;", -"overflow-x: hidden;","max-height: 100%;","z-index: 20000;","}",".blocklyWidgetDiv .goog-menuitem {","color: #000;","font: normal 13px Arial, sans-serif;","list-style: none;","margin: 0;","padding: 4px 7em 4px 28px;","white-space: nowrap;","}",".blocklyWidgetDiv .goog-menuitem.goog-menuitem-rtl {","padding-left: 7em;","padding-right: 28px;","}",".blocklyWidgetDiv .goog-menu-nocheckbox .goog-menuitem,",".blocklyWidgetDiv .goog-menu-noicon .goog-menuitem {","padding-left: 12px;","}",".blocklyWidgetDiv .goog-menu-noaccel .goog-menuitem {", -"padding-right: 20px;","}",".blocklyWidgetDiv .goog-menuitem-content {","color: #000;","font: normal 13px Arial, sans-serif;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-accel,",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {","color: #ccc !important;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-icon {","opacity: 0.3;","-moz-opacity: 0.3;","filter: alpha(opacity=30);","}",".blocklyWidgetDiv .goog-menuitem-highlight,",".blocklyWidgetDiv .goog-menuitem-hover {", -"background-color: #d6e9f8;","border-color: #d6e9f8;","border-style: dotted;","border-width: 1px 0;","padding-bottom: 3px;","padding-top: 3px;","}",".blocklyWidgetDiv .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-icon {","background-repeat: no-repeat;","height: 16px;","left: 6px;","position: absolute;","right: auto;","vertical-align: middle;","width: 16px;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-icon {", -"left: auto;","right: 6px;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {","background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;","}",".blocklyWidgetDiv .goog-menuitem-accel {","color: #999;","direction: ltr;","left: auto;","padding: 0 6px;","position: absolute;","right: 0;","text-align: right;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-accel {","left: 0;","right: auto;", -"text-align: left;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-hint {","text-decoration: underline;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-separator {","color: #999;","font-size: 12px;","padding-left: 4px;","}",".blocklyWidgetDiv .goog-menuseparator {","border-top: 1px solid #ccc;","margin: 4px 0;","padding: 0;","}",".blocklyWidgetDiv .goog-slider-vertical,",".blocklyWidgetDiv .goog-slider-horizontal {","background-color: ThreeDFace;","position: relative;","overflow: hidden;","outline: none;", -"}",".blocklyWidgetDiv .goog-slider-vertical {","height: 150px;","width: 20px;","}",".blocklyWidgetDiv .goog-slider-horizontal {","height: 20px;","width: 150px;","}",".blocklyWidgetDiv .goog-slider-thumb {","position: absolute;","background-color: ThreeDShadow;","overflow: hidden;","}",".blocklyWidgetDiv .goog-slider-vertical .goog-slider-thumb {","left: 0;","height: 15px;","width: 100%;","}",".blocklyWidgetDiv .goog-slider-horizontal .goog-slider-thumb {","top: 0;","width: 15px;","height: 100%;", -"}",".blocklyHighlighted>.blocklyPath {","stroke: #ff8b27;","stroke-width: 5px;","}",".blocklyDisabled>.blocklyPathDark {","display: block !important;","fill-opacity: 0.5;","}",""];Blockly.WidgetDiv={};Blockly.WidgetDiv.DIV=null;Blockly.WidgetDiv.owner_=null;Blockly.WidgetDiv.dispose_=null;Blockly.WidgetDiv.createDom=function(){Blockly.WidgetDiv.DIV||(Blockly.WidgetDiv.DIV=goog.dom.createDom("DIV","blocklyWidgetDiv"),document.body.appendChild(Blockly.WidgetDiv.DIV))}; +Blockly.Css.CONTENT=[".blocklySvg {","background-color: #fff;","outline: none;","overflow: hidden;","position: absolute;","display: block;","}",".blocklyWidgetDiv {","display: none;","position: absolute;","z-index: 99999;","}",".injectionDiv {","height: 100%;","position: relative;","overflow: hidden;","touch-action: none","}",".blocklyNonSelectable {","user-select: none;","-moz-user-select: none;","-webkit-user-select: none;","-ms-user-select: none;","}",".blocklyWsDragSurface {","display: none;", +"position: absolute;","overflow: visible;","top: 0;","left: 0;","}",".blocklyBlockDragSurface {","display: none;","position: absolute;","top: 0;","left: 0;","right: 0;","bottom: 0;","overflow: visible !important;","z-index: 50;","}",".blocklyTooltipDiv {","background-color: #ffffc7;","border: 1px solid #ddc;","box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);","color: #000;","display: none;","font-family: sans-serif;","font-size: 9pt;","opacity: 0.9;","padding: 2px;","position: absolute;","z-index: 100000;", +"}",".blocklyResizeSE {","cursor: se-resize;","fill: #aaa;","}",".blocklyResizeSW {","cursor: sw-resize;","fill: #aaa;","}",".blocklyResizeLine {","stroke: #888;","stroke-width: 1;","}",".blocklyHighlightedConnectionPath {","fill: none;","stroke: #fc3;","stroke-width: 4px;","}",".blocklyPathLight {","fill: none;","stroke-linecap: round;","stroke-width: 1;","}",".blocklySelected>.blocklyPath {","stroke: #fc3;","stroke-width: 3px;","}",".blocklySelected>.blocklyPathLight {","display: none;","}",".blocklyDraggable {", +'cursor: url("<<>>/handopen.cur"), auto;',"cursor: grab;","cursor: -webkit-grab;","cursor: -moz-grab;","}",".blocklyDragging {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","cursor: -moz-grabbing;","}",".blocklyDraggable:active {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","cursor: -moz-grabbing;","}",".blocklyBlockDragSurface .blocklyDraggable {",'cursor: url("<<>>/handclosed.cur"), auto;', +"cursor: grabbing;","cursor: -webkit-grabbing;","cursor: -moz-grabbing;","}",".blocklyDragging.blocklyDraggingDelete {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyToolboxDelete {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyDragging>.blocklyPath,",".blocklyDragging>.blocklyPathLight {","fill-opacity: .8;","stroke-opacity: .8;","}",".blocklyDragging>.blocklyPathDark {","display: none;","}",".blocklyDisabled>.blocklyPath {","fill-opacity: .5;","stroke-opacity: .5;", +"}",".blocklyDisabled>.blocklyPathLight,",".blocklyDisabled>.blocklyPathDark {","display: none;","}",".blocklyText {","cursor: default;","fill: #fff;","font-family: sans-serif;","font-size: 11pt;","}",".blocklyNonEditableText>text {","pointer-events: none;","}",".blocklyNonEditableText>rect,",".blocklyEditableText>rect {","fill: #fff;","fill-opacity: .6;","}",".blocklyNonEditableText>text,",".blocklyEditableText>text {","fill: #000;","}",".blocklyEditableText:hover>rect {","stroke: #fff;","stroke-width: 2;", +"}",".blocklyBubbleText {","fill: #000;","}",".blocklyFlyout {","position: absolute;","z-index: 20;","}",".blocklyFlyoutButton {","fill: #888;","cursor: default;","}",".blocklyFlyoutButtonShadow {","fill: #666;","}",".blocklyFlyoutButton:hover {","fill: #aaa;","}",".blocklyFlyoutLabel {","cursor: default;","}",".blocklyFlyoutLabelBackground {","opacity: 0;","}",".blocklyFlyoutLabelText {","fill: #000;","}",".blocklySvg text, .blocklyBlockDragSurface text {","user-select: none;","-moz-user-select: none;", +"-webkit-user-select: none;","cursor: inherit;","}",".blocklyHidden {","display: none;","}",".blocklyFieldDropdown:not(.blocklyHidden) {","display: block;","}",".blocklyIconGroup {","cursor: default;","}",".blocklyIconGroup:not(:hover),",".blocklyIconGroupReadonly {","opacity: .6;","}",".blocklyIconShape {","fill: #00f;","stroke: #fff;","stroke-width: 1px;","}",".blocklyIconSymbol {","fill: #fff;","}",".blocklyMinimalBody {","margin: 0;","padding: 0;","}",".blocklyCommentTextarea {","background-color: #ffc;", +"border: 0;","margin: 0;","padding: 2px;","resize: none;","}",".blocklyHtmlInput {","border: none;","border-radius: 4px;","font-family: sans-serif;","height: 100%;","margin: 0;","outline: none;","padding: 0 1px;","width: 100%","}",".blocklyMainBackground {","stroke-width: 1;","stroke: #c6c6c6;","}",".blocklyMutatorBackground {","fill: #fff;","stroke: #ddd;","stroke-width: 1;","}",".blocklyFlyoutBackground {","fill: #ddd;","fill-opacity: .8;","}",".blocklyTransparentBackground {","opacity: 0;","}", +".blocklyMainWorkspaceScrollbar {","z-index: 20;","}",".blocklyFlyoutScrollbar {","z-index: 30;","}",".blocklyScrollbarHorizontal, .blocklyScrollbarVertical {","position: absolute;","outline: none;","}",".blocklyScrollbarBackground {","opacity: 0;","}",".blocklyScrollbarHandle {","fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,",".blocklyScrollbarHandle:hover {","fill: #bbb;","}",".blocklyZoom>image {","opacity: .4;","}",".blocklyZoom>image:hover {","opacity: .6;","}", +".blocklyZoom>image:active {","opacity: .8;","}",".blocklyFlyout .blocklyScrollbarHandle {","fill: #bbb;","}",".blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,",".blocklyFlyout .blocklyScrollbarHandle:hover {","fill: #aaa;","}",".blocklyInvalidInput {","background: #faa;","}",".blocklyAngleCircle {","stroke: #444;","stroke-width: 1;","fill: #ddd;","fill-opacity: .8;","}",".blocklyAngleMarks {","stroke: #444;","stroke-width: 1;","}",".blocklyAngleGauge {","fill: #f88;","fill-opacity: .8;", +"}",".blocklyAngleLine {","stroke: #f00;","stroke-width: 2;","stroke-linecap: round;","pointer-events: none;","}",".blocklyContextMenu {","border-radius: 4px;","}",".blocklyDropdownMenu {","padding: 0 !important;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {","background: url(<<>>/sprites.png) no-repeat -48px -16px !important;","}",".blocklyToolboxDiv {","background-color: #ddd;","overflow-x: visible;", +"overflow-y: auto;","position: absolute;","z-index: 70;","}",".blocklyTreeRoot {","padding: 4px 0;","}",".blocklyTreeRoot:focus {","outline: none;","}",".blocklyTreeRow {","height: 22px;","line-height: 22px;","margin-bottom: 3px;","padding-right: 8px;","white-space: nowrap;","}",".blocklyHorizontalTree {","float: left;","margin: 1px 5px 8px 0;","}",".blocklyHorizontalTreeRtl {","float: right;","margin: 1px 0 8px 5px;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {',"margin-left: 8px;","}",".blocklyTreeRow:not(.blocklyTreeSelected):hover {", +"background-color: #e4e4e4;","}",".blocklyTreeSeparator {","border-bottom: solid #e5e5e5 1px;","height: 0;","margin: 5px 0;","}",".blocklyTreeSeparatorHorizontal {","border-right: solid #e5e5e5 1px;","width: 0;","padding: 5px 0;","margin: 0 5px;","}",".blocklyTreeIcon {","background-image: url(<<>>/sprites.png);","height: 16px;","vertical-align: middle;","width: 16px;","}",".blocklyTreeIconClosedLtr {","background-position: -32px -1px;","}",".blocklyTreeIconClosedRtl {","background-position: 0px -1px;", +"}",".blocklyTreeIconOpen {","background-position: -16px -1px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedLtr {","background-position: -32px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedRtl {","background-position: 0px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconOpen {","background-position: -16px -17px;","}",".blocklyTreeIconNone,",".blocklyTreeSelected>.blocklyTreeIconNone {","background-position: -48px -1px;","}",".blocklyTreeLabel {","cursor: default;","font-family: sans-serif;", +"font-size: 16px;","padding: 0 3px;","vertical-align: middle;","}",".blocklyToolboxDelete .blocklyTreeLabel {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyTreeSelected .blocklyTreeLabel {","color: #fff;","}",".blocklyWidgetDiv .goog-palette {","outline: none;","cursor: default;","}",".blocklyWidgetDiv .goog-palette-table {","border: 1px solid #666;","border-collapse: collapse;","}",".blocklyWidgetDiv .goog-palette-cell {","height: 13px;","width: 15px;","margin: 0;","border: 0;", +"text-align: center;","vertical-align: middle;","border-right: 1px solid #666;","font-size: 1px;","}",".blocklyWidgetDiv .goog-palette-colorswatch {","position: relative;","height: 13px;","width: 15px;","border: 1px solid #666;","}",".blocklyWidgetDiv .goog-palette-cell-hover .goog-palette-colorswatch {","border: 1px solid #FFF;","}",".blocklyWidgetDiv .goog-palette-cell-selected .goog-palette-colorswatch {","border: 1px solid #000;","color: #fff;","}",".blocklyWidgetDiv .goog-menu {","background: #fff;", +"border-color: #ccc #666 #666 #ccc;","border-style: solid;","border-width: 1px;","cursor: default;","font: normal 13px Arial, sans-serif;","margin: 0;","outline: none;","padding: 4px 0;","position: absolute;","overflow-y: auto;","overflow-x: hidden;","max-height: 100%;","z-index: 20000;","}",".blocklyWidgetDiv .goog-menuitem {","color: #000;","font: normal 13px Arial, sans-serif;","list-style: none;","margin: 0;","padding: 4px 7em 4px 28px;","white-space: nowrap;","}",".blocklyWidgetDiv .goog-menuitem.goog-menuitem-rtl {", +"padding-left: 7em;","padding-right: 28px;","}",".blocklyWidgetDiv .goog-menu-nocheckbox .goog-menuitem,",".blocklyWidgetDiv .goog-menu-noicon .goog-menuitem {","padding-left: 12px;","}",".blocklyWidgetDiv .goog-menu-noaccel .goog-menuitem {","padding-right: 20px;","}",".blocklyWidgetDiv .goog-menuitem-content {","color: #000;","font: normal 13px Arial, sans-serif;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-accel,",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {", +"color: #ccc !important;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-icon {","opacity: 0.3;","-moz-opacity: 0.3;","filter: alpha(opacity=30);","}",".blocklyWidgetDiv .goog-menuitem-highlight,",".blocklyWidgetDiv .goog-menuitem-hover {","background-color: #d6e9f8;","border-color: #d6e9f8;","border-style: dotted;","border-width: 1px 0;","padding-bottom: 3px;","padding-top: 3px;","}",".blocklyWidgetDiv .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-icon {","background-repeat: no-repeat;", +"height: 16px;","left: 6px;","position: absolute;","right: auto;","vertical-align: middle;","width: 16px;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-icon {","left: auto;","right: 6px;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {","background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;","}",".blocklyWidgetDiv .goog-menuitem-accel {", +"color: #999;","direction: ltr;","left: auto;","padding: 0 6px;","position: absolute;","right: 0;","text-align: right;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-accel {","left: 0;","right: auto;","text-align: left;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-hint {","text-decoration: underline;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-separator {","color: #999;","font-size: 12px;","padding-left: 4px;","}",".blocklyWidgetDiv .goog-menuseparator {","border-top: 1px solid #ccc;", +"margin: 4px 0;","padding: 0;","}",".blocklyWidgetDiv .goog-slider-vertical,",".blocklyWidgetDiv .goog-slider-horizontal {","background-color: ThreeDFace;","position: relative;","overflow: hidden;","outline: none;","}",".blocklyWidgetDiv .goog-slider-vertical {","height: 150px;","width: 20px;","}",".blocklyWidgetDiv .goog-slider-horizontal {","height: 20px;","width: 150px;","}",".blocklyWidgetDiv .goog-slider-thumb {","position: absolute;","background-color: ThreeDShadow;","overflow: hidden;","}", +".blocklyWidgetDiv .goog-slider-vertical .goog-slider-thumb {","left: 0;","height: 15px;","width: 100%;","}",".blocklyWidgetDiv .goog-slider-horizontal .goog-slider-thumb {","top: 0;","width: 15px;","height: 100%;","}",".blocklyHighlighted>.blocklyPath {","stroke: #ff8b27;","stroke-width: 5px;","}",".blocklyDisabled>.blocklyPathDark {","display: block !important;","fill-opacity: 0.5;","}",""];Blockly.WidgetDiv={};Blockly.WidgetDiv.DIV=null;Blockly.WidgetDiv.owner_=null;Blockly.WidgetDiv.dispose_=null;Blockly.WidgetDiv.createDom=function(){Blockly.WidgetDiv.DIV||(Blockly.WidgetDiv.DIV=goog.dom.createDom("DIV","blocklyWidgetDiv"),document.body.appendChild(Blockly.WidgetDiv.DIV))}; Blockly.WidgetDiv.show=function(a,b,c){Blockly.WidgetDiv.hide();Blockly.WidgetDiv.owner_=a;Blockly.WidgetDiv.dispose_=c;a=goog.style.getViewportPageOffset(document);Blockly.WidgetDiv.DIV.style.top=a.y+"px";Blockly.WidgetDiv.DIV.style.direction=b?"rtl":"ltr";Blockly.WidgetDiv.DIV.style.display="block"}; Blockly.WidgetDiv.hide=function(){Blockly.WidgetDiv.owner_&&(Blockly.WidgetDiv.owner_=null,Blockly.WidgetDiv.DIV.style.display="none",Blockly.WidgetDiv.DIV.style.left="",Blockly.WidgetDiv.DIV.style.top="",Blockly.WidgetDiv.dispose_&&Blockly.WidgetDiv.dispose_(),Blockly.WidgetDiv.dispose_=null,goog.dom.removeChildren(Blockly.WidgetDiv.DIV))};Blockly.WidgetDiv.isVisible=function(){return!!Blockly.WidgetDiv.owner_};Blockly.WidgetDiv.hideIfOwner=function(a){Blockly.WidgetDiv.owner_==a&&Blockly.WidgetDiv.hide()}; -Blockly.WidgetDiv.position=function(a,b,c,d,e){bc.width+d.x&&(a=c.width+d.x):ac.width+d.x&&(a=c.width+d.x):aa.viewHeight+d||a.contentLeft<(b.RTL?a.viewLeft:c)||a.contentLeft+a.contentWidth>(b.RTL?a.viewWidth:a.viewWidth+c))for(var k=e.getTopBlocks(!1),l=0,n;n=k[l];l++){var m=n.getRelativeToSurfaceXY(),q=n.getHeightWidth(),p=d+25-q.height-m.y;0p&&n.moveBy(0,p);p=25+c-m.x-(b.RTL?0:q.width);0m&&n.moveBy(m,0)}}});Blockly.svgResize(e);Blockly.WidgetDiv.createDom();Blockly.Tooltip.createDom(); +{"in":"SourceGraphic",in2:"specOut",operator:"arithmetic",k1:0,k2:1,k3:1,k4:0},f);b.embossFilterId=f.id;f=Blockly.utils.createSvgElement("pattern",{id:"blocklyDisabledPattern"+e,patternUnits:"userSpaceOnUse",width:10,height:10},d);Blockly.utils.createSvgElement("rect",{width:10,height:10,fill:"#aaa"},f);Blockly.utils.createSvgElement("path",{d:"M 0 0 L 10 10 M 10 0 L 0 10",stroke:"#cc0"},f);b.disabledPatternId=f.id;b.gridPattern=Blockly.Grid.createDom(e,b.gridOptions,d);return c}; +Blockly.createMainWorkspace_=function(a,b,c,d){b.parentWorkspace=null;var e=new Blockly.WorkspaceSvg(b,c,d);e.scale=b.zoomOptions.startScale;a.appendChild(e.createDom("blocklyMainBackground"));!b.hasCategories&&b.languageTree&&(c=e.addFlyout_("svg"),Blockly.utils.insertAfter_(c,a));e.translate(0,0);Blockly.mainWorkspace=e;b.readOnly||b.hasScrollbars||e.addChangeListener(function(){if(!e.isDragging()){var a=e.getMetrics(),c=a.viewLeft+a.absoluteLeft,d=a.viewTop+a.absoluteTop;if(a.contentTopa.viewHeight+d||a.contentLeft<(b.RTL?a.viewLeft:c)||a.contentLeft+a.contentWidth>(b.RTL?a.viewWidth:a.viewWidth+c))for(var k=e.getTopBlocks(!1),l=0,m;m=k[l];l++){var n=m.getRelativeToSurfaceXY(),p=m.getHeightWidth(),q=d+25-p.height-n.y;0q&&m.moveBy(0,q);q=25+c-n.x-(b.RTL?0:p.width);0n&&m.moveBy(n,0)}}});Blockly.svgResize(e);Blockly.WidgetDiv.createDom();Blockly.Tooltip.createDom(); return e}; Blockly.init_=function(a){var b=a.options,c=a.getParentSvg();Blockly.bindEventWithChecks_(c.parentNode,"contextmenu",null,function(a){Blockly.utils.isTargetInput(a)||a.preventDefault()});c=Blockly.bindEventWithChecks_(window,"resize",null,function(){Blockly.hideChaff(!0);Blockly.svgResize(a)});a.setResizeHandlerWrapper(c);Blockly.inject.bindDocumentEvents_();b.languageTree&&(a.toolbox_?a.toolbox_.init(a):a.flyout_&&(a.flyout_.init(a),a.flyout_.show(b.languageTree.childNodes),a.flyout_.scrollToStart(),a.scrollX= a.flyout_.width_,b.toolboxPosition==Blockly.TOOLBOX_AT_RIGHT&&(a.scrollX*=-1),a.translate(a.scrollX,0)));b.hasScrollbars&&(a.scrollbar=new Blockly.ScrollbarPair(a),a.scrollbar.resize());b.hasSounds&&Blockly.inject.loadSounds_(b.pathToMedia,a)}; -Blockly.inject.bindDocumentEvents_=function(){Blockly.documentEventsBound_||(Blockly.bindEventWithChecks_(document,"keydown",null,Blockly.onKeyDown_),Blockly.bindEvent_(document,"touchend",null,Blockly.longStop_),Blockly.bindEvent_(document,"touchcancel",null,Blockly.longStop_),document.addEventListener("mouseup",Blockly.onMouseUp_,!1),goog.userAgent.IPAD&&Blockly.bindEventWithChecks_(window,"orientationchange",document,function(){Blockly.svgResize(Blockly.getMainWorkspace())}));Blockly.documentEventsBound_= -!0};Blockly.inject.loadSounds_=function(a,b){b.loadAudio_([a+"click.mp3",a+"click.wav",a+"click.ogg"],"click");b.loadAudio_([a+"disconnect.wav",a+"disconnect.mp3",a+"disconnect.ogg"],"disconnect");b.loadAudio_([a+"delete.mp3",a+"delete.ogg",a+"delete.wav"],"delete");var c=[],d=function(){for(;c.length;)Blockly.unbindEvent_(c.pop());b.preloadAudio_()};c.push(Blockly.bindEventWithChecks_(document,"mousemove",null,d,!0));c.push(Blockly.bindEventWithChecks_(document,"touchstart",null,d,!0))}; -Blockly.updateToolbox=function(a){console.warn("Deprecated call to Blockly.updateToolbox, use workspace.updateToolbox instead.");Blockly.getMainWorkspace().updateToolbox(a)};var CLOSURE_DEFINES={"goog.DEBUG":!1};Blockly.mainWorkspace=null;Blockly.selected=null;Blockly.highlightedConnection_=null;Blockly.localConnection_=null;Blockly.draggingConnections_=[];Blockly.clipboardXml_=null;Blockly.clipboardSource_=null;Blockly.dragMode_=Blockly.DRAG_NONE;Blockly.cache3dSupported_=null;Blockly.hueToRgb=function(a){return goog.color.hsvToHex(a,Blockly.HSV_SATURATION,255*Blockly.HSV_VALUE)};Blockly.svgSize=function(a){return{width:a.cachedWidth_,height:a.cachedHeight_}}; -Blockly.resizeSvgContents=function(a){a.resizeContents()};Blockly.svgResize=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;var b=a.getParentSvg(),c=b.parentNode;if(c){var d=c.offsetWidth,c=c.offsetHeight;b.cachedWidth_!=d&&(b.setAttribute("width",d+"px"),b.cachedWidth_=d);b.cachedHeight_!=c&&(b.setAttribute("height",c+"px"),b.cachedHeight_=c);a.resize()}}; -Blockly.onKeyDown_=function(a){if(!Blockly.mainWorkspace.options.readOnly&&!Blockly.utils.isTargetInput(a)){var b=!1;if(27==a.keyCode)Blockly.hideChaff();else if(8==a.keyCode||46==a.keyCode)a.preventDefault(),Blockly.selected&&Blockly.selected.isDeletable()&&(b=!0);else if(a.altKey||a.ctrlKey||a.metaKey)Blockly.selected&&Blockly.selected.isDeletable()&&Blockly.selected.isMovable()&&(67==a.keyCode?(Blockly.hideChaff(),Blockly.copy_(Blockly.selected)):88==a.keyCode&&(Blockly.copy_(Blockly.selected), -b=!0)),86==a.keyCode?Blockly.clipboardXml_&&(Blockly.Events.setGroup(!0),Blockly.clipboardSource_.paste(Blockly.clipboardXml_),Blockly.Events.setGroup(!1)):90==a.keyCode&&(Blockly.hideChaff(),Blockly.mainWorkspace.undo(a.shiftKey));b&&(Blockly.Events.setGroup(!0),Blockly.hideChaff(),Blockly.selected.dispose(Blockly.dragMode_!=Blockly.DRAG_FREE,!0),Blockly.highlightedConnection_&&(Blockly.highlightedConnection_.unhighlight(),Blockly.highlightedConnection_=null),Blockly.Events.setGroup(!1))}}; -Blockly.terminateDrag_=function(){Blockly.BlockSvg.terminateDrag();Blockly.Flyout.terminateDrag_()};Blockly.copy_=function(a){var b=Blockly.Xml.blockToDom(a);Blockly.dragMode_!=Blockly.DRAG_FREE&&Blockly.Xml.deleteNext(b);var c=a.getRelativeToSurfaceXY();b.setAttribute("x",a.RTL?-c.x:c.x);b.setAttribute("y",c.y);Blockly.clipboardXml_=b;Blockly.clipboardSource_=a.workspace}; -Blockly.duplicate_=function(a){var b=Blockly.clipboardXml_,c=Blockly.clipboardSource_;Blockly.copy_(a);a.workspace.paste(Blockly.clipboardXml_);Blockly.clipboardXml_=b;Blockly.clipboardSource_=c};Blockly.onContextMenu_=function(a){Blockly.utils.isTargetInput(a)||a.preventDefault()};Blockly.hideChaff=function(a){Blockly.Tooltip.hide();Blockly.WidgetDiv.hide();a||(a=Blockly.getMainWorkspace(),a.toolbox_&&a.toolbox_.flyout_&&a.toolbox_.flyout_.autoClose&&a.toolbox_.clearSelection())}; -Blockly.addChangeListener=function(a){console.warn("Deprecated call to Blockly.addChangeListener, use workspace.addChangeListener instead.");return Blockly.getMainWorkspace().addChangeListener(a)};Blockly.getMainWorkspace=function(){return Blockly.mainWorkspace};Blockly.alert=function(a,b){window.alert(a);b&&b()};Blockly.confirm=function(a,b){b(window.confirm(a))};Blockly.prompt=function(a,b,c){c(window.prompt(a,b))};Blockly.jsonInitFactory_=function(a){return function(){this.jsonInit(a)}}; +Blockly.inject.bindDocumentEvents_=function(){Blockly.documentEventsBound_||(Blockly.bindEventWithChecks_(document,"keydown",null,Blockly.onKeyDown_),Blockly.bindEvent_(document,"touchend",null,Blockly.longStop_),Blockly.bindEvent_(document,"touchcancel",null,Blockly.longStop_),goog.userAgent.IPAD&&Blockly.bindEventWithChecks_(window,"orientationchange",document,function(){Blockly.svgResize(Blockly.getMainWorkspace())}));Blockly.documentEventsBound_=!0}; +Blockly.inject.loadSounds_=function(a,b){var c=b.getAudioManager();c.load([a+"click.mp3",a+"click.wav",a+"click.ogg"],"click");c.load([a+"disconnect.wav",a+"disconnect.mp3",a+"disconnect.ogg"],"disconnect");c.load([a+"delete.mp3",a+"delete.ogg",a+"delete.wav"],"delete");var d=[],e=function(){for(;d.length;)Blockly.unbindEvent_(d.pop());c.preload()};d.push(Blockly.bindEventWithChecks_(document,"mousemove",null,e,!0));d.push(Blockly.bindEventWithChecks_(document,"touchstart",null,e,!0))}; +Blockly.updateToolbox=function(a){console.warn("Deprecated call to Blockly.updateToolbox, use workspace.updateToolbox instead.");Blockly.getMainWorkspace().updateToolbox(a)};var CLOSURE_DEFINES={"goog.DEBUG":!1};Blockly.mainWorkspace=null;Blockly.selected=null;Blockly.draggingConnections_=[];Blockly.clipboardXml_=null;Blockly.clipboardSource_=null;Blockly.cache3dSupported_=null;Blockly.hueToRgb=function(a){return goog.color.hsvToHex(a,Blockly.HSV_SATURATION,255*Blockly.HSV_VALUE)};Blockly.svgSize=function(a){return{width:a.cachedWidth_,height:a.cachedHeight_}};Blockly.resizeSvgContents=function(a){a.resizeContents()}; +Blockly.svgResize=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;var b=a.getParentSvg(),c=b.parentNode;if(c){var d=c.offsetWidth,c=c.offsetHeight;b.cachedWidth_!=d&&(b.setAttribute("width",d+"px"),b.cachedWidth_=d);b.cachedHeight_!=c&&(b.setAttribute("height",c+"px"),b.cachedHeight_=c);a.resize()}}; +Blockly.onKeyDown_=function(a){if(!Blockly.mainWorkspace.options.readOnly&&!Blockly.utils.isTargetInput(a)){var b=!1;if(27==a.keyCode)Blockly.hideChaff();else if(8==a.keyCode||46==a.keyCode){a.preventDefault();if(Blockly.mainWorkspace.isDragging())return;Blockly.selected&&Blockly.selected.isDeletable()&&(b=!0)}else if(a.altKey||a.ctrlKey||a.metaKey){if(Blockly.mainWorkspace.isDragging())return;Blockly.selected&&Blockly.selected.isDeletable()&&Blockly.selected.isMovable()&&(67==a.keyCode?(Blockly.hideChaff(), +Blockly.copy_(Blockly.selected)):88==a.keyCode&&(Blockly.copy_(Blockly.selected),b=!0));86==a.keyCode?Blockly.clipboardXml_&&(Blockly.Events.setGroup(!0),Blockly.clipboardSource_.paste(Blockly.clipboardXml_),Blockly.Events.setGroup(!1)):90==a.keyCode&&(Blockly.hideChaff(),Blockly.mainWorkspace.undo(a.shiftKey))}b&&(Blockly.Events.setGroup(!0),Blockly.hideChaff(),Blockly.selected.dispose(!0,!0),Blockly.Events.setGroup(!1))}}; +Blockly.copy_=function(a){var b=Blockly.Xml.blockToDom(a);Blockly.Xml.deleteNext(b);var c=a.getRelativeToSurfaceXY();b.setAttribute("x",a.RTL?-c.x:c.x);b.setAttribute("y",c.y);Blockly.clipboardXml_=b;Blockly.clipboardSource_=a.workspace};Blockly.duplicate_=function(a){var b=Blockly.clipboardXml_,c=Blockly.clipboardSource_;Blockly.copy_(a);a.workspace.paste(Blockly.clipboardXml_);Blockly.clipboardXml_=b;Blockly.clipboardSource_=c}; +Blockly.onContextMenu_=function(a){Blockly.utils.isTargetInput(a)||a.preventDefault()};Blockly.hideChaff=function(a){Blockly.Tooltip.hide();Blockly.WidgetDiv.hide();a||(a=Blockly.getMainWorkspace(),a.toolbox_&&a.toolbox_.flyout_&&a.toolbox_.flyout_.autoClose&&a.toolbox_.clearSelection())};Blockly.addChangeListener=function(a){console.warn("Deprecated call to Blockly.addChangeListener, use workspace.addChangeListener instead.");return Blockly.getMainWorkspace().addChangeListener(a)}; +Blockly.getMainWorkspace=function(){return Blockly.mainWorkspace};Blockly.alert=function(a,b){window.alert(a);b&&b()};Blockly.confirm=function(a,b){b(window.confirm(a))};Blockly.prompt=function(a,b,c){c(window.prompt(a,b))};Blockly.jsonInitFactory_=function(a){return function(){this.jsonInit(a)}}; Blockly.defineBlocksWithJsonArray=function(a){for(var b=0,c;c=a[b];b++){var d=c.type;null==d||""===d?console.warn("Block definition #"+b+" in JSON array is missing a type attribute. Skipping."):(Blockly.Blocks[d]&&console.warn("Block definition #"+b+' in JSON array overwrites prior definition of "'+d+'".'),Blockly.Blocks[d]={init:Blockly.jsonInitFactory_(c)})}}; -Blockly.bindEventWithChecks_=function(a,b,c,d,e,f){var g=!1,h=function(a){var b=!e;a=Blockly.Touch.splitEventByTouches(a);for(var f=0,h;h=a[f];f++)if(!b||Blockly.Touch.shouldHandleEvent(h))Blockly.Touch.setClientFromTouch(h),c?d.call(c,h):d(h),g=!0};a.addEventListener(b,h,!1);var k=[[a,b,h]];if(b in Blockly.Touch.TOUCH_MAP)for(var l=function(a){h(a);var b=!f;g&&b&&a.preventDefault()},n=0,m;m=Blockly.Touch.TOUCH_MAP[b][n];n++)a.addEventListener(m,l,!1),k.push([a,m,l]);return k}; +Blockly.bindEventWithChecks_=function(a,b,c,d,e,f){var g=!1,h=function(a){var b=!e;a=Blockly.Touch.splitEventByTouches(a);for(var f=0,h;h=a[f];f++)if(!b||Blockly.Touch.shouldHandleEvent(h))Blockly.Touch.setClientFromTouch(h),c?d.call(c,h):d(h),g=!0};a.addEventListener(b,h,!1);var k=[[a,b,h]];if(b in Blockly.Touch.TOUCH_MAP)for(var l=function(a){h(a);var b=!f;g&&b&&a.preventDefault()},m=0,n;n=Blockly.Touch.TOUCH_MAP[b][m];m++)a.addEventListener(n,l,!1),k.push([a,n,l]);return k}; Blockly.bindEvent_=function(a,b,c,d){var e=function(a){c?d.call(c,a):d(a)};a.addEventListener(b,e,!1);var f=[[a,b,e]];if(b in Blockly.Touch.TOUCH_MAP)for(var g=function(a){if(1==a.changedTouches.length){var b=a.changedTouches[0];a.clientX=b.clientX;a.clientY=b.clientY}e(a);a.preventDefault()},h=0,k;k=Blockly.Touch.TOUCH_MAP[b][h];h++)a.addEventListener(k,g,!1),f.push([a,k,g]);return f}; Blockly.unbindEvent_=function(a){for(var b;a.length;){b=a.pop();var c=b[0],d=b[1];b=b[2];c.removeEventListener(d,b,!1)}return b};Blockly.isNumber=function(a){return!!a.match(/^\s*-?\d+(\.\d+)?\s*$/)};goog.global.console||(goog.global.console={log:function(){},warn:function(){}});goog.global.Blockly||(goog.global.Blockly={});goog.global.Blockly.getMainWorkspace=Blockly.getMainWorkspace;goog.global.Blockly.addChangeListener=Blockly.addChangeListener; \ No newline at end of file diff --git a/public/pxt/blockly/blocks_compressed.js b/public/pxt/blockly/blocks_compressed.js index 8846346..f343bb3 100644 --- a/public/pxt/blockly/blocks_compressed.js +++ b/public/pxt/blockly/blocks_compressed.js @@ -112,31 +112,20 @@ this.setCollapsed(!1);this.quarkIds_||(this.quarkConnections_={},a.join("\n")==t this.quarkIds_[f],e in this.quarkConnections_&&(c=this.quarkConnections_[e],Blockly.Mutator.reconnect(c,this,"ARG"+f)||delete this.quarkConnections_[e]);(this.rendered=d)&&this.render()}},updateShape_:function(){for(var a=0;a", - "lastupdated": "2017-05-03 12:38:29.522161", + "lastupdated": "2017-06-23 16:08:16.779777", "locale": "en", "messagedocumentation" : "qqq" }, @@ -31,6 +31,7 @@ "NEW_VARIABLE": "Create variable...", "NEW_VARIABLE_TITLE": "New variable name:", "VARIABLE_ALREADY_EXISTS": "A variable named '%1' already exists.", + "PROCEDURE_ALREADY_EXISTS": "A procedure named '%1' already exists.", "DELETE_VARIABLE_CONFIRMATION": "Delete %1 uses of the '%2' variable?", "CANNOT_DELETE_VARIABLE_PROCEDURE": "Can't delete the variable '%1' because it's part of the definition of the function '%2'", "DELETE_VARIABLE": "Delete the '%1' variable", @@ -215,8 +216,7 @@ "TEXT_CREATE_JOIN_TOOLTIP": "Add, remove, or reorder sections to reconfigure this text block.", "TEXT_CREATE_JOIN_ITEM_TOOLTIP": "Add an item to the text.", "TEXT_APPEND_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", - "TEXT_APPEND_TO": "to", - "TEXT_APPEND_APPENDTEXT": "append text", + "TEXT_APPEND_TITLE": "to %1 append text %2", "TEXT_APPEND_TOOLTIP": "Append some text to variable '%1'.", "TEXT_LENGTH_HELPURL": "https://github.com/google/blockly/wiki/Text#text-modification", "TEXT_LENGTH_TITLE": "length of %1", @@ -226,12 +226,11 @@ "TEXT_ISEMPTY_TOOLTIP": "Returns true if the provided text is empty.", "TEXT_INDEXOF_HELPURL": "https://github.com/google/blockly/wiki/Text#finding-text", "TEXT_INDEXOF_TOOLTIP": "Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.", - "TEXT_INDEXOF_INPUT_INTEXT": "in text", + "TEXT_INDEXOF_TITLE": "in text %1 %2 %3", "TEXT_INDEXOF_OPERATOR_FIRST": "find first occurrence of text", "TEXT_INDEXOF_OPERATOR_LAST": "find last occurrence of text", - "TEXT_INDEXOF_TAIL": "", "TEXT_CHARAT_HELPURL": "https://github.com/google/blockly/wiki/Text#extracting-text", - "TEXT_CHARAT_INPUT_INTEXT": "in text", + "TEXT_CHARAT_TITLE": "in text %1 %2", "TEXT_CHARAT_FROM_START": "get letter #", "TEXT_CHARAT_FROM_END": "get letter # from end", "TEXT_CHARAT_FIRST": "get first letter", diff --git a/public/pxt/controller.html b/public/pxt/controller.html index cbbdc28..6f78233 100644 --- a/public/pxt/controller.html +++ b/public/pxt/controller.html @@ -75,6 +75,8 @@ } else if (action == `renderblocks`) { msg.response = true; msg.ts = `control.forever(() => { })` + } else if (action == `toggletrace`) { + msg.intervalSpeed = 1000; } if (msg.response) pendingMsgs[msg.id] = msg; @@ -134,6 +136,7 @@ + diff --git a/public/pxt/custom.css b/public/pxt/custom.css index 741d686..1c1196c 100644 --- a/public/pxt/custom.css +++ b/public/pxt/custom.css @@ -336,7 +336,7 @@ div.blocklyWidgetDiv { display: none; } .monaco-editor-hover { - z-index:1000; + z-index:1000 !important; } #monacoEditorInner { diff --git a/public/pxt/docfiles/docs.js b/public/pxt/docfiles/docs.js index f349f13..4242a4d 100644 --- a/public/pxt/docfiles/docs.js +++ b/public/pxt/docfiles/docs.js @@ -69,7 +69,7 @@ function setupSemantic() { // don't show related videos $.fn.embed.settings.sources.youtube.url = '//www.youtube.com/embed/{id}?rel=0' - //This is an adapted version of the original template code in Semantic UI + //This is an adapted version of the original template code in Semantic UI $.fn.embed.settings.templates.placeholder = function (image, icon) { var html = ''; if (icon) { @@ -139,11 +139,13 @@ function setupBlocklyAsync() { let promise = Promise.resolve(); if (pxt.appTarget.appTheme && pxt.appTarget.appTheme.extendEditor) { let opts = {}; - promise = promise.then(() => pxt.BrowserUtils.loadScriptAsync(pxt.webConfig.commitCdnUrl + "editor.js")) - .then(() => pxt.editor.initExtensionsAsync(opts)) - .then(res => { + promise = promise.then(function () { + return pxt.BrowserUtils.loadScriptAsync(pxt.webConfig.commitCdnUrl + "editor.js") + }).then(function () { + return pxt.editor.initExtensionsAsync(opts) + }).then(function (res) { if (res.fieldEditors) - res.fieldEditors.forEach(fi => { + res.fieldEditors.forEach(function (fi) { pxt.blocks.registerFieldEditor(fi.selector, fi.editor, fi.validator); }) }) @@ -163,7 +165,7 @@ function renderSnippets() { setupSidebar(); setupSemantic(); setupBlocklyAsync() - .then(() => { + .then(function () { return pxt.runner.renderAsync({ snippetClass: 'lang-blocks', signatureClass: 'lang-sig', diff --git a/public/pxt/docfiles/editorcards.html b/public/pxt/docfiles/editorcards.html index a1e155d..f3fc693 100644 --- a/public/pxt/docfiles/editorcards.html +++ b/public/pxt/docfiles/editorcards.html @@ -1,109 +1,109 @@ diff --git a/public/pxt/docfiles/footer.html b/public/pxt/docfiles/footer.html index addb60d..5c28a04 100644 --- a/public/pxt/docfiles/footer.html +++ b/public/pxt/docfiles/footer.html @@ -1,15 +1,17 @@ - + + diff --git a/public/pxt/docfiles/tracking.html b/public/pxt/docfiles/tracking.html index ed576c6..1bfce3a 100644 --- a/public/pxt/docfiles/tracking.html +++ b/public/pxt/docfiles/tracking.html @@ -20,8 +20,8 @@ telemetryItem.properties["stage"] = (pxtConfig.relprefix || "/--").replace(/[^a-z]/ig, '') if (typeof window !== "undefined" && window.location && /[?&]electron=1/i.test(window.location.href)) telemetryItem.properties["electron"] = 1; - if (typeof window !== "undefined" && window.location && /uwp/i.test(window.location.href)) - telemetryItem.properties["uwp"] = 1; + if (typeof Windows !== "undefined") + telemetryItem.properties["WindowsApp"] = 1; }); }); appInsights.trackPageView(); diff --git a/public/pxt/docs.html b/public/pxt/docs.html index cf58d9b..792f985 100644 --- a/public/pxt/docs.html +++ b/public/pxt/docs.html @@ -86,7 +86,7 @@ "workerjs": "/pxt/worker.js", "tdworkerjs": "/pxt/tdworker.js", "monacoworkerjs": "/pxt/monacoworker.js", - "pxtVersion": "1.7.2", + "pxtVersion": "1.7.17", "pxtRelId": "", "pxtCdnUrl": "/pxt/", "commitCdnUrl": "/pxt/", diff --git a/public/pxt/docs/_locales/pl/about.html b/public/pxt/docs/_locales/pl/about.html index 8af03a2..754525e 100644 --- a/public/pxt/docs/_locales/pl/about.html +++ b/public/pxt/docs/_locales/pl/about.html @@ -233,41 +233,6 @@ - - - Published by Microsoft @@ -467,41 +432,6 @@ - - - Published by Microsoft @@ -549,28 +479,29 @@

O Przykładowym Doświadczeniu

Przy -

- - - Published by Microsoft @@ -467,41 +432,6 @@ - - - Published by Microsoft @@ -548,28 +478,29 @@

About Sample Target

Example for -

- - + - + @@ -610,6 +541,8 @@

About Sample Target

Example for About Sample Target

Example for

- - - Published by Microsoft @@ -467,41 +432,6 @@ - - - Published by Microsoft @@ -553,28 +483,29 @@

Docs for Sample Target

This is a pure jav -