@aurelia/storybook 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,16 +8,16 @@
8
8
  },
9
9
  "license": "UNLICENSED",
10
10
  "dependencies": {
11
- "@aurelia/router": "latest",
12
- "aurelia": "2.0.0-beta.14"
11
+ "@aurelia/router": "2.0.0-beta.24",
12
+ "aurelia": "2.0.0-beta.24"
13
13
  },
14
14
  "devDependencies": {
15
- "@aurelia/storybook": "file:../..",
16
- "@aurelia/testing": "latest",
17
- "@aurelia/webpack-loader": "latest",
15
+ "@aurelia/storybook": "^1.0.2",
16
+ "@aurelia/testing": "2.0.0-beta.24",
17
+ "@aurelia/webpack-loader": "2.0.0-beta.24",
18
+ "@storybook/addon-actions": "^9.0.8",
18
19
  "@storybook/addon-links": "^9.0.0",
19
- "@storybook/addon-webpack5-compiler-swc": "^3.0.0",
20
- "storybook": "^9.0.0",
20
+ "@storybook/test": "^9.0.0-alpha.2",
21
21
  "@types/node": "^22.10.2",
22
22
  "autoprefixer": "^10.4.20",
23
23
  "css-loader": "^7.1.2",
@@ -27,6 +27,7 @@
27
27
  "html-webpack-plugin": "^5.6.3",
28
28
  "postcss": "^8.4.49",
29
29
  "postcss-loader": "^8.1.1",
30
+ "storybook": "^9.0.0",
30
31
  "style-loader": "^4.0.0",
31
32
  "stylelint": "^16.12.0",
32
33
  "stylelint-config-standard": "^36.0.1",
@@ -0,0 +1,6 @@
1
+ <div style="border: 1px solid #ccc; padding: 16px; border-radius: 4px;">
2
+ <h1>${message}</h1>
3
+ <p>Counter: ${counter}</p>
4
+ <button click.trigger="increment()">Increment</button>
5
+ <au-slot></au-slot>
6
+ </div>
@@ -0,0 +1,17 @@
1
+ import { bindable } from 'aurelia';
2
+
3
+ export class HelloWorld {
4
+ @bindable() message = 'Hello from Aurelia!';
5
+ // New reactive counter property to track number of clicks
6
+ counter = 0;
7
+ // New bindable event callback for the increment action
8
+ @bindable() onIncrement;
9
+
10
+ // Method to increment the counter and fire the onIncrement callback if provided.
11
+ increment() {
12
+ this.counter++;
13
+ if (this.onIncrement) {
14
+ this.onIncrement(this.counter);
15
+ }
16
+ }
17
+ }
@@ -1,12 +1,15 @@
1
1
  import { MyApp } from './my-app';
2
2
 
3
- export default {
4
- title: 'My-App',
3
+ const meta = {
4
+ title: 'Example/MyApp',
5
5
  component: MyApp,
6
+ render: () => ({
7
+ template: `<my-app></my-app>`,
8
+ }),
6
9
  };
7
10
 
8
- export const Default = () => ({
9
- Component: MyApp,
10
- template: '<my-app></my-app>',
11
- props: {}
12
- });
11
+ export default meta;
12
+
13
+ export const Default = {
14
+ args: {}
15
+ };
@@ -0,0 +1,54 @@
1
+ import { HelloWorld } from '../hello-world';
2
+ import { fn } from '@storybook/test';
3
+ import { userEvent, within } from '@storybook/test';
4
+
5
+ const meta = {
6
+ title: 'Example/HelloWorld',
7
+ component: HelloWorld,
8
+ render: () => ({
9
+ template: `<hello-world message.bind="message" on-increment.bind="onIncrement"></hello-world>`,
10
+ }),
11
+ argTypes: {
12
+ message: { control: 'text' },
13
+ onIncrement: { action: 'increment' }
14
+ }
15
+ };
16
+
17
+ export default meta;
18
+
19
+ export const DefaultHelloWorld = {
20
+ args: {
21
+ message: "Hello frof",
22
+ onIncrement: fn()
23
+ }
24
+ };
25
+
26
+ export const InteractiveHelloWorld = {
27
+ args: {
28
+ message: "kjkjk",
29
+ onIncrement: fn()
30
+ },
31
+ play: async ({ canvasElement }: { canvasElement: HTMLElement }) => {
32
+ const canvas = within(canvasElement);
33
+ const button = canvas.getByRole('button');
34
+ // Simulate three button clicks
35
+ await userEvent.click(button);
36
+ await userEvent.click(button);
37
+ await userEvent.click(button);
38
+ }
39
+ };
40
+
41
+ export const NoArgs = {
42
+ render: () => ({
43
+ template: `<hello-world></hello-world>`
44
+ })
45
+ };
46
+
47
+ export const WithCustomTemplate = {
48
+ render: () => ({
49
+ template: `<hello-world message.bind="message">Click me!</hello-world>`
50
+ }),
51
+ args: {
52
+ message: "This is a custom messageddd"
53
+ }
54
+ };
package/dist/index.js CHANGED
@@ -2,90 +2,6 @@
2
2
 
3
3
  var Aurelia = require('aurelia');
4
4
 
5
- // src/core-events/index.ts
6
- var R = /* @__PURE__ */ ((E) => (E.CHANNEL_WS_DISCONNECT = "channelWSDisconnect", E.CHANNEL_CREATED = "channelCreated", E.CONFIG_ERROR = "co\
7
- nfigError", E.STORY_INDEX_INVALIDATED = "storyIndexInvalidated", E.STORY_SPECIFIED = "storySpecified", E.SET_CONFIG = "setConfig", E.SET_STORIES =
8
- "setStories", E.SET_INDEX = "setIndex", E.SET_CURRENT_STORY = "setCurrentStory", E.CURRENT_STORY_WAS_SET = "currentStoryWasSet", E.FORCE_RE_RENDER =
9
- "forceReRender", E.FORCE_REMOUNT = "forceRemount", E.PRELOAD_ENTRIES = "preloadStories", E.STORY_PREPARED = "storyPrepared", E.DOCS_PREPARED =
10
- "docsPrepared", E.STORY_CHANGED = "storyChanged", E.STORY_UNCHANGED = "storyUnchanged", E.STORY_RENDERED = "storyRendered", E.STORY_FINISHED =
11
- "storyFinished", E.STORY_MISSING = "storyMissing", E.STORY_ERRORED = "storyErrored", E.STORY_THREW_EXCEPTION = "storyThrewException", E.STORY_RENDER_PHASE_CHANGED =
12
- "storyRenderPhaseChanged", E.STORY_HOT_UPDATED = "storyHotUpdated", E.PLAY_FUNCTION_THREW_EXCEPTION = "playFunctionThrewException", E.UNHANDLED_ERRORS_WHILE_PLAYING =
13
- "unhandledErrorsWhilePlaying", E.UPDATE_STORY_ARGS = "updateStoryArgs", E.STORY_ARGS_UPDATED = "storyArgsUpdated", E.RESET_STORY_ARGS = "res\
14
- etStoryArgs", E.SET_FILTER = "setFilter", E.SET_GLOBALS = "setGlobals", E.UPDATE_GLOBALS = "updateGlobals", E.GLOBALS_UPDATED = "globalsUpda\
15
- ted", E.REGISTER_SUBSCRIPTION = "registerSubscription", E.PREVIEW_KEYDOWN = "previewKeydown", E.PREVIEW_BUILDER_PROGRESS = "preview_builder_\
16
- progress", E.SELECT_STORY = "selectStory", E.STORIES_COLLAPSE_ALL = "storiesCollapseAll", E.STORIES_EXPAND_ALL = "storiesExpandAll", E.DOCS_RENDERED =
17
- "docsRendered", E.SHARED_STATE_CHANGED = "sharedStateChanged", E.SHARED_STATE_SET = "sharedStateSet", E.NAVIGATE_URL = "navigateUrl", E.UPDATE_QUERY_PARAMS =
18
- "updateQueryParams", E.REQUEST_WHATS_NEW_DATA = "requestWhatsNewData", E.RESULT_WHATS_NEW_DATA = "resultWhatsNewData", E.SET_WHATS_NEW_CACHE =
19
- "setWhatsNewCache", E.TOGGLE_WHATS_NEW_NOTIFICATIONS = "toggleWhatsNewNotifications", E.TELEMETRY_ERROR = "telemetryError", E.FILE_COMPONENT_SEARCH_REQUEST =
20
- "fileComponentSearchRequest", E.FILE_COMPONENT_SEARCH_RESPONSE = "fileComponentSearchResponse", E.SAVE_STORY_REQUEST = "saveStoryRequest", E.
21
- SAVE_STORY_RESPONSE = "saveStoryResponse", E.ARGTYPES_INFO_REQUEST = "argtypesInfoRequest", E.ARGTYPES_INFO_RESPONSE = "argtypesInfoResponse",
22
- E.CREATE_NEW_STORYFILE_REQUEST = "createNewStoryfileRequest", E.CREATE_NEW_STORYFILE_RESPONSE = "createNewStoryfileResponse", E))(R || {}), {
23
- CHANNEL_WS_DISCONNECT: _,
24
- CHANNEL_CREATED: T,
25
- CONFIG_ERROR: O,
26
- CREATE_NEW_STORYFILE_REQUEST: A,
27
- CREATE_NEW_STORYFILE_RESPONSE: N,
28
- CURRENT_STORY_WAS_SET: r,
29
- DOCS_PREPARED: D,
30
- DOCS_RENDERED: I,
31
- FILE_COMPONENT_SEARCH_REQUEST: o,
32
- FILE_COMPONENT_SEARCH_RESPONSE: C,
33
- FORCE_RE_RENDER: P,
34
- FORCE_REMOUNT: L,
35
- GLOBALS_UPDATED: Y,
36
- NAVIGATE_URL: a,
37
- PLAY_FUNCTION_THREW_EXCEPTION: U,
38
- UNHANDLED_ERRORS_WHILE_PLAYING: H,
39
- PRELOAD_ENTRIES: G,
40
- PREVIEW_BUILDER_PROGRESS: W,
41
- PREVIEW_KEYDOWN: d,
42
- REGISTER_SUBSCRIPTION: t,
43
- RESET_STORY_ARGS: p,
44
- SELECT_STORY: i,
45
- SET_CONFIG: F,
46
- SET_CURRENT_STORY: l,
47
- SET_FILTER: y,
48
- SET_GLOBALS: e,
49
- SET_INDEX: c,
50
- SET_STORIES: h,
51
- SHARED_STATE_CHANGED: f,
52
- SHARED_STATE_SET: g,
53
- STORIES_COLLAPSE_ALL: u,
54
- STORIES_EXPAND_ALL: s,
55
- STORY_ARGS_UPDATED: x,
56
- STORY_CHANGED: m,
57
- STORY_ERRORED: M,
58
- STORY_INDEX_INVALIDATED: Q,
59
- STORY_MISSING: V,
60
- STORY_PREPARED: w,
61
- STORY_RENDER_PHASE_CHANGED: B,
62
- STORY_RENDERED: X,
63
- STORY_FINISHED: b,
64
- STORY_SPECIFIED: q,
65
- STORY_THREW_EXCEPTION: K,
66
- STORY_UNCHANGED: j,
67
- STORY_HOT_UPDATED: k,
68
- UPDATE_GLOBALS: z,
69
- UPDATE_QUERY_PARAMS: J,
70
- UPDATE_STORY_ARGS: Z,
71
- REQUEST_WHATS_NEW_DATA: $,
72
- RESULT_WHATS_NEW_DATA: n,
73
- SET_WHATS_NEW_CACHE: v,
74
- TOGGLE_WHATS_NEW_NOTIFICATIONS: EE,
75
- TELEMETRY_ERROR: RE,
76
- SAVE_STORY_REQUEST: SE,
77
- SAVE_STORY_RESPONSE: _E,
78
- ARGTYPES_INFO_REQUEST: TE,
79
- ARGTYPES_INFO_RESPONSE: OE
80
- } = R;
81
-
82
- /**
83
- * Merges multiple sources into a single object.
84
- * Sources can be story parameters, args, or story.props.
85
- */
86
- function mergeStoryProps(...sources) {
87
- return Object.assign({}, ...sources);
88
- }
89
5
  // Track Aurelia apps for cleanup
90
6
  const appMap = new Map();
91
7
  async function teardown(element) {
@@ -98,10 +14,29 @@ async function teardown(element) {
98
14
  }
99
15
  }
100
16
  async function renderToCanvas({ storyFn, title, name, showMain, showError, storyContext, forceRemount, }, canvasElement, bootstrapAppFn) {
101
- const appBootstrapFn = bootstrapAppFn || bootstrapAureliaApp;
17
+ // Store reference to the original storybook root element
18
+ const rootElement = canvasElement;
19
+ // Ensure we have (or create) a single container inside the root where the Aurelia app actually renders
20
+ let hostElement;
21
+ if (rootElement.id === 'storybook-root') {
22
+ hostElement = rootElement.querySelector('.aurelia-story-container');
23
+ if (!hostElement) {
24
+ hostElement = document.createElement('div');
25
+ hostElement.className = 'aurelia-story-container';
26
+ hostElement.style.height = '100%';
27
+ rootElement.appendChild(hostElement);
28
+ }
29
+ }
30
+ else {
31
+ hostElement = rootElement;
32
+ }
33
+ // All app instances are now tracked by the *root* element, ensuring we only ever have one per story iframe
34
+ const appBootstrapFn = bootstrapAppFn ?? createAureliaApp;
102
35
  const { parameters, component, args } = storyContext;
103
- let app = appMap.get(canvasElement);
36
+ let app = appMap.get(rootElement);
104
37
  const story = storyFn();
38
+ // Temporary debug logging
39
+ console.log(`[DEBUG] Story: ${name}, forceRemount: ${forceRemount}, hasExistingApp: ${!!app}, canvasId: ${canvasElement.className}`);
105
40
  if (!story) {
106
41
  showError({
107
42
  title: `Expecting an Aurelia component from the story: "${name}" of "${title}".`,
@@ -113,43 +48,32 @@ async function renderToCanvas({ storyFn, title, name, showMain, showError, story
113
48
  return () => { };
114
49
  }
115
50
  showMain();
116
- let mergedProps;
117
- // Use full merge (including story.props) when bootstrapping a new app or force remounting.
118
51
  if (!app || forceRemount) {
119
- mergedProps = mergeStoryProps(parameters?.args, args, story.props);
120
- if (app) {
121
- await teardown(canvasElement);
52
+ if (forceRemount && app) {
53
+ await teardown(rootElement);
54
+ app = undefined;
122
55
  }
123
- app = appBootstrapFn(story, mergedProps, canvasElement, component);
124
- await app.start();
125
- appMap.set(canvasElement, app);
56
+ // Clear container before mounting new app
57
+ hostElement.innerHTML = '';
58
+ const mergedProps = { ...parameters?.args, ...args, ...story.props };
59
+ const aureliaApp = appBootstrapFn(story, mergedProps, hostElement, component);
60
+ await aureliaApp.start();
61
+ appMap.set(rootElement, aureliaApp);
62
+ app = aureliaApp;
126
63
  }
127
64
  else {
128
- // Update the existing app viewModel only with parameters and args (exclude story.props).
129
- mergedProps = mergeStoryProps(parameters?.args, args);
130
- if (app.root?.controller?.viewModel) {
65
+ // update existing app props
66
+ const mergedProps = { ...parameters?.args, ...args, ...story.props };
67
+ if (app?.root?.controller?.viewModel) {
131
68
  Object.assign(app.root.controller.viewModel, mergedProps);
132
69
  }
133
70
  }
134
- // Set up story change listener for cleanup
135
- const channel = storyContext.viewMode === 'story' ? storyContext.channel : null;
136
- let onStoryChange;
137
- if (channel) {
138
- onStoryChange = () => {
139
- // When the story changes, clean up the Aurelia app
140
- teardown(canvasElement);
141
- };
142
- channel.on(m, onStoryChange);
143
- }
144
- // Return teardown function that also unsubscribes from STORY_CHANGED
71
+ // Return cleanup fn
145
72
  return async () => {
146
- if (channel && onStoryChange) {
147
- channel.off(m, onStoryChange);
148
- }
149
- await teardown(canvasElement);
73
+ await teardown(rootElement);
150
74
  };
151
75
  }
152
- function bootstrapAureliaApp(story, args, domElement, component) {
76
+ function createAureliaApp(story, args, domElement, component) {
153
77
  const aurelia = new Aurelia(story.container);
154
78
  if (story.items?.length) {
155
79
  aurelia.register(...story.items);
@@ -163,7 +87,7 @@ function bootstrapAureliaApp(story, args, domElement, component) {
163
87
  aurelia.register(component);
164
88
  }
165
89
  const App = Aurelia.CustomElement.define({
166
- name: 'au-storybook',
90
+ name: 'sb-app',
167
91
  template,
168
92
  containerless: true,
169
93
  }, class {
@@ -182,7 +106,34 @@ function createComponentTemplate(component, innerHtml) {
182
106
  }
183
107
 
184
108
  const render = renderToCanvas;
109
+ // Define the framework
110
+ const framework = {
111
+ name: '@aurelia/storybook',
112
+ options: {}
113
+ };
114
+ // Framework configuration for Storybook
115
+ const frameworkOptions = {
116
+ builder: {
117
+ name: '@storybook/builder-vite',
118
+ options: {}
119
+ }
120
+ };
121
+ // Export a complete framework configuration
122
+ const aureliaFramework = {
123
+ name: '@aurelia/storybook',
124
+ options: {},
125
+ builder: '@storybook/builder-vite'
126
+ };
127
+ // Provide external dependencies configuration
128
+ const externals = {
129
+ 'react': 'React',
130
+ 'react-dom': 'ReactDOM'
131
+ };
185
132
 
133
+ exports.aureliaFramework = aureliaFramework;
134
+ exports.externals = externals;
135
+ exports.framework = framework;
136
+ exports.frameworkOptions = frameworkOptions;
186
137
  exports.render = render;
187
138
  exports.renderToCanvas = renderToCanvas;
188
139
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/storybook/dist/core-events/index.js","../src/preview/render.ts","../src/index.ts"],"sourcesContent":["// src/core-events/index.ts\nvar R = /* @__PURE__ */ ((E) => (E.CHANNEL_WS_DISCONNECT = \"channelWSDisconnect\", E.CHANNEL_CREATED = \"channelCreated\", E.CONFIG_ERROR = \"co\\\nnfigError\", E.STORY_INDEX_INVALIDATED = \"storyIndexInvalidated\", E.STORY_SPECIFIED = \"storySpecified\", E.SET_CONFIG = \"setConfig\", E.SET_STORIES =\n\"setStories\", E.SET_INDEX = \"setIndex\", E.SET_CURRENT_STORY = \"setCurrentStory\", E.CURRENT_STORY_WAS_SET = \"currentStoryWasSet\", E.FORCE_RE_RENDER =\n\"forceReRender\", E.FORCE_REMOUNT = \"forceRemount\", E.PRELOAD_ENTRIES = \"preloadStories\", E.STORY_PREPARED = \"storyPrepared\", E.DOCS_PREPARED =\n\"docsPrepared\", E.STORY_CHANGED = \"storyChanged\", E.STORY_UNCHANGED = \"storyUnchanged\", E.STORY_RENDERED = \"storyRendered\", E.STORY_FINISHED =\n\"storyFinished\", E.STORY_MISSING = \"storyMissing\", E.STORY_ERRORED = \"storyErrored\", E.STORY_THREW_EXCEPTION = \"storyThrewException\", E.STORY_RENDER_PHASE_CHANGED =\n\"storyRenderPhaseChanged\", E.STORY_HOT_UPDATED = \"storyHotUpdated\", E.PLAY_FUNCTION_THREW_EXCEPTION = \"playFunctionThrewException\", E.UNHANDLED_ERRORS_WHILE_PLAYING =\n\"unhandledErrorsWhilePlaying\", E.UPDATE_STORY_ARGS = \"updateStoryArgs\", E.STORY_ARGS_UPDATED = \"storyArgsUpdated\", E.RESET_STORY_ARGS = \"res\\\netStoryArgs\", E.SET_FILTER = \"setFilter\", E.SET_GLOBALS = \"setGlobals\", E.UPDATE_GLOBALS = \"updateGlobals\", E.GLOBALS_UPDATED = \"globalsUpda\\\nted\", E.REGISTER_SUBSCRIPTION = \"registerSubscription\", E.PREVIEW_KEYDOWN = \"previewKeydown\", E.PREVIEW_BUILDER_PROGRESS = \"preview_builder_\\\nprogress\", E.SELECT_STORY = \"selectStory\", E.STORIES_COLLAPSE_ALL = \"storiesCollapseAll\", E.STORIES_EXPAND_ALL = \"storiesExpandAll\", E.DOCS_RENDERED =\n\"docsRendered\", E.SHARED_STATE_CHANGED = \"sharedStateChanged\", E.SHARED_STATE_SET = \"sharedStateSet\", E.NAVIGATE_URL = \"navigateUrl\", E.UPDATE_QUERY_PARAMS =\n\"updateQueryParams\", E.REQUEST_WHATS_NEW_DATA = \"requestWhatsNewData\", E.RESULT_WHATS_NEW_DATA = \"resultWhatsNewData\", E.SET_WHATS_NEW_CACHE =\n\"setWhatsNewCache\", E.TOGGLE_WHATS_NEW_NOTIFICATIONS = \"toggleWhatsNewNotifications\", E.TELEMETRY_ERROR = \"telemetryError\", E.FILE_COMPONENT_SEARCH_REQUEST =\n\"fileComponentSearchRequest\", E.FILE_COMPONENT_SEARCH_RESPONSE = \"fileComponentSearchResponse\", E.SAVE_STORY_REQUEST = \"saveStoryRequest\", E.\nSAVE_STORY_RESPONSE = \"saveStoryResponse\", E.ARGTYPES_INFO_REQUEST = \"argtypesInfoRequest\", E.ARGTYPES_INFO_RESPONSE = \"argtypesInfoResponse\",\nE.CREATE_NEW_STORYFILE_REQUEST = \"createNewStoryfileRequest\", E.CREATE_NEW_STORYFILE_RESPONSE = \"createNewStoryfileResponse\", E))(R || {}), S = R,\n{\n CHANNEL_WS_DISCONNECT: _,\n CHANNEL_CREATED: T,\n CONFIG_ERROR: O,\n CREATE_NEW_STORYFILE_REQUEST: A,\n CREATE_NEW_STORYFILE_RESPONSE: N,\n CURRENT_STORY_WAS_SET: r,\n DOCS_PREPARED: D,\n DOCS_RENDERED: I,\n FILE_COMPONENT_SEARCH_REQUEST: o,\n FILE_COMPONENT_SEARCH_RESPONSE: C,\n FORCE_RE_RENDER: P,\n FORCE_REMOUNT: L,\n GLOBALS_UPDATED: Y,\n NAVIGATE_URL: a,\n PLAY_FUNCTION_THREW_EXCEPTION: U,\n UNHANDLED_ERRORS_WHILE_PLAYING: H,\n PRELOAD_ENTRIES: G,\n PREVIEW_BUILDER_PROGRESS: W,\n PREVIEW_KEYDOWN: d,\n REGISTER_SUBSCRIPTION: t,\n RESET_STORY_ARGS: p,\n SELECT_STORY: i,\n SET_CONFIG: F,\n SET_CURRENT_STORY: l,\n SET_FILTER: y,\n SET_GLOBALS: e,\n SET_INDEX: c,\n SET_STORIES: h,\n SHARED_STATE_CHANGED: f,\n SHARED_STATE_SET: g,\n STORIES_COLLAPSE_ALL: u,\n STORIES_EXPAND_ALL: s,\n STORY_ARGS_UPDATED: x,\n STORY_CHANGED: m,\n STORY_ERRORED: M,\n STORY_INDEX_INVALIDATED: Q,\n STORY_MISSING: V,\n STORY_PREPARED: w,\n STORY_RENDER_PHASE_CHANGED: B,\n STORY_RENDERED: X,\n STORY_FINISHED: b,\n STORY_SPECIFIED: q,\n STORY_THREW_EXCEPTION: K,\n STORY_UNCHANGED: j,\n STORY_HOT_UPDATED: k,\n UPDATE_GLOBALS: z,\n UPDATE_QUERY_PARAMS: J,\n UPDATE_STORY_ARGS: Z,\n REQUEST_WHATS_NEW_DATA: $,\n RESULT_WHATS_NEW_DATA: n,\n SET_WHATS_NEW_CACHE: v,\n TOGGLE_WHATS_NEW_NOTIFICATIONS: EE,\n TELEMETRY_ERROR: RE,\n SAVE_STORY_REQUEST: SE,\n SAVE_STORY_RESPONSE: _E,\n ARGTYPES_INFO_REQUEST: TE,\n ARGTYPES_INFO_RESPONSE: OE\n} = R;\nexport {\n TE as ARGTYPES_INFO_REQUEST,\n OE as ARGTYPES_INFO_RESPONSE,\n T as CHANNEL_CREATED,\n _ as CHANNEL_WS_DISCONNECT,\n O as CONFIG_ERROR,\n A as CREATE_NEW_STORYFILE_REQUEST,\n N as CREATE_NEW_STORYFILE_RESPONSE,\n r as CURRENT_STORY_WAS_SET,\n D as DOCS_PREPARED,\n I as DOCS_RENDERED,\n o as FILE_COMPONENT_SEARCH_REQUEST,\n C as FILE_COMPONENT_SEARCH_RESPONSE,\n L as FORCE_REMOUNT,\n P as FORCE_RE_RENDER,\n Y as GLOBALS_UPDATED,\n a as NAVIGATE_URL,\n U as PLAY_FUNCTION_THREW_EXCEPTION,\n G as PRELOAD_ENTRIES,\n W as PREVIEW_BUILDER_PROGRESS,\n d as PREVIEW_KEYDOWN,\n t as REGISTER_SUBSCRIPTION,\n $ as REQUEST_WHATS_NEW_DATA,\n p as RESET_STORY_ARGS,\n n as RESULT_WHATS_NEW_DATA,\n SE as SAVE_STORY_REQUEST,\n _E as SAVE_STORY_RESPONSE,\n i as SELECT_STORY,\n F as SET_CONFIG,\n l as SET_CURRENT_STORY,\n y as SET_FILTER,\n e as SET_GLOBALS,\n c as SET_INDEX,\n h as SET_STORIES,\n v as SET_WHATS_NEW_CACHE,\n f as SHARED_STATE_CHANGED,\n g as SHARED_STATE_SET,\n u as STORIES_COLLAPSE_ALL,\n s as STORIES_EXPAND_ALL,\n x as STORY_ARGS_UPDATED,\n m as STORY_CHANGED,\n M as STORY_ERRORED,\n b as STORY_FINISHED,\n k as STORY_HOT_UPDATED,\n Q as STORY_INDEX_INVALIDATED,\n V as STORY_MISSING,\n w as STORY_PREPARED,\n X as STORY_RENDERED,\n B as STORY_RENDER_PHASE_CHANGED,\n q as STORY_SPECIFIED,\n K as STORY_THREW_EXCEPTION,\n j as STORY_UNCHANGED,\n RE as TELEMETRY_ERROR,\n EE as TOGGLE_WHATS_NEW_NOTIFICATIONS,\n H as UNHANDLED_ERRORS_WHILE_PLAYING,\n z as UPDATE_GLOBALS,\n J as UPDATE_QUERY_PARAMS,\n Z as UPDATE_STORY_ARGS,\n S as default\n};\n","import { STORY_CHANGED } from 'storybook/internal/core-events';\nimport type { RenderContext, ArgsStoryFn } from 'storybook/internal/types';\nimport type { AureliaRenderer } from './types';\nimport Aurelia, { Constructable, CustomElement } from 'aurelia';\n\ninterface AureliaStoryResult {\n template: string;\n components?: unknown[];\n Component?: unknown;\n container?: any;\n items?: unknown[];\n innerHtml?: string;\n props?: Record<string, any>;\n}\n\n/**\n * Merges multiple sources into a single object.\n * Sources can be story parameters, args, or story.props.\n */\nfunction mergeStoryProps(\n ...sources: Array<Record<string, any> | undefined>\n): Record<string, any> {\n return Object.assign({}, ...sources);\n}\n\n// Track Aurelia apps for cleanup\nconst appMap = new Map<HTMLElement, Aurelia>();\n\nasync function teardown(element: HTMLElement) {\n if (appMap.has(element)) {\n const app = appMap.get(element);\n if (app) {\n await app.stop();\n appMap.delete(element);\n }\n }\n}\n\nexport const render: ArgsStoryFn<AureliaRenderer> = (args, { id, component: Component }) => {\n if (!Component) {\n throw new Error(\n `Unable to render story ${id} as the component annotation is missing from the default export`\n );\n }\n return { Component, props: args, template: '' };\n};\n\nexport async function renderToCanvas(\n {\n storyFn,\n title,\n name,\n showMain,\n showError,\n storyContext,\n forceRemount,\n }: RenderContext<AureliaRenderer>,\n canvasElement: HTMLElement,\n bootstrapAppFn?: typeof bootstrapAureliaApp\n) {\n const appBootstrapFn = bootstrapAppFn || bootstrapAureliaApp;\n\n const { parameters, component, args } = storyContext;\n let app = appMap.get(canvasElement);\n\n const story = storyFn() as AureliaStoryResult;\n\n if (!story) {\n showError({\n title: `Expecting an Aurelia component from the story: \"${name}\" of \"${title}\".`,\n description: `\n Did you forget to return the Aurelia component from the story?\n Use \"() => ({ template: '<custom-component></custom-component>' })\" when defining the story.\n `,\n });\n return () => {};\n }\n\n showMain();\n\n let mergedProps;\n // Use full merge (including story.props) when bootstrapping a new app or force remounting.\n if (!app || forceRemount) {\n mergedProps = mergeStoryProps(parameters?.args, args, story.props);\n if (app) {\n await teardown(canvasElement);\n }\n app = appBootstrapFn(\n story,\n mergedProps,\n canvasElement,\n component as Constructable\n ) as Aurelia;\n await app.start();\n appMap.set(canvasElement, app);\n } else {\n // Update the existing app viewModel only with parameters and args (exclude story.props).\n mergedProps = mergeStoryProps(parameters?.args, args);\n if (app.root?.controller?.viewModel) {\n Object.assign(app.root.controller.viewModel, mergedProps);\n }\n }\n\n // Set up story change listener for cleanup\n const channel = storyContext.viewMode === 'story' ? storyContext.channel : null;\n let onStoryChange: () => void;\n if (channel) {\n onStoryChange = () => {\n // When the story changes, clean up the Aurelia app\n teardown(canvasElement);\n };\n channel.on(STORY_CHANGED, onStoryChange);\n }\n\n // Return teardown function that also unsubscribes from STORY_CHANGED\n return async () => {\n if (channel && onStoryChange) {\n channel.off(STORY_CHANGED, onStoryChange);\n }\n await teardown(canvasElement);\n };\n}\n\nexport function bootstrapAureliaApp(\n story: AureliaStoryResult,\n args: Record<string, any>,\n domElement: HTMLElement,\n component?: Constructable\n) {\n const aurelia = new Aurelia(story.container);\n\n if (story.items?.length) {\n aurelia.register(...story.items);\n }\n\n if (story.components?.length) {\n aurelia.register(...story.components);\n }\n\n let { template } = story;\n\n if (component) {\n template = template ?? createComponentTemplate(component, story.innerHtml);\n aurelia.register(component);\n }\n\n const App = CustomElement.define(\n {\n name: 'au-storybook',\n template,\n containerless: true,\n },\n class {}\n );\n\n const app = Object.assign(new App(), args);\n\n return aurelia.app({\n host: domElement,\n component: app,\n });\n}\n\nexport function createComponentTemplate(\n component: Constructable,\n innerHtml?: string\n): string {\n const def = CustomElement.getDefinition(component);\n\n return `<${def.name} ${Object.values(def.bindables)\n .map((bindable) => `${bindable.attribute}.bind=\"${bindable.name}\"`)\n .join(' ')}>${innerHtml ?? ''}</${def.name}>`;\n}","import { renderToCanvas } from './preview/render';\n\nexport { renderToCanvas };\nexport const render = renderToCanvas;\n"],"names":["STORY_CHANGED","CustomElement"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../src/preview/render.ts","../src/index.ts"],"sourcesContent":["import { STORY_CHANGED } from 'storybook/internal/core-events';\nimport type { RenderContext, ArgsStoryFn } from 'storybook/internal/types';\nimport type { AureliaRenderer } from './types';\nimport Aurelia, { Constructable, CustomElement } from 'aurelia';\n\ninterface AureliaStoryResult {\n template: string;\n components?: unknown[];\n Component?: unknown;\n container?: any;\n items?: unknown[];\n innerHtml?: string;\n props?: Record<string, any>;\n}\n\n// Track Aurelia apps for cleanup\nconst appMap = new Map<HTMLElement, any>();\n\nasync function teardown(element: HTMLElement) {\n if (appMap.has(element)) {\n const app = appMap.get(element);\n if (app) {\n await app.stop();\n appMap.delete(element);\n }\n }\n}\n\nexport const render: ArgsStoryFn<AureliaRenderer> = (args, context) => {\n const { id, component: Component } = context;\n \n if (!Component) {\n throw new Error(\n `Unable to render story ${id} as the component annotation is missing from the default export`\n );\n }\n return { Component, props: args, template: '' };\n};\n\nexport async function renderToCanvas(\n {\n storyFn,\n title,\n name,\n showMain,\n showError,\n storyContext,\n forceRemount,\n }: RenderContext<AureliaRenderer>,\n canvasElement: HTMLElement,\n bootstrapAppFn?: typeof createAureliaApp\n) {\n // Store reference to the original storybook root element\n const rootElement = canvasElement;\n\n // Ensure we have (or create) a single container inside the root where the Aurelia app actually renders\n let hostElement: HTMLElement;\n if (rootElement.id === 'storybook-root') {\n hostElement = rootElement.querySelector('.aurelia-story-container') as HTMLElement;\n if (!hostElement) {\n hostElement = document.createElement('div');\n hostElement.className = 'aurelia-story-container';\n hostElement.style.height = '100%';\n rootElement.appendChild(hostElement);\n }\n } else {\n hostElement = rootElement;\n }\n\n // All app instances are now tracked by the *root* element, ensuring we only ever have one per story iframe\n const appBootstrapFn = bootstrapAppFn ?? createAureliaApp;\n const { parameters, component, args } = storyContext;\n \n let app = appMap.get(rootElement);\n const story = storyFn() as AureliaStoryResult;\n \n // Temporary debug logging\n console.log(`[DEBUG] Story: ${name}, forceRemount: ${forceRemount}, hasExistingApp: ${!!app}, canvasId: ${canvasElement.className}`);\n\n if (!story) {\n showError({\n title: `Expecting an Aurelia component from the story: \"${name}\" of \"${title}\".`,\n description: `\n Did you forget to return the Aurelia component from the story?\n Use \"() => ({ template: '<custom-component></custom-component>' })\" when defining the story.\n `,\n });\n return () => {};\n }\n\n showMain();\n\n if (!app || forceRemount) {\n if (forceRemount && app) {\n await teardown(rootElement);\n app = undefined;\n }\n // Clear container before mounting new app\n hostElement.innerHTML = '';\n\n const mergedProps = { ...parameters?.args, ...args, ...story.props };\n\n const aureliaApp = appBootstrapFn(\n story,\n mergedProps,\n hostElement,\n component as Constructable\n );\n await aureliaApp.start();\n appMap.set(rootElement, aureliaApp);\n app = aureliaApp;\n } else {\n // update existing app props\n const mergedProps = { ...parameters?.args, ...args, ...story.props };\n if (app?.root?.controller?.viewModel) {\n Object.assign(app.root.controller.viewModel, mergedProps);\n }\n }\n\n // Return cleanup fn\n return async () => {\n await teardown(rootElement);\n };\n}\n\nexport function createAureliaApp(\n story: AureliaStoryResult,\n args: Record<string, any>,\n domElement: HTMLElement,\n component?: Constructable\n) {\n const aurelia = new Aurelia(story.container);\n\n if (story.items?.length) {\n aurelia.register(...story.items);\n }\n\n if (story.components?.length) {\n aurelia.register(...story.components);\n }\n\n let { template } = story;\n\n if (component) {\n template = template ?? createComponentTemplate(component, story.innerHtml);\n aurelia.register(component);\n }\n\n const App = CustomElement.define(\n {\n name: 'sb-app',\n template,\n containerless: true,\n },\n class {}\n );\n\n const app = Object.assign(new App(), args);\n\n return aurelia.app({\n host: domElement,\n component: app,\n });\n}\n\nexport function createComponentTemplate(\n component: Constructable,\n innerHtml?: string\n): string {\n const def = CustomElement.getDefinition(component);\n\n return `<${def.name} ${Object.values(def.bindables)\n .map((bindable) => `${bindable.attribute}.bind=\"${bindable.name}\"`)\n .join(' ')}>${innerHtml ?? ''}</${def.name}>`;\n}","import type { StorybookConfig } from 'storybook/internal/types';\nimport { renderToCanvas } from './preview/render';\n\nexport { renderToCanvas };\nexport const render = renderToCanvas;\n\n// Define the framework\nexport const framework = {\n name: '@aurelia/storybook',\n options: {}\n};\n\n// Framework configuration for Storybook\nexport const frameworkOptions = {\n builder: {\n name: '@storybook/builder-vite',\n options: {}\n }\n};\n\n// Export a complete framework configuration\nexport const aureliaFramework = {\n name: '@aurelia/storybook',\n options: {},\n builder: '@storybook/builder-vite'\n};\n\n// Provide external dependencies configuration\nexport const externals = {\n 'react': 'React',\n 'react-dom': 'ReactDOM'\n};\n"],"names":["CustomElement"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,89 +1,5 @@
1
1
  import Aurelia, { CustomElement } from 'aurelia';
2
2
 
3
- // src/core-events/index.ts
4
- var R = /* @__PURE__ */ ((E) => (E.CHANNEL_WS_DISCONNECT = "channelWSDisconnect", E.CHANNEL_CREATED = "channelCreated", E.CONFIG_ERROR = "co\
5
- nfigError", E.STORY_INDEX_INVALIDATED = "storyIndexInvalidated", E.STORY_SPECIFIED = "storySpecified", E.SET_CONFIG = "setConfig", E.SET_STORIES =
6
- "setStories", E.SET_INDEX = "setIndex", E.SET_CURRENT_STORY = "setCurrentStory", E.CURRENT_STORY_WAS_SET = "currentStoryWasSet", E.FORCE_RE_RENDER =
7
- "forceReRender", E.FORCE_REMOUNT = "forceRemount", E.PRELOAD_ENTRIES = "preloadStories", E.STORY_PREPARED = "storyPrepared", E.DOCS_PREPARED =
8
- "docsPrepared", E.STORY_CHANGED = "storyChanged", E.STORY_UNCHANGED = "storyUnchanged", E.STORY_RENDERED = "storyRendered", E.STORY_FINISHED =
9
- "storyFinished", E.STORY_MISSING = "storyMissing", E.STORY_ERRORED = "storyErrored", E.STORY_THREW_EXCEPTION = "storyThrewException", E.STORY_RENDER_PHASE_CHANGED =
10
- "storyRenderPhaseChanged", E.STORY_HOT_UPDATED = "storyHotUpdated", E.PLAY_FUNCTION_THREW_EXCEPTION = "playFunctionThrewException", E.UNHANDLED_ERRORS_WHILE_PLAYING =
11
- "unhandledErrorsWhilePlaying", E.UPDATE_STORY_ARGS = "updateStoryArgs", E.STORY_ARGS_UPDATED = "storyArgsUpdated", E.RESET_STORY_ARGS = "res\
12
- etStoryArgs", E.SET_FILTER = "setFilter", E.SET_GLOBALS = "setGlobals", E.UPDATE_GLOBALS = "updateGlobals", E.GLOBALS_UPDATED = "globalsUpda\
13
- ted", E.REGISTER_SUBSCRIPTION = "registerSubscription", E.PREVIEW_KEYDOWN = "previewKeydown", E.PREVIEW_BUILDER_PROGRESS = "preview_builder_\
14
- progress", E.SELECT_STORY = "selectStory", E.STORIES_COLLAPSE_ALL = "storiesCollapseAll", E.STORIES_EXPAND_ALL = "storiesExpandAll", E.DOCS_RENDERED =
15
- "docsRendered", E.SHARED_STATE_CHANGED = "sharedStateChanged", E.SHARED_STATE_SET = "sharedStateSet", E.NAVIGATE_URL = "navigateUrl", E.UPDATE_QUERY_PARAMS =
16
- "updateQueryParams", E.REQUEST_WHATS_NEW_DATA = "requestWhatsNewData", E.RESULT_WHATS_NEW_DATA = "resultWhatsNewData", E.SET_WHATS_NEW_CACHE =
17
- "setWhatsNewCache", E.TOGGLE_WHATS_NEW_NOTIFICATIONS = "toggleWhatsNewNotifications", E.TELEMETRY_ERROR = "telemetryError", E.FILE_COMPONENT_SEARCH_REQUEST =
18
- "fileComponentSearchRequest", E.FILE_COMPONENT_SEARCH_RESPONSE = "fileComponentSearchResponse", E.SAVE_STORY_REQUEST = "saveStoryRequest", E.
19
- SAVE_STORY_RESPONSE = "saveStoryResponse", E.ARGTYPES_INFO_REQUEST = "argtypesInfoRequest", E.ARGTYPES_INFO_RESPONSE = "argtypesInfoResponse",
20
- E.CREATE_NEW_STORYFILE_REQUEST = "createNewStoryfileRequest", E.CREATE_NEW_STORYFILE_RESPONSE = "createNewStoryfileResponse", E))(R || {}), {
21
- CHANNEL_WS_DISCONNECT: _,
22
- CHANNEL_CREATED: T,
23
- CONFIG_ERROR: O,
24
- CREATE_NEW_STORYFILE_REQUEST: A,
25
- CREATE_NEW_STORYFILE_RESPONSE: N,
26
- CURRENT_STORY_WAS_SET: r,
27
- DOCS_PREPARED: D,
28
- DOCS_RENDERED: I,
29
- FILE_COMPONENT_SEARCH_REQUEST: o,
30
- FILE_COMPONENT_SEARCH_RESPONSE: C,
31
- FORCE_RE_RENDER: P,
32
- FORCE_REMOUNT: L,
33
- GLOBALS_UPDATED: Y,
34
- NAVIGATE_URL: a,
35
- PLAY_FUNCTION_THREW_EXCEPTION: U,
36
- UNHANDLED_ERRORS_WHILE_PLAYING: H,
37
- PRELOAD_ENTRIES: G,
38
- PREVIEW_BUILDER_PROGRESS: W,
39
- PREVIEW_KEYDOWN: d,
40
- REGISTER_SUBSCRIPTION: t,
41
- RESET_STORY_ARGS: p,
42
- SELECT_STORY: i,
43
- SET_CONFIG: F,
44
- SET_CURRENT_STORY: l,
45
- SET_FILTER: y,
46
- SET_GLOBALS: e,
47
- SET_INDEX: c,
48
- SET_STORIES: h,
49
- SHARED_STATE_CHANGED: f,
50
- SHARED_STATE_SET: g,
51
- STORIES_COLLAPSE_ALL: u,
52
- STORIES_EXPAND_ALL: s,
53
- STORY_ARGS_UPDATED: x,
54
- STORY_CHANGED: m,
55
- STORY_ERRORED: M,
56
- STORY_INDEX_INVALIDATED: Q,
57
- STORY_MISSING: V,
58
- STORY_PREPARED: w,
59
- STORY_RENDER_PHASE_CHANGED: B,
60
- STORY_RENDERED: X,
61
- STORY_FINISHED: b,
62
- STORY_SPECIFIED: q,
63
- STORY_THREW_EXCEPTION: K,
64
- STORY_UNCHANGED: j,
65
- STORY_HOT_UPDATED: k,
66
- UPDATE_GLOBALS: z,
67
- UPDATE_QUERY_PARAMS: J,
68
- UPDATE_STORY_ARGS: Z,
69
- REQUEST_WHATS_NEW_DATA: $,
70
- RESULT_WHATS_NEW_DATA: n,
71
- SET_WHATS_NEW_CACHE: v,
72
- TOGGLE_WHATS_NEW_NOTIFICATIONS: EE,
73
- TELEMETRY_ERROR: RE,
74
- SAVE_STORY_REQUEST: SE,
75
- SAVE_STORY_RESPONSE: _E,
76
- ARGTYPES_INFO_REQUEST: TE,
77
- ARGTYPES_INFO_RESPONSE: OE
78
- } = R;
79
-
80
- /**
81
- * Merges multiple sources into a single object.
82
- * Sources can be story parameters, args, or story.props.
83
- */
84
- function mergeStoryProps(...sources) {
85
- return Object.assign({}, ...sources);
86
- }
87
3
  // Track Aurelia apps for cleanup
88
4
  const appMap = new Map();
89
5
  async function teardown(element) {
@@ -96,10 +12,29 @@ async function teardown(element) {
96
12
  }
97
13
  }
98
14
  async function renderToCanvas({ storyFn, title, name, showMain, showError, storyContext, forceRemount, }, canvasElement, bootstrapAppFn) {
99
- const appBootstrapFn = bootstrapAppFn || bootstrapAureliaApp;
15
+ // Store reference to the original storybook root element
16
+ const rootElement = canvasElement;
17
+ // Ensure we have (or create) a single container inside the root where the Aurelia app actually renders
18
+ let hostElement;
19
+ if (rootElement.id === 'storybook-root') {
20
+ hostElement = rootElement.querySelector('.aurelia-story-container');
21
+ if (!hostElement) {
22
+ hostElement = document.createElement('div');
23
+ hostElement.className = 'aurelia-story-container';
24
+ hostElement.style.height = '100%';
25
+ rootElement.appendChild(hostElement);
26
+ }
27
+ }
28
+ else {
29
+ hostElement = rootElement;
30
+ }
31
+ // All app instances are now tracked by the *root* element, ensuring we only ever have one per story iframe
32
+ const appBootstrapFn = bootstrapAppFn ?? createAureliaApp;
100
33
  const { parameters, component, args } = storyContext;
101
- let app = appMap.get(canvasElement);
34
+ let app = appMap.get(rootElement);
102
35
  const story = storyFn();
36
+ // Temporary debug logging
37
+ console.log(`[DEBUG] Story: ${name}, forceRemount: ${forceRemount}, hasExistingApp: ${!!app}, canvasId: ${canvasElement.className}`);
103
38
  if (!story) {
104
39
  showError({
105
40
  title: `Expecting an Aurelia component from the story: "${name}" of "${title}".`,
@@ -111,43 +46,32 @@ async function renderToCanvas({ storyFn, title, name, showMain, showError, story
111
46
  return () => { };
112
47
  }
113
48
  showMain();
114
- let mergedProps;
115
- // Use full merge (including story.props) when bootstrapping a new app or force remounting.
116
49
  if (!app || forceRemount) {
117
- mergedProps = mergeStoryProps(parameters?.args, args, story.props);
118
- if (app) {
119
- await teardown(canvasElement);
50
+ if (forceRemount && app) {
51
+ await teardown(rootElement);
52
+ app = undefined;
120
53
  }
121
- app = appBootstrapFn(story, mergedProps, canvasElement, component);
122
- await app.start();
123
- appMap.set(canvasElement, app);
54
+ // Clear container before mounting new app
55
+ hostElement.innerHTML = '';
56
+ const mergedProps = { ...parameters?.args, ...args, ...story.props };
57
+ const aureliaApp = appBootstrapFn(story, mergedProps, hostElement, component);
58
+ await aureliaApp.start();
59
+ appMap.set(rootElement, aureliaApp);
60
+ app = aureliaApp;
124
61
  }
125
62
  else {
126
- // Update the existing app viewModel only with parameters and args (exclude story.props).
127
- mergedProps = mergeStoryProps(parameters?.args, args);
128
- if (app.root?.controller?.viewModel) {
63
+ // update existing app props
64
+ const mergedProps = { ...parameters?.args, ...args, ...story.props };
65
+ if (app?.root?.controller?.viewModel) {
129
66
  Object.assign(app.root.controller.viewModel, mergedProps);
130
67
  }
131
68
  }
132
- // Set up story change listener for cleanup
133
- const channel = storyContext.viewMode === 'story' ? storyContext.channel : null;
134
- let onStoryChange;
135
- if (channel) {
136
- onStoryChange = () => {
137
- // When the story changes, clean up the Aurelia app
138
- teardown(canvasElement);
139
- };
140
- channel.on(m, onStoryChange);
141
- }
142
- // Return teardown function that also unsubscribes from STORY_CHANGED
69
+ // Return cleanup fn
143
70
  return async () => {
144
- if (channel && onStoryChange) {
145
- channel.off(m, onStoryChange);
146
- }
147
- await teardown(canvasElement);
71
+ await teardown(rootElement);
148
72
  };
149
73
  }
150
- function bootstrapAureliaApp(story, args, domElement, component) {
74
+ function createAureliaApp(story, args, domElement, component) {
151
75
  const aurelia = new Aurelia(story.container);
152
76
  if (story.items?.length) {
153
77
  aurelia.register(...story.items);
@@ -161,7 +85,7 @@ function bootstrapAureliaApp(story, args, domElement, component) {
161
85
  aurelia.register(component);
162
86
  }
163
87
  const App = CustomElement.define({
164
- name: 'au-storybook',
88
+ name: 'sb-app',
165
89
  template,
166
90
  containerless: true,
167
91
  }, class {
@@ -180,6 +104,29 @@ function createComponentTemplate(component, innerHtml) {
180
104
  }
181
105
 
182
106
  const render = renderToCanvas;
107
+ // Define the framework
108
+ const framework = {
109
+ name: '@aurelia/storybook',
110
+ options: {}
111
+ };
112
+ // Framework configuration for Storybook
113
+ const frameworkOptions = {
114
+ builder: {
115
+ name: '@storybook/builder-vite',
116
+ options: {}
117
+ }
118
+ };
119
+ // Export a complete framework configuration
120
+ const aureliaFramework = {
121
+ name: '@aurelia/storybook',
122
+ options: {},
123
+ builder: '@storybook/builder-vite'
124
+ };
125
+ // Provide external dependencies configuration
126
+ const externals = {
127
+ 'react': 'React',
128
+ 'react-dom': 'ReactDOM'
129
+ };
183
130
 
184
- export { render, renderToCanvas };
131
+ export { aureliaFramework, externals, framework, frameworkOptions, render, renderToCanvas };
185
132
  //# sourceMappingURL=index.mjs.map