diff --git a/blueprints/component/files/src/components/__name__.gjs b/blueprints/component/files/src/components/__name__.gjs
new file mode 100644
index 00000000..a0a33305
--- /dev/null
+++ b/blueprints/component/files/src/components/__name__.gjs
@@ -0,0 +1,3 @@
+
+ {{yield}}
+
\ No newline at end of file
diff --git a/blueprints/component/files/tests/integration/components/__name__.gjs b/blueprints/component/files/tests/integration/components/__name__.gjs
new file mode 100644
index 00000000..ee8ab7e5
--- /dev/null
+++ b/blueprints/component/files/tests/integration/components/__name__.gjs
@@ -0,0 +1,24 @@
+import { module, test } from 'qunit';
+import { render } from '@ember/test-helpers';
+import { setupRenderingTest } from 'ember-qunit';
+
+import <%= componentName %> from '../../../src/components/<%= name %>';
+
+module('Integration | Component | <%= name %>', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ await render(<%= selfCloseComponent(componentName) %>);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(
+ <%= openComponent(componentName) %>
+ template block text
+ <%= closeComponent(componentName) %>
+ );
+
+ assert.dom().hasText('template block text');
+ });
+});
\ No newline at end of file
diff --git a/blueprints/component/index.js b/blueprints/component/index.js
new file mode 100644
index 00000000..171f3cab
--- /dev/null
+++ b/blueprints/component/index.js
@@ -0,0 +1,25 @@
+const stringUtil = require('ember-cli-string-utils');
+
+function invocationFor(options) {
+ let parts = options.entity.name.split('/');
+ return parts.map((p) => stringUtil.classify(p)).join('::');
+}
+
+
+module.exports = {
+ locals: function (options) {
+ let templateInvocation = invocationFor(options);
+ let componentName = templateInvocation;
+ let openComponent = (descriptor) => `<${descriptor}>`;
+ let closeComponent = (descriptor) => `${descriptor}>`;
+ let selfCloseComponent = (descriptor) => `<${descriptor} />`;
+
+ return {
+ name: options.project.name(),
+ componentName,
+ openComponent,
+ closeComponent,
+ selfCloseComponent,
+ };
+ }
+}
\ No newline at end of file
diff --git a/files/package.json b/files/package.json
index 6cd454e8..a36cb2c5 100644
--- a/files/package.json
+++ b/files/package.json
@@ -39,6 +39,7 @@
"@babel/eslint-parser": "^7.25.1<% if (typescript) { %>",
"@babel/plugin-transform-typescript": "^7.25.2<% } %>",
"@babel/runtime": "^7.25.6",
+ "@ember/addon-blueprint": "github:ember-cli/ember-addon-blueprint#blueprints",
"@ember/app-tsconfig": "^1.0.0",
"@ember/library-tsconfig": "^1.0.0",
"@ember/test-helpers": "^5.2.1",
@@ -68,6 +69,7 @@
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-n": "^17.15.1",
"globals": "^16.1.0",
+ "layer-gen": "^0.2.0",
"prettier": "^3.4.2",
"prettier-plugin-ember-template-tag": "^2.0.4",
"publint": "^0.3.16",
diff --git a/index.js b/index.js
index ed1e5b98..5fc9eb01 100644
--- a/index.js
+++ b/index.js
@@ -17,6 +17,7 @@ const replacers = {
};
module.exports = {
+ name: "face",
description,
fileMapTokens(options) {
diff --git a/package.json b/package.json
index d1e1d229..a598e416 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,8 @@
"version": "0.17.1",
"description": "Blueprint for scaffolding ember v2 addons",
"keywords": [
- "ember-blueprint"
+ "ember-blueprint",
+ "ember-addon"
],
"repository": {
"type": "git",
@@ -17,6 +18,7 @@
"new:addon": "rm -rf my-addon; pnpm dlx ember-cli@latest addon my-addon --blueprint ."
},
"dependencies": {
+ "ember-cli-string-utils": "^1.1.0",
"sort-package-json": "^3.4.0"
},
"devDependencies": {
@@ -24,5 +26,8 @@
"prettier-plugin-ember-template-tag": "2.1.0",
"release-plan": "^0.17.4"
},
- "packageManager": "pnpm@10.6.5"
+ "packageManager": "pnpm@10.6.5",
+ "blueprints": {
+ "component": "./blueprints/component"
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 548b4b77..a24105a9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,9 @@ importers:
.:
dependencies:
+ ember-cli-string-utils:
+ specifier: ^1.1.0
+ version: 1.1.0
sort-package-json:
specifier: ^3.4.0
version: 3.4.0