diff --git a/blueprints/component/files/src/components/__name__.gjs b/blueprints/component/files/src/components/__name__.gjs
new file mode 100644
index 0000000..a0a3330
--- /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 0000000..ee8ab7e
--- /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 0000000..171f3ca
--- /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 0207d2d..5feac90 100644
--- a/files/package.json
+++ b/files/package.json
@@ -36,14 +36,16 @@
"ember-source": ">= 4.12.0"
},
"devDependencies": {
- "@babel/core": "^7.25.2",<% if (typescript) { %>"@babel/plugin-transform-typescript": "^7.25.2",<% } %>
+ "@babel/core": "^7.25.2",<% if (typescript) { %>
+ "@babel/plugin-transform-typescript": "^7.25.2",<% } %>
"@babel/eslint-parser": "^7.25.1",
"@babel/runtime": "^7.25.6",
+ "@ember/addon-blueprint": "github:ember-cli/ember-addon-blueprint#blueprints",
+ "@ember/test-helpers": "^5.2.1",
"@embroider/addon-dev": "^7.1.0",
"@embroider/core": "^4.0.0-alpha.10",
"@embroider/macros": "^1.17.0-alpha.8",
"@embroider/vite": "^1.0.0-alpha.12",
- "@ember/test-helpers": "^5.2.1",
"@eslint/js": "^9.17.0",<% if (typescript) { %>
"@glint/core": "^1.4.0",
"@glint/environment-ember-loose": "^1.4.0",
@@ -53,21 +55,22 @@
"@rollup/plugin-babel": "^6.0.4",
"babel-plugin-ember-template-compilation": "^2.2.5",
"concurrently": "^9.0.1",
- "ember-source": "^6.3.0",
+ "ember-qunit": "^9.0.2",
"ember-resolver": "^13.1.0",
+ "ember-source": "^6.3.0",
"ember-template-lint": "^6.0.0",
- "ember-qunit": "^9.0.2",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-ember": "^12.3.3",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-n": "^17.15.1",
"globals": "^15.14.0",
+ "layer-gen": "^0.1.0",
"prettier": "^3.4.2",
"prettier-plugin-ember-template-tag": "^2.0.4",
- "rollup": "^4.22.5",
"qunit": "^2.24.1",
"qunit-dom": "^3.4.0",
+ "rollup": "^4.22.5",
"vite": "^6.2.4"<% if (typescript) { %>,
"typescript-eslint": "^8.19.1",
"typescript": "~5.6.0"<% } %>
diff --git a/index.js b/index.js
index 3196d8c..7ac4608 100644
--- a/index.js
+++ b/index.js
@@ -5,6 +5,7 @@ let date = new Date();
const description = 'The default blueprint for Embroider v2 addons.';
module.exports = {
+ name: "face",
description,
fileMapTokens(options) {
diff --git a/package.json b/package.json
index 6cdf285..2e67180 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,8 @@
"version": "0.2.0",
"description": "Blueprint for scaffolding ember v2 addons",
"keywords": [
- "ember-blueprint"
+ "ember-blueprint",
+ "ember-addon"
],
"repository": {
"type": "git",
@@ -12,9 +13,14 @@
"license": "MIT",
"author": "",
"scripts": {},
- "dependencies": {},
+ "dependencies": {
+ "ember-cli-string-utils": "^1.1.0"
+ },
"devDependencies": {
"release-plan": "^0.16.0"
},
- "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 482bb6b..c50d484 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,6 +7,10 @@ settings:
importers:
.:
+ dependencies:
+ ember-cli-string-utils:
+ specifier: ^1.1.0
+ version: 1.1.0
devDependencies:
release-plan:
specifier: ^0.16.0
@@ -262,6 +266,9 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ ember-cli-string-utils@1.1.0:
+ resolution: {integrity: sha512-PlJt4fUDyBrC/0X+4cOpaGCiMawaaB//qD85AXmDRikxhxVzfVdpuoec02HSiTGTTB85qCIzWBIh8lDOiMyyFg==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -1194,6 +1201,8 @@ snapshots:
eastasianwidth@0.2.0: {}
+ ember-cli-string-utils@1.1.0: {}
+
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}