diff --git a/.storybook/preview.js b/.storybook/preview.js
index 720efc6ac..c4d4ff5d2 100644
--- a/.storybook/preview.js
+++ b/.storybook/preview.js
@@ -1,5 +1,7 @@
-import './styles/preview.less';
import { themes } from '@storybook/theming';
+import { hbs } from 'ember-cli-htmlbars';
+
+import './styles/preview.less';
export const parameters = {
actions: { argTypesRegex: '^on[A-Z].*' },
@@ -24,3 +26,15 @@ export const parameters = {
theme: themes.dark
}
};
+
+export const decorators = [
+ (storyFn, { globals }) => {
+ return {
+ template: hbs``,
+ context: {
+ globals,
+ story: storyFn()
+ }
+ };
+ }
+];
diff --git a/tests/dummy/app/components/storybook.hbs b/tests/dummy/app/components/storybook.hbs
new file mode 100644
index 000000000..a9540b5f4
--- /dev/null
+++ b/tests/dummy/app/components/storybook.hbs
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tests/dummy/app/components/storybook.ts b/tests/dummy/app/components/storybook.ts
new file mode 100644
index 000000000..1f35f8eda
--- /dev/null
+++ b/tests/dummy/app/components/storybook.ts
@@ -0,0 +1,45 @@
+import { setComponentTemplate } from '@ember/component';
+import { inject as service } from '@ember/service';
+import Component from '@glimmer/component';
+
+import type { IntlService } from 'ember-intl';
+
+interface Globals {}
+
+interface StorybookArgs {
+ story: {
+ template: any;
+ context: Record;
+ };
+ globals: Globals;
+}
+
+export default class StorybookComponent extends Component {
+ @service declare intl: IntlService;
+
+ constructor(owner: any, args: StorybookArgs) {
+ super(owner, args);
+
+ this.intl.setLocale('en-us');
+ }
+
+ get storyComponent() {
+ class StoryComponent extends Component {}
+
+ Object.keys(this.storyComponentArgs).forEach((key) => {
+ Object.defineProperty(StoryComponent.prototype, key, {
+ get() {
+ return (this as any).args.__ctx?.[key];
+ }
+ });
+ });
+
+ setComponentTemplate(this.args.story.template, StoryComponent);
+
+ return StoryComponent;
+ }
+
+ get storyComponentArgs() {
+ return this.args.story.context ?? {};
+ }
+}