diff --git a/addons/rose/addon/templates/components/rose/anonymous.hbs b/addons/rose/addon/components/rose/anonymous/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/anonymous.hbs
rename to addons/rose/addon/components/rose/anonymous/index.hbs
diff --git a/addons/rose/addon/components/rose/anonymous.js b/addons/rose/addon/components/rose/anonymous/index.js
similarity index 80%
rename from addons/rose/addon/components/rose/anonymous.js
rename to addons/rose/addon/components/rose/anonymous/index.js
index c5321f53a..1f1715d28 100644
--- a/addons/rose/addon/components/rose/anonymous.js
+++ b/addons/rose/addon/components/rose/anonymous/index.js
@@ -1,5 +1,5 @@
import Component from '@ember/component';
-import layout from '../../templates/components/rose/anonymous';
+import layout from './index';
/**
* An otherwise empty component that renders a block. Used only by components
diff --git a/addons/rose/addon/components/rose/anonymous.stories.mdx b/addons/rose/addon/components/rose/anonymous/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/anonymous.stories.mdx
rename to addons/rose/addon/components/rose/anonymous/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/checkbox.js b/addons/rose/addon/components/rose/form/checkbox.js
deleted file mode 100644
index ad6ad3f38..000000000
--- a/addons/rose/addon/components/rose/form/checkbox.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../templates/components/rose/form/checkbox';
-import ComponentAutoId from '../../../mixins/component-auto-id';
-
-/**
- * A simple HTML `` element.
- */
-export default Component.extend(ComponentAutoId, {
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/checkbox.hbs b/addons/rose/addon/components/rose/form/checkbox/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/checkbox.hbs
rename to addons/rose/addon/components/rose/form/checkbox/index.hbs
diff --git a/addons/rose/addon/components/rose/form/checkbox/index.js b/addons/rose/addon/components/rose/form/checkbox/index.js
new file mode 100644
index 000000000..b13f24e4f
--- /dev/null
+++ b/addons/rose/addon/components/rose/form/checkbox/index.js
@@ -0,0 +1,10 @@
+import Component from '@glimmer/component';
+import { generateComponentID } from '../../../../utilities/component-auto-id';
+
+export default class RoseFormCheckboxComponent extends Component {
+
+ // =attributes
+
+ id = generateComponentID();
+
+}
diff --git a/addons/rose/addon/components/rose/form/checkbox.stories.mdx b/addons/rose/addon/components/rose/form/checkbox/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/checkbox.stories.mdx
rename to addons/rose/addon/components/rose/form/checkbox/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/errors.js b/addons/rose/addon/components/rose/form/errors.js
deleted file mode 100644
index bc13c3f56..000000000
--- a/addons/rose/addon/components/rose/form/errors.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../templates/components/rose/form/errors';
-
-/**
- * A container for error messages. Yields the error message component.
- */
-export default Component.extend({
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/errors.hbs b/addons/rose/addon/components/rose/form/errors/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/errors.hbs
rename to addons/rose/addon/components/rose/form/errors/index.hbs
diff --git a/addons/rose/addon/components/rose/form/errors.stories.mdx b/addons/rose/addon/components/rose/form/errors/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/errors.stories.mdx
rename to addons/rose/addon/components/rose/form/errors/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/errors/message.js b/addons/rose/addon/components/rose/form/errors/message.js
deleted file mode 100644
index 0f59c6b06..000000000
--- a/addons/rose/addon/components/rose/form/errors/message.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../../templates/components/rose/form/errors/message';
-
-/**
- * A simple, styled error message. Do not use directly.
- */
-export default Component.extend({
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/errors/message.hbs b/addons/rose/addon/components/rose/form/errors/message/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/errors/message.hbs
rename to addons/rose/addon/components/rose/form/errors/message/index.hbs
diff --git a/addons/rose/addon/components/rose/form/errors/message.stories.mdx b/addons/rose/addon/components/rose/form/errors/message/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/errors/message.stories.mdx
rename to addons/rose/addon/components/rose/form/errors/message/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/helper-text.js b/addons/rose/addon/components/rose/form/helper-text.js
deleted file mode 100644
index 399088c44..000000000
--- a/addons/rose/addon/components/rose/form/helper-text.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../templates/components/rose/form/helper-text';
-
-export default Component.extend({
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/helper-text.hbs b/addons/rose/addon/components/rose/form/helper-text/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/helper-text.hbs
rename to addons/rose/addon/components/rose/form/helper-text/index.hbs
diff --git a/addons/rose/addon/components/rose/form/helper-text.stories.mdx b/addons/rose/addon/components/rose/form/helper-text/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/helper-text.stories.mdx
rename to addons/rose/addon/components/rose/form/helper-text/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/input.js b/addons/rose/addon/components/rose/form/input.js
deleted file mode 100644
index 60ae3d0f1..000000000
--- a/addons/rose/addon/components/rose/form/input.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../templates/components/rose/form/input';
-import ComponentAutoId from '../../../mixins/component-auto-id';
-
-/**
- * A simple HTML `` element.
- */
-export default Component.extend(ComponentAutoId, {
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/input.hbs b/addons/rose/addon/components/rose/form/input/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/input.hbs
rename to addons/rose/addon/components/rose/form/input/index.hbs
diff --git a/addons/rose/addon/components/rose/form/input/index.js b/addons/rose/addon/components/rose/form/input/index.js
new file mode 100644
index 000000000..4fbc071f4
--- /dev/null
+++ b/addons/rose/addon/components/rose/form/input/index.js
@@ -0,0 +1,10 @@
+import Component from '@glimmer/component';
+import { generateComponentID } from '../../../../utilities/component-auto-id';
+
+export default class RoseFormInputComponent extends Component {
+
+ // =attributes
+
+ id = generateComponentID();
+
+}
diff --git a/addons/rose/addon/components/rose/form/input.stories.mdx b/addons/rose/addon/components/rose/form/input/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/input.stories.mdx
rename to addons/rose/addon/components/rose/form/input/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/input/input.js b/addons/rose/addon/components/rose/form/input/input.js
deleted file mode 100644
index f20d86c82..000000000
--- a/addons/rose/addon/components/rose/form/input/input.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../../templates/components/rose/form/input/input';
-
-export default Component.extend({
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/input/input.hbs b/addons/rose/addon/components/rose/form/input/input/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/input/input.hbs
rename to addons/rose/addon/components/rose/form/input/input/index.hbs
diff --git a/addons/rose/addon/components/rose/form/label.js b/addons/rose/addon/components/rose/form/label.js
deleted file mode 100644
index 1d26edc8d..000000000
--- a/addons/rose/addon/components/rose/form/label.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../templates/components/rose/form/label';
-
-export default Component.extend({
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/label.hbs b/addons/rose/addon/components/rose/form/label/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/label.hbs
rename to addons/rose/addon/components/rose/form/label/index.hbs
diff --git a/addons/rose/addon/components/rose/form/label.stories.mdx b/addons/rose/addon/components/rose/form/label/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/label.stories.mdx
rename to addons/rose/addon/components/rose/form/label/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/radio/group.js b/addons/rose/addon/components/rose/form/radio/group.js
deleted file mode 100644
index 80bba183e..000000000
--- a/addons/rose/addon/components/rose/form/radio/group.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../../templates/components/rose/form/radio/group';
-
-/**
- * A `` element.
- */
-export default Component.extend({
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/radio/group.hbs b/addons/rose/addon/components/rose/form/radio/group/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/radio/group.hbs
rename to addons/rose/addon/components/rose/form/radio/group/index.hbs
diff --git a/addons/rose/addon/components/rose/form/radio/group.stories.mdx b/addons/rose/addon/components/rose/form/radio/group/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/radio/group.stories.mdx
rename to addons/rose/addon/components/rose/form/radio/group/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/radio/radio.js b/addons/rose/addon/components/rose/form/radio/radio.js
deleted file mode 100644
index 196e47951..000000000
--- a/addons/rose/addon/components/rose/form/radio/radio.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../../templates/components/rose/form/radio/radio';
-import ComponentAutoId from '../../../../mixins/component-auto-id';
-
-/**
- * A `` element.
- * `value` and `selectedValue` must be equal to select
- * radiofield.
- */
-export default Component.extend(ComponentAutoId, {
- layout,
- tagName: '',
-});
diff --git a/addons/rose/addon/templates/components/rose/form/radio/radio.hbs b/addons/rose/addon/components/rose/form/radio/radio/index.hbs
similarity index 100%
rename from addons/rose/addon/templates/components/rose/form/radio/radio.hbs
rename to addons/rose/addon/components/rose/form/radio/radio/index.hbs
diff --git a/addons/rose/addon/components/rose/form/radio/radio/index.js b/addons/rose/addon/components/rose/form/radio/radio/index.js
new file mode 100644
index 000000000..ac2c2a6ec
--- /dev/null
+++ b/addons/rose/addon/components/rose/form/radio/radio/index.js
@@ -0,0 +1,10 @@
+import Component from '@glimmer/component';
+import { generateComponentID } from '../../../../../utilities/component-auto-id';
+
+export default class RoseFormRadioRadioComponent extends Component {
+
+ // =attributes
+
+ id = generateComponentID();
+
+}
diff --git a/addons/rose/addon/components/rose/form/radio/radio.stories.mdx b/addons/rose/addon/components/rose/form/radio/radio/index.stories.mdx
similarity index 100%
rename from addons/rose/addon/components/rose/form/radio/radio.stories.mdx
rename to addons/rose/addon/components/rose/form/radio/radio/index.stories.mdx
diff --git a/addons/rose/addon/components/rose/form/select.js b/addons/rose/addon/components/rose/form/select.js
deleted file mode 100644
index c71537542..000000000
--- a/addons/rose/addon/components/rose/form/select.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Component from '@ember/component';
-import layout from '../../../templates/components/rose/form/select';
-import ComponentAutoId from '../../../mixins/component-auto-id';
-
-/**
- * A `