diff --git a/docs/app/components/snippets/content-events-1.js b/docs/app/components/snippets/content-events-1.js
index c2255a63..b78e97e1 100644
--- a/docs/app/components/snippets/content-events-1.js
+++ b/docs/app/components/snippets/content-events-1.js
@@ -1,6 +1,6 @@
import Component from '@glimmer/component';
import { action } from '@ember/object';
-import { runTask, cancelTask } from 'ember-lifeline';
+import { task, timeout } from 'ember-concurrency';
export default class extends Component {
notifications = [
@@ -17,23 +17,17 @@ export default class extends Component {
@action
open(dropdown) {
- if (this.closeTimer) {
- cancelTask(this, this.closeTimer);
- this.closeTimer = null;
- } else {
- dropdown.actions.open();
- }
+ this.closeLaterTask.cancelAll();
+ dropdown.actions.open();
}
@action
closeLater(dropdown) {
- this.closeTimer = runTask(
- this,
- () => {
- this.closeTimer = null;
- dropdown.actions.close();
- },
- 200,
- );
+ this.closeLaterTask.perform(dropdown);
}
+
+ closeLaterTask = task(async (dropdown) => {
+ await timeout(200);
+ dropdown.actions.close();
+ });
}
diff --git a/docs/app/controllers/public-pages/docs/content-events.js b/docs/app/controllers/public-pages/docs/content-events.js
index 9435e238..ca0f1e9f 100644
--- a/docs/app/controllers/public-pages/docs/content-events.js
+++ b/docs/app/controllers/public-pages/docs/content-events.js
@@ -1,41 +1,6 @@
import Controller from '@ember/controller';
-import { runTask, cancelTask } from 'ember-lifeline';
-import { action } from '@ember/object';
import ContentEvents1Component from '../../../components/snippets/content-events-1';
export default class extends Controller {
contentEvents1Component = ContentEvents1Component;
-
- notifications = [
- { text: 'Edward' },
- { text: 'Jonathan' },
- { text: 'Tom' },
- { text: 'Eric' },
- ];
-
- prevent(e) {
- return e.stopImmediatePropagation();
- }
-
- @action
- open(dropdown) {
- if (this.closeTimer) {
- cancelTask(this, this.closeTimer);
- this.closeTimer = null;
- } else {
- dropdown.actions.open();
- }
- }
-
- @action
- closeLater(dropdown) {
- this.closeTimer = runTask(
- this,
- () => {
- this.closeTimer = null;
- dropdown.actions.close();
- },
- 200,
- );
- }
}
diff --git a/docs/package.json b/docs/package.json
index f27066b2..6fb4f94b 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -73,7 +73,6 @@
"ember-code-snippet": "git://github.com/ef4/ember-code-snippet.git#d054b697098ad52481c94a952ccf8d89ba1f25fe",
"ember-concurrency": "^4.0.4",
"ember-fetch": "^8.1.2",
- "ember-lifeline": "^7.0.0",
"ember-load-initializers": "^3.0.1",
"ember-modifier": "^4.2.0",
"ember-page-title": "^9.0.1",
diff --git a/ember-basic-dropdown/package.json b/ember-basic-dropdown/package.json
index ecc45438..13efad8d 100644
--- a/ember-basic-dropdown/package.json
+++ b/ember-basic-dropdown/package.json
@@ -68,7 +68,6 @@
"decorator-transforms": "^2.3.0",
"ember-element-helper": "^0.8.7",
"ember-modifier": "^4.2.0",
- "ember-lifeline": "^7.0.0",
"ember-style-modifier": "^4.4.0",
"ember-truth-helpers": "^4.0.3"
},
diff --git a/ember-basic-dropdown/src/components/basic-dropdown-content.ts b/ember-basic-dropdown/src/components/basic-dropdown-content.ts
index f18c4ff0..bf905658 100644
--- a/ember-basic-dropdown/src/components/basic-dropdown-content.ts
+++ b/ember-basic-dropdown/src/components/basic-dropdown-content.ts
@@ -11,7 +11,6 @@ import hasMoved from '../utils/has-moved.ts';
import { isTesting } from '@embroider/macros';
import { modifier } from 'ember-modifier';
import type { Dropdown, TRootEventType } from './basic-dropdown.ts';
-import { runTask } from 'ember-lifeline';
export interface BasicDropdownContentSignature {
Element: Element;
@@ -205,11 +204,8 @@ export default class BasicDropdownContent extends Component {
- if (!this.args.dropdown) {
- return;
- }
-
- this.args.dropdown.actions.reposition();
- });
+ this.args.dropdown.actions.reposition();
}
@action
removeGlobalEvents(): void {
- window.removeEventListener('resize', this.runloopAwareRepositionBound);
- window.removeEventListener(
- 'orientationchange',
- this.runloopAwareRepositionBound,
- );
+ window.removeEventListener('resize', this.repositionBound);
+ window.removeEventListener('orientationchange', this.repositionBound);
}
touchMoveHandlerBound = (e: TouchEvent) => this.touchMoveHandler(e);
- runloopAwareRepositionBound = () => this.runloopAwareReposition();
+ repositionBound = () => this.reposition();
touchStartHandlerBound = () => this.touchStartHandler();
// Methods
@@ -522,15 +509,15 @@ export default class BasicDropdownContent extends Component {
- el.addEventListener('scroll', this.runloopAwareRepositionBound);
+ el.addEventListener('scroll', this.repositionBound);
});
}
removeScrollEvents(): void {
- window.removeEventListener('scroll', this.runloopAwareRepositionBound);
+ window.removeEventListener('scroll', this.repositionBound);
this.scrollableAncestors.forEach((el) => {
- el.removeEventListener('scroll', this.runloopAwareRepositionBound);
+ el.removeEventListener('scroll', this.repositionBound);
});
}
}
diff --git a/ember-basic-dropdown/src/components/basic-dropdown.ts b/ember-basic-dropdown/src/components/basic-dropdown.ts
index 20c830b7..0387791f 100644
--- a/ember-basic-dropdown/src/components/basic-dropdown.ts
+++ b/ember-basic-dropdown/src/components/basic-dropdown.ts
@@ -2,7 +2,6 @@ import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { guidFor } from '@ember/object/internals';
-import { scheduleTask } from 'ember-lifeline';
import calculatePosition from '../utils/calculate-position.ts';
import type {
CalculatePosition,
@@ -12,6 +11,7 @@ import type {
} from '../utils/calculate-position.ts';
import { getOwner } from '@ember/application';
import type Owner from '@ember/owner';
+import { schedule } from '@ember/runloop';
import type { ComponentLike } from '@glint/template';
import type { BasicDropdownTriggerSignature } from './basic-dropdown-trigger.ts';
import type { BasicDropdownContentSignature } from './basic-dropdown-content.ts';
@@ -166,7 +166,8 @@ export default class BasicDropdown extends Component {
this._previousDisabled !== UNINITIALIZED &&
this._previousDisabled !== newVal
) {
- scheduleTask(this, 'actions', () => {
+ // eslint-disable-next-line ember/no-runloop
+ schedule('actions', () => {
if (newVal && this.publicAPI.isOpen) {
// eslint-disable-next-line ember/no-side-effects
this.isOpen = false;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 39b2c404..7dc3a687 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -38,9 +38,6 @@ importers:
ember-basic-dropdown:
specifier: workspace:*
version: link:../ember-basic-dropdown
- dependenciesMeta:
- ember-basic-dropdown:
- injected: true
devDependencies:
'@babel/core':
specifier: ^7.27.1
@@ -156,9 +153,6 @@ importers:
ember-fetch:
specifier: ^8.1.2
version: 8.1.2(encoding@0.1.13)
- ember-lifeline:
- specifier: ^7.0.0
- version: 7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))
ember-load-initializers:
specifier: ^3.0.1
version: 3.0.1(ember-source@6.4.0(@glimmer/component@2.0.0)(rsvp@4.8.5))
@@ -258,6 +252,9 @@ importers:
webpack:
specifier: ^5.99.8
version: 5.99.8
+ dependenciesMeta:
+ ember-basic-dropdown:
+ injected: true
ember-basic-dropdown:
dependencies:
@@ -276,9 +273,6 @@ importers:
ember-element-helper:
specifier: ^0.8.7
version: 0.8.7(ember-source@6.4.0(@glimmer/component@2.0.0)(rsvp@4.8.5))
- ember-lifeline:
- specifier: ^7.0.0
- version: 7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))
ember-modifier:
specifier: ^4.2.0
version: 4.2.0(@babel/core@7.27.1)(ember-source@6.4.0(@glimmer/component@2.0.0)(rsvp@4.8.5))
@@ -396,9 +390,6 @@ importers:
version: 5.99.8
test-app:
- dependenciesMeta:
- ember-basic-dropdown:
- injected: true
devDependencies:
'@babel/core':
specifier: ^7.27.1
@@ -505,9 +496,6 @@ importers:
ember-fetch:
specifier: ^8.1.2
version: 8.1.2(encoding@0.1.13)
- ember-lifeline:
- specifier: ^7.0.0
- version: 7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))
ember-load-initializers:
specifier: ^3.0.1
version: 3.0.1(ember-source@6.4.0(@glimmer/component@2.0.0)(rsvp@4.8.5))
@@ -592,6 +580,9 @@ importers:
webpack:
specifier: ^5.99.8
version: 5.99.8
+ dependenciesMeta:
+ ember-basic-dropdown:
+ injected: true
packages:
@@ -3858,15 +3849,6 @@ packages:
peerDependencies:
ember-source: ^3.25.0 || >=4.0.0
- ember-lifeline@7.0.0:
- resolution: {integrity: sha512-2l51NzgH5vjN972zgbs+32rnXnnEFKB7qsSpJF+lBI4V5TG6DMy4SfowC72ZEuAtS58OVfwITbOO+RnM21EdpA==}
- engines: {node: 16.* || >= 18}
- peerDependencies:
- '@ember/test-helpers': '>= 1.0.0'
- peerDependenciesMeta:
- '@ember/test-helpers':
- optional: true
-
ember-load-initializers@3.0.1:
resolution: {integrity: sha512-qV3vxJKw5+7TVDdtdLPy8PhVsh58MlK8jwzqh5xeOwJPNP7o0+BlhvwoIlLYTPzGaHdfjEIFCgVSyMRGd74E1g==}
engines: {node: '>= 18.*'}
@@ -12607,14 +12589,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ember-lifeline@7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)):
- dependencies:
- '@embroider/addon-shim': 1.10.0
- optionalDependencies:
- '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)
- transitivePeerDependencies:
- - supports-color
-
ember-load-initializers@3.0.1(ember-source@6.4.0(@glimmer/component@2.0.0)(rsvp@4.8.5)):
dependencies:
ember-source: 6.4.0(@glimmer/component@2.0.0)(rsvp@4.8.5)
diff --git a/test-app/package.json b/test-app/package.json
index bfbb3c51..316243c6 100644
--- a/test-app/package.json
+++ b/test-app/package.json
@@ -70,7 +70,6 @@
"ember-cli-sri": "^2.1.1",
"ember-cli-terser": "^4.0.2",
"ember-fetch": "^8.1.2",
- "ember-lifeline": "^7.0.0",
"ember-load-initializers": "^3.0.1",
"ember-modifier": "^4.2.0",
"ember-page-title": "^9.0.1",
diff --git a/test-app/tests/integration/components/basic-dropdown-test.js b/test-app/tests/integration/components/basic-dropdown-test.js
index 726e46fa..f2efa623 100644
--- a/test-app/tests/integration/components/basic-dropdown-test.js
+++ b/test-app/tests/integration/components/basic-dropdown-test.js
@@ -1,4 +1,3 @@
-import { scheduleTask } from 'ember-lifeline';
import { registerDeprecationHandler } from '@ember/debug';
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
@@ -675,8 +674,7 @@ module('Integration | Component | basic-dropdown', function (hooks) {
this.isDisabled = false;
this.toggleDisabled = () => this.toggleProperty('isDisabled');
- this.registerAPI = (api) =>
- scheduleTask(this, 'actions', () => this.set('remoteController', api));
+ this.registerAPI = (api) => this.set('remoteController', api);
await render(hbs`
Click me
diff --git a/test-app/tests/integration/components/content-test.js b/test-app/tests/integration/components/content-test.js
index 67dc8851..25bfce69 100644
--- a/test-app/tests/integration/components/content-test.js
+++ b/test-app/tests/integration/components/content-test.js
@@ -1,6 +1,5 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
-import { runTask } from 'ember-lifeline';
import { hbs } from 'ember-cli-htmlbars';
import { render, click, triggerEvent, settled } from '@ember/test-helpers';
@@ -563,13 +562,11 @@ module('Integration | Component | basic-dropdown-content', function (hooks) {
`);
- await runTask(this, () => {
- let target = this.element
- .getRootNode()
- .querySelector('#content-target-div');
- let span = document.createElement('SPAN');
- target.appendChild(span);
- });
+ let target = this.element
+ .getRootNode()
+ .querySelector('#content-target-div');
+ let span = document.createElement('SPAN');
+ target.appendChild(span);
await settled();
assert.strictEqual(repositions, 2, 'It was repositioned twice');
});
@@ -595,9 +592,7 @@ module('Integration | Component | basic-dropdown-content', function (hooks) {
{{/if}}
`);
- await runTask(this, () => {
- this.set('divVisible', true);
- });
+ this.set('divVisible', true);
await settled();
assert.strictEqual(repositions, 2, 'It was repositioned twice');
});
@@ -631,13 +626,11 @@ module('Integration | Component | basic-dropdown-content', function (hooks) {
`);
- runTask(this, () => {
- let target = this.element
- .getRootNode()
- .querySelector('#content-target-div');
- let span = document.createElement('SPAN');
- target.appendChild(span);
- });
+ let target = this.element
+ .getRootNode()
+ .querySelector('#content-target-div');
+ let span = document.createElement('SPAN');
+ target.appendChild(span);
});
test('A renderInPlace component is repositioned if the window scrolls', async function (assert) {