From 10c69b4f17705ed1d1c2d23b74ef962a60e28a47 Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Mon, 10 Jul 2017 15:02:35 -0500 Subject: [PATCH] fix(): correct all type errors in ionic core. --- package-lock.json | 2427 +++ packages/core-hn-demo/package-lock.json | 1774 +++ .../core-hn-demo/www/.dev-diagnostics.html | 1406 ++ packages/core-hn-demo/www/build/app.js | 44 + .../core-hn-demo/www/build/app.registry.json | 933 ++ .../core-hn-demo/www/build/app/app.core.ce.js | 2073 +++ .../core-hn-demo/www/build/app/app.core.js | 2064 +++ ...t.comments-page.news-container.news-li.css | 108 + ...st.comments-page.news-container.news-li.js | 310 + ...-content.ion-footer.ion-header.ion-navb.js | 339 + .../app/ion-avatar.ion-badge.ion-thumbnail.js | 72 + .../app/ion-button.ion-buttons.ion-icon.js | 331 + ...n-card-content.ion-card-header.ion-card.js | 92 + .../www/build/app/ion-gesture.ion-scroll.js | 1013 ++ ...-item-divider.ion-label.ion-list.ion-l.css | 23 + ...n-item-divider.ion-label.ion-list.ion-l.js | 336 + .../ion-loading.ion-loading-controller.css | 23 + .../app/ion-loading.ion-loading-controller.js | 300 + .../core-hn-demo/www/build/app/ion-menu.js | 765 + .../app/ion-modal.ion-modal-controller.css | 27 + .../app/ion-modal.ion-modal-controller.js | 354 + .../www/build/app/ion-searchbar.js | 295 + .../app/ion-segment.ion-segment-button.js | 185 + .../www/build/app/ion-slide.ion-slides.css | 692 + .../www/build/app/ion-slide.ion-slides.js | 5755 +++++++ .../core-hn-demo/www/build/app/ion-spinner.js | 196 + .../core-hn-demo/www/build/app/ion-toggle.js | 164 + ...ion-content.ion-footer.ion-header.ion-.css | 2550 +++ ...ios.ion-avatar.ion-badge.ion-thumbnail.css | 63 + .../ios.ion-button.ion-buttons.ion-icon.css | 5095 ++++++ ....ion-card-content.ion-card-header.ion-.css | 703 + ....ion-item-divider.ion-label.ion-list.i.css | 627 + ...ios.ion-loading.ion-loading-controller.css | 73 + .../www/build/app/ios.ion-menu.css | 112 + .../ios.ion-modal.ion-modal-controller.css | 80 + .../www/build/app/ios.ion-searchbar.css | 358 + .../ios.ion-segment.ion-segment-button.css | 260 + .../www/build/app/ios.ion-spinner.css | 187 + .../www/build/app/ios.ion-toggle.css | 140 + ...on-content.ion-footer.ion-header.ion-n.css | 2474 +++ .../md.ion-avatar.ion-badge.ion-thumbnail.css | 63 + .../md.ion-button.ion-buttons.ion-icon.css | 5224 +++++++ ...ion-card-content.ion-card-header.ion-c.css | 737 + ...ion-item-divider.ion-label.ion-list.io.css | 631 + .../md.ion-loading.ion-loading-controller.css | 70 + .../www/build/app/md.ion-menu.css | 112 + .../app/md.ion-modal.ion-modal-controller.css | 82 + .../www/build/app/md.ion-searchbar.css | 142 + .../app/md.ion-segment.ion-segment-button.css | 126 + .../www/build/app/md.ion-spinner.css | 187 + .../www/build/app/md.ion-toggle.css | 142 + ...on-content.ion-footer.ion-header.ion-n.css | 2317 +++ .../wp.ion-avatar.ion-badge.ion-thumbnail.css | 63 + .../wp.ion-button.ion-buttons.ion-icon.css | 5138 ++++++ ...ion-card-content.ion-card-header.ion-c.css | 737 + ...ion-item-divider.ion-label.ion-list.io.css | 622 + .../wp.ion-loading.ion-loading-controller.css | 69 + .../www/build/app/wp.ion-menu.css | 100 + .../app/wp.ion-modal.ion-modal-controller.css | 74 + .../www/build/app/wp.ion-searchbar.css | 151 + .../app/wp.ion-segment.ion-segment-button.css | 113 + .../www/build/app/wp.ion-spinner.css | 187 + .../www/build/app/wp.ion-toggle.css | 146 + packages/core/package-lock.json | 1779 +++ packages/core/package.json | 2 +- packages/core/src/components/grid/col.tsx | 2 +- packages/core/src/components/grid/grid.tsx | 2 +- packages/core/src/components/grid/row.tsx | 2 +- .../src/components/menu/menu-controller.ts | 2 +- .../core/src/components/menu/menu-types.ts | 2 +- packages/core/src/components/menu/menu.tsx | 2 +- .../core/src/components/router/route-link.tsx | 8 +- packages/core/src/components/router/route.tsx | 6 +- .../core/src/components/router/router.tsx | 4 +- .../src/components/scroll/scroll-interface.ts | 2 +- .../src/components/searchbar/searchbar.tsx | 2 +- .../components/stencil-site/demos-page.tsx | 2 +- .../src/components/stencil-site/docs-page.tsx | 2 +- .../components/stencil-site/landing-page.tsx | 2 +- .../components/stencil-site/site-header.tsx | 2 +- .../components/stencil-site/stencil-site.tsx | 2 +- packages/core/src/components/tabs/tab-bar.tsx | 7 +- .../core/src/components/tabs/tab-button.tsx | 6 +- packages/core/src/components/tabs/tab.tsx | 2 +- packages/core/src/components/tabs/tabs.tsx | 16 +- packages/core/src/components/title/title.tsx | 2 +- .../core/src/components/toggle/toggle.tsx | 2 +- packages/core/src/utils/interfaces.ts | 52 - packages/core/tsconfig.json | 3 - packages/core/www/.dev-diagnostics.html | 470 + packages/ionic-angular/package-lock.json | 12912 ++++++++++++++++ 91 files changed, 67264 insertions(+), 89 deletions(-) create mode 100644 package-lock.json create mode 100644 packages/core-hn-demo/package-lock.json create mode 100644 packages/core-hn-demo/www/.dev-diagnostics.html create mode 100644 packages/core-hn-demo/www/build/app.js create mode 100644 packages/core-hn-demo/www/build/app.registry.json create mode 100644 packages/core-hn-demo/www/build/app/app.core.ce.js create mode 100644 packages/core-hn-demo/www/build/app/app.core.js create mode 100644 packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.css create mode 100644 packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.js create mode 100644 packages/core-hn-demo/www/build/app/ion-app.ion-content.ion-footer.ion-header.ion-navb.js create mode 100644 packages/core-hn-demo/www/build/app/ion-avatar.ion-badge.ion-thumbnail.js create mode 100644 packages/core-hn-demo/www/build/app/ion-button.ion-buttons.ion-icon.js create mode 100644 packages/core-hn-demo/www/build/app/ion-card.ion-card-content.ion-card-header.ion-card.js create mode 100644 packages/core-hn-demo/www/build/app/ion-gesture.ion-scroll.js create mode 100644 packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.css create mode 100644 packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.js create mode 100644 packages/core-hn-demo/www/build/app/ion-loading.ion-loading-controller.css create mode 100644 packages/core-hn-demo/www/build/app/ion-loading.ion-loading-controller.js create mode 100644 packages/core-hn-demo/www/build/app/ion-menu.js create mode 100644 packages/core-hn-demo/www/build/app/ion-modal.ion-modal-controller.css create mode 100644 packages/core-hn-demo/www/build/app/ion-modal.ion-modal-controller.js create mode 100644 packages/core-hn-demo/www/build/app/ion-searchbar.js create mode 100644 packages/core-hn-demo/www/build/app/ion-segment.ion-segment-button.js create mode 100644 packages/core-hn-demo/www/build/app/ion-slide.ion-slides.css create mode 100644 packages/core-hn-demo/www/build/app/ion-slide.ion-slides.js create mode 100644 packages/core-hn-demo/www/build/app/ion-spinner.js create mode 100644 packages/core-hn-demo/www/build/app/ion-toggle.js create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-app.ion-content.ion-footer.ion-header.ion-.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-avatar.ion-badge.ion-thumbnail.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-button.ion-buttons.ion-icon.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-card.ion-card-content.ion-card-header.ion-.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-item.ion-item-divider.ion-label.ion-list.i.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-loading.ion-loading-controller.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-menu.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-modal.ion-modal-controller.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-searchbar.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-segment.ion-segment-button.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-spinner.css create mode 100644 packages/core-hn-demo/www/build/app/ios.ion-toggle.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-app.ion-content.ion-footer.ion-header.ion-n.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-avatar.ion-badge.ion-thumbnail.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-button.ion-buttons.ion-icon.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-card.ion-card-content.ion-card-header.ion-c.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-item.ion-item-divider.ion-label.ion-list.io.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-loading.ion-loading-controller.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-menu.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-modal.ion-modal-controller.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-searchbar.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-segment.ion-segment-button.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-spinner.css create mode 100644 packages/core-hn-demo/www/build/app/md.ion-toggle.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-app.ion-content.ion-footer.ion-header.ion-n.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-avatar.ion-badge.ion-thumbnail.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-button.ion-buttons.ion-icon.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-card.ion-card-content.ion-card-header.ion-c.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-item.ion-item-divider.ion-label.ion-list.io.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-loading.ion-loading-controller.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-menu.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-modal.ion-modal-controller.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-searchbar.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-segment.ion-segment-button.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-spinner.css create mode 100644 packages/core-hn-demo/www/build/app/wp.ion-toggle.css create mode 100644 packages/core/package-lock.json create mode 100644 packages/core/www/.dev-diagnostics.html create mode 100644 packages/ionic-angular/package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..8c0bad5089 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2427 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "dev": true + }, + "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 + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "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 + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "ci-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", + "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "cmd-shim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", + "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.2" + } + }, + "color-name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", + "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=", + "dev": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "3.0.1", + "wcwidth": "1.0.1" + } + }, + "command-join": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz", + "integrity": "sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=", + "dev": true + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "1.0.0", + "dot-prop": "3.0.0" + } + }, + "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 + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "conventional-changelog": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.3.tgz", + "integrity": "sha1-JigweKw4wJTfKvFgSwpGu8AWXE0=", + "dev": true, + "requires": { + "conventional-changelog-angular": "1.3.3", + "conventional-changelog-atom": "0.1.0", + "conventional-changelog-codemirror": "0.1.0", + "conventional-changelog-core": "1.8.0", + "conventional-changelog-ember": "0.2.5", + "conventional-changelog-eslint": "0.1.0", + "conventional-changelog-express": "0.1.0", + "conventional-changelog-jquery": "0.1.0", + "conventional-changelog-jscs": "0.1.0", + "conventional-changelog-jshint": "0.1.0" + } + }, + "conventional-changelog-angular": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.3.3.tgz", + "integrity": "sha1-586AeoXdR1DhtBf3ZgRUl1EeByY=", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "github-url-from-git": "1.5.0", + "q": "1.5.0" + } + }, + "conventional-changelog-atom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.0.tgz", + "integrity": "sha1-Z6R8ZqQrL4kJ7xWHyZia4d5zC5I=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-cli": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.1.tgz", + "integrity": "sha1-HNWp264l/7X/5nr+8eE26s7v0tU=", + "dev": true, + "requires": { + "add-stream": "1.0.0", + "conventional-changelog": "1.1.3", + "lodash": "4.17.4", + "meow": "3.7.0", + "tempfile": "1.1.1" + } + }, + "conventional-changelog-codemirror": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.1.0.tgz", + "integrity": "sha1-dXelkdv5tTjnoVCn7mL2WihyszQ=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-core": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.8.0.tgz", + "integrity": "sha1-l3hItBbK8V+wnyCxKmLUDvFFuVc=", + "dev": true, + "requires": { + "conventional-changelog-writer": "1.4.1", + "conventional-commits-parser": "1.3.0", + "dateformat": "1.0.12", + "get-pkg-repo": "1.4.0", + "git-raw-commits": "1.2.0", + "git-remote-origin-url": "2.0.0", + "git-semver-tags": "1.2.0", + "lodash": "4.17.4", + "normalize-package-data": "2.4.0", + "q": "1.5.0", + "read-pkg": "1.1.0", + "read-pkg-up": "1.0.1", + "through2": "2.0.3" + }, + "dependencies": { + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + } + } + }, + "conventional-changelog-ember": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.5.tgz", + "integrity": "sha1-ziHVz4PNXr4F0j/fIy2IRPS1ak8=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-eslint": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.1.0.tgz", + "integrity": "sha1-pSQR6ZngUBzlALhWsKZD0DMJB+I=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-express": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.1.0.tgz", + "integrity": "sha1-VcbIQcgRliA2wDe9vZZKVK4xD84=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-jquery": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", + "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-jscs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", + "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "conventional-changelog-jshint": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.1.0.tgz", + "integrity": "sha1-AMq46aMxdIer2UxNhGcTQpGNKgc=", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "q": "1.5.0" + } + }, + "conventional-changelog-writer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz", + "integrity": "sha1-P0y00APrtWmJ0w00WJO1KkNjnI4=", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "conventional-commits-filter": "1.0.0", + "dateformat": "1.0.12", + "handlebars": "4.0.10", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.4", + "meow": "3.7.0", + "semver": "5.3.0", + "split": "1.0.0", + "through2": "2.0.3" + } + }, + "conventional-commits-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.0.0.tgz", + "integrity": "sha1-b8KmWTcrw/IznPn//34bA0S5MDk=", + "dev": true, + "requires": { + "is-subset": "0.1.1", + "modify-values": "1.0.0" + } + }, + "conventional-commits-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz", + "integrity": "sha1-4ye1MZThp61dxjR57pCZpSsCSGU=", + "dev": true, + "requires": { + "is-text-path": "1.0.1", + "JSONStream": "1.3.1", + "lodash": "4.17.4", + "meow": "3.7.0", + "split2": "2.1.1", + "through2": "2.0.3", + "trim-off-newlines": "1.0.1" + } + }, + "conventional-recommended-bump": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.0.0.tgz", + "integrity": "sha1-bTA6J4N66Ti3xoyN3u00VZtLB4k=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "conventional-commits-filter": "1.0.0", + "conventional-commits-parser": "1.3.0", + "git-raw-commits": "1.2.0", + "git-semver-tags": "1.2.0", + "meow": "3.7.0", + "object-assign": "4.1.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.2.14" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.2" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "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 + }, + "execa": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.6.3.tgz", + "integrity": "sha1-V7aaWU8IF1nGnlNw8NF7nLEWWP4=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "external-editor": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", + "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", + "dev": true, + "requires": { + "iconv-lite": "0.4.18", + "jschardet": "1.4.2", + "tmp": "0.0.31" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-pkg-repo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", + "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "meow": "3.7.0", + "normalize-package-data": "2.4.0", + "parse-github-repo-url": "1.4.0", + "through2": "2.0.3" + } + }, + "get-port": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.1.0.tgz", + "integrity": "sha1-7wGxioTKZIaXD/meVERhQac//T4=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "git-raw-commits": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.2.0.tgz", + "integrity": "sha1-DzqL/ZmuDy2LkiTViJKXXppS0Dw=", + "dev": true, + "requires": { + "dargs": "4.1.0", + "lodash.template": "4.4.0", + "meow": "3.7.0", + "split2": "2.1.1", + "through2": "2.0.3" + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "1.0.0", + "pify": "2.3.0" + } + }, + "git-semver-tags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.0.tgz", + "integrity": "sha1-sx/QLIq1eL1sm1ysyl4cZMEXesE=", + "dev": true, + "requires": { + "meow": "3.7.0", + "semver": "5.3.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "1.3.4" + } + }, + "github-url-from-git": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz", + "integrity": "sha1-+YX+3MCpqledyI16/waNVcxiUaA=", + "dev": true + }, + "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" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "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 + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inquirer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.0.tgz", + "integrity": "sha512-4CyUYMP7lOBkiUU1rR24WGrfRX6SucwbY2Mqb1PdApU24wnTIk4TsnkQwV72dDdIKZ2ycLP+fWCV+tA7wwgoew==", + "dev": true, + "requires": { + "ansi-escapes": "2.0.0", + "chalk": "2.0.1", + "cli-cursor": "2.1.0", + "cli-width": "2.1.0", + "external-editor": "2.0.4", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.0", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", + "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-ci": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "dev": true, + "requires": { + "ci-info": "1.0.0" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "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-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "1.5.0" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jschardet": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.4.2.tgz", + "integrity": "sha1-KqEH8UKvQSHRRWWdRPUIMJYeaZo=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "lerna": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.0.0.tgz", + "integrity": "sha1-Sacv5w4Grr/X6iPvsqtBq+YOvuo=", + "dev": true, + "requires": { + "async": "1.5.2", + "chalk": "1.1.3", + "cmd-shim": "2.0.2", + "columnify": "1.5.4", + "command-join": "2.0.0", + "conventional-changelog-cli": "1.3.1", + "conventional-recommended-bump": "1.0.0", + "dedent": "0.7.0", + "execa": "0.6.3", + "find-up": "2.1.0", + "fs-extra": "3.0.1", + "get-port": "3.1.0", + "glob": "7.1.2", + "globby": "6.1.0", + "graceful-fs": "4.1.11", + "inquirer": "3.2.0", + "is-ci": "1.0.10", + "load-json-file": "2.0.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "npmlog": "4.1.2", + "p-finally": "1.0.0", + "path-exists": "3.0.0", + "read-cmd-shim": "1.0.1", + "read-pkg": "2.0.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "semver": "5.3.0", + "signal-exit": "3.0.2", + "strong-log-transformer": "1.0.6", + "temp-write": "3.3.0", + "write-file-atomic": "2.1.0", + "write-json-file": "2.2.0", + "write-pkg": "3.1.0", + "yargs": "8.0.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "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.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "modify-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz", + "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", + "dev": true + }, + "moment": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "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 + }, + "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" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "os-locale": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.0.0.tgz", + "integrity": "sha1-FZGN7VEFIrge565aMJ1U9jn8OaQ=", + "dev": true, + "requires": { + "execa": "0.5.1", + "lcid": "1.0.0", + "mem": "1.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "execa": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz", + "integrity": "sha1-3j+4XLjW6RyFvLzrFkWBeFy1ezY=", + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "get-stream": "2.3.1", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "parse-github-repo-url": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.0.tgz", + "integrity": "sha1-KGxT4smWLgZBZJ7jrJUI/KTdlZw=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "read-cmd-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", + "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "split": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", + "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "split2": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.1.1.tgz", + "integrity": "sha1-eh9VHhdqkOzTNF9yRqDP4XXvT9A=", + "dev": true, + "requires": { + "through2": "2.0.3" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "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" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strong-log-transformer": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz", + "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=", + "dev": true, + "requires": { + "byline": "5.0.0", + "duplexer": "0.1.1", + "minimist": "0.1.0", + "moment": "2.18.1", + "through": "2.3.8" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "dev": true + } + } + }, + "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 + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "temp-write": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.3.0.tgz", + "integrity": "sha1-walt4rNgYTQuroH0T/ABrsj2Fak=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "is-stream": "1.1.0", + "make-dir": "1.0.0", + "pify": "2.3.0", + "temp-dir": "1.0.0", + "uuid": "3.1.0" + }, + "dependencies": { + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + } + } + }, + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "uuid": "2.0.3" + } + }, + "text-extensions": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.5.0.tgz", + "integrity": "sha1-0cstFLXQvEW/3Kigikc/aMfrDLw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "universalify": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.0.tgz", + "integrity": "sha1-nrHEZR3rzGcMyU8adXYjMruWd3g=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "1.0.3" + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", + "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "write-json-file": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.2.0.tgz", + "integrity": "sha1-UYYlBruzthnu+reFnx/WxtBTCHY=", + "dev": true, + "requires": { + "detect-indent": "5.0.0", + "graceful-fs": "4.1.11", + "make-dir": "1.0.0", + "pify": "2.3.0", + "sort-keys": "1.1.2", + "write-file-atomic": "2.1.0" + } + }, + "write-pkg": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.1.0.tgz", + "integrity": "sha1-AwqZlMyZk9JbTnWp8aGSNgcpHOk=", + "dev": true, + "requires": { + "sort-keys": "2.0.0", + "write-json-file": "2.2.0" + }, + "dependencies": { + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + } + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.0.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.0", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } +} diff --git a/packages/core-hn-demo/package-lock.json b/packages/core-hn-demo/package-lock.json new file mode 100644 index 0000000000..15e1c0b409 --- /dev/null +++ b/packages/core-hn-demo/package-lock.json @@ -0,0 +1,1774 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@stencil/core": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.1.tgz", + "integrity": "sha1-WzTPyA5iDdZONS5H6zuIGBRPg2M=", + "requires": { + "chalk": "1.1.3", + "clean-css": "4.1.6", + "node-sass": "4.5.3", + "rollup": "0.41.4", + "rollup-plugin-commonjs": "8.0.2", + "rollup-plugin-node-resolve": "3.0.0", + "typescript": "2.4.0", + "uglify-js": "3.0.24" + } + }, + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "clean-css": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.6.tgz", + "integrity": "sha1-Wke+tSaZTLT3vzYYilXtO0VSjws=", + "requires": { + "source-map": "0.5.6" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "1.0.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "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=" + }, + "estree-walker": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.3.1.tgz", + "integrity": "sha1-5rGlHPcpJSTnI3wxLl/mZgwc4ao=" + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "requires": { + "globule": "1.2.0" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "2.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.mergewith": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "magic-string": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz", + "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=", + "requires": { + "vlq": "0.2.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.14" + } + }, + "node-sass": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", + "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.81.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1.1.0" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.0.2" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "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=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "requires": { + "path-parse": "1.0.5" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "requires": { + "glob": "7.1.2" + } + }, + "rollup": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.41.4.tgz", + "integrity": "sha1-qXBYAXYyn56thoVNf9TEbedSrvg=", + "requires": { + "source-map-support": "0.4.15" + } + }, + "rollup-plugin-commonjs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.0.2.tgz", + "integrity": "sha1-mLFYm/4ypsD2d5C2DAtJmXKv7Yk=", + "requires": { + "acorn": "4.0.13", + "estree-walker": "0.3.1", + "magic-string": "0.19.1", + "resolve": "1.3.3", + "rollup-pluginutils": "2.0.1" + } + }, + "rollup-plugin-node-resolve": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz", + "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=", + "requires": { + "browser-resolve": "1.11.2", + "builtin-modules": "1.1.1", + "is-module": "1.0.0", + "resolve": "1.3.3" + } + }, + "rollup-pluginutils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz", + "integrity": "sha1-fslbNXP2VDpGpkYb2afFRFJdD8A=", + "requires": { + "estree-walker": "0.3.1", + "micromatch": "2.3.11" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "requires": { + "source-map": "0.5.6" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "4.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "typescript": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.0.tgz", + "integrity": "sha1-rvWo1AS+ujatM5q/B53d3/+6ht0=" + }, + "uglify-js": { + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.24.tgz", + "integrity": "sha512-IZ7l7MU2j7LIuz6IAFWBOk1dbuQ0QVQsKLffpNPKXuL8NYcFBBQ5QkvMAtfL1+oaBW16344DY4sA26GI9cXzlA==", + "requires": { + "commander": "2.9.0", + "source-map": "0.5.6" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } + }, + "vlq": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", + "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=" + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "requires": { + "string-width": "1.0.2" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + } + } +} diff --git a/packages/core-hn-demo/www/.dev-diagnostics.html b/packages/core-hn-demo/www/.dev-diagnostics.html new file mode 100644 index 0000000000..44f6254b76 --- /dev/null +++ b/packages/core-hn-demo/www/.dev-diagnostics.html @@ -0,0 +1,1406 @@ + + + + + Dev Diagnostics + + + + +
+
+
Build Error
+
TypeError: Cannot read property 'fileName' of undefined + at loadDiagnostic (/Users/joshthomas/Workspace/stencil/dist/compiler/index.js:2571:26) + at /Users/joshthomas/Workspace/stencil/dist/compiler/index.js:2553:17 + at Array.forEach (native) + at loadTypeScriptDiagnostics (/Users/joshthomas/Workspace/stencil/dist/compiler/index.js:2552:19) + at transpileFile (/Users/joshthomas/Workspace/stencil/dist/compiler/index.js:3205:5) + at /Users/joshthomas/Workspace/stencil/dist/compiler/index.js:3172:16
+
+
+
null
+
+
+ +
+
+
Typescript Error
+
Property 'comments' does not exist on type 'any[]'.
+
+
+
src/components/news-list.tsx
+
+ + + + + + + + + + + + + +
loading.dismiss().then(() => {
Ionic.controller('modal', { component: 'comments-page', componentProps: { comments: data.comments, storyId: story.id } }).then(modal => {
console.log('modal created');
+
+
+
+ +
+
+
Build Error
+
Component tag "comments-list" is defined in a bundle but no matching component was found within this project or its collections.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Component tag "comments-page" is defined in a bundle but no matching component was found within this project or its collections.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Component tag "news-container" is defined in a bundle but no matching component was found within this project or its collections.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Component tag "news-list" is defined in a bundle but no matching component was found within this project or its collections.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/app/app.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/content/content.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/page/page.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/title/title.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/toolbar/toolbar.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/app/app.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/content/content.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/page/page.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/title/title.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/toolbar/toolbar.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/app/app.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/content/content.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/page/page.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/title/title.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/toolbar/toolbar.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/avatar/avatar.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/badge/badge.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/thumbnail/thumbnail.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/avatar/avatar.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/badge/badge.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/thumbnail/thumbnail.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/avatar/avatar.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/badge/badge.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/thumbnail/thumbnail.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/button/button.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/icon/icon.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/button/button.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/icon/icon.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/button/button.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/icon/icon.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card/card.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-content/card-content.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-header/card-header.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-title/card-title.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card/card.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-content/card-content.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-header/card-header.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-title/card-title.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card/card.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-content/card-content.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-header/card-header.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/card-title/card-title.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/skeleton-text/skeleton-text.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/item/item.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/item-divider/item-divider.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/label/label.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/list/list.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/item/item.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/item-divider/item-divider.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/label/label.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/list/list.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/item/item.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/item-divider/item-divider.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/label/label.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/list/list.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/loading-controller/loading-controller.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/loading/loading.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/loading/loading.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/loading/loading.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/menu/menu.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/menu/menu.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/menu/menu.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/modal-controller/modal-controller.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/modal/modal.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/modal/modal.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/modal/modal.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/searchbar/searchbar.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/searchbar/searchbar.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/searchbar/searchbar.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/segment/segment.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/segment/segment.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/segment/segment.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/slides/slide.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/slides/slides.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/spinner/spinner.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/spinner/spinner.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/spinner/spinner.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/toggle/toggle.ios.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/toggle/toggle.md.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Error: File to read not found or unreadable: /Users/joshthomas/Workspace/ionic-mono/core/dist/collection/components/toggle/toggle.wp.scss
+
+
+
null
+
+
+ +
+
+
Build Error
+
Unable to find component "comments-list" in available config and collection.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Unable to find component "comments-page" in available config and collection.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Unable to find component "news-container" in available config and collection.
+
+
+
null
+
+
+ +
+
+
Build Error
+
Unable to find component "news-list" in available config and collection.
+
+
+
null
+
+
+ +
+
+
Build Error
+
No components found to bundle
+
+
+
null
+
+
+ +
+
+
Build Warn
+
ion-item, ion-item-divider, ion-label, ion-list, ion-list-header, ion-skeleton-text: ../core/dist/collection/components/item/item.js (1:16) The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten
+
+
+
null
+
+
+ +
+
+
Build Warn
+
ion-menu: ../core/dist/collection/components/menu/menu-types.js (1:17) The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten
+
+
+
null
+
+
+ + + + + \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app.js b/packages/core-hn-demo/www/build/app.js new file mode 100644 index 0000000000..f6b7a233f8 --- /dev/null +++ b/packages/core-hn-demo/www/build/app.js @@ -0,0 +1,44 @@ +/*! Built with http://stenciljs.com */ + +(function (window, document, projectNamespace, projectFileName, projectCore, projectCoreEs5, components) { + 'use strict'; + // create global namespace if it doesn't already exist + + var Project = window[projectNamespace] = window[projectNamespace] || {}; + Project.components = Project.components || components; + Project.ns = projectNamespace; + // find the static directory, which should be the same as this JS file + // reusing the "x" and "y" variables for funzies + var x = document.getElementsByTagName('script'); + x = x[x.length - 1]; + var y = document.querySelector('script[data-static-dir]'); + if (y) { + Project.staticDir = y.dataset['staticDir']; + } else { + y = x.src.split('/'); + y.pop(); + Project.staticDir = x.dataset['staticDir'] = y.join('/') + '/'; + } + Project.staticDir += projectFileName + '/'; + // auto hide components until they been fully hydrated + x = document.createElement('style'); + x.innerHTML = Project.components.map(function (c) { + return c[0]; + }).join(',') + '{visibility:hidden}.hydrated{visibility:inherit}'; + x.innerHTML += 'ion-app:not(.hydrated){display:none}'; + document.head.appendChild(x); + // request the core file this browser needs + y = document.createElement('script'); + y.src = Project.staticDir + (window.customElements ? projectCore : projectCoreEs5); + document.head.appendChild(y); + // performance.now() polyfill + if ('performance' in window === false) { + window.performance = {}; + } + if ('now' in performance === false) { + var navStart = Date.now(); + performance.now = function () { + return Date.now() - navStart; + }; + } +})(window, document, "App","app","app.core.js","app.core.ce.js",[["ION-APP","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},1],["ION-AVATAR","ion-avatar.ion-badge.ion-thumbnail",{"ios":"ios.ion-avatar.ion-badge.ion-thumbnail","md":"md.ion-avatar.ion-badge.ion-thumbnail","wp":"wp.ion-avatar.ion-badge.ion-thumbnail"},1],["ION-BADGE","ion-avatar.ion-badge.ion-thumbnail",{"ios":"ios.ion-avatar.ion-badge.ion-thumbnail","md":"md.ion-avatar.ion-badge.ion-thumbnail","wp":"wp.ion-avatar.ion-badge.ion-thumbnail"},1],["ION-BUTTON","ion-button.ion-buttons.ion-icon",{"ios":"ios.ion-button.ion-buttons.ion-icon","md":"md.ion-button.ion-buttons.ion-icon","wp":"wp.ion-button.ion-buttons.ion-icon"},2,[["block",0,1],["buttonType"],["clear",0,1],["color"],["default",0,1],["disabled",0,1],["full",0,1],["href"],["itemButton",0,1],["large",0,1],["mode"],["outline",0,1],["round",0,1],["small",0,1],["solid",0,1],["strong",0,1]]],["ION-BUTTONS","ion-button.ion-buttons.ion-icon",{"ios":"ios.ion-button.ion-buttons.ion-icon","md":"md.ion-button.ion-buttons.ion-icon","wp":"wp.ion-button.ion-buttons.ion-icon"},1],["ION-CARD","ion-card.ion-card-content.ion-card-header.ion-card",{"ios":"ios.ion-card.ion-card-content.ion-card-header.ion-","md":"md.ion-card.ion-card-content.ion-card-header.ion-c","wp":"wp.ion-card.ion-card-content.ion-card-header.ion-c"},1],["ION-CARD-CONTENT","ion-card.ion-card-content.ion-card-header.ion-card",{"ios":"ios.ion-card.ion-card-content.ion-card-header.ion-","md":"md.ion-card.ion-card-content.ion-card-header.ion-c","wp":"wp.ion-card.ion-card-content.ion-card-header.ion-c"},1],["ION-CARD-HEADER","ion-card.ion-card-content.ion-card-header.ion-card",{"ios":"ios.ion-card.ion-card-content.ion-card-header.ion-","md":"md.ion-card.ion-card-content.ion-card-header.ion-c","wp":"wp.ion-card.ion-card-content.ion-card-header.ion-c"},1],["ION-CARD-TITLE","ion-card.ion-card-content.ion-card-header.ion-card",{"ios":"ios.ion-card.ion-card-content.ion-card-header.ion-","md":"md.ion-card.ion-card-content.ion-card-header.ion-c","wp":"wp.ion-card.ion-card-content.ion-card-header.ion-c"},1],["ION-CONTENT","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},1,[["fullscreen",0,1],["ionScroll"],["ionScrollEnd"],["ionScrollStart"]]],["ION-FOOTER","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},1],["ION-GESTURE","ion-gesture.ion-scroll",{},0,[["attachTo"],["autoBlockAll",0,1],["block"],["canStart"],["direction"],["disableScroll",0,1],["gestureName"],["gesturePriority",0,2],["maxAngle",0,2],["notCaptured"],["onEnd"],["onMove"],["onPress"],["onStart"],["threshold",0,2],["type"]]],["ION-HEADER","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},1],["ION-ICON","ion-button.ion-buttons.ion-icon",{"ios":"ios.ion-button.ion-buttons.ion-icon","md":"md.ion-button.ion-buttons.ion-icon","wp":"wp.ion-button.ion-buttons.ion-icon"},1,[["color"],["hidden",0,1],["ios"],["isActive",0,1],["md"],["name"]]],["ION-ITEM","ion-item.ion-item-divider.ion-label.ion-list.ion-l",{"$":"ion-item.ion-item-divider.ion-label.ion-list.ion-l","ios":"ios.ion-item.ion-item-divider.ion-label.ion-list.i","md":"md.ion-item.ion-item-divider.ion-label.ion-list.io","wp":"wp.ion-item.ion-item-divider.ion-label.ion-list.io"},2,[["color"],["mode"]]],["ION-ITEM-DIVIDER","ion-item.ion-item-divider.ion-label.ion-list.ion-l",{"$":"ion-item.ion-item-divider.ion-label.ion-list.ion-l","ios":"ios.ion-item.ion-item-divider.ion-label.ion-list.i","md":"md.ion-item.ion-item-divider.ion-label.ion-list.io","wp":"wp.ion-item.ion-item-divider.ion-label.ion-list.io"},2],["ION-LABEL","ion-item.ion-item-divider.ion-label.ion-list.ion-l",{"$":"ion-item.ion-item-divider.ion-label.ion-list.ion-l","ios":"ios.ion-item.ion-item-divider.ion-label.ion-list.i","md":"md.ion-item.ion-item-divider.ion-label.ion-list.io","wp":"wp.ion-item.ion-item-divider.ion-label.ion-list.io"},1],["ION-LIST","ion-item.ion-item-divider.ion-label.ion-list.ion-l",{"$":"ion-item.ion-item-divider.ion-label.ion-list.ion-l","ios":"ios.ion-item.ion-item-divider.ion-label.ion-list.i","md":"md.ion-item.ion-item-divider.ion-label.ion-list.io","wp":"wp.ion-item.ion-item-divider.ion-label.ion-list.io"},1],["ION-LIST-HEADER","ion-item.ion-item-divider.ion-label.ion-list.ion-l",{"$":"ion-item.ion-item-divider.ion-label.ion-list.ion-l","ios":"ios.ion-item.ion-item-divider.ion-label.ion-list.i","md":"md.ion-item.ion-item-divider.ion-label.ion-list.io","wp":"wp.ion-item.ion-item-divider.ion-label.ion-list.io"},1],["ION-LOADING","ion-loading.ion-loading-controller",{"$":"ion-loading.ion-loading-controller","ios":"ios.ion-loading.ion-loading-controller","md":"md.ion-loading.ion-loading-controller","wp":"wp.ion-loading.ion-loading-controller"},0,[["content"],["cssClass"],["dismissOnPageChange",0,1],["duration",0,2],["enterAnimation"],["exitAnimation"],["id"],["showBackdrop",0,1]]],["ION-LOADING-CONTROLLER","ion-loading.ion-loading-controller",{"$":"ion-loading.ion-loading-controller","ios":"ios.ion-loading.ion-loading-controller","md":"md.ion-loading.ion-loading-controller","wp":"wp.ion-loading.ion-loading-controller"}],["ION-MENU","ion-menu",{"ios":"ios.ion-menu","md":"md.ion-menu","wp":"wp.ion-menu"},1,[["content"],["enabled",0,1],["id"],["isAnimating",0,1],["isOpen",0,1],["maxEdgeStart",0,2],["persistent",0,1],["side"],["swipeEnabled",0,1],["type"]]],["ION-MODAL","ion-modal.ion-modal-controller",{"$":"ion-modal.ion-modal-controller","ios":"ios.ion-modal.ion-modal-controller","md":"md.ion-modal.ion-modal-controller","wp":"wp.ion-modal.ion-modal-controller"},0,[["color"],["component"],["componentProps"],["cssClass"],["enableBackdropDismiss",0,1],["enterAnimation"],["exitAnimation"],["id"],["mode"],["showBackdrop",0,1]]],["ION-MODAL-CONTROLLER","ion-modal.ion-modal-controller",{"$":"ion-modal.ion-modal-controller","ios":"ios.ion-modal.ion-modal-controller","md":"md.ion-modal.ion-modal-controller","wp":"wp.ion-modal.ion-modal-controller"}],["ION-NAVBAR","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},2,[["backButtonIcon"],["backButtonText"],["hidden",0,1],["hideBackButton",0,1]]],["ION-PAGE","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},1],["ION-SCROLL","ion-gesture.ion-scroll",{},1,[["enabled",0,1],["ionScroll"],["ionScrollEnd"],["ionScrollStart"],["jsScroll",0,1]]],["ION-SEARCHBAR","ion-searchbar",{"ios":"ios.ion-searchbar","md":"md.ion-searchbar","wp":"wp.ion-searchbar"},0,[["animated",0,1,1],["autocomplete",0,0,1],["autocorrect",0,0,1],["cancelButtonText",0,0,1],["color"],["debounce",0,2,1],["mode"],["placeholder",0,0,1],["showCancelButton",0,1,1],["spellcheck",0,1,1],["type",0,0,1],["value",0,0,1]]],["ION-SEGMENT","ion-segment.ion-segment-button",{"ios":"ios.ion-segment.ion-segment-button","md":"md.ion-segment.ion-segment-button","wp":"wp.ion-segment.ion-segment-button"},1,[["disabled",0,1,1],["value",0,0,1]]],["ION-SEGMENT-BUTTON","ion-segment.ion-segment-button",{"ios":"ios.ion-segment.ion-segment-button","md":"md.ion-segment.ion-segment-button","wp":"wp.ion-segment.ion-segment-button"},1,[["checked",0,1,1],["disabled",0,1,1],["value",0,0,1]]],["ION-SKELETON-TEXT","ion-item.ion-item-divider.ion-label.ion-list.ion-l",{"$":"ion-item.ion-item-divider.ion-label.ion-list.ion-l","ios":"ios.ion-item.ion-item-divider.ion-label.ion-list.i","md":"md.ion-item.ion-item-divider.ion-label.ion-list.io","wp":"wp.ion-item.ion-item-divider.ion-label.ion-list.io"},0,[["width"]]],["ION-SLIDE","ion-slide.ion-slides",{"$":"ion-slide.ion-slides"},1],["ION-SLIDES","ion-slide.ion-slides",{"$":"ion-slide.ion-slides"},1,[["autoplay",0,2],["control"],["direction"],["effect"],["initialSlide",0,2],["keyboardControl",0,1],["loop",0,1],["pager",0,1],["paginationType"],["parallax",0,1],["slidesPerView"],["spaceBetween",0,2],["speed",0,2],["zoom",0,1]]],["ION-SPINNER","ion-spinner",{"ios":"ios.ion-spinner","md":"md.ion-spinner","wp":"wp.ion-spinner"},0,[["color"],["duration",0,2],["mode"],["name"],["paused",0,1]]],["ION-THUMBNAIL","ion-avatar.ion-badge.ion-thumbnail",{"ios":"ios.ion-avatar.ion-badge.ion-thumbnail","md":"md.ion-avatar.ion-badge.ion-thumbnail","wp":"wp.ion-avatar.ion-badge.ion-thumbnail"},1],["ION-TITLE","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},1],["ION-TOGGLE","ion-toggle",{"ios":"ios.ion-toggle","md":"md.ion-toggle","wp":"wp.ion-toggle"},0,[["checked",0,1,1],["color"],["disabled",0,1,1],["mode"],["value",0,0,1]]],["ION-TOOLBAR","ion-app.ion-content.ion-footer.ion-header.ion-navb",{"ios":"ios.ion-app.ion-content.ion-footer.ion-header.ion-","md":"md.ion-app.ion-content.ion-footer.ion-header.ion-n","wp":"wp.ion-app.ion-content.ion-footer.ion-header.ion-n"},2]]); \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app.registry.json b/packages/core-hn-demo/www/build/app.registry.json new file mode 100644 index 0000000000..04029c9989 --- /dev/null +++ b/packages/core-hn-demo/www/build/app.registry.json @@ -0,0 +1,933 @@ +{ + "namespace": "App", + "components": [ + [ + "ION-APP", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 1 + ], + [ + "ION-AVATAR", + "ion-avatar.ion-badge.ion-thumbnail", + { + "ios": "ios.ion-avatar.ion-badge.ion-thumbnail", + "md": "md.ion-avatar.ion-badge.ion-thumbnail", + "wp": "wp.ion-avatar.ion-badge.ion-thumbnail" + }, + 1 + ], + [ + "ION-BADGE", + "ion-avatar.ion-badge.ion-thumbnail", + { + "ios": "ios.ion-avatar.ion-badge.ion-thumbnail", + "md": "md.ion-avatar.ion-badge.ion-thumbnail", + "wp": "wp.ion-avatar.ion-badge.ion-thumbnail" + }, + 1 + ], + [ + "ION-BUTTON", + "ion-button.ion-buttons.ion-icon", + { + "ios": "ios.ion-button.ion-buttons.ion-icon", + "md": "md.ion-button.ion-buttons.ion-icon", + "wp": "wp.ion-button.ion-buttons.ion-icon" + }, + 2, + [ + [ + "block", + 0, + 1 + ], + [ + "buttonType" + ], + [ + "clear", + 0, + 1 + ], + [ + "color" + ], + [ + "default", + 0, + 1 + ], + [ + "disabled", + 0, + 1 + ], + [ + "full", + 0, + 1 + ], + [ + "href" + ], + [ + "itemButton", + 0, + 1 + ], + [ + "large", + 0, + 1 + ], + [ + "mode" + ], + [ + "outline", + 0, + 1 + ], + [ + "round", + 0, + 1 + ], + [ + "small", + 0, + 1 + ], + [ + "solid", + 0, + 1 + ], + [ + "strong", + 0, + 1 + ] + ] + ], + [ + "ION-BUTTONS", + "ion-button.ion-buttons.ion-icon", + { + "ios": "ios.ion-button.ion-buttons.ion-icon", + "md": "md.ion-button.ion-buttons.ion-icon", + "wp": "wp.ion-button.ion-buttons.ion-icon" + }, + 1 + ], + [ + "ION-CARD", + "ion-card.ion-card-content.ion-card-header.ion-card", + { + "ios": "ios.ion-card.ion-card-content.ion-card-header.ion-", + "md": "md.ion-card.ion-card-content.ion-card-header.ion-c", + "wp": "wp.ion-card.ion-card-content.ion-card-header.ion-c" + }, + 1 + ], + [ + "ION-CARD-CONTENT", + "ion-card.ion-card-content.ion-card-header.ion-card", + { + "ios": "ios.ion-card.ion-card-content.ion-card-header.ion-", + "md": "md.ion-card.ion-card-content.ion-card-header.ion-c", + "wp": "wp.ion-card.ion-card-content.ion-card-header.ion-c" + }, + 1 + ], + [ + "ION-CARD-HEADER", + "ion-card.ion-card-content.ion-card-header.ion-card", + { + "ios": "ios.ion-card.ion-card-content.ion-card-header.ion-", + "md": "md.ion-card.ion-card-content.ion-card-header.ion-c", + "wp": "wp.ion-card.ion-card-content.ion-card-header.ion-c" + }, + 1 + ], + [ + "ION-CARD-TITLE", + "ion-card.ion-card-content.ion-card-header.ion-card", + { + "ios": "ios.ion-card.ion-card-content.ion-card-header.ion-", + "md": "md.ion-card.ion-card-content.ion-card-header.ion-c", + "wp": "wp.ion-card.ion-card-content.ion-card-header.ion-c" + }, + 1 + ], + [ + "ION-CONTENT", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 1, + [ + [ + "fullscreen", + 0, + 1 + ], + [ + "ionScroll" + ], + [ + "ionScrollEnd" + ], + [ + "ionScrollStart" + ] + ] + ], + [ + "ION-FOOTER", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 1 + ], + [ + "ION-GESTURE", + "ion-gesture.ion-scroll", + {}, + 0, + [ + [ + "attachTo" + ], + [ + "autoBlockAll", + 0, + 1 + ], + [ + "block" + ], + [ + "canStart" + ], + [ + "direction" + ], + [ + "disableScroll", + 0, + 1 + ], + [ + "gestureName" + ], + [ + "gesturePriority", + 0, + 2 + ], + [ + "maxAngle", + 0, + 2 + ], + [ + "notCaptured" + ], + [ + "onEnd" + ], + [ + "onMove" + ], + [ + "onPress" + ], + [ + "onStart" + ], + [ + "threshold", + 0, + 2 + ], + [ + "type" + ] + ] + ], + [ + "ION-HEADER", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 1 + ], + [ + "ION-ICON", + "ion-button.ion-buttons.ion-icon", + { + "ios": "ios.ion-button.ion-buttons.ion-icon", + "md": "md.ion-button.ion-buttons.ion-icon", + "wp": "wp.ion-button.ion-buttons.ion-icon" + }, + 1, + [ + [ + "color" + ], + [ + "hidden", + 0, + 1 + ], + [ + "ios" + ], + [ + "isActive", + 0, + 1 + ], + [ + "md" + ], + [ + "name" + ] + ] + ], + [ + "ION-ITEM", + "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + { + "$": "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + "ios": "ios.ion-item.ion-item-divider.ion-label.ion-list.i", + "md": "md.ion-item.ion-item-divider.ion-label.ion-list.io", + "wp": "wp.ion-item.ion-item-divider.ion-label.ion-list.io" + }, + 2, + [ + [ + "color" + ], + [ + "mode" + ] + ] + ], + [ + "ION-ITEM-DIVIDER", + "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + { + "$": "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + "ios": "ios.ion-item.ion-item-divider.ion-label.ion-list.i", + "md": "md.ion-item.ion-item-divider.ion-label.ion-list.io", + "wp": "wp.ion-item.ion-item-divider.ion-label.ion-list.io" + }, + 2 + ], + [ + "ION-LABEL", + "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + { + "$": "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + "ios": "ios.ion-item.ion-item-divider.ion-label.ion-list.i", + "md": "md.ion-item.ion-item-divider.ion-label.ion-list.io", + "wp": "wp.ion-item.ion-item-divider.ion-label.ion-list.io" + }, + 1 + ], + [ + "ION-LIST", + "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + { + "$": "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + "ios": "ios.ion-item.ion-item-divider.ion-label.ion-list.i", + "md": "md.ion-item.ion-item-divider.ion-label.ion-list.io", + "wp": "wp.ion-item.ion-item-divider.ion-label.ion-list.io" + }, + 1 + ], + [ + "ION-LIST-HEADER", + "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + { + "$": "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + "ios": "ios.ion-item.ion-item-divider.ion-label.ion-list.i", + "md": "md.ion-item.ion-item-divider.ion-label.ion-list.io", + "wp": "wp.ion-item.ion-item-divider.ion-label.ion-list.io" + }, + 1 + ], + [ + "ION-LOADING", + "ion-loading.ion-loading-controller", + { + "$": "ion-loading.ion-loading-controller", + "ios": "ios.ion-loading.ion-loading-controller", + "md": "md.ion-loading.ion-loading-controller", + "wp": "wp.ion-loading.ion-loading-controller" + }, + 0, + [ + [ + "content" + ], + [ + "cssClass" + ], + [ + "dismissOnPageChange", + 0, + 1 + ], + [ + "duration", + 0, + 2 + ], + [ + "enterAnimation" + ], + [ + "exitAnimation" + ], + [ + "id" + ], + [ + "showBackdrop", + 0, + 1 + ] + ] + ], + [ + "ION-LOADING-CONTROLLER", + "ion-loading.ion-loading-controller", + { + "$": "ion-loading.ion-loading-controller", + "ios": "ios.ion-loading.ion-loading-controller", + "md": "md.ion-loading.ion-loading-controller", + "wp": "wp.ion-loading.ion-loading-controller" + } + ], + [ + "ION-MENU", + "ion-menu", + { + "ios": "ios.ion-menu", + "md": "md.ion-menu", + "wp": "wp.ion-menu" + }, + 1, + [ + [ + "content" + ], + [ + "enabled", + 0, + 1 + ], + [ + "id" + ], + [ + "isAnimating", + 0, + 1 + ], + [ + "isOpen", + 0, + 1 + ], + [ + "maxEdgeStart", + 0, + 2 + ], + [ + "persistent", + 0, + 1 + ], + [ + "side" + ], + [ + "swipeEnabled", + 0, + 1 + ], + [ + "type" + ] + ] + ], + [ + "ION-MODAL", + "ion-modal.ion-modal-controller", + { + "$": "ion-modal.ion-modal-controller", + "ios": "ios.ion-modal.ion-modal-controller", + "md": "md.ion-modal.ion-modal-controller", + "wp": "wp.ion-modal.ion-modal-controller" + }, + 0, + [ + [ + "color" + ], + [ + "component" + ], + [ + "componentProps" + ], + [ + "cssClass" + ], + [ + "enableBackdropDismiss", + 0, + 1 + ], + [ + "enterAnimation" + ], + [ + "exitAnimation" + ], + [ + "id" + ], + [ + "mode" + ], + [ + "showBackdrop", + 0, + 1 + ] + ] + ], + [ + "ION-MODAL-CONTROLLER", + "ion-modal.ion-modal-controller", + { + "$": "ion-modal.ion-modal-controller", + "ios": "ios.ion-modal.ion-modal-controller", + "md": "md.ion-modal.ion-modal-controller", + "wp": "wp.ion-modal.ion-modal-controller" + } + ], + [ + "ION-NAVBAR", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 2, + [ + [ + "backButtonIcon" + ], + [ + "backButtonText" + ], + [ + "hidden", + 0, + 1 + ], + [ + "hideBackButton", + 0, + 1 + ] + ] + ], + [ + "ION-PAGE", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 1 + ], + [ + "ION-SCROLL", + "ion-gesture.ion-scroll", + {}, + 1, + [ + [ + "enabled", + 0, + 1 + ], + [ + "ionScroll" + ], + [ + "ionScrollEnd" + ], + [ + "ionScrollStart" + ], + [ + "jsScroll", + 0, + 1 + ] + ] + ], + [ + "ION-SEARCHBAR", + "ion-searchbar", + { + "ios": "ios.ion-searchbar", + "md": "md.ion-searchbar", + "wp": "wp.ion-searchbar" + }, + 0, + [ + [ + "animated", + 0, + 1, + 1 + ], + [ + "autocomplete", + 0, + 0, + 1 + ], + [ + "autocorrect", + 0, + 0, + 1 + ], + [ + "cancelButtonText", + 0, + 0, + 1 + ], + [ + "color" + ], + [ + "debounce", + 0, + 2, + 1 + ], + [ + "mode" + ], + [ + "placeholder", + 0, + 0, + 1 + ], + [ + "showCancelButton", + 0, + 1, + 1 + ], + [ + "spellcheck", + 0, + 1, + 1 + ], + [ + "type", + 0, + 0, + 1 + ], + [ + "value", + 0, + 0, + 1 + ] + ] + ], + [ + "ION-SEGMENT", + "ion-segment.ion-segment-button", + { + "ios": "ios.ion-segment.ion-segment-button", + "md": "md.ion-segment.ion-segment-button", + "wp": "wp.ion-segment.ion-segment-button" + }, + 1, + [ + [ + "disabled", + 0, + 1, + 1 + ], + [ + "value", + 0, + 0, + 1 + ] + ] + ], + [ + "ION-SEGMENT-BUTTON", + "ion-segment.ion-segment-button", + { + "ios": "ios.ion-segment.ion-segment-button", + "md": "md.ion-segment.ion-segment-button", + "wp": "wp.ion-segment.ion-segment-button" + }, + 1, + [ + [ + "checked", + 0, + 1, + 1 + ], + [ + "disabled", + 0, + 1, + 1 + ], + [ + "value", + 0, + 0, + 1 + ] + ] + ], + [ + "ION-SKELETON-TEXT", + "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + { + "$": "ion-item.ion-item-divider.ion-label.ion-list.ion-l", + "ios": "ios.ion-item.ion-item-divider.ion-label.ion-list.i", + "md": "md.ion-item.ion-item-divider.ion-label.ion-list.io", + "wp": "wp.ion-item.ion-item-divider.ion-label.ion-list.io" + }, + 0, + [ + [ + "width" + ] + ] + ], + [ + "ION-SLIDE", + "ion-slide.ion-slides", + { + "$": "ion-slide.ion-slides" + }, + 1 + ], + [ + "ION-SLIDES", + "ion-slide.ion-slides", + { + "$": "ion-slide.ion-slides" + }, + 1, + [ + [ + "autoplay", + 0, + 2 + ], + [ + "control" + ], + [ + "direction" + ], + [ + "effect" + ], + [ + "initialSlide", + 0, + 2 + ], + [ + "keyboardControl", + 0, + 1 + ], + [ + "loop", + 0, + 1 + ], + [ + "pager", + 0, + 1 + ], + [ + "paginationType" + ], + [ + "parallax", + 0, + 1 + ], + [ + "slidesPerView" + ], + [ + "spaceBetween", + 0, + 2 + ], + [ + "speed", + 0, + 2 + ], + [ + "zoom", + 0, + 1 + ] + ] + ], + [ + "ION-SPINNER", + "ion-spinner", + { + "ios": "ios.ion-spinner", + "md": "md.ion-spinner", + "wp": "wp.ion-spinner" + }, + 0, + [ + [ + "color" + ], + [ + "duration", + 0, + 2 + ], + [ + "mode" + ], + [ + "name" + ], + [ + "paused", + 0, + 1 + ] + ] + ], + [ + "ION-THUMBNAIL", + "ion-avatar.ion-badge.ion-thumbnail", + { + "ios": "ios.ion-avatar.ion-badge.ion-thumbnail", + "md": "md.ion-avatar.ion-badge.ion-thumbnail", + "wp": "wp.ion-avatar.ion-badge.ion-thumbnail" + }, + 1 + ], + [ + "ION-TITLE", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 1 + ], + [ + "ION-TOGGLE", + "ion-toggle", + { + "ios": "ios.ion-toggle", + "md": "md.ion-toggle", + "wp": "wp.ion-toggle" + }, + 0, + [ + [ + "checked", + 0, + 1, + 1 + ], + [ + "color" + ], + [ + "disabled", + 0, + 1, + 1 + ], + [ + "mode" + ], + [ + "value", + 0, + 0, + 1 + ] + ] + ], + [ + "ION-TOOLBAR", + "ion-app.ion-content.ion-footer.ion-header.ion-navb", + { + "ios": "ios.ion-app.ion-content.ion-footer.ion-header.ion-", + "md": "md.ion-app.ion-content.ion-footer.ion-header.ion-n", + "wp": "wp.ion-app.ion-content.ion-footer.ion-header.ion-n" + }, + 2 + ] + ], + "loader": "app", + "core": "app/app.core.js", + "coreEs5": "app/app.core.ce.js" +} \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/app.core.ce.js b/packages/core-hn-demo/www/build/app/app.core.ce.js new file mode 100644 index 0000000000..c2e7642599 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/app.core.ce.js @@ -0,0 +1,2073 @@ +/*! document-register-element, 1.5.0 +https://github.com/WebReflection/document-register-element +(C) Andrea Giammarchi - @WebReflection - Mit Style License */ +(function(e,t){"use strict";function Ht(){var e=wt.splice(0,wt.length);Et=0;while(e.length)e.shift().call(null,e.shift())}function Bt(e,t){for(var n=0,r=e.length;n1)&&Zt(this)}}}),ot(u,h,{value:function(e){-1<_.call(a,e)&&o[h].apply(this,arguments)}}),o[d]&&ot(u,p,{value:o[d]}),o[v]&&ot(u,g,{value:o[v]}),i&&(f[c]=i),e=e.toUpperCase(),G[e]={constructor:t,create:i?[i,et(e)]:[e]},Z.set(t,e),n[s](e.toLowerCase(),f),en(e),Y[e].r()}function Gt(e){var t=G[e.toUpperCase()];return t&&t.constructor}function Yt(e){return typeof e=="string"?e:e&&e.is||""}function Zt(e){var t=e[h],n=t?e.attributes:j,r=n.length,i;while(r--)i=n[r],t.call(e,i.name||i.nodeName,null,i.value||i.nodeValue)}function en(e){return e=e.toUpperCase(),e in Y||(Y[e]={},Y[e].p=new K(function(t){Y[e].r=t})),Y[e].p}function tn(){X&&delete e.customElements,B(e,"customElements",{configurable:!0,value:new Kt}),B(e,"CustomElementRegistry",{configurable:!0,value:Kt});for(var t=function(t){var r=e[t];if(r){e[t]=function(t){var i,s;return t||(t=this),t[W]||(Q=!0,i=G[Z.get(t.constructor)],s=V&&i.create.length===1,t=s?Reflect.construct(r,j,i.constructor):n.createElement.apply(n,i.create),t[W]=!0,Q=!1,s||Zt(t)),t},e[t].prototype=r.prototype;try{r.prototype.constructor=e[t]}catch(i){z=!0,B(r,W,{value:e[t]})}}},r=i.get(/^HTML[A-Z]*[a-z]/),o=r.length;o--;t(r[o]));n.createElement=function(e,t){var n=Yt(t);return n?gt.call(this,e,et(n)):gt.call(this,e)},St||(Tt=!0,n[s](""))}var n=e.document,r=e.Object,i=function(e){var t=/^[A-Z]+[a-z]/,n=function(e){var t=[],n;for(n in s)e.test(n)&&t.push(n);return t},i=function(e,t){t=t.toLowerCase(),t in s||(s[e]=(s[e]||[]).concat(t),s[t]=s[t.toUpperCase()]=e)},s=(r.create||r)(null),o={},u,a,f,l;for(a in e)for(l in e[a]){f=e[a][l],s[l]=f;for(u=0;u>0),u="addEventListener",a="attached",f="Callback",l="detached",c="extends",h="attributeChanged"+f,p=a+f,d="connected"+f,v="disconnected"+f,m="created"+f,g=l+f,y="ADDITION",b="MODIFICATION",w="REMOVAL",E="DOMAttrModified",S="DOMContentLoaded",x="DOMSubtreeModified",T="<",N="=",C=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,k=["ANNOTATION-XML","COLOR-PROFILE","FONT-FACE","FONT-FACE-SRC","FONT-FACE-URI","FONT-FACE-FORMAT","FONT-FACE-NAME","MISSING-GLYPH"],L=[],A=[],O="",M=n.documentElement,_=L.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},D=r.prototype,P=D.hasOwnProperty,H=D.isPrototypeOf,B=r.defineProperty,j=[],F=r.getOwnPropertyDescriptor,I=r.getOwnPropertyNames,q=r.getPrototypeOf,R=r.setPrototypeOf,U=!!r.__proto__,z=!1,W="__dreCEv1",X=e.customElements,V=t!=="force"&&!!(X&&X.define&&X.get&&X.whenDefined),$=r.create||r,J=e.Map||function(){var t=[],n=[],r;return{get:function(e){return n[_.call(t,e)]},set:function(e,i){r=_.call(t,e),r<0?n[t.push(e)-1]=i:n[r]=i}}},K=e.Promise||function(e){function i(e){n=!0;while(t.length)t.shift()(e)}var t=[],n=!1,r={"catch":function(){return r},then:function(e){return t.push(e),n&&setTimeout(i,1),r}};return e(i),r},Q=!1,G=$(null),Y=$(null),Z=new J,et=function(e){return e.toLowerCase()},tt=r.create||function sn(e){return e?(sn.prototype=e,new sn):this},nt=R||(U?function(e,t){return e.__proto__=t,e}:I&&F?function(){function e(e,t){for(var n,r=I(t),i=0,s=r.length;i 8) { + break; + } + } + } catch (e) { + err = e; + } + if (rafPending = readCBs.length > 0 || writeCBs.length > 0) { + raf(rafFlush); + } + if (err) { + console.error(err); + } + } + return { + read: domRead, + write: domWrite, + raf: raf, + now: now + }; + } + + /** + * This constants file is largely for minification tricks, and to + * have easy to read variable names. Enums would make more sense + * in most cases, but doing values like this as constants allows + * minifiers to just place the raw value directly in source, and in + * production there is no variable at all. For example, the minifier + * turns data[BUNDLE_ID] turns into data[0] for production builds. + */ + /** + * Prop Change Meta Indexes + */ + var PROP_CHANGE_PROP_NAME = 0; + var PROP_CHANGE_METHOD_NAME = 1; + /** + * Property Types + */ + + var TYPE_BOOLEAN = 1; + var TYPE_NUMBER = 2; + /** + * JS Property to Attribute Name Options + */ + + var ATTR_LOWER_CASE = 1; + /** + * Priority Levels + */ + var PRIORITY_HIGH = 3; + + var PRIORITY_LOW = 1; + /** + * Slot Meta + */ + var SLOT_TAG = 0; + var HAS_SLOTS = 1; + var HAS_NAMED_SLOTS = 2; + /** + * SSR Attribute Names + */ + var SSR_VNODE_ID = 'ssrv'; + var SSR_CHILD_ID = 'ssrc'; + /** + * Node Types + */ + var ELEMENT_NODE = 1; + var TEXT_NODE = 3; + var COMMENT_NODE = 8; + /** + * Key Name to Key Code Map + */ + var KEY_CODE_MAP = { + 'enter': 13, + 'escape': 27, + 'space': 32, + 'tab': 9 + }; + /** + * CSS class that gets added to the host element + * after the component has fully hydrated + */ + var HYDRATED_CSS = 'hydrated'; + /** + * Namespaces + */ + + /** + * File names and value + */ + + var VNode = function VNode() {} + + /** + * Production h() function based on Preact by + * Jason Miller (@developit) + * Licensed under the MIT License + * https://github.com/developit/preact/blob/master/LICENSE + * + * Modified for Stencil's compiler and vdom + */ + var stack = []; + function h(nodeName, vnodeData, child) { + var children = void 0, + lastSimple = void 0, + simple = void 0, + i = void 0; + for (i = arguments.length; i-- > 2;) { + stack.push(arguments[i]); + } + while (stack.length) { + if ((child = stack.pop()) && child.pop !== undefined) { + for (i = child.length; i--;) { + stack.push(child[i]); + } + } else { + if (typeof child === 'boolean') child = null; + if (simple = typeof nodeName !== 'function') { + if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false; + } + if (simple && lastSimple) { + children[children.length - 1].vtext += child; + } else if (children === undefined) { + children = [simple ? t(child) : child]; + } else { + children.push(simple ? t(child) : child); + } + lastSimple = simple; + } + } + var vnode = new VNode(); + vnode.vtag = nodeName; + vnode.vchildren = children; + if (vnodeData) { + // data object was provided + vnode.vattrs = vnodeData.a; + vnode.vprops = vnodeData.p; + vnode.vclass = vnodeData.c; + vnode.vstyle = vnodeData.s; + vnode.vlisteners = vnodeData.o; + vnode.vkey = vnodeData.k; + vnode.vnamespace = vnodeData.n; + // x = undefined: always check both data and children + // x = 0 skip checking only data on update + // x = 1 skip checking only children on update + // x = 2 skip checking both data and children on update + vnode.skipDataOnUpdate = vnodeData.x === 0 || vnodeData.x === 2; + vnode.skipChildrenOnUpdate = vnodeData.x > 0; + } else { + // no data object was provided + // so no data, so don't both checking data + vnode.skipDataOnUpdate = true; + // since no data was provided, than no x was provided + // if no x was provided then we need to always check children + // if if there are no children at all, then we know never to check children + vnode.skipChildrenOnUpdate = !children || children.length === 0; + } + return vnode; + } + function t(textValue) { + var vnode = new VNode(); + vnode.vtext = textValue; + return vnode; + } + + function createVNodesFromSsr(domApi, rootElm) { + var allSsrElms = rootElm.querySelectorAll('[' + SSR_VNODE_ID + ']'), + elm, + ssrVNodeId, + ssrVNode, + i, + ilen = allSsrElms.length, + j, + jlen; + if (rootElm._hasLoaded = ilen > 0) { + for (i = 0; i < ilen; i++) { + elm = allSsrElms[i]; + ssrVNodeId = domApi.$getAttribute(elm, SSR_VNODE_ID); + ssrVNode = elm._vnode = new VNode(); + ssrVNode.vtag = domApi.$tagName(ssrVNode.elm = elm).toLowerCase(); + for (j = 0, jlen = elm.childNodes.length; j < jlen; j++) { + addChildSsrVNodes(domApi, elm.childNodes[j], ssrVNode, ssrVNodeId, true); + } + } + } + } + function addChildSsrVNodes(domApi, node, parentVNode, ssrVNodeId, checkNestedElements) { + var nodeType = domApi.$nodeType(node); + var previousComment; + var childVNodeId, childVNodeSplt, childVNode; + if (checkNestedElements && nodeType === ELEMENT_NODE) { + childVNodeId = domApi.$getAttribute(node, SSR_CHILD_ID); + if (childVNodeId) { + // split the start comment's data with a period + childVNodeSplt = childVNodeId.split('.'); + // ensure this this element is a child element of the ssr vnode + if (childVNodeSplt[0] === ssrVNodeId) { + // cool, this element is a child to the parent vnode + childVNode = new VNode(); + childVNode.vtag = domApi.$tagName(childVNode.elm = node).toLowerCase(); + // this is a new child vnode + // so ensure its parent vnode has the vchildren array + if (!parentVNode.vchildren) { + parentVNode.vchildren = []; + } + // add our child vnode to a specific index of the vnode's children + parentVNode.vchildren[childVNodeSplt[1]] = childVNode; + // this is now the new parent vnode for all the next child checks + parentVNode = childVNode; + // if there's a trailing period, then it means there aren't any + // more nested elements, but maybe nested text nodes + // either way, don't keep walking down the tree after this next call + checkNestedElements = childVNodeSplt[2] !== ''; + } + } + // keep drilling down through the elements + for (var i = 0; i < node.childNodes.length; i++) { + addChildSsrVNodes(domApi, node.childNodes[i], parentVNode, ssrVNodeId, checkNestedElements); + } + } else if (nodeType === TEXT_NODE && (previousComment = node.previousSibling) && domApi.$nodeType(previousComment) === COMMENT_NODE) { + // split the start comment's data with a period + childVNodeSplt = domApi.$getTextContent(previousComment).split('.'); + // ensure this is an ssr text node start comment + // which should start with an "s" and delimited by periods + if (childVNodeSplt[0] === 's' && childVNodeSplt[1] === ssrVNodeId) { + // cool, this is a text node and it's got a start comment + childVNode = t(domApi.$getTextContent(node)); + childVNode.elm = node; + // this is a new child vnode + // so ensure its parent vnode has the vchildren array + if (!parentVNode.vchildren) { + parentVNode.vchildren = []; + } + // add our child vnode to a specific index of the vnode's children + parentVNode.vchildren[childVNodeSplt[2]] = childVNode; + } + } + } + function assignHostContentSlots(domApi, elm, slotMeta) { + // compiler has already figured out if this component has slots or not + // if the component doesn't even have slots then we'll skip over all of this code + var childNodes = elm.childNodes; + if (slotMeta === HAS_NAMED_SLOTS) { + // looks like this component has named slots + // so let's loop through each of the childNodes to the host element + // and pick out the ones that have a slot attribute + // if it doesn't have a slot attribute, than it's a default slot + var slotName = void 0; + var defaultSlot = void 0; + var namedSlots = void 0; + for (var i = 0, childNodeLen = childNodes.length; i < childNodeLen; i++) { + var childNode = childNodes[i]; + if (domApi.$nodeType(childNode) === 1 && (slotName = domApi.$getAttribute(childNode, 'slot')) != null) { + // is element node + // this element has a slot name attribute + // so this element will end up getting relocated into + // the component's named slot once it renders + namedSlots = namedSlots || {}; + if (namedSlots[slotName]) { + namedSlots[slotName].push(childNode); + } else { + namedSlots[slotName] = [childNode]; + } + } else { + // this is a text node + // or it's an element node that doesn't have a slot attribute + // let's add this node to our collection for the default slot + if (defaultSlot) { + defaultSlot.push(childNode); + } else { + defaultSlot = [childNode]; + } + } + } + // keep a reference to all of the initial nodes + // found as immediate childNodes to the host element + elm._hostContentNodes = { + defaultSlot: defaultSlot, + namedSlots: namedSlots + }; + } else if (slotMeta === HAS_SLOTS) { + // this component doesn't have named slots, but it does + // have at least a default slot, so the work here is alot easier than + // when we're not looping through each element and reading attribute values + elm._hostContentNodes = { + defaultSlot: childNodes.length ? Array.apply(null, childNodes) : null + }; + } + } + + function isDef(v) { + return v !== undefined && v !== null; + } + function isUndef(v) { + return v === undefined || v === null; + } + + function isObject(v) { + return v !== null && typeof v === 'object'; + } + + function isFunction(v) { + return typeof v === 'function'; + } + + function toDashCase(str) { + return str.replace(/([A-Z])/g, function (g) { + return '-' + g[0].toLowerCase(); + }); + } + + function noop() {} + + function getElementReference(elm, ref) { + if (ref === 'child') { + return elm.firstElementChild; + } + if (ref === 'parent') { + return getParentElement(elm) || elm; + } + if (ref === 'body') { + return elm.ownerDocument.body; + } + if (ref === 'document') { + return elm.ownerDocument; + } + if (ref === 'window') { + return elm.ownerDocument.defaultView; + } + return elm; + } + function getParentElement(elm) { + if (elm.parentElement) { + // normal element with a parent element + return elm.parentElement; + } + if (elm.parentNode && elm.parentNode.host) { + // shadow dom's document fragment + return elm.parentNode.host; + } + return null; + } + + var EMPTY = {}; + var DEFAULT_OPTS = null; + function updateElement(plt, nodeOps, oldVnode, newVnode) { + var isUpdate = oldVnode != null; + oldVnode = oldVnode || EMPTY; + newVnode = newVnode || EMPTY; + var key, + cur, + elm = newVnode.elm, + oldData, + newData; + // update attrs + if (oldVnode.vattrs || newVnode.vattrs) { + oldData = oldVnode.vattrs || EMPTY; + newData = newVnode.vattrs || EMPTY; + // update modified attributes, add new attributes + for (key in newData) { + cur = newData[key]; + if (oldData[key] !== cur) { + if (BOOLEAN_ATTRS[key] === 1) { + if (cur) { + nodeOps.$setAttribute(elm, key, ''); + } else { + nodeOps.$removeAttribute(elm, key); + } + } else { + if (key.charCodeAt(0) !== 120 /* xChar */) { + nodeOps.$setAttribute(elm, key, cur); + } else if (key.charCodeAt(3) === 58 /* colonChar */) { + // Assume xml namespace + nodeOps.$setAttributeNS(elm, XML_NS$1, key, cur); + } else if (key.charCodeAt(5) === 58 /* colonChar */) { + // Assume xlink namespace + nodeOps.$setAttributeNS(elm, XLINK_NS$1, key, cur); + } else { + nodeOps.$setAttribute(elm, key, cur); + } + } + } + } + // remove removed attributes + // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value) + // the other option is to remove all attributes with value == undefined + if (isUpdate) { + for (key in oldData) { + if (!(key in newData)) { + nodeOps.$removeAttribute(elm, key); + } + } + } + } + // update class + if (oldVnode.vclass || newVnode.vclass) { + oldData = oldVnode.vclass || EMPTY; + newData = newVnode.vclass || EMPTY; + if (isUpdate) { + for (key in oldData) { + if (!newData[key]) { + elm.classList.remove(key); + } + } + } + for (key in newData) { + cur = newData[key]; + if (cur !== oldData[key]) { + elm.classList[newData[key] ? 'add' : 'remove'](key); + } + } + } + // update props + if (oldVnode.vprops || newVnode.vprops) { + oldData = oldVnode.vprops || EMPTY; + newData = newVnode.vprops || EMPTY; + if (isUpdate) { + for (key in oldData) { + if (newData[key] === undefined) { + // only delete the old property when the + // new property is undefined, otherwise we'll + // end up deleting getters/setters + delete elm[key]; + } + } + } + for (key in newData) { + cur = newData[key]; + if (oldData[key] !== cur && (key !== 'value' || elm[key] !== cur)) { + elm[key] = cur; + } + } + } + // update style + if (oldVnode.vstyle || newVnode.vstyle) { + oldData = oldVnode.vstyle || EMPTY; + newData = newVnode.vstyle || EMPTY; + if (isUpdate) { + for (key in oldData) { + if (!newData[key]) { + elm.style[key] = ''; + } + } + } + for (key in newData) { + cur = newData[key]; + if (cur !== oldData[key]) { + elm.style[key] = cur; + } + } + } + // update event listeners + oldData = oldVnode.vlisteners; + newData = newVnode.vlisteners; + if (oldData || newData) { + if (!DEFAULT_OPTS) { + DEFAULT_OPTS = plt.getEventOptions(); + } + // remove existing listeners which no longer used + if (isUpdate && oldData && oldVnode.assignedListener) { + // if element changed or deleted we remove all existing listeners unconditionally + for (key in oldData) { + // remove listener if existing listener removed + if (!newData || !newData[key]) { + oldVnode.elm.removeEventListener(key, oldVnode.assignedListener, DEFAULT_OPTS); + } + } + } + // add new listeners which has not already attached + if (newData) { + // reuse existing listener or create new + cur = newVnode.assignedListener = oldVnode.assignedListener || createListener(); + // update vnode for listener + cur.vnode = newVnode; + // if element changed or added we add all needed listeners unconditionally + for (key in newData) { + // add listener if new listener added + if (!oldData || !oldData[key]) { + elm.addEventListener(key, cur, DEFAULT_OPTS); + } + } + } + } + } + function createListener() { + return function handler(event) { + handleEvent(event, handler.vnode); + }; + } + function handleEvent(event, vnode) { + var eventName = event.type, + on = vnode.vlisteners; + // call event handler(s) if they exists + if (on && on[eventName]) { + invokeHandler(on[eventName], vnode, event); + } + } + function invokeHandler(handler, vnode, event) { + if (isFunction(handler)) { + // call function handler + handler.call(vnode, event, vnode); + } else if (isObject(handler)) { + // call handler with arguments + if (isFunction(handler[0])) { + // special case for single argument for performance + if (handler.length === 2) { + handler[0].call(vnode, handler[1], event, vnode); + } else { + var args = handler.slice(1); + args.push(event); + args.push(vnode); + handler[0].apply(vnode, args); + } + } else { + // call multiple handlers + for (var i = 0; i < handler.length; i++) { + invokeHandler(handler[i]); + } + } + } + } + var BOOLEAN_ATTRS = { + 'allowfullscreen': 1, + 'async': 1, + 'autofocus': 1, + 'autoplay': 1, + 'checked': 1, + 'controls': 1, + 'disabled': 1, + 'enabled': 1, + 'formnovalidate': 1, + 'hidden': 1, + 'multiple': 1, + 'noresize': 1, + 'readonly': 1, + 'required': 1, + 'selected': 1, + 'spellcheck': 1 + }; + var XLINK_NS$1 = 'http://www.w3.org/1999/xlink'; + var XML_NS$1 = 'http://www.w3.org/XML/1998/namespace'; + + /** + * Virtual DOM patching algorithm based on Snabbdom by + * Simon Friis Vindum (@paldepind) + * Licensed under the MIT License + * https://github.com/snabbdom/snabbdom/blob/master/LICENSE + * + * Modified for Stencil's renderer and slot projection + */ + function createRenderer(plt, domApi) { + // createRenderer() is only created once per app + // the patch() function which createRenderer() returned is the function + // which gets called numerous times by each component + function createElm(vnode, parentElm, childIndex) { + var i = 0; + if (vnode.vtag === SLOT_TAG) { + if (hostContentNodes) { + // special case for manually relocating host content nodes + // to their new home in either a named slot or the default slot + var namedSlot = vnode.vattrs && vnode.vattrs.name; + var slotNodes = void 0; + if (isDef(namedSlot)) { + // this vnode is a named slot + slotNodes = hostContentNodes.namedSlots && hostContentNodes.namedSlots[namedSlot]; + } else { + // this vnode is the default slot + slotNodes = hostContentNodes.defaultSlot; + } + if (isDef(slotNodes)) { + // the host element has some nodes that need to be moved around + // we have a slot for the user's vnode to go into + // while we're moving nodes around, temporarily disable + // the disconnectCallback from working + plt.tmpDisconnected = true; + for (; i < slotNodes.length; i++) { + // remove the host content node from it's original parent node + // then relocate the host content node to its new slotted home + domApi.$appendChild(parentElm, domApi.$removeChild(domApi.$parentNode(slotNodes[i]), slotNodes[i])); + } + // done moving nodes around + // allow the disconnect callback to work again + plt.tmpDisconnected = false; + } + } + // this was a slot node, we do not create slot elements, our work here is done + // no need to return any element to be added to the dom + return null; + } + if (isDef(vnode.vtext)) { + // create text node + vnode.elm = domApi.$createTextNode(vnode.vtext); + } else { + // create element + var elm = vnode.elm = vnode.vnamespace ? domApi.$createElementNS(vnode.vnamespace, vnode.vtag) : domApi.$createElement(vnode.vtag); + // add css classes, attrs, props, listeners, etc. + updateElement(plt, domApi, null, vnode); + var children = vnode.vchildren; + if (isDef(ssrId)) { + // SSR ONLY: this is an SSR render and this + // logic does not run on the client + // give this element the SSR child id that can be read by the client + domApi.$setAttribute(vnode.elm, SSR_CHILD_ID, ssrId + '.' + childIndex + (hasChildNodes(children) ? '' : '.')); + } + if (children) { + var childNode = void 0; + for (; i < children.length; ++i) { + // create the node + childNode = createElm(children[i], elm, i); + // return node could have been null + if (childNode) { + if (isDef(ssrId) && childNode.nodeType === 3) { + // SSR ONLY: add the text node's start comment + domApi.$appendChild(elm, domApi.$createComment('s.' + ssrId + '.' + i)); + } + // append our new node + domApi.$appendChild(elm, childNode); + if (isDef(ssrId) && childNode.nodeType === 3) { + // SSR ONLY: add the text node's end comment + domApi.$appendChild(elm, domApi.$createComment('/')); + } + } + } + } + } + return vnode.elm; + } + function addVnodes(parentElm, before, vnodes, startIdx, endIdx) { + var childNode = void 0; + for (; startIdx <= endIdx; ++startIdx) { + var vnodeChild = vnodes[startIdx]; + if (isDef(vnodeChild)) { + if (isDef(vnodeChild.vtext)) { + childNode = domApi.$createTextNode(vnodeChild.vtext); + } else { + childNode = createElm(vnodeChild, parentElm, startIdx); + } + if (isDef(childNode)) { + vnodeChild.elm = childNode; + domApi.$insertBefore(parentElm, childNode, before); + } + } + } + } + function removeVnodes(parentElm, vnodes, startIdx, endIdx) { + for (; startIdx <= endIdx; ++startIdx) { + var vnode = vnodes[startIdx]; + if (isDef(vnode)) { + if (isDef(vnode.elm)) { + invokeDestroy(vnode); + } + domApi.$removeChild(parentElm, vnode.elm); + } + } + } + function updateChildren(parentElm, oldCh, newCh) { + var oldStartIdx = 0, + newStartIdx = 0; + var oldEndIdx = oldCh.length - 1; + var oldStartVnode = oldCh[0]; + var oldEndVnode = oldCh[oldEndIdx]; + var newEndIdx = newCh.length - 1; + var newStartVnode = newCh[0]; + var newEndVnode = newCh[newEndIdx]; + var oldKeyToIdx = void 0; + var idxInOld = void 0; + var elmToMove = void 0; + var node = void 0; + while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { + if (oldStartVnode == null) { + oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left + } else if (oldEndVnode == null) { + oldEndVnode = oldCh[--oldEndIdx]; + } else if (newStartVnode == null) { + newStartVnode = newCh[++newStartIdx]; + } else if (newEndVnode == null) { + newEndVnode = newCh[--newEndIdx]; + } else if (isSameVnode(oldStartVnode, newStartVnode)) { + patchVNode(oldStartVnode, newStartVnode); + oldStartVnode = oldCh[++oldStartIdx]; + newStartVnode = newCh[++newStartIdx]; + } else if (isSameVnode(oldEndVnode, newEndVnode)) { + patchVNode(oldEndVnode, newEndVnode); + oldEndVnode = oldCh[--oldEndIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (isSameVnode(oldStartVnode, newEndVnode)) { + patchVNode(oldStartVnode, newEndVnode); + domApi.$insertBefore(parentElm, oldStartVnode.elm, domApi.$nextSibling(oldEndVnode.elm)); + oldStartVnode = oldCh[++oldStartIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (isSameVnode(oldEndVnode, newStartVnode)) { + patchVNode(oldEndVnode, newStartVnode); + domApi.$insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); + oldEndVnode = oldCh[--oldEndIdx]; + newStartVnode = newCh[++newStartIdx]; + } else { + if (isUndef(oldKeyToIdx)) { + oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); + } + idxInOld = oldKeyToIdx[newStartVnode.vkey]; + if (isUndef(idxInOld)) { + // new element + node = createElm(newStartVnode, parentElm, newStartIdx); + newStartVnode = newCh[++newStartIdx]; + } else { + elmToMove = oldCh[idxInOld]; + if (elmToMove.vtag !== newStartVnode.vtag) { + node = createElm(newStartVnode, parentElm, idxInOld); + } else { + patchVNode(elmToMove, newStartVnode); + oldCh[idxInOld] = undefined; + node = elmToMove.elm; + } + newStartVnode = newCh[++newStartIdx]; + } + if (node) { + domApi.$insertBefore(parentElm, node, oldStartVnode.elm); + } + } + } + if (oldStartIdx > oldEndIdx) { + addVnodes(parentElm, newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm, newCh, newStartIdx, newEndIdx); + } else if (newStartIdx > newEndIdx) { + removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx); + } + } + function isSameVnode(vnode1, vnode2) { + // compare if two vnode to see if they're "technically" the same + // need to have the same element tag, and same key to be the same + return vnode1.vtag === vnode2.vtag && vnode1.vkey === vnode2.vkey; + } + function createKeyToOldIdx(children, beginIdx, endIdx) { + var i = void 0, + map = {}, + key = void 0, + ch = void 0; + for (i = beginIdx; i <= endIdx; ++i) { + ch = children[i]; + if (ch != null) { + key = ch.vkey; + if (key !== undefined) { + map.k = i; + } + } + } + return map; + } + function patchVNode(oldVnode, newVnode) { + var elm = newVnode.elm = oldVnode.elm; + var oldChildren = oldVnode.vchildren; + var newChildren = newVnode.vchildren; + if (isUndef(newVnode.vtext)) { + // element node + if ((!isUpdate || !newVnode.skipDataOnUpdate) && newVnode.vtag !== SLOT_TAG) { + // either this is the first render of an element OR it's an update + // AND we already know it's possible it could have changed + // this updates the element's css classes, attrs, props, listeners, etc. + updateElement(plt, domApi, oldVnode, newVnode); + } + if (isDef(oldChildren) && isDef(newChildren)) { + // looks like there's child vnodes for both the old and new vnodes + if (!isUpdate || !newVnode.skipChildrenOnUpdate) { + // either this is the first render of an element OR it's an update + // AND we already know it's possible that the children could have changed + updateChildren(elm, oldChildren, newChildren); + } + } else if (isDef(newChildren)) { + // no old child vnodes, but there are new child vnodes to add + if (isDef(oldVnode.vtext)) { + // the old vnode was text, so be sure to clear it out + domApi.$setTextContent(elm, ''); + } + // add the new vnode children + addVnodes(elm, null, newChildren, 0, newChildren.length - 1); + } else if (isDef(oldChildren)) { + // no new child vnodes, but there are old child vnodes to remove + removeVnodes(elm, oldChildren, 0, oldChildren.length - 1); + } + } else if (elm._hostContentNodes && elm._hostContentNodes.defaultSlot) { + // this element has slotted content + var parentElement = elm._hostContentNodes.defaultSlot[0].parentElement; + domApi.$setTextContent(parentElement, newVnode.vtext); + elm._hostContentNodes.defaultSlot = [parentElement.childNodes[0]]; + } else { + // update the text content for the text only vnode + domApi.$setTextContent(elm, newVnode.vtext); + } + } + // internal variables to be reused per patch() call + var isUpdate = void 0, + hostContentNodes = void 0, + ssrId = void 0; + return function patch(oldVnode, newVnode, isUpdatePatch, hostElementContentNodes, ssrPatchId) { + // patchVNode() is synchronous + // so it is safe to set these variables and internally + // the same patch() call will reference the same data + isUpdate = isUpdatePatch; + hostContentNodes = hostElementContentNodes; + ssrId = ssrPatchId; + // synchronous patch + patchVNode(oldVnode, newVnode); + if (isDef(ssrId)) { + // SSR ONLY: we've been given an SSR id, so the host element + // should be given the ssr id attribute + domApi.$setAttribute(oldVnode.elm, SSR_VNODE_ID, ssrId); + } + // return our new vnode + return newVnode; + }; + } + function invokeDestroy(vnode) { + if (vnode.vlisteners && vnode.assignedListener) { + for (var key in vnode.vlisteners) { + vnode.elm.removeEventListener(key, vnode.vlisteners, false); + } + } + if (isDef(vnode.vchildren)) { + for (var i = 0; i < vnode.vchildren.length; ++i) { + vnode.vchildren[i] && invokeDestroy(vnode.vchildren[i]); + } + } + } + function hasChildNodes(children) { + // SSR ONLY: check if there are any more nested child elements + // if there aren't, this info is useful so the client runtime + // doesn't have to climb down and check so many elements + if (children) { + for (var i = 0; i < children.length; i++) { + if (children[i].vtag !== SLOT_TAG || hasChildNodes(children[i].vchildren)) { + return true; + } + } + } + return false; + } + + function getMode(domApi, config, elm) { + var attrMode = domApi.$getAttribute(elm, 'mode'); + // first let's see if they set the mode directly on the property + if (isDef(elm.mode)) { + return elm.mode; + } + // next let's see if they set the mode on the elements attribute + if (isDef(attrMode)) { + return attrMode; + } + // ok fine, let's just get the values from the config + return config.get('mode', 'md'); + } + + function attachListeners(plt, listeners, elm, instance) { + if (listeners) { + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + if (listener.eventEnabled !== false) { + (elm._listeners = elm._listeners || {})[listener.eventName] = addEventListener(plt, elm, listener.eventName, instance[listener.eventMethodName].bind(instance), listener); + } + } + } + } + function enableListener(plt, elm, instance, eventName, shouldEnable, attachTo) { + if (instance) { + var listenerMeta = plt.getComponentMeta(elm).listenersMeta; + if (listenerMeta) { + var deregisterFns = elm._listeners = elm._listeners || {}; + for (var i = 0; i < listenerMeta.length; i++) { + var listener = listenerMeta[i]; + if (listener.eventName === eventName) { + if (shouldEnable && !deregisterFns[eventName]) { + var attachToEventName = attachTo ? attachTo + ':' + eventName : eventName; + deregisterFns[eventName] = addEventListener(plt, instance.$el, attachToEventName, instance[listener.eventMethodName].bind(instance), listener); + } else if (!shouldEnable && deregisterFns[eventName]) { + deregisterFns[eventName](); + delete elm._listeners[eventName]; + } + return; + } + } + } + } + } + function addEventListener(plt, elm, eventName, userEventListener, opts) { + if (!elm) { + return noop; + } + var splt = eventName.split(':'); + if (splt.length > 1) { + // document:mousemove + // parent:touchend + // body:keyup.enter + elm = getElementReference(elm, splt[0]); + eventName = splt[1]; + } + if (!elm) { + return noop; + } + splt = eventName.split('.'); + var testKeyCode = 0; + if (splt.length > 1) { + // keyup.enter + eventName = splt[0]; + testKeyCode = KEY_CODE_MAP[splt[1]]; + } + var eventListener = function (ev) { + if (testKeyCode > 0 && ev.keyCode !== testKeyCode) { + // we're looking for a specific keycode but this wasn't it + return; + } + // fire the component's event listener callback + userEventListener(ev); + // test if this is the user's interaction + if (isUserInteraction(eventName)) { + // so it's very important to flush the queue now + // so that the app reflects whatever they just did + // basically don't let requestIdleCallback delay the important + plt.queue.flush(); + } + }; + var eventListenerOpts = plt.getEventOptions(opts); + elm.addEventListener(eventName, eventListener, eventListenerOpts); + return function removeListener() { + if (elm) { + elm.removeEventListener(eventName, eventListener, eventListenerOpts); + } + }; + } + function isUserInteraction(eventName) { + for (var i = 0; i < USER_INTERACTIONS.length; i++) { + if (eventName.indexOf(USER_INTERACTIONS[i]) > -1) { + return true; + } + } + return false; + } + var USER_INTERACTIONS = ['touch', 'mouse', 'pointer', 'key', 'focus', 'blur', 'drag']; + function detachListeners(elm) { + var deregisterFns = elm._listeners; + if (deregisterFns) { + var eventNames = Object.keys(deregisterFns); + for (var i = 0; i < eventNames.length; i++) { + deregisterFns[eventNames[i]](); + } + elm._listeners = null; + } + } + + function parseComponentRegistry(cmpRegistryData, registry) { + // tag name will always be upper case + var cmpMeta = { + tagNameMeta: cmpRegistryData[0], + propsMeta: [ + // every component defaults to always have + // the mode and color properties + // but only observe the color attribute + // mode cannot change after the component was created + { propName: 'color', attribName: 'color' }, { propName: 'mode' }] + }; + cmpMeta.moduleId = cmpRegistryData[1]; + // map of the modes w/ bundle id and style data + cmpMeta.styleIds = cmpRegistryData[2] || {}; + // slot + cmpMeta.slotMeta = cmpRegistryData[3]; + if (cmpRegistryData[4]) { + // parse prop meta + for (var i = 0; i < cmpRegistryData[4].length; i++) { + var data = cmpRegistryData[4][i]; + cmpMeta.propsMeta.push({ + propName: data[0], + attribName: data[1] === ATTR_LOWER_CASE ? data[0].toLowerCase() : toDashCase(data[0]), + propType: data[2], + isStateful: !!data[3] + }); + } + } + // bundle load priority + cmpMeta.loadPriority = cmpRegistryData[5]; + return registry[cmpMeta.tagNameMeta] = cmpMeta; + } + function parseComponentMeta(registry, moduleImports, cmpMetaData) { + // tag name will always be upper case + var cmpMeta = registry[cmpMetaData[0]]; + // get the component class which was added to moduleImports + // using the tag as the key on the export object + cmpMeta.componentModuleMeta = moduleImports[cmpMeta.tagNameMeta]; + // host + cmpMeta.hostMeta = cmpMetaData[1]; + // component listeners + if (cmpMetaData[2]) { + cmpMeta.listenersMeta = []; + for (var i = 0; i < cmpMetaData[2].length; i++) { + var data = cmpMetaData[2][i]; + cmpMeta.listenersMeta.push({ + eventMethodName: data[0], + eventName: data[1], + eventCapture: !!data[2], + eventPassive: !!data[3], + eventEnabled: !!data[4] + }); + } + } + // component states + cmpMeta.statesMeta = cmpMetaData[3]; + // component instance prop WILL change methods + cmpMeta.propWillChangeMeta = cmpMetaData[4]; + // component instance prop DID change methods + cmpMeta.propDidChangeMeta = cmpMetaData[5]; + // component methods + cmpMeta.methodsMeta = cmpMetaData[6]; + return cmpMeta; + } + function parsePropertyValue(propType, propValue) { + // ensure this value is of the correct prop type + if (isDef(propValue)) { + if (propType === TYPE_BOOLEAN) { + // per the HTML spec, any string value means it is a boolean "true" value + // but we'll cheat here and say that the string "false" is the boolean false + return propValue === 'false' ? false : propValue === '' || !!propValue; + } + if (propType === TYPE_NUMBER) { + // force it to be a number + return parseFloat(propValue); + } + } + // not sure exactly what type we want + // so no need to change to a different type + return propValue; + } + + function attributeChangedCallback(plt, elm, attribName, oldVal, newVal) { + // only react if the attribute values actually changed + if (oldVal !== newVal) { + // normalize the attribute name w/ lower case + attribName = attribName.toLowerCase(); + // using the known component meta data + // look up to see if we have a property wired up to this attribute name + var prop = plt.getComponentMeta(elm).propsMeta.find(function (p) { + return p.attribName === attribName; + }); + if (prop) { + // cool we've got a prop using this attribute name the value will + // be a string, so let's convert it to the correct type the app wants + // below code is ugly yes, but great minification ;) + elm[prop.propName] = parsePropertyValue(prop.propType, newVal); + } + } + } + + function connectedCallback(plt, elm) { + // do not reconnect if we've already created an instance for this element + if (!elm._hasConnected) { + // first time we've connected + elm._hasConnected = true; + // if somehow this node was reused, ensure we've removed this property + delete elm._hasDestroyed; + // add to the queue to load the bundle + // it's important to have an async tick in here so we can + // ensure the "mode" attribute has been added to the element + // place in high priority since it's not much work and we need + // to know as fast as possible, but still an async tick in between + plt.queue.add(function () { + // get the component meta data about this component + var cmpMeta = plt.getComponentMeta(elm); + // async tick has happened, so all of the child + // nodes and host attributes should now be in the DOM + collectHostContent(plt, elm); + // only collects slot references if this component even has slots + plt.connectHostElement(elm, cmpMeta.slotMeta); + // start loading this component mode's bundle + // if it's already loaded then the callback will be synchronous + plt.loadBundle(cmpMeta, elm, function loadComponentCallback() { + // we've fully loaded the component mode data + // let's queue it up to be rendered next + elm._queueUpdate(); + }); + }, PRIORITY_HIGH); + } + } + function collectHostContent(plt, elm) { + // find the first ancestor host element (if there is one) and register + // this element as one of the actively loading child elements for its ancestor + var ancestorHostElement = elm; + while (ancestorHostElement = getParentElement(ancestorHostElement)) { + // climb up the ancestors looking for the first registered component + if (plt.getComponentMeta(ancestorHostElement)) { + // we found this elements the first ancestor host element + // if the ancestor already loaded then do nothing, it's too late + if (!ancestorHostElement._hasLoaded) { + // keep a reference to this element's ancestor host element + elm._ancestorHostElement = ancestorHostElement; + // ensure there is an array to contain a reference to each of the child elements + // and set this element as one of the ancestor's child elements it should wait on + if (ancestorHostElement._activelyLoadingChildren) { + ancestorHostElement._activelyLoadingChildren.push(elm); + } else { + ancestorHostElement._activelyLoadingChildren = [elm]; + } + } + break; + } + } + } + + function disconnectedCallback(plt, elm) { + // only disconnect if we're not temporarily disconnected + // tmpDisconnected will happen when slot nodes are being relocated + if (!plt.tmpDisconnected) { + // ok, let's officially destroy this thing + // set this to true so that any of our pending async stuff + // doesn't continue since we already decided to destroy this node + elm._hasDestroyed = true; + // call instance Did Unload and destroy instance stuff + // if we've created an instance for this + var instance = elm.$instance; + if (instance) { + // call the user's componentDidUnload if there is one + instance.componentDidUnload && instance.componentDidUnload(); + elm.$instance = instance.$el = instance.__values = instance.__values.__propWillChange = instance.__values.__propDidChange = null; + } + // detatch any event listeners that may have been added + // this will also set _listeners to null if there are any + detachListeners(elm); + // destroy the vnode and child vnodes if they exist + elm._vnode && invokeDestroy(elm._vnode); + if (elm._hostContentNodes) { + // overreacting here just to reduce any memory leak issues + elm._hostContentNodes = elm._hostContentNodes.defaultSlot = elm._hostContentNodes.namedSlots = null; + } + // fuhgeddaboudit + // set it all to null to ensure we forget references + // and reset values incase this node gets reused somehow + // (possible that it got disconnected, but the node was reused) + elm._root = elm._vnode = elm._ancestorHostElement = elm._activelyLoadingChildren = elm._hasConnected = elm._isQueuedForUpdate = elm._hasLoaded = null; + } + } + + function queueUpdate(plt, elm) { + // only run patch if it isn't queued already + if (!elm._isQueuedForUpdate) { + elm._isQueuedForUpdate = true; + // run the patch in the next tick + plt.queue.add(function queueUpdateNextTick() { + // no longer queued + elm._isQueuedForUpdate = false; + // vdom diff and patch the host element for differences + update(plt, elm); + }); + } + } + function update(plt, elm) { + // everything is async, so somehow we could have already disconnected + // this node, so be sure to do nothing if we've already disconnected + if (!elm._hasDestroyed) { + var isInitialLoad = !elm.$instance; + if (isInitialLoad) { + // haven't created a component instance for this host element yet + initInstance(plt, elm); + } + // if this component has a render function, let's fire + // it off and generate a vnode for this + elm._render(!isInitialLoad); + if (isInitialLoad) { + elm._initLoad(); + } + } + } + + function initProxy(plt, elm, instance, cmpMeta) { + var i = 0; + if (cmpMeta.methodsMeta) { + // instances will already have the methods on them + // but you can also expose methods to the proxy element + // using @Method(). Think of like .focus() for an element. + for (; i < cmpMeta.methodsMeta.length; i++) { + initMethod(cmpMeta.methodsMeta[i], elm, instance); + } + } + // used to store instance data internally so that we can add + // getters/setters with the same name, and then do change detection + var values = instance.__values = {}; + if (cmpMeta.propWillChangeMeta) { + // this component has prop WILL change methods, so init the object to store them + values.__propWillChange = {}; + } + if (cmpMeta.propDidChangeMeta) { + // this component has prop DID change methods, so init the object to store them + values.__propDidChange = {}; + } + if (cmpMeta.statesMeta) { + // add getters/setters to instance properties that are not already set as @Prop() + // these are instance properties that should trigger a render update when + // they change. Like @Prop(), except data isn't passed in and is only state data. + // Unlike @Prop, state properties do not add getters/setters to the proxy element + // and initial values are not checked against the proxy element or config + for (i = 0; i < cmpMeta.statesMeta.length; i++) { + initProperty(false, true, '', cmpMeta.statesMeta[i], 0, instance, values, plt, elm, cmpMeta.propWillChangeMeta, cmpMeta.propDidChangeMeta); + } + } + if (cmpMeta.propsMeta) { + for (i = 0; i < cmpMeta.propsMeta.length; i++) { + // add getters/setters for @Prop()s + initProperty(true, cmpMeta.propsMeta[i].isStateful, cmpMeta.propsMeta[i].attribName, cmpMeta.propsMeta[i].propName, cmpMeta.propsMeta[i].propType, instance, instance.__values, plt, elm, cmpMeta.propWillChangeMeta, cmpMeta.propDidChangeMeta); + } + } + } + function initMethod(methodName, elm, instance) { + // add a getter on the dom's element instance + // pointed at the instance's method + Object.defineProperty(elm, methodName, { + configurable: true, + value: instance[methodName].bind(instance) + }); + } + function initProperty(isProp, isStateful, attrName, propName, propType, instance, internalValues, plt, elm, propWillChangeMeta, propDidChangeMeta) { + if (isProp) { + // @Prop() property, so check initial value from the proxy element, instance + // and config, before we create getters/setters on this same property name + var hostAttrValue = elm.getAttribute(attrName); + if (hostAttrValue !== null) { + // looks like we've got an initial value from the attribute + internalValues[propName] = parsePropertyValue(propType, hostAttrValue); + } else if (elm[propName] !== undefined) { + // looks like we've got an initial value on the proxy element + internalValues[propName] = parsePropertyValue(propType, elm[propName]); + } else if (instance[propName] !== undefined) { + // looks like we've got an initial value on the instance already + internalValues[propName] = instance[propName]; + } else if (propName === 'mode') { + // special case for just "mode" property + // which all component automatically get + internalValues[propName] = plt.config.get(propName); + } + } else { + // @State() property, so copy the value directly from the instance + // before we create getters/setters on this same property name + internalValues[propName] = instance[propName]; + } + var i = 0; + if (propWillChangeMeta) { + // there are prop WILL change methods for this component + for (i = 0; i < propWillChangeMeta.length; i++) { + if (propWillChangeMeta[i][PROP_CHANGE_PROP_NAME] === propName) { + // cool, we should watch for changes to this property + // let's bind their watcher function and add it to our list + // of watchers, so any time this property changes we should + // also fire off their @PropWillChange() method + internalValues.__propWillChange[propName] = instance[propWillChangeMeta[i][PROP_CHANGE_METHOD_NAME]].bind(instance); + } + } + } + if (propDidChangeMeta) { + // there are prop DID change methods for this component + for (i = 0; i < propDidChangeMeta.length; i++) { + if (propDidChangeMeta[i][PROP_CHANGE_PROP_NAME] === propName) { + // cool, we should watch for changes to this property + // let's bind their watcher function and add it to our list + // of watchers, so any time this property changes we should + // also fire off their @PropDidChange() method + internalValues.__propDidChange[propName] = instance[propDidChangeMeta[i][PROP_CHANGE_METHOD_NAME]].bind(instance); + } + } + } + function getValue() { + // get the property value directly from our internal values + return internalValues[propName]; + } + function setValue(newVal) { + // check our new property value against our internal value + var oldVal = internalValues[propName]; + // TODO: account for Arrays/Objects + if (newVal !== oldVal) { + // gadzooks! the property's value has changed!! + if (internalValues.__propWillChange && internalValues.__propWillChange[propName]) { + // this instance is watching for when this property WILL change + internalValues.__propWillChange[propName](newVal, oldVal); + } + // set our new value! + internalValues[propName] = newVal; + if (internalValues.__propDidChange && internalValues.__propDidChange[propName]) { + // this instance is watching for when this property DID change + internalValues.__propDidChange[propName](newVal, oldVal); + } + // looks like this value actually changed, we've got work to do! + // queue that we need to do an update, don't worry + // about queuing up millions cuz this function + // ensures it only runs once + queueUpdate(plt, elm); + } + } + if (isProp) { + // dom's element instance + // only place getters/setters on element for props + // state getters/setters should not be assigned to the element + Object.defineProperty(elm, propName, { + configurable: true, + get: getValue, + set: setValue + }); + } + // user's component class instance + var instancePropDesc = { + configurable: true, + get: getValue + }; + if (isStateful) { + // this is a state property, or it's a prop that can keep state + // for props it's mainly used for props on inputs like "checked" + instancePropDesc.set = setValue; + } else { + // dev mode warning only + instancePropDesc.set = function invalidSetValue() { + // this is not a stateful prop + // so do not update the instance or host element + console.warn('@Prop() "' + propName + '" on "' + elm.tagName.toLowerCase() + '" cannot be modified.'); + }; + } + // define on component class instance + Object.defineProperty(instance, propName, instancePropDesc); + } + + function createThemedClasses(mode, color, classList) { + var allClassObj = {}; + return classList.split(' ').reduce(function (classObj, classString) { + classObj[classString] = true; + if (mode) { + classObj[classString + '-' + mode] = true; + if (color) { + classObj[classString + '-' + color] = true; + classObj[classString + '-' + mode + '-' + color] = true; + } + } + return classObj; + }, allClassObj); + } + + function render(plt, elm, isUpdateRender) { + var instance = elm.$instance; + var cmpMeta = plt.getComponentMeta(elm); + if (isUpdateRender) { + // fire off the user's componentWillUpdate method (if one was provided) + // componentWillUpdate runs BEFORE render() has been called + // but only BEFORE an UPDATE and not before the intial render + instance.componentWillUpdate && instance.componentWillUpdate(); + } + // if this component has a render function, let's fire + // it off and generate the child vnodes for this host element + // note that we do not create the host element cuz it already exists + var vnodeChildren = instance.render && instance.render(); + var vnodeHostData = instance.hostData && instance.hostData(); + var hostMeta = cmpMeta.hostMeta; + if (vnodeChildren || vnodeHostData || hostMeta) { + if (hostMeta) { + vnodeHostData = Object.keys(hostMeta).reduce(function (hostData, key) { + switch (key) { + case 'theme': + hostData['class'] = hostData['class'] || {}; + hostData['class'] = Object.assign(hostData['class'], createThemedClasses(instance.mode, instance.color, hostMeta['theme'])); + } + return hostData; + }, vnodeHostData || {}); + } + // looks like we've got child nodes to render into this host element + // or we need to update the css class/attrs on the host element + // if we haven't already created a vnode, then we give the renderer the actual element + // if this is a re-render, then give the renderer the last vnode we already created + var oldVNode = elm._vnode || new VNode(); + oldVNode.elm = elm; + // normalize host data keys to abbr. key + if (vnodeHostData) { + vnodeHostData.a = vnodeHostData['attrs']; + vnodeHostData.c = vnodeHostData['class']; + vnodeHostData.s = vnodeHostData['style']; + vnodeHostData.o = vnodeHostData['on']; + } + // each patch always gets a new vnode + // the host element itself isn't patched because it already exists + // kick off the actual render and any DOM updates + elm._vnode = plt.render(oldVNode, h(null, vnodeHostData, vnodeChildren), isUpdateRender, elm._hostContentNodes); + } + if (isUpdateRender) { + // fire off the user's componentDidUpdate method (if one was provided) + // componentDidUpdate runs AFTER render() has been called + // but only AFTER an UPDATE and not after the intial render + instance.componentDidUpdate && instance.componentDidUpdate(); + } + } + + function initHostConstructor(plt, HostElementConstructor) { + Object.defineProperties(HostElementConstructor, { + 'connectedCallback': { + value: function () { + connectedCallback(plt, this); + } + }, + 'attributeChangedCallback': { + value: function (attribName, oldVal, newVal) { + attributeChangedCallback(plt, this, attribName, oldVal, newVal); + } + }, + 'disconnectedCallback': { + value: function () { + disconnectedCallback(plt, this); + } + }, + _queueUpdate: { + value: function () { + queueUpdate(plt, this); + } + }, + _initLoad: { + value: function () { + initLoad(plt, this); + } + }, + _render: { + value: function (isInitialRender) { + render(plt, this, isInitialRender); + } + } + }); + } + function initInstance(plt, elm) { + // using the component's class, let's create a new instance + var cmpMeta = plt.getComponentMeta(elm); + var instance = elm.$instance = new cmpMeta.componentModuleMeta(); + // let's automatically add a reference to the host element on the instance + instance.$el = elm; + // so we've got an host element now, and a actual instance + // let's wire them up together with getter/settings + // the setters are use for change detection and knowing when to re-render + initProxy(plt, elm, instance, cmpMeta); + // fire off the user's componentWillLoad method (if one was provided) + // componentWillLoad only runs ONCE, after instance.$el has been assigned + // the host element, but BEFORE render() has been called + instance.componentWillLoad && instance.componentWillLoad(); + } + function initLoad(plt, elm) { + var instance = elm.$instance; + // it's possible that we've already decided to destroy this element + // check if this element has any actively loading child elements + if (instance && !elm._hasDestroyed && (!elm._activelyLoadingChildren || !elm._activelyLoadingChildren.length)) { + // cool, so at this point this element isn't already being destroyed + // and it does not have any child elements that are still loading + // ensure we remove any child references cuz it doesn't matter at this point + elm._activelyLoadingChildren = null; + // the element is within the DOM now, so let's attach the event listeners + attachListeners(plt, plt.getComponentMeta(elm).listenersMeta, elm, instance); + // sweet, this particular element is good to go + // all of this element's children have loaded (if any) + elm._hasLoaded = true; + // fire off the user's componentDidLoad method (if one was provided) + // componentDidLoad only runs ONCE, after instance.$el has been assigned + // the host element, and AFTER render() has been called + instance.componentDidLoad && instance.componentDidLoad(); + // add the css class that this element has officially hydrated + elm.classList.add(HYDRATED_CSS); + // ( •_•) + // ( •_•)>⌐■-■ + // (⌐■_■) + // load events fire from bottom to top, the deepest elements first then bubbles up + // if this element did have an ancestor host element + if (elm._ancestorHostElement) { + // ok so this element already has a known ancestor host element + // let's make sure we remove this element from its ancestor's + // known list of child elements which are actively loading + var ancestorsActivelyLoadingChildren = elm._ancestorHostElement._activelyLoadingChildren; + var index = ancestorsActivelyLoadingChildren && ancestorsActivelyLoadingChildren.indexOf(elm); + if (index > -1) { + // yup, this element is in the list of child elements to wait on + // remove it so we can work to get the length down to 0 + ancestorsActivelyLoadingChildren.splice(index, 1); + } + // the ancestor's initLoad method will do the actual checks + // to see if the ancestor is actually loaded or not + // then let's call the ancestor's initLoad method if there's no length + // (which actually ends up as this method again but for the ancestor) + !ancestorsActivelyLoadingChildren.length && elm._ancestorHostElement._initLoad(); + // fuhgeddaboudit, no need to keep a reference after this element loaded + delete elm._ancestorHostElement; + } + } + } + + function initGlobal(Gbl, win, domApi, plt, config, domCtrl) { + if (typeof win.CustomEvent !== 'function') { + // CustomEvent polyfill + var CustomEvent = function (event, params) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = domApi.$createEvent(); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + }; + + CustomEvent.prototype = win.Event.prototype; + win.CustomEvent = CustomEvent; + } + // properties that can stay hidden from public use + var controllers = Gbl.controllers = {}; + Gbl.isClient = true; + Gbl.isServer = false; + // properties to be exposed to public + // in actuality it's the exact same object + Gbl.config = config; + Gbl.dom = domCtrl; + Gbl.emit = function (instance, eventName, data) { + data = data || {}; + if (data.bubbles === undefined) { + data.bubbles = true; + } + if (data.composed === undefined) { + // https://developers.google.com/web/fundamentals/getting-started/primers/shadowdom#events + data.composed = true; + } + if (Gbl.eventNameFn) { + eventName = Gbl.eventNameFn(eventName); + } + instance && instance.$el && instance.$el.dispatchEvent(new win.CustomEvent(eventName, data)); + }; + Gbl.listener = { + enable: function (instance, eventName, shouldEnable, attachTo) { + enableListener(plt, instance.$el, instance, eventName, shouldEnable, attachTo); + }, + add: function (elm, eventName, cb, opts) { + return addEventListener(plt, elm, eventName, cb, opts); + } + }; + // used to store the queued controller promises to + // be resolved when the controller finishes loading + var queuedCtrlResolves = {}; + Gbl.controller = function (ctrlName, opts) { + // loading a controller is always async so return a promise + return new Promise(function (resolve) { + // see if we already have the controller loaded + var ctrl = controllers[ctrlName]; + if (ctrl) { + // we've already loaded this controller + resolveController(ctrl, resolve, opts); + } else { + // oh noz! we haven't already loaded this controller yet! + var ctrlResolveQueue = queuedCtrlResolves[ctrlName]; + if (ctrlResolveQueue) { + // cool we've already "started" to load the controller + // but it hasn't finished loading yet, so let's add + // this one also to the queue of to-be resolved promises + ctrlResolveQueue.push(resolve, opts); + } else { + // looks like we haven't even started the request + // yet lets add the component to the DOM and create + // a queue for this controller + queuedCtrlResolves[ctrlName] = [resolve, opts]; + domApi.$appendChild(domApi.$body, domApi.$createElement('ion-' + ctrlName + '-controller')); + } + } + }); + }; + Gbl.loadController = function (ctrlName, ctrl) { + // this method is called when the singleton + // instance of our controller initially loads + // add this controller instance to our map of controller singletons + controllers[ctrlName] = ctrl; + // check for to-be resolved controller promises + var pendingCtrlResolves = queuedCtrlResolves[ctrlName]; + if (pendingCtrlResolves) { + for (var i = 0; i < pendingCtrlResolves.length; i += 2) { + // first arg is the original promise's resolve + // which still needs to be resolved + // second arg was the originally passed in options + resolveController(ctrl, pendingCtrlResolves[i], pendingCtrlResolves[i + 1]); + } + // all good, go ahead and remove from the queue + delete queuedCtrlResolves[ctrlName]; + } + }; + function resolveController(ctrl, resolve, opts) { + if (opts) { + // if the call had options passed in then + // it should run the controller's load() method + // and let the controller's load() do the resolve + // which then will resolve the user's promise + ctrl.load(opts).then(resolve); + } else { + // no options passed in, so resolve with + // the actual controller instance + resolve(ctrl); + } + } + return Gbl; + } + + function createPlatformClient(Gbl, win, domApi, config, domCtrl, queue, staticDir) { + var registry = { 'HTML': {} }; + var moduleImports = {}; + var moduleCallbacks = {}; + var loadedModules = {}; + var pendingModuleRequests = {}; + // create the platform api which will be passed around for external use + var plt = { + registerComponents: registerComponents, + defineComponent: defineComponent, + getComponentMeta: getComponentMeta, + loadBundle: loadBundle, + config: config, + queue: queue, + connectHostElement: connectHostElement, + getEventOptions: getEventOptions + }; + // create the renderer that will be used + plt.render = createRenderer(plt, domApi); + // create the global which will be injected into the user's instances + var injectedGlobal = initGlobal(Gbl, win, domApi, plt, config, domCtrl); + // setup the root element which is the mighty tag + // the has the final say of when the app has loaded + var rootElm = domApi.$documentElement; + rootElm._activelyLoadingChildren = []; + rootElm._initLoad = function appLoadedCallback() { + // this will fire when all components have finished loaded + rootElm._hasLoaded = true; + }; + // if the HTML was generated from SSR + // then let's walk the tree and generate vnodes out of the data + createVNodesFromSsr(domApi, rootElm); + function getComponentMeta(elm) { + // get component meta using the element + // important that the registry has upper case tag names + return registry[elm.tagName]; + } + function connectHostElement(elm, slotMeta) { + // host element has been connected to the DOM + if (!domApi.$getAttribute(elm, SSR_VNODE_ID)) { + // this host element was NOT created with SSR + // let's pick out the inner content for slot projection + assignHostContentSlots(domApi, elm, slotMeta); + } + } + function registerComponents(components) { + // this is the part that just registers the minimal amount of data + // it's basically a map of the component tag name to its associated external bundles + return (components || []).map(function (data) { + return parseComponentRegistry(data, registry); + }); + } + function defineComponent(cmpMeta, HostElementConstructor) { + // initialize the properties on the component module prototype + initHostConstructor(plt, HostElementConstructor.prototype); + // add which attributes should be observed + HostElementConstructor.observedAttributes = cmpMeta.propsMeta.filter(function (p) { + return p.attribName; + }).map(function (p) { + return p.attribName; + }); + // define the custom element + win.customElements.define(cmpMeta.tagNameMeta.toLowerCase(), HostElementConstructor); + } + Gbl.defineComponents = function defineComponents(moduleId, importFn) { + var args = arguments; + // import component function + // inject globals + importFn(moduleImports, h, t, injectedGlobal); + for (var i = 2; i < args.length; i++) { + parseComponentMeta(registry, moduleImports, args[i]); + } + // fire off all the callbacks waiting on this module to load + var callbacks = moduleCallbacks[moduleId]; + if (callbacks) { + for (i = 0; i < callbacks.length; i++) { + callbacks[i](); + } + delete moduleCallbacks[moduleId]; + } + // remember that we've already loaded this module + loadedModules[moduleId] = true; + }; + function loadBundle(cmpMeta, elm, cb) { + var moduleId = cmpMeta.moduleId; + if (loadedModules[moduleId]) { + // sweet, we've already loaded this module + cb(); + } else { + // never seen this module before, let's start the request + // and add it to the callbacks to fire when it has loaded + if (moduleCallbacks[moduleId]) { + moduleCallbacks[moduleId].push(cb); + } else { + moduleCallbacks[moduleId] = [cb]; + } + // create the url we'll be requesting + var url = getBundlePath(moduleId + '.js'); + if (!pendingModuleRequests[url]) { + // not already actively requesting this url + // remember that we're now actively requesting this url + pendingModuleRequests[url] = true; + // let's kick off the module request + jsonp(url); + } + // we also need to load the css file in the head + var styleId = cmpMeta.styleIds[getMode(domApi, config, elm)] || cmpMeta.styleIds.$; + if (styleId && !loadedModules[styleId]) { + // this style hasn't been added to the head yet + loadedModules[styleId] = true; + // append this link element to the head, which starts the request for the file + var linkElm = domApi.$createElement('link'); + linkElm.href = getBundlePath(styleId + '.css'); + linkElm.rel = 'stylesheet'; + domApi.$insertBefore(domApi.$head, linkElm, domApi.$head.firstChild); + } + } + } + function getBundlePath(fileName) { + return '' + staticDir + fileName; + } + function jsonp(url) { + // create a sript element to add to the document.head + var scriptElm = domApi.$createElement('script'); + scriptElm.charset = 'utf-8'; + scriptElm.async = true; + scriptElm.src = url; + // create a fallback timeout if something goes wrong + var tmrId = setTimeout(onScriptComplete, 120000); + function onScriptComplete() { + clearTimeout(tmrId); + scriptElm.onerror = scriptElm.onload = null; + domApi.$removeChild(scriptElm.parentNode, scriptElm); + // remove from our list of active requests + delete pendingModuleRequests[url]; + } + // add script completed listener to this script element + scriptElm.onerror = scriptElm.onload = onScriptComplete; + // inject a script tag in the head + // kick off the actual request + domApi.$appendChild(domApi.$head, scriptElm); + } + // test if this browser supports event options or not + var supportsEventOptions = false; + try { + win.addEventListener('evopt', null, Object.defineProperty({}, 'passive', { + get: function () { + supportsEventOptions = true; + } + })); + } catch (e) {} + function getEventOptions(opts) { + return supportsEventOptions ? { + 'capture': !!(opts && opts.capture), + 'passive': !(opts && opts.passive === false) + } : !!(opts && opts.capture); + } + return plt; + } + + function createQueueClient(domCtrl) { + var now = domCtrl.now; + var raf = domCtrl.raf; + var highPromise = Promise.resolve(); + var highCallbacks = []; + var mediumCallbacks = []; + var lowCallbacks = []; + var resolvePending = false; + var ricPending = false; + function doHighPriority() { + // holy geez we need to get this stuff done and fast + // all high priority callbacks should be fired off immediately + while (highCallbacks.length > 0) { + highCallbacks.shift()(); + } + resolvePending = false; + } + function doWork() { + var start = now(); + // always run all of the high priority work if there is any + doHighPriority(); + while (mediumCallbacks.length > 0 && now() - start < 40) { + mediumCallbacks.shift()(); + } + if (mediumCallbacks.length === 0) { + // we successfully drained the medium queue or the medium queue is empty + // so now let's drain the low queue with our remaining time + while (lowCallbacks.length > 0 && now() - start < 40) { + lowCallbacks.shift()(); + } + } + // check to see if we still have work to do + if (ricPending = mediumCallbacks.length > 0 || lowCallbacks.length > 0) { + // everyone just settle down now + // we already don't have time to do anything in this callback + // let's throw the next one in a requestAnimationFrame + // so we can just simmer down for a bit + raf(flush); + } + } + function flush() { + // always run all of the high priority work if there is any + doHighPriority(); + // always force a bunch of medium callbacks to run, but still have + // a throttle on how many can run in a certain time + var start = now(); + while (mediumCallbacks.length > 0 && now() - start < 4) { + mediumCallbacks.shift()(); + } + if (ricPending = mediumCallbacks.length > 0 || lowCallbacks.length > 0) { + // still more to do yet, but we've run out of time + // let's let this thing cool off and try again in the next ric + raf(doWork); + } + } + function add(cb, priority) { + if (priority === PRIORITY_HIGH) { + // uses Promise.resolve() for next tick + highCallbacks.push(cb); + if (!resolvePending) { + // not already pending work to do, so let's tee it up + resolvePending = true; + highPromise.then(doHighPriority); + } + } else { + if (priority === PRIORITY_LOW) { + lowCallbacks.push(cb); + } else { + // defaults to medium priority + // uses requestIdleCallback + mediumCallbacks.push(cb); + } + if (!ricPending) { + // not already pending work to do, so let's tee it up + ricPending = true; + raf(doWork); + } + } + } + return { + add: add, + flush: flush + }; + } + + function detectPlatforms(url, userAgent, platforms, defaultPlatform) { + // bracket notation to ensure they're not property renamed + var validPlatforms = platforms.filter(function (p) { + return p['isMatch'] && p['isMatch'](url, userAgent); + }); + if (!validPlatforms.length) { + validPlatforms = platforms.filter(function (p) { + return p['name'] === defaultPlatform; + }); + } + return validPlatforms; + } + function isPlatformMatch(url, userAgent, platformName, userAgentAtLeastHas, userAgentMustNotHave) { + var queryValue = queryParam(url, 'ionicplatform'); + if (queryValue) { + return queryValue === platformName; + } + if (userAgent) { + userAgent = userAgent.toLowerCase(); + for (var i = 0; i < userAgentAtLeastHas.length; i++) { + if (userAgent.indexOf(userAgentAtLeastHas[i]) > -1) { + for (var j = 0; j < userAgentMustNotHave.length; j++) { + if (userAgent.indexOf(userAgentMustNotHave[j]) > -1) { + return false; + } + } + return true; + } + } + } + return false; + } + function queryParam(url, key) { + key = key.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + key + '=([^&#]*)'); + var results = regex.exec(url); + return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null; + } + + // order from most specifc to least specific + var PLATFORM_CONFIGS = [{ + 'name': 'ipad', + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'ipad', ['ipad'], ['windows phone']); + } + }, { + 'name': 'iphone', + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'iphone', ['iphone'], ['windows phone']); + } + }, { + 'name': 'ios', + 'settings': { + 'mode': 'ios' + }, + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'ios', ['iphone', 'ipad', 'ipod'], ['windows phone']); + } + }, { + 'name': 'android', + 'settings': { + 'activator': 'ripple', + 'mode': 'md' + }, + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'android', ['android', 'silk'], ['windows phone']); + } + }, { + 'name': 'windows', + 'settings': { + 'mode': 'wp' + }, + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'windows', ['windows phone'], []); + } + }, { + 'name': 'core', + 'settings': { + 'mode': 'md' + } + }]; + + var Gbl = window[globalNamespace] = window[globalNamespace] || {}; + var domCtrl = createDomControllerClient(window); + var plt = createPlatformClient(Gbl, window, createDomApi(document), createConfigController(Gbl.config, detectPlatforms(window.location.href, window.navigator.userAgent, PLATFORM_CONFIGS, 'core')), domCtrl, createQueueClient(domCtrl), Gbl.staticDir); + plt.registerComponents(Gbl.components).forEach(function (cmpMeta) { + function HostElement(self) { + return HTMLElement.call(this, self); + } + HostElement.prototype = Object.create(HTMLElement.prototype, { constructor: { value: HostElement, configurable: true } }); + plt.defineComponent(cmpMeta, HostElement); + }); +})(window, document, "App"); \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/app.core.js b/packages/core-hn-demo/www/build/app/app.core.js new file mode 100644 index 0000000000..c5fd0ac6ce --- /dev/null +++ b/packages/core-hn-demo/www/build/app/app.core.js @@ -0,0 +1,2064 @@ +/*! Built with http://stenciljs.com */ + +(function (window, document, globalNamespace) { + "use strict"; + + function createConfigController(configObj, platforms) { + configObj = configObj || {}; + function get(key, fallback) { + if (configObj[key] !== undefined) { + return configObj[key]; + } + var settings = null; + for (var i = 0; i < platforms.length; i++) { + settings = platforms[i]['settings']; + if (settings && settings[key] !== undefined) { + return settings[key]; + } + } + return fallback !== undefined ? fallback : null; + } + function getBoolean(key, fallback) { + var val = get(key); + if (val === null) { + return fallback !== undefined ? fallback : false; + } + if (typeof val === 'string') { + return val === 'true'; + } + return !!val; + } + function getNumber(key, fallback) { + var val = parseFloat(get(key)); + return isNaN(val) ? fallback !== undefined ? fallback : NaN : val; + } + return { + get: get, + getBoolean: getBoolean, + getNumber: getNumber + }; + } + + function createDomApi(document) { + // using the $ prefix so that closure if + // cool with property renaming each of these + return { + $documentElement: document.documentElement, + $head: document.head, + $body: document.body, + $nodeType: function nodeType(node) { + return node.nodeType; + }, + $createEvent: function createEvent() { + return document.createEvent('CustomEvent'); + }, + $createElement: function createElement(tagName) { + return document.createElement(tagName); + }, + $createElementNS: function createElementNS(namespace, tagName) { + return document.createElementNS(namespace, tagName); + }, + $createTextNode: function createTextNode(text) { + return document.createTextNode(text); + }, + $createComment: function createComment(data) { + return document.createComment(data); + }, + $insertBefore: function insertBefore(parentNode, childNode, referenceNode) { + parentNode.insertBefore(childNode, referenceNode); + }, + $removeChild: function removeChild(parentNode, childNode) { + return parentNode.removeChild(childNode); + }, + $appendChild: function appendChild(parentNode, childNode) { + parentNode.appendChild(childNode); + }, + $childNodes: function childNodes(node) { + return node.childNodes; + }, + $parentNode: function parentNode(node) { + return node.parentNode; + }, + $nextSibling: function nextSibling(node) { + return node.nextSibling; + }, + $tagName: function tagName(elm) { + return elm.tagName; + }, + $getTextContent: function (node) { + return node.textContent; + }, + $setTextContent: function setTextContent(node, text) { + node.textContent = text; + }, + $getAttribute: function getAttribute(elm, key) { + return elm.getAttribute(key); + }, + $setAttribute: function setAttribute(elm, key, val) { + elm.setAttribute(key, val); + }, + $setAttributeNS: function $setAttributeNS(elm, namespaceURI, qualifiedName, val) { + elm.setAttributeNS(namespaceURI, qualifiedName, val); + }, + $removeAttribute: function removeAttribute(elm, key) { + elm.removeAttribute(key); + } + }; + } + + function createDomControllerClient(win) { + var readCBs = []; + var writeCBs = []; + var rafPending = false; + function now() { + return win.performance.now(); + } + function raf(cb) { + return win.requestAnimationFrame(cb); + } + function domRead(cb) { + readCBs.push(cb); + if (!rafPending) { + rafPending = true; + raf(rafFlush); + } + } + function domWrite(cb) { + writeCBs.push(cb); + if (!rafPending) { + rafPending = true; + raf(rafFlush); + } + } + function rafFlush(timeStamp, startTime, cb, err) { + try { + startTime = now(); + // ******** DOM READS **************** + while (cb = readCBs.shift()) { + cb(timeStamp); + } + // ******** DOM WRITES **************** + while (cb = writeCBs.shift()) { + cb(timeStamp); + if (now() - startTime > 8) { + break; + } + } + } catch (e) { + err = e; + } + if (rafPending = readCBs.length > 0 || writeCBs.length > 0) { + raf(rafFlush); + } + if (err) { + console.error(err); + } + } + return { + read: domRead, + write: domWrite, + raf: raf, + now: now + }; + } + + /** + * This constants file is largely for minification tricks, and to + * have easy to read variable names. Enums would make more sense + * in most cases, but doing values like this as constants allows + * minifiers to just place the raw value directly in source, and in + * production there is no variable at all. For example, the minifier + * turns data[BUNDLE_ID] turns into data[0] for production builds. + */ + /** + * Prop Change Meta Indexes + */ + var PROP_CHANGE_PROP_NAME = 0; + var PROP_CHANGE_METHOD_NAME = 1; + /** + * Property Types + */ + + var TYPE_BOOLEAN = 1; + var TYPE_NUMBER = 2; + /** + * JS Property to Attribute Name Options + */ + + var ATTR_LOWER_CASE = 1; + /** + * Priority Levels + */ + var PRIORITY_HIGH = 3; + + var PRIORITY_LOW = 1; + /** + * Slot Meta + */ + var SLOT_TAG = 0; + var HAS_SLOTS = 1; + var HAS_NAMED_SLOTS = 2; + /** + * SSR Attribute Names + */ + var SSR_VNODE_ID = 'ssrv'; + var SSR_CHILD_ID = 'ssrc'; + /** + * Node Types + */ + var ELEMENT_NODE = 1; + var TEXT_NODE = 3; + var COMMENT_NODE = 8; + /** + * Key Name to Key Code Map + */ + var KEY_CODE_MAP = { + 'enter': 13, + 'escape': 27, + 'space': 32, + 'tab': 9 + }; + /** + * CSS class that gets added to the host element + * after the component has fully hydrated + */ + var HYDRATED_CSS = 'hydrated'; + /** + * Namespaces + */ + + /** + * File names and value + */ + + class VNode {} + + /** + * Production h() function based on Preact by + * Jason Miller (@developit) + * Licensed under the MIT License + * https://github.com/developit/preact/blob/master/LICENSE + * + * Modified for Stencil's compiler and vdom + */ + var stack = []; + function h(nodeName, vnodeData, child) { + var children = void 0, + lastSimple = void 0, + simple = void 0, + i = void 0; + for (i = arguments.length; i-- > 2;) { + stack.push(arguments[i]); + } + while (stack.length) { + if ((child = stack.pop()) && child.pop !== undefined) { + for (i = child.length; i--;) { + stack.push(child[i]); + } + } else { + if (typeof child === 'boolean') child = null; + if (simple = typeof nodeName !== 'function') { + if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false; + } + if (simple && lastSimple) { + children[children.length - 1].vtext += child; + } else if (children === undefined) { + children = [simple ? t(child) : child]; + } else { + children.push(simple ? t(child) : child); + } + lastSimple = simple; + } + } + var vnode = new VNode(); + vnode.vtag = nodeName; + vnode.vchildren = children; + if (vnodeData) { + // data object was provided + vnode.vattrs = vnodeData.a; + vnode.vprops = vnodeData.p; + vnode.vclass = vnodeData.c; + vnode.vstyle = vnodeData.s; + vnode.vlisteners = vnodeData.o; + vnode.vkey = vnodeData.k; + vnode.vnamespace = vnodeData.n; + // x = undefined: always check both data and children + // x = 0 skip checking only data on update + // x = 1 skip checking only children on update + // x = 2 skip checking both data and children on update + vnode.skipDataOnUpdate = vnodeData.x === 0 || vnodeData.x === 2; + vnode.skipChildrenOnUpdate = vnodeData.x > 0; + } else { + // no data object was provided + // so no data, so don't both checking data + vnode.skipDataOnUpdate = true; + // since no data was provided, than no x was provided + // if no x was provided then we need to always check children + // if if there are no children at all, then we know never to check children + vnode.skipChildrenOnUpdate = !children || children.length === 0; + } + return vnode; + } + function t(textValue) { + var vnode = new VNode(); + vnode.vtext = textValue; + return vnode; + } + + function createVNodesFromSsr(domApi, rootElm) { + var allSsrElms = rootElm.querySelectorAll('[' + SSR_VNODE_ID + ']'), + elm, + ssrVNodeId, + ssrVNode, + i, + ilen = allSsrElms.length, + j, + jlen; + if (rootElm._hasLoaded = ilen > 0) { + for (i = 0; i < ilen; i++) { + elm = allSsrElms[i]; + ssrVNodeId = domApi.$getAttribute(elm, SSR_VNODE_ID); + ssrVNode = elm._vnode = new VNode(); + ssrVNode.vtag = domApi.$tagName(ssrVNode.elm = elm).toLowerCase(); + for (j = 0, jlen = elm.childNodes.length; j < jlen; j++) { + addChildSsrVNodes(domApi, elm.childNodes[j], ssrVNode, ssrVNodeId, true); + } + } + } + } + function addChildSsrVNodes(domApi, node, parentVNode, ssrVNodeId, checkNestedElements) { + var nodeType = domApi.$nodeType(node); + var previousComment; + var childVNodeId, childVNodeSplt, childVNode; + if (checkNestedElements && nodeType === ELEMENT_NODE) { + childVNodeId = domApi.$getAttribute(node, SSR_CHILD_ID); + if (childVNodeId) { + // split the start comment's data with a period + childVNodeSplt = childVNodeId.split('.'); + // ensure this this element is a child element of the ssr vnode + if (childVNodeSplt[0] === ssrVNodeId) { + // cool, this element is a child to the parent vnode + childVNode = new VNode(); + childVNode.vtag = domApi.$tagName(childVNode.elm = node).toLowerCase(); + // this is a new child vnode + // so ensure its parent vnode has the vchildren array + if (!parentVNode.vchildren) { + parentVNode.vchildren = []; + } + // add our child vnode to a specific index of the vnode's children + parentVNode.vchildren[childVNodeSplt[1]] = childVNode; + // this is now the new parent vnode for all the next child checks + parentVNode = childVNode; + // if there's a trailing period, then it means there aren't any + // more nested elements, but maybe nested text nodes + // either way, don't keep walking down the tree after this next call + checkNestedElements = childVNodeSplt[2] !== ''; + } + } + // keep drilling down through the elements + for (var i = 0; i < node.childNodes.length; i++) { + addChildSsrVNodes(domApi, node.childNodes[i], parentVNode, ssrVNodeId, checkNestedElements); + } + } else if (nodeType === TEXT_NODE && (previousComment = node.previousSibling) && domApi.$nodeType(previousComment) === COMMENT_NODE) { + // split the start comment's data with a period + childVNodeSplt = domApi.$getTextContent(previousComment).split('.'); + // ensure this is an ssr text node start comment + // which should start with an "s" and delimited by periods + if (childVNodeSplt[0] === 's' && childVNodeSplt[1] === ssrVNodeId) { + // cool, this is a text node and it's got a start comment + childVNode = t(domApi.$getTextContent(node)); + childVNode.elm = node; + // this is a new child vnode + // so ensure its parent vnode has the vchildren array + if (!parentVNode.vchildren) { + parentVNode.vchildren = []; + } + // add our child vnode to a specific index of the vnode's children + parentVNode.vchildren[childVNodeSplt[2]] = childVNode; + } + } + } + function assignHostContentSlots(domApi, elm, slotMeta) { + // compiler has already figured out if this component has slots or not + // if the component doesn't even have slots then we'll skip over all of this code + var childNodes = elm.childNodes; + if (slotMeta === HAS_NAMED_SLOTS) { + // looks like this component has named slots + // so let's loop through each of the childNodes to the host element + // and pick out the ones that have a slot attribute + // if it doesn't have a slot attribute, than it's a default slot + var slotName = void 0; + var defaultSlot = void 0; + var namedSlots = void 0; + for (var i = 0, childNodeLen = childNodes.length; i < childNodeLen; i++) { + var childNode = childNodes[i]; + if (domApi.$nodeType(childNode) === 1 && (slotName = domApi.$getAttribute(childNode, 'slot')) != null) { + // is element node + // this element has a slot name attribute + // so this element will end up getting relocated into + // the component's named slot once it renders + namedSlots = namedSlots || {}; + if (namedSlots[slotName]) { + namedSlots[slotName].push(childNode); + } else { + namedSlots[slotName] = [childNode]; + } + } else { + // this is a text node + // or it's an element node that doesn't have a slot attribute + // let's add this node to our collection for the default slot + if (defaultSlot) { + defaultSlot.push(childNode); + } else { + defaultSlot = [childNode]; + } + } + } + // keep a reference to all of the initial nodes + // found as immediate childNodes to the host element + elm._hostContentNodes = { + defaultSlot: defaultSlot, + namedSlots: namedSlots + }; + } else if (slotMeta === HAS_SLOTS) { + // this component doesn't have named slots, but it does + // have at least a default slot, so the work here is alot easier than + // when we're not looping through each element and reading attribute values + elm._hostContentNodes = { + defaultSlot: childNodes.length ? Array.apply(null, childNodes) : null + }; + } + } + + function isDef(v) { + return v !== undefined && v !== null; + } + function isUndef(v) { + return v === undefined || v === null; + } + + function isObject(v) { + return v !== null && typeof v === 'object'; + } + + function isFunction(v) { + return typeof v === 'function'; + } + + function toDashCase(str) { + return str.replace(/([A-Z])/g, function (g) { + return '-' + g[0].toLowerCase(); + }); + } + + function noop() {} + + function getElementReference(elm, ref) { + if (ref === 'child') { + return elm.firstElementChild; + } + if (ref === 'parent') { + return getParentElement(elm) || elm; + } + if (ref === 'body') { + return elm.ownerDocument.body; + } + if (ref === 'document') { + return elm.ownerDocument; + } + if (ref === 'window') { + return elm.ownerDocument.defaultView; + } + return elm; + } + function getParentElement(elm) { + if (elm.parentElement) { + // normal element with a parent element + return elm.parentElement; + } + if (elm.parentNode && elm.parentNode.host) { + // shadow dom's document fragment + return elm.parentNode.host; + } + return null; + } + + var EMPTY = {}; + var DEFAULT_OPTS = null; + function updateElement(plt, nodeOps, oldVnode, newVnode) { + var isUpdate = oldVnode != null; + oldVnode = oldVnode || EMPTY; + newVnode = newVnode || EMPTY; + var key, + cur, + elm = newVnode.elm, + oldData, + newData; + // update attrs + if (oldVnode.vattrs || newVnode.vattrs) { + oldData = oldVnode.vattrs || EMPTY; + newData = newVnode.vattrs || EMPTY; + // update modified attributes, add new attributes + for (key in newData) { + cur = newData[key]; + if (oldData[key] !== cur) { + if (BOOLEAN_ATTRS[key] === 1) { + if (cur) { + nodeOps.$setAttribute(elm, key, ''); + } else { + nodeOps.$removeAttribute(elm, key); + } + } else { + if (key.charCodeAt(0) !== 120 /* xChar */) { + nodeOps.$setAttribute(elm, key, cur); + } else if (key.charCodeAt(3) === 58 /* colonChar */) { + // Assume xml namespace + nodeOps.$setAttributeNS(elm, XML_NS$1, key, cur); + } else if (key.charCodeAt(5) === 58 /* colonChar */) { + // Assume xlink namespace + nodeOps.$setAttributeNS(elm, XLINK_NS$1, key, cur); + } else { + nodeOps.$setAttribute(elm, key, cur); + } + } + } + } + // remove removed attributes + // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value) + // the other option is to remove all attributes with value == undefined + if (isUpdate) { + for (key in oldData) { + if (!(key in newData)) { + nodeOps.$removeAttribute(elm, key); + } + } + } + } + // update class + if (oldVnode.vclass || newVnode.vclass) { + oldData = oldVnode.vclass || EMPTY; + newData = newVnode.vclass || EMPTY; + if (isUpdate) { + for (key in oldData) { + if (!newData[key]) { + elm.classList.remove(key); + } + } + } + for (key in newData) { + cur = newData[key]; + if (cur !== oldData[key]) { + elm.classList[newData[key] ? 'add' : 'remove'](key); + } + } + } + // update props + if (oldVnode.vprops || newVnode.vprops) { + oldData = oldVnode.vprops || EMPTY; + newData = newVnode.vprops || EMPTY; + if (isUpdate) { + for (key in oldData) { + if (newData[key] === undefined) { + // only delete the old property when the + // new property is undefined, otherwise we'll + // end up deleting getters/setters + delete elm[key]; + } + } + } + for (key in newData) { + cur = newData[key]; + if (oldData[key] !== cur && (key !== 'value' || elm[key] !== cur)) { + elm[key] = cur; + } + } + } + // update style + if (oldVnode.vstyle || newVnode.vstyle) { + oldData = oldVnode.vstyle || EMPTY; + newData = newVnode.vstyle || EMPTY; + if (isUpdate) { + for (key in oldData) { + if (!newData[key]) { + elm.style[key] = ''; + } + } + } + for (key in newData) { + cur = newData[key]; + if (cur !== oldData[key]) { + elm.style[key] = cur; + } + } + } + // update event listeners + oldData = oldVnode.vlisteners; + newData = newVnode.vlisteners; + if (oldData || newData) { + if (!DEFAULT_OPTS) { + DEFAULT_OPTS = plt.getEventOptions(); + } + // remove existing listeners which no longer used + if (isUpdate && oldData && oldVnode.assignedListener) { + // if element changed or deleted we remove all existing listeners unconditionally + for (key in oldData) { + // remove listener if existing listener removed + if (!newData || !newData[key]) { + oldVnode.elm.removeEventListener(key, oldVnode.assignedListener, DEFAULT_OPTS); + } + } + } + // add new listeners which has not already attached + if (newData) { + // reuse existing listener or create new + cur = newVnode.assignedListener = oldVnode.assignedListener || createListener(); + // update vnode for listener + cur.vnode = newVnode; + // if element changed or added we add all needed listeners unconditionally + for (key in newData) { + // add listener if new listener added + if (!oldData || !oldData[key]) { + elm.addEventListener(key, cur, DEFAULT_OPTS); + } + } + } + } + } + function createListener() { + return function handler(event) { + handleEvent(event, handler.vnode); + }; + } + function handleEvent(event, vnode) { + var eventName = event.type, + on = vnode.vlisteners; + // call event handler(s) if they exists + if (on && on[eventName]) { + invokeHandler(on[eventName], vnode, event); + } + } + function invokeHandler(handler, vnode, event) { + if (isFunction(handler)) { + // call function handler + handler.call(vnode, event, vnode); + } else if (isObject(handler)) { + // call handler with arguments + if (isFunction(handler[0])) { + // special case for single argument for performance + if (handler.length === 2) { + handler[0].call(vnode, handler[1], event, vnode); + } else { + var args = handler.slice(1); + args.push(event); + args.push(vnode); + handler[0].apply(vnode, args); + } + } else { + // call multiple handlers + for (var i = 0; i < handler.length; i++) { + invokeHandler(handler[i]); + } + } + } + } + var BOOLEAN_ATTRS = { + 'allowfullscreen': 1, + 'async': 1, + 'autofocus': 1, + 'autoplay': 1, + 'checked': 1, + 'controls': 1, + 'disabled': 1, + 'enabled': 1, + 'formnovalidate': 1, + 'hidden': 1, + 'multiple': 1, + 'noresize': 1, + 'readonly': 1, + 'required': 1, + 'selected': 1, + 'spellcheck': 1 + }; + var XLINK_NS$1 = 'http://www.w3.org/1999/xlink'; + var XML_NS$1 = 'http://www.w3.org/XML/1998/namespace'; + + /** + * Virtual DOM patching algorithm based on Snabbdom by + * Simon Friis Vindum (@paldepind) + * Licensed under the MIT License + * https://github.com/snabbdom/snabbdom/blob/master/LICENSE + * + * Modified for Stencil's renderer and slot projection + */ + function createRenderer(plt, domApi) { + // createRenderer() is only created once per app + // the patch() function which createRenderer() returned is the function + // which gets called numerous times by each component + function createElm(vnode, parentElm, childIndex) { + var i = 0; + if (vnode.vtag === SLOT_TAG) { + if (hostContentNodes) { + // special case for manually relocating host content nodes + // to their new home in either a named slot or the default slot + var namedSlot = vnode.vattrs && vnode.vattrs.name; + var slotNodes = void 0; + if (isDef(namedSlot)) { + // this vnode is a named slot + slotNodes = hostContentNodes.namedSlots && hostContentNodes.namedSlots[namedSlot]; + } else { + // this vnode is the default slot + slotNodes = hostContentNodes.defaultSlot; + } + if (isDef(slotNodes)) { + // the host element has some nodes that need to be moved around + // we have a slot for the user's vnode to go into + // while we're moving nodes around, temporarily disable + // the disconnectCallback from working + plt.tmpDisconnected = true; + for (; i < slotNodes.length; i++) { + // remove the host content node from it's original parent node + // then relocate the host content node to its new slotted home + domApi.$appendChild(parentElm, domApi.$removeChild(domApi.$parentNode(slotNodes[i]), slotNodes[i])); + } + // done moving nodes around + // allow the disconnect callback to work again + plt.tmpDisconnected = false; + } + } + // this was a slot node, we do not create slot elements, our work here is done + // no need to return any element to be added to the dom + return null; + } + if (isDef(vnode.vtext)) { + // create text node + vnode.elm = domApi.$createTextNode(vnode.vtext); + } else { + // create element + var elm = vnode.elm = vnode.vnamespace ? domApi.$createElementNS(vnode.vnamespace, vnode.vtag) : domApi.$createElement(vnode.vtag); + // add css classes, attrs, props, listeners, etc. + updateElement(plt, domApi, null, vnode); + var children = vnode.vchildren; + if (isDef(ssrId)) { + // SSR ONLY: this is an SSR render and this + // logic does not run on the client + // give this element the SSR child id that can be read by the client + domApi.$setAttribute(vnode.elm, SSR_CHILD_ID, ssrId + '.' + childIndex + (hasChildNodes(children) ? '' : '.')); + } + if (children) { + var childNode = void 0; + for (; i < children.length; ++i) { + // create the node + childNode = createElm(children[i], elm, i); + // return node could have been null + if (childNode) { + if (isDef(ssrId) && childNode.nodeType === 3) { + // SSR ONLY: add the text node's start comment + domApi.$appendChild(elm, domApi.$createComment('s.' + ssrId + '.' + i)); + } + // append our new node + domApi.$appendChild(elm, childNode); + if (isDef(ssrId) && childNode.nodeType === 3) { + // SSR ONLY: add the text node's end comment + domApi.$appendChild(elm, domApi.$createComment('/')); + } + } + } + } + } + return vnode.elm; + } + function addVnodes(parentElm, before, vnodes, startIdx, endIdx) { + var childNode = void 0; + for (; startIdx <= endIdx; ++startIdx) { + var vnodeChild = vnodes[startIdx]; + if (isDef(vnodeChild)) { + if (isDef(vnodeChild.vtext)) { + childNode = domApi.$createTextNode(vnodeChild.vtext); + } else { + childNode = createElm(vnodeChild, parentElm, startIdx); + } + if (isDef(childNode)) { + vnodeChild.elm = childNode; + domApi.$insertBefore(parentElm, childNode, before); + } + } + } + } + function removeVnodes(parentElm, vnodes, startIdx, endIdx) { + for (; startIdx <= endIdx; ++startIdx) { + var vnode = vnodes[startIdx]; + if (isDef(vnode)) { + if (isDef(vnode.elm)) { + invokeDestroy(vnode); + } + domApi.$removeChild(parentElm, vnode.elm); + } + } + } + function updateChildren(parentElm, oldCh, newCh) { + var oldStartIdx = 0, + newStartIdx = 0; + var oldEndIdx = oldCh.length - 1; + var oldStartVnode = oldCh[0]; + var oldEndVnode = oldCh[oldEndIdx]; + var newEndIdx = newCh.length - 1; + var newStartVnode = newCh[0]; + var newEndVnode = newCh[newEndIdx]; + var oldKeyToIdx = void 0; + var idxInOld = void 0; + var elmToMove = void 0; + var node = void 0; + while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { + if (oldStartVnode == null) { + oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left + } else if (oldEndVnode == null) { + oldEndVnode = oldCh[--oldEndIdx]; + } else if (newStartVnode == null) { + newStartVnode = newCh[++newStartIdx]; + } else if (newEndVnode == null) { + newEndVnode = newCh[--newEndIdx]; + } else if (isSameVnode(oldStartVnode, newStartVnode)) { + patchVNode(oldStartVnode, newStartVnode); + oldStartVnode = oldCh[++oldStartIdx]; + newStartVnode = newCh[++newStartIdx]; + } else if (isSameVnode(oldEndVnode, newEndVnode)) { + patchVNode(oldEndVnode, newEndVnode); + oldEndVnode = oldCh[--oldEndIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (isSameVnode(oldStartVnode, newEndVnode)) { + patchVNode(oldStartVnode, newEndVnode); + domApi.$insertBefore(parentElm, oldStartVnode.elm, domApi.$nextSibling(oldEndVnode.elm)); + oldStartVnode = oldCh[++oldStartIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (isSameVnode(oldEndVnode, newStartVnode)) { + patchVNode(oldEndVnode, newStartVnode); + domApi.$insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); + oldEndVnode = oldCh[--oldEndIdx]; + newStartVnode = newCh[++newStartIdx]; + } else { + if (isUndef(oldKeyToIdx)) { + oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); + } + idxInOld = oldKeyToIdx[newStartVnode.vkey]; + if (isUndef(idxInOld)) { + // new element + node = createElm(newStartVnode, parentElm, newStartIdx); + newStartVnode = newCh[++newStartIdx]; + } else { + elmToMove = oldCh[idxInOld]; + if (elmToMove.vtag !== newStartVnode.vtag) { + node = createElm(newStartVnode, parentElm, idxInOld); + } else { + patchVNode(elmToMove, newStartVnode); + oldCh[idxInOld] = undefined; + node = elmToMove.elm; + } + newStartVnode = newCh[++newStartIdx]; + } + if (node) { + domApi.$insertBefore(parentElm, node, oldStartVnode.elm); + } + } + } + if (oldStartIdx > oldEndIdx) { + addVnodes(parentElm, newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm, newCh, newStartIdx, newEndIdx); + } else if (newStartIdx > newEndIdx) { + removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx); + } + } + function isSameVnode(vnode1, vnode2) { + // compare if two vnode to see if they're "technically" the same + // need to have the same element tag, and same key to be the same + return vnode1.vtag === vnode2.vtag && vnode1.vkey === vnode2.vkey; + } + function createKeyToOldIdx(children, beginIdx, endIdx) { + var i = void 0, + map = {}, + key = void 0, + ch = void 0; + for (i = beginIdx; i <= endIdx; ++i) { + ch = children[i]; + if (ch != null) { + key = ch.vkey; + if (key !== undefined) { + map.k = i; + } + } + } + return map; + } + function patchVNode(oldVnode, newVnode) { + var elm = newVnode.elm = oldVnode.elm; + var oldChildren = oldVnode.vchildren; + var newChildren = newVnode.vchildren; + if (isUndef(newVnode.vtext)) { + // element node + if ((!isUpdate || !newVnode.skipDataOnUpdate) && newVnode.vtag !== SLOT_TAG) { + // either this is the first render of an element OR it's an update + // AND we already know it's possible it could have changed + // this updates the element's css classes, attrs, props, listeners, etc. + updateElement(plt, domApi, oldVnode, newVnode); + } + if (isDef(oldChildren) && isDef(newChildren)) { + // looks like there's child vnodes for both the old and new vnodes + if (!isUpdate || !newVnode.skipChildrenOnUpdate) { + // either this is the first render of an element OR it's an update + // AND we already know it's possible that the children could have changed + updateChildren(elm, oldChildren, newChildren); + } + } else if (isDef(newChildren)) { + // no old child vnodes, but there are new child vnodes to add + if (isDef(oldVnode.vtext)) { + // the old vnode was text, so be sure to clear it out + domApi.$setTextContent(elm, ''); + } + // add the new vnode children + addVnodes(elm, null, newChildren, 0, newChildren.length - 1); + } else if (isDef(oldChildren)) { + // no new child vnodes, but there are old child vnodes to remove + removeVnodes(elm, oldChildren, 0, oldChildren.length - 1); + } + } else if (elm._hostContentNodes && elm._hostContentNodes.defaultSlot) { + // this element has slotted content + var parentElement = elm._hostContentNodes.defaultSlot[0].parentElement; + domApi.$setTextContent(parentElement, newVnode.vtext); + elm._hostContentNodes.defaultSlot = [parentElement.childNodes[0]]; + } else { + // update the text content for the text only vnode + domApi.$setTextContent(elm, newVnode.vtext); + } + } + // internal variables to be reused per patch() call + var isUpdate = void 0, + hostContentNodes = void 0, + ssrId = void 0; + return function patch(oldVnode, newVnode, isUpdatePatch, hostElementContentNodes, ssrPatchId) { + // patchVNode() is synchronous + // so it is safe to set these variables and internally + // the same patch() call will reference the same data + isUpdate = isUpdatePatch; + hostContentNodes = hostElementContentNodes; + ssrId = ssrPatchId; + // synchronous patch + patchVNode(oldVnode, newVnode); + if (isDef(ssrId)) { + // SSR ONLY: we've been given an SSR id, so the host element + // should be given the ssr id attribute + domApi.$setAttribute(oldVnode.elm, SSR_VNODE_ID, ssrId); + } + // return our new vnode + return newVnode; + }; + } + function invokeDestroy(vnode) { + if (vnode.vlisteners && vnode.assignedListener) { + for (var key in vnode.vlisteners) { + vnode.elm.removeEventListener(key, vnode.vlisteners, false); + } + } + if (isDef(vnode.vchildren)) { + for (var i = 0; i < vnode.vchildren.length; ++i) { + vnode.vchildren[i] && invokeDestroy(vnode.vchildren[i]); + } + } + } + function hasChildNodes(children) { + // SSR ONLY: check if there are any more nested child elements + // if there aren't, this info is useful so the client runtime + // doesn't have to climb down and check so many elements + if (children) { + for (var i = 0; i < children.length; i++) { + if (children[i].vtag !== SLOT_TAG || hasChildNodes(children[i].vchildren)) { + return true; + } + } + } + return false; + } + + function getMode(domApi, config, elm) { + var attrMode = domApi.$getAttribute(elm, 'mode'); + // first let's see if they set the mode directly on the property + if (isDef(elm.mode)) { + return elm.mode; + } + // next let's see if they set the mode on the elements attribute + if (isDef(attrMode)) { + return attrMode; + } + // ok fine, let's just get the values from the config + return config.get('mode', 'md'); + } + + function attachListeners(plt, listeners, elm, instance) { + if (listeners) { + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + if (listener.eventEnabled !== false) { + (elm._listeners = elm._listeners || {})[listener.eventName] = addEventListener(plt, elm, listener.eventName, instance[listener.eventMethodName].bind(instance), listener); + } + } + } + } + function enableListener(plt, elm, instance, eventName, shouldEnable, attachTo) { + if (instance) { + var listenerMeta = plt.getComponentMeta(elm).listenersMeta; + if (listenerMeta) { + var deregisterFns = elm._listeners = elm._listeners || {}; + for (var i = 0; i < listenerMeta.length; i++) { + var listener = listenerMeta[i]; + if (listener.eventName === eventName) { + if (shouldEnable && !deregisterFns[eventName]) { + var attachToEventName = attachTo ? attachTo + ':' + eventName : eventName; + deregisterFns[eventName] = addEventListener(plt, instance.$el, attachToEventName, instance[listener.eventMethodName].bind(instance), listener); + } else if (!shouldEnable && deregisterFns[eventName]) { + deregisterFns[eventName](); + delete elm._listeners[eventName]; + } + return; + } + } + } + } + } + function addEventListener(plt, elm, eventName, userEventListener, opts) { + if (!elm) { + return noop; + } + var splt = eventName.split(':'); + if (splt.length > 1) { + // document:mousemove + // parent:touchend + // body:keyup.enter + elm = getElementReference(elm, splt[0]); + eventName = splt[1]; + } + if (!elm) { + return noop; + } + splt = eventName.split('.'); + var testKeyCode = 0; + if (splt.length > 1) { + // keyup.enter + eventName = splt[0]; + testKeyCode = KEY_CODE_MAP[splt[1]]; + } + var eventListener = function (ev) { + if (testKeyCode > 0 && ev.keyCode !== testKeyCode) { + // we're looking for a specific keycode but this wasn't it + return; + } + // fire the component's event listener callback + userEventListener(ev); + // test if this is the user's interaction + if (isUserInteraction(eventName)) { + // so it's very important to flush the queue now + // so that the app reflects whatever they just did + // basically don't let requestIdleCallback delay the important + plt.queue.flush(); + } + }; + var eventListenerOpts = plt.getEventOptions(opts); + elm.addEventListener(eventName, eventListener, eventListenerOpts); + return function removeListener() { + if (elm) { + elm.removeEventListener(eventName, eventListener, eventListenerOpts); + } + }; + } + function isUserInteraction(eventName) { + for (var i = 0; i < USER_INTERACTIONS.length; i++) { + if (eventName.indexOf(USER_INTERACTIONS[i]) > -1) { + return true; + } + } + return false; + } + var USER_INTERACTIONS = ['touch', 'mouse', 'pointer', 'key', 'focus', 'blur', 'drag']; + function detachListeners(elm) { + var deregisterFns = elm._listeners; + if (deregisterFns) { + var eventNames = Object.keys(deregisterFns); + for (var i = 0; i < eventNames.length; i++) { + deregisterFns[eventNames[i]](); + } + elm._listeners = null; + } + } + + function parseComponentRegistry(cmpRegistryData, registry) { + // tag name will always be upper case + var cmpMeta = { + tagNameMeta: cmpRegistryData[0], + propsMeta: [ + // every component defaults to always have + // the mode and color properties + // but only observe the color attribute + // mode cannot change after the component was created + { propName: 'color', attribName: 'color' }, { propName: 'mode' }] + }; + cmpMeta.moduleId = cmpRegistryData[1]; + // map of the modes w/ bundle id and style data + cmpMeta.styleIds = cmpRegistryData[2] || {}; + // slot + cmpMeta.slotMeta = cmpRegistryData[3]; + if (cmpRegistryData[4]) { + // parse prop meta + for (var i = 0; i < cmpRegistryData[4].length; i++) { + var data = cmpRegistryData[4][i]; + cmpMeta.propsMeta.push({ + propName: data[0], + attribName: data[1] === ATTR_LOWER_CASE ? data[0].toLowerCase() : toDashCase(data[0]), + propType: data[2], + isStateful: !!data[3] + }); + } + } + // bundle load priority + cmpMeta.loadPriority = cmpRegistryData[5]; + return registry[cmpMeta.tagNameMeta] = cmpMeta; + } + function parseComponentMeta(registry, moduleImports, cmpMetaData) { + // tag name will always be upper case + var cmpMeta = registry[cmpMetaData[0]]; + // get the component class which was added to moduleImports + // using the tag as the key on the export object + cmpMeta.componentModuleMeta = moduleImports[cmpMeta.tagNameMeta]; + // host + cmpMeta.hostMeta = cmpMetaData[1]; + // component listeners + if (cmpMetaData[2]) { + cmpMeta.listenersMeta = []; + for (var i = 0; i < cmpMetaData[2].length; i++) { + var data = cmpMetaData[2][i]; + cmpMeta.listenersMeta.push({ + eventMethodName: data[0], + eventName: data[1], + eventCapture: !!data[2], + eventPassive: !!data[3], + eventEnabled: !!data[4] + }); + } + } + // component states + cmpMeta.statesMeta = cmpMetaData[3]; + // component instance prop WILL change methods + cmpMeta.propWillChangeMeta = cmpMetaData[4]; + // component instance prop DID change methods + cmpMeta.propDidChangeMeta = cmpMetaData[5]; + // component methods + cmpMeta.methodsMeta = cmpMetaData[6]; + return cmpMeta; + } + function parsePropertyValue(propType, propValue) { + // ensure this value is of the correct prop type + if (isDef(propValue)) { + if (propType === TYPE_BOOLEAN) { + // per the HTML spec, any string value means it is a boolean "true" value + // but we'll cheat here and say that the string "false" is the boolean false + return propValue === 'false' ? false : propValue === '' || !!propValue; + } + if (propType === TYPE_NUMBER) { + // force it to be a number + return parseFloat(propValue); + } + } + // not sure exactly what type we want + // so no need to change to a different type + return propValue; + } + + function attributeChangedCallback(plt, elm, attribName, oldVal, newVal) { + // only react if the attribute values actually changed + if (oldVal !== newVal) { + // normalize the attribute name w/ lower case + attribName = attribName.toLowerCase(); + // using the known component meta data + // look up to see if we have a property wired up to this attribute name + var prop = plt.getComponentMeta(elm).propsMeta.find(function (p) { + return p.attribName === attribName; + }); + if (prop) { + // cool we've got a prop using this attribute name the value will + // be a string, so let's convert it to the correct type the app wants + // below code is ugly yes, but great minification ;) + elm[prop.propName] = parsePropertyValue(prop.propType, newVal); + } + } + } + + function connectedCallback(plt, elm) { + // do not reconnect if we've already created an instance for this element + if (!elm._hasConnected) { + // first time we've connected + elm._hasConnected = true; + // if somehow this node was reused, ensure we've removed this property + delete elm._hasDestroyed; + // add to the queue to load the bundle + // it's important to have an async tick in here so we can + // ensure the "mode" attribute has been added to the element + // place in high priority since it's not much work and we need + // to know as fast as possible, but still an async tick in between + plt.queue.add(function () { + // get the component meta data about this component + var cmpMeta = plt.getComponentMeta(elm); + // async tick has happened, so all of the child + // nodes and host attributes should now be in the DOM + collectHostContent(plt, elm); + // only collects slot references if this component even has slots + plt.connectHostElement(elm, cmpMeta.slotMeta); + // start loading this component mode's bundle + // if it's already loaded then the callback will be synchronous + plt.loadBundle(cmpMeta, elm, function loadComponentCallback() { + // we've fully loaded the component mode data + // let's queue it up to be rendered next + elm._queueUpdate(); + }); + }, PRIORITY_HIGH); + } + } + function collectHostContent(plt, elm) { + // find the first ancestor host element (if there is one) and register + // this element as one of the actively loading child elements for its ancestor + var ancestorHostElement = elm; + while (ancestorHostElement = getParentElement(ancestorHostElement)) { + // climb up the ancestors looking for the first registered component + if (plt.getComponentMeta(ancestorHostElement)) { + // we found this elements the first ancestor host element + // if the ancestor already loaded then do nothing, it's too late + if (!ancestorHostElement._hasLoaded) { + // keep a reference to this element's ancestor host element + elm._ancestorHostElement = ancestorHostElement; + // ensure there is an array to contain a reference to each of the child elements + // and set this element as one of the ancestor's child elements it should wait on + if (ancestorHostElement._activelyLoadingChildren) { + ancestorHostElement._activelyLoadingChildren.push(elm); + } else { + ancestorHostElement._activelyLoadingChildren = [elm]; + } + } + break; + } + } + } + + function disconnectedCallback(plt, elm) { + // only disconnect if we're not temporarily disconnected + // tmpDisconnected will happen when slot nodes are being relocated + if (!plt.tmpDisconnected) { + // ok, let's officially destroy this thing + // set this to true so that any of our pending async stuff + // doesn't continue since we already decided to destroy this node + elm._hasDestroyed = true; + // call instance Did Unload and destroy instance stuff + // if we've created an instance for this + var instance = elm.$instance; + if (instance) { + // call the user's componentDidUnload if there is one + instance.componentDidUnload && instance.componentDidUnload(); + elm.$instance = instance.$el = instance.__values = instance.__values.__propWillChange = instance.__values.__propDidChange = null; + } + // detatch any event listeners that may have been added + // this will also set _listeners to null if there are any + detachListeners(elm); + // destroy the vnode and child vnodes if they exist + elm._vnode && invokeDestroy(elm._vnode); + if (elm._hostContentNodes) { + // overreacting here just to reduce any memory leak issues + elm._hostContentNodes = elm._hostContentNodes.defaultSlot = elm._hostContentNodes.namedSlots = null; + } + // fuhgeddaboudit + // set it all to null to ensure we forget references + // and reset values incase this node gets reused somehow + // (possible that it got disconnected, but the node was reused) + elm._root = elm._vnode = elm._ancestorHostElement = elm._activelyLoadingChildren = elm._hasConnected = elm._isQueuedForUpdate = elm._hasLoaded = null; + } + } + + function queueUpdate(plt, elm) { + // only run patch if it isn't queued already + if (!elm._isQueuedForUpdate) { + elm._isQueuedForUpdate = true; + // run the patch in the next tick + plt.queue.add(function queueUpdateNextTick() { + // no longer queued + elm._isQueuedForUpdate = false; + // vdom diff and patch the host element for differences + update(plt, elm); + }); + } + } + function update(plt, elm) { + // everything is async, so somehow we could have already disconnected + // this node, so be sure to do nothing if we've already disconnected + if (!elm._hasDestroyed) { + var isInitialLoad = !elm.$instance; + if (isInitialLoad) { + // haven't created a component instance for this host element yet + initInstance(plt, elm); + } + // if this component has a render function, let's fire + // it off and generate a vnode for this + elm._render(!isInitialLoad); + if (isInitialLoad) { + elm._initLoad(); + } + } + } + + function initProxy(plt, elm, instance, cmpMeta) { + var i = 0; + if (cmpMeta.methodsMeta) { + // instances will already have the methods on them + // but you can also expose methods to the proxy element + // using @Method(). Think of like .focus() for an element. + for (; i < cmpMeta.methodsMeta.length; i++) { + initMethod(cmpMeta.methodsMeta[i], elm, instance); + } + } + // used to store instance data internally so that we can add + // getters/setters with the same name, and then do change detection + var values = instance.__values = {}; + if (cmpMeta.propWillChangeMeta) { + // this component has prop WILL change methods, so init the object to store them + values.__propWillChange = {}; + } + if (cmpMeta.propDidChangeMeta) { + // this component has prop DID change methods, so init the object to store them + values.__propDidChange = {}; + } + if (cmpMeta.statesMeta) { + // add getters/setters to instance properties that are not already set as @Prop() + // these are instance properties that should trigger a render update when + // they change. Like @Prop(), except data isn't passed in and is only state data. + // Unlike @Prop, state properties do not add getters/setters to the proxy element + // and initial values are not checked against the proxy element or config + for (i = 0; i < cmpMeta.statesMeta.length; i++) { + initProperty(false, true, '', cmpMeta.statesMeta[i], 0, instance, values, plt, elm, cmpMeta.propWillChangeMeta, cmpMeta.propDidChangeMeta); + } + } + if (cmpMeta.propsMeta) { + for (i = 0; i < cmpMeta.propsMeta.length; i++) { + // add getters/setters for @Prop()s + initProperty(true, cmpMeta.propsMeta[i].isStateful, cmpMeta.propsMeta[i].attribName, cmpMeta.propsMeta[i].propName, cmpMeta.propsMeta[i].propType, instance, instance.__values, plt, elm, cmpMeta.propWillChangeMeta, cmpMeta.propDidChangeMeta); + } + } + } + function initMethod(methodName, elm, instance) { + // add a getter on the dom's element instance + // pointed at the instance's method + Object.defineProperty(elm, methodName, { + configurable: true, + value: instance[methodName].bind(instance) + }); + } + function initProperty(isProp, isStateful, attrName, propName, propType, instance, internalValues, plt, elm, propWillChangeMeta, propDidChangeMeta) { + if (isProp) { + // @Prop() property, so check initial value from the proxy element, instance + // and config, before we create getters/setters on this same property name + var hostAttrValue = elm.getAttribute(attrName); + if (hostAttrValue !== null) { + // looks like we've got an initial value from the attribute + internalValues[propName] = parsePropertyValue(propType, hostAttrValue); + } else if (elm[propName] !== undefined) { + // looks like we've got an initial value on the proxy element + internalValues[propName] = parsePropertyValue(propType, elm[propName]); + } else if (instance[propName] !== undefined) { + // looks like we've got an initial value on the instance already + internalValues[propName] = instance[propName]; + } else if (propName === 'mode') { + // special case for just "mode" property + // which all component automatically get + internalValues[propName] = plt.config.get(propName); + } + } else { + // @State() property, so copy the value directly from the instance + // before we create getters/setters on this same property name + internalValues[propName] = instance[propName]; + } + var i = 0; + if (propWillChangeMeta) { + // there are prop WILL change methods for this component + for (i = 0; i < propWillChangeMeta.length; i++) { + if (propWillChangeMeta[i][PROP_CHANGE_PROP_NAME] === propName) { + // cool, we should watch for changes to this property + // let's bind their watcher function and add it to our list + // of watchers, so any time this property changes we should + // also fire off their @PropWillChange() method + internalValues.__propWillChange[propName] = instance[propWillChangeMeta[i][PROP_CHANGE_METHOD_NAME]].bind(instance); + } + } + } + if (propDidChangeMeta) { + // there are prop DID change methods for this component + for (i = 0; i < propDidChangeMeta.length; i++) { + if (propDidChangeMeta[i][PROP_CHANGE_PROP_NAME] === propName) { + // cool, we should watch for changes to this property + // let's bind their watcher function and add it to our list + // of watchers, so any time this property changes we should + // also fire off their @PropDidChange() method + internalValues.__propDidChange[propName] = instance[propDidChangeMeta[i][PROP_CHANGE_METHOD_NAME]].bind(instance); + } + } + } + function getValue() { + // get the property value directly from our internal values + return internalValues[propName]; + } + function setValue(newVal) { + // check our new property value against our internal value + var oldVal = internalValues[propName]; + // TODO: account for Arrays/Objects + if (newVal !== oldVal) { + // gadzooks! the property's value has changed!! + if (internalValues.__propWillChange && internalValues.__propWillChange[propName]) { + // this instance is watching for when this property WILL change + internalValues.__propWillChange[propName](newVal, oldVal); + } + // set our new value! + internalValues[propName] = newVal; + if (internalValues.__propDidChange && internalValues.__propDidChange[propName]) { + // this instance is watching for when this property DID change + internalValues.__propDidChange[propName](newVal, oldVal); + } + // looks like this value actually changed, we've got work to do! + // queue that we need to do an update, don't worry + // about queuing up millions cuz this function + // ensures it only runs once + queueUpdate(plt, elm); + } + } + if (isProp) { + // dom's element instance + // only place getters/setters on element for props + // state getters/setters should not be assigned to the element + Object.defineProperty(elm, propName, { + configurable: true, + get: getValue, + set: setValue + }); + } + // user's component class instance + var instancePropDesc = { + configurable: true, + get: getValue + }; + if (isStateful) { + // this is a state property, or it's a prop that can keep state + // for props it's mainly used for props on inputs like "checked" + instancePropDesc.set = setValue; + } else { + // dev mode warning only + instancePropDesc.set = function invalidSetValue() { + // this is not a stateful prop + // so do not update the instance or host element + console.warn('@Prop() "' + propName + '" on "' + elm.tagName.toLowerCase() + '" cannot be modified.'); + }; + } + // define on component class instance + Object.defineProperty(instance, propName, instancePropDesc); + } + + function createThemedClasses(mode, color, classList) { + var allClassObj = {}; + return classList.split(' ').reduce(function (classObj, classString) { + classObj[classString] = true; + if (mode) { + classObj[classString + '-' + mode] = true; + if (color) { + classObj[classString + '-' + color] = true; + classObj[classString + '-' + mode + '-' + color] = true; + } + } + return classObj; + }, allClassObj); + } + + function render(plt, elm, isUpdateRender) { + var instance = elm.$instance; + var cmpMeta = plt.getComponentMeta(elm); + if (isUpdateRender) { + // fire off the user's componentWillUpdate method (if one was provided) + // componentWillUpdate runs BEFORE render() has been called + // but only BEFORE an UPDATE and not before the intial render + instance.componentWillUpdate && instance.componentWillUpdate(); + } + // if this component has a render function, let's fire + // it off and generate the child vnodes for this host element + // note that we do not create the host element cuz it already exists + var vnodeChildren = instance.render && instance.render(); + var vnodeHostData = instance.hostData && instance.hostData(); + var hostMeta = cmpMeta.hostMeta; + if (vnodeChildren || vnodeHostData || hostMeta) { + if (hostMeta) { + vnodeHostData = Object.keys(hostMeta).reduce(function (hostData, key) { + switch (key) { + case 'theme': + hostData['class'] = hostData['class'] || {}; + hostData['class'] = Object.assign(hostData['class'], createThemedClasses(instance.mode, instance.color, hostMeta['theme'])); + } + return hostData; + }, vnodeHostData || {}); + } + // looks like we've got child nodes to render into this host element + // or we need to update the css class/attrs on the host element + // if we haven't already created a vnode, then we give the renderer the actual element + // if this is a re-render, then give the renderer the last vnode we already created + var oldVNode = elm._vnode || new VNode(); + oldVNode.elm = elm; + // normalize host data keys to abbr. key + if (vnodeHostData) { + vnodeHostData.a = vnodeHostData['attrs']; + vnodeHostData.c = vnodeHostData['class']; + vnodeHostData.s = vnodeHostData['style']; + vnodeHostData.o = vnodeHostData['on']; + } + // each patch always gets a new vnode + // the host element itself isn't patched because it already exists + // kick off the actual render and any DOM updates + elm._vnode = plt.render(oldVNode, h(null, vnodeHostData, vnodeChildren), isUpdateRender, elm._hostContentNodes); + } + if (isUpdateRender) { + // fire off the user's componentDidUpdate method (if one was provided) + // componentDidUpdate runs AFTER render() has been called + // but only AFTER an UPDATE and not after the intial render + instance.componentDidUpdate && instance.componentDidUpdate(); + } + } + + function initHostConstructor(plt, HostElementConstructor) { + Object.defineProperties(HostElementConstructor, { + 'connectedCallback': { + value: function () { + connectedCallback(plt, this); + } + }, + 'attributeChangedCallback': { + value: function (attribName, oldVal, newVal) { + attributeChangedCallback(plt, this, attribName, oldVal, newVal); + } + }, + 'disconnectedCallback': { + value: function () { + disconnectedCallback(plt, this); + } + }, + _queueUpdate: { + value: function () { + queueUpdate(plt, this); + } + }, + _initLoad: { + value: function () { + initLoad(plt, this); + } + }, + _render: { + value: function (isInitialRender) { + render(plt, this, isInitialRender); + } + } + }); + } + function initInstance(plt, elm) { + // using the component's class, let's create a new instance + var cmpMeta = plt.getComponentMeta(elm); + var instance = elm.$instance = new cmpMeta.componentModuleMeta(); + // let's automatically add a reference to the host element on the instance + instance.$el = elm; + // so we've got an host element now, and a actual instance + // let's wire them up together with getter/settings + // the setters are use for change detection and knowing when to re-render + initProxy(plt, elm, instance, cmpMeta); + // fire off the user's componentWillLoad method (if one was provided) + // componentWillLoad only runs ONCE, after instance.$el has been assigned + // the host element, but BEFORE render() has been called + instance.componentWillLoad && instance.componentWillLoad(); + } + function initLoad(plt, elm) { + var instance = elm.$instance; + // it's possible that we've already decided to destroy this element + // check if this element has any actively loading child elements + if (instance && !elm._hasDestroyed && (!elm._activelyLoadingChildren || !elm._activelyLoadingChildren.length)) { + // cool, so at this point this element isn't already being destroyed + // and it does not have any child elements that are still loading + // ensure we remove any child references cuz it doesn't matter at this point + elm._activelyLoadingChildren = null; + // the element is within the DOM now, so let's attach the event listeners + attachListeners(plt, plt.getComponentMeta(elm).listenersMeta, elm, instance); + // sweet, this particular element is good to go + // all of this element's children have loaded (if any) + elm._hasLoaded = true; + // fire off the user's componentDidLoad method (if one was provided) + // componentDidLoad only runs ONCE, after instance.$el has been assigned + // the host element, and AFTER render() has been called + instance.componentDidLoad && instance.componentDidLoad(); + // add the css class that this element has officially hydrated + elm.classList.add(HYDRATED_CSS); + // ( •_•) + // ( •_•)>⌐■-■ + // (⌐■_■) + // load events fire from bottom to top, the deepest elements first then bubbles up + // if this element did have an ancestor host element + if (elm._ancestorHostElement) { + // ok so this element already has a known ancestor host element + // let's make sure we remove this element from its ancestor's + // known list of child elements which are actively loading + var ancestorsActivelyLoadingChildren = elm._ancestorHostElement._activelyLoadingChildren; + var index = ancestorsActivelyLoadingChildren && ancestorsActivelyLoadingChildren.indexOf(elm); + if (index > -1) { + // yup, this element is in the list of child elements to wait on + // remove it so we can work to get the length down to 0 + ancestorsActivelyLoadingChildren.splice(index, 1); + } + // the ancestor's initLoad method will do the actual checks + // to see if the ancestor is actually loaded or not + // then let's call the ancestor's initLoad method if there's no length + // (which actually ends up as this method again but for the ancestor) + !ancestorsActivelyLoadingChildren.length && elm._ancestorHostElement._initLoad(); + // fuhgeddaboudit, no need to keep a reference after this element loaded + delete elm._ancestorHostElement; + } + } + } + + function initGlobal(Gbl, win, domApi, plt, config, domCtrl) { + if (typeof win.CustomEvent !== 'function') { + // CustomEvent polyfill + var CustomEvent = function (event, params) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = domApi.$createEvent(); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + }; + + CustomEvent.prototype = win.Event.prototype; + win.CustomEvent = CustomEvent; + } + // properties that can stay hidden from public use + var controllers = Gbl.controllers = {}; + Gbl.isClient = true; + Gbl.isServer = false; + // properties to be exposed to public + // in actuality it's the exact same object + Gbl.config = config; + Gbl.dom = domCtrl; + Gbl.emit = function (instance, eventName, data) { + data = data || {}; + if (data.bubbles === undefined) { + data.bubbles = true; + } + if (data.composed === undefined) { + // https://developers.google.com/web/fundamentals/getting-started/primers/shadowdom#events + data.composed = true; + } + if (Gbl.eventNameFn) { + eventName = Gbl.eventNameFn(eventName); + } + instance && instance.$el && instance.$el.dispatchEvent(new win.CustomEvent(eventName, data)); + }; + Gbl.listener = { + enable: function (instance, eventName, shouldEnable, attachTo) { + enableListener(plt, instance.$el, instance, eventName, shouldEnable, attachTo); + }, + add: function (elm, eventName, cb, opts) { + return addEventListener(plt, elm, eventName, cb, opts); + } + }; + // used to store the queued controller promises to + // be resolved when the controller finishes loading + var queuedCtrlResolves = {}; + Gbl.controller = function (ctrlName, opts) { + // loading a controller is always async so return a promise + return new Promise(function (resolve) { + // see if we already have the controller loaded + var ctrl = controllers[ctrlName]; + if (ctrl) { + // we've already loaded this controller + resolveController(ctrl, resolve, opts); + } else { + // oh noz! we haven't already loaded this controller yet! + var ctrlResolveQueue = queuedCtrlResolves[ctrlName]; + if (ctrlResolveQueue) { + // cool we've already "started" to load the controller + // but it hasn't finished loading yet, so let's add + // this one also to the queue of to-be resolved promises + ctrlResolveQueue.push(resolve, opts); + } else { + // looks like we haven't even started the request + // yet lets add the component to the DOM and create + // a queue for this controller + queuedCtrlResolves[ctrlName] = [resolve, opts]; + domApi.$appendChild(domApi.$body, domApi.$createElement('ion-' + ctrlName + '-controller')); + } + } + }); + }; + Gbl.loadController = function (ctrlName, ctrl) { + // this method is called when the singleton + // instance of our controller initially loads + // add this controller instance to our map of controller singletons + controllers[ctrlName] = ctrl; + // check for to-be resolved controller promises + var pendingCtrlResolves = queuedCtrlResolves[ctrlName]; + if (pendingCtrlResolves) { + for (var i = 0; i < pendingCtrlResolves.length; i += 2) { + // first arg is the original promise's resolve + // which still needs to be resolved + // second arg was the originally passed in options + resolveController(ctrl, pendingCtrlResolves[i], pendingCtrlResolves[i + 1]); + } + // all good, go ahead and remove from the queue + delete queuedCtrlResolves[ctrlName]; + } + }; + function resolveController(ctrl, resolve, opts) { + if (opts) { + // if the call had options passed in then + // it should run the controller's load() method + // and let the controller's load() do the resolve + // which then will resolve the user's promise + ctrl.load(opts).then(resolve); + } else { + // no options passed in, so resolve with + // the actual controller instance + resolve(ctrl); + } + } + return Gbl; + } + + function createPlatformClient(Gbl, win, domApi, config, domCtrl, queue, staticDir) { + var registry = { 'HTML': {} }; + var moduleImports = {}; + var moduleCallbacks = {}; + var loadedModules = {}; + var pendingModuleRequests = {}; + // create the platform api which will be passed around for external use + var plt = { + registerComponents: registerComponents, + defineComponent: defineComponent, + getComponentMeta: getComponentMeta, + loadBundle: loadBundle, + config: config, + queue: queue, + connectHostElement: connectHostElement, + getEventOptions: getEventOptions + }; + // create the renderer that will be used + plt.render = createRenderer(plt, domApi); + // create the global which will be injected into the user's instances + var injectedGlobal = initGlobal(Gbl, win, domApi, plt, config, domCtrl); + // setup the root element which is the mighty tag + // the has the final say of when the app has loaded + var rootElm = domApi.$documentElement; + rootElm._activelyLoadingChildren = []; + rootElm._initLoad = function appLoadedCallback() { + // this will fire when all components have finished loaded + rootElm._hasLoaded = true; + }; + // if the HTML was generated from SSR + // then let's walk the tree and generate vnodes out of the data + createVNodesFromSsr(domApi, rootElm); + function getComponentMeta(elm) { + // get component meta using the element + // important that the registry has upper case tag names + return registry[elm.tagName]; + } + function connectHostElement(elm, slotMeta) { + // host element has been connected to the DOM + if (!domApi.$getAttribute(elm, SSR_VNODE_ID)) { + // this host element was NOT created with SSR + // let's pick out the inner content for slot projection + assignHostContentSlots(domApi, elm, slotMeta); + } + } + function registerComponents(components) { + // this is the part that just registers the minimal amount of data + // it's basically a map of the component tag name to its associated external bundles + return (components || []).map(function (data) { + return parseComponentRegistry(data, registry); + }); + } + function defineComponent(cmpMeta, HostElementConstructor) { + // initialize the properties on the component module prototype + initHostConstructor(plt, HostElementConstructor.prototype); + // add which attributes should be observed + HostElementConstructor.observedAttributes = cmpMeta.propsMeta.filter(function (p) { + return p.attribName; + }).map(function (p) { + return p.attribName; + }); + // define the custom element + win.customElements.define(cmpMeta.tagNameMeta.toLowerCase(), HostElementConstructor); + } + Gbl.defineComponents = function defineComponents(moduleId, importFn) { + var args = arguments; + // import component function + // inject globals + importFn(moduleImports, h, t, injectedGlobal); + for (var i = 2; i < args.length; i++) { + parseComponentMeta(registry, moduleImports, args[i]); + } + // fire off all the callbacks waiting on this module to load + var callbacks = moduleCallbacks[moduleId]; + if (callbacks) { + for (i = 0; i < callbacks.length; i++) { + callbacks[i](); + } + delete moduleCallbacks[moduleId]; + } + // remember that we've already loaded this module + loadedModules[moduleId] = true; + }; + function loadBundle(cmpMeta, elm, cb) { + var moduleId = cmpMeta.moduleId; + if (loadedModules[moduleId]) { + // sweet, we've already loaded this module + cb(); + } else { + // never seen this module before, let's start the request + // and add it to the callbacks to fire when it has loaded + if (moduleCallbacks[moduleId]) { + moduleCallbacks[moduleId].push(cb); + } else { + moduleCallbacks[moduleId] = [cb]; + } + // create the url we'll be requesting + var url = getBundlePath(moduleId + '.js'); + if (!pendingModuleRequests[url]) { + // not already actively requesting this url + // remember that we're now actively requesting this url + pendingModuleRequests[url] = true; + // let's kick off the module request + jsonp(url); + } + // we also need to load the css file in the head + var styleId = cmpMeta.styleIds[getMode(domApi, config, elm)] || cmpMeta.styleIds.$; + if (styleId && !loadedModules[styleId]) { + // this style hasn't been added to the head yet + loadedModules[styleId] = true; + // append this link element to the head, which starts the request for the file + var linkElm = domApi.$createElement('link'); + linkElm.href = getBundlePath(styleId + '.css'); + linkElm.rel = 'stylesheet'; + domApi.$insertBefore(domApi.$head, linkElm, domApi.$head.firstChild); + } + } + } + function getBundlePath(fileName) { + return '' + staticDir + fileName; + } + function jsonp(url) { + // create a sript element to add to the document.head + var scriptElm = domApi.$createElement('script'); + scriptElm.charset = 'utf-8'; + scriptElm.async = true; + scriptElm.src = url; + // create a fallback timeout if something goes wrong + var tmrId = setTimeout(onScriptComplete, 120000); + function onScriptComplete() { + clearTimeout(tmrId); + scriptElm.onerror = scriptElm.onload = null; + domApi.$removeChild(scriptElm.parentNode, scriptElm); + // remove from our list of active requests + delete pendingModuleRequests[url]; + } + // add script completed listener to this script element + scriptElm.onerror = scriptElm.onload = onScriptComplete; + // inject a script tag in the head + // kick off the actual request + domApi.$appendChild(domApi.$head, scriptElm); + } + // test if this browser supports event options or not + var supportsEventOptions = false; + try { + win.addEventListener('evopt', null, Object.defineProperty({}, 'passive', { + get: function () { + supportsEventOptions = true; + } + })); + } catch (e) {} + function getEventOptions(opts) { + return supportsEventOptions ? { + 'capture': !!(opts && opts.capture), + 'passive': !(opts && opts.passive === false) + } : !!(opts && opts.capture); + } + return plt; + } + + function createQueueClient(domCtrl) { + var now = domCtrl.now; + var raf = domCtrl.raf; + var highPromise = Promise.resolve(); + var highCallbacks = []; + var mediumCallbacks = []; + var lowCallbacks = []; + var resolvePending = false; + var ricPending = false; + function doHighPriority() { + // holy geez we need to get this stuff done and fast + // all high priority callbacks should be fired off immediately + while (highCallbacks.length > 0) { + highCallbacks.shift()(); + } + resolvePending = false; + } + function doWork() { + var start = now(); + // always run all of the high priority work if there is any + doHighPriority(); + while (mediumCallbacks.length > 0 && now() - start < 40) { + mediumCallbacks.shift()(); + } + if (mediumCallbacks.length === 0) { + // we successfully drained the medium queue or the medium queue is empty + // so now let's drain the low queue with our remaining time + while (lowCallbacks.length > 0 && now() - start < 40) { + lowCallbacks.shift()(); + } + } + // check to see if we still have work to do + if (ricPending = mediumCallbacks.length > 0 || lowCallbacks.length > 0) { + // everyone just settle down now + // we already don't have time to do anything in this callback + // let's throw the next one in a requestAnimationFrame + // so we can just simmer down for a bit + raf(flush); + } + } + function flush() { + // always run all of the high priority work if there is any + doHighPriority(); + // always force a bunch of medium callbacks to run, but still have + // a throttle on how many can run in a certain time + var start = now(); + while (mediumCallbacks.length > 0 && now() - start < 4) { + mediumCallbacks.shift()(); + } + if (ricPending = mediumCallbacks.length > 0 || lowCallbacks.length > 0) { + // still more to do yet, but we've run out of time + // let's let this thing cool off and try again in the next ric + raf(doWork); + } + } + function add(cb, priority) { + if (priority === PRIORITY_HIGH) { + // uses Promise.resolve() for next tick + highCallbacks.push(cb); + if (!resolvePending) { + // not already pending work to do, so let's tee it up + resolvePending = true; + highPromise.then(doHighPriority); + } + } else { + if (priority === PRIORITY_LOW) { + lowCallbacks.push(cb); + } else { + // defaults to medium priority + // uses requestIdleCallback + mediumCallbacks.push(cb); + } + if (!ricPending) { + // not already pending work to do, so let's tee it up + ricPending = true; + raf(doWork); + } + } + } + return { + add: add, + flush: flush + }; + } + + function detectPlatforms(url, userAgent, platforms, defaultPlatform) { + // bracket notation to ensure they're not property renamed + var validPlatforms = platforms.filter(function (p) { + return p['isMatch'] && p['isMatch'](url, userAgent); + }); + if (!validPlatforms.length) { + validPlatforms = platforms.filter(function (p) { + return p['name'] === defaultPlatform; + }); + } + return validPlatforms; + } + function isPlatformMatch(url, userAgent, platformName, userAgentAtLeastHas, userAgentMustNotHave) { + var queryValue = queryParam(url, 'ionicplatform'); + if (queryValue) { + return queryValue === platformName; + } + if (userAgent) { + userAgent = userAgent.toLowerCase(); + for (var i = 0; i < userAgentAtLeastHas.length; i++) { + if (userAgent.indexOf(userAgentAtLeastHas[i]) > -1) { + for (var j = 0; j < userAgentMustNotHave.length; j++) { + if (userAgent.indexOf(userAgentMustNotHave[j]) > -1) { + return false; + } + } + return true; + } + } + } + return false; + } + function queryParam(url, key) { + key = key.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + key + '=([^&#]*)'); + var results = regex.exec(url); + return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null; + } + + // order from most specifc to least specific + var PLATFORM_CONFIGS = [{ + 'name': 'ipad', + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'ipad', ['ipad'], ['windows phone']); + } + }, { + 'name': 'iphone', + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'iphone', ['iphone'], ['windows phone']); + } + }, { + 'name': 'ios', + 'settings': { + 'mode': 'ios' + }, + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'ios', ['iphone', 'ipad', 'ipod'], ['windows phone']); + } + }, { + 'name': 'android', + 'settings': { + 'activator': 'ripple', + 'mode': 'md' + }, + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'android', ['android', 'silk'], ['windows phone']); + } + }, { + 'name': 'windows', + 'settings': { + 'mode': 'wp' + }, + 'isMatch': function (url, userAgent) { + return isPlatformMatch(url, userAgent, 'windows', ['windows phone'], []); + } + }, { + 'name': 'core', + 'settings': { + 'mode': 'md' + } + }]; + + var Gbl = window[globalNamespace] = window[globalNamespace] || {}; + var domCtrl = createDomControllerClient(window); + var plt = createPlatformClient(Gbl, window, createDomApi(document), createConfigController(Gbl.config, detectPlatforms(window.location.href, window.navigator.userAgent, PLATFORM_CONFIGS, 'core')), domCtrl, createQueueClient(domCtrl), Gbl.staticDir); + plt.registerComponents(Gbl.components).forEach(function (cmpMeta) { + plt.defineComponent(cmpMeta, class HostElement extends HTMLElement {}); + }); +})(window, document, "App"); \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.css b/packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.css new file mode 100644 index 0000000000..eceeaa3444 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.css @@ -0,0 +1,108 @@ +/*! Built with http://stenciljs.com */ + +ion-label { + white-space: normal !important; +} + +ion-toolbar ion-button.header-button button { + color: white !important; +} + +.points { + color: #327eff; + font-weight: bold; + width: 45px; +} + +.header-icon { + color: white; + font-size: 3.4rem !important; + margin-left: 15px !important; + width: 3.4rem; +} + +.page-number { + line-height: 3; +} + +.pager { + text-align: center; +} + +ion-footer ion-toolbar div.toolbar-background { + background: white; +} + +ion-footer { + height: 48px; +} + +ion-footer ion-toolbar { + min-height: 48px !important; +} + +.comments-text { + color: #717883; + cursor: pointer; +} + +.list-header a { + color: #202939; + text-decoration: none; +} + +.item-content { + padding-top: 5px; + padding-bottom: 5px; +} + +.comments-title { + line-height: 2.1; +} + +.header-button { + opacity: 0.6; + width: 7rem; +} + +.header-button-selected { + opacity: 1; +} + +.header-button-selected button { + font-weight: bold; +} + +.tabs-bar { + display: flex; +} + +.no-back button { + opacity: 0.3; +} + +.yes-back button { + opacity: 1; + color: #327eff !important; +} + +.close-button ion-icon { + color: white; + font-size: 2.3rem; + margin-left: 15px; +} + +.ionic-icon { + height: 40px; + float: left; + margin-left: 10px; +} + + + +comments-list.hydrated, +comments-page.hydrated, +news-container.hydrated, +news-list.hydrated { + visibility: inherit; +} \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.js b/packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.js new file mode 100644 index 0000000000..740f994c39 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/comments-list.comments-page.news-container.news-li.js @@ -0,0 +1,310 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'comments-list.comments-page.news-container.news-li', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +var CommentsList = (function () { + function CommentsList() { + } + CommentsList.prototype.render = function () { + var items = this.type.map(function (comment) { + return (h("ion-item", 0, + h("ion-label", 0, + h("h2", 0, "Posted by " + comment.user + " " + comment.time_ago), + h("div", { "p": { "innerHTML": comment.content } })))); + }); + return (h("ion-list", 0, items)); + }; + return CommentsList; +}()); + +var CommentsPage = (function () { + function CommentsPage() { + } + CommentsPage.prototype.close = function () { + Ionic.emit(this, 'ionDismiss'); + }; + CommentsPage.prototype.render = function () { + return [ + h("ion-header", 0, + h("ion-toolbar", { "a": { "color": 'primary' } }, + h("ion-button", { "c": { "close-button": true }, "o": { "click": this.close.bind(this) }, "a": { "slot": 'start' }, "p": { "clear": true } }, + h("ion-icon", { "s": { "color": 'white' }, "a": { "slot": 'icon-only', "name": 'close' } })), + h("ion-title", { "c": { "comments-title": true }, "a": { "slot": 'end' } }, t("Comments")))), + h("ion-content", 0, + h("comments-list", { "p": { "type": this.comments } })) + ]; + }; + return CommentsPage; +}()); + +var NewsContainer = (function () { + function NewsContainer() { + this.stories = []; + this.apiRootUrl = 'https://node-hnapi.herokuapp.com'; + this.page = 1; + this.secondSelectedClass = false; + this.thirdSelectedClass = false; + this.fourthSelectedClass = false; + } + NewsContainer.prototype["componentWillLoad"] = function () { + var _this = this; + if (Ionic.isServer) + return; + this.firstSelectedClass = true; + // call to firebase function for first view + this.fakeFetch('https://us-central1-corehacker-10883.cloudfunctions.net/fetchNews').then(function (data) { + _this.stories = data; + _this.pageType = 'news'; + }); + }; + NewsContainer.prototype.fakeFetch = function (url) { + return new Promise(function (resolve, reject) { + var request = new XMLHttpRequest(); + request.addEventListener('load', function () { + resolve(JSON.parse(this.responseText)); + }); + request.addEventListener('error', function () { + reject("error: " + this.statusText + " / " + this.status); + }); + request.open('GET', url, true); + request.send(); + }); + }; + NewsContainer.prototype.getStories = function (type) { + var _this = this; + if (Ionic.isServer) + return; + // reset page number + this.page = 1; + // this is definitely not the best solution + // working on something more elegant, but this + // gets the job done for the moment + switch (type) { + case 'news': + this.firstSelectedClass = true; + this.secondSelectedClass = false; + this.thirdSelectedClass = false; + this.fourthSelectedClass = false; + break; + case 'show': + this.secondSelectedClass = true; + this.firstSelectedClass = false; + this.thirdSelectedClass = false; + this.fourthSelectedClass = false; + break; + case 'jobs': + this.thirdSelectedClass = true; + this.firstSelectedClass = false; + this.fourthSelectedClass = false; + this.secondSelectedClass = false; + break; + case 'ask': + this.fourthSelectedClass = true; + this.thirdSelectedClass = false; + this.secondSelectedClass = false; + this.firstSelectedClass = false; + break; + } + Ionic.controller('loading', { content: "fetching " + type + " articles..." }).then(function (loading) { + loading.present().then(function () { + _this.fakeFetch(_this.apiRootUrl + "/" + type + "?page=1").then(function (data) { + _this.stories = data; + loading.dismiss(); + }); + _this.pageType = type; + }); + }); + }; + NewsContainer.prototype.previous = function () { + var _this = this; + if (this.page > 1) { + Ionic.controller('loading', { content: "fetching articles..." }).then(function (loading) { + loading.present().then(function () { + _this.page = _this.page--; + console.log(_this.page--); + _this.fakeFetch(_this.apiRootUrl + "/" + _this.pageType + "?page=" + _this.page).then(function (data) { + _this.stories = data; + loading.dismiss(); + }); + }); + }); + } + else { + window.navigator.vibrate(200); + } + }; + NewsContainer.prototype.next = function () { + var _this = this; + Ionic.controller('loading', { content: "fetching articles..." }).then(function (loading) { + loading.present().then(function () { + _this.page = _this.page++; + console.log(_this.page++); + _this.fakeFetch(_this.apiRootUrl + "/" + _this.pageType + "?page=" + _this.page).then(function (data) { + if (data.length !== 0) { + _this.stories = data; + } + loading.dismiss(); + }); + }); + }); + }; + NewsContainer.prototype["componentWillUpdate"] = function () { + this.prevClass = this.page === 1 ? { 'no-back': true } : { 'yes-back': true }; + }; + NewsContainer.prototype.render = function () { + var _this = this; + console.log('rendering'); + return [ + h("ion-header", { "p": { "mdHeight": '56px', "iosHeight": '61px' } }, + h("ion-toolbar", { "a": { "color": 'primary' } }, + h("img", { "c": { "ionic-icon": true }, "a": { "src": 'ionic.svg', "alt": 'ionic' } }), + h("div", { "c": { "tabs-bar": true } }, + h("ion-button", { "c": { "header-button": true, "first-button": true, "header-button-selected": this.firstSelectedClass }, "o": { "click": function () { return _this.getStories('news'); } }, "p": { "clear": true } }, t("News")), + h("ion-button", { "c": { "header-button": true, "header-button-selected": this.secondSelectedClass }, "o": { "click": function () { return _this.getStories('show'); } }, "p": { "clear": true } }, t("Show")), + h("ion-button", { "c": { "header-button": true, "header-button-selected": this.thirdSelectedClass }, "o": { "click": function () { return _this.getStories('jobs'); } }, "p": { "clear": true } }, t("Jobs")), + h("ion-button", { "c": { "header-button": true, "header-button-selected": this.fourthSelectedClass }, "o": { "click": function () { return _this.getStories('ask'); } }, "p": { "clear": true } }, t("Ask"))))), + h("ion-content", 0, + h("news-list", { "p": { "type": this.stories } })), + h("ion-footer", 0, + h("ion-toolbar", { "c": { "pager": true } }, + h("ion-buttons", { "a": { "slot": 'start' } }, + h("ion-button", { "c": this.prevClass, "o": { "click": function () { return _this.previous(); } }, "p": { "clear": true } }, t("prev"))), + h("span", { "c": { "page-number": true } }, t("page "), + this.page), + h("ion-buttons", { "a": { "slot": 'end' } }, + h("ion-button", { "o": { "click": function () { return _this.next(); } }, "a": { "color": 'primary' }, "p": { "clear": true } }, t("next"))))) + ]; + }; + return NewsContainer; +}()); + +var NewsList = (function () { + function NewsList() { + this.apiRootUrl = 'https://node-hnapi.herokuapp.com'; + this.fakeData = []; + } + NewsList.prototype.fakeFetch = function (url) { + return new Promise(function (resolve, reject) { + var request = new XMLHttpRequest(); + request.addEventListener('load', function () { + resolve(JSON.parse(this.responseText)); + }); + request.addEventListener('error', function () { + reject("error: " + this.statusText + " / " + this.status); + }); + request.open('GET', url, true); + request.send(); + }); + }; + NewsList.prototype.comments = function (story) { + var _this = this; + if (Ionic.isServer) + return; + Ionic.controller('loading', { content: 'fetching comments...' }).then(function (loading) { + loading.present(); + _this.fakeFetch(_this.apiRootUrl + "/item/" + story.id).then(function (data) { + setTimeout(function () { + loading.dismiss().then(function () { + Ionic.controller('modal', { component: 'comments-page', componentProps: { comments: data.comments, storyId: story.id } }).then(function (modal) { + console.log('modal created'); + modal.present().then(function () { + console.log('modal finished transitioning in, commments: ', modal.componentProps.comments); + }); + }); + }); + }, 300); + }); + }); + }; + NewsList.prototype.render = function () { + var _this = this; + if (this.type.length === 0) { + return (h("ion-list", 0, Array.from(Array(10)).map(function () { + return h("ion-item", 0, + h("div", { "c": { "points": true }, "a": { "slot": 'start' } }, + h("ion-skeleton-text", { "a": { "width": '20px' } })), + h("ion-label", 0, + h("h2", { "c": { "list-header": true } }, + h("ion-skeleton-text", { "a": { "width": '90%' } }), + h("ion-skeleton-text", { "a": { "width": '85%' } })), + h("h3", { "c": { "comments-text": true } }, + h("ion-skeleton-text", { "a": { "width": '60%' } })))); + }))); + } + return (h("ion-list", 0, this.type.map(function (story) { return (h("ion-item", 0, + h("div", { "c": { "points": true }, "a": { "slot": 'start' } }, story.points || 0), + h("ion-label", 0, + h("h2", { "c": { "list-header": true } }, + h("a", { "p": { "href": story.url } }, story.title)), + h("h3", { "c": { "comments-text": true }, "o": { "click": function () { return _this.comments(story); } } }, t("Posted by "), + story.user, t(" "), + story.time_ago, t(" | "), + story.comments_count, t(" comments"))))); }))); + }; + return NewsList; +}()); + +exports['COMMENTS-LIST'] = CommentsList; +exports['COMMENTS-PAGE'] = CommentsPage; +exports['NEWS-CONTAINER'] = NewsContainer; +exports['NEWS-LIST'] = NewsList; +}, + + +/***************** comments-list *****************/ +[ +/** comments-list: [0] tag **/ +'COMMENTS-LIST', + +/** comments-list: [1] host **/ +{} + +], + +/***************** comments-page *****************/ +[ +/** comments-page: [0] tag **/ +'COMMENTS-PAGE', + +/** comments-page: [1] host **/ +{} + +], + +/***************** news-container *****************/ +[ +/** news-container: [0] tag **/ +'NEWS-CONTAINER', + +/** news-container: [1] host **/ +{}, + +/** news-container: [2] listeners **/ +0 /* no listeners */, + +/** news-container: [3] states **/ +['firstSelectedClass', 'fourthSelectedClass', 'secondSelectedClass', 'stories', 'thirdSelectedClass'] + +], + +/***************** news-list *****************/ +[ +/** news-list: [0] tag **/ +'NEWS-LIST', + +/** news-list: [1] host **/ +{}, + +/** news-list: [2] listeners **/ +0 /* no listeners */, + +/** news-list: [3] states **/ +['fakeData'] + +] +) \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-app.ion-content.ion-footer.ion-header.ion-navb.js b/packages/core-hn-demo/www/build/app/ion-app.ion-content.ion-footer.ion-header.ion-navb.js new file mode 100644 index 0000000000..92870ebf85 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-app.ion-content.ion-footer.ion-header.ion-navb.js @@ -0,0 +1,339 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'ion-app.ion-content.ion-footer.ion-header.ion-navb', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +var App = (function () { + function App() { + } + App.prototype.render = function () { + return h(0, 0); + }; + return App; +}()); + +function createThemedClasses(mode, color, classList) { + var allClassObj = {}; + return classList.split(' ') + .reduce(function (classObj, classString) { + classObj[classString] = true; + if (mode) { + classObj[classString + "-" + mode] = true; + if (color) { + classObj[classString + "-" + color] = true; + classObj[classString + "-" + mode + "-" + color] = true; + } + } + return classObj; + }, allClassObj); +} + +function getParentElement(elm) { + if (elm.parentElement) { + // normal element with a parent element + return elm.parentElement; + } + if (elm.parentNode && elm.parentNode.host) { + // shadow dom's document fragment + return elm.parentNode.host; + } + return null; +} + +var Content = (function () { + function Content() { + this.$scrollDetail = {}; + /** + * @input {boolean} If true, the content will scroll behind the headers + * and footers. This effect can easily be seen by setting the toolbar + * to transparent. + */ + this.fullscreen = false; + } + Content.prototype["componentDidunload"] = function () { + this.$fixed = this.$scroll = this.$siblingFooter = this.$siblingHeader = this.$scrollDetail = null; + }; + Content.prototype.enableJsScroll = function () { + this.$scroll.jsScroll = true; + }; + /** + * Scroll to the top of the content component. + * + * @param {number} [duration] Duration of the scroll animation in milliseconds. Defaults to `300`. + * @returns {Promise} Returns a promise which is resolved when the scroll has completed. + */ + Content.prototype.scrollToTop = function (duration) { + if (duration === void 0) { duration = 300; } + return this.$scroll.scrollToTop(duration); + }; + /** + * Scroll to the bottom of the content component. + * + * @param {number} [duration] Duration of the scroll animation in milliseconds. Defaults to `300`. + * @returns {Promise} Returns a promise which is resolved when the scroll has completed. + */ + Content.prototype.scrollToBottom = function (duration) { + if (duration === void 0) { duration = 300; } + return this.$scroll.scrollToBottom(duration); + }; + Content.prototype.render = function () { + var props = {}; + var scrollStyle = {}; + var pageChildren = getParentElement(this.$el).children; + var headerHeight = getToolbarHeight('ION-HEADER', pageChildren, this.mode, '44px', '56px'); + var footerHeight = getToolbarHeight('ION-FOOTER', pageChildren, this.mode, '50px', '48px'); + if (this.fullscreen) { + scrollStyle.paddingTop = headerHeight; + scrollStyle.paddingBottom = footerHeight; + } + else { + scrollStyle.marginTop = headerHeight; + scrollStyle.marginBottom = footerHeight; + } + if (this.ionScrollStart) { + props['ionScrollStart'] = this.ionScrollStart.bind(this); + } + if (this.ionScroll) { + props['ionScroll'] = this.ionScroll.bind(this); + } + if (this.ionScrollEnd) { + props['ionScrollEnd'] = this.ionScrollEnd.bind(this); + } + var themedClasses = createThemedClasses(this.mode, this.color, 'content'); + themedClasses['statusbar-padding'] = Ionic.config.getBoolean('statusbarPadding'); + return (h("ion-scroll", { "s": scrollStyle, "p": props, "c": themedClasses }, + h(0, 0))); + }; + return Content; +}()); +function getToolbarHeight(toolbarTagName, pageChildren, mode, iosHeight, defaultHeight) { + for (var i = 0; i < pageChildren.length; i++) { + if (pageChildren[i].tagName === toolbarTagName) { + var headerHeight = pageChildren[i].getAttribute(mode + "-height"); + if (headerHeight) { + return headerHeight; + } + if (mode === 'ios') { + return iosHeight; + } + return defaultHeight; + } + } + return ''; +} + +var Footer = (function () { + function Footer() { + } + Footer.prototype.render = function () { + return h(0, 0); + }; + return Footer; +}()); + +var Header = (function () { + function Header() { + } + Header.prototype.render = function () { + return h(0, 0); + }; + return Header; +}()); + +var Navbar = (function () { + function Navbar() { + this.sbPadding = Ionic.config.getBoolean('statusbarPadding'); + this.hideBackButton = false; + this.backButtonText = Ionic.config.get('backButtonText', 'Back'); + this.backButtonIcon = Ionic.config.get('backButtonIcon'); + this.hidden = false; + } + Navbar.prototype.backButtonClick = function (ev) { + ev.preventDefault(); + ev.stopPropagation(); + console.log('back button click'); + }; + Navbar.prototype["componentDidLoad"] = function () { + var buttons = this.$el.querySelectorAll('ion-button'); + for (var i = 0; i < buttons.length; i++) { + buttons[i].setAttribute('button-type', 'bar-button'); + } + }; + Navbar.prototype.hostData = function () { + return { + class: { + 'statusbar-padding': Ionic.config.getBoolean('statusbarPadding') + } + }; + }; + Navbar.prototype.render = function () { + var backgroundCss = createThemedClasses(this.mode, this.color, 'toolbar-background'); + var contentCss = createThemedClasses(this.mode, this.color, 'toolbar-content'); + var backButtonCss = createThemedClasses(this.mode, this.color, 'back-button'); + var backButtonIconCss = createThemedClasses(this.mode, this.color, 'back-button-icon'); + var backButtonTextCss = createThemedClasses(this.mode, this.color, 'back-button-text'); + return [ + h("div", { "c": backgroundCss }), + h("button", { "c": backButtonCss, "o": { "click": this.backButtonClick.bind(this) }, "a": { "hidden": this.hideBackButton } }, + h("ion-icon", { "c": backButtonIconCss, "p": { "name": this.backButtonIcon } }), + h("span", { "c": backButtonTextCss }, this.backButtonText)), + h(0, { "a": { "name": 'start' } }), + h(0, { "a": { "name": 'mode-start' } }), + h(0, { "a": { "name": 'mode-end' } }), + h(0, { "a": { "name": 'end' } }), + h("div", { "c": contentCss }, + h(0, 0)) + ]; + }; + return Navbar; +}()); + +var Page = (function () { + function Page() { + } + Page.prototype.render = function () { + return h(0, 0); + }; + return Page; +}()); + +var ToolbarTitle = (function () { + function ToolbarTitle() { + } + ToolbarTitle.prototype.render = function () { + var titleClasses = createThemedClasses(this.mode, this.color, 'toolbar-title'); + return [ + h("div", { "c": titleClasses }, + h(0, 0)) + ]; + }; + return ToolbarTitle; +}()); + +var Toolbar = (function () { + function Toolbar() { + } + Toolbar.prototype["componentDidLoad"] = function () { + var buttons = this.$el.querySelectorAll('ion-button'); + for (var i = 0; i < buttons.length; i++) { + buttons[i].setAttribute('button-type', 'bar-button'); + } + }; + Toolbar.prototype.hostData = function () { + return { + class: { + 'statusbar-padding': Ionic.config.getBoolean('statusbarPadding') + } + }; + }; + Toolbar.prototype.render = function () { + var backgroundCss = createThemedClasses(this.mode, this.color, 'toolbar-background'); + var contentCss = createThemedClasses(this.mode, this.color, 'toolbar-content'); + return [ + h("div", { "c": backgroundCss }), + h(0, { "a": { "name": 'start' } }), + h(0, { "a": { "name": 'mode-start' } }), + h(0, { "a": { "name": 'mode-end' } }), + h(0, { "a": { "name": 'end' } }), + h("div", { "c": contentCss }, + h(0, 0)) + ]; + }; + return Toolbar; +}()); + +exports['ION-APP'] = App; +exports['ION-CONTENT'] = Content; +exports['ION-FOOTER'] = Footer; +exports['ION-HEADER'] = Header; +exports['ION-NAVBAR'] = Navbar; +exports['ION-PAGE'] = Page; +exports['ION-TITLE'] = ToolbarTitle; +exports['ION-TOOLBAR'] = Toolbar; +}, + + +/***************** ion-app *****************/ +[ +/** ion-app: [0] tag **/ +'ION-APP', + +/** ion-app: [1] host **/ +{"theme":"app"} + +], + +/***************** ion-content *****************/ +[ +/** ion-content: [0] tag **/ +'ION-CONTENT', + +/** ion-content: [1] host **/ +{} + +], + +/***************** ion-footer *****************/ +[ +/** ion-footer: [0] tag **/ +'ION-FOOTER', + +/** ion-footer: [1] host **/ +{"theme":"footer"} + +], + +/***************** ion-header *****************/ +[ +/** ion-header: [0] tag **/ +'ION-HEADER', + +/** ion-header: [1] host **/ +{"theme":"header"} + +], + +/***************** ion-navbar *****************/ +[ +/** ion-navbar: [0] tag **/ +'ION-NAVBAR', + +/** ion-navbar: [1] host **/ +{"theme":"toolbar"} + +], + +/***************** ion-page *****************/ +[ +/** ion-page: [0] tag **/ +'ION-PAGE', + +/** ion-page: [1] host **/ +{"theme":"page"} + +], + +/***************** ion-title *****************/ +[ +/** ion-title: [0] tag **/ +'ION-TITLE', + +/** ion-title: [1] host **/ +{"theme":"title"} + +], + +/***************** ion-toolbar *****************/ +[ +/** ion-toolbar: [0] tag **/ +'ION-TOOLBAR', + +/** ion-toolbar: [1] host **/ +{"theme":"toolbar"} + +] +) \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-avatar.ion-badge.ion-thumbnail.js b/packages/core-hn-demo/www/build/app/ion-avatar.ion-badge.ion-thumbnail.js new file mode 100644 index 0000000000..26fd9cdba3 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-avatar.ion-badge.ion-thumbnail.js @@ -0,0 +1,72 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'ion-avatar.ion-badge.ion-thumbnail', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +var Avatar = (function () { + function Avatar() { + } + Avatar.prototype.render = function () { + return h(0, 0); + }; + return Avatar; +}()); + +var Badge = (function () { + function Badge() { + } + Badge.prototype.render = function () { + return h(0, 0); + }; + return Badge; +}()); + +var Thumbnail = (function () { + function Thumbnail() { + } + Thumbnail.prototype.render = function () { + return h(0, 0); + }; + return Thumbnail; +}()); + +exports['ION-AVATAR'] = Avatar; +exports['ION-BADGE'] = Badge; +exports['ION-THUMBNAIL'] = Thumbnail; +}, + + +/***************** ion-avatar *****************/ +[ +/** ion-avatar: [0] tag **/ +'ION-AVATAR', + +/** ion-avatar: [1] host **/ +{"theme":"avatar"} + +], + +/***************** ion-badge *****************/ +[ +/** ion-badge: [0] tag **/ +'ION-BADGE', + +/** ion-badge: [1] host **/ +{"theme":"badge"} + +], + +/***************** ion-thumbnail *****************/ +[ +/** ion-thumbnail: [0] tag **/ +'ION-THUMBNAIL', + +/** ion-thumbnail: [1] host **/ +{"theme":"thumbnail"} + +] +) \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-button.ion-buttons.ion-icon.js b/packages/core-hn-demo/www/build/app/ion-button.ion-buttons.ion-icon.js new file mode 100644 index 0000000000..00294b9e46 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-button.ion-buttons.ion-icon.js @@ -0,0 +1,331 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'ion-button.ion-buttons.ion-icon', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +var Button = (function () { + function Button() { + this.itemButton = false; + /** + * @Prop {string} The type of button. + * Possible values are: `"button"`, `"bar-button"`. + */ + this.buttonType = 'button'; + /** + * @Prop {boolean} If true, activates the large button size. + * Type: size + */ + this.large = false; + /** + * @Prop {boolean} If true, activates the small button size. + * Type: size + */ + this.small = false; + /** + * @Prop {boolean} If true, activates the default button size. Normally the default, useful for buttons in an item. + * Type: size + */ + this.default = false; + /** + * @Prop {boolean} If true, sets the button into a disabled state. + */ + this.disabled = false; + /** + * @Prop {boolean} If true, activates a transparent button style with a border. + * Type: style + */ + this.outline = false; + /** + * @Prop {boolean} If true, activates a transparent button style without a border. + * Type: style + */ + this.clear = false; + /** + * @Prop {boolean} If true, activates a solid button style. Normally the default, useful for buttons in a toolbar. + * Type: style + */ + this.solid = false; + /** + * @Prop {boolean} If true, activates a button with rounded corners. + * Type: shape + */ + this.round = false; + /** + * @Prop {boolean} If true, activates a button style that fills the available width. + * Type: display + */ + this.block = false; + /** + * @Prop {boolean} If true, activates a button style that fills the available width without + * a left and right border. + * Type: display + */ + this.full = false; + /** + * @Prop {boolean} If true, activates a button with a heavier font weight. + * Type: decorator + */ + this.strong = false; + } + /** + * @hidden + * Get the classes based on the button type + * e.g. alert-button, action-sheet-button + */ + Button.prototype.getButtonClassList = function (buttonType, mode) { + if (!buttonType) { + return []; + } + return [ + buttonType, + buttonType + "-" + mode + ]; + }; + /** + * @hidden + * Get the classes based on the type + * e.g. block, full, round, large + */ + Button.prototype.getClassList = function (buttonType, type, mode) { + if (!type) { + return []; + } + type = type.toLocaleLowerCase(); + return [ + buttonType + "-" + type, + buttonType + "-" + type + "-" + mode + ]; + }; + /** + * @hidden + * Get the classes for the color + */ + Button.prototype.getColorClassList = function (color, buttonType, style, mode) { + style = (buttonType !== 'bar-button' && style === 'solid') ? 'default' : style; + var className = buttonType + + ((style && style !== 'default') ? + '-' + style.toLowerCase() : + ''); + // special case for a default bar button + // if the bar button is default it should get the style + // but if a color is passed the style shouldn't be added + if (buttonType === 'bar-button' && style === 'default') { + className = buttonType; + if (!color) { + className += '-' + style.toLowerCase(); + } + } + return [className + "-" + mode].concat(style !== 'default' ? "" + className : [], color ? className + "-" + mode + "-" + color : []); + }; + /** + * @hidden + * Get the classes for the style + * e.g. outline, clear, solid + */ + Button.prototype.getStyleClassList = function (buttonType) { + var classList = [].concat(this.outline ? this.getColorClassList(this.color, buttonType, 'outline', this.mode) : [], this.clear ? this.getColorClassList(this.color, buttonType, 'clear', this.mode) : [], this.solid ? this.getColorClassList(this.color, buttonType, 'solid', this.mode) : []); + if (classList.length === 0) { + classList = this.getColorClassList(this.color, buttonType, 'default', this.mode); + } + return classList; + }; + /** + * @hidden + * Get the item classes for the button + */ + Button.prototype.getItemClassList = function (size) { + var classList = [].concat(this.itemButton && !size ? 'item-button' : []); + return classList; + }; + /** + * @hidden + * Get the element classes to add to the child element + */ + Button.prototype.getElementClassList = function () { + var classList = [].concat(this.$el.className.length ? this.$el.className.split(' ') : []); + return classList; + }; + Button.prototype.render = function () { + var size = (this.large ? 'large' : null) || + (this.small ? 'small' : null) || + (this.default ? 'default' : null); + var shape = (this.round ? 'round' : null); + var display = (this.block ? 'block' : null) || + (this.full ? 'full' : null); + var decorator = (this.strong ? 'strong' : null); + var buttonClasses = [] + .concat(this.getButtonClassList(this.buttonType, this.mode), this.getClassList(this.buttonType, shape, this.mode), this.getClassList(this.buttonType, display, this.mode), this.getClassList(this.buttonType, size, this.mode), this.getClassList(this.buttonType, decorator, this.mode), this.getStyleClassList(this.buttonType), this.getItemClassList(size), this.getElementClassList()) + .reduce(function (prevValue, cssClass) { + prevValue[cssClass] = true; + return prevValue; + }, {}); + var TagType = this.href ? 'a' : 'button'; + return (h(TagType, { "c": buttonClasses, "a": { "disabled": this.disabled } }, + h("span", { "c": { "button-inner": true } }, + h(0, { "a": { "name": 'icon-only' } }), + h(0, { "a": { "name": 'start' } }), + h(0, 0), + h(0, { "a": { "name": 'end' } })), + h("div", { "c": { "button-effect": true } }))); + }; + return Button; +}()); + +var Buttons = (function () { + function Buttons() { + } + Buttons.prototype["componentDidLoad"] = function () { + var buttons = this.$el.querySelectorAll('ion-button'); + for (var i = 0; i < buttons.length; i++) { + buttons[i].setAttribute('button-type', 'bar-button'); + } + }; + Buttons.prototype.render = function () { + return h(0, 0); + }; + return Buttons; +}()); + +var Icon = (function () { + function Icon() { + /** + * @input {string} Specifies the label to use for accessibility. Defaults to the icon name. + */ + this.label = ''; + /** + * @input {string} Specifies the mode to use for the icon. + */ + this.iconMode = ''; + /** + * @input {string} Specifies which icon to use. The appropriate icon will be used based on the mode. + * For more information, see [Ionicons](/docs/ionicons/). + */ + this.name = ''; + /** + * @input {string} Specifies which icon to use on `ios` mode. + */ + this.ios = ''; + /** + * @input {string} Specifies which icon to use on `md` mode. + */ + this.md = ''; + /** + * @input {boolean} If true, the icon is styled with an "active" appearance. + * An active icon is filled in, and an inactive icon is the outline of the icon. + * The `isActive` property is largely used by the tabbar. Only affects `ios` icons. + */ + this.isActive = null; + /** + * @input {boolean} If true, the icon is hidden. + */ + this.hidden = false; + } + Icon.prototype.getElementClass = function () { + var iconName; + // If no name was passed set iconName to null + if (!this.name) { + iconName = null; + } + else if (!(/^md-|^ios-|^logo-/.test(this.name))) { + // this does not have one of the defaults + // so lets auto add in the mode prefix for them + iconName = this.iconMode + '-' + this.name; + } + else if (this.name) { + iconName = this.name; + } + // If an icon was passed in using the ios or md attributes + // set the iconName to whatever was passed in + if (this.ios && this.iconMode === 'ios') { + iconName = this.ios; + } + else if (this.md && this.iconMode === 'md') { + iconName = this.md; + } + if ((iconName === null) || (this.hidden === true)) { + console.warn('Icon is hidden.'); + return 'hide'; + } + var iconMode = iconName.split('-', 2)[0]; + if (iconMode === 'ios' && + this.isActive === false && + iconName.indexOf('logo-') < 0 && + iconName.indexOf('-outline') < 0) { + iconName += '-outline'; + } + var label = iconName + .replace('ios-', '') + .replace('md-', '') + .replace('-', ' '); + this.label = label; + return "ion-" + iconName; + }; + Icon.prototype.hostData = function () { + // TODO set the right iconMode based on the config + var iconMode = this.mode === 'md' ? 'md' : 'ios'; + this.iconMode = iconMode || Ionic.config.get('iconMode'); + var iconClasses = [] + .concat(this.getElementClass()) + .reduce(function (prevValue, cssClass) { + prevValue[cssClass] = true; + return prevValue; + }, {}); + return { + class: iconClasses, + attrs: { + 'role': 'img' + } + }; + }; + Icon.prototype.render = function () { + return h(0, 0); + }; + return Icon; +}()); + +exports['ION-BUTTON'] = Button; +exports['ION-BUTTONS'] = Buttons; +exports['ION-ICON'] = Icon; +}, + + +/***************** ion-button *****************/ +[ +/** ion-button: [0] tag **/ +'ION-BUTTON', + +/** ion-button: [1] host **/ +{} + +], + +/***************** ion-buttons *****************/ +[ +/** ion-buttons: [0] tag **/ +'ION-BUTTONS', + +/** ion-buttons: [1] host **/ +{"theme":"bar-buttons"} + +], + +/***************** ion-icon *****************/ +[ +/** ion-icon: [0] tag **/ +'ION-ICON', + +/** ion-icon: [1] host **/ +{"theme":"icon"}, + +/** ion-icon: [2] listeners **/ +0 /* no listeners */, + +/** ion-icon: [3] states **/ +['iconMode', 'label'] + +] +) \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-card.ion-card-content.ion-card-header.ion-card.js b/packages/core-hn-demo/www/build/app/ion-card.ion-card-content.ion-card-header.ion-card.js new file mode 100644 index 0000000000..9c9b65f949 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-card.ion-card-content.ion-card-header.ion-card.js @@ -0,0 +1,92 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'ion-card.ion-card-content.ion-card-header.ion-card', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +var Card = (function () { + function Card() { + } + Card.prototype.render = function () { + return h(0, 0); + }; + return Card; +}()); + +var CardContent = (function () { + function CardContent() { + } + CardContent.prototype.render = function () { + return h(0, 0); + }; + return CardContent; +}()); + +var CardHeader = (function () { + function CardHeader() { + } + CardHeader.prototype.render = function () { + return h(0, 0); + }; + return CardHeader; +}()); + +var CardTitle = (function () { + function CardTitle() { + } + CardTitle.prototype.render = function () { + return h(0, 0); + }; + return CardTitle; +}()); + +exports['ION-CARD'] = Card; +exports['ION-CARD-CONTENT'] = CardContent; +exports['ION-CARD-HEADER'] = CardHeader; +exports['ION-CARD-TITLE'] = CardTitle; +}, + + +/***************** ion-card *****************/ +[ +/** ion-card: [0] tag **/ +'ION-CARD', + +/** ion-card: [1] host **/ +{"theme":"card"} + +], + +/***************** ion-card-content *****************/ +[ +/** ion-card-content: [0] tag **/ +'ION-CARD-CONTENT', + +/** ion-card-content: [1] host **/ +{"theme":"card-content"} + +], + +/***************** ion-card-header *****************/ +[ +/** ion-card-header: [0] tag **/ +'ION-CARD-HEADER', + +/** ion-card-header: [1] host **/ +{"theme":"card-header"} + +], + +/***************** ion-card-title *****************/ +[ +/** ion-card-title: [0] tag **/ +'ION-CARD-TITLE', + +/** ion-card-title: [1] host **/ +{"theme":"card-title"} + +] +) \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-gesture.ion-scroll.js b/packages/core-hn-demo/www/build/app/ion-gesture.ion-scroll.js new file mode 100644 index 0000000000..ff086be4b1 --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-gesture.ion-scroll.js @@ -0,0 +1,1013 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'ion-gesture.ion-scroll', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +function pointerCoordX(ev) { + // get X coordinates for either a mouse click + // or a touch depending on the given event + if (ev) { + var changedTouches = ev.changedTouches; + if (changedTouches && changedTouches.length > 0) { + return changedTouches[0].clientX; + } + if (ev.pageX !== undefined) { + return ev.pageX; + } + } + return 0; +} +function pointerCoordY(ev) { + // get Y coordinates for either a mouse click + // or a touch depending on the given event + if (ev) { + var changedTouches = ev.changedTouches; + if (changedTouches && changedTouches.length > 0) { + return changedTouches[0].clientY; + } + if (ev.pageY !== undefined) { + return ev.pageY; + } + } + return 0; +} +function getElementReference(elm, ref) { + if (ref === 'child') { + return elm.firstElementChild; + } + if (ref === 'parent') { + return getParentElement(elm) || elm; + } + if (ref === 'body') { + return elm.ownerDocument.body; + } + if (ref === 'document') { + return elm.ownerDocument; + } + if (ref === 'window') { + return elm.ownerDocument.defaultView; + } + return elm; +} +function getParentElement(elm) { + if (elm.parentElement) { + // normal element with a parent element + return elm.parentElement; + } + if (elm.parentNode && elm.parentNode.host) { + // shadow dom's document fragment + return elm.parentNode.host; + } + return null; +} +function applyStyles(elm, styles) { + var styleProps = Object.keys(styles); + if (elm) { + for (var i = 0; i < styleProps.length; i++) { + elm.style[styleProps[i]] = styles[styleProps[i]]; + } + } +} + +var GestureController = (function () { + function GestureController() { + this.id = 0; + this.requestedStart = {}; + this.disabledGestures = {}; + this.disabledScroll = new Set(); + this.capturedID = null; + } + GestureController.prototype.createGesture = function (gestureName, gesturePriority, disableScroll) { + return new GestureDelegate(this, this.newID(), gestureName, gesturePriority, disableScroll); + }; + GestureController.prototype.createBlocker = function (opts) { + if (opts === void 0) { opts = {}; } + return new BlockerDelegate(this.newID(), this, opts.disable, !!opts.disableScroll); + }; + GestureController.prototype.newID = function () { + return this.id++; + }; + GestureController.prototype.start = function (gestureName, id, priority) { + if (!this.canStart(gestureName)) { + delete this.requestedStart[id]; + return false; + } + this.requestedStart[id] = priority; + return true; + }; + GestureController.prototype.capture = function (gestureName, id, priority) { + if (!this.start(gestureName, id, priority)) { + return false; + } + var requestedStart = this.requestedStart; + var maxPriority = -10000; + for (var gestureID in requestedStart) { + maxPriority = Math.max(maxPriority, requestedStart[gestureID]); + } + if (maxPriority === priority) { + this.capturedID = id; + this.requestedStart = {}; + return true; + } + delete requestedStart[id]; + return false; + }; + GestureController.prototype.release = function (id) { + delete this.requestedStart[id]; + if (this.capturedID && id === this.capturedID) { + this.capturedID = null; + } + }; + GestureController.prototype.disableGesture = function (gestureName, id) { + var set = this.disabledGestures[gestureName]; + if (!set) { + set = new Set(); + this.disabledGestures[gestureName] = set; + } + set.add(id); + }; + GestureController.prototype.enableGesture = function (gestureName, id) { + var set = this.disabledGestures[gestureName]; + if (set) { + set.delete(id); + } + }; + GestureController.prototype.disableScroll = function (id) { + // let isEnabled = !this.isScrollDisabled(); + this.disabledScroll.add(id); + // if (this._app && isEnabled && this.isScrollDisabled()) { + // console.debug('GestureController: Disabling scrolling'); + // this._app._setDisableScroll(true); + // } + }; + GestureController.prototype.enableScroll = function (id) { + // let isDisabled = this.isScrollDisabled(); + this.disabledScroll.delete(id); + // if (this._app && isDisabled && !this.isScrollDisabled()) { + // console.debug('GestureController: Enabling scrolling'); + // this._app._setDisableScroll(false); + // } + }; + GestureController.prototype.canStart = function (gestureName) { + if (this.capturedID) { + // a gesture already captured + return false; + } + if (this.isDisabled(gestureName)) { + return false; + } + return true; + }; + GestureController.prototype.isCaptured = function () { + return !!this.capturedID; + }; + GestureController.prototype.isScrollDisabled = function () { + return this.disabledScroll.size > 0; + }; + GestureController.prototype.isDisabled = function (gestureName) { + var disabled = this.disabledGestures[gestureName]; + if (disabled && disabled.size > 0) { + return true; + } + return false; + }; + return GestureController; +}()); +var GestureDelegate = (function () { + function GestureDelegate(ctrl, id, name, priority, disableScroll) { + this.ctrl = ctrl; + this.id = id; + this.name = name; + this.priority = priority; + this.disableScroll = disableScroll; + } + GestureDelegate.prototype.canStart = function () { + if (!this.ctrl) { + return false; + } + return this.ctrl.canStart(this.name); + }; + GestureDelegate.prototype.start = function () { + if (!this.ctrl) { + return false; + } + return this.ctrl.start(this.name, this.id, this.priority); + }; + GestureDelegate.prototype.capture = function () { + if (!this.ctrl) { + return false; + } + var captured = this.ctrl.capture(this.name, this.id, this.priority); + if (captured && this.disableScroll) { + this.ctrl.disableScroll(this.id); + } + return captured; + }; + GestureDelegate.prototype.release = function () { + if (this.ctrl) { + this.ctrl.release(this.id); + if (this.disableScroll) { + this.ctrl.enableScroll(this.id); + } + } + }; + GestureDelegate.prototype.destroy = function () { + this.release(); + this.ctrl = null; + }; + return GestureDelegate; +}()); +var BlockerDelegate = (function () { + function BlockerDelegate(id, controller, disable, disableScroll) { + this.id = id; + this.controller = controller; + this.disable = disable; + this.disableScroll = disableScroll; + this.blocked = false; + } + BlockerDelegate.prototype.block = function () { + var _this = this; + if (!this.controller) { + return; + } + if (this.disable) { + this.disable.forEach(function (gesture) { + _this.controller.disableGesture(gesture, _this.id); + }); + } + if (this.disableScroll) { + this.controller.disableScroll(this.id); + } + this.blocked = true; + }; + BlockerDelegate.prototype.unblock = function () { + var _this = this; + if (!this.controller) { + return; + } + if (this.disable) { + this.disable.forEach(function (gesture) { + _this.controller.enableGesture(gesture, _this.id); + }); + } + if (this.disableScroll) { + this.controller.enableScroll(this.id); + } + this.blocked = false; + }; + BlockerDelegate.prototype.destroy = function () { + this.unblock(); + this.controller = null; + }; + return BlockerDelegate; +}()); +var BLOCK_ALL = { + disable: ['menu-swipe', 'goback-swipe'], + disableScroll: true +}; + +var PanRecognizer = (function () { + function PanRecognizer(direction, threshold, maxAngle) { + this.direction = direction; + this.dirty = false; + this.angle = 0; + this.isPan = 0; + var radians = maxAngle * (Math.PI / 180); + this.maxCosine = Math.cos(radians); + this.threshold = threshold * threshold; + } + PanRecognizer.prototype.start = function (x, y) { + this.startX = x; + this.startY = y; + this.angle = 0; + this.isPan = 0; + this.dirty = true; + }; + PanRecognizer.prototype.detect = function (x, y) { + if (!this.dirty) { + return false; + } + var deltaX = (x - this.startX); + var deltaY = (y - this.startY); + var distance = deltaX * deltaX + deltaY * deltaY; + if (distance >= this.threshold) { + var angle = Math.atan2(deltaY, deltaX); + var cosine = (this.direction === 'y') + ? Math.sin(angle) + : Math.cos(angle); + this.angle = angle; + if (cosine > this.maxCosine) { + this.isPan = 1; + } + else if (cosine < -this.maxCosine) { + this.isPan = -1; + } + else { + this.isPan = 0; + } + this.dirty = false; + return true; + } + return false; + }; + PanRecognizer.prototype.isGesture = function () { + return this.isPan; + }; + return PanRecognizer; +}()); + +var Gesture = (function () { + function Gesture() { + this.detail = {}; + this.positions = []; + this.lastTouch = 0; + this.hasCapturedPan = false; + this.hasPress = false; + this.hasStartedPan = false; + this.requiresMove = false; + this.isMoveQueued = false; + this.attachTo = 'child'; + this.autoBlockAll = false; + this.block = null; + this.disableScroll = false; + this.direction = 'x'; + this.gestureName = ''; + this.gesturePriority = 0; + this.maxAngle = 40; + this.threshold = 20; + this.type = 'pan'; + } + Gesture.prototype["componentDidLoad"] = function () { + var _this = this; + this.ctrl = Ionic.controllers.gesture = (Ionic.controllers.gesture || new GestureController()); + this.gesture = this.ctrl.createGesture(this.gestureName, this.gesturePriority, this.disableScroll); + var types = this.type.replace(/\s/g, '').toLowerCase().split(','); + if (types.indexOf('pan') > -1) { + this.pan = new PanRecognizer(this.direction, this.threshold, this.maxAngle); + this.requiresMove = true; + } + this.hasPress = (types.indexOf('press') > -1); + if (this.pan || this.hasPress) { + Ionic.listener.enable(this, 'touchstart', true, this.attachTo); + Ionic.listener.enable(this, 'mousedown', true, this.attachTo); + Ionic.dom.write(function () { + applyStyles(getElementReference(_this.$el, _this.attachTo), GESTURE_INLINE_STYLES); + }); + } + if (this.autoBlockAll) { + this.blocker = this.ctrl.createBlocker(BLOCK_ALL); + this.blocker.block(); + } + }; + Gesture.prototype.blockChange = function (block) { + if (this.blocker) { + this.blocker.destroy(); + } + if (block) { + this.blocker = this.ctrl.createBlocker(block.split(',')); + } + }; + // DOWN ************************* + Gesture.prototype.onTouchStart = function (ev) { + this.lastTouch = now(ev); + this.enableMouse(false); + this.enableTouch(true); + this.pointerDown(ev, this.lastTouch); + }; + Gesture.prototype.onMouseDown = function (ev) { + var timeStamp = now(ev); + if (this.lastTouch === 0 || (this.lastTouch + MOUSE_WAIT < timeStamp)) { + this.enableMouse(true); + this.enableTouch(false); + this.pointerDown(ev, timeStamp); + } + }; + Gesture.prototype.pointerDown = function (ev, timeStamp) { + if (!this.gesture || this.hasStartedPan) { + return false; + } + var detail = this.detail; + detail.startX = detail.currentX = pointerCoordX(ev); + detail.startY = detail.currentY = pointerCoordY(ev); + detail.startTimeStamp = detail.timeStamp = timeStamp; + detail.velocityX = detail.velocityY = detail.deltaX = detail.deltaY = 0; + detail.directionX = detail.directionY = detail.velocityDirectionX = detail.velocityDirectionY = null; + detail.event = ev; + this.positions.length = 0; + if (this.canStart && this.canStart(detail) === false) { + return false; + } + this.positions.push(detail.currentX, detail.currentY, timeStamp); + // Release fallback + this.gesture.release(); + // Start gesture + if (!this.gesture.start()) { + return false; + } + if (this.pan) { + this.hasStartedPan = true; + this.hasCapturedPan = false; + this.pan.start(detail.startX, detail.startY); + } + return true; + }; + // MOVE ************************* + Gesture.prototype.onTouchMove = function (ev) { + this.lastTouch = this.detail.timeStamp = now(ev); + this.pointerMove(ev); + }; + Gesture.prototype.onMoveMove = function (ev) { + var timeStamp = now(ev); + if (this.lastTouch === 0 || (this.lastTouch + MOUSE_WAIT < timeStamp)) { + this.detail.timeStamp = timeStamp; + this.pointerMove(ev); + } + }; + Gesture.prototype.pointerMove = function (ev) { + var _this = this; + var detail = this.detail; + this.calcGestureData(ev); + if (this.pan) { + if (this.hasCapturedPan) { + if (!this.isMoveQueued) { + this.isMoveQueued = true; + Ionic.dom.write(function () { + _this.isMoveQueued = false; + detail.type = 'pan'; + if (_this.onMove) { + _this.onMove(detail); + } + else { + Ionic.emit(_this, 'ionGestureMove', { detail: _this.detail }); + } + }); + } + } + else if (this.pan.detect(detail.currentX, detail.currentY)) { + if (this.pan.isGesture() !== 0) { + if (!this.tryToCapturePan(ev)) { + this.abortGesture(); + } + } + } + } + }; + Gesture.prototype.calcGestureData = function (ev) { + var detail = this.detail; + detail.currentX = pointerCoordX(ev); + detail.currentY = pointerCoordY(ev); + detail.deltaX = (detail.currentX - detail.startX); + detail.deltaY = (detail.currentY - detail.startY); + detail.event = ev; + // figure out which direction we're movin' + detail.directionX = detail.velocityDirectionX = (detail.deltaX > 0 ? 'left' : (detail.deltaX < 0 ? 'right' : null)); + detail.directionY = detail.velocityDirectionY = (detail.deltaY > 0 ? 'up' : (detail.deltaY < 0 ? 'down' : null)); + var positions = this.positions; + positions.push(detail.currentX, detail.currentY, detail.timeStamp); + var endPos = (positions.length - 1); + var startPos = endPos; + var timeRange = (detail.timeStamp - 100); + // move pointer to position measured 100ms ago + for (var i = endPos; i > 0 && positions[i] > timeRange; i -= 3) { + startPos = i; + } + if (startPos !== endPos) { + // compute relative movement between these two points + var movedX = (positions[startPos - 2] - positions[endPos - 2]); + var movedY = (positions[startPos - 1] - positions[endPos - 1]); + var factor = 16.67 / (positions[endPos] - positions[startPos]); + // based on XXms compute the movement to apply for each render step + detail.velocityX = movedX * factor; + detail.velocityY = movedY * factor; + detail.velocityDirectionX = (movedX > 0 ? 'left' : (movedX < 0 ? 'right' : null)); + detail.velocityDirectionY = (movedY > 0 ? 'up' : (movedY < 0 ? 'down' : null)); + } + }; + Gesture.prototype.tryToCapturePan = function (ev) { + if (this.gesture && !this.gesture.capture()) { + return false; + } + this.detail.event = ev; + if (this.onStart) { + this.onStart(this.detail); + } + else { + Ionic.emit(this, 'ionGestureStart', { detail: this.detail }); + } + this.hasCapturedPan = true; + return true; + }; + Gesture.prototype.abortGesture = function () { + this.hasStartedPan = false; + this.hasCapturedPan = false; + this.gesture && this.gesture.release(); + this.enable(false); + this.notCaptured && this.notCaptured(this.detail); + }; + // END ************************* + Gesture.prototype.onTouchEnd = function (ev) { + this.lastTouch = this.detail.timeStamp = now(ev); + this.pointerUp(ev); + this.enableTouch(false); + }; + Gesture.prototype.onMouseUp = function (ev) { + var timeStamp = now(ev); + if (this.lastTouch === 0 || (this.lastTouch + MOUSE_WAIT < timeStamp)) { + this.detail.timeStamp = timeStamp; + this.pointerUp(ev); + this.enableMouse(false); + } + }; + Gesture.prototype.pointerUp = function (ev) { + var detail = this.detail; + this.gesture && this.gesture.release(); + detail.event = ev; + this.calcGestureData(ev); + if (this.pan) { + if (this.hasCapturedPan) { + detail.type = 'pan'; + if (this.onEnd) { + this.onEnd(detail); + } + else { + Ionic.emit(this, 'ionGestureEnd', { detail: detail }); + } + } + else if (this.hasPress) { + this.detectPress(); + } + else { + if (this.notCaptured) { + this.notCaptured(detail); + } + else { + Ionic.emit(this, 'ionGestureNotCaptured', { detail: detail }); + } + } + } + else if (this.hasPress) { + this.detectPress(); + } + this.hasCapturedPan = false; + this.hasStartedPan = false; + }; + Gesture.prototype.detectPress = function () { + var detail = this.detail; + if (Math.abs(detail.startX - detail.currentX) < 10 && Math.abs(detail.startY - detail.currentY) < 10) { + detail.type = 'press'; + if (this.onPress) { + this.onPress(detail); + } + else { + Ionic.emit(this, 'ionPress', { detail: detail }); + } + } + }; + // ENABLE LISTENERS ************************* + Gesture.prototype.enableMouse = function (shouldEnable) { + if (this.requiresMove) { + Ionic.listener.enable(this, 'document:mousemove', shouldEnable); + } + Ionic.listener.enable(this, 'document:mouseup', shouldEnable); + }; + Gesture.prototype.enableTouch = function (shouldEnable) { + if (this.requiresMove) { + Ionic.listener.enable(this, 'touchmove', shouldEnable); + } + Ionic.listener.enable(this, 'touchend', shouldEnable); + }; + Gesture.prototype.enable = function (shouldEnable) { + this.enableMouse(shouldEnable); + this.enableTouch(shouldEnable); + }; + Gesture.prototype["componentDidunload"] = function () { + if (this.blocker) { + this.blocker.destroy(); + this.blocker = null; + } + this.gesture && this.gesture.destroy(); + this.ctrl = this.gesture = this.pan = this.detail = this.detail.event = null; + }; + return Gesture; +}()); +var GESTURE_INLINE_STYLES = { + 'touch-action': 'none', + 'user-select': 'none', + '-webkit-user-drag': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' +}; +var MOUSE_WAIT = 2500; +function now(ev) { + return ev.timeStamp || Date.now(); +} + +var Scroll = (function () { + function Scroll() { + this.positions = []; + this.queued = false; + this.isScrolling = false; + this.detail = {}; + this.enabled = true; + this.jsScroll = false; + this.eventOpts = { + detail: this.detail, + bubbles: true, + composed: true + }; + } + Scroll.prototype["componentDidLoad"] = function () { + if (Ionic.isServer) + return; + var ctrl = Ionic.controllers.gesture = (Ionic.controllers.gesture || new GestureController()); + this.gesture = ctrl.createGesture('scroll', 100, false); + }; + // Native Scroll ************************* + Scroll.prototype.onNativeScroll = function () { + var self = this; + if (!self.queued && self.enabled) { + self.queued = true; + Ionic.dom.read(function (timeStamp) { + self.queued = false; + self.onScroll(timeStamp || Date.now()); + }); + } + }; + Scroll.prototype.onScroll = function (timeStamp) { + var self = this; + var detail = self.detail; + var positions = self.positions; + detail.timeStamp = timeStamp; + // get the current scrollTop + // ******** DOM READ **************** + detail.scrollTop = self.getTop(); + // get the current scrollLeft + // ******** DOM READ **************** + detail.scrollLeft = self.getLeft(); + if (!self.isScrolling) { + // currently not scrolling, so this is a scroll start + self.isScrolling = true; + // remember the start positions + detail.startY = detail.scrollTop; + detail.startX = detail.scrollLeft; + // new scroll, so do some resets + detail.velocityY = detail.velocityX = detail.deltaY = detail.deltaX = positions.length = 0; + // emit only on the first scroll event + if (self.ionScrollStart) { + self.ionScrollStart(detail); + } + else { + Ionic.emit(this, 'ionScrollStart', this.eventOpts); + } + } + detail.directionX = detail.velocityDirectionX = (detail.deltaX > 0 ? 'left' : (detail.deltaX < 0 ? 'right' : null)); + detail.directionY = detail.velocityDirectionY = (detail.deltaY > 0 ? 'up' : (detail.deltaY < 0 ? 'down' : null)); + // actively scrolling + positions.push(detail.scrollTop, detail.scrollLeft, detail.timeStamp); + if (positions.length > 3) { + // we've gotten at least 2 scroll events so far + detail.deltaY = (detail.scrollTop - detail.startY); + detail.deltaX = (detail.scrollLeft - detail.startX); + var endPos = (positions.length - 1); + var startPos = endPos; + var timeRange = (detail.timeStamp - 100); + // move pointer to position measured 100ms ago + for (var i = endPos; i > 0 && positions[i] > timeRange; i -= 3) { + startPos = i; + } + if (startPos !== endPos) { + // compute relative movement between these two points + var movedTop = (positions[startPos - 2] - positions[endPos - 2]); + var movedLeft = (positions[startPos - 1] - positions[endPos - 1]); + var factor = 16.67 / (positions[endPos] - positions[startPos]); + // based on XXms compute the movement to apply for each render step + detail.velocityY = movedTop * factor; + detail.velocityX = movedLeft * factor; + // figure out which direction we're scrolling + detail.velocityDirectionX = (movedLeft > 0 ? 'left' : (movedLeft < 0 ? 'right' : null)); + detail.velocityDirectionY = (movedTop > 0 ? 'up' : (movedTop < 0 ? 'down' : null)); + } + } + clearTimeout(self.tmr); + self.tmr = setTimeout(function () { + // haven't scrolled in a while, so it's a scrollend + self.isScrolling = false; + Ionic.dom.read(function (timeStamp) { + if (!self.isScrolling) { + self.onEnd(timeStamp); + } + }); + }, 80); + // emit on each scroll event + if (self.ionScrollStart) { + self.ionScroll(detail); + } + else { + Ionic.emit(this, 'ionScroll', this.eventOpts); + } + }; + Scroll.prototype.onEnd = function (timeStamp) { + var self = this; + var detail = self.detail; + detail.timeStamp = timeStamp || Date.now(); + // emit that the scroll has ended + if (self.ionScrollEnd) { + self.ionScrollEnd(detail); + } + else { + Ionic.emit(this, 'ionScrollEnd', this.eventOpts); + } + }; + Scroll.prototype.enableJsScroll = function (contentTop, contentBottom) { + this.jsScroll = true; + Ionic.listener.enable(this, 'scroll', false); + Ionic.listener.enable(this, 'touchstart', true); + contentTop; + contentBottom; + }; + // Touch Scroll ************************* + Scroll.prototype.onTouchStart = function () { + if (!this.enabled) { + return; + } + Ionic.listener.enable(this, 'touchmove', true); + Ionic.listener.enable(this, 'touchend', true); + throw 'jsScroll: TODO!'; + }; + Scroll.prototype.onTouchMove = function () { + if (!this.enabled) { + return; + } + }; + Scroll.prototype.onTouchEnd = function () { + Ionic.listener.enable(this, 'touchmove', false); + Ionic.listener.enable(this, 'touchend', false); + if (!this.enabled) { + return; + } + }; + /** + * DOM READ + */ + Scroll.prototype.getTop = function () { + if (this.jsScroll) { + return this._t; + } + return this._t = this.$el.scrollTop; + }; + /** + * DOM READ + */ + Scroll.prototype.getLeft = function () { + if (this.jsScroll) { + return 0; + } + return this._l = this.$el.scrollLeft; + }; + /** + * DOM WRITE + */ + Scroll.prototype.setTop = function (top) { + this._t = top; + if (this.jsScroll) { + this.$el.style.transform = this.$el.style.webkitTransform = "translate3d(" + this._l * -1 + "px," + top * -1 + "px,0px)"; + } + else { + this.$el.scrollTop = top; + } + }; + /** + * DOM WRITE + */ + Scroll.prototype.setLeft = function (left) { + this._l = left; + if (this.jsScroll) { + this.$el.style.transform = this.$el.style.webkitTransform = "translate3d(" + left * -1 + "px," + this._t * -1 + "px,0px)"; + } + else { + this.$el.scrollLeft = left; + } + }; + Scroll.prototype.scrollTo = function (x, y, duration, done) { + // scroll animation loop w/ easing + // credit https://gist.github.com/dezinezync/5487119 + var promise; + if (done === undefined) { + // only create a promise if a done callback wasn't provided + // done can be a null, which avoids any functions + promise = new Promise(function (resolve) { + done = resolve; + }); + } + var self = this; + var el = self.$el; + if (!el) { + // invalid element + done(); + return promise; + } + if (duration < 32) { + self.setTop(y); + self.setLeft(x); + done(); + return promise; + } + var fromY = el.scrollTop; + var fromX = el.scrollLeft; + var maxAttempts = (duration / 16) + 100; + var startTime; + var attempts = 0; + var stopScroll = false; + // scroll loop + function step(timeStamp) { + attempts++; + if (!self.$el || stopScroll || attempts > maxAttempts) { + self.isScrolling = false; + el.style.transform = el.style.webkitTransform = ''; + done(); + return; + } + var time = Math.min(1, ((timeStamp - startTime) / duration)); + // where .5 would be 50% of time on a linear scale easedT gives a + // fraction based on the easing method + var easedT = (--time) * time * time + 1; + if (fromY !== y) { + self.setTop((easedT * (y - fromY)) + fromY); + } + if (fromX !== x) { + self.setLeft(Math.floor((easedT * (x - fromX)) + fromX)); + } + if (easedT < 1) { + // do not use DomController here + // must use nativeRaf in order to fire in the next frame + Ionic.dom.raf(step); + } + else { + stopScroll = true; + self.isScrolling = false; + el.style.transform = el.style.webkitTransform = ''; + done(); + } + } + // start scroll loop + self.isScrolling = true; + // chill out for a frame first + Ionic.dom.write(function () { + Ionic.dom.write(function (timeStamp) { + startTime = timeStamp; + step(timeStamp); + }); + }); + return promise; + }; + Scroll.prototype.scrollToTop = function (duration) { + return this.scrollTo(0, 0, duration); + }; + Scroll.prototype.scrollToBottom = function (duration) { + var y = 0; + if (this.$el) { + y = this.$el.scrollHeight - this.$el.clientHeight; + } + return this.scrollTo(0, y, duration); + }; + Scroll.prototype["componentDidunload"] = function () { + this.gesture && this.gesture.destroy(); + this.gesture = this.detail = this.detail.event = null; + }; + Scroll.prototype.render = function () { + return h(0, 0); + }; + return Scroll; +}()); + +exports['ION-GESTURE'] = Gesture; +exports['ION-SCROLL'] = Scroll; +}, + + +/***************** ion-gesture *****************/ +[ +/** ion-gesture: [0] tag **/ +'ION-GESTURE', + +/** ion-gesture: [1] host **/ +{}, + +/** ion-gesture: [2] listeners **/ +[ + [ + /***** ion-gesture listener[0] document:mousemove -> document:mousemove() *****/ + /* [0] eventMethod ***/ 'onMoveMove', + /* [1] eventName *****/ 'document:mousemove', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-gesture listener[1] document:mouseup -> document:mouseup() *****/ + /* [0] eventMethod ***/ 'onMouseUp', + /* [1] eventName *****/ 'document:mouseup', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-gesture listener[2] mousedown -> mousedown() *****/ + /* [0] eventMethod ***/ 'onMouseDown', + /* [1] eventName *****/ 'mousedown', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-gesture listener[3] touchend -> touchend() *****/ + /* [0] eventMethod ***/ 'onTouchEnd', + /* [1] eventName *****/ 'touchend', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-gesture listener[4] touchmove -> touchmove() *****/ + /* [0] eventMethod ***/ 'onTouchMove', + /* [1] eventName *****/ 'touchmove', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-gesture listener[5] touchstart -> touchstart() *****/ + /* [0] eventMethod ***/ 'onTouchStart', + /* [1] eventName *****/ 'touchstart', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ] +], + +/** ion-gesture: [3] states **/ +0 /* no states */, + +/** ion-gesture: [4] propWillChanges **/ +0 /* no prop will change methods */, + +/** ion-gesture: [5] propDidChanges **/ +[ + [ + /***** ion-gesture prop did change [0] ***** / + /* [0] prop name **/ 'block', + /* [1] call fn *****/ 'blockChange' + ] +] + +], + +/***************** ion-scroll *****************/ +[ +/** ion-scroll: [0] tag **/ +'ION-SCROLL', + +/** ion-scroll: [1] host **/ +{}, + +/** ion-scroll: [2] listeners **/ +[ + [ + /***** ion-scroll listener[0] scroll -> scroll() *****/ + /* [0] eventMethod ***/ 'onNativeScroll', + /* [1] eventName *****/ 'scroll', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-scroll listener[1] touchend -> touchend() *****/ + /* [0] eventMethod ***/ 'onTouchEnd', + /* [1] eventName *****/ 'touchend', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-scroll listener[2] touchmove -> touchmove() *****/ + /* [0] eventMethod ***/ 'onTouchMove', + /* [1] eventName *****/ 'touchmove', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ], + [ + /***** ion-scroll listener[3] touchstart -> touchstart() *****/ + /* [0] eventMethod ***/ 'onTouchStart', + /* [1] eventName *****/ 'touchstart', + /* [2] eventCapture **/ 0 /* false */, + /* [3] eventPassive **/ 1 /* true **/, + /* [4] eventEnabled **/ 1 /* true **/ + ] +] + +] +) \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.css b/packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.css new file mode 100644 index 0000000000..52e2c403dc --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.css @@ -0,0 +1,23 @@ +/*! Built with http://stenciljs.com */ + +ion-skeleton-text { + display: inline-block; + width: 100%; + pointer-events: none; + user-select: none; +} + +ion-skeleton-text span { + display: inline-block; + font-size: 0.8rem; + background-color: #ececec; +} + +ion-item.hydrated, +ion-item-divider.hydrated, +ion-label.hydrated, +ion-list.hydrated, +ion-list-header.hydrated, +ion-skeleton-text.hydrated { + visibility: inherit; +} \ No newline at end of file diff --git a/packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.js b/packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.js new file mode 100644 index 0000000000..126638cd8f --- /dev/null +++ b/packages/core-hn-demo/www/build/app/ion-item.ion-item-divider.ion-label.ion-list.ion-l.js @@ -0,0 +1,336 @@ +/*! Built with http://stenciljs.com */ + +App.defineComponents( + +/**** module id ****/ +'ion-item.ion-item-divider.ion-label.ion-list.ion-l', + +/**** component modules ****/ +function importComponent(exports, h, t, Ionic) { +function createThemedClasses(mode, color, classList) { + var allClassObj = {}; + return classList.split(' ') + .reduce(function (classObj, classString) { + classObj[classString] = true; + if (mode) { + classObj[classString + "-" + mode] = true; + if (color) { + classObj[classString + "-" + color] = true; + classObj[classString + "-" + mode + "-" + color] = true; + } + } + return classObj; + }, allClassObj); +} + +var __assign = (undefined && undefined.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +var Item = (function () { + function Item() { + this.childStyles = Object.create(null); + // _ids: number = -1; + // _inputs: Array = []; + // _label: Label; + // _viewLabel: boolean = true; + // _name: string = 'item'; + // _hasReorder: boolean; + // /** + // * @hidden + // */ + // id: string; + // /** + // * @hidden + // */ + // labelId: string = null; + // constructor( + // form: Form, + // config: Config, + // elementRef: ElementRef, + // renderer: Renderer, + // @Optional() reorder: ItemReorder + // ) { + // super(config, elementRef, renderer, 'item'); + // this._setName(elementRef); + // this._hasReorder = !!reorder; + // this.id = form.nextId().toString(); + // // auto add "tappable" attribute to ion-item components that have a click listener + // if (!(renderer).orgListen) { + // (renderer).orgListen = renderer.listen; + // renderer.listen = function(renderElement: HTMLElement, name: string, callback: Function): Function { + // if (name === 'click' && renderElement.setAttribute) { + // renderElement.setAttribute('tappable', ''); + // } + // return (renderer).orgListen(renderElement, name, callback); + // }; + // } + // } + // /** + // * @hidden + // */ + // registerInput(type: string) { + // this._inputs.push(type); + // return this.id + '-' + (++this._ids); + // } + // /** + // * @hidden + // */ + // ngAfterContentInit() { + // if (this._viewLabel && this._inputs.length) { + // let labelText = this.getLabelText().trim(); + // this._viewLabel = (labelText.length > 0); + // } + // if (this._inputs.length > 1) { + // this.setElementClass('item-multiple-inputs', true); + // } + // } + // /** + // * @hidden + // */ + // _updateColor(newColor: string, componentName?: string) { + // componentName = componentName || 'item'; // item-radio + // this._setColor(newColor, componentName); + // } + // /** + // * @hidden + // */ + // _setName(elementRef: ElementRef) { + // let nodeName = elementRef.nativeElement.nodeName.replace('ION-', ''); + // if (nodeName === 'LIST-HEADER' || nodeName === 'ITEM-DIVIDER') { + // this._name = nodeName; + // } + // } + // /** + // * @hidden + // */ + // getLabelText(): string { + // return this._label ? this._label.text : ''; + // } + // /** + // * @hidden + // */ + // @ContentChild(Label) + // set contentLabel(label: Label) { + // if (label) { + // this._label = label; + // this.labelId = label.id = ('lbl-' + this.id); + // if (label.type) { + // this.setElementClass('item-label-' + label.type, true); + // } + // this._viewLabel = false; + // } + // } + // /** + // * @hidden + // */ + // @ViewChild(Label) + // set viewLabel(label: Label) { + // if (!this._label) { + // this._label = label; + // } + // } + // /** + // * @hidden + // */ + // @ContentChildren(Button) + // set _buttons(buttons: QueryList