Merge pull request #229 from hashicorp/feature-loading-bar

Feature loading bar
This commit is contained in:
Susmitha Girumala authored and GitHub committed 2020-09-25 21:38:23 -04:00
commit ae36654bc2
28 files changed
+177 -7

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
import Helper from '@ember/component/helper';
import { inject as service } from '@ember/service';
/**
* This helper returns true or false based on the state of the ember-loading
* service's `isLoading` attribute.
*/
export default class extends Helper {
// =services
@service loading;
// =methods
/**
* Returns true if "something" is loading according to ember-loading.
* @return {boolean}
*/
compute() {
return this.loading.isLoading;
}
}
+13
View File
@@ -5,6 +5,7 @@ import { getOwner } from '@ember/application';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { later } from '@ember/runloop';
import loading from 'ember-loading/decorator';
/**
* Entry route for the application.
@@ -60,11 +61,23 @@ export default class ApplicationRoute extends Route.extend(
this.session.invalidate();
}
/**
* Hooks into ember-loading to kick off loading indicator in the
* application template.
* @return {boolean} always returns true
*/
@action
@loading
loading() {
return true;
}
/**
* Invalidates the session if a 401 error occurs and returns false to
* prevent further error handling.
* Returns true in all other cases, allowing error handling to occur (such
* as displaying the `error.hbs` template, if one exists).
* @param {Error} e
*/
@action
error(e) {
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeAuthMethodsRoute extends Route {
// =services
@@ -44,6 +45,7 @@ export default class ScopesScopeAuthMethodsRoute extends Route {
* @param {AuthMethodModel} authMethod
*/
@action
@loading
async save(authMethod) {
const { isNew } = authMethod;
try {
@@ -67,6 +69,7 @@ export default class ScopesScopeAuthMethodsRoute extends Route {
* @param {AuthMethodModel} authMethod
*/
@action
@loading
async delete(authMethod) {
try {
await authMethod.destroyRecord();
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import loading from 'ember-loading/decorator';
export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route {
// =services
@@ -40,6 +41,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route
* @param {AccountModel} account
*/
@action
@loading
async save(account, password) {
const { isNew } = account;
const adapterOptions = {};
@@ -67,6 +69,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route
* @param {AccountModel} account
*/
@action
@loading
async delete(account) {
try {
await account.destroyRecord();
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import loading from 'ember-loading/decorator';
export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRoute extends Route {
// =services
@@ -33,6 +34,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRout
* @param {string} password
*/
@action
@loading
async setPassword(account, password) {
try {
await account.setPassword(password);
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeAuthenticateMethodRoute extends Route {
// =services
@@ -38,6 +39,7 @@ export default class ScopesScopeAuthenticateMethodRoute extends Route {
* If authentication fails, notifies with an alert.
*/
@action
@loading
async authenticate(creds) {
this.resetCredentials();
const authenticatorName = 'authenticator:password';
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeGroupsRoute extends Route {
// =services
@@ -44,6 +45,7 @@ export default class ScopesScopeGroupsRoute extends Route {
* @param {GroupModel} group
*/
@action
@loading
async save(group) {
const { isNew } = group;
try {
@@ -64,6 +66,7 @@ export default class ScopesScopeGroupsRoute extends Route {
* @param {GroupModel} group
*/
@action
@loading
async delete(group) {
try {
await group.destroyRecord();
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { hash } from 'rsvp';
import loading from 'ember-loading/decorator';
export default class ScopesScopeGroupsGroupAddMembersRoute extends Route {
// =services
@@ -63,6 +64,7 @@ export default class ScopesScopeGroupsGroupAddMembersRoute extends Route {
* @param {[string]} userIDs
*/
@action
@loading
async addMembers(group, userIDs) {
try {
await group.addMembers(userIDs);
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import { hash, all } from 'rsvp';
import loading from 'ember-loading/decorator';
export default class ScopesScopeGroupsGroupMembersRoute extends Route {
// =services
@@ -36,6 +37,7 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route {
* @param {UserModel} member
*/
@action
@loading
async removeMember(group, member) {
try {
await group.removeMember(member.id);
+2
View File
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeOrgsRoute extends Route {
// =services
@@ -48,6 +49,7 @@ export default class ScopesScopeOrgsRoute extends Route {
* @param {Event} e
*/
@action
@loading
async save(org) {
const { isNew } = org;
try {
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsRoute extends Route {
// =services
@@ -60,6 +61,7 @@ export default class ScopesScopeProjectsRoute extends Route {
* @param {Event} e
*/
@action
@loading
async save(project) {
const { isNew } = project;
try {
@@ -80,6 +82,7 @@ export default class ScopesScopeProjectsRoute extends Route {
* @param {ProjectModel} project
*/
@action
@loading
async delete(project) {
try {
await project.destroyRecord();
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route {
// =services
@@ -38,6 +39,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route {
* @param {Event} e
*/
@action
@loading
async save(hostCatalog) {
const { isNew } = hostCatalog;
try {
@@ -61,6 +63,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route {
* @param {ProjectModel} project
*/
@action
@loading
async delete(project) {
try {
await project.destroyRecord();
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRoute extends Route {
// =services
@@ -43,6 +44,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRo
* @param {Event} e
*/
@action
@loading
async save(hostSet) {
try {
const { isNew } = hostSet;
@@ -66,6 +68,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRo
* @param {HostSetModel} hostSet
*/
@action
@loading
async delete(hostSet) {
try {
await hostSet.destroyRecord();
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { hash } from 'rsvp';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHostSetAddHostsRoute extends Route {
// =services
@@ -87,6 +88,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHo
* @param {HostSetModel} hostSet
*/
@action
@loading
async addHosts(hostSet, hostIDs) {
try {
await hostSet.addHosts(hostIDs);
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { hash, all } from 'rsvp';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHostSetHostsRoute extends Route {
// =services
@@ -35,6 +36,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHo
* @param {HostModel} host
*/
@action
@loading
async removeHost(hostSet, host) {
try {
const scopeID = this.modelFor('scopes.scope.projects.project').id;
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute extends Route {
// =services
@@ -43,6 +44,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute
* @param {Event} e
*/
@action
@loading
async save(host) {
try {
const { isNew } = host;
@@ -66,6 +68,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute
* @param {HostModel} host
*/
@action
@loading
async delete(host) {
try {
await host.destroyRecord();
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectTargetsRoute extends Route {
// =services
@@ -38,6 +39,7 @@ export default class ScopesScopeProjectsProjectTargetsRoute extends Route {
* @param {Event} e
*/
@action
@loading
async save(target) {
const { isNew } = target;
try {
@@ -58,6 +60,7 @@ export default class ScopesScopeProjectsProjectTargetsRoute extends Route {
* @param {TargetModel} target
*/
@action
@loading
async delete(target) {
try {
await target.destroyRecord();
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { all } from 'rsvp';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectTargetsTargetAddHostSetsRoute extends Route {
// =services
@@ -70,6 +71,7 @@ export default class ScopesScopeProjectsProjectTargetsTargetAddHostSetsRoute ext
// =actions
@action
@loading
async save(target, hostSetIDs) {
try {
await target.addHostSets(hostSetIDs);
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { all, hash } from 'rsvp';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import loading from 'ember-loading/decorator';
export default class ScopesScopeProjectsProjectTargetsTargetHostSetsRoute extends Route {
// =services
@@ -53,6 +54,7 @@ export default class ScopesScopeProjectsProjectTargetsTargetHostSetsRoute extend
* @param {HostSetModel} hostSet
*/
@action
@loading
async removeHostSet(target, hostSet) {
try {
await target.removeHostSet(hostSet.id);
+3
View File
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeRolesRoute extends Route {
// =services
@@ -44,6 +45,7 @@ export default class ScopesScopeRolesRoute extends Route {
* @param {RoleModel} role
*/
@action
@loading
async save(role) {
const { isNew } = role;
try {
@@ -64,6 +66,7 @@ export default class ScopesScopeRolesRoute extends Route {
* @param {RoleModel} role
*/
@action
@loading
async delete(role) {
try {
await role.destroyRecord();
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { hash } from 'rsvp';
import loading from 'ember-loading/decorator';
export default class ScopesScopeRolesRoleAddPrincipalsRoute extends Route {
// =services
@@ -57,6 +58,7 @@ export default class ScopesScopeRolesRoleAddPrincipalsRoute extends Route {
* @param {[string]} principalIDs
*/
@action
@loading
async addPrincipals(role, principalIDs) {
try {
await role.addPrincipals(principalIDs);
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeRolesRoleGrantsRoute extends Route {
// =services
@@ -54,6 +55,7 @@ export default class ScopesScopeRolesRoleGrantsRoute extends Route {
* @param {RoleModel} role
*/
@action
@loading
async save(role) {
try {
await role.saveGrants();
@@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import { all } from 'rsvp';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import loading from 'ember-loading/decorator';
export default class ScopesScopeRolesRolePrincipalsRoute extends Route {
// =services
@@ -60,6 +61,7 @@ export default class ScopesScopeRolesRolePrincipalsRoute extends Route {
* @param {UserModel, GroupModel} principal
*/
@action
@loading
async removePrincipal(principal) {
try {
const role = this.modelFor('scopes.scope.roles.role');
+3
View File
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
export default class ScopesScopeUsersRoute extends Route {
// =services
@@ -45,6 +46,7 @@ export default class ScopesScopeUsersRoute extends Route {
* @param {Event} e
*/
@action
@loading
async save(user) {
const { isNew } = user;
try {
@@ -65,6 +67,7 @@ export default class ScopesScopeUsersRoute extends Route {
* @param {UserModel} user
*/
@action
@loading
async delete(user) {
try {
await user.destroyRecord();
+25
View File
@@ -40,3 +40,28 @@
}
}
}
.rose-header {
position: relative;
&.loading {
&::after {
content: " ";
position: absolute;
top: 100%;
left: 0;
right: 0;
height: 3px;
background: repeating-linear-gradient(to right, #fff, #fff, var(--info), #fff, #fff);
background-size: 200% auto;
background-position: 0 100%;
animation: gradient 1s linear infinite;
@keyframes gradient {
0% { background-position: 0 0; }
100% { background-position: -200% 0; }
}
}
}
}
+1 -3
View File
@@ -4,9 +4,8 @@
<Rose::Layout::Global as |layout|>
<layout.header>
<Rose::Header as |header|>
<Rose::Header class="{{if (is-loading) " loading"}}" as |header|>
<header.brand @logo="logo-boundary" @text={{app-name}} />
{{#if this.session.isAuthenticated}}
<header.utilities as |utilities|>
<utilities.dropdown
@@ -25,7 +24,6 @@
</utilities.dropdown>
</header.utilities>
{{/if}}
</Rose::Header>
</layout.header>
+1
View File
@@ -63,6 +63,7 @@
"ember-inline-svg": "^1.0.0",
"ember-intl": "^5.1.1",
"ember-load-initializers": "^2.1.1",
"ember-loading": "^0.4.0",
"ember-maybe-import-regenerator": "^0.1.6",
"ember-modifier": "^1.0.3",
"ember-notify": "^6.0.0",
+59 -4
View File
@@ -4764,7 +4764,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
babel-core@^6.26.0, babel-core@^6.26.3:
babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.26.3:
version "6.26.3"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
@@ -5087,6 +5087,11 @@ babel-plugin-htmlbars-inline-precompile@^3.0.1:
resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.1.0.tgz#85085b50385277f2b331ebd54e22fa91aadc24e8"
integrity sha512-ar6c4YVX6OV7Dzpq7xRyllQrHwVEzJf41qysYULnD6tu6TS+y1FxT2VcEvMC6b9Rq9xoHMzvB79HO3av89JCGg==
babel-plugin-htmlbars-inline-precompile@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.2.0.tgz#c4882ea875d0f5683f0d91c1f72e29a4f14b5606"
integrity sha512-IUeZmgs9tMUGXYu1vfke5I18yYJFldFGdNFQOWslXTnDWXzpwPih7QFduUqvT+awDpDuNtXpdt5JAf43Q1Hhzg==
babel-plugin-istanbul@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
@@ -8756,7 +8761,7 @@ ember-cli-babel@7.19.0:
rimraf "^3.0.1"
semver "^5.5.0"
ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.9.2:
ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.2:
version "6.18.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957"
integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==
@@ -8931,6 +8936,26 @@ ember-cli-htmlbars@^4.0.0, ember-cli-htmlbars@^4.2.2:
strip-bom "^4.0.0"
walk-sync "^2.0.2"
ember-cli-htmlbars@^4.2.3:
version "4.4.0"
resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.4.0.tgz#7ca17d5ca8f7550984346d9e6e93da0c3323f8d9"
integrity sha512-ohgctqk7dXIZR4TgN0xRoUYltWhghFJgqmtuswQTpZ7p74RxI9PKx+E8WV/95mGcPzraesvMNBg5utQNvcqgNg==
dependencies:
"@ember/edition-utils" "^1.2.0"
babel-plugin-htmlbars-inline-precompile "^3.2.0"
broccoli-debug "^0.6.5"
broccoli-persistent-filter "^2.3.1"
broccoli-plugin "^3.1.0"
common-tags "^1.8.0"
ember-cli-babel-plugin-helpers "^1.1.0"
fs-tree-diff "^2.0.1"
hash-for-dep "^1.5.1"
heimdalljs-logger "^0.1.10"
json-stable-stringify "^1.0.1"
semver "^6.3.0"
strip-bom "^4.0.0"
walk-sync "^2.0.2"
ember-cli-inject-live-reload@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.2.tgz#95edb543b386239d35959e5ea9579f5382976ac7"
@@ -9071,7 +9096,7 @@ ember-cli-typescript@3.0.0:
stagehand "^1.0.0"
walk-sync "^2.0.0"
ember-cli-typescript@^2.0.2:
ember-cli-typescript@^2.0.0-rc.2, ember-cli-typescript@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d"
integrity sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA==
@@ -9264,6 +9289,16 @@ ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-co
ember-cli-version-checker "^2.1.1"
semver "^5.4.1"
ember-concurrency@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-0.10.1.tgz#aae4528540391a7278e2c193a146b5474cad5ec2"
integrity sha512-KdvR5TEfnLov4igeIZiVueFOL0kMjkabMQrioipegey+NF23SSYThc/y2rKv109D92lTAJgC6Vp7+j2RtXqD+w==
dependencies:
babel-core "^6.24.1"
ember-cli-babel "^6.8.2"
ember-compatibility-helpers "^1.2.0"
ember-maybe-import-regenerator "^0.1.5"
ember-concurrency@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.3.0.tgz#66f90fb792687470bcee1172adc0ebf33f5e8b9c"
@@ -9342,6 +9377,15 @@ ember-data@~3.16.0:
ember-cli-typescript "^3.1.3"
ember-inflector "^3.0.1"
ember-decorators-polyfill@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ember-decorators-polyfill/-/ember-decorators-polyfill-1.1.5.tgz#49203c302ea4486618ba4866923ec657cf2c9f3d"
integrity sha512-O154i8sLoVjsiKzSqxGRfHGr+N+drT6mRrLDbNgJCnW/V5uLg/ppZFpUsrdxuXnp5Q9us3OfXV1nX2CH+7bUpA==
dependencies:
ember-cli-babel "^7.1.2"
ember-cli-version-checker "^3.1.3"
ember-compatibility-helpers "^1.2.0"
ember-disable-prototype-extensions@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/ember-disable-prototype-extensions/-/ember-disable-prototype-extensions-1.1.3.tgz#1969135217654b5e278f9fe2d9d4e49b5720329e"
@@ -9536,7 +9580,18 @@ ember-load-initializers@^2.1.1:
ember-cli-babel "^7.11.0"
ember-cli-typescript "^2.0.2"
ember-maybe-import-regenerator@^0.1.6:
ember-loading@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/ember-loading/-/ember-loading-0.4.0.tgz#4909a6585b351c9540a26bf20ab086986b427acf"
integrity sha512-x5JDBdCc0AjoMcUyTFtO3lqZ5ye2Sn4STm0dInSYm21pOmwkHB9bxMH8vyWj9JEiLKY6+Vb6PC0WbRM/SOn31Q==
dependencies:
ember-cli-babel "^7.18.0"
ember-cli-htmlbars "^4.2.3"
ember-cli-typescript "^2.0.0-rc.2"
ember-concurrency "^0.10.0"
ember-decorators-polyfill "^1.1.5"
ember-maybe-import-regenerator@^0.1.5, ember-maybe-import-regenerator@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/ember-maybe-import-regenerator/-/ember-maybe-import-regenerator-0.1.6.tgz#35d41828afa6d6a59bc0da3ce47f34c573d776ca"
integrity sha1-NdQYKK+m1qWbwNo85H80xXPXdso=