diff --git a/vue/.editorconfig b/vue/.editorconfig index 0d0190d88f..667a0ad119 100644 --- a/vue/.editorconfig +++ b/vue/.editorconfig @@ -4,7 +4,7 @@ end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true -[*.{js,vue}] +[*.{js,vue,ts}] charset = utf-8 indent_style = space indent_size = 2 diff --git a/vue/package-lock.json b/vue/package-lock.json deleted file mode 100644 index 4a378ad851..0000000000 --- a/vue/package-lock.json +++ /dev/null @@ -1,1528 +0,0 @@ -{ - "name": "@ionic/vue", - "version": "4.0.0-beta.12", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-rc.1.tgz", - "integrity": "sha512-qhQo3GqwqMUv03SxxjcEkWtlkEDvFYrBKbJUn4Dtd9amC2cLkJ3me4iYUVSBbVXWbfbVRalEeVBHzX4aQYKnBg==", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-rc.1" - } - }, - "@babel/highlight": { - "version": "7.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-rc.1.tgz", - "integrity": "sha512-5PgPDV6F5s69XNznTcP0za3qH7qgBkr9DVQTXfZtpF+3iEyuIZB1Mjxu52F5CFxgzQUQJoBYHVxtH4Itdb5MgA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.2" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "@babel/runtime": { - "version": "7.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-rc.1.tgz", - "integrity": "sha512-Nifv2kwP/nwR39cAOasNxzjYfpeuf/ZbZNtQz5eYxWTC9yHARU9wItFnAwz1GTZ62MU+AtSjzZPMbLK5Q9hmbg==", - "dev": true, - "requires": { - "regenerator-runtime": "0.12.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - } - } - }, - "@ionic/core": { - "version": "4.0.0-beta.12", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-4.0.0-beta.12.tgz", - "integrity": "sha512-rchLkeSzJansqED84pmbt3zj5NTMWr6g9de/mW9FdvqYhXfm9qGWqeAYTZ2Qvgd4IHZ3/W3Le+0b43A5rkBS6A==", - "requires": { - "ionicons": "4.4.4" - }, - "dependencies": { - "ionicons": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.4.4.tgz", - "integrity": "sha512-HOcxF+pFHQQA4x7zy1eyuzTsaJzyyKKGYGsqvMMnB26rvp9sTKjA8JDZ4L4GRSNWliHC/oXbBoidglJa/0kiPA==" - } - } - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/node": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.1.tgz", - "integrity": "sha512-EGoI4ylB/lPOaqXqtzAyL8HcgOuCtH2hkEaLmkueOYufsTFWBn4VCvlCDC2HW8Q+9iF+QVC3sxjDKQYjHQeZ9w==", - "dev": true - }, - "@vue/component-compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@vue/component-compiler/-/component-compiler-3.4.4.tgz", - "integrity": "sha512-dbY9s/QZotLNgVgSbii6goF9FAHGc1FlFSwVtcDl1gDW4ChtCCiqhr1CZIg1y0KIcJGvwI+EOJ9FSE1ZQR9QUA==", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "2.2.0", - "clean-css": "4.2.1", - "hash-sum": "1.0.2", - "postcss-modules-sync": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@vue/component-compiler-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz", - "integrity": "sha512-pS4zlcdD7BvedyB+IfiTfrbi6C977UMIfulSk8r6uL0BU46ZE2+fUj/zbSNSfVxeaj9ElmnSni5OMwF9np+b+w==", - "dev": true, - "requires": { - "consolidate": "0.15.1", - "hash-sum": "1.0.2", - "lru-cache": "4.1.3", - "merge-source-map": "1.1.0", - "postcss": "6.0.23", - "postcss-selector-parser": "3.1.1", - "prettier": "1.13.7", - "source-map": "0.5.7", - "vue-template-es2015-compiler": "1.6.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "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 - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "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 - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": 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" - } - }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "dev": true, - "requires": { - "bluebird": "3.5.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.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - } - } - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "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=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "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.4" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.0", - "repeat-element": "1.1.3", - "repeat-string": "1.6.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" - } - }, - "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" - } - }, - "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.6" - } - } - } - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "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 - }, - "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" - } - }, - "fs-extra": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", - "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "generic-names": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-1.0.3.tgz", - "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=", - "dev": true, - "requires": { - "loader-utils": "0.2.17" - } - }, - "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" - } - }, - "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" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, - "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 - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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-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-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "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 - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "js-base64": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz", - "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==", - "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=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "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.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "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.1.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "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" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "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" - } - }, - "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=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.2" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "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.23" - } - }, - "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.23" - } - }, - "postcss-modules-sync": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-sync/-/postcss-modules-sync-1.0.0.tgz", - "integrity": "sha1-YZpxnPeN0WpINBNRQLMkz3czS+E=", - "dev": true, - "requires": { - "generic-names": "1.0.3", - "icss-replace-symbols": "1.1.0", - "postcss": "5.2.18", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "string-hash": "1.1.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.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.8", - "source-map": "0.5.7", - "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": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "prettier": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", - "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "randomatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", - "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", - "dev": true, - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "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 - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "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 - }, - "rollup": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.62.0.tgz", - "integrity": "sha512-mZS0aIGfYzuJySJD78znu9/hCJsNfBzg4lDuZGMj0hFVcYHt2evNRHv8aqiu9/w6z6Qn8AQoVl4iyEjDmisGeA==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "@types/node": "10.7.1" - } - }, - "rollup-plugin-terser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-1.0.1.tgz", - "integrity": "sha512-VC6chT7QnrV6JzdgkPE0hP/atRBxaa3CPbVXfZJ8nJLjcidSdWftOst098RasYRUTKxJWAgdaJN1+uiZM6iffA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-rc.1", - "terser": "3.8.1" - } - }, - "rollup-plugin-typescript2": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.17.1.tgz", - "integrity": "sha512-WZJ220IID2UJm3P15zIWQR6vi6YekRsL4irXYq/C9JHg+j9rqQOsihzXQM644LMgtwS3NUWKegbCOhUlCO7hKQ==", - "dev": true, - "requires": { - "fs-extra": "7.0.0", - "resolve": "1.8.1", - "rollup-pluginutils": "2.3.3", - "tslib": "1.9.3" - }, - "dependencies": { - "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" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "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.3" - } - }, - "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" - } - }, - "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" - } - }, - "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.6" - } - }, - "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.4" - } - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - }, - "rollup-pluginutils": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", - "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", - "dev": true, - "requires": { - "estree-walker": "0.5.2", - "micromatch": "2.3.11" - } - } - } - }, - "rollup-plugin-vue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-vue/-/rollup-plugin-vue-4.3.2.tgz", - "integrity": "sha512-XPd7bE8O8W1c2fkRwUmlKioXEjE3Zvn/ksbwPkPsyoT+Wik0XVtzyDjoHg/qYcqNm+gzc8idBo3/fgNkTCiSTA==", - "dev": true, - "requires": { - "@babel/runtime": "7.0.0-rc.1", - "@vue/component-compiler": "3.4.4", - "@vue/component-compiler-utils": "2.2.0", - "debug": "2.6.9", - "hash-sum": "1.0.2", - "querystring": "0.2.0", - "rollup-pluginutils": "2.3.1" - } - }, - "rollup-pluginutils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.1.tgz", - "integrity": "sha512-JZS8aJMHEHhqmY2QVPMXwKP6lsD1ShkrcGYjhAIvqKKdXQyPHw/9NF0tl3On/xOJ4ACkxfeG7AF+chfCN1NpBg==", - "dev": true, - "requires": { - "estree-walker": "0.5.2", - "micromatch": "2.3.11" - }, - "dependencies": { - "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" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "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.3" - } - }, - "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" - } - }, - "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" - } - }, - "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.6" - } - }, - "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.4" - } - } - } - }, - "semver": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", - "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "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 - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "terser": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.8.1.tgz", - "integrity": "sha512-FRin3gKQ0vm0xPPLuxw1FqpVgv1b2pBpYCaFb5qe6A7sD749Fnq1VbDiX3CEFM0BV0fqDzFtBfgmxhxCdzKQIg==", - "dev": true, - "requires": { - "commander": "2.16.0", - "source-map": "0.6.1", - "source-map-support": "0.5.9" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" - } - } - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.4.1", - "commander": "2.16.0", - "diff": "3.5.0", - "glob": "7.1.2", - "js-yaml": "3.12.0", - "minimatch": "3.0.4", - "resolve": "1.8.1", - "semver": "5.5.1", - "tslib": "1.9.3", - "tsutils": "2.29.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.2" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "tslint-eslint-rules": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", - "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", - "dev": true, - "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "3.0.0" - }, - "dependencies": { - "doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", - "dev": true, - "requires": { - "esutils": "1.1.6", - "isarray": "0.0.1" - } - }, - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", - "dev": true - }, - "tsutils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.0.0.tgz", - "integrity": "sha512-LjHBWR0vWAUHWdIAoTjoqi56Kz+FDKBgVEuL+gVPG/Pv7QW5IdaDDeK9Txlr6U0Cmckp5EgCIq1T25qe3J6hyw==", - "dev": true, - "requires": { - "tslib": "1.9.0" - } - } - } - }, - "tslint-ionic-rules": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/tslint-ionic-rules/-/tslint-ionic-rules-0.0.19.tgz", - "integrity": "sha512-myxelwnK9FkR4mG+PnktKZ2DJp1UnX+22MyiC0V8QZc0464X6X63kRQU8vMtpVlazpvbifsXP9yxct2tHBrN4w==", - "dev": true, - "requires": { - "@types/node": "10.11.7", - "tslint-eslint-rules": "5.4.0" - }, - "dependencies": { - "@types/node": { - "version": "10.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.7.tgz", - "integrity": "sha512-yOxFfkN9xUFLyvWaeYj90mlqTJ41CsQzWKS3gXdOMOyPVacUsymejKxJ4/pMW7exouubuEeZLJawGgcNGYlTeg==", - "dev": true - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "1.9.3" - } - }, - "typescript": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.1.tgz", - "integrity": "sha512-Veu0w4dTc/9wlWNf2jeRInNodKlcdLgemvPsrNpfu5Pq39sgfFjvIIgTsvUHCoLBnMhPoUA+tFxsXjU6VexVRQ==", - "dev": true - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "vue": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.17.tgz", - "integrity": "sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ==" - }, - "vue-class-component": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-6.2.0.tgz", - "integrity": "sha512-U11yVeP5zjPSx4IU7Zas3MLC+Vy9dmufI+uLKLo8YuGQJGOihSYfh/fgNnbjMteN+hz5axjG6iC6ybMo6vGYnA==", - "dev": true - }, - "vue-property-decorator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-7.2.0.tgz", - "integrity": "sha512-sCI6NVM3tEDg+mpZrQlgkddtxd9LbFWetue8D+nqO3agfSLz0KoC/UIi2P1l5E0TDhcUeIXS9rasuP2HWg+L4w==", - "dev": true, - "requires": { - "vue-class-component": "6.2.0" - } - }, - "vue-router": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz", - "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==" - }, - "vue-template-compiler": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz", - "integrity": "sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==", - "requires": { - "de-indent": "1.0.2", - "he": "1.1.1" - } - }, - "vue-template-es2015-compiler": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", - "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } -} diff --git a/vue/package.json b/vue/package.json index a4f10f8df6..f94917c09a 100644 --- a/vue/package.json +++ b/vue/package.json @@ -1,50 +1,43 @@ { "name": "@ionic/vue", - "version": "4.0.0-beta.12", + "version": "0.0.1", "description": "Vue specific wrappers for @ionic/core", - "homepage": "https://moduscreate.com", - "author": "Modus Create", - "license": "MIT", - "repository": "github:ionic-team/ionic", "main": "dist/ionic-vue.common.js", - "typings": "types/index.d.ts", + "types": "dist/types/index.d.ts", "module": "dist/ionic-vue.esm.js", "unpkg": "dist/ionic-vue.js", "jsdelivr": "dist/ionic-vue.js", "contributors": [ + "Josh Thomas ", "Michael Tintiuc " ], "files": [ - "src/", - "types/", - "dist/*.js", - "dist/*.ts" + "dist/" ], "bugs": { "url": "https://github.com/ionic-team/ionic/issues" }, "keywords": [ "ionic", - "ion", - "vuejs", - "vue", - "typescript", - "router", - "routing", - "plugin", - "component", - "navigation", - "nav", - "transition", - "api", - "wrapper", "framework", - "delegate" + "vue", + "mobile", + "app", + "webapp", + "capacitor", + "cordova", + "progressive web app", + "pwa" ], + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/ionic-team/ionic.git" + }, "scripts": { "dev": "rollup -c", "watch": "rollup -c -w", - "build": "NODE_ENV=production rollup -c --configProd", + "build": "npm run clean && NODE_ENV=production rollup -c --configProd", "clean": "node scripts/clean.js", "lint": "tslint --project .", "lint.fix": "tslint --project . --fix", @@ -60,12 +53,12 @@ "tslint-ionic-rules": "0.0.19", "typescript": "3.1.1", "vue-class-component": "^6.2.0", - "vue-property-decorator": "^7.2.0" - }, - "dependencies": { + "vue-property-decorator": "^7.2.0", "vue": "^2.5.17", "vue-template-compiler": "^2.5.17", - "vue-router": "^3.0.1", + "vue-router": "^3.0.1" + }, + "dependencies": { "@ionic/core": "4.0.0-beta.12" } } diff --git a/vue/rollup.config.js b/vue/rollup.config.js index 31a5b16400..392cac5ff4 100644 --- a/vue/rollup.config.js +++ b/vue/rollup.config.js @@ -2,16 +2,6 @@ import path from 'path' import vue from 'rollup-plugin-vue' import { terser } from 'rollup-plugin-terser' import typescript from 'rollup-plugin-typescript2' -import { version as packageVersion } from './package.json' - -const version = process.env.VERSION || packageVersion - -const banner = `/*! - * @ionic/vue v${version} - * ${new Date().getFullYear()} Modus Create - * @license MIT - */ -` const resolve = _path => path.resolve(__dirname, './', _path) @@ -22,7 +12,6 @@ function outputConfig(suffix, format, opts = {}) { name: 'IonicVue', sourcemap: true, format, - banner, }, opts ) diff --git a/vue/src/api-utils.ts b/vue/src/api-utils.ts index 888f037762..c792130dd2 100644 --- a/vue/src/api-utils.ts +++ b/vue/src/api-utils.ts @@ -1,5 +1,3 @@ -import { HTMLStencilElement } from './interfaces'; - // A proxy method that initializes the controller and calls requested method export function proxyMethod(tag: string, method: string, ...opts: any[]): Promise { return initController(tag).then((ctrl: any) => ctrl[method].apply(ctrl, opts)); diff --git a/vue/src/api.ts b/vue/src/api.ts deleted file mode 100644 index 8aa2594907..0000000000 --- a/vue/src/api.ts +++ /dev/null @@ -1,109 +0,0 @@ -import Vue, { PluginFunction } from 'vue'; -import { ApiCache, FrameworkDelegate } from './interfaces'; -import Delegate from './framework-delegate'; -import ProxyController from './proxy-controller'; -import ProxyMenuController from './proxy-menu-controller'; -import ProxyDelegateController from './proxy-delegate-controller'; - -let _Vue: typeof Vue, _Delegate: FrameworkDelegate; - -export default class Api { - static cache: ApiCache; - static installed = false; - static install: PluginFunction; - - // Create or return a ActionSheetController instance - get actionSheetController(): ProxyController { - return getOrCreateController('ion-action-sheet-controller'); - } - - // Create or return an AlertController instance - get alertController(): ProxyController { - return getOrCreateController('ion-alert-controller'); - } - - // Create or return a LoadingController instance - get loadingController(): ProxyController { - return getOrCreateController('ion-loading-controller'); - } - - // Create or return a MenuController instance - get menuController(): ProxyMenuController { - return getOrCreateMenuController('ion-menu-controller'); - } - - // Create or return a ModalController instance - get modalController(): ProxyDelegateController { - return getOrCreateDelegatedController('ion-modal-controller'); - } - - // Create or return a PopoverController instance - get popoverController(): ProxyDelegateController { - return getOrCreateDelegatedController('ion-popover-controller'); - } - - // Create or return a ToastController instance - get toastController(): ProxyController { - return getOrCreateController('ion-toast-controller'); - } -} - -// Cached controllers -Api.cache = { - 'ion-action-sheet-controller': null, - 'ion-alert-controller': null, - 'ion-loading-controller': null, - 'ion-menu-controller': null, - 'ion-modal-controller': null, - 'ion-popover-controller': null, - 'ion-toast-controller': null, -}; - -Api.install = (Vue): void => { - // If installed - skip - if (Api.installed && _Vue === Vue) { - return; - } - - _Vue = Vue; - _Delegate = new Delegate(Vue); - - Api.installed = true; - - // Ignore Ionic custom elements - Vue.config.ignoredElements.push(/^ion-/); - - // Give access to the API methods - Object.defineProperty(Vue.prototype, '$ionic', { - get() { - return new Api(); - }, - }); -}; - -// Get existing Base controller instance or initialize a new one -function getOrCreateController(tag: string): ProxyController { - if (!Api.cache[tag]) { - Api.cache[tag] = new ProxyController(tag); - } - - return Api.cache[tag]; -} - -// Get existing Menu controller instance or initialize a new one -function getOrCreateMenuController(tag: string): ProxyMenuController { - if (!Api.cache[tag]) { - Api.cache[tag] = new ProxyMenuController(tag); - } - - return Api.cache[tag]; -} - -// Get existing Delegated controller instance or initialize a new one -function getOrCreateDelegatedController(tag: string): ProxyDelegateController { - if (!Api.cache[tag]) { - Api.cache[tag] = new ProxyDelegateController(tag, _Delegate); - } - - return Api.cache[tag]; -} diff --git a/vue/src/app-initialize.ts b/vue/src/app-initialize.ts new file mode 100644 index 0000000000..120262cdf1 --- /dev/null +++ b/vue/src/app-initialize.ts @@ -0,0 +1,23 @@ +// Core Ionic types +// tslint:disable-next-line:no-import-side-effect +import { IonicConfig } from '@ionic/core'; + +// Webpack import for ionicons +// @ts-ignore +// tslint:disable-next-line:no-import-side-effect +import '@ionic/core/dist/ionic/svg'; + + +// import '@ionic/core/css/ionic.bundle.css'; +// import 'ionicons/dist/collection/icon/icon.css'; + +import { defineCustomElements } from '@ionic/core/loader'; +import { IonicWindow } from './interfaces'; + +export function appInitialize(config?: IonicConfig) { + const win: IonicWindow = window as any; + const Ionic = (win.Ionic = win.Ionic || {}); + + Ionic.config = config; + defineCustomElements(window); +} diff --git a/vue/src/components/router-outlet.ts b/vue/src/components/router-outlet.ts new file mode 100644 index 0000000000..f6c4d40bcf --- /dev/null +++ b/vue/src/components/router-outlet.ts @@ -0,0 +1,112 @@ +import { CreateElement } from 'vue'; + +export default { + functional: true, + props: { + name: { + type: String, + default: 'default' + } + }, + render(_: CreateElement, { props, children, parent, data }: any) { + // used by devtools to display a router-view badge + data.routerView = true; + + // directly use parent context's createElement() function + // so that components rendered by router-view can resolve named slots + const h = parent.$createElement; + const name = props.name; + const route = parent.$route; + const cache = parent._routerViewCache || (parent._routerViewCache = {}); + + // determine current view depth, also check to see if the tree + // has been toggled inactive but kept-alive. + let depth = 0; + let inactive = false; + while (parent && parent._routerRoot !== parent) { + if (parent.$vnode && parent.$vnode.data.routerView) { + depth++; + } + if (parent._inactive) { + inactive = true; + } + parent = parent.$parent; + } + data.routerViewDepth = depth; + + // render previous view if the tree is inactive and kept-alive + if (inactive) { + return h(cache[name], data, children); + } + + const matched = route.matched[depth]; + // render empty node if no matched route + if (!matched) { + cache[name] = null; + return h(); + } + + const component = (cache[name] = matched.components[name]); + + // attach instance registration hook + // this will be called in the instance's injected lifecycle hooks + data.registerRouteInstance = (vm: any, val: any) => { + // val could be undefined for unregistration + const current = matched.instances[name]; + if ((val && current !== vm) || (!val && current === vm)) { + matched.instances[name] = val; + } + }; + + // also register instance in prepatch hook + // in case the same component instance is reused across different routes + (data.hook || (data.hook = {})).prepatch = (_: any, vnode: any) => { + matched.instances[name] = vnode.componentInstance; + }; + + // resolve props + let propsToPass = (data.props = resolveProps( + route, + matched.props && matched.props[name] + )); + if (propsToPass) { + // clone to prevent mutation + propsToPass = data.props = extend({}, propsToPass); + // pass non-declared props as attrs + const attrs = (data.attrs = data.attrs || {}); + for (const key in propsToPass) { + if (!component.props || !(key in component.props)) { + attrs[key] = propsToPass[key]; + delete propsToPass[key]; + } + } + } + + return h(component, data, children); + } +}; +export function extend(a: any, b: any) { + for (const key in b) { + a[key] = b[key]; + } + return a; +} +function resolveProps(route: any, config: any) { + switch (typeof config) { + case 'undefined': + return; + case 'object': + return config; + case 'function': + return config(route); + case 'boolean': + return config ? route.params : undefined; + default: + if (process.env.NODE_ENV !== 'production') { + console.warn( + `props in "${route.path}" is a ${typeof config}, ` + + `expecting an object, function or boolean.` + ); + } + } +} diff --git a/vue/src/controllers/action-sheet-controller.ts b/vue/src/controllers/action-sheet-controller.ts new file mode 100644 index 0000000000..f4d8f64706 --- /dev/null +++ b/vue/src/controllers/action-sheet-controller.ts @@ -0,0 +1,9 @@ +import { ActionSheetOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; + +export const CTRL = 'ion-action-sheet-controller'; +export class ActionSheetController extends OverlayBaseController { + constructor() { + super(CTRL); + } +} diff --git a/vue/src/controllers/alert-controller.ts b/vue/src/controllers/alert-controller.ts new file mode 100644 index 0000000000..755a161eb1 --- /dev/null +++ b/vue/src/controllers/alert-controller.ts @@ -0,0 +1,9 @@ +import { AlertOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; + +export const CTRL = 'ion-alert-controller'; +export class AlertController extends OverlayBaseController { + constructor() { + super(CTRL); + } +} diff --git a/vue/src/controllers/index.ts b/vue/src/controllers/index.ts new file mode 100644 index 0000000000..f5101cf8a8 --- /dev/null +++ b/vue/src/controllers/index.ts @@ -0,0 +1,7 @@ +export { ActionSheetController } from './action-sheet-controller'; +export { AlertController } from './alert-controller'; +export { LoadingController } from './loading-controller'; +export { MenuController } from './menu-controller'; +export { ModalController } from './modal-controller'; +export { PopoverController } from './popover-controller'; +export { ToastController } from './toast-controller'; diff --git a/vue/src/controllers/loading-controller.ts b/vue/src/controllers/loading-controller.ts new file mode 100644 index 0000000000..a9f21414ec --- /dev/null +++ b/vue/src/controllers/loading-controller.ts @@ -0,0 +1,8 @@ +import { LoadingOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; + +export class LoadingController extends OverlayBaseController { + constructor() { + super('ion-loading-controller'); + } +} diff --git a/vue/src/controllers/menu-controller.ts b/vue/src/controllers/menu-controller.ts new file mode 100644 index 0000000000..c5e8df29b7 --- /dev/null +++ b/vue/src/controllers/menu-controller.ts @@ -0,0 +1,101 @@ +import { proxyMethod } from '../util'; + +export const CTRL = 'ion-menu-controller'; +export class MenuController { + + /** + * Programmatically open the Menu. + * @param [menuId] Optionally get the menu by its id, or side. + * @return returns a promise when the menu is fully opened + */ + open(menuId?: string): Promise { + return proxyMethod(CTRL, 'open', menuId); + } + + /** + * Programmatically close the Menu. If no `menuId` is given as the first + * argument then it'll close any menu which is open. If a `menuId` + * is given then it'll close that exact menu. + * @param [menuId] Optionally get the menu by its id, or side. + * @return returns a promise when the menu is fully closed + */ + close(menuId?: string): Promise { + return proxyMethod(CTRL, 'close', menuId); + } + + /** + * Toggle the menu. If it's closed, it will open, and if opened, it + * will close. + * @param [menuId] Optionally get the menu by its id, or side. + * @return returns a promise when the menu has been toggled + */ + toggle(menuId?: string): Promise { + return proxyMethod(CTRL, 'toggle', menuId); + } + + /** + * Used to enable or disable a menu. For example, there could be multiple + * left menus, but only one of them should be able to be opened at the same + * time. If there are multiple menus on the same side, then enabling one menu + * will also automatically disable all the others that are on the same side. + * @param [menuId] Optionally get the menu by its id, or side. + * @return Returns the instance of the menu, which is useful for chaining. + */ + enable(shouldEnable: boolean, menuId?: string): Promise { + return proxyMethod(CTRL, 'enable', shouldEnable, menuId); + } + + /** + * Used to enable or disable the ability to swipe open the menu. + * @param shouldEnable True if it should be swipe-able, false if not. + * @param [menuId] Optionally get the menu by its id, or side. + * @return Returns the instance of the menu, which is useful for chaining. + */ + swipeEnable(shouldEnable: boolean, menuId?: string): Promise { + return proxyMethod(CTRL, 'swipeEnable', shouldEnable, menuId); + } + + /** + * @param [menuId] Optionally get the menu by its id, or side. + * @return Returns true if the specified menu is currently open, otherwise false. + * If the menuId is not specified, it returns true if ANY menu is currenly open. + */ + isOpen(menuId?: string): Promise { + return proxyMethod(CTRL, 'isOpen', menuId); + } + + /** + * @param [menuId] Optionally get the menu by its id, or side. + * @return Returns true if the menu is currently enabled, otherwise false. + */ + isEnabled(menuId?: string): Promise { + return proxyMethod(CTRL, 'isEnabled', menuId); + } + + /** + * Used to get a menu instance. If a `menuId` is not provided then it'll + * return the first menu found. If a `menuId` is `left` or `right`, then + * it'll return the enabled menu on that side. Otherwise, if a `menuId` is + * provided, then it'll try to find the menu using the menu's `id` + * property. If a menu is not found then it'll return `null`. + * @param [menuId] Optionally get the menu by its id, or side. + * @return Returns the instance of the menu if found, otherwise `null`. + */ + get(menuId?: string): Promise { + return proxyMethod(CTRL, 'get', menuId); + } + + /** + * @return Returns the instance of the menu already opened, otherwise `null`. + */ + getOpen(): Promise { + return proxyMethod(CTRL, 'getOpen'); + } + + /** + * @return Returns an array of all menu instances. + */ + getMenus(): Promise { + return proxyMethod(CTRL, 'getMenus'); + } +} diff --git a/vue/src/controllers/modal-controller.ts b/vue/src/controllers/modal-controller.ts new file mode 100644 index 0000000000..275f14fd5d --- /dev/null +++ b/vue/src/controllers/modal-controller.ts @@ -0,0 +1,20 @@ +import { ModalOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; +import { VueDelegate } from './vue-delegate'; + +export const CTRL = 'ion-modal-controller'; +export class ModalController extends OverlayBaseController { + + constructor( + private delegate: VueDelegate + ) { + super(CTRL); + } + + create(opts: ModalOptions): Promise { + return super.create({ + ...opts, + delegate: this.delegate + }); + } +} diff --git a/vue/src/controllers/picker-controller.ts b/vue/src/controllers/picker-controller.ts new file mode 100644 index 0000000000..424ff4996c --- /dev/null +++ b/vue/src/controllers/picker-controller.ts @@ -0,0 +1,9 @@ +import { PickerOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; + +export const CTRL = 'ion-picker-controller'; +export class PickerController extends OverlayBaseController { + constructor() { + super(CTRL); + } +} diff --git a/vue/src/controllers/popover-controller.ts b/vue/src/controllers/popover-controller.ts new file mode 100644 index 0000000000..d78a7b3951 --- /dev/null +++ b/vue/src/controllers/popover-controller.ts @@ -0,0 +1,20 @@ +import { PopoverOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; +import { VueDelegate } from './vue-delegate'; + +export const CTRL = 'ion-modal-controller'; +export class PopoverController extends OverlayBaseController { + + constructor( + private delegate: VueDelegate + ) { + super(CTRL); + } + + create(opts: PopoverOptions): Promise { + return super.create({ + ...opts, + delegate: this.delegate + }); + } +} diff --git a/vue/src/controllers/toast-controller.ts b/vue/src/controllers/toast-controller.ts new file mode 100644 index 0000000000..2227b24e86 --- /dev/null +++ b/vue/src/controllers/toast-controller.ts @@ -0,0 +1,8 @@ +import { ToastOptions } from '@ionic/core'; +import { OverlayBaseController } from '../util'; + +export class ToastController extends OverlayBaseController { + constructor() { + super('ion-toast-controller'); + } +} diff --git a/vue/src/controllers/vue-delegate.ts b/vue/src/controllers/vue-delegate.ts new file mode 100644 index 0000000000..45eeebe669 --- /dev/null +++ b/vue/src/controllers/vue-delegate.ts @@ -0,0 +1,97 @@ +import { VueConstructor, default as Vue } from 'vue'; +import { FrameworkDelegate, ViewLifecycle } from '@ionic/core'; +import { EsModule, HTMLVueElement, WebpackFunction } from '../interfaces'; + + +// Handle creation of sync and async components +function createVueComponent(vue: VueConstructor, component: WebpackFunction | object | VueConstructor): Promise { + return Promise.resolve( + typeof component === 'function' && (component as WebpackFunction).cid === undefined + ? (component as WebpackFunction)().then((cmp: any) => vue.extend(isESModule(cmp) ? cmp.default : cmp)) + : vue.extend(component) + ); +} + +export class VueDelegate implements FrameworkDelegate { + constructor( + public vue: VueConstructor, + public $root: Vue + ) {} + + // Attach the passed Vue component to DOM + attachViewToDom(parentElement: HTMLElement, component: HTMLElement | WebpackFunction | object | VueConstructor, opts?: object, classes?: string[]): Promise { + // Handle HTML elements + if (isElement(component)) { + // Add any classes to the element + addClasses(component as HTMLElement, classes); + + // Append the element to DOM + parentElement.appendChild(component as HTMLElement); + bindLifecycleEvents(component, parentElement); + return Promise.resolve(component as HTMLElement); + } + + // Get the Vue controller + return createVueComponent(this.vue, component).then((Component: VueConstructor) => { + const componentInstance = new Component({ + propsData: opts + }); + componentInstance.$mount(); + + // Add any classes to the Vue component's root element + addClasses(componentInstance.$el, classes); + + // Append the Vue component to DOM + parentElement.appendChild(componentInstance.$el); + return componentInstance.$el; + }); + } + + // Remove the earlier created Vue component from DOM + removeViewFromDom(_parentElement: HTMLElement, childElement: HTMLVueElement): Promise { + // Destroy the Vue component instance + if (childElement.__vue__) { + childElement.__vue__.$destroy(); + } + + return Promise.resolve(); + } +} + +const LIFECYCLES = [ + ViewLifecycle.WillEnter, + ViewLifecycle.DidEnter, + ViewLifecycle.WillLeave, + ViewLifecycle.DidLeave, + ViewLifecycle.WillUnload +]; + +export function bindLifecycleEvents(instance: any, element: HTMLElement) { + LIFECYCLES.forEach(eventName => { + element.addEventListener(eventName, (ev: any) => { + if (typeof instance[eventName] === 'function') { + instance[eventName](ev.detail); + } + }); + }); +} + +// Check Symbol support +const hasSymbol = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; + +// Check if object is an ES module +function isESModule(obj: EsModule) { + return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module'); +} + +// Check if value is an Element +function isElement(el: any) { + return typeof Element !== 'undefined' && el instanceof Element; +} + +// Add an array of classes to an element +function addClasses(element: HTMLElement, classes: string[] = []) { + for (const cls of classes) { + element.classList.add(cls); + } +} diff --git a/vue/src/framework-delegate.ts b/vue/src/framework-delegate.ts deleted file mode 100644 index a8ac4e7cc9..0000000000 --- a/vue/src/framework-delegate.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { VueConstructor } from 'vue'; -import { EsModule, FrameworkDelegate, HTMLVueElement, WebpackFunction } from './interfaces'; - -export default class Delegate implements FrameworkDelegate { - constructor(public vue: VueConstructor) {} - - // Attach the passed Vue component to DOM - attachViewToDom(parentElement: HTMLElement, component: HTMLElement | WebpackFunction | object | VueConstructor, opts?: object, classes?: string[]): Promise { - // Handle HTML elements - if (isElement(component)) { - // Add any classes to the element - addClasses(component as HTMLElement, classes); - - // Append the element to DOM - parentElement.appendChild(component as HTMLElement); - return Promise.resolve(component as HTMLElement); - } - - // Get the Vue controller - return this.vueController(component).then((controller: VueConstructor) => { - const vueComponent = this.vueComponent(controller, opts); - - // Add any classes to the Vue component's root element - addClasses(vueComponent.$el, classes); - - // Append the Vue component to DOM - parentElement.appendChild(vueComponent.$el); - return vueComponent.$el; - }); - } - - // Remove the earlier created Vue component from DOM - removeViewFromDom(_parentElement: HTMLElement, childElement: HTMLVueElement): Promise { - // Destroy the Vue component instance - if (childElement.__vue__) { - childElement.__vue__.$destroy(); - } - - return Promise.resolve(); - } - - // Handle creation of sync and async components - vueController(component: WebpackFunction | object | VueConstructor): Promise { - return Promise.resolve( - typeof component === 'function' && (component as WebpackFunction).cid === undefined - ? (component as WebpackFunction)().then((cmp: any) => this.vue.extend(isESModule(cmp) ? cmp.default : cmp)) - : this.vue.extend(component) - ); - } - - // Create a new instance of the Vue component - vueComponent(controller: VueConstructor, opts?: object) { - return new controller(opts).$mount(); - } -} - -// Check Symbol support -const hasSymbol = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; - -// Check if object is an ES module -function isESModule(obj: EsModule) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module'); -} - -// Check if value is an Element -function isElement(el: any) { - return typeof Element !== 'undefined' && el instanceof Element; -} - -// Add an array of classes to an element -function addClasses(element: HTMLElement, classes: string[] = []) { - for (const cls of classes) { - element.classList.add(cls); - } -} diff --git a/vue/src/index.ts b/vue/src/index.ts index 1ce9c894d7..6a8c254f6a 100644 --- a/vue/src/index.ts +++ b/vue/src/index.ts @@ -1,3 +1,8 @@ -export { default as Ionic } from './ionic'; -export { default as IonicAPI } from './api'; -export { default as IonicVueRouter } from './router'; +import { install } from './ionic'; + +export default { + install, + version: '__VERSION__' +}; + +export { Controllers } from './ionic'; diff --git a/vue/src/interfaces.ts b/vue/src/interfaces.ts index 681c20149b..5c2b0e3561 100644 --- a/vue/src/interfaces.ts +++ b/vue/src/interfaces.ts @@ -1,14 +1,7 @@ import Vue from 'vue'; -import IonicApi from './api'; import VueRouter from 'vue-router'; import { RouterOptions } from 'vue-router/types/router'; -declare module 'vue/types/vue' { - interface Vue { - $ionic: IonicApi; - } -} - declare module 'vue-router/types/router' { interface VueRouter { direction: number; @@ -36,12 +29,19 @@ export interface EsModule extends Object { [Symbol.toStringTag]: string; } -export interface HTMLStencilElement extends HTMLElement { - componentOnReady(): Promise; - componentOnReady(done: (el?: this) => void): void; - forceUpdate(): void; +export interface IonicGlobal { + config?: any; + ael?: (elm: any, eventName: string, cb: (ev: Event) => void, opts: any) => void; + raf?: (ts: number) => void; + rel?: (elm: any, eventName: string, cb: (ev: Event) => void, opts: any) => void; } +export interface IonicWindow extends Window { + Ionic: IonicGlobal; +} + + + export interface FrameworkDelegate { attachViewToDom(parentElement: HTMLElement, component: HTMLElement | WebpackFunction | object | Vue, opts?: object, classes?: string[]): Promise; removeViewFromDom(parentElement: HTMLElement, childElement: HTMLVueElement): Promise; diff --git a/vue/src/ionic.ts b/vue/src/ionic.ts index 5c151833ea..977d69212f 100644 --- a/vue/src/ionic.ts +++ b/vue/src/ionic.ts @@ -1,10 +1,104 @@ -import '@ionic/core/css/ionic.bundle.css'; -import 'ionicons/dist/collection/icon/icon.css'; -import '@ionic/core/dist/ionic/svg'; -import { defineCustomElements } from '@ionic/core/loader'; +import { PluginFunction, VueConstructor, default as VueImport } from 'vue'; +import { + ActionSheetController, + AlertController, + LoadingController, + MenuController, + ModalController, + PopoverController, + ToastController +} from './controllers'; +import { IonicConfig } from '@ionic/core'; +import { appInitialize } from './app-initialize'; +import { VueDelegate } from './controllers/vue-delegate'; +import IonRouterOutlet from './components/router-outlet'; -export default { - init(): void { - defineCustomElements(window); - }, +export interface Controllers { + actionSheetController: ActionSheetController; + alertController: AlertController; + loadingController: LoadingController; + menuController: MenuController; + modalController: ModalController; + popoverController: PopoverController; + toastController: ToastController; +} + +declare module 'vue/types/vue' { + interface Vue { + $ionic: Controllers; + } +} + + +function createApi(Vue: VueConstructor, $root: VueImport) { + const cache: Partial = {}; + const vueDelegate = new VueDelegate(Vue, $root); + const api: Controllers = { + get actionSheetController() { + if (!cache.actionSheetController) { + cache.actionSheetController = new ActionSheetController(); + } + return cache.actionSheetController; + }, + get alertController() { + if (!cache.alertController) { + cache.alertController = new AlertController(); + } + return cache.alertController; + }, + get loadingController() { + if (!cache.loadingController) { + cache.loadingController = new LoadingController(); + } + return cache.loadingController; + }, + get menuController() { + if (!cache.menuController) { + cache.menuController = new MenuController(); + } + return cache.menuController; + }, + get modalController() { + if (!cache.modalController) { + cache.modalController = new ModalController(vueDelegate); + } + return cache.modalController; + }, + get popoverController() { + if (!cache.popoverController) { + cache.popoverController = new PopoverController(vueDelegate); + } + return cache.popoverController; + }, + get toastController() { + if (!cache.toastController) { + cache.toastController = new ToastController(); + } + return cache.toastController; + } + }; + + return api; +} + +let Vue: typeof VueImport; + +export const install: PluginFunction = (_Vue, config) => { + if (Vue && _Vue === Vue) { + if (process.env.NODE_ENV !== 'production') { + console.error( + '[Ionic] already installed. Vue.use(Ionic) should be called only once.' + ); + } + return; + } + Vue = _Vue; + Vue.config.ignoredElements.push(/^ion-/); + Vue.component('IonRouterView', IonRouterOutlet); + + appInitialize(config); + + Object.defineProperty(Vue.prototype, '$ionic', { + get() { return createApi(Vue, this.$root); } + }); }; diff --git a/vue/src/mixins/catch-ionic-go-back.ts b/vue/src/mixins/catch-ionic-go-back.ts index 7ea3b7e373..f7957a3386 100644 --- a/vue/src/mixins/catch-ionic-go-back.ts +++ b/vue/src/mixins/catch-ionic-go-back.ts @@ -1,7 +1,6 @@ import Vue from 'vue'; import Router from '../router'; import Component from 'vue-class-component'; -import { IonBackButton } from '../interfaces'; @Component export default class CatchIonicGoBack extends Vue { @@ -10,7 +9,7 @@ export default class CatchIonicGoBack extends Vue { if (!event.target) return; // We only care for the event coming from Ionic's back button - const backButton = (event.target as HTMLElement).closest('ion-back-button') as IonBackButton; + const backButton = (event.target as HTMLElement).closest('ion-back-button') as HTMLIonBackButtonElement; if (!backButton) return; const $router = this.$router as Router; diff --git a/vue/src/proxy-controller.ts b/vue/src/proxy-controller.ts deleted file mode 100644 index 5ec4d7a51e..0000000000 --- a/vue/src/proxy-controller.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as apiUtils from './api-utils'; -import { ProxyControllerInterface } from './interfaces'; - -// A proxy class that allows early access to controller methods -export default class ProxyController implements ProxyControllerInterface { - constructor(public tag: string) {} - - create(opts: object = {}): Promise { - return apiUtils.proxyMethod(this.tag, 'create', opts); - } - - dismiss(): Promise { - return apiUtils.proxyMethod(this.tag, 'dismiss'); - } - - getTop(): Promise { - return apiUtils.proxyMethod(this.tag, 'getTop'); - } -} diff --git a/vue/src/proxy-delegate-controller.ts b/vue/src/proxy-delegate-controller.ts deleted file mode 100644 index 93ae699adf..0000000000 --- a/vue/src/proxy-delegate-controller.ts +++ /dev/null @@ -1,20 +0,0 @@ -import ProxyController from './proxy-controller'; -import { FrameworkDelegate, ProxyDelegateOptions } from './interfaces'; - -// A proxy class that allows early access to controller methods -export default class ProxyDelegateController extends ProxyController { - static delegate: FrameworkDelegate; - - constructor(public tag: string, delegate: FrameworkDelegate) { - super(tag); - - if (!ProxyDelegateController.delegate) { - ProxyDelegateController.delegate = delegate; - } - } - - create(opts: ProxyDelegateOptions = {} as ProxyDelegateOptions) { - opts.delegate = ProxyDelegateController.delegate; - return super.create(opts); - } -} diff --git a/vue/src/proxy-menu-controller.ts b/vue/src/proxy-menu-controller.ts deleted file mode 100644 index c6f9a6baf3..0000000000 --- a/vue/src/proxy-menu-controller.ts +++ /dev/null @@ -1,57 +0,0 @@ -import * as apiUtils from './api-utils'; -import { ProxyMenuControllerInterface } from './interfaces'; - -// A proxy class that allows early access to controller methods -export default class ProxyMenuController implements ProxyMenuControllerInterface { - constructor(public tag: string) {} - - // Open a menu - open(menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'open', menuId); - } - - // Close a menu - close(menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'close', menuId); - } - - // Toggle a menu - toggle(menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'toggle', menuId); - } - - // Enable or disable a menu - enable(shouldEnable: boolean, menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'enable', shouldEnable, menuId); - } - - // Enable or disable the ability to swipe open the menu - swipeEnable(shouldEnable: boolean, menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'swipeEnable', shouldEnable, menuId); - } - - // Check if specific or any menu is open - isOpen(menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'isOpen', menuId); - } - - // Check is certain menu is enabled - isEnabled(menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'isEnabled', menuId); - } - - // Get specific or first menu instance - get(menuId?: string): Promise { - return apiUtils.proxyMethod(this.tag, 'get', menuId); - } - - // Get an instance of an open menu - getOpen(): Promise { - return apiUtils.proxyMethod(this.tag, 'getOpen'); - } - - // Get an array of all menus - getMenus(): Promise { - return apiUtils.proxyMethod(this.tag, 'getMenus'); - } -} diff --git a/vue/src/sfc.d.ts b/vue/src/sfc.d.ts deleted file mode 100644 index 8f6f410263..0000000000 --- a/vue/src/sfc.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.vue' { - import Vue from 'vue'; - export default Vue; -} diff --git a/vue/src/util.ts b/vue/src/util.ts new file mode 100644 index 0000000000..d36db39491 --- /dev/null +++ b/vue/src/util.ts @@ -0,0 +1,30 @@ +export class OverlayBaseController { + constructor(private ctrl: string) {} + + create(opts?: Opts): Promise { + return proxyMethod(this.ctrl, 'create', opts); + } + + dismiss(data?: any, role?: string, id?: string): Promise { + return proxyMethod(this.ctrl, 'dismiss', data, role, id); + } + + getTop(): Promise { + return proxyMethod(this.ctrl, 'getTop'); + } +} + +export function proxyMethod(ctrlName: string, methodName: string, ...args: any[]) { + const controller = ensureElementInBody(ctrlName); + return controller.componentOnReady() + .then(() => (controller as any)[methodName].apply(controller, args)); +} + +export function ensureElementInBody(elementName: string) { + let element = document.querySelector(elementName); + if (!element) { + element = document.createElement(elementName); + document.body.appendChild(element); + } + return element as HTMLStencilElement; +} diff --git a/vue/tsconfig.json b/vue/tsconfig.json index 2765dda715..7a69a5473a 100644 --- a/vue/tsconfig.json +++ b/vue/tsconfig.json @@ -6,7 +6,7 @@ "allowUnreachableCode": false, "declaration": true, "declarationMap": true, - "declarationDir": "types", + "declarationDir": "dist/types", "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, "jsx": "react", diff --git a/vue/types/api-utils.d.ts b/vue/types/api-utils.d.ts deleted file mode 100644 index 369f325182..0000000000 --- a/vue/types/api-utils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { HTMLStencilElement } from './interfaces'; -export declare function proxyMethod(tag: string, method: string, ...opts: any[]): Promise; -export declare function initController(tag: string): Promise; -//# sourceMappingURL=api-utils.d.ts.map \ No newline at end of file diff --git a/vue/types/api.d.ts b/vue/types/api.d.ts deleted file mode 100644 index 42483be322..0000000000 --- a/vue/types/api.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { PluginFunction } from 'vue'; -import { ApiCache } from './interfaces'; -import ProxyController from './proxy-controller'; -import ProxyMenuController from './proxy-menu-controller'; -import ProxyDelegateController from './proxy-delegate-controller'; -export default class Api { - static cache: ApiCache; - static installed: boolean; - static install: PluginFunction; - readonly actionSheetController: ProxyController; - readonly alertController: ProxyController; - readonly loadingController: ProxyController; - readonly menuController: ProxyMenuController; - readonly modalController: ProxyDelegateController; - readonly popoverController: ProxyDelegateController; - readonly toastController: ProxyController; -} -//# sourceMappingURL=api.d.ts.map \ No newline at end of file diff --git a/vue/types/components/ion-vue-router-transitionless.vue.d.ts b/vue/types/components/ion-vue-router-transitionless.vue.d.ts deleted file mode 100644 index 2f591e499e..0000000000 --- a/vue/types/components/ion-vue-router-transitionless.vue.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import CatchIonicGoBack from '../mixins/catch-ionic-go-back'; -declare const IonVueRouter_base: import("vue-class-component/lib/declarations").VueClass; -export default class IonVueRouter extends IonVueRouter_base { - name: string; -} -export {}; -//# sourceMappingURL=ion-vue-router-transitionless.vue?rollup-plugin-vue=script.d.ts.map \ No newline at end of file diff --git a/vue/types/components/ion-vue-router.vue.d.ts b/vue/types/components/ion-vue-router.vue.d.ts deleted file mode 100644 index 48cc24e402..0000000000 --- a/vue/types/components/ion-vue-router.vue.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import CatchIonicGoBack from '../mixins/catch-ionic-go-back'; -declare const IonVueRouter_base: import("vue-class-component/lib/declarations").VueClass; -export default class IonVueRouter extends IonVueRouter_base { - name: string; - bindCSS: boolean; - animated: boolean; - leavingEl: HTMLElement; - enteringEl: HTMLElement; - inTransition: boolean; - customTransition: boolean; - created(): void; - transition(enteringEl: HTMLElement, leavingEl: HTMLElement): Promise | undefined; - getDuration(): 0 | undefined; - getDirection(): "forward" | "back"; - beforeEnter(el: HTMLElement): void; - beforeLeave(el: HTMLElement): void; - leave(el: HTMLElement, done: (opts?: boolean) => void): void; - enter(_el: HTMLElement, done: () => void): void; - afterEnter(): void; - enterCancelled(): void; - afterLeave(): void; - leaveCancelled(): void; -} -export {}; -//# sourceMappingURL=ion-vue-router.vue?rollup-plugin-vue=script.d.ts.map \ No newline at end of file diff --git a/vue/types/framework-delegate.d.ts b/vue/types/framework-delegate.d.ts deleted file mode 100644 index 38cedbdbaa..0000000000 --- a/vue/types/framework-delegate.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { VueConstructor } from 'vue'; -import { FrameworkDelegate, HTMLVueElement, WebpackFunction } from './interfaces'; -export default class Delegate implements FrameworkDelegate { - vue: VueConstructor; - constructor(vue: VueConstructor); - attachViewToDom(parentElement: HTMLElement, component: HTMLElement | WebpackFunction | object | VueConstructor, opts?: object, classes?: string[]): Promise; - removeViewFromDom(_parentElement: HTMLElement, childElement: HTMLVueElement): Promise; - vueController(component: WebpackFunction | object | VueConstructor): Promise; - vueComponent(controller: VueConstructor, opts?: object): import("vue/types/vue").CombinedVueInstance>; -} -//# sourceMappingURL=framework-delegate.d.ts.map \ No newline at end of file diff --git a/vue/types/index.d.ts b/vue/types/index.d.ts deleted file mode 100644 index 39ce2c04f2..0000000000 --- a/vue/types/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Ionic } from './ionic'; -export { default as IonicAPI } from './api'; -export { default as IonicVueRouter } from './router'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vue/types/interfaces.d.ts b/vue/types/interfaces.d.ts deleted file mode 100644 index 38db7cd08e..0000000000 --- a/vue/types/interfaces.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -import Vue from 'vue'; -import IonicApi from './api'; -import VueRouter from 'vue-router'; -import { RouterOptions } from 'vue-router/types/router'; -declare module 'vue/types/vue' { - interface Vue { - $ionic: IonicApi; - } -} -declare module 'vue-router/types/router' { - interface VueRouter { - direction: number; - directionOverride: number | null; - canGoBack(): boolean; - } -} -export interface HTMLVueElement extends HTMLElement { - __vue__: Vue; -} -export interface VueWindow extends Window { - Vue: typeof Vue; - VueRouter: typeof VueRouter; - disableIonicTransitions: boolean; -} -export interface WebpackFunction extends Function { - cid: number; -} -export interface EsModule extends Object { - __esModule?: boolean; - [Symbol.toStringTag]: string; -} -export interface HTMLStencilElement extends HTMLElement { - componentOnReady(): Promise; - componentOnReady(done: (el?: this) => void): void; - forceUpdate(): void; -} -export interface FrameworkDelegate { - attachViewToDom(parentElement: HTMLElement, component: HTMLElement | WebpackFunction | object | Vue, opts?: object, classes?: string[]): Promise; - removeViewFromDom(parentElement: HTMLElement, childElement: HTMLVueElement): Promise; -} -export interface IonBackButton extends HTMLStencilElement { - defaultHref?: string; -} -export interface IonRouterOutlet extends HTMLStencilElement { - commit(enterinEl: HTMLElement, leavingEl: HTMLElement | undefined, opts?: object | undefined): Promise; -} -export interface ApiCache { - [key: string]: any; -} -export interface RouterArgs extends RouterOptions { - direction: number; - viewCount: number; -} -export interface ProxyControllerInterface { - create(opts: object): Promise; - dismiss(): Promise; - getTop(): Promise; -} -export interface ProxyDelegateOptions extends Object { - [key: string]: any; - delegate?: FrameworkDelegate; -} -export interface ProxyMenuControllerInterface { - open(menuId?: string): Promise; - close(menuId?: string): Promise; - toggle(menuId?: string): Promise; - enable(shouldEnable: boolean, menuId?: string): Promise; - swipeEnable(shouldEnable: boolean, menuId?: string): Promise; - isOpen(menuId?: string): Promise; - isEnabled(menuId?: string): Promise; - get(menuId?: string): Promise; - getOpen(): Promise; - getMenus(): Promise; -} -//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/vue/types/ionic.d.ts b/vue/types/ionic.d.ts deleted file mode 100644 index cea4595d76..0000000000 --- a/vue/types/ionic.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import '@ionic/core/css/ionic.bundle.css'; -import 'ionicons/dist/collection/icon/icon.css'; -import '@ionic/core/dist/ionic/svg'; -declare const _default: { - init(): void; -}; -export default _default; -//# sourceMappingURL=ionic.d.ts.map \ No newline at end of file diff --git a/vue/types/mixins/catch-ionic-go-back.d.ts b/vue/types/mixins/catch-ionic-go-back.d.ts deleted file mode 100644 index b6dc556034..0000000000 --- a/vue/types/mixins/catch-ionic-go-back.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Vue from 'vue'; -export default class CatchIonicGoBack extends Vue { - catchIonicGoBack(event: Event): void; -} -//# sourceMappingURL=catch-ionic-go-back.d.ts.map \ No newline at end of file diff --git a/vue/types/proxy-controller.d.ts b/vue/types/proxy-controller.d.ts deleted file mode 100644 index 26d95df0e2..0000000000 --- a/vue/types/proxy-controller.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ProxyControllerInterface } from './interfaces'; -export default class ProxyController implements ProxyControllerInterface { - tag: string; - constructor(tag: string); - create(opts?: object): Promise; - dismiss(): Promise; - getTop(): Promise; -} -//# sourceMappingURL=proxy-controller.d.ts.map \ No newline at end of file diff --git a/vue/types/proxy-delegate-controller.d.ts b/vue/types/proxy-delegate-controller.d.ts deleted file mode 100644 index df0c0a0548..0000000000 --- a/vue/types/proxy-delegate-controller.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import ProxyController from './proxy-controller'; -import { FrameworkDelegate, ProxyDelegateOptions } from './interfaces'; -export default class ProxyDelegateController extends ProxyController { - tag: string; - static delegate: FrameworkDelegate; - constructor(tag: string, delegate: FrameworkDelegate); - create(opts?: ProxyDelegateOptions): Promise; -} -//# sourceMappingURL=proxy-delegate-controller.d.ts.map \ No newline at end of file diff --git a/vue/types/proxy-menu-controller.d.ts b/vue/types/proxy-menu-controller.d.ts deleted file mode 100644 index 3b0c9b766d..0000000000 --- a/vue/types/proxy-menu-controller.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ProxyMenuControllerInterface } from './interfaces'; -export default class ProxyMenuController implements ProxyMenuControllerInterface { - tag: string; - constructor(tag: string); - open(menuId?: string): Promise; - close(menuId?: string): Promise; - toggle(menuId?: string): Promise; - enable(shouldEnable: boolean, menuId?: string): Promise; - swipeEnable(shouldEnable: boolean, menuId?: string): Promise; - isOpen(menuId?: string): Promise; - isEnabled(menuId?: string): Promise; - get(menuId?: string): Promise; - getOpen(): Promise; - getMenus(): Promise; -} -//# sourceMappingURL=proxy-menu-controller.d.ts.map \ No newline at end of file diff --git a/vue/types/router.d.ts b/vue/types/router.d.ts deleted file mode 100644 index ef2b7c7340..0000000000 --- a/vue/types/router.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import VueRouter, { Route } from 'vue-router'; -import { PluginFunction } from 'vue'; -import { RouterArgs } from './interfaces'; -declare const _VueRouter: typeof VueRouter; -export default class Router extends _VueRouter { - direction: number; - directionOverride: number | null; - viewCount: number; - prevRouteStack: Route[]; - history: any; - static installed: boolean; - static install: PluginFunction; - constructor(args?: RouterArgs); - extendHistory(): void; - canGoBack(): boolean; - guessDirection(nextRoute: Route): number; -} -export {}; -//# sourceMappingURL=router.d.ts.map \ No newline at end of file diff --git a/vue/types/types/interfaces.d.ts b/vue/types/types/interfaces.d.ts deleted file mode 100644 index 274ad7cda8..0000000000 --- a/vue/types/types/interfaces.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -import Vue from 'vue'; -import IonicApi from '../api'; -import VueRouter from 'vue-router'; -import { RouterOptions } from 'vue-router/types/router'; -declare module 'vue/types/vue' { - interface Vue { - $ionic: IonicApi; - } -} -declare module 'vue-router/types/router' { - interface VueRouter { - direction: number; - directionOverride: number | null; - canGoBack(): boolean; - } -} -export interface HTMLVueElement extends HTMLElement { - __vue__: Vue; -} -export interface VueWindow extends Window { - Vue: typeof Vue; - VueRouter: typeof VueRouter; - disableIonicTransitions: boolean; -} -export interface WebpackFunction extends Function { - cid: number; -} -export interface EsModule extends Object { - __esModule?: boolean; - [Symbol.toStringTag]: string; -} -export interface HTMLStencilElement extends HTMLElement { - componentOnReady(): Promise; - componentOnReady(done: (el?: this) => void): void; - forceUpdate(): void; -} -export interface FrameworkDelegate { - attachViewToDom(parentElement: HTMLElement, component: HTMLElement | WebpackFunction | object | Vue, opts?: object, classes?: string[]): Promise; - removeViewFromDom(parentElement: HTMLElement, childElement: HTMLVueElement): Promise; -} -export interface IonBackButton extends HTMLStencilElement { - defaultHref?: string; -} -export interface IonRouterOutlet extends HTMLStencilElement { - commit(enterinEl: HTMLElement, leavingEl: HTMLElement | undefined, opts?: object | undefined): Promise; -} -export interface ApiCache { - [key: string]: any; -} -export interface RouterArgs extends RouterOptions { - direction: number; - viewCount: number; -} -export interface ProxyControllerInterface { - create(opts: object): Promise; - dismiss(): Promise; - getTop(): Promise; -} -export interface ProxyDelegateOptions extends Object { - [key: string]: any; - delegate: FrameworkDelegate; -} -export interface ProxyMenuControllerInterface { - open(menuId?: string): Promise; - close(menuId?: string): Promise; - toggle(menuId?: string): Promise; - enable(shouldEnable: boolean, menuId?: string): Promise; - swipeEnable(shouldEnable: boolean, menuId?: string): Promise; - isOpen(menuId?: string): Promise; - isEnabled(menuId?: string): Promise; - get(menuId?: string): Promise; - getOpen(): Promise; - getMenus(): Promise; -} -//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file