diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 572934af0..2cd171445 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,7 +20,7 @@ jobs:
- name: Setup node.js
uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 20
- name: Setup yarn
run: npm install -g yarn
- name: Install dependencies
@@ -41,7 +41,7 @@ jobs:
- name: Setup node.js
uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 20
- name: Setup yarn
run: npm install -g yarn
- name: Install dependencies
@@ -102,7 +102,7 @@ jobs:
- name: Setup node.js
uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 20
- name: Setup yarn
run: npm install -g yarn
- name: Install dependencies
diff --git a/README.md b/README.md
index 969dcbd3d..bb6de3fe0 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ Ember Bootstrap works and is fully [tested](https://github.com/kaliber5/ember-bo
* Ember CLI 4.8 or above
* Bootstrap 3-5
* all modern evergreen browsers (Chrome, Firefox, Safari, Edge)
-* node.js 18+
+* node.js 20+
* FastBoot 4.0+
* Embroider: we strive (and test) for maximum compatibility with Embroider, including the most aggressive setting
(`staticComponents`) for tree shaking and code splitting. However as Embroider itself is still considered beta software,
diff --git a/package.json b/package.json
index 72639294a..d5bec29d8 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,6 @@
"lodash": "^4.18.1",
"testem": "~3.18.0",
"@embroider/addon-shim": "1.10.2",
- "pkg-entry-points": "1.1.1",
"ember-a11y-testing/ember-auto-import": "^2.10.0",
"@babel/plugin-transform-modules-systemjs": "^7.29.4",
"browserslist": "^4.28.7",
@@ -66,13 +65,14 @@
"markdown-it": "^14.3.3",
"lodash.template": "^4.18.1",
"ansi-html": "0.0.9",
- "mocha/js-yaml": "^4.3.2"
+ "mocha/js-yaml": "^4.3.2",
+ "@embroider/macros": "~1.20.7"
},
"dependencies": {
"@babel/core": "^7.29.0",
"@ember/render-modifiers": "^2.1.0",
- "@embroider/macros": "^1.8.3",
- "@embroider/util": "^1.13.3",
+ "@embroider/macros": ">=1.19.7 <1.21.0",
+ "@embroider/util": "Gaurav0/embroider-util#v1.13.5-scf.1",
"broccoli-debug": "^0.6.3",
"broccoli-funnel": "^3.0.6",
"broccoli-merge-trees": "^4.2.0",
@@ -84,7 +84,7 @@
"ember-cli-version-checker": "^5.1.2",
"ember-concurrency": "^2.1.2",
"ember-decorators": "^6.1.0",
- "ember-element-helper": "^0.7.1",
+ "ember-element-helper": "^0.8.7",
"ember-focus-trap": "^1.0.0",
"ember-on-helper": "^0.1.0",
"ember-popper-modifier": "^3.0.0",
@@ -169,7 +169,7 @@
"ember-source": ">=4.8.0"
},
"engines": {
- "node": ">= 18"
+ "node": ">= 20"
},
"publishConfig": {
"registry": "https://registry.npmjs.org"
diff --git a/tests/integration/components/bs-modal-test.js b/tests/integration/components/bs-modal-test.js
index 6155fa4f7..bcb6bf23e 100644
--- a/tests/integration/components/bs-modal-test.js
+++ b/tests/integration/components/bs-modal-test.js
@@ -1,4 +1,5 @@
-import Component from '@ember/component';
+import Component, { setComponentTemplate } from '@ember/component';
+import GlimmerComponent from '@glimmer/component';
import { module } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render, click, find, triggerEvent, settled, waitFor, waitUntil } from '@ember/test-helpers';
@@ -106,6 +107,70 @@ module('Integration | Component | bs-modal', function (hooks) {
assert.ok(submitAction.calledOnce, 'submit action has been called.');
});
+ module('custom components', function (hooks) {
+ hooks.beforeEach(function () {
+ this.CustomHeader = setComponentTemplate(
+ hbs`
`,
+ class extends GlimmerComponent {}
+ );
+ this.CustomBody = setComponentTemplate(
+ hbs`{{yield}}
`,
+ class extends GlimmerComponent {}
+ );
+ this.hide = sinon.spy();
+ });
+
+ test('it renders a curried @headerComponent and passes onClose', async function (assert) {
+ this.owner.register('component:test-component', this.CustomHeader);
+
+ await render(hbs`
+
+
+ Hello world!
+
+ `);
+
+ assert.dom('.modal .custom-header').exists({ count: 1 }, 'custom header is rendered');
+ await click('.modal .custom-close');
+ assert.ok(this.hide.calledOnce, 'onHide has been called');
+ });
+
+ test('it renders a component class passed as @headerComponent and passes onClose', async function (assert) {
+ await render(hbs`
+
+
+ Hello world!
+
+ `);
+
+ assert.dom('.modal .custom-header').exists({ count: 1 }, 'custom header is rendered');
+ await click('.modal .custom-close');
+ assert.ok(this.hide.calledOnce, 'onHide has been called');
+ });
+
+ test('it renders a curried @bodyComponent', async function (assert) {
+ this.owner.register('component:test-component', this.CustomBody);
+
+ await render(hbs`
+
+ Hello world!
+
+ `);
+
+ assert.dom('.modal .custom-body').hasText('Hello world!', 'custom body is rendered');
+ });
+
+ test('it renders a component class passed as @bodyComponent', async function (assert) {
+ await render(hbs`
+
+ Hello world!
+
+ `);
+
+ assert.dom('.modal .custom-body').hasText('Hello world!', 'custom body is rendered');
+ });
+ });
+
test('Modal has accesibility attributes with custom title', async function (assert) {
await render(hbs`
diff --git a/yarn.lock b/yarn.lock
index 8d3b570e1..7b0f554d4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1044,7 +1044,7 @@
ember-cli-version-checker "^5.1.2"
semver "^7.3.5"
-"@embroider/addon-shim@1.10.2", "@embroider/addon-shim@1.8.3", "@embroider/addon-shim@^1.0.0", "@embroider/addon-shim@^1.8.7":
+"@embroider/addon-shim@1.10.2", "@embroider/addon-shim@^1.0.0", "@embroider/addon-shim@^1.8.3", "@embroider/addon-shim@^1.8.7":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@embroider/addon-shim/-/addon-shim-1.10.2.tgz#5164c65de0fd242422594c2f94b3c5eab4ab8e36"
integrity sha512-EfI9cJ5/3QSUJtwm7x1MXrx3TEa2p7RNgSHefy7fvGm8/DP1xUFL25nST1NaHbHcqR1UhMlrTtv5iUIDoVzeQQ==
@@ -1054,29 +1054,15 @@
common-ancestor-path "^1.0.1"
semver "^7.3.8"
-"@embroider/macros@^1.0.0", "@embroider/macros@^1.10.0", "@embroider/macros@^1.8.3":
- version "1.18.0"
- resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.18.0.tgz#d79c4474667559ac9baf903e8fb89f1b00a0c45a"
- integrity sha512-KanP80XxNK4bmQ1HKTcUjy/cdCt9n7knPMLK1vzHdOFymACHo+GbhgUjXjYdOCuBTv+ZwcjL2P2XDmBcYS9r8g==
+"@embroider/macros@>=1.19.7 <1.21.0", "@embroider/macros@^1.0.0", "@embroider/macros@^1.10.0", "@embroider/macros@~1.16.0", "@embroider/macros@~1.20.7":
+ version "1.20.7"
+ resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.20.7.tgz#70a56727b45903c5c1243026f411bd30844a0bd0"
+ integrity sha512-B9KJuqeODyad6rWYFK4yKKKSR9H2OsClMzHREmEx94FrwA9/PS37ebTHWeuzLKspas7UclpYE8sBmxSbi/pWig==
dependencies:
- "@embroider/shared-internals" "3.0.0"
+ "@embroider/shared-internals" "3.2.0"
assert-never "^1.2.1"
babel-import-util "^3.0.1"
- ember-cli-babel "^7.26.6"
- find-up "^5.0.0"
- lodash "^4.17.21"
- resolve "^1.20.0"
- semver "^7.3.2"
-
-"@embroider/macros@~1.16.0":
- version "1.16.13"
- resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.16.13.tgz#3647839de7154400115e0b874bbf5aed9312a7a8"
- integrity sha512-2oGZh0m1byBYQFWEa8b2cvHJB2LzaF3DdMCLCqcRAccABMROt1G3sultnNCT30NhfdGWMEsJOT3Jm4nFxXmTRw==
- dependencies:
- "@embroider/shared-internals" "2.9.0"
- assert-never "^1.2.1"
- babel-import-util "^2.0.0"
- ember-cli-babel "^7.26.6"
+ ember-cli-babel "^7.26.6 || ^8.3.1"
find-up "^5.0.0"
lodash "^4.17.21"
resolve "^1.20.0"
@@ -1090,28 +1076,10 @@
mem "^8.0.0"
resolve.exports "^2.0.2"
-"@embroider/shared-internals@2.9.0":
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-2.9.0.tgz#5d945b92e08db163de60d82f7c388e2b7260f0cc"
- integrity sha512-8untWEvGy6av/oYibqZWMz/yB+LHsKxEOoUZiLvcpFwWj2Sipc0DcXeTJQZQZ++otNkLCWyDrDhOLrOkgjOPSg==
- dependencies:
- babel-import-util "^2.0.0"
- debug "^4.3.2"
- ember-rfc176-data "^0.3.17"
- fs-extra "^9.1.0"
- is-subdir "^1.2.0"
- js-string-escape "^1.0.1"
- lodash "^4.17.21"
- minimatch "^3.0.4"
- pkg-entry-points "^1.1.0"
- resolve-package-path "^4.0.1"
- semver "^7.3.5"
- typescript-memoize "^1.0.1"
-
-"@embroider/shared-internals@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-3.0.0.tgz#98251e6b99d36d64120361a449569ef5384b3812"
- integrity sha512-5J5ipUMCAinQS38WW7wedruq5Z4VnHvNo+ZgOduw0PtI9w0CQWx7/HE+98PBDW8jclikeF+aHwF317vc1hwuzg==
+"@embroider/shared-internals@3.2.0", "@embroider/shared-internals@^3.0.1":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-3.2.0.tgz#2379a2f320a72289bde72005dce0835359396f6a"
+ integrity sha512-TzLZnwfhhrNkdTVGGyysovvciFCwyxEgMbzF9AZMzNbFlXirhocQSpGjy9V4AQArklu4wDFRYqqe5GMKULGIkw==
dependencies:
babel-import-util "^3.0.1"
debug "^4.3.2"
@@ -1121,7 +1089,7 @@
js-string-escape "^1.0.1"
lodash "^4.17.21"
minimatch "^3.0.4"
- pkg-entry-points "^1.1.0"
+ pkg-entry-points "^1.1.1"
resolve-package-path "^4.0.1"
resolve.exports "^2.0.2"
semver "^7.3.5"
@@ -1145,25 +1113,6 @@
semver "^7.3.5"
typescript-memoize "^1.0.1"
-"@embroider/shared-internals@^3.0.1":
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-3.2.0.tgz#2379a2f320a72289bde72005dce0835359396f6a"
- integrity sha512-TzLZnwfhhrNkdTVGGyysovvciFCwyxEgMbzF9AZMzNbFlXirhocQSpGjy9V4AQArklu4wDFRYqqe5GMKULGIkw==
- dependencies:
- babel-import-util "^3.0.1"
- debug "^4.3.2"
- ember-rfc176-data "^0.3.17"
- fs-extra "^9.1.0"
- is-subdir "^1.2.0"
- js-string-escape "^1.0.1"
- lodash "^4.17.21"
- minimatch "^3.0.4"
- pkg-entry-points "^1.1.1"
- resolve-package-path "^4.0.1"
- resolve.exports "^2.0.2"
- semver "^7.3.5"
- typescript-memoize "^1.0.1"
-
"@embroider/test-setup@^3.0.2":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@embroider/test-setup/-/test-setup-3.0.3.tgz#938f36db1578ad70f357a09ef4ebd16fca0434f9"
@@ -1172,7 +1121,16 @@
lodash "^4.17.21"
resolve "^1.20.0"
-"@embroider/util@^0.39.1 || ^0.40.0 || ^0.41.0 || ^1.0.0", "@embroider/util@^1.13.3", "@embroider/util@^1.9.0":
+"@embroider/util@Gaurav0/embroider-util#v1.13.5-scf.1":
+ version "1.13.5"
+ resolved "https://codeload.github.com/Gaurav0/embroider-util/tar.gz/87b98c66c11a25949ca9076b5bd1c64960e1d0b6"
+ dependencies:
+ "@babel/core" "^7.29.0"
+ "@embroider/macros" ">=1.19.7 <1.21.0"
+ broccoli-funnel "^3.0.5"
+ ember-cli-babel "^8.3.2"
+
+"@embroider/util@^1.9.0":
version "1.13.3"
resolved "https://registry.yarnpkg.com/@embroider/util/-/util-1.13.3.tgz#ac6a12f54097173167a9a1189a49ea6cd5b45755"
integrity sha512-fb9S137zZqSI1IeWpGKVJ+WZHsRiIrD9D2A4aVwVH0dZeBKDg6lMaMN2MiXJ/ldUAG3DUFxnClnpiG5m2g3JFA==
@@ -4594,7 +4552,7 @@ ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.13.0, ember-
rimraf "^3.0.1"
semver "^5.5.0"
-ember-cli-babel@^8.3.2:
+"ember-cli-babel@^7.26.6 || ^8.3.1", ember-cli-babel@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-8.3.2.tgz#e34944c104a280a3dcc7f1e3c136bdfb483901f7"
integrity sha512-Thvqx+jwGYhimYbkkL0gwhwMlhghTIR3uQ9R0yNaTjBIttZIfSWJ/2W40kaJlwhnsElXq7zbFjZcff22p6nzCg==
@@ -5100,13 +5058,12 @@ ember-destroyable-polyfill@^2.0.1, ember-destroyable-polyfill@^2.0.2, ember-dest
ember-cli-version-checker "^5.1.1"
ember-compatibility-helpers "^1.2.1"
-ember-element-helper@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ember-element-helper/-/ember-element-helper-0.7.1.tgz#dcbfc6a07ed9d7c9e071df84845ba7b3de8892e8"
- integrity sha512-vpD/ZVXU3MCbW/oKw/Wg2z3H/KHYIiO9ej28By1POnN+HVw4sHHJVStxgVoztiK1P43JoGRpyoJvMB986xrGSw==
+ember-element-helper@^0.8.7:
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/ember-element-helper/-/ember-element-helper-0.8.8.tgz#b7cb5a6450ec00ae6bc4974a5f6d7224aced8f35"
+ integrity sha512-3slTltQV5ke53t3YVP2GYoswsQ6y+lhuVzKmt09tbEx91DapG8I/xa8W5OA0StvcQlavL3/vHrz/vCQEFs8bBA==
dependencies:
- "@embroider/addon-shim" "1.8.3"
- "@embroider/util" "^0.39.1 || ^0.40.0 || ^0.41.0 || ^1.0.0"
+ "@embroider/addon-shim" "^1.8.3"
ember-focus-trap@^1.0.0:
version "1.1.1"
@@ -9581,10 +9538,10 @@ pkg-dir@^5.0.0:
dependencies:
find-up "^5.0.0"
-pkg-entry-points@1.1.1, pkg-entry-points@^1.1.0, pkg-entry-points@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/pkg-entry-points/-/pkg-entry-points-1.1.1.tgz#d5cd87f934e873bf73143ed1d0baf637e5f8fda4"
- integrity sha512-BhZa7iaPmB4b3vKIACoppyUoYn8/sFs17VJJtzrzPZvEnN2nqrgg911tdL65lA2m1ml6UI3iPeYbZQ4VXpn1mA==
+pkg-entry-points@^1.1.0, pkg-entry-points@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/pkg-entry-points/-/pkg-entry-points-1.1.2.tgz#82f259db7db02e0d1bebfb1b6610fb4983952f66"
+ integrity sha512-bmmM+SdLXNNetFr4o53QiiZRZicls2apmzj8HRpo4bU+3nJHiPO/omv8TXHIOzTcirua3YBAwTlKE+7zkICh4g==
pkg-up@^2.0.0:
version "2.0.0"