@aurelia/storybook 0.1.0 → 1.0.0

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.
Files changed (95) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -3
  3. package/__tests__/preset.test.ts +49 -0
  4. package/__tests__/preview.test.ts +139 -0
  5. package/__tests__/render.test.ts +0 -1
  6. package/__tests__/webpack.test.ts +21 -0
  7. package/apps/hello-world/.storybook/main.ts +30 -0
  8. package/apps/hello-world/.storybook/preview.ts +1 -0
  9. package/apps/hello-world/.stylelintrc.json +5 -0
  10. package/apps/hello-world/.yarnrc.yml +2 -0
  11. package/apps/hello-world/README.md +28 -0
  12. package/apps/hello-world/eslint.config.mjs +25 -0
  13. package/apps/hello-world/favicon.ico +0 -0
  14. package/apps/hello-world/index.html +17 -0
  15. package/apps/hello-world/package.json +65 -0
  16. package/apps/hello-world/src/hello-world.html +6 -0
  17. package/apps/hello-world/src/hello-world.ts +17 -0
  18. package/apps/hello-world/src/main.ts +6 -0
  19. package/apps/hello-world/src/my-app.html +1 -0
  20. package/apps/hello-world/src/my-app.ts +3 -0
  21. package/apps/hello-world/src/resource.d.ts +15 -0
  22. package/apps/hello-world/src/stories/hello-world.stories.ts +53 -0
  23. package/apps/hello-world/test/my-app.spec.ts +15 -0
  24. package/apps/hello-world/test/setup.ts +29 -0
  25. package/apps/hello-world/tsconfig.json +18 -0
  26. package/apps/hello-world/tsconfig.vitest.json +11 -0
  27. package/apps/hello-world/vite.config.ts +19 -0
  28. package/apps/hello-world/vitest.config.ts +15 -0
  29. package/apps/hello-world-webpack/.storybook/main.ts +18 -0
  30. package/apps/hello-world-webpack/.storybook/preview.ts +3 -0
  31. package/apps/hello-world-webpack/.stylelintrc.json +5 -0
  32. package/apps/hello-world-webpack/.yarnrc.yml +2 -0
  33. package/apps/hello-world-webpack/README.md +29 -0
  34. package/apps/hello-world-webpack/eslint.config.mjs +25 -0
  35. package/apps/hello-world-webpack/favicon.ico +0 -0
  36. package/apps/hello-world-webpack/index.html +15 -0
  37. package/apps/hello-world-webpack/package-lock.json +10178 -0
  38. package/apps/hello-world-webpack/package.json +55 -0
  39. package/apps/hello-world-webpack/src/main.ts +6 -0
  40. package/apps/hello-world-webpack/src/my-app.css +3 -0
  41. package/apps/hello-world-webpack/src/my-app.html +1 -0
  42. package/apps/hello-world-webpack/src/my-app.stories.ts +12 -0
  43. package/apps/hello-world-webpack/src/my-app.ts +3 -0
  44. package/apps/hello-world-webpack/src/resource.d.ts +13 -0
  45. package/apps/hello-world-webpack/tsconfig.json +18 -0
  46. package/apps/hello-world-webpack/webpack.config.js +111 -0
  47. package/dist/index.js +112 -3
  48. package/dist/index.js.map +1 -0
  49. package/dist/index.mjs +109 -0
  50. package/dist/index.mjs.map +1 -0
  51. package/dist/preset.js +44 -2
  52. package/dist/preset.js.map +1 -0
  53. package/dist/preset.mjs +46 -0
  54. package/dist/preset.mjs.map +1 -0
  55. package/dist/preview/render.js +26 -14
  56. package/dist/preview/render.js.map +1 -0
  57. package/dist/{src/preview/render.js → preview/render.mjs} +8 -4
  58. package/dist/preview/render.mjs.map +1 -0
  59. package/dist/preview/types.js +3 -1
  60. package/dist/preview/types.js.map +1 -0
  61. package/dist/preview/types.mjs +2 -0
  62. package/dist/preview/types.mjs.map +1 -0
  63. package/dist/preview.js +75 -0
  64. package/dist/preview.js.map +1 -0
  65. package/dist/preview.mjs +73 -0
  66. package/dist/preview.mjs.map +1 -0
  67. package/dist/webpack.js +23 -0
  68. package/dist/webpack.js.map +1 -0
  69. package/dist/webpack.mjs +21 -0
  70. package/dist/webpack.mjs.map +1 -0
  71. package/jest.config.js +1 -1
  72. package/package.json +40 -20
  73. package/rollup.config.mjs +51 -0
  74. package/src/preset.ts +22 -5
  75. package/src/preview.ts +50 -0
  76. package/src/webpack.ts +21 -0
  77. package/tsconfig.build.json +5 -0
  78. package/tsconfig.json +1 -0
  79. package/dist/__tests__/example.test.js +0 -6
  80. package/dist/__tests__/render.test.d.ts +0 -1
  81. package/dist/__tests__/render.test.js +0 -156
  82. package/dist/index.d.ts +0 -3
  83. package/dist/preset.d.ts +0 -8
  84. package/dist/preview/render.d.ts +0 -17
  85. package/dist/preview/render.test.d.ts +0 -1
  86. package/dist/preview/render.test.js +0 -126
  87. package/dist/preview/types.d.ts +0 -5
  88. package/dist/src/index.d.ts +0 -3
  89. package/dist/src/index.js +0 -3
  90. package/dist/src/preset.d.ts +0 -8
  91. package/dist/src/preset.js +0 -11
  92. package/dist/src/preview/render.d.ts +0 -17
  93. package/dist/src/preview/types.d.ts +0 -5
  94. package/dist/src/preview/types.js +0 -1
  95. /package/{dist/__tests__/example.test.d.ts → apps/hello-world-webpack/.env.development} +0 -0
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "examples",
3
+ "description": "An Aurelia 2 client application.",
4
+ "version": "0.1.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "???"
8
+ },
9
+ "license": "UNLICENSED",
10
+ "dependencies": {
11
+ "@aurelia/router": "latest",
12
+ "aurelia": "2.0.0-beta.14"
13
+ },
14
+ "devDependencies": {
15
+ "@aurelia/storybook": "file:../../",
16
+ "@aurelia/testing": "latest",
17
+ "@aurelia/webpack-loader": "latest",
18
+ "@storybook/addon-essentials": "^8.6.14",
19
+ "@storybook/addon-links": "^9.0.12",
20
+ "@storybook/addon-webpack5-compiler-swc": "^3.0.0",
21
+ "@storybook/html-webpack5": "^8.6.14",
22
+ "@types/node": "^22.10.2",
23
+ "autoprefixer": "^10.4.20",
24
+ "css-loader": "^7.1.2",
25
+ "dotenv-webpack": "^8.1.0",
26
+ "eslint": "^9.17.0",
27
+ "globals": "^15.14.0",
28
+ "html-webpack-plugin": "^5.6.3",
29
+ "postcss": "^8.4.49",
30
+ "postcss-loader": "^8.1.1",
31
+ "storybook": "^9.0.12",
32
+ "style-loader": "^4.0.0",
33
+ "stylelint": "^16.12.0",
34
+ "stylelint-config-standard": "^36.0.1",
35
+ "ts-loader": "^9.5.1",
36
+ "tslib": "^2.8.1",
37
+ "typescript": "^5.7.2",
38
+ "typescript-eslint": "^8.18.1",
39
+ "webpack": "^5.97.1",
40
+ "webpack-bundle-analyzer": "^4.10.2",
41
+ "webpack-cli": "^5.1.4",
42
+ "webpack-dev-server": "^5.2.0"
43
+ },
44
+ "scripts": {
45
+ "lint:js": "eslint src",
46
+ "lint:css": "stylelint \"src/**/*.css\"",
47
+ "lint": "npm run lint:js && npm run lint:css",
48
+ "pretest": "npm run lint",
49
+ "start": "webpack-dev-server",
50
+ "build": "webpack",
51
+ "analyze": "webpack --env production --analyze",
52
+ "storybook": "storybook dev -p 6006",
53
+ "build-storybook": "storybook build"
54
+ }
55
+ }
@@ -0,0 +1,6 @@
1
+ import Aurelia from 'aurelia';
2
+ import { MyApp } from './my-app';
3
+
4
+ Aurelia
5
+ .app(MyApp)
6
+ .start();
@@ -0,0 +1,3 @@
1
+ .message {
2
+ background-color: lightblue;
3
+ }
@@ -0,0 +1 @@
1
+ <div class="message">${message}</div>
@@ -0,0 +1,12 @@
1
+ import { MyApp } from './my-app';
2
+
3
+ export default {
4
+ title: 'My-App',
5
+ component: MyApp,
6
+ };
7
+
8
+ export const Default = () => ({
9
+ Component: MyApp,
10
+ template: '<my-app></my-app>',
11
+ props: {}
12
+ });
@@ -0,0 +1,3 @@
1
+ export class MyApp {
2
+ public message = 'Hello World!';
3
+ }
@@ -0,0 +1,13 @@
1
+ declare module '*.html' {
2
+ import { IContainer, PartialBindableDefinition } from 'aurelia';
3
+ export const name: string;
4
+ export const template: string;
5
+ export default template;
6
+ export const dependencies: string[];
7
+ export const containerless: boolean | undefined;
8
+ export const bindables: Record<string, PartialBindableDefinition>;
9
+ export const shadowOptions: { mode: 'open' | 'closed' } | undefined;
10
+ export function register(container: IContainer): void;
11
+ }
12
+
13
+ declare module '*.css';
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "esnext",
4
+ "moduleResolution": "node",
5
+ "skipLibCheck": true,
6
+ "target": "ES2017",
7
+ "esModuleInterop": true,
8
+ "resolveJsonModule": true,
9
+ "importHelpers": true,
10
+ "sourceMap": true
11
+ },
12
+ "include": [
13
+ "src"
14
+ ],
15
+ "files": [
16
+ "src/resource.d.ts"
17
+ ]
18
+ }
@@ -0,0 +1,111 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+ const path = require('path');
3
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
4
+ const {BundleAnalyzerPlugin} = require('webpack-bundle-analyzer');
5
+ const Dotenv = require('dotenv-webpack');
6
+ const TerserPlugin = require('terser-webpack-plugin');
7
+
8
+
9
+ const cssLoader = {
10
+ loader: 'css-loader'
11
+ };
12
+
13
+ const postcssLoader = {
14
+ loader: 'postcss-loader',
15
+ options: {
16
+ postcssOptions: {
17
+ plugins: ['autoprefixer']
18
+ }
19
+ }
20
+ };
21
+
22
+ module.exports = function(env, { analyze }) {
23
+ const production = env.production || process.env.NODE_ENV === 'production';
24
+ return {
25
+ target: 'web',
26
+ mode: production ? 'production' : 'development',
27
+ devtool: production ? undefined : 'eval-source-map',
28
+ optimization: {
29
+ minimizer: [
30
+ new TerserPlugin({
31
+ terserOptions: {
32
+ // Terser fast minify mode
33
+ // https://github.com/terser-js/terser#terser-fast-minify-mode
34
+ // It's a good balance on size and speed to turn off compress.
35
+ // Also bypass some terser bug.
36
+ compress: false
37
+ },
38
+ }),
39
+ ],
40
+ },
41
+ entry: {
42
+ entry: './src/main.ts',
43
+ },
44
+ output: {
45
+ clean: true,
46
+ path: path.resolve(__dirname, 'dist'),
47
+ filename: production ? '[name].[contenthash].bundle.js' : '[name].bundle.js',
48
+ },
49
+ resolve: {
50
+ extensions: ['.ts', '.js'],
51
+ modules: [path.resolve(__dirname, 'src'), 'node_modules'],
52
+ alias: production ? {
53
+ // add your production aliases here
54
+ } : {
55
+ ...getAureliaDevAliases()
56
+ // add your development aliases here
57
+ }
58
+ },
59
+ devServer: {
60
+ historyApiFallback: true,
61
+ open: !process.env.CI,
62
+ port: 9000
63
+ },
64
+ module: {
65
+ rules: [
66
+ { test: /\.(png|svg|jpg|jpeg|gif)$/i, type: 'asset' },
67
+ { test: /\.(woff|woff2|ttf|eot|svg|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/i, type: 'asset' },
68
+ { test: /\.css$/i, use: [ 'style-loader', cssLoader, postcssLoader ] },
69
+ { test: /\.ts$/i, use: ['ts-loader', '@aurelia/webpack-loader'], exclude: /node_modules/ },
70
+ {
71
+ test: /[/\\]src[/\\].+\.html$/i,
72
+ use: '@aurelia/webpack-loader',
73
+ exclude: /node_modules/
74
+ }
75
+ ]
76
+ },
77
+ plugins: [
78
+ new HtmlWebpackPlugin({ template: 'index.html', favicon: 'favicon.ico' }),
79
+ new Dotenv({
80
+ path: `./.env${production ? '' : '.' + (process.env.NODE_ENV || 'development')}`,
81
+ }),
82
+ analyze && new BundleAnalyzerPlugin()
83
+ ].filter(p => p)
84
+ }
85
+ }
86
+
87
+ function getAureliaDevAliases() {
88
+ return [
89
+ 'aurelia',
90
+ 'fetch-client',
91
+ 'kernel',
92
+ 'metadata',
93
+ 'platform',
94
+ 'platform-browser',
95
+ 'route-recognizer',
96
+ 'router',
97
+ 'router-lite',
98
+ 'runtime',
99
+ 'runtime-html',
100
+ 'testing',
101
+ 'state',
102
+ 'ui-virtualization'
103
+ ].reduce((map, pkg) => {
104
+ const name = pkg === 'aurelia' ? pkg : `@aurelia/${pkg}`;
105
+ try {
106
+ const packageLocation = require.resolve(name);
107
+ map[name] = path.resolve(packageLocation, `../../esm/index.dev.mjs`);
108
+ } catch {/**/}
109
+ return map;
110
+ }, {});
111
+ }
package/dist/index.js CHANGED
@@ -1,3 +1,112 @@
1
- import { renderToCanvas } from './preview/render';
2
- export { renderToCanvas };
3
- export const render = renderToCanvas;
1
+ 'use strict';
2
+
3
+ var coreEvents = require('@storybook/core-events');
4
+ var Aurelia = require('aurelia');
5
+
6
+ /**
7
+ * Merges multiple sources into a single object.
8
+ * Sources can be story parameters, args, or story.props.
9
+ */
10
+ function mergeStoryProps(...sources) {
11
+ return Object.assign({}, ...sources);
12
+ }
13
+ // Track Aurelia apps for cleanup
14
+ const appMap = new Map();
15
+ async function teardown(element) {
16
+ if (appMap.has(element)) {
17
+ const app = appMap.get(element);
18
+ if (app) {
19
+ await app.stop();
20
+ appMap.delete(element);
21
+ }
22
+ }
23
+ }
24
+ async function renderToCanvas({ storyFn, title, name, showMain, showError, storyContext, forceRemount, }, canvasElement, bootstrapAppFn) {
25
+ const appBootstrapFn = bootstrapAppFn || bootstrapAureliaApp;
26
+ const { parameters, component, args } = storyContext;
27
+ let app = appMap.get(canvasElement);
28
+ const story = storyFn();
29
+ if (!story) {
30
+ showError({
31
+ title: `Expecting an Aurelia component from the story: "${name}" of "${title}".`,
32
+ description: `
33
+ Did you forget to return the Aurelia component from the story?
34
+ Use "() => ({ template: '<custom-component></custom-component>' })" when defining the story.
35
+ `,
36
+ });
37
+ return () => { };
38
+ }
39
+ showMain();
40
+ let mergedProps;
41
+ // Use full merge (including story.props) when bootstrapping a new app or force remounting.
42
+ if (!app || forceRemount) {
43
+ mergedProps = mergeStoryProps(parameters?.args, args, story.props);
44
+ if (app) {
45
+ await teardown(canvasElement);
46
+ }
47
+ app = appBootstrapFn(story, mergedProps, canvasElement, component);
48
+ await app.start();
49
+ appMap.set(canvasElement, app);
50
+ }
51
+ else {
52
+ // Update the existing app viewModel only with parameters and args (exclude story.props).
53
+ mergedProps = mergeStoryProps(parameters?.args, args);
54
+ if (app.root?.controller?.viewModel) {
55
+ Object.assign(app.root.controller.viewModel, mergedProps);
56
+ }
57
+ }
58
+ // Set up story change listener for cleanup
59
+ const channel = storyContext.viewMode === 'story' ? storyContext.channel : null;
60
+ let onStoryChange;
61
+ if (channel) {
62
+ onStoryChange = () => {
63
+ // When the story changes, clean up the Aurelia app
64
+ teardown(canvasElement);
65
+ };
66
+ channel.on(coreEvents.STORY_CHANGED, onStoryChange);
67
+ }
68
+ // Return teardown function that also unsubscribes from STORY_CHANGED
69
+ return async () => {
70
+ if (channel && onStoryChange) {
71
+ channel.off(coreEvents.STORY_CHANGED, onStoryChange);
72
+ }
73
+ await teardown(canvasElement);
74
+ };
75
+ }
76
+ function bootstrapAureliaApp(story, args, domElement, component) {
77
+ const aurelia = new Aurelia(story.container);
78
+ if (story.items?.length) {
79
+ aurelia.register(...story.items);
80
+ }
81
+ if (story.components?.length) {
82
+ aurelia.register(...story.components);
83
+ }
84
+ let { template } = story;
85
+ if (component) {
86
+ template = template ?? createComponentTemplate(component, story.innerHtml);
87
+ aurelia.register(component);
88
+ }
89
+ const App = Aurelia.CustomElement.define({
90
+ name: 'au-storybook',
91
+ template,
92
+ containerless: true,
93
+ }, class {
94
+ });
95
+ const app = Object.assign(new App(), args);
96
+ return aurelia.app({
97
+ host: domElement,
98
+ component: app,
99
+ });
100
+ }
101
+ function createComponentTemplate(component, innerHtml) {
102
+ const def = Aurelia.CustomElement.getDefinition(component);
103
+ return `<${def.name} ${Object.values(def.bindables)
104
+ .map((bindable) => `${bindable.attribute}.bind="${bindable.name}"`)
105
+ .join(' ')}>${innerHtml ?? ''}</${def.name}>`;
106
+ }
107
+
108
+ const render = renderToCanvas;
109
+
110
+ exports.render = render;
111
+ exports.renderToCanvas = renderToCanvas;
112
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/preview/render.ts","../src/index.ts"],"sourcesContent":["import { STORY_CHANGED } from '@storybook/core-events';\nimport type { RenderContext, ArgsStoryFn } from '@storybook/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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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,109 @@
1
+ import { STORY_CHANGED } from '@storybook/core-events';
2
+ import Aurelia, { CustomElement } from 'aurelia';
3
+
4
+ /**
5
+ * Merges multiple sources into a single object.
6
+ * Sources can be story parameters, args, or story.props.
7
+ */
8
+ function mergeStoryProps(...sources) {
9
+ return Object.assign({}, ...sources);
10
+ }
11
+ // Track Aurelia apps for cleanup
12
+ const appMap = new Map();
13
+ async function teardown(element) {
14
+ if (appMap.has(element)) {
15
+ const app = appMap.get(element);
16
+ if (app) {
17
+ await app.stop();
18
+ appMap.delete(element);
19
+ }
20
+ }
21
+ }
22
+ async function renderToCanvas({ storyFn, title, name, showMain, showError, storyContext, forceRemount, }, canvasElement, bootstrapAppFn) {
23
+ const appBootstrapFn = bootstrapAppFn || bootstrapAureliaApp;
24
+ const { parameters, component, args } = storyContext;
25
+ let app = appMap.get(canvasElement);
26
+ const story = storyFn();
27
+ if (!story) {
28
+ showError({
29
+ title: `Expecting an Aurelia component from the story: "${name}" of "${title}".`,
30
+ description: `
31
+ Did you forget to return the Aurelia component from the story?
32
+ Use "() => ({ template: '<custom-component></custom-component>' })" when defining the story.
33
+ `,
34
+ });
35
+ return () => { };
36
+ }
37
+ showMain();
38
+ let mergedProps;
39
+ // Use full merge (including story.props) when bootstrapping a new app or force remounting.
40
+ if (!app || forceRemount) {
41
+ mergedProps = mergeStoryProps(parameters?.args, args, story.props);
42
+ if (app) {
43
+ await teardown(canvasElement);
44
+ }
45
+ app = appBootstrapFn(story, mergedProps, canvasElement, component);
46
+ await app.start();
47
+ appMap.set(canvasElement, app);
48
+ }
49
+ else {
50
+ // Update the existing app viewModel only with parameters and args (exclude story.props).
51
+ mergedProps = mergeStoryProps(parameters?.args, args);
52
+ if (app.root?.controller?.viewModel) {
53
+ Object.assign(app.root.controller.viewModel, mergedProps);
54
+ }
55
+ }
56
+ // Set up story change listener for cleanup
57
+ const channel = storyContext.viewMode === 'story' ? storyContext.channel : null;
58
+ let onStoryChange;
59
+ if (channel) {
60
+ onStoryChange = () => {
61
+ // When the story changes, clean up the Aurelia app
62
+ teardown(canvasElement);
63
+ };
64
+ channel.on(STORY_CHANGED, onStoryChange);
65
+ }
66
+ // Return teardown function that also unsubscribes from STORY_CHANGED
67
+ return async () => {
68
+ if (channel && onStoryChange) {
69
+ channel.off(STORY_CHANGED, onStoryChange);
70
+ }
71
+ await teardown(canvasElement);
72
+ };
73
+ }
74
+ function bootstrapAureliaApp(story, args, domElement, component) {
75
+ const aurelia = new Aurelia(story.container);
76
+ if (story.items?.length) {
77
+ aurelia.register(...story.items);
78
+ }
79
+ if (story.components?.length) {
80
+ aurelia.register(...story.components);
81
+ }
82
+ let { template } = story;
83
+ if (component) {
84
+ template = template ?? createComponentTemplate(component, story.innerHtml);
85
+ aurelia.register(component);
86
+ }
87
+ const App = CustomElement.define({
88
+ name: 'au-storybook',
89
+ template,
90
+ containerless: true,
91
+ }, class {
92
+ });
93
+ const app = Object.assign(new App(), args);
94
+ return aurelia.app({
95
+ host: domElement,
96
+ component: app,
97
+ });
98
+ }
99
+ function createComponentTemplate(component, innerHtml) {
100
+ const def = CustomElement.getDefinition(component);
101
+ return `<${def.name} ${Object.values(def.bindables)
102
+ .map((bindable) => `${bindable.attribute}.bind="${bindable.name}"`)
103
+ .join(' ')}>${innerHtml ?? ''}</${def.name}>`;
104
+ }
105
+
106
+ const render = renderToCanvas;
107
+
108
+ export { render, renderToCanvas };
109
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/preview/render.ts","../src/index.ts"],"sourcesContent":["import { STORY_CHANGED } from '@storybook/core-events';\nimport type { RenderContext, ArgsStoryFn } from '@storybook/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":[],"mappings":"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"}
package/dist/preset.js CHANGED
@@ -1,11 +1,53 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * A set of rules to be added to the webpack configuration.
7
+ * @returns
8
+ */
9
+ function getRules() {
10
+ return [
11
+ {
12
+ test: /\.ts$/i,
13
+ use: ['ts-loader', '@aurelia/webpack-loader'],
14
+ exclude: /node_modules/,
15
+ },
16
+ {
17
+ test: /\.html$/i,
18
+ use: '@aurelia/webpack-loader',
19
+ exclude: /node_modules/,
20
+ },
21
+ ];
22
+ }
23
+
1
24
  // src/preset.ts
2
25
  // Minimal preset for Storybook-Aurelia2
3
26
  /**
4
27
  * Optionally adjust the Vite configuration.
5
28
  */
6
- export async function viteFinal(config) {
29
+ async function viteFinal(config) {
7
30
  // For now, return the config unchanged.
8
31
  return config;
9
32
  }
33
+ /**
34
+ * A function to configure webpack.
35
+ * @param config
36
+ * @returns
37
+ */
38
+ async function webpackFinal(config) {
39
+ const rules = config.module?.rules;
40
+ if (rules) {
41
+ rules.push(...getRules());
42
+ }
43
+ return config;
44
+ }
10
45
  // Export a default for compatibility.
11
- export default { viteFinal };
46
+ var preset = { viteFinal, webpackFinal };
47
+ const previewAnnotations = [require.resolve('./preview')];
48
+
49
+ exports.default = preset;
50
+ exports.previewAnnotations = previewAnnotations;
51
+ exports.viteFinal = viteFinal;
52
+ exports.webpackFinal = webpackFinal;
53
+ //# sourceMappingURL=preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset.js","sources":["../src/webpack.ts","../src/preset.ts"],"sourcesContent":["// src/webpack.ts\nimport type { RuleSetRule } from 'webpack';\n\n/**\n * A set of rules to be added to the webpack configuration.\n * @returns\n */\nexport function getRules(): RuleSetRule[] {\n return [\n {\n test: /\\.ts$/i,\n use: ['ts-loader', '@aurelia/webpack-loader'],\n exclude: /node_modules/,\n },\n {\n test: /\\.html$/i,\n use: '@aurelia/webpack-loader',\n exclude: /node_modules/,\n },\n ];\n}\n","// src/preset.ts\n// Minimal preset for Storybook-Aurelia2\n\nimport { getRules } from './webpack';\n\n/**\n * Optionally adjust the Vite configuration.\n */\nexport async function viteFinal(config: any): Promise<any> {\n // For now, return the config unchanged.\n return config;\n}\n\n/**\n * A function to configure webpack.\n * @param config\n * @returns\n */\nexport async function webpackFinal(config: any): Promise<any> {\n const rules = config.module?.rules;\n if (rules) {\n rules.push(...getRules());\n }\n\n return config;\n}\n\n// Export a default for compatibility.\nexport default { viteFinal, webpackFinal };\n\nexport const previewAnnotations = [require.resolve('./preview')];\n"],"names":[],"mappings":";;;;AAGA;;;AAGG;SACa,QAAQ,GAAA;IACtB,OAAO;AACL,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,GAAG,EAAE,CAAC,WAAW,EAAE,yBAAyB,CAAC;AAC7C,YAAA,OAAO,EAAE,cAAc;AACxB,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,GAAG,EAAE,yBAAyB;AAC9B,YAAA,OAAO,EAAE,cAAc;AACxB,SAAA;KACF;AACH;;ACpBA;AACA;AAIA;;AAEG;AACI,eAAe,SAAS,CAAC,MAAW,EAAA;;AAEvC,IAAA,OAAO,MAAM;AACjB;AAEA;;;;AAIG;AACI,eAAe,YAAY,CAAC,MAAW,EAAA;AAC1C,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK;IAClC,IAAI,KAAK,EAAE;AACP,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;;AAG7B,IAAA,OAAO,MAAM;AACjB;AAEA;AACA,aAAe,EAAE,SAAS,EAAE,YAAY,EAAE;AAEnC,MAAM,kBAAkB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;;;;;;;"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * A set of rules to be added to the webpack configuration.
3
+ * @returns
4
+ */
5
+ function getRules() {
6
+ return [
7
+ {
8
+ test: /\.ts$/i,
9
+ use: ['ts-loader', '@aurelia/webpack-loader'],
10
+ exclude: /node_modules/,
11
+ },
12
+ {
13
+ test: /\.html$/i,
14
+ use: '@aurelia/webpack-loader',
15
+ exclude: /node_modules/,
16
+ },
17
+ ];
18
+ }
19
+
20
+ // src/preset.ts
21
+ // Minimal preset for Storybook-Aurelia2
22
+ /**
23
+ * Optionally adjust the Vite configuration.
24
+ */
25
+ async function viteFinal(config) {
26
+ // For now, return the config unchanged.
27
+ return config;
28
+ }
29
+ /**
30
+ * A function to configure webpack.
31
+ * @param config
32
+ * @returns
33
+ */
34
+ async function webpackFinal(config) {
35
+ const rules = config.module?.rules;
36
+ if (rules) {
37
+ rules.push(...getRules());
38
+ }
39
+ return config;
40
+ }
41
+ // Export a default for compatibility.
42
+ var preset = { viteFinal, webpackFinal };
43
+ const previewAnnotations = [require.resolve('./preview')];
44
+
45
+ export { preset as default, previewAnnotations, viteFinal, webpackFinal };
46
+ //# sourceMappingURL=preset.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset.mjs","sources":["../src/webpack.ts","../src/preset.ts"],"sourcesContent":["// src/webpack.ts\nimport type { RuleSetRule } from 'webpack';\n\n/**\n * A set of rules to be added to the webpack configuration.\n * @returns\n */\nexport function getRules(): RuleSetRule[] {\n return [\n {\n test: /\\.ts$/i,\n use: ['ts-loader', '@aurelia/webpack-loader'],\n exclude: /node_modules/,\n },\n {\n test: /\\.html$/i,\n use: '@aurelia/webpack-loader',\n exclude: /node_modules/,\n },\n ];\n}\n","// src/preset.ts\n// Minimal preset for Storybook-Aurelia2\n\nimport { getRules } from './webpack';\n\n/**\n * Optionally adjust the Vite configuration.\n */\nexport async function viteFinal(config: any): Promise<any> {\n // For now, return the config unchanged.\n return config;\n}\n\n/**\n * A function to configure webpack.\n * @param config\n * @returns\n */\nexport async function webpackFinal(config: any): Promise<any> {\n const rules = config.module?.rules;\n if (rules) {\n rules.push(...getRules());\n }\n\n return config;\n}\n\n// Export a default for compatibility.\nexport default { viteFinal, webpackFinal };\n\nexport const previewAnnotations = [require.resolve('./preview')];\n"],"names":[],"mappings":"AAGA;;;AAGG;SACa,QAAQ,GAAA;IACtB,OAAO;AACL,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,GAAG,EAAE,CAAC,WAAW,EAAE,yBAAyB,CAAC;AAC7C,YAAA,OAAO,EAAE,cAAc;AACxB,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,GAAG,EAAE,yBAAyB;AAC9B,YAAA,OAAO,EAAE,cAAc;AACxB,SAAA;KACF;AACH;;ACpBA;AACA;AAIA;;AAEG;AACI,eAAe,SAAS,CAAC,MAAW,EAAA;;AAEvC,IAAA,OAAO,MAAM;AACjB;AAEA;;;;AAIG;AACI,eAAe,YAAY,CAAC,MAAW,EAAA;AAC1C,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK;IAClC,IAAI,KAAK,EAAE;AACP,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;;AAG7B,IAAA,OAAO,MAAM;AACjB;AAEA;AACA,aAAe,EAAE,SAAS,EAAE,YAAY,EAAE;AAEnC,MAAM,kBAAkB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;;;;"}