@storybook/angular 9.1.0-alpha.5 → 9.1.0-alpha.7

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 (266) hide show
  1. package/build-schema.json +199 -0
  2. package/builders.json +14 -0
  3. package/dist/builders/build-storybook/index.js +31 -80
  4. package/dist/builders/start-storybook/index.js +31 -101
  5. package/dist/chunk-CUDJAP6K.mjs +3 -0
  6. package/dist/chunk-KMSSK3DZ.mjs +6 -0
  7. package/dist/chunk-LXSTVAFF.mjs +40 -0
  8. package/dist/client/config.d.ts +20 -6
  9. package/dist/client/config.js +49 -20
  10. package/dist/client/config.mjs +10 -13
  11. package/dist/client/docs/config.d.ts +6 -3
  12. package/dist/client/docs/config.js +18 -14
  13. package/dist/client/docs/config.mjs +6 -10
  14. package/dist/client/index.d.ts +144 -6
  15. package/dist/client/index.js +47 -30
  16. package/dist/client/index.mjs +3 -9
  17. package/dist/client/preview-prod.d.ts +2 -1
  18. package/dist/client/preview-prod.js +5 -4
  19. package/dist/client/preview-prod.mjs +1 -0
  20. package/dist/index.d.ts +59 -2
  21. package/dist/index.js +47 -29
  22. package/dist/index.mjs +3 -13
  23. package/dist/preset.js +8 -38
  24. package/dist/server/framework-preset-angular-cli.js +20 -83
  25. package/dist/server/framework-preset-angular-ivy.js +6 -59
  26. package/dist/{client/types.d.ts → types-3b0b7107.d.ts} +9 -9
  27. package/package.json +59 -12
  28. package/start-schema.json +234 -0
  29. package/dist/builders/build-storybook/index.d.ts +0 -25
  30. package/dist/builders/build-storybook/index.mjs +0 -78
  31. package/dist/builders/build-storybook/index.spec.d.ts +0 -1
  32. package/dist/builders/build-storybook/index.spec.js +0 -222
  33. package/dist/builders/build-storybook/index.spec.mjs +0 -187
  34. package/dist/builders/build-storybook/schema.json +0 -199
  35. package/dist/builders/builders.json +0 -14
  36. package/dist/builders/start-storybook/index.d.ts +0 -21
  37. package/dist/builders/start-storybook/index.mjs +0 -99
  38. package/dist/builders/start-storybook/index.spec.d.ts +0 -1
  39. package/dist/builders/start-storybook/index.spec.js +0 -188
  40. package/dist/builders/start-storybook/index.spec.mjs +0 -186
  41. package/dist/builders/start-storybook/schema.json +0 -234
  42. package/dist/builders/utils/error-handler.d.ts +0 -2
  43. package/dist/builders/utils/error-handler.js +0 -38
  44. package/dist/builders/utils/error-handler.mjs +0 -33
  45. package/dist/builders/utils/run-compodoc.d.ts +0 -6
  46. package/dist/builders/utils/run-compodoc.js +0 -35
  47. package/dist/builders/utils/run-compodoc.mjs +0 -31
  48. package/dist/builders/utils/run-compodoc.spec.d.ts +0 -1
  49. package/dist/builders/utils/run-compodoc.spec.js +0 -76
  50. package/dist/builders/utils/run-compodoc.spec.mjs +0 -74
  51. package/dist/builders/utils/standalone-options.d.ts +0 -18
  52. package/dist/builders/utils/standalone-options.js +0 -2
  53. package/dist/builders/utils/standalone-options.mjs +0 -1
  54. package/dist/client/angular-beta/AbstractRenderer.d.ts +0 -75
  55. package/dist/client/angular-beta/AbstractRenderer.js +0 -201
  56. package/dist/client/angular-beta/AbstractRenderer.mjs +0 -164
  57. package/dist/client/angular-beta/CanvasRenderer.d.ts +0 -12
  58. package/dist/client/angular-beta/CanvasRenderer.js +0 -13
  59. package/dist/client/angular-beta/CanvasRenderer.mjs +0 -9
  60. package/dist/client/angular-beta/ComputesTemplateFromComponent.d.ts +0 -24
  61. package/dist/client/angular-beta/ComputesTemplateFromComponent.js +0 -160
  62. package/dist/client/angular-beta/ComputesTemplateFromComponent.mjs +0 -154
  63. package/dist/client/angular-beta/ComputesTemplateFromComponent.test.d.ts +0 -1
  64. package/dist/client/angular-beta/ComputesTemplateFromComponent.test.js +0 -730
  65. package/dist/client/angular-beta/ComputesTemplateFromComponent.test.mjs +0 -728
  66. package/dist/client/angular-beta/DocsRenderer.d.ts +0 -13
  67. package/dist/client/angular-beta/DocsRenderer.js +0 -39
  68. package/dist/client/angular-beta/DocsRenderer.mjs +0 -35
  69. package/dist/client/angular-beta/RendererFactory.d.ts +0 -11
  70. package/dist/client/angular-beta/RendererFactory.js +0 -56
  71. package/dist/client/angular-beta/RendererFactory.mjs +0 -50
  72. package/dist/client/angular-beta/RendererFactory.test.d.ts +0 -1
  73. package/dist/client/angular-beta/RendererFactory.test.js +0 -235
  74. package/dist/client/angular-beta/RendererFactory.test.mjs +0 -233
  75. package/dist/client/angular-beta/StorybookModule.d.ts +0 -8
  76. package/dist/client/angular-beta/StorybookModule.js +0 -27
  77. package/dist/client/angular-beta/StorybookModule.mjs +0 -23
  78. package/dist/client/angular-beta/StorybookModule.test.d.ts +0 -1
  79. package/dist/client/angular-beta/StorybookModule.test.js +0 -321
  80. package/dist/client/angular-beta/StorybookModule.test.mjs +0 -319
  81. package/dist/client/angular-beta/StorybookProvider.d.ts +0 -5
  82. package/dist/client/angular-beta/StorybookProvider.js +0 -26
  83. package/dist/client/angular-beta/StorybookProvider.mjs +0 -22
  84. package/dist/client/angular-beta/StorybookWrapperComponent.d.ts +0 -13
  85. package/dist/client/angular-beta/StorybookWrapperComponent.js +0 -127
  86. package/dist/client/angular-beta/StorybookWrapperComponent.mjs +0 -123
  87. package/dist/client/angular-beta/__testfixtures__/input.component.d.ts +0 -29
  88. package/dist/client/angular-beta/__testfixtures__/input.component.js +0 -76
  89. package/dist/client/angular-beta/__testfixtures__/input.component.mjs +0 -73
  90. package/dist/client/angular-beta/__testfixtures__/test.module.d.ts +0 -2
  91. package/dist/client/angular-beta/__testfixtures__/test.module.js +0 -20
  92. package/dist/client/angular-beta/__testfixtures__/test.module.mjs +0 -17
  93. package/dist/client/angular-beta/utils/BootstrapQueue.d.ts +0 -12
  94. package/dist/client/angular-beta/utils/BootstrapQueue.js +0 -86
  95. package/dist/client/angular-beta/utils/BootstrapQueue.mjs +0 -49
  96. package/dist/client/angular-beta/utils/BootstrapQueue.test.d.ts +0 -1
  97. package/dist/client/angular-beta/utils/BootstrapQueue.test.js +0 -164
  98. package/dist/client/angular-beta/utils/BootstrapQueue.test.mjs +0 -162
  99. package/dist/client/angular-beta/utils/NgComponentAnalyzer.d.ts +0 -22
  100. package/dist/client/angular-beta/utils/NgComponentAnalyzer.js +0 -93
  101. package/dist/client/angular-beta/utils/NgComponentAnalyzer.mjs +0 -84
  102. package/dist/client/angular-beta/utils/NgComponentAnalyzer.test.d.ts +0 -1
  103. package/dist/client/angular-beta/utils/NgComponentAnalyzer.test.js +0 -388
  104. package/dist/client/angular-beta/utils/NgComponentAnalyzer.test.mjs +0 -386
  105. package/dist/client/angular-beta/utils/NgModulesAnalyzer.d.ts +0 -6
  106. package/dist/client/angular-beta/utils/NgModulesAnalyzer.js +0 -41
  107. package/dist/client/angular-beta/utils/NgModulesAnalyzer.mjs +0 -37
  108. package/dist/client/angular-beta/utils/NgModulesAnalyzer.test.d.ts +0 -1
  109. package/dist/client/angular-beta/utils/NgModulesAnalyzer.test.js +0 -24
  110. package/dist/client/angular-beta/utils/NgModulesAnalyzer.test.mjs +0 -22
  111. package/dist/client/angular-beta/utils/PropertyExtractor.d.ts +0 -30
  112. package/dist/client/angular-beta/utils/PropertyExtractor.js +0 -196
  113. package/dist/client/angular-beta/utils/PropertyExtractor.mjs +0 -158
  114. package/dist/client/angular-beta/utils/PropertyExtractor.test.d.ts +0 -1
  115. package/dist/client/angular-beta/utils/PropertyExtractor.test.js +0 -177
  116. package/dist/client/angular-beta/utils/PropertyExtractor.test.mjs +0 -175
  117. package/dist/client/angular-beta/utils/StoryUID.d.ts +0 -22
  118. package/dist/client/angular-beta/utils/StoryUID.js +0 -43
  119. package/dist/client/angular-beta/utils/StoryUID.mjs +0 -38
  120. package/dist/client/argsToTemplate.d.ts +0 -56
  121. package/dist/client/argsToTemplate.js +0 -58
  122. package/dist/client/argsToTemplate.mjs +0 -55
  123. package/dist/client/argsToTemplate.test.d.ts +0 -1
  124. package/dist/client/argsToTemplate.test.js +0 -102
  125. package/dist/client/argsToTemplate.test.mjs +0 -100
  126. package/dist/client/compodoc-types.d.ts +0 -102
  127. package/dist/client/compodoc-types.js +0 -2
  128. package/dist/client/compodoc-types.mjs +0 -1
  129. package/dist/client/compodoc.d.ts +0 -12
  130. package/dist/client/compodoc.js +0 -261
  131. package/dist/client/compodoc.mjs +0 -248
  132. package/dist/client/compodoc.test.d.ts +0 -1
  133. package/dist/client/compodoc.test.js +0 -132
  134. package/dist/client/compodoc.test.mjs +0 -130
  135. package/dist/client/decorateStory.d.ts +0 -4
  136. package/dist/client/decorateStory.js +0 -48
  137. package/dist/client/decorateStory.mjs +0 -45
  138. package/dist/client/decorateStory.test.d.ts +0 -1
  139. package/dist/client/decorateStory.test.js +0 -306
  140. package/dist/client/decorateStory.test.mjs +0 -301
  141. package/dist/client/decorators.d.ts +0 -13
  142. package/dist/client/decorators.js +0 -69
  143. package/dist/client/decorators.mjs +0 -63
  144. package/dist/client/decorators.test.d.ts +0 -1
  145. package/dist/client/decorators.test.js +0 -159
  146. package/dist/client/decorators.test.mjs +0 -157
  147. package/dist/client/docs/__testfixtures__/doc-button/input.d.ts +0 -110
  148. package/dist/client/docs/__testfixtures__/doc-button/input.js +0 -204
  149. package/dist/client/docs/__testfixtures__/doc-button/input.mjs +0 -201
  150. package/dist/client/docs/__testfixtures__/doc-button/tsconfig.json +0 -7
  151. package/dist/client/docs/angular-properties.test.d.ts +0 -1
  152. package/dist/client/docs/angular-properties.test.js +0 -36
  153. package/dist/client/docs/angular-properties.test.mjs +0 -34
  154. package/dist/client/docs/sourceDecorator.d.ts +0 -10
  155. package/dist/client/docs/sourceDecorator.js +0 -53
  156. package/dist/client/docs/sourceDecorator.mjs +0 -48
  157. package/dist/client/globals.d.ts +0 -1
  158. package/dist/client/globals.js +0 -33
  159. package/dist/client/globals.mjs +0 -31
  160. package/dist/client/portable-stories.d.ts +0 -23
  161. package/dist/client/portable-stories.js +0 -62
  162. package/dist/client/portable-stories.mjs +0 -26
  163. package/dist/client/public-types.d.ts +0 -54
  164. package/dist/client/public-types.js +0 -2
  165. package/dist/client/public-types.mjs +0 -1
  166. package/dist/client/render.d.ts +0 -7
  167. package/dist/client/render.js +0 -19
  168. package/dist/client/render.mjs +0 -14
  169. package/dist/client/types.js +0 -2
  170. package/dist/client/types.mjs +0 -1
  171. package/dist/node/index.d.ts +0 -2
  172. package/dist/node/index.js +0 -6
  173. package/dist/node/index.mjs +0 -3
  174. package/dist/preset.d.ts +0 -5
  175. package/dist/preset.mjs +0 -34
  176. package/dist/renderer.d.ts +0 -6
  177. package/dist/renderer.js +0 -15
  178. package/dist/renderer.mjs +0 -6
  179. package/dist/server/__mocks-ng-workspace__/empty-projects-entry/angular.json +0 -4
  180. package/dist/server/__mocks-ng-workspace__/minimal-config/angular.json +0 -18
  181. package/dist/server/__mocks-ng-workspace__/minimal-config/src/main.d.ts +0 -1
  182. package/dist/server/__mocks-ng-workspace__/minimal-config/src/main.js +0 -5
  183. package/dist/server/__mocks-ng-workspace__/minimal-config/src/main.mjs +0 -2
  184. package/dist/server/__mocks-ng-workspace__/minimal-config/src/tsconfig.app.json +0 -9
  185. package/dist/server/__mocks-ng-workspace__/minimal-config/tsconfig.json +0 -13
  186. package/dist/server/__mocks-ng-workspace__/some-config/angular.json +0 -19
  187. package/dist/server/__mocks-ng-workspace__/some-config/src/main.d.ts +0 -1
  188. package/dist/server/__mocks-ng-workspace__/some-config/src/main.js +0 -5
  189. package/dist/server/__mocks-ng-workspace__/some-config/src/main.mjs +0 -2
  190. package/dist/server/__mocks-ng-workspace__/some-config/src/tsconfig.app.json +0 -9
  191. package/dist/server/__mocks-ng-workspace__/some-config/tsconfig.json +0 -13
  192. package/dist/server/__mocks-ng-workspace__/with-angularBrowserTarget/angular.json +0 -64
  193. package/dist/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/main.d.ts +0 -1
  194. package/dist/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/main.js +0 -5
  195. package/dist/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/main.mjs +0 -2
  196. package/dist/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/tsconfig.app.json +0 -9
  197. package/dist/server/__mocks-ng-workspace__/with-angularBrowserTarget/tsconfig.json +0 -13
  198. package/dist/server/__mocks-ng-workspace__/with-lib/angular.json +0 -28
  199. package/dist/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/src/main.d.ts +0 -1
  200. package/dist/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/src/main.js +0 -5
  201. package/dist/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/src/main.mjs +0 -2
  202. package/dist/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/tsconfig.lib.json +0 -20
  203. package/dist/server/__mocks-ng-workspace__/with-lib/tsconfig.json +0 -13
  204. package/dist/server/__mocks-ng-workspace__/with-nx/angular.json +0 -18
  205. package/dist/server/__mocks-ng-workspace__/with-nx/nx.json +0 -3
  206. package/dist/server/__mocks-ng-workspace__/with-nx/src/main.d.ts +0 -1
  207. package/dist/server/__mocks-ng-workspace__/with-nx/src/main.js +0 -5
  208. package/dist/server/__mocks-ng-workspace__/with-nx/src/main.mjs +0 -2
  209. package/dist/server/__mocks-ng-workspace__/with-nx/src/tsconfig.app.json +0 -8
  210. package/dist/server/__mocks-ng-workspace__/with-nx/tsconfig.json +0 -14
  211. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/nx.json +0 -3
  212. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/src/main.d.ts +0 -1
  213. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/src/main.js +0 -5
  214. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/src/main.mjs +0 -2
  215. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/src/tsconfig.app.json +0 -8
  216. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/tsconfig.json +0 -14
  217. package/dist/server/__mocks-ng-workspace__/with-nx-workspace/workspace.json +0 -18
  218. package/dist/server/__mocks-ng-workspace__/with-options-styles/angular.json +0 -18
  219. package/dist/server/__mocks-ng-workspace__/with-options-styles/src/main.d.ts +0 -1
  220. package/dist/server/__mocks-ng-workspace__/with-options-styles/src/main.js +0 -5
  221. package/dist/server/__mocks-ng-workspace__/with-options-styles/src/main.mjs +0 -2
  222. package/dist/server/__mocks-ng-workspace__/with-options-styles/src/tsconfig.app.json +0 -9
  223. package/dist/server/__mocks-ng-workspace__/with-options-styles/tsconfig.json +0 -13
  224. package/dist/server/__mocks-ng-workspace__/without-architect-build/angular.json +0 -5
  225. package/dist/server/__mocks-ng-workspace__/without-architect-build-options/angular.json +0 -11
  226. package/dist/server/__mocks-ng-workspace__/without-compatible-projects/angular.json +0 -7
  227. package/dist/server/__mocks-ng-workspace__/without-projects-entry/angular.json +0 -3
  228. package/dist/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/src/main.d.ts +0 -1
  229. package/dist/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/src/main.js +0 -5
  230. package/dist/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/src/main.mjs +0 -2
  231. package/dist/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/tsconfig.lib.json +0 -20
  232. package/dist/server/__mocks-ng-workspace__/without-projects-entry/tsconfig.json +0 -13
  233. package/dist/server/__mocks-ng-workspace__/without-tsConfig/angular.json +0 -16
  234. package/dist/server/__mocks-ng-workspace__/without-tsConfig/src/main.d.ts +0 -1
  235. package/dist/server/__mocks-ng-workspace__/without-tsConfig/src/main.js +0 -5
  236. package/dist/server/__mocks-ng-workspace__/without-tsConfig/src/main.mjs +0 -2
  237. package/dist/server/__mocks-ng-workspace__/without-tsConfig/src/tsconfig.app.json +0 -9
  238. package/dist/server/__mocks-ng-workspace__/without-tsConfig/tsconfig.json +0 -13
  239. package/dist/server/__tests__/angular.json +0 -96
  240. package/dist/server/angular-cli-webpack.d.ts +0 -1
  241. package/dist/server/angular-cli-webpack.js +0 -80
  242. package/dist/server/angular-cli-webpack.mjs +0 -80
  243. package/dist/server/framework-preset-angular-cli.d.ts +0 -3
  244. package/dist/server/framework-preset-angular-cli.mjs +0 -81
  245. package/dist/server/framework-preset-angular-ivy.d.ts +0 -10
  246. package/dist/server/framework-preset-angular-ivy.mjs +0 -56
  247. package/dist/server/plugins/storybook-normalize-angular-entry-plugin.d.ts +0 -12
  248. package/dist/server/plugins/storybook-normalize-angular-entry-plugin.js +0 -55
  249. package/dist/server/plugins/storybook-normalize-angular-entry-plugin.mjs +0 -52
  250. package/dist/server/preset-options.d.ts +0 -9
  251. package/dist/server/preset-options.js +0 -2
  252. package/dist/server/preset-options.mjs +0 -1
  253. package/dist/server/utils/filter-out-styling-rules.d.ts +0 -2
  254. package/dist/server/utils/filter-out-styling-rules.js +0 -17
  255. package/dist/server/utils/filter-out-styling-rules.mjs +0 -13
  256. package/dist/server/utils/module-is-available.d.ts +0 -1
  257. package/dist/server/utils/module-is-available.js +0 -13
  258. package/dist/server/utils/module-is-available.mjs +0 -9
  259. package/dist/test-setup.d.ts +0 -1
  260. package/dist/test-setup.js +0 -6
  261. package/dist/test-setup.mjs +0 -4
  262. package/dist/types.d.ts +0 -27
  263. package/dist/types.js +0 -2
  264. package/dist/types.mjs +0 -1
  265. package/scripts/postbuild.js +0 -17
  266. package/template/cli/.eslintrc.json +0 -5
@@ -1,164 +0,0 @@
1
- import { bootstrapApplication } from '@angular/platform-browser';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { stringify } from 'telejson';
4
- import { getApplication } from './StorybookModule';
5
- import { storyPropsProvider } from './StorybookProvider';
6
- import { queueBootstrapping } from './utils/BootstrapQueue';
7
- import { PropertyExtractor } from './utils/PropertyExtractor';
8
- const applicationRefs = new Map();
9
- /**
10
- * Attribute name for the story UID that may be written to the targetDOMNode.
11
- *
12
- * If a target DOM node has a story UID attribute, it will be used as part of the selector for the
13
- * Angular component.
14
- */
15
- export const STORY_UID_ATTRIBUTE = 'data-sb-story-uid';
16
- export class AbstractRenderer {
17
- constructor() {
18
- this.previousStoryRenderInfo = new Map();
19
- }
20
- /** Wait and destroy the platform */
21
- static resetApplications(domNode) {
22
- applicationRefs.forEach((appRef, appDOMNode) => {
23
- if (!appRef.destroyed && (!domNode || appDOMNode === domNode)) {
24
- appRef.destroy();
25
- }
26
- });
27
- }
28
- /**
29
- * Bootstrap main angular module with main component or send only new `props` with storyProps$
30
- *
31
- * @param storyFnAngular {StoryFnAngularReturnType}
32
- * @param forced {boolean} If :
33
- *
34
- * - True render will only use the StoryFn `props' in storyProps observable that will update sotry's
35
- * component/template properties. Improves performance without reloading the whole
36
- * module&component if props changes
37
- * - False fully recharges or initializes angular module & component
38
- *
39
- * @param component {Component}
40
- */
41
- async render({ storyFnAngular, forced, component, targetDOMNode, }) {
42
- const targetSelector = this.generateTargetSelectorFromStoryId(targetDOMNode.id);
43
- const newStoryProps$ = new BehaviorSubject(storyFnAngular.props);
44
- if (!this.fullRendererRequired({
45
- targetDOMNode,
46
- storyFnAngular,
47
- moduleMetadata: {
48
- ...storyFnAngular.moduleMetadata,
49
- },
50
- forced,
51
- })) {
52
- this.storyProps$.next(storyFnAngular.props);
53
- return;
54
- }
55
- await this.beforeFullRender(targetDOMNode);
56
- // Complete last BehaviorSubject and set a new one for the current module
57
- if (this.storyProps$) {
58
- this.storyProps$.complete();
59
- }
60
- this.storyProps$ = newStoryProps$;
61
- this.initAngularRootElement(targetDOMNode, targetSelector);
62
- const analyzedMetadata = new PropertyExtractor(storyFnAngular.moduleMetadata, component);
63
- await analyzedMetadata.init();
64
- const storyUid = this.generateStoryUIdFromRawStoryUid(targetDOMNode.getAttribute(STORY_UID_ATTRIBUTE));
65
- const componentSelector = storyUid !== null ? `${targetSelector}[${storyUid}]` : targetSelector;
66
- if (storyUid !== null) {
67
- const element = targetDOMNode.querySelector(targetSelector);
68
- element.toggleAttribute(storyUid, true);
69
- }
70
- const application = getApplication({
71
- storyFnAngular,
72
- component,
73
- targetSelector: componentSelector,
74
- analyzedMetadata,
75
- });
76
- const providers = [
77
- storyPropsProvider(newStoryProps$),
78
- ...analyzedMetadata.applicationProviders,
79
- ...(storyFnAngular.applicationConfig?.providers ?? []),
80
- ];
81
- if (STORYBOOK_ANGULAR_OPTIONS?.experimentalZoneless) {
82
- const { provideExperimentalZonelessChangeDetection } = await import('@angular/core');
83
- if (!provideExperimentalZonelessChangeDetection) {
84
- throw new Error('Experimental zoneless change detection requires Angular 18 or higher');
85
- }
86
- else {
87
- providers.unshift(provideExperimentalZonelessChangeDetection());
88
- }
89
- }
90
- const applicationRef = await queueBootstrapping(() => {
91
- return bootstrapApplication(application, {
92
- ...storyFnAngular.applicationConfig,
93
- providers,
94
- });
95
- });
96
- applicationRefs.set(targetDOMNode, applicationRef);
97
- }
98
- /**
99
- * Only ASCII alphanumerics can be used as HTML tag name. https://html.spec.whatwg.org/#elements-2
100
- *
101
- * Therefore, stories break when non-ASCII alphanumerics are included in target selector.
102
- * https://github.com/storybookjs/storybook/issues/15147
103
- *
104
- * This method returns storyId when it doesn't contain any non-ASCII alphanumerics. Otherwise, it
105
- * generates a valid HTML tag name from storyId by removing non-ASCII alphanumerics from storyId,
106
- * prefixing "sb-", and suffixing "-component"
107
- *
108
- * @memberof AbstractRenderer
109
- * @protected
110
- */
111
- generateTargetSelectorFromStoryId(id) {
112
- const invalidHtmlTag = /[^A-Za-z0-9-]/g;
113
- const storyIdIsInvalidHtmlTagName = invalidHtmlTag.test(id);
114
- return storyIdIsInvalidHtmlTagName ? `sb-${id.replace(invalidHtmlTag, '')}-component` : id;
115
- }
116
- /**
117
- * Angular is unable to handle components that have selectors with accented attributes.
118
- *
119
- * Therefore, stories break when meta's title contains accents.
120
- * https://github.com/storybookjs/storybook/issues/29132
121
- *
122
- * This method filters accents from a given raw id. For example, this method converts
123
- * 'Example/Button with an "é" accent' into 'Example/Button with an "e" accent'.
124
- *
125
- * @memberof AbstractRenderer
126
- * @protected
127
- */
128
- generateStoryUIdFromRawStoryUid(rawStoryUid) {
129
- if (rawStoryUid === null) {
130
- return rawStoryUid;
131
- }
132
- const accentCharacters = /[\u0300-\u036f]/g;
133
- return rawStoryUid.normalize('NFD').replace(accentCharacters, '');
134
- }
135
- /** Adds DOM element that angular will use as bootstrap component. */
136
- initAngularRootElement(targetDOMNode, targetSelector) {
137
- targetDOMNode.innerHTML = '';
138
- targetDOMNode.appendChild(document.createElement(targetSelector));
139
- }
140
- fullRendererRequired({ targetDOMNode, storyFnAngular, moduleMetadata, forced, }) {
141
- const previousStoryRenderInfo = this.previousStoryRenderInfo.get(targetDOMNode);
142
- const currentStoryRender = {
143
- storyFnAngular,
144
- moduleMetadataSnapshot: stringify(moduleMetadata, { maxDepth: 50 }),
145
- };
146
- this.previousStoryRenderInfo.set(targetDOMNode, currentStoryRender);
147
- if (
148
- // check `forceRender` of story RenderContext
149
- !forced ||
150
- // if it's the first rendering and storyProps$ is not init
151
- !this.storyProps$) {
152
- return true;
153
- }
154
- // force the rendering if the template has changed
155
- const hasChangedTemplate = !!storyFnAngular?.template &&
156
- previousStoryRenderInfo?.storyFnAngular?.template !== storyFnAngular.template;
157
- if (hasChangedTemplate) {
158
- return true;
159
- }
160
- // force the rendering if the metadata structure has changed
161
- const hasChangedModuleMetadata = currentStoryRender.moduleMetadataSnapshot !== previousStoryRenderInfo?.moduleMetadataSnapshot;
162
- return hasChangedModuleMetadata;
163
- }
164
- }
@@ -1,12 +0,0 @@
1
- import { Parameters, StoryFnAngularReturnType } from '../types';
2
- import { AbstractRenderer } from './AbstractRenderer';
3
- export declare class CanvasRenderer extends AbstractRenderer {
4
- render(options: {
5
- storyFnAngular: StoryFnAngularReturnType;
6
- forced: boolean;
7
- parameters: Parameters;
8
- component: any;
9
- targetDOMNode: HTMLElement;
10
- }): Promise<void>;
11
- beforeFullRender(): Promise<void>;
12
- }
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CanvasRenderer = void 0;
4
- const AbstractRenderer_1 = require("./AbstractRenderer");
5
- class CanvasRenderer extends AbstractRenderer_1.AbstractRenderer {
6
- async render(options) {
7
- await super.render(options);
8
- }
9
- async beforeFullRender() {
10
- CanvasRenderer.resetApplications();
11
- }
12
- }
13
- exports.CanvasRenderer = CanvasRenderer;
@@ -1,9 +0,0 @@
1
- import { AbstractRenderer } from './AbstractRenderer';
2
- export class CanvasRenderer extends AbstractRenderer {
3
- async render(options) {
4
- await super.render(options);
5
- }
6
- async beforeFullRender() {
7
- CanvasRenderer.resetApplications();
8
- }
9
- }
@@ -1,24 +0,0 @@
1
- import { ArgTypes } from 'storybook/internal/types';
2
- import { Type } from '@angular/core';
3
- import { ICollection } from '../types';
4
- /**
5
- * Returns the property name, if it can be accessed with dot notation. If not, it returns
6
- * `this['propertyName']`.
7
- */
8
- export declare const formatPropInTemplate: (propertyName: string) => string;
9
- /**
10
- * Converts a component into a template with inputs/outputs present in initial props
11
- *
12
- * @param component
13
- * @param initialProps
14
- * @param innerTemplate
15
- */
16
- export declare const computesTemplateFromComponent: (component: Type<unknown>, initialProps?: ICollection, innerTemplate?: string) => string;
17
- /**
18
- * Converts a component into a template with inputs/outputs present in initial props
19
- *
20
- * @param component
21
- * @param initialProps
22
- * @param innerTemplate
23
- */
24
- export declare const computesTemplateSourceFromComponent: (component: Type<unknown>, initialProps?: ICollection, argTypes?: ArgTypes) => string | null;
@@ -1,160 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.computesTemplateSourceFromComponent = exports.computesTemplateFromComponent = exports.formatPropInTemplate = void 0;
4
- const NgComponentAnalyzer_1 = require("./utils/NgComponentAnalyzer");
5
- /**
6
- * Check if the name matches the criteria for a valid identifier. A valid identifier can only
7
- * contain letters, digits, underscores, or dollar signs. It cannot start with a digit.
8
- */
9
- const isValidIdentifier = (name) => /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
10
- /**
11
- * Returns the property name, if it can be accessed with dot notation. If not, it returns
12
- * `this['propertyName']`.
13
- */
14
- const formatPropInTemplate = (propertyName) => isValidIdentifier(propertyName) ? propertyName : `this['${propertyName}']`;
15
- exports.formatPropInTemplate = formatPropInTemplate;
16
- const separateInputsOutputsAttributes = (ngComponentInputsOutputs, props = {}) => {
17
- const inputs = ngComponentInputsOutputs.inputs
18
- .filter((i) => i.templateName in props)
19
- .map((i) => i.templateName);
20
- const outputs = ngComponentInputsOutputs.outputs
21
- .filter((o) => o.templateName in props)
22
- .map((o) => o.templateName);
23
- return {
24
- inputs,
25
- outputs,
26
- otherProps: Object.keys(props).filter((k) => ![...inputs, ...outputs].includes(k)),
27
- };
28
- };
29
- /**
30
- * Converts a component into a template with inputs/outputs present in initial props
31
- *
32
- * @param component
33
- * @param initialProps
34
- * @param innerTemplate
35
- */
36
- const computesTemplateFromComponent = (component, initialProps, innerTemplate = '') => {
37
- const ngComponentMetadata = (0, NgComponentAnalyzer_1.getComponentDecoratorMetadata)(component);
38
- const ngComponentInputsOutputs = (0, NgComponentAnalyzer_1.getComponentInputsOutputs)(component);
39
- if (!ngComponentMetadata.selector) {
40
- // Allow to add renderer component when NgComponent selector is undefined
41
- return `<ng-container *ngComponentOutlet="storyComponent"></ng-container>`;
42
- }
43
- const { inputs: initialInputs, outputs: initialOutputs } = separateInputsOutputsAttributes(ngComponentInputsOutputs, initialProps);
44
- const templateInputs = initialInputs.length > 0
45
- ? ` ${initialInputs.map((i) => `[${i}]="${(0, exports.formatPropInTemplate)(i)}"`).join(' ')}`
46
- : '';
47
- const templateOutputs = initialOutputs.length > 0
48
- ? ` ${initialOutputs.map((i) => `(${i})="${(0, exports.formatPropInTemplate)(i)}($event)"`).join(' ')}`
49
- : '';
50
- return buildTemplate(ngComponentMetadata.selector, innerTemplate, templateInputs, templateOutputs);
51
- };
52
- exports.computesTemplateFromComponent = computesTemplateFromComponent;
53
- /** Stringify an object with a placholder in the circular references. */
54
- function stringifyCircular(obj) {
55
- const seen = new Set();
56
- return JSON.stringify(obj, (key, value) => {
57
- if (typeof value === 'object' && value !== null) {
58
- if (seen.has(value)) {
59
- return '[Circular]';
60
- }
61
- seen.add(value);
62
- }
63
- return value;
64
- });
65
- }
66
- const createAngularInputProperty = ({ propertyName, value, argType, }) => {
67
- let templateValue;
68
- switch (typeof value) {
69
- case 'string':
70
- templateValue = `'${value}'`;
71
- break;
72
- case 'object':
73
- templateValue = stringifyCircular(value)
74
- .replace(/'/g, '\u2019')
75
- .replace(/\\"/g, '\u201D')
76
- .replace(/"([^-"]+)":/g, '$1: ')
77
- .replace(/"/g, "'")
78
- .replace(/\u2019/g, "\\'")
79
- .replace(/\u201D/g, "\\'")
80
- .split(',')
81
- .join(', ');
82
- break;
83
- default:
84
- templateValue = value;
85
- }
86
- return `[${propertyName}]="${templateValue}"`;
87
- };
88
- /**
89
- * Converts a component into a template with inputs/outputs present in initial props
90
- *
91
- * @param component
92
- * @param initialProps
93
- * @param innerTemplate
94
- */
95
- const computesTemplateSourceFromComponent = (component, initialProps, argTypes) => {
96
- const ngComponentMetadata = (0, NgComponentAnalyzer_1.getComponentDecoratorMetadata)(component);
97
- if (!ngComponentMetadata) {
98
- return null;
99
- }
100
- if (!ngComponentMetadata.selector) {
101
- // Allow to add renderer component when NgComponent selector is undefined
102
- return `<ng-container *ngComponentOutlet="${component.name}"></ng-container>`;
103
- }
104
- const ngComponentInputsOutputs = (0, NgComponentAnalyzer_1.getComponentInputsOutputs)(component);
105
- const { inputs: initialInputs, outputs: initialOutputs } = separateInputsOutputsAttributes(ngComponentInputsOutputs, initialProps);
106
- const templateInputs = initialInputs.length > 0
107
- ? ` ${initialInputs
108
- .map((propertyName) => createAngularInputProperty({
109
- propertyName,
110
- value: initialProps[propertyName],
111
- argType: argTypes?.[propertyName],
112
- }))
113
- .join(' ')}`
114
- : '';
115
- const templateOutputs = initialOutputs.length > 0
116
- ? ` ${initialOutputs.map((i) => `(${i})="${(0, exports.formatPropInTemplate)(i)}($event)"`).join(' ')}`
117
- : '';
118
- return buildTemplate(ngComponentMetadata.selector, '', templateInputs, templateOutputs);
119
- };
120
- exports.computesTemplateSourceFromComponent = computesTemplateSourceFromComponent;
121
- const buildTemplate = (selector, innerTemplate, inputs, outputs) => {
122
- // https://www.w3.org/TR/2011/WD-html-markup-20110113/syntax.html#syntax-elements
123
- const voidElements = [
124
- 'area',
125
- 'base',
126
- 'br',
127
- 'col',
128
- 'command',
129
- 'embed',
130
- 'hr',
131
- 'img',
132
- 'input',
133
- 'keygen',
134
- 'link',
135
- 'meta',
136
- 'param',
137
- 'source',
138
- 'track',
139
- 'wbr',
140
- ];
141
- const firstSelector = selector.split(',')[0];
142
- const templateReplacers = [
143
- [/(^.*?)(?=[,])/, '$1'],
144
- [/(^\..+)/, 'div$1'],
145
- [/(^\[.+?])/, 'div$1'],
146
- [/([\w[\]]+)(\s*,[\w\s-[\],]+)+/, `$1`],
147
- [/#([\w-]+)/, ` id="$1"`],
148
- [/((\.[\w-]+)+)/, (_, c) => ` class="${c.split `.`.join ` `.trim()}"`],
149
- [/(\[.+?])/g, (_, a) => ` ${a.slice(1, -1)}`],
150
- [
151
- /([\S]+)(.*)/,
152
- (template, elementSelector) => {
153
- return voidElements.some((element) => elementSelector === element)
154
- ? template.replace(/([\S]+)(.*)/, `<$1$2${inputs}${outputs} />`)
155
- : template.replace(/([\S]+)(.*)/, `<$1$2${inputs}${outputs}>${innerTemplate}</$1>`);
156
- },
157
- ],
158
- ];
159
- return templateReplacers.reduce((prevSelector, [searchValue, replacer]) => prevSelector.replace(searchValue, replacer), firstSelector);
160
- };
@@ -1,154 +0,0 @@
1
- import { getComponentDecoratorMetadata, getComponentInputsOutputs, } from './utils/NgComponentAnalyzer';
2
- /**
3
- * Check if the name matches the criteria for a valid identifier. A valid identifier can only
4
- * contain letters, digits, underscores, or dollar signs. It cannot start with a digit.
5
- */
6
- const isValidIdentifier = (name) => /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
7
- /**
8
- * Returns the property name, if it can be accessed with dot notation. If not, it returns
9
- * `this['propertyName']`.
10
- */
11
- export const formatPropInTemplate = (propertyName) => isValidIdentifier(propertyName) ? propertyName : `this['${propertyName}']`;
12
- const separateInputsOutputsAttributes = (ngComponentInputsOutputs, props = {}) => {
13
- const inputs = ngComponentInputsOutputs.inputs
14
- .filter((i) => i.templateName in props)
15
- .map((i) => i.templateName);
16
- const outputs = ngComponentInputsOutputs.outputs
17
- .filter((o) => o.templateName in props)
18
- .map((o) => o.templateName);
19
- return {
20
- inputs,
21
- outputs,
22
- otherProps: Object.keys(props).filter((k) => ![...inputs, ...outputs].includes(k)),
23
- };
24
- };
25
- /**
26
- * Converts a component into a template with inputs/outputs present in initial props
27
- *
28
- * @param component
29
- * @param initialProps
30
- * @param innerTemplate
31
- */
32
- export const computesTemplateFromComponent = (component, initialProps, innerTemplate = '') => {
33
- const ngComponentMetadata = getComponentDecoratorMetadata(component);
34
- const ngComponentInputsOutputs = getComponentInputsOutputs(component);
35
- if (!ngComponentMetadata.selector) {
36
- // Allow to add renderer component when NgComponent selector is undefined
37
- return `<ng-container *ngComponentOutlet="storyComponent"></ng-container>`;
38
- }
39
- const { inputs: initialInputs, outputs: initialOutputs } = separateInputsOutputsAttributes(ngComponentInputsOutputs, initialProps);
40
- const templateInputs = initialInputs.length > 0
41
- ? ` ${initialInputs.map((i) => `[${i}]="${formatPropInTemplate(i)}"`).join(' ')}`
42
- : '';
43
- const templateOutputs = initialOutputs.length > 0
44
- ? ` ${initialOutputs.map((i) => `(${i})="${formatPropInTemplate(i)}($event)"`).join(' ')}`
45
- : '';
46
- return buildTemplate(ngComponentMetadata.selector, innerTemplate, templateInputs, templateOutputs);
47
- };
48
- /** Stringify an object with a placholder in the circular references. */
49
- function stringifyCircular(obj) {
50
- const seen = new Set();
51
- return JSON.stringify(obj, (key, value) => {
52
- if (typeof value === 'object' && value !== null) {
53
- if (seen.has(value)) {
54
- return '[Circular]';
55
- }
56
- seen.add(value);
57
- }
58
- return value;
59
- });
60
- }
61
- const createAngularInputProperty = ({ propertyName, value, argType, }) => {
62
- let templateValue;
63
- switch (typeof value) {
64
- case 'string':
65
- templateValue = `'${value}'`;
66
- break;
67
- case 'object':
68
- templateValue = stringifyCircular(value)
69
- .replace(/'/g, '\u2019')
70
- .replace(/\\"/g, '\u201D')
71
- .replace(/"([^-"]+)":/g, '$1: ')
72
- .replace(/"/g, "'")
73
- .replace(/\u2019/g, "\\'")
74
- .replace(/\u201D/g, "\\'")
75
- .split(',')
76
- .join(', ');
77
- break;
78
- default:
79
- templateValue = value;
80
- }
81
- return `[${propertyName}]="${templateValue}"`;
82
- };
83
- /**
84
- * Converts a component into a template with inputs/outputs present in initial props
85
- *
86
- * @param component
87
- * @param initialProps
88
- * @param innerTemplate
89
- */
90
- export const computesTemplateSourceFromComponent = (component, initialProps, argTypes) => {
91
- const ngComponentMetadata = getComponentDecoratorMetadata(component);
92
- if (!ngComponentMetadata) {
93
- return null;
94
- }
95
- if (!ngComponentMetadata.selector) {
96
- // Allow to add renderer component when NgComponent selector is undefined
97
- return `<ng-container *ngComponentOutlet="${component.name}"></ng-container>`;
98
- }
99
- const ngComponentInputsOutputs = getComponentInputsOutputs(component);
100
- const { inputs: initialInputs, outputs: initialOutputs } = separateInputsOutputsAttributes(ngComponentInputsOutputs, initialProps);
101
- const templateInputs = initialInputs.length > 0
102
- ? ` ${initialInputs
103
- .map((propertyName) => createAngularInputProperty({
104
- propertyName,
105
- value: initialProps[propertyName],
106
- argType: argTypes?.[propertyName],
107
- }))
108
- .join(' ')}`
109
- : '';
110
- const templateOutputs = initialOutputs.length > 0
111
- ? ` ${initialOutputs.map((i) => `(${i})="${formatPropInTemplate(i)}($event)"`).join(' ')}`
112
- : '';
113
- return buildTemplate(ngComponentMetadata.selector, '', templateInputs, templateOutputs);
114
- };
115
- const buildTemplate = (selector, innerTemplate, inputs, outputs) => {
116
- // https://www.w3.org/TR/2011/WD-html-markup-20110113/syntax.html#syntax-elements
117
- const voidElements = [
118
- 'area',
119
- 'base',
120
- 'br',
121
- 'col',
122
- 'command',
123
- 'embed',
124
- 'hr',
125
- 'img',
126
- 'input',
127
- 'keygen',
128
- 'link',
129
- 'meta',
130
- 'param',
131
- 'source',
132
- 'track',
133
- 'wbr',
134
- ];
135
- const firstSelector = selector.split(',')[0];
136
- const templateReplacers = [
137
- [/(^.*?)(?=[,])/, '$1'],
138
- [/(^\..+)/, 'div$1'],
139
- [/(^\[.+?])/, 'div$1'],
140
- [/([\w[\]]+)(\s*,[\w\s-[\],]+)+/, `$1`],
141
- [/#([\w-]+)/, ` id="$1"`],
142
- [/((\.[\w-]+)+)/, (_, c) => ` class="${c.split `.`.join ` `.trim()}"`],
143
- [/(\[.+?])/g, (_, a) => ` ${a.slice(1, -1)}`],
144
- [
145
- /([\S]+)(.*)/,
146
- (template, elementSelector) => {
147
- return voidElements.some((element) => elementSelector === element)
148
- ? template.replace(/([\S]+)(.*)/, `<$1$2${inputs}${outputs} />`)
149
- : template.replace(/([\S]+)(.*)/, `<$1$2${inputs}${outputs}>${innerTemplate}</$1>`);
150
- },
151
- ],
152
- ];
153
- return templateReplacers.reduce((prevSelector, [searchValue, replacer]) => prevSelector.replace(searchValue, replacer), firstSelector);
154
- };