diff --git a/README.md b/README.md
index 5ddd090e..ddd0b24a 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ A lightweight contextual component based table addon that follows Ember's action
- Easy table manipulation
- Easy override to table header, body, and footer
- Contextual component for header, body, and footer, as well as loading, no data, and expanded row
+- **EXPERIMENTAL** Occlusion rendering leveraging [vertical-collection](https://github.com/html-next/vertical-collection). See [Demo](http://offirgolan.github.io/ember-light-table/#/cookbook/occlusion-rendering).
## Installation
diff --git a/addon/components/light-table.js b/addon/components/light-table.js
index 3d87fcd6..dff036a8 100644
--- a/addon/components/light-table.js
+++ b/addon/components/light-table.js
@@ -38,7 +38,7 @@ function intersections(array1, array2) {
const LightTable = Component.extend({
layout,
- classNameBindings: [':ember-light-table'],
+ classNameBindings: [':ember-light-table', 'occlusion'],
attributeBindings: ['style'],
media: service(),
@@ -159,6 +159,27 @@ const LightTable = Component.extend({
*/
breakpoints: null,
+ /**
+ * Toggles occlusion rendering functionality. Currently experimental.
+ * If set to true, you must set {{#crossLink 't.body/estimatedRowHeight:property'}}{{/crossLink}} to
+ * something other than the default value.
+ *
+ * @property occlusion
+ * @type Boolean
+ * @default False
+ */
+ occlusion: false,
+
+ /**
+ * Estimated size of a row. Used in `vertical-collection` to determine roughly the number
+ * of rows exist out of the viewport.
+ *
+ * @property estimatedRowHeight
+ * @type Number
+ * @default false
+ */
+ estimatedRowHeight: 0,
+
/**
* Table component shared options
*
@@ -170,7 +191,9 @@ const LightTable = Component.extend({
return {
height: this.get('height'),
fixedHeader: false,
- fixedFooter: false
+ fixedFooter: false,
+ occlusion: this.get('occlusion'),
+ estimatedRowHeight: this.get('estimatedRowHeight')
};
}).readOnly(),
diff --git a/addon/components/lt-body.js b/addon/components/lt-body.js
index 9aca7050..5d50e12d 100644
--- a/addon/components/lt-body.js
+++ b/addon/components/lt-body.js
@@ -316,12 +316,35 @@ export default Component.extend({
this.setupScrollOffset();
},
+ didInsertElement() {
+ this._super(...arguments);
+ if (this.get('sharedOptions.occlusion')) {
+ this._setupScrollAreaDimensions();
+ }
+ },
+
destroy() {
this._super(...arguments);
run.cancel(this._checkTargetOffsetTimer);
run.cancel(this._setTargetOffsetTimer);
},
+ /**
+ * Calculates the available height remaining in the body of the table by taking the table height defined
+ * on the light table component and subtracting the rendered height of the header.
+ * May need to extend this to include the footer.
+ *
+ * @method _setupScrollAreaDimensions
+ * @private
+ */
+ _setupScrollAreaDimensions() {
+ const lightTableContainer = this.element.parentElement;
+ const { height: totalHeight } = lightTableContainer.getBoundingClientRect();
+ const headerElem = lightTableContainer.querySelector('.lt-head-wrap');
+ const { height: headerHeight } = headerElem.getBoundingClientRect();
+ this.set('height', totalHeight - headerHeight);
+ },
+
_setupVirtualScrollbar() {
let { fixedHeader, fixedFooter } = this.get('sharedOptions');
this.set('useVirtualScrollbar', fixedHeader || fixedFooter);
@@ -423,9 +446,7 @@ export default Component.extend({
if (canSelect) {
if (e.shiftKey && multiSelect) {
- rows
- .slice(Math.min(currIndex, prevIndex), Math.max(currIndex, prevIndex) + 1)
- .forEach((r) => r.set('selected', !isSelected));
+ rows.slice(Math.min(currIndex, prevIndex), Math.max(currIndex, prevIndex) + 1).forEach((r) => r.set('selected', !isSelected));
} else if ((!multiSelectRequiresKeyboard || (e.ctrlKey || e.metaKey)) && multiSelect) {
row.toggleProperty('selected');
} else {
diff --git a/addon/styles/addon.css b/addon/styles/addon.css
index eeacbf6a..919cad6c 100644
--- a/addon/styles/addon.css
+++ b/addon/styles/addon.css
@@ -63,6 +63,28 @@
flex: 1 0 auto;
}
+.ember-light-table .lt-scrollable.vertical-collection {
+ overflow-y: auto;
+}
+
+/* This is for when useVirtualScrollbar is disabled */
+.ember-light-table.occlusion .lt-head-wrap {
+ padding-right: 14px;
+}
+
+.ember-light-table.occlusion .lt-head-wrap table {
+ display: inline
+}
+
+.ember-light-table vertical-collection {
+ display: table;
+ table-layout: fixed;
+}
+
+.ember-light-table vertical-collection occluded-content:first-of-type {
+ display: table-caption;
+}
+
.ember-light-table .align-left {
text-align: left;
}
diff --git a/addon/templates/components/lt-body.hbs b/addon/templates/components/lt-body.hbs
index 1ef8ee4f..45e2d795 100644
--- a/addon/templates/components/lt-body.hbs
+++ b/addon/templates/components/lt-body.hbs
@@ -1,20 +1,21 @@
{{#with (hash
- row=(or rowComponent (component 'lt-row'))
- spanned-row=(or spannedRowComponent (component 'lt-spanned-row'))
- infinity=(or infinityComponent (component 'lt-infinity'))
- ) as |lt|
+ row=(or rowComponent (component 'lt-row'))
+ spanned-row=(or spannedRowComponent (component 'lt-spanned-row'))
+ infinity=(or infinityComponent (component 'lt-infinity'))
+ ) as |lt|
}}
- {{#lt-scrollable
- tagName=''
- virtualScrollbar=useVirtualScrollbar
- autoHide=autoHideScrollbar
- scrollTo=targetScrollOffset
- onScrollY=(action 'onScroll')
- }}
-
-
-
-
+ {{#unless sharedOptions.occlusion}}
+ {{#lt-scrollable
+ tagName=''
+ virtualScrollbar=useVirtualScrollbar
+ autoHide=autoHideScrollbar
+ scrollTo=targetScrollOffset
+ onScrollY=(action 'onScroll')
+ }}
+
+
+
+
{{#if enableScaffolding}}
{{#each columns as |column|}}
@@ -28,36 +29,96 @@
{{else}}
{{#each rows as |row|}}
{{lt.row row columns
- data-row-id=row.rowId
- table=table
- tableActions=tableActions
- extra=extra
- enableScaffolding=enableScaffolding
- canExpand=canExpand
- canSelect=canSelect
- click=(action 'onRowClick' row)
- doubleClick=(action 'onRowDoubleClick' row)}}
+ data-row-id=row.rowId
+ table=table
+ tableActions=tableActions
+ extra=extra
+ enableScaffolding=enableScaffolding
+ canExpand=canExpand
+ canSelect=canSelect
+ click=(action 'onRowClick' row)
+ doubleClick=(action 'onRowDoubleClick' row)}}
{{yield (hash
- expanded-row=(component lt.spanned-row classes='lt-expanded-row' colspan=colspan yield=row visible=row.expanded)
- loader=(component lt.spanned-row visible=false)
- no-data=(component lt.spanned-row visible=false)
- ) rows}}
+ expanded-row=(component lt.spanned-row classes='lt-expanded-row' colspan=colspan yield=row visible=row.expanded)
+ loader=(component lt.spanned-row visible=false)
+ no-data=(component lt.spanned-row visible=false)
+ ) rows}}
{{/each}}
{{yield (hash
- loader=(component lt.spanned-row classes='lt-is-loading' colspan=colspan)
- no-data=(component lt.spanned-row classes='lt-no-data' colspan=colspan)
- expanded-row=(component lt.spanned-row visible=false)
- ) rows}}
+ loader=(component lt.spanned-row classes='lt-is-loading' colspan=colspan)
+ no-data=(component lt.spanned-row classes='lt-no-data' colspan=colspan)
+ expanded-row=(component lt.spanned-row visible=false)
+ ) rows}}
+ {{/if}}
+
+
+
+ {{#if onScrolledToBottom}}
+ {{lt.infinity rows=rows onScrolledToBottom=onScrolledToBottom scrollBuffer=scrollBuffer}}
+ {{/if}}
+
+
+ {{/lt-scrollable}}
+ {{else}}
+
+
- {{#if onScrolledToBottom}}
- {{lt.infinity rows=rows onScrolledToBottom=onScrolledToBottom scrollBuffer=scrollBuffer}}
- {{/if}}
+ {{!--#if onScrolledToBottom}} TODO figure out how to use the scrollbuffer property for infinite loading
+ lastReached=onScrolledToBottom
+ {{lt.infinity rows=rows onScrolledToBottom=onScrolledToBottom scrollBuffer=scrollBuffer}}
+ {{/if --}}
-
- {{/lt-scrollable}}
+
+
+ {{/unless}}
{{/with}}
diff --git a/package.json b/package.json
index 0abe8c04..1d797789 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,7 @@
"test": "ember try:each"
},
"dependencies": {
+ "@html-next/vertical-collection": "^1.0.0-beta.9",
"ember-cli-babel": "^6.6.0",
"ember-cli-htmlbars": "^2.0.2",
"ember-cli-string-helpers": "^1.5.0",
diff --git a/tests/dummy/app/components/cookbook/occluded-table.js b/tests/dummy/app/components/cookbook/occluded-table.js
new file mode 100644
index 00000000..4019518b
--- /dev/null
+++ b/tests/dummy/app/components/cookbook/occluded-table.js
@@ -0,0 +1,44 @@
+// BEGIN-SNIPPET occluded-table
+import Component from '@ember/component';
+import TableCommon from '../../mixins/table-common';
+import { computed } from '@ember/object';
+
+export default Component.extend(TableCommon, {
+ limit: 100,
+ columns: computed(function() {
+ return [{
+ label: 'Avatar',
+ valuePath: 'avatar',
+ width: '60px',
+ sortable: false,
+ cellComponent: 'user-avatar'
+ }, {
+ label: 'First Name',
+ valuePath: 'firstName',
+ width: '150px'
+ }, {
+ label: 'Last Name',
+ valuePath: 'lastName',
+ width: '150px'
+ }, {
+ label: 'Address',
+ valuePath: 'address',
+ width: '150px'
+ }, {
+ label: 'State',
+ valuePath: 'state',
+ width: '100px'
+ }, {
+ label: 'Country',
+ valuePath: 'country',
+ width: '100px'
+ }];
+ }),
+
+ init() {
+ this._super(...arguments);
+ this.set('page', 1);
+ this.get('fetchRecords').perform();
+ }
+});
+// END-SNIPPET
diff --git a/tests/dummy/app/router.js b/tests/dummy/app/router.js
index a620ebd6..a5bb8302 100644
--- a/tests/dummy/app/router.js
+++ b/tests/dummy/app/router.js
@@ -24,10 +24,11 @@ Router.map(function() {
this.route('cookbook', function() {
this.route('client-side');
- this.route('pagination');
this.route('custom-row');
- this.route('table-actions');
this.route('horizontal-scrolling');
+ this.route('occlusion-rendering');
+ this.route('pagination');
+ this.route('table-actions');
this.route('custom-sort-icon');
});
});
diff --git a/tests/dummy/app/routes/cookbook/occlusion-rendering.js b/tests/dummy/app/routes/cookbook/occlusion-rendering.js
new file mode 100644
index 00000000..0040140d
--- /dev/null
+++ b/tests/dummy/app/routes/cookbook/occlusion-rendering.js
@@ -0,0 +1 @@
+export { default } from '../table-route';
diff --git a/tests/dummy/app/styles/table.less b/tests/dummy/app/styles/table.less
index 1260b84a..e248e005 100644
--- a/tests/dummy/app/styles/table.less
+++ b/tests/dummy/app/styles/table.less
@@ -136,3 +136,10 @@ tfoot {
}
}
}
+
+
+.ember-light-table.occlusion {
+ .lt-row td {
+ vertical-align: middle;
+ }
+}
diff --git a/tests/dummy/app/templates/application.hbs b/tests/dummy/app/templates/application.hbs
index 7bf2183b..61faf7b6 100644
--- a/tests/dummy/app/templates/application.hbs
+++ b/tests/dummy/app/templates/application.hbs
@@ -65,12 +65,15 @@
{{#link-to 'cookbook.horizontal-scrolling' tagName="li"}}
{{link-to 'Horizontal Scrolling' 'cookbook.horizontal-scrolling'}}
{{/link-to}}
- {{#link-to 'cookbook.table-actions' tagName="li"}}
- {{link-to 'Table Actions' 'cookbook.table-actions'}}
+ {{#link-to 'cookbook.occlusion-rendering' tagName="li"}}
+ {{link-to 'Occlusion Rendering' 'cookbook.occlusion-rendering'}}
{{/link-to}}
{{#link-to 'cookbook.pagination' tagName="li"}}
{{link-to 'Pagination' 'cookbook.pagination'}}
{{/link-to}}
+ {{#link-to 'cookbook.table-actions' tagName="li"}}
+ {{link-to 'Table Actions' 'cookbook.table-actions'}}
+ {{/link-to}}
{{#link-to 'cookbook.custom-sort-icon' tagName="li"}}
{{link-to 'Custom Sort Icon' 'cookbook.custom-sort-icon'}}
{{/link-to}}
diff --git a/tests/dummy/app/templates/components/cookbook/occluded-table.hbs b/tests/dummy/app/templates/components/cookbook/occluded-table.hbs
new file mode 100644
index 00000000..bb6e0cec
--- /dev/null
+++ b/tests/dummy/app/templates/components/cookbook/occluded-table.hbs
@@ -0,0 +1,30 @@
+{{!-- BEGIN-SNIPPET occluded-table --}}
+{{#light-table table
+ height='65vh'
+ occlusion=true
+ estimatedRowHeight=50
+ as |t|}}
+
+{{!--
+ In order for `fa-sort-asc` and `fa-sort-desc` icons to work,
+ you need to have ember-font-awesome installed or manually include
+ the font-awesome assets, e.g. via a CDN.
+--}}
+
+ {{t.head
+ fixed=true
+ }}
+
+ {{#t.body
+ canSelect=false
+ onScrolledToBottom=(action 'onScrolledToBottom')
+ as |body|
+ }}
+ {{#if isLoading}}
+ {{#body.loader}}
+ {{table-loader}}
+ {{/body.loader}}
+ {{/if}}
+ {{/t.body}}
+{{/light-table}}
+{{!-- END-SNIPPET --}}
diff --git a/tests/dummy/app/templates/cookbook/occlusion-rendering.hbs b/tests/dummy/app/templates/cookbook/occlusion-rendering.hbs
new file mode 100644
index 00000000..a589764c
--- /dev/null
+++ b/tests/dummy/app/templates/cookbook/occlusion-rendering.hbs
@@ -0,0 +1,11 @@
+{{#code-panel
+ title="Occluded Table"
+ snippets=(array
+ "occluded-table.js"
+ "table-common.js"
+ "occluded-table.hbs"
+ "user-avatar.hbs"
+ "table-loader.hbs"
+ )}}
+ {{cookbook/occluded-table model=model}}
+{{/code-panel}}
diff --git a/yarn.lock b/yarn.lock
index b92890f6..05bb6537 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -86,6 +86,20 @@
dependencies:
"@glimmer/util" "^0.22.3"
+"@html-next/vertical-collection@^1.0.0-beta.9":
+ version "1.0.0-beta.9"
+ resolved "https://registry.yarnpkg.com/@html-next/vertical-collection/-/vertical-collection-1.0.0-beta.9.tgz#a23fe4d82e4ef059e955abe276f57f27269b37a5"
+ dependencies:
+ babel-plugin-transform-es2015-block-scoping "^6.24.1"
+ babel6-plugin-strip-class-callcheck "^6.0.0"
+ broccoli-funnel "^1.2.0"
+ broccoli-merge-trees "^2.0.0"
+ broccoli-rollup "^1.2.0"
+ ember-cli-babel "^6.0.0-beta.10"
+ ember-cli-htmlbars "^1.1.1"
+ ember-compatibility-helpers "^0.1.2"
+ ember-raf-scheduler "0.1.0"
+
Base64@~0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028"
@@ -462,6 +476,14 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.0"
+babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
babel-core@^5.0.0, babel-core@^5.8.38:
version "5.8.38"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558"
@@ -795,6 +817,16 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0:
babel-types "^6.24.1"
lodash "^4.2.0"
+babel-plugin-transform-es2015-block-scoping@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
babel-plugin-transform-es2015-classes@^6.23.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
@@ -1034,6 +1066,13 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
babel-template@^6.24.1, babel-template@^6.25.0:
version "6.25.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071"
@@ -1044,6 +1083,16 @@ babel-template@^6.24.1, babel-template@^6.25.0:
babylon "^6.17.2"
lodash "^4.2.0"
+babel-template@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
babel-traverse@^6.24.1, babel-traverse@^6.25.0:
version "6.25.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1"
@@ -1058,6 +1107,20 @@ babel-traverse@^6.24.1, babel-traverse@^6.25.0:
invariant "^2.2.0"
lodash "^4.2.0"
+babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.25.0:
version "6.25.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e"
@@ -1067,6 +1130,15 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.25.0:
lodash "^4.2.0"
to-fast-properties "^1.0.1"
+babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
babel6-plugin-strip-class-callcheck@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/babel6-plugin-strip-class-callcheck/-/babel6-plugin-strip-class-callcheck-6.0.0.tgz#de841c1abebbd39f78de0affb2c9a52ee228fddf"
@@ -1083,6 +1155,10 @@ babylon@^6.17.2:
version "6.17.4"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a"
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+
backbone@^1.1.2:
version "1.3.3"
resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.3.3.tgz#4cc80ea7cb1631ac474889ce40f2f8bc683b2999"
@@ -2595,7 +2671,7 @@ ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-be
clone "^2.0.0"
ember-cli-version-checker "^2.0.0"
-ember-cli-babel@^6.3.0:
+ember-cli-babel@^6.0.0-beta.10, ember-cli-babel@^6.3.0, ember-cli-babel@^6.8.2:
version "6.8.2"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.8.2.tgz#eac2785964f4743f4c815cd53c6288f00cc087d7"
dependencies:
@@ -2629,23 +2705,6 @@ ember-cli-babel@^6.6.0:
clone "^2.0.0"
ember-cli-version-checker "^2.0.0"
-ember-cli-babel@^6.8.2:
- version "6.8.2"
- resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.8.2.tgz#eac2785964f4743f4c815cd53c6288f00cc087d7"
- dependencies:
- amd-name-resolver "0.0.7"
- babel-plugin-debug-macros "^0.1.11"
- babel-plugin-ember-modules-api-polyfill "^2.0.1"
- babel-plugin-transform-es2015-modules-amd "^6.24.0"
- babel-polyfill "^6.16.0"
- babel-preset-env "^1.5.1"
- broccoli-babel-transpiler "^6.1.2"
- broccoli-debug "^0.6.2"
- broccoli-funnel "^1.0.0"
- broccoli-source "^1.1.0"
- clone "^2.0.0"
- ember-cli-version-checker "^2.0.0"
-
ember-cli-broccoli-sane-watcher@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-2.0.4.tgz#f43f42f75b7509c212fb926cd9aea86ae19264c6"
@@ -3063,6 +3122,14 @@ ember-code-snippet@^1.9.0:
glob "^4.0.4"
highlight.js "^9.5.0"
+ember-compatibility-helpers@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-0.1.2.tgz#8eb1769ad761db273fd40242b1170d9f3841d0f0"
+ dependencies:
+ babel-plugin-debug-macros "^0.1.11"
+ ember-cli-version-checker "^2.0.0"
+ semver "^5.4.1"
+
ember-component-inbound-actions@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ember-component-inbound-actions/-/ember-component-inbound-actions-1.0.1.tgz#9b354803c2d729f2d072999cc89ded69762e1dad"
@@ -3265,6 +3332,12 @@ ember-qunit@^2.1.3:
dependencies:
ember-test-helpers "^0.6.3"
+ember-raf-scheduler@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/ember-raf-scheduler/-/ember-raf-scheduler-0.1.0.tgz#a22a02d238c374499231c03ab9c5b9887c72a853"
+ dependencies:
+ ember-cli-babel "^6.6.0"
+
ember-resolver@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-4.1.0.tgz#f02aeb2f1f2e944ed47e085412a7b84f759d11df"
@@ -4295,7 +4368,7 @@ globals@^6.4.0:
version "6.4.1"
resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f"
-globals@^9.0.0, globals@^9.17.0:
+globals@^9.0.0, globals@^9.17.0, globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@@ -4929,6 +5002,10 @@ js-tokens@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+
js-yaml@3.x, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.1, js-yaml@^3.8.4:
version "3.8.4"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
@@ -6639,6 +6716,10 @@ regenerator-runtime@^0.10.0:
version "0.10.5"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+regenerator-runtime@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+
regenerator-runtime@^0.9.5:
version "0.9.6"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029"
@@ -6992,6 +7073,10 @@ semver@^4.3.1:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+semver@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+
semver@~5.1.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
@@ -7578,7 +7663,7 @@ to-array@0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
-to-fast-properties@^1.0.0, to-fast-properties@^1.0.1:
+to-fast-properties@^1.0.0, to-fast-properties@^1.0.1, to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"