hr-design-system-handlebars 1.102.6 → 1.103.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 (367) hide show
  1. package/.storybook/main.js +3 -0
  2. package/.storybook/preview-head.html +3 -0
  3. package/CHANGELOG.md +12 -0
  4. package/dist/assets/index.css +12 -3
  5. package/dist/assets/js/utils.js +73 -0
  6. package/dist/views/components/page/index/page_test_story.hbs +1 -1
  7. package/dist/views_static/components/page/index/page_test_story.hbs +1 -1
  8. package/package.json +2 -2
  9. package/src/assets/fixtures/banner/banner.json +7 -7
  10. package/src/assets/fixtures/button/button.json +142 -0
  11. package/src/assets/fixtures/button/link_button.json +153 -0
  12. package/src/assets/fixtures/label/label.json +65 -0
  13. package/src/assets/fixtures/mediaplayer/mediaplayer_button.json +40 -0
  14. package/src/assets/fixtures/mediaplayer/mediaplayer_snapshots.json +151 -0
  15. package/src/assets/fixtures/navigation/breadcrumb/breadcrumb.inc.json +8 -10
  16. package/src/assets/fixtures/navigation/breadcrumb/breadcrumb.json +113 -0
  17. package/src/assets/fixtures/page/metadatabox.inc.json +98 -0
  18. package/src/assets/fixtures/page/metadatabox.json +89 -16
  19. package/src/assets/fixtures/page/page.json +5 -4
  20. package/src/assets/fixtures/pagination/page_pagination.inc.json +157 -0
  21. package/src/assets/fixtures/pagination/page_pagination.json +251 -88
  22. package/src/assets/fixtures/site_header/site_header.inc.json +83 -0
  23. package/src/assets/fixtures/site_header/site_header.json +122 -0
  24. package/src/assets/fixtures/teaser/components/teaser_byline.json +35 -0
  25. package/src/assets/fixtures/teaser/components/teaser_headings.json +61 -0
  26. package/src/assets/fixtures/teaser/components/teaser_text.json +45 -0
  27. package/src/assets/fixtures/teaser/components/teaser_title.json +38 -0
  28. package/src/assets/fixtures/teaser/teaser_alternative.json +478 -0
  29. package/src/assets/fixtures/teaser/teaser_alternative_av.json +465 -0
  30. package/src/assets/fixtures/teaser/teaser_cluster.json +682 -0
  31. package/src/assets/fixtures/teaser/teaser_content_nav.json +532 -0
  32. package/src/assets/fixtures/teaser/teaser_event.json +284 -0
  33. package/src/assets/fixtures/teaser/teaser_indextext.json +180 -0
  34. package/src/assets/fixtures/teaser/teaser_podcast.json +75 -2
  35. package/src/assets/fixtures/teaser/teaser_poster.json +322 -0
  36. package/src/assets/fixtures/teaser/teaser_stage.json +145 -0
  37. package/src/assets/fixtures/teaser/teaser_standard.json +371 -0
  38. package/src/assets/fixtures/teaser/teaser_standard_av.json +285 -0
  39. package/src/assets/fixtures/teaser/teaser_ticker_alternative.json +156 -0
  40. package/src/assets/fixtures/teaser/teaser_ticker_standard.json +241 -0
  41. package/src/assets/fixtures/teaser/teaser_ticker_timeline.json +75 -28
  42. package/src/assets/js/utils.js +73 -0
  43. package/src/stories/basics/SnapshotStories.mdx +353 -0
  44. package/src/stories/views/components/button/button.mdx +3 -5
  45. package/src/stories/views/components/button/button.stories.js +71 -93
  46. package/src/stories/views/components/button/fixtures/button.json +1 -0
  47. package/src/stories/views/components/button/fixtures/link_button.json +1 -0
  48. package/src/stories/views/components/button/link_button.mdx +3 -5
  49. package/src/stories/views/components/button/link_button.stories.js +67 -97
  50. package/src/stories/views/components/grid/grid.stories.js +3 -0
  51. package/src/stories/views/components/label/fixtures/label.json +1 -0
  52. package/src/stories/views/components/label/label.stories.js +31 -3
  53. package/src/stories/views/components/mediaplayer/fixtures/mediaplayer_button.json +1 -0
  54. package/src/stories/views/components/mediaplayer/fixtures/mediaplayer_snapshots.json +1 -0
  55. package/src/stories/views/components/mediaplayer/mediaplayer.stories.js +32 -12
  56. package/src/stories/views/components/mediaplayer/mediaplayer_button.stories.js +41 -34
  57. package/src/stories/views/components/navigation/breadcrumb/breadcrumb.stories.js +30 -29
  58. package/src/stories/views/components/navigation/breadcrumb/fixtures/breadcrumb.json +1 -0
  59. package/src/stories/views/components/page/components/metadatabox.stories.js +87 -23
  60. package/src/stories/views/components/page/fixtures/metadatabox.json +1 -1
  61. package/src/stories/views/components/page/index/page.data.js +10 -14
  62. package/src/stories/views/components/page/index/page.stories.js +3 -3
  63. package/src/stories/views/components/page/index/page_test_story.hbs +1 -1
  64. package/src/stories/views/components/pagination/fixtures/page_pagination.json +1 -1
  65. package/src/stories/views/components/pagination/page_pagination.data.js +2 -2
  66. package/src/stories/views/components/pagination/page_pagination.stories.js +45 -114
  67. package/src/stories/views/components/podcast/podcast_subscribe_button.stories.js +2 -2
  68. package/src/stories/views/components/site_header/fixtures/site_header.json +1 -0
  69. package/src/stories/views/components/site_header/header.stories.js +32 -17
  70. package/src/stories/views/components/teaser/cluster/teaser_cluster.stories.js +164 -44
  71. package/src/stories/views/components/teaser/components/fixtures/teaser_byline.json +1 -0
  72. package/src/stories/views/components/teaser/components/fixtures/teaser_headings.json +1 -0
  73. package/src/stories/views/components/teaser/components/fixtures/teaser_text.json +1 -0
  74. package/src/stories/views/components/teaser/components/fixtures/teaser_title.json +1 -0
  75. package/src/stories/views/components/teaser/components/teaser_byline.stories.js +32 -8
  76. package/src/stories/views/components/teaser/components/teaser_heading.stories.js +36 -38
  77. package/src/stories/views/components/teaser/components/teaser_text.stories.js +34 -23
  78. package/src/stories/views/components/teaser/components/teaser_title.stories.js +35 -23
  79. package/src/stories/views/components/teaser/content_nav/teaser_content_nav.stories.js +100 -33
  80. package/src/stories/views/components/teaser/fixtures/teaser_alternative.json +1 -0
  81. package/src/stories/views/components/teaser/fixtures/teaser_alternative_av.json +1 -0
  82. package/src/stories/views/components/teaser/fixtures/teaser_cluster.json +1 -0
  83. package/src/stories/views/components/teaser/fixtures/teaser_content_nav.json +1 -0
  84. package/src/stories/views/components/teaser/fixtures/teaser_event.json +1 -0
  85. package/src/stories/views/components/teaser/fixtures/teaser_indextext.json +1 -0
  86. package/src/stories/views/components/teaser/fixtures/teaser_podcast.json +1 -1
  87. package/src/stories/views/components/teaser/fixtures/teaser_poster.json +1 -0
  88. package/src/stories/views/components/teaser/fixtures/teaser_stage.json +1 -0
  89. package/src/stories/views/components/teaser/fixtures/teaser_standard.json +1 -0
  90. package/src/stories/views/components/teaser/fixtures/teaser_standard_av.json +1 -0
  91. package/src/stories/views/components/teaser/fixtures/teaser_ticker_alternative.json +1 -0
  92. package/src/stories/views/components/teaser/fixtures/teaser_ticker_standard.json +1 -0
  93. package/src/stories/views/components/teaser/fixtures/teaser_ticker_timeline.json +1 -1
  94. package/src/stories/views/components/teaser/podcast/podcast.stories.js +37 -25
  95. package/src/stories/views/components/teaser/teaser_alternativ.stories.js +124 -36
  96. package/src/stories/views/components/teaser/teaser_alternativ_av.stories.js +187 -36
  97. package/src/stories/views/components/teaser/teaser_indextext.stories.js +87 -18
  98. package/src/stories/views/components/teaser/teaser_poster.stories.js +87 -12
  99. package/src/stories/views/components/teaser/teaser_stage.stories.js +69 -12
  100. package/src/stories/views/components/teaser/teaser_standard.stories.js +182 -48
  101. package/src/stories/views/components/teaser/teaser_standard_av.stories.js +108 -31
  102. package/src/stories/views/components/teaser/teaser_standard_event.stories.js +122 -51
  103. package/src/stories/views/components/teaser/ticker/teaser_ticker_alternativ.stories.js +55 -11
  104. package/src/stories/views/components/teaser/ticker/teaser_ticker_standard.stories.js +77 -22
  105. package/src/stories/views/components/teaser/ticker/teaser_ticker_timeline.stories.js +35 -13
  106. package/tailwind.config.js +2 -1
  107. package/src/assets/fixtures/navigation/breadcrumb/breadcrumb_2_level.json +0 -15
  108. package/src/assets/fixtures/navigation/breadcrumb/breadcrumb_3_level.json +0 -19
  109. package/src/assets/fixtures/navigation/breadcrumb/breadcrumb_4_level.json +0 -23
  110. package/src/assets/fixtures/navigation/breadcrumb/breadcrumb_5_level.json +0 -27
  111. package/src/assets/fixtures/page/metadatabox_comments.json +0 -23
  112. package/src/assets/fixtures/page/metadatabox_more_authors.json +0 -43
  113. package/src/assets/fixtures/page/metadatabox_more_authors_comments.json +0 -47
  114. package/src/assets/fixtures/page/metadatabox_one_author.json +0 -34
  115. package/src/assets/fixtures/page/metadatabox_one_author_comments.json +0 -38
  116. package/src/assets/fixtures/page/metadatabox_one_author_without_picture.json +0 -24
  117. package/src/assets/fixtures/site_header/site_header_default.json +0 -26
  118. package/src/assets/fixtures/site_header/site_header_default_no_sticky.json +0 -9
  119. package/src/assets/fixtures/site_header/site_header_mit_submenu.json +0 -17
  120. package/src/assets/fixtures/site_header/site_header_mit_submenu_as_flyout.json +0 -17
  121. package/src/assets/fixtures/site_header/site_header_mit_submenu_as_flyout_no_sticky.json +0 -9
  122. package/src/assets/fixtures/site_header/site_header_mit_submenu_no_sticky.json +0 -9
  123. package/src/assets/fixtures/site_header/site_header_mit_top_topics.json +0 -20
  124. package/src/assets/fixtures/site_header/site_header_mit_top_topics_no_sticky.json +0 -9
  125. package/src/assets/fixtures/site_header/site_header_mit_warnung.json +0 -17
  126. package/src/assets/fixtures/site_header/site_header_mit_warnung_no_sticky.json +0 -9
  127. package/src/assets/fixtures/teaser/cluster_teaser_100.json +0 -21
  128. package/src/assets/fixtures/teaser/cluster_teaser_100_genre.json +0 -29
  129. package/src/assets/fixtures/teaser/cluster_teaser_100_image.json +0 -50
  130. package/src/assets/fixtures/teaser/cluster_teaser_33.json +0 -21
  131. package/src/assets/fixtures/teaser/cluster_teaser_33_genre.json +0 -42
  132. package/src/assets/fixtures/teaser/cluster_teaser_33_image.json +0 -69
  133. package/src/assets/fixtures/teaser/cluster_teaser_33_long_title.json +0 -29
  134. package/src/assets/fixtures/teaser/cluster_teaser_50.json +0 -21
  135. package/src/assets/fixtures/teaser/cluster_teaser_50_genre.json +0 -42
  136. package/src/assets/fixtures/teaser/cluster_teaser_50_image.json +0 -69
  137. package/src/assets/fixtures/teaser/cluster_teaser_Podcast_Channel.json +0 -67
  138. package/src/assets/fixtures/teaser/cluster_teaser_extern_100.json +0 -29
  139. package/src/assets/fixtures/teaser/cluster_teaser_extern_33.json +0 -29
  140. package/src/assets/fixtures/teaser/cluster_teaser_extern_50.json +0 -29
  141. package/src/assets/fixtures/teaser/cluster_teaser_ordered_100.json +0 -29
  142. package/src/assets/fixtures/teaser/cluster_teaser_ordered_33.json +0 -29
  143. package/src/assets/fixtures/teaser/cluster_teaser_ordered_50.json +0 -29
  144. package/src/assets/fixtures/teaser/stage_teaser.json +0 -4
  145. package/src/assets/fixtures/teaser/stage_teaser_eventtag.json +0 -48
  146. package/src/assets/fixtures/teaser/stage_teaser_program.json +0 -55
  147. package/src/assets/fixtures/teaser/stage_teaser_wide.json +0 -23
  148. package/src/assets/fixtures/teaser/teaser_alternative_100_serif.json +0 -39
  149. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_audio.json +0 -39
  150. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_download.json +0 -46
  151. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_featured_content.json +0 -38
  152. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_link.json +0 -39
  153. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_live.json +0 -39
  154. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_single_event.json +0 -39
  155. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_two_events.json +0 -43
  156. package/src/assets/fixtures/teaser/teaser_alternative_100_serif_video.json +0 -39
  157. package/src/assets/fixtures/teaser/teaser_alternative_50_serif.json +0 -39
  158. package/src/assets/fixtures/teaser/teaser_alternative_50_serif_audio.json +0 -39
  159. package/src/assets/fixtures/teaser/teaser_alternative_50_serif_download.json +0 -46
  160. package/src/assets/fixtures/teaser/teaser_alternative_50_serif_link.json +0 -39
  161. package/src/assets/fixtures/teaser/teaser_alternative_50_serif_live.json +0 -39
  162. package/src/assets/fixtures/teaser/teaser_alternative_50_serif_video.json +0 -39
  163. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif.json +0 -27
  164. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_audio.json +0 -27
  165. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_comments.json +0 -27
  166. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_label.json +0 -38
  167. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_link.json +0 -14
  168. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_live.json +0 -14
  169. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_program.json +0 -14
  170. package/src/assets/fixtures/teaser/teaser_alternative_hero_serif_video.json +0 -14
  171. package/src/assets/fixtures/teaser/teaser_alternative_without_teaserimage_50_serif.json +0 -26
  172. package/src/assets/fixtures/teaser/teaser_comments_without_teaserinfo.json +0 -14
  173. package/src/assets/fixtures/teaser/teaser_content_nav_dropdown_100.json +0 -10
  174. package/src/assets/fixtures/teaser/teaser_content_nav_dropdown_autosuggest_100.json +0 -14
  175. package/src/assets/fixtures/teaser/teaser_content_nav_dropdown_subgroups.json +0 -215
  176. package/src/assets/fixtures/teaser/teaser_content_nav_flow_100.json +0 -14
  177. package/src/assets/fixtures/teaser/teaser_content_nav_flow_autosuggest.json +0 -18
  178. package/src/assets/fixtures/teaser/teaser_content_nav_list_100.json +0 -14
  179. package/src/assets/fixtures/teaser/teaser_content_nav_list_autosuggest.json +0 -18
  180. package/src/assets/fixtures/teaser/teaser_content_nav_mixed_100.json +0 -187
  181. package/src/assets/fixtures/teaser/teaser_content_nav_mixed_autosuggest.json +0 -14
  182. package/src/assets/fixtures/teaser/teaser_indextext_100_accented.json +0 -26
  183. package/src/assets/fixtures/teaser/teaser_indextext_100_boxed.json +0 -26
  184. package/src/assets/fixtures/teaser/teaser_indextext_100_highlighted.json +0 -26
  185. package/src/assets/fixtures/teaser/teaser_indextext_50_accented.json +0 -26
  186. package/src/assets/fixtures/teaser/teaser_poster_lg.json +0 -39
  187. package/src/assets/fixtures/teaser/teaser_poster_md.json +0 -39
  188. package/src/assets/fixtures/teaser/teaser_poster_md_label.json +0 -60
  189. package/src/assets/fixtures/teaser/teaser_poster_md_label_byline.json +0 -50
  190. package/src/assets/fixtures/teaser/teaser_standard_100_serif.json +0 -14
  191. package/src/assets/fixtures/teaser/teaser_standard_100_serif_download.json +0 -21
  192. package/src/assets/fixtures/teaser/teaser_standard_100_serif_link.json +0 -14
  193. package/src/assets/fixtures/teaser/teaser_standard_100_serif_program.json +0 -14
  194. package/src/assets/fixtures/teaser/teaser_standard_100_serif_single_event.json +0 -22
  195. package/src/assets/fixtures/teaser/teaser_standard_100_serif_two_events.json +0 -26
  196. package/src/assets/fixtures/teaser/teaser_standard_25_serif.json +0 -35
  197. package/src/assets/fixtures/teaser/teaser_standard_25_serif_audio.json +0 -35
  198. package/src/assets/fixtures/teaser/teaser_standard_25_serif_audio_livestream.json +0 -35
  199. package/src/assets/fixtures/teaser/teaser_standard_25_serif_link.json +0 -31
  200. package/src/assets/fixtures/teaser/teaser_standard_25_serif_live.json +0 -35
  201. package/src/assets/fixtures/teaser/teaser_standard_25_serif_podcast.json +0 -35
  202. package/src/assets/fixtures/teaser/teaser_standard_25_serif_video.json +0 -35
  203. package/src/assets/fixtures/teaser/teaser_standard_33_long_geotag.json +0 -22
  204. package/src/assets/fixtures/teaser/teaser_standard_33_serif.json +0 -14
  205. package/src/assets/fixtures/teaser/teaser_standard_33_serif_link.json +0 -14
  206. package/src/assets/fixtures/teaser/teaser_standard_33_serif_multiple_events.json +0 -36
  207. package/src/assets/fixtures/teaser/teaser_standard_33_serif_single_event.json +0 -18
  208. package/src/assets/fixtures/teaser/teaser_standard_33_serif_single_event_status.json +0 -22
  209. package/src/assets/fixtures/teaser/teaser_standard_33_serif_two_events.json +0 -22
  210. package/src/assets/fixtures/teaser/teaser_standard_50_serif.json +0 -14
  211. package/src/assets/fixtures/teaser/teaser_standard_50_serif_audio.json +0 -14
  212. package/src/assets/fixtures/teaser/teaser_standard_50_serif_audio_livestream.json +0 -14
  213. package/src/assets/fixtures/teaser/teaser_standard_50_serif_download.json +0 -21
  214. package/src/assets/fixtures/teaser/teaser_standard_50_serif_featured_content.json +0 -17
  215. package/src/assets/fixtures/teaser/teaser_standard_50_serif_link.json +0 -14
  216. package/src/assets/fixtures/teaser/teaser_standard_50_serif_link_two_click.json +0 -22
  217. package/src/assets/fixtures/teaser/teaser_standard_50_serif_live.json +0 -22
  218. package/src/assets/fixtures/teaser/teaser_standard_50_serif_podcast.json +0 -14
  219. package/src/assets/fixtures/teaser/teaser_standard_50_serif_single_event.json +0 -17
  220. package/src/assets/fixtures/teaser/teaser_standard_50_serif_video.json +0 -14
  221. package/src/assets/fixtures/teaser/teaser_standard_66_serif_single_event.json +0 -25
  222. package/src/assets/fixtures/teaser/teaser_standard_hero_serif.json +0 -4
  223. package/src/assets/fixtures/teaser/teaser_standard_hero_serif_comments.json +0 -4
  224. package/src/assets/fixtures/teaser/teaser_standard_hero_serif_label.json +0 -17
  225. package/src/assets/fixtures/teaser/teaser_standard_hero_serif_link.json +0 -4
  226. package/src/assets/fixtures/teaser/teaser_standard_without_teaserimage_25_serif.json +0 -22
  227. package/src/assets/fixtures/teaser/teaser_standard_without_teaserimage_50_serif.json +0 -14
  228. package/src/assets/fixtures/teaser/ticker_teaser_alternativ_100.json +0 -54
  229. package/src/assets/fixtures/teaser/ticker_teaser_alternativ_hero.json +0 -42
  230. package/src/assets/fixtures/teaser/ticker_teaser_alternativ_hero_audio.json +0 -42
  231. package/src/assets/fixtures/teaser/ticker_teaser_standard_100.json +0 -37
  232. package/src/assets/fixtures/teaser/ticker_teaser_standard_25.json +0 -50
  233. package/src/assets/fixtures/teaser/ticker_teaser_standard_33.json +0 -37
  234. package/src/assets/fixtures/teaser/ticker_teaser_standard_50.json +0 -37
  235. package/src/assets/fixtures/teaser/ticker_teaser_standard_hero.json +0 -25
  236. package/src/assets/fixtures/teaser/ticker_teaser_standard_hero_audio.json +0 -25
  237. package/src/stories/views/components/navigation/breadcrumb/fixtures/breadcrumb_2_level.json +0 -1
  238. package/src/stories/views/components/navigation/breadcrumb/fixtures/breadcrumb_3_level.json +0 -1
  239. package/src/stories/views/components/navigation/breadcrumb/fixtures/breadcrumb_4_level.json +0 -1
  240. package/src/stories/views/components/navigation/breadcrumb/fixtures/breadcrumb_5_level.json +0 -1
  241. package/src/stories/views/components/page/fixtures/metadatabox_comments.json +0 -1
  242. package/src/stories/views/components/page/fixtures/metadatabox_more_authors.json +0 -1
  243. package/src/stories/views/components/page/fixtures/metadatabox_more_authors_comments.json +0 -1
  244. package/src/stories/views/components/page/fixtures/metadatabox_one_author.json +0 -1
  245. package/src/stories/views/components/page/fixtures/metadatabox_one_author_comments.json +0 -1
  246. package/src/stories/views/components/page/fixtures/metadatabox_one_author_without_picture.json +0 -1
  247. package/src/stories/views/components/site_header/fixtures/site_header_default.json +0 -1
  248. package/src/stories/views/components/site_header/fixtures/site_header_default_no_sticky.json +0 -1
  249. package/src/stories/views/components/site_header/fixtures/site_header_mit_submenu.json +0 -1
  250. package/src/stories/views/components/site_header/fixtures/site_header_mit_submenu_asFlyout_no_sticky.json +0 -1
  251. package/src/stories/views/components/site_header/fixtures/site_header_mit_submenu_as_flyout.json +0 -1
  252. package/src/stories/views/components/site_header/fixtures/site_header_mit_submenu_as_flyout_no_sticky.json +0 -1
  253. package/src/stories/views/components/site_header/fixtures/site_header_mit_submenu_no_sticky.json +0 -1
  254. package/src/stories/views/components/site_header/fixtures/site_header_mit_top_topics.json +0 -1
  255. package/src/stories/views/components/site_header/fixtures/site_header_mit_top_topics_no_sticky.json +0 -1
  256. package/src/stories/views/components/site_header/fixtures/site_header_mit_warnung.json +0 -1
  257. package/src/stories/views/components/site_header/fixtures/site_header_mit_warnung_no_sticky.json +0 -1
  258. package/src/stories/views/components/teaser/fixtures/cluster_teaser_100.json +0 -1
  259. package/src/stories/views/components/teaser/fixtures/cluster_teaser_100_genre.json +0 -1
  260. package/src/stories/views/components/teaser/fixtures/cluster_teaser_100_image.json +0 -1
  261. package/src/stories/views/components/teaser/fixtures/cluster_teaser_33.json +0 -1
  262. package/src/stories/views/components/teaser/fixtures/cluster_teaser_33_genre.json +0 -1
  263. package/src/stories/views/components/teaser/fixtures/cluster_teaser_33_image.json +0 -1
  264. package/src/stories/views/components/teaser/fixtures/cluster_teaser_33_long_title.json +0 -1
  265. package/src/stories/views/components/teaser/fixtures/cluster_teaser_50.json +0 -1
  266. package/src/stories/views/components/teaser/fixtures/cluster_teaser_50_genre.json +0 -1
  267. package/src/stories/views/components/teaser/fixtures/cluster_teaser_50_image.json +0 -1
  268. package/src/stories/views/components/teaser/fixtures/cluster_teaser_Podcast_Channel.json +0 -1
  269. package/src/stories/views/components/teaser/fixtures/cluster_teaser_extern_100.json +0 -1
  270. package/src/stories/views/components/teaser/fixtures/cluster_teaser_extern_33.json +0 -1
  271. package/src/stories/views/components/teaser/fixtures/cluster_teaser_extern_50.json +0 -1
  272. package/src/stories/views/components/teaser/fixtures/cluster_teaser_ordered_100.json +0 -1
  273. package/src/stories/views/components/teaser/fixtures/cluster_teaser_ordered_33.json +0 -1
  274. package/src/stories/views/components/teaser/fixtures/cluster_teaser_ordered_50.json +0 -1
  275. package/src/stories/views/components/teaser/fixtures/stage_teaser.json +0 -1
  276. package/src/stories/views/components/teaser/fixtures/stage_teaser_eventtag.json +0 -1
  277. package/src/stories/views/components/teaser/fixtures/stage_teaser_program.json +0 -1
  278. package/src/stories/views/components/teaser/fixtures/stage_teaser_wide.json +0 -1
  279. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif.json +0 -1
  280. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_audio.json +0 -1
  281. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_download.json +0 -1
  282. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_featured_content.json +0 -1
  283. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_link.json +0 -1
  284. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_live.json +0 -1
  285. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_single_event.json +0 -1
  286. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_two_events.json +0 -1
  287. package/src/stories/views/components/teaser/fixtures/teaser_alternative_100_serif_video.json +0 -1
  288. package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif.json +0 -1
  289. package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif_audio.json +0 -1
  290. package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif_download.json +0 -1
  291. package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif_link.json +0 -1
  292. package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif_live.json +0 -1
  293. package/src/stories/views/components/teaser/fixtures/teaser_alternative_50_serif_video.json +0 -1
  294. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif.json +0 -1
  295. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_audio.json +0 -1
  296. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_comments.json +0 -1
  297. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_label.json +0 -1
  298. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_link.json +0 -1
  299. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_live.json +0 -1
  300. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_program.json +0 -1
  301. package/src/stories/views/components/teaser/fixtures/teaser_alternative_hero_serif_video.json +0 -1
  302. package/src/stories/views/components/teaser/fixtures/teaser_alternative_without_teaserimage_50_serif.json +0 -1
  303. package/src/stories/views/components/teaser/fixtures/teaser_comments_without_teaserinfo.json +0 -1
  304. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_dropdown_100.json +0 -1
  305. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_dropdown_autosuggest_100.json +0 -1
  306. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_dropdown_subgroups.json +0 -1
  307. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_flow_100.json +0 -1
  308. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_flow_autosuggest.json +0 -1
  309. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_list_100.json +0 -1
  310. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_list_autosuggest.json +0 -1
  311. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_mixed_100.json +0 -1
  312. package/src/stories/views/components/teaser/fixtures/teaser_content_nav_mixed_autosuggest.json +0 -1
  313. package/src/stories/views/components/teaser/fixtures/teaser_indextext_100_accented.json +0 -1
  314. package/src/stories/views/components/teaser/fixtures/teaser_indextext_100_boxed.json +0 -1
  315. package/src/stories/views/components/teaser/fixtures/teaser_indextext_100_highlighted.json +0 -1
  316. package/src/stories/views/components/teaser/fixtures/teaser_indextext_50_accented.json +0 -1
  317. package/src/stories/views/components/teaser/fixtures/teaser_poster_lg.json +0 -1
  318. package/src/stories/views/components/teaser/fixtures/teaser_poster_md.json +0 -1
  319. package/src/stories/views/components/teaser/fixtures/teaser_poster_md_label.json +0 -1
  320. package/src/stories/views/components/teaser/fixtures/teaser_poster_md_label_byline.json +0 -1
  321. package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif.json +0 -1
  322. package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif_download.json +0 -1
  323. package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif_link.json +0 -1
  324. package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif_program.json +0 -1
  325. package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif_single_event.json +0 -1
  326. package/src/stories/views/components/teaser/fixtures/teaser_standard_100_serif_two_events.json +0 -1
  327. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif.json +0 -1
  328. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_audio.json +0 -1
  329. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_audio_livestream.json +0 -1
  330. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_link.json +0 -1
  331. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_live.json +0 -1
  332. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_podcast.json +0 -1
  333. package/src/stories/views/components/teaser/fixtures/teaser_standard_25_serif_video.json +0 -1
  334. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_long_geotag.json +0 -1
  335. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif.json +0 -1
  336. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif_link.json +0 -1
  337. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif_multiple_events.json +0 -1
  338. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif_single_event.json +0 -1
  339. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif_single_event_status.json +0 -1
  340. package/src/stories/views/components/teaser/fixtures/teaser_standard_33_serif_two_events.json +0 -1
  341. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif.json +0 -1
  342. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_audio.json +0 -1
  343. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_audio_livestream.json +0 -1
  344. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_download.json +0 -1
  345. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_featured_content.json +0 -1
  346. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_link.json +0 -1
  347. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_link_two_click.json +0 -1
  348. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_live.json +0 -1
  349. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_podcast.json +0 -1
  350. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_single_event.json +0 -1
  351. package/src/stories/views/components/teaser/fixtures/teaser_standard_50_serif_video.json +0 -1
  352. package/src/stories/views/components/teaser/fixtures/teaser_standard_66_serif_single_event.json +0 -1
  353. package/src/stories/views/components/teaser/fixtures/teaser_standard_hero_serif.json +0 -1
  354. package/src/stories/views/components/teaser/fixtures/teaser_standard_hero_serif_comments.json +0 -1
  355. package/src/stories/views/components/teaser/fixtures/teaser_standard_hero_serif_label.json +0 -1
  356. package/src/stories/views/components/teaser/fixtures/teaser_standard_hero_serif_link.json +0 -1
  357. package/src/stories/views/components/teaser/fixtures/teaser_standard_without_teaserimage_25_serif.json +0 -1
  358. package/src/stories/views/components/teaser/fixtures/teaser_standard_without_teaserimage_50_serif.json +0 -1
  359. package/src/stories/views/components/teaser/fixtures/ticker_teaser_alternativ_100.json +0 -1
  360. package/src/stories/views/components/teaser/fixtures/ticker_teaser_alternativ_hero.json +0 -1
  361. package/src/stories/views/components/teaser/fixtures/ticker_teaser_alternativ_hero_audio.json +0 -1
  362. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_100.json +0 -1
  363. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_25.json +0 -1
  364. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_33.json +0 -1
  365. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_50.json +0 -1
  366. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_hero.json +0 -1
  367. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_hero_audio.json +0 -1
@@ -0,0 +1,353 @@
1
+ import { Meta } from '@storybook/addon-docs'
2
+
3
+ <Meta title="Grundlegendes/Entwicklung/Snapshot Stories" />
4
+
5
+ # Snapshot Stories
6
+
7
+ Unser Storybook ist standardmäßig so konfiguriert, dass bei einem Build (wird automatisch bei einem Pull Request ausgelöst) von jeder Story
8
+ mit Hilfe des Tools Chromatic ein sogenannter Snapshot erstellt wird. Ein Snapshot ist ein Screenshot der Story und wird verwendet, um
9
+ automatisiert zu testen, ob sich etwas am Aussehen eine Story geändert hat. Pro Monat stehen uns in Chromatic eine bestimmte Anzahl an Snapshots
10
+ zur verfügung (derzeit sind dies 35.000). Wird diese Grenze überschritten, muss pro zusätlichem Snapshot eine Summe X gezahlt werden. Zu Beginn der
11
+ Entwicklung waren die 35.000 Snapshots ausreichend, jedoch erreichen wir mit einer kontinuierlich steigenden Anzahl an Komponenten und dementsprechend
12
+ immer mehr Stories mittlerweile sehr schnell unser Snapshot Limit und fast jeden Monat eine nicht unerhebliche Summe dazu zahlen. Um dies zu vermeiden,
13
+ wollen wir zukünftig nur noch sogenannte Snapshot Stories mit Chromatic testen und die Tests für alle normalen Stories deaktivieren. Als Vorbild
14
+ dient uns hier das Vorgehen von Netlify (siehe [https://www.netlify.com/blog/storybook-visual-regression-testing/?ref=storybookblog.ghost.io#main](https://www.netlify.com/blog/storybook-visual-regression-testing/?ref=storybookblog.ghost.io#main)).
15
+
16
+ Um Snapshot Kapazitäten bei Chromatic zu sparen, werden, zumindest für den automatisierten Test, alle Zustände einer Komponente in einer einzigen Story
17
+ zusammengefasst. Bei einem Story File mit zehn Stories werden auf diese Weise neun Snapshots eingespart. Im Folgenden wird erklärt, wie dieses Ziel erreicht werden kann.
18
+
19
+ ## Aufbau der Testdaten (Fixtures)
20
+ Die Testdaten für Stories werden, wie im Kapitel [Fixtures](?path=/docs/grundlegendes-entwicklung-testdatenbereitstellung--docs) beschrieben, strukturiert in Form einer
21
+ JSON Datei bereitgestellt. Für die Verwendung mit Snapshot Stories wurde deren Struktur angepasst und erweitert. Die in einer Snapshot Story zusammengefassten Stories
22
+ lassen sich gruppieren, sortieren und die Art und Weise wie sie dargestellt werden (Flexbox oder Grid) konfiguriert werden.
23
+
24
+ ### Globale Konfiguration
25
+ Zunächst muss in jeder Testdaten Datei muss ein Objekt `config` angelegt werden. Hiermit werden globale Einstellungen für die Snapshot Story festgelegt.
26
+ Folgende Eigenschaften können konfiguriert werden:
27
+
28
+ | Property | Beschreibung |Standard-Wert|
29
+ | :---------- | :--------------------------------------------------- |:--------------------------------------------------- |
30
+ | **template** | Legt das Standard Template fest mit dem alle Stories einer Snapshot-Story gerendert werden. Dieser Wert kann pro Story überschrieben werden. Der hier angegebene Wert muss dem Namen eines Templates im Array `hbsTemplates` im Story File entsprechen. ||
31
+ | **path** | Erlaubt es einen Pfad zu den Testdaten anzugeben. Für die Teaser ist dieser z.B. `args.logicItem.includeModel` |`args`|
32
+ | **layout** | Legt das Layout fest, mit dem die einzelnen Stories innerhalb der Snapshot-Story angeordet werden. Erlaubte Werte sind `flex` und `grid` |`flex`|
33
+ | **renderSnapshotsWrapper** | Hierüber wird gesteuert, ob um die Stories innerhalb der Snapshot-Story, ein Wrapper Div gesetzt wird oder nicht. Obwohl dies für Flex und Grid Layouts benötigt wird, kann es sein, dass es hier ausgestellt werden muss, da im Story File mithilfe eines Decorators bereits ein Wrapper Div gesetzt wird.|`true`|
34
+
35
+ Nur die Eigenschaften, die keinen Standard-Wert besitzen müssen zwingend gesetzt werden. Ein vollständig konfiguriertes Beispiel zeigt der folgende Ausschnitt aus einer Testdaten-Datei.
36
+
37
+ ```json
38
+ {
39
+ "config":{
40
+ "template": "default",
41
+ "path": "args.logicItem.includeModel",
42
+ "layout": "grid",
43
+ "renderSnapshotsWrapper": false
44
+ }
45
+ }
46
+ ```
47
+
48
+ ### Stories
49
+ Die Stories einer Snapshot-Story werden in Form von Story-Objekten definiert. Diese können auf Ebene des globalen `config` Objekts oder innerhalb von Gruppen platziert werden.
50
+ Eine Story muss, damit Inhalte angezeigt werden können, zwingend ein Objekt `args` mit den Testdaten der Story enthalten. Mit Hilfe eines `config` Objekts können einzelne Eigenschaften
51
+ der globale Konfiguration überschrieben und neue Konfigurationen für die Story festgelegt werden. Folgende Eigenschaften können konfiguriert werden:
52
+
53
+ | Property | Beschreibung |Standard-Wert|
54
+ | :---------- | :--------------------------------------------------- |:--------------------------------------------------- |
55
+ | **template** | Erlaubt es den Namen eines individuellen Templates zum Rendering der Story anzugeben. Wird nichts angegeben, wird das in der globalen Konfiguration definierte zum Rendering verwendet.||
56
+ | **path** | Erlaubt es einen Storyspezifischen Pfad zu den Testdaten anzugeben. Wird hier nichts angegeben wird der Wert aus der globalen Konfiguration genutzt ||
57
+ | **renderSnapshotItemWrapper** | Legt fest, ob das Markup der Story von einem `<div>` umschlossen wird. Das Setzen dieser Eigenschaft hat nur eine Auswirkung, wenn die globale Eigenschaft `renderSnapshotsWrapper` auf `true`steht. |`true`|
58
+ | **css** | Hierüber besteht die Möglichkeit individuelle CSS Klassen für das eine Story umschließende Wrapper `<div>` zu setzen. ||
59
+ | **useAsSnapshot** | Hierüber kann gesteuert werden, ob einzelne Stories nicht in der Snapshot-Story gerendert werden sollen. |`true`|
60
+
61
+ Die Stories werden im Storybook Frontend standardmäßig nach dem Namen sortiert angezeigt. Wird bei der Ausgabe eine bestimmte Reihenfolge benötigt, kann diese durch Vorranstellen
62
+ einer Nummer vor dem Storynamen erreicht werden.
63
+
64
+
65
+ ```json
66
+ {
67
+ "config": {
68
+ "renderSnapshotsWrapper": false,
69
+ "path": "args.logicItem.includeModel",
70
+ "template": "default"
71
+ },
72
+ "1_byline_with_teaser_info": {
73
+ "args": {
74
+ "@->jsoninclude": "teaser/teasers.inc.json",
75
+ "@->contentpath": "teaser"
76
+ }
77
+ },
78
+ "2_byline_with_comments_and_teaser_info": {
79
+ "config":{
80
+ "template":"test"
81
+ },
82
+ "args": {
83
+ "@->jsoninclude": "teaser/teasers.inc.json",
84
+ "@->contentpath": "teaserWithComments"
85
+ }
86
+ }
87
+ }
88
+ ```
89
+
90
+ Hier werden die Daten für eine Snapshot-Story mit zwei Stories definiert. Zunächst wird in der globalen Koniguration definiert, dass die Stories nicht von einem Wrapper `<div>`
91
+ umschlossen werden sollen, die eigentlichen Testdaten über den Pfad `args.logicItem.includeModel` zur Verfügung stehen und zum Rendern der Stories das Template
92
+ `default` genutzt werden soll. Die Reihenfolge der zu rendernden Stories wird durch die Vorranstellung der Nummer festelegt. Bei der Story `2_byline_with_comments_and_teaser_info`
93
+ wird konfiguriert, dass zum Rendern statt des `default` Templates das Template `test`genutzt wird.
94
+
95
+
96
+ ### Gruppen
97
+ Sollen bei der Ausgabe thematisch zusamengehörige Stories nebeneinander platziert werden, können Sie in Gruppen zusammengefasst werden.
98
+ Auf diese Weise werden z.B. alle 50% Teaser in einem zusammenhängenden Block dargestellt. Gruppen werden in der Testdaten Datei als eigene Objekte auf der selben
99
+ Ebene wie das globale `config` Objekt platziert. Damit sie als Gruppe erkannt werden, muss ihr Name nach dem Schema `group_<Gruppenname>` aufgebaut werden. Innerhalb einer
100
+ Gruppe können beliebig viele Stories definiert werden. Die Stories innerhalb einer Gruppe können, wie im Kapitel [Stories](#stories) beschrieben, sortiert werden.
101
+
102
+ ```json
103
+ {
104
+ "config": {
105
+ "template": "default",
106
+ "path": "args.logicItem.includeModel",
107
+ "layout": "grid",
108
+ "renderSnapshotsWrapper": false
109
+ },
110
+ "group_100": {
111
+ "1_<Storyname>":{},
112
+ "2_<Storyname>":{},
113
+ ...
114
+ },
115
+ "group_50": {
116
+ "1_<Storyname>":{},
117
+ "2_<Storyname>":{},
118
+ ...
119
+ },
120
+ "group_33": {
121
+ "<Storyname>":{},
122
+ "<Storyname>":{},
123
+ ...
124
+ }
125
+ }
126
+ ```
127
+ Im Codebeispiel werden drei Gruppen definiert. Die Gruppen `group_100`, `group_50` enthalten sortierte und die Gruppe `group_33` unsortierte Stories.
128
+
129
+ ## Verwendung der Testdaten im Story File
130
+ Nachdem die Testdaten für die Stories wie unter [Aufbau der Testdaten](#aufbau-der-testdaten-fixtures) beschrieben definiert wurden, müssen sie, damit im Storybook
131
+ Frontend etwas angezeigt wird auch noch ausgelesen werden. Was hierbei zu beachten ist, wird im Folgenden beschrieben.
132
+
133
+ Im Kopf eines Story Files (`<storyname>.stories.js`) müssen, damit auf die Testdaten zugegriffen und eine Snapshot-Story gerendert werden kann, zwingend die Folgenden
134
+ beiden Imports gemacht werden:
135
+
136
+ ```javascript
137
+ import { getSnapshotsTemplate } from '/src/assets/js/utils.js'
138
+ import fixtures from './fixtures/teaser_standard.json' // individueller Pfad zur Testdaten Datei
139
+ ```
140
+ Mit dem ersten Import wird die Utility Methode `getSnapshotsTemplate` importiert. Diese Methode durchläuft in einer Schleife alle in den Testdaten bereitgestellten Stories
141
+ und stellt sie in einem Template zur rendern der Snapshot-Story zur Verfügung. Mit dem zweiten Import wird die Testdaten Datei in ein Objekt `fixtures` importiert. Der Pfad dieser Datei muss individuell
142
+ angepasst werden. Der Name des Testdaten Objekts kann geändert werden, aber es empfielht sich aus Konsistenzgründen den Namen `fixtures` beizubehalten.
143
+ An dieser Stelle können nun noch weitere Story spezifischen Imports gemacht werden.
144
+
145
+ Im Anschluss daran müssen die zum Rendern der Stories benötigten Handlebars Templates definiert werden.
146
+
147
+ ```javascript
148
+ const handlebars = require('hrHandlebars')
149
+ const hbsTemplates = []
150
+ hbsTemplates['default'] = handlebars.compile(`
151
+ {{> components/teaser/teaser_standard }}
152
+ `)
153
+ ```
154
+
155
+ Damit das entsprechende Handlebars Template kompiliert werden kann, muss zunächste eine Instanz von Handlebars über den Befehl `require('hrHandlebars')` geladen werden.
156
+ Danach muss das Array `hbsTemplates` initialisiert und diesem mindestens ein kompiliertes Handlebars Template übergeben werden. Die hier definierten Namen der Templates
157
+ müssen, damit das Rendering der Snapshot-Story korrekt funktioniert, mit denen aus dem Parameter `template` der Testdaten übereinstimmen.
158
+
159
+ Die auf diesem Weg definierten Handlebars Templates müssen jetzt in den konkreten Storybook Templates eingesetzt werden.
160
+
161
+ ```javascript
162
+ const Template = (args) => {
163
+ return hbsTemplates['default']({ ...args })
164
+ }
165
+
166
+ const snapshotTemplate = (args) => {
167
+ return getSnapshotsTemplate({ hbsTemplates, args })
168
+ }
169
+ ```
170
+
171
+ Es gibt, wie hier im Beispiel gezeigt, immer mindestens ein "normales" Template für die konkreten Storybook Stories (hier das Template `Template`) und ein Template für die Snapshot-Story (dieses sollte immer `snapshotTemplate` benannt werden).
172
+ In der Regel wird es von den "normalen" Templates immer so viele Storybook Templates geben, wie es auch Einträge im Array `hbsTemplates` gibt. Vom `snapshotTemplate`
173
+ gibt es hingegen immer nur genau ein Template. In diesem Template wird die `getSnapshotsTemplate` Methode aufgerufen und ihr ein Objekt bestehend aus dem Array `hbsTemplates` und den Testdaten übergeben.
174
+
175
+ Damit zukünftig nur noch von der Snapshot-Story Screenshots in Chromatic gemacht werden, muss in den Einstellungen der Story-Datei (diese ist im default export zu finden)
176
+ folgende Konfiguration vorgenommen werden:
177
+
178
+ ```javascript
179
+ export default {
180
+ ...
181
+
182
+ parameters: {
183
+ ...
184
+
185
+ chromatic: {
186
+ disableSnapshot: true
187
+ }
188
+ },
189
+
190
+ ...
191
+ }
192
+ ```
193
+
194
+ Das Anfertigen von Snapshots wird hierdurch zunächst für alle Stories deaktiviert. Damit aber ein Snapshot der Snapshot-Story gemacht wird, muss es in dieser
195
+ Story explizit wieder aktiviert werden. Wie dies gemacht wird und wie die anderen Stories zukünftig definiert werden, wird im Folgenden beschrieben.
196
+
197
+ ```javascript
198
+ export const StandardHero = {
199
+ render: Template.bind({}),
200
+ name: 'Standard Hero',
201
+ decorators: [
202
+ (Story) => {
203
+ return `<div class="grid grid-cols-12 py-6 col-full gap-x-6 gap-y-6 sm:px-9.5 sm:col-main">
204
+ ${Story()}
205
+ </div>`
206
+ },
207
+ ],
208
+ args: fixtures.group_hero.hero.args.logicItem.includeModel,
209
+ }
210
+
211
+ export const StandardHeroMitLabel = {
212
+ render: Template.bind({}),
213
+ name: 'Standard Hero mit Label',
214
+ decorators: [
215
+ (Story) => {
216
+ return `<div class="grid grid-cols-12 py-6 col-full gap-x-6 gap-y-6 sm:px-9.5 sm:col-main">
217
+ ${Story()}
218
+ </div>`
219
+ },
220
+ ],
221
+ args: fixtures.group_hero.hero_with_label.args.logicItem.includeModel,
222
+ }
223
+
224
+ ...
225
+
226
+ export const Snapshot = {
227
+ render: snapshotTemplate.bind({}),
228
+ name: 'Snapshot',
229
+
230
+ args: fixtures,
231
+ parameters: {
232
+ chromatic: { disableSnapshot: false },
233
+ }
234
+ }
235
+ ```
236
+
237
+ Die ersten beiden Stories in diesem Beispiel sind "normale" Storybook Stories. Sie werden im Storybook Frontend angezeigt, aber es werden in Chromatic keine Snapshots erstellt. Über den Parameter `render`
238
+ definieren sie, dass sie mit dem Storybook Template `Template` gerendert werden sollen. Ihr Name, der auch im Navigationsmenü angezeigt wird, erhalten sie über den Parameter `name`
239
+ und über den Parameter `args` werden ihnen die Testdaten aus der Testdaten-Datei übergeben. Anders als bei der im Folgenden beschriebenen Snapshot-Story, muss hier
240
+ der exakte Pfad zu den jeweiligen Testdaten angegeben werden.
241
+
242
+ Als letzte Story in einer Story-Datei sollte immer die Snapshot-Story stehen. Ihr Aufbau ist in jeder Story-Datei gleich. Als Storybook-Template zum Rendern nutzt
243
+ sie das Template `snapshotTemplate`. Der Name der Story ist immer `Snapshot` und als Testdaten wird ihr einfach das komplette Testdaten-Objekt `fixtures` übergeben.
244
+ Anders als bei den "normalen" Stories wird konfiguriert, dass von dieser Story ein Snapshot in Chromatic gemacht werden soll.
245
+
246
+ Der vollständige Aufbau einer Story-Datei wird im Folgenden gezeigt.
247
+
248
+ ```javascript
249
+ import { getSnapshotsTemplate } from '/src/assets/js/utils.js'
250
+ import fixtures from './fixtures/teaser_standard.json'
251
+
252
+
253
+ const handlebars = require('hrHandlebars')
254
+ const hbsTemplates = []
255
+ hbsTemplates['default'] = handlebars.compile(`
256
+ {{> components/teaser/teaser_standard }}
257
+ `)
258
+
259
+
260
+ const Template = (args) => {
261
+ return hbsTemplates['default']({ ...args })
262
+ }
263
+
264
+ const snapshotTemplate = (args) => {
265
+ return getSnapshotsTemplate({ hbsTemplates, args })
266
+ }
267
+
268
+ export default {
269
+ title: 'Komponenten/Teaser/Standard',
270
+
271
+ parameters: {
272
+ layout: 'fullscreen',
273
+
274
+ chromatic: {
275
+ viewports: [360, 1024],
276
+ diffThreshold: 0.3,
277
+ disableSnapshot: true
278
+ },
279
+ },
280
+
281
+ argTypes: {
282
+ teaserSize: {
283
+ control: {
284
+ type: 'select',
285
+ options: ['hero', '100', '50', '33', '25'],
286
+ },
287
+
288
+ description: 'Teaser Größe',
289
+
290
+ table: {
291
+ defaultValue: {
292
+ summary: 'hero',
293
+ },
294
+ },
295
+ },
296
+ },
297
+
298
+ decorators: [
299
+ (Story) => {
300
+ return `<div class="grid grid-page">
301
+ ${Story()}
302
+ </div>`
303
+ },
304
+ ],
305
+ }
306
+
307
+ export const StandardHero = {
308
+ render: Template.bind({}),
309
+ name: 'Standard Hero',
310
+ decorators: [
311
+ (Story) => {
312
+ return `<div class="grid grid-cols-12 py-6 col-full gap-x-6 gap-y-6 sm:px-9.5 sm:col-main">
313
+ ${Story()}
314
+ </div>`
315
+ },
316
+ ],
317
+ args: fixtures.group_hero.hero.args.logicItem.includeModel,
318
+ }
319
+
320
+ export const StandardHeroMitLabel = {
321
+ render: Template.bind({}),
322
+ name: 'Standard Hero mit Label',
323
+ decorators: [
324
+ (Story) => {
325
+ return `<div class="grid grid-cols-12 py-6 col-full gap-x-6 gap-y-6 sm:px-9.5 sm:col-main">
326
+ ${Story()}
327
+ </div>`
328
+ },
329
+ ],
330
+ args: fixtures.group_hero.hero_with_label.args.logicItem.includeModel,
331
+ }
332
+
333
+ /*
334
+ Die weiteren Stories wurden aus Platzgründen weggelassen
335
+ */
336
+
337
+ export const Snapshot = {
338
+ render: snapshotTemplate.bind({}),
339
+ name: 'Snapshot',
340
+
341
+ args: fixtures,
342
+ parameters: {
343
+ chromatic: { disableSnapshot: false },
344
+ }
345
+ }
346
+
347
+ ```
348
+
349
+ <div className="bg-blue-200 !mb-4 !mt-4 p-4">
350
+ <h4 className="!text-stone-950 font-bold">Hinweis</h4>
351
+ Snapshot-Stories können nicht für alle Komponenten erstellt werden. Da Chromatic eine Obergrenze für die erstellten Screenshots hat, können
352
+ beispielsweise die Stories, die ganze Inhaltsseiten abbilden nicht in Snapshot-Stories zusammengefasst werden.
353
+ </div>
@@ -75,15 +75,13 @@ Ein Button wird mit der Handlebar Komponente `button` eingebunden. Wie einleiten
75
75
  Komponente lediglich das Grundgerüst eines Buttons dar. Die Beschriftung und/oder ein Icon müssen mit Subkomponenten hinzugefügt
76
76
  werden.
77
77
 
78
- <div class="bg-blue-200 !mt-4 p-4">
79
- <h4 class="!text-stone-950 font-bold">Hinweis</h4>
78
+ <div className="bg-blue-200 !mt-4 p-4">
79
+ <h4 className="!text-stone-950 font-bold">Hinweis</h4>
80
80
 
81
- <p>
82
81
  Sowohl die Button-Komponente als auch die Subkomponenten Button-Label und Button-Icon sind
83
82
  standardmäßig bereits gestyled. Das setzen von zusätzlichen Style Klassen über den Parameter{' '}
84
- <pre class="inline">\_css</pre> ist zwar bei jeder Komponente möglich, sollte aber nur dann
83
+ <code>\_css</code> ist zwar bei jeder Komponente möglich, sollte aber nur dann
85
84
  gemacht werden, wenn es gar nicht anders geht.
86
- </p>
87
85
  </div>
88
86
 
89
87
  ### Button mit Text
@@ -1,45 +1,57 @@
1
+ import snapshotsJson from './fixtures/button.json'
2
+ import { getSnapshotsTemplate } from '/src/assets/js/utils.js'
3
+
1
4
  const handlebars = require('hrHandlebars')
2
5
 
3
- const buttonWithLabelTemplate = (args) => {
4
- let hbsTemplate = handlebars.compile(`
6
+ const hbsTemplates = []
7
+ hbsTemplates['buttonWithLabel'] = handlebars.compile(`
5
8
  {{#> components/button/button}}
6
9
  {{> components/button/components/button_label}}
7
10
  {{/components/button/button}}
8
11
  `)
9
- return hbsTemplate({ ...args })
10
- }
11
-
12
- const buttonWithLabelTemplateOnBackground = (args) => {
13
- let hbsTemplate = handlebars.compile(`
12
+ hbsTemplates['buttonWithLabelOnBackground'] = handlebars.compile(`
14
13
  <div class="bg-primary p-4">
15
14
  {{#> components/button/button}}
16
15
  {{> components/button/components/button_label }}
17
16
  {{/components/button/button}}
18
17
  </div>
19
18
  `)
20
- return hbsTemplate({ ...args })
21
- }
22
-
23
- const buttonWithLabelAndIconRightTemplate = (args) => {
24
- let hbsTemplate = handlebars.compile(`
19
+ hbsTemplates['buttonWithLabelAndIconRight'] = handlebars.compile(`
25
20
  {{#> components/button/button}}
26
21
  {{> components/button/components/button_label }}
27
22
  {{> components/button/components/button_icon }}
28
23
  {{/components/button/button}}
29
24
  `)
30
- return hbsTemplate({ ...args })
31
- }
32
-
33
- const buttonWithLabelAndIconLeftTemplate = (args) => {
34
- let hbsTemplate = handlebars.compile(`
35
- {{#> components/button/button~}}
25
+ hbsTemplates['buttonWithLabelAndIconLeft'] = handlebars.compile(`
26
+ {{#> components/button/button}}
36
27
  {{> components/button/components/button_icon }}
37
28
  {{> components/button/components/button_label }}
38
- {{~/components/button/button}}
29
+ {{/components/button/button}}
39
30
  `)
40
- return hbsTemplate({ ...args })
31
+
32
+
33
+
34
+ const buttonWithLabelTemplate = (args) => {
35
+ return hbsTemplates['buttonWithLabel']({ ...args })
36
+ }
37
+
38
+ const buttonWithLabelTemplateOnBackground = (args) => {
39
+ return hbsTemplates['buttonWithLabelOnBackground']({ ...args })
40
+ }
41
+
42
+ const buttonWithLabelAndIconRightTemplate = (args) => {
43
+ return hbsTemplates['buttonWithLabelAndIconRight']({ ...args })
41
44
  }
42
45
 
46
+ const buttonWithLabelAndIconLeftTemplate = (args) => {
47
+ return hbsTemplates['buttonWithLabelAndIconLeft']({ ...args })
48
+ }
49
+
50
+ const snapshotTemplate = (args) => {
51
+ return getSnapshotsTemplate({ hbsTemplates, args })
52
+ }
53
+
54
+
43
55
  export default {
44
56
  title: 'Komponenten/Buttons/Button',
45
57
 
@@ -253,6 +265,7 @@ export default {
253
265
  controls: {
254
266
  sort: 'alpha',
255
267
  },
268
+ chromatic: { disableSnapshot: true }
256
269
  },
257
270
  }
258
271
 
@@ -260,10 +273,7 @@ export const Spielplatz = {
260
273
  render: buttonWithLabelTemplate.bind({}),
261
274
  name: 'Spielplatz',
262
275
 
263
- args: {
264
- _size: 'md',
265
- _label: 'Button',
266
- },
276
+ args: snapshotsJson['button-md'].args,
267
277
  }
268
278
 
269
279
  export const ButtonLg = {
@@ -283,10 +293,7 @@ export const ButtonLg = {
283
293
  },
284
294
  },
285
295
 
286
- args: {
287
- _size: 'lg',
288
- _label: 'Large',
289
- },
296
+ args: snapshotsJson['button-lg'].args,
290
297
  }
291
298
 
292
299
  export const ButtonMd = {
@@ -303,10 +310,7 @@ export const ButtonMd = {
303
310
  },
304
311
  },
305
312
 
306
- args: {
307
- _size: 'md',
308
- _label: 'Medium',
309
- },
313
+ args: snapshotsJson['button-md'].args,
310
314
  }
311
315
 
312
316
  export const ButtonSm = {
@@ -323,10 +327,7 @@ export const ButtonSm = {
323
327
  },
324
328
  },
325
329
 
326
- args: {
327
- _size: 'sm',
328
- _label: 'Small',
329
- },
330
+ args: snapshotsJson['button-sm'].args,
330
331
  }
331
332
 
332
333
  export const ButtonPrimary = {
@@ -343,10 +344,7 @@ export const ButtonPrimary = {
343
344
  },
344
345
  },
345
346
 
346
- args: {
347
- _size: 'lg',
348
- _label: 'Primary',
349
- },
347
+ args: snapshotsJson['button-primary'].args,
350
348
  }
351
349
 
352
350
  export const ButtonSecondary = {
@@ -363,11 +361,7 @@ export const ButtonSecondary = {
363
361
  },
364
362
  },
365
363
 
366
- args: {
367
- _size: 'lg',
368
- _label: 'Secondary',
369
- _variant: 'secondary',
370
- },
364
+ args: snapshotsJson['button-secondary'].args
371
365
  }
372
366
 
373
367
  export const ButtonTertiary = {
@@ -384,11 +378,7 @@ export const ButtonTertiary = {
384
378
  },
385
379
  },
386
380
 
387
- args: {
388
- _size: 'lg',
389
- _label: 'Tertiary',
390
- _variant: 'tertiary',
391
- },
381
+ args: snapshotsJson['button-tertiary'].args,
392
382
  }
393
383
 
394
384
  export const ButtonPrimaryDisabled = {
@@ -405,11 +395,7 @@ export const ButtonPrimaryDisabled = {
405
395
  },
406
396
  },
407
397
 
408
- args: {
409
- _size: 'lg',
410
- _label: 'Primary',
411
- _disabled: true,
412
- },
398
+ args: snapshotsJson['button-primary-disabled'].args,
413
399
  }
414
400
 
415
401
  export const ButtonSecondaryDisabled = {
@@ -426,12 +412,7 @@ export const ButtonSecondaryDisabled = {
426
412
  },
427
413
  },
428
414
 
429
- args: {
430
- _size: 'lg',
431
- _label: 'Secondary',
432
- _variant: 'secondary',
433
- _disabled: true,
434
- },
415
+ args: snapshotsJson['button-secondary-disabled'].args,
435
416
  }
436
417
 
437
418
  export const ButtonTertiaryDisabled = {
@@ -448,12 +429,7 @@ export const ButtonTertiaryDisabled = {
448
429
  },
449
430
  },
450
431
 
451
- args: {
452
- _size: 'lg',
453
- _label: 'Tertiary',
454
- _variant: 'tertiary',
455
- _disabled: true,
456
- },
432
+ args: snapshotsJson['button-tertiary-disabled'].args,
457
433
  }
458
434
 
459
435
  export const ButtonIconRechts = {
@@ -470,11 +446,7 @@ export const ButtonIconRechts = {
470
446
  },
471
447
  },
472
448
 
473
- args: {
474
- _size: 'lg',
475
- _label: 'Icon rechts',
476
- _icon: 'arrow-right',
477
- },
449
+ args: snapshotsJson['button-icon-right'].args,
478
450
  }
479
451
 
480
452
  export const ButtonIconLinks = {
@@ -491,11 +463,7 @@ export const ButtonIconLinks = {
491
463
  },
492
464
  },
493
465
 
494
- args: {
495
- _size: 'lg',
496
- _label: 'Icon links',
497
- _icon: 'arrow-left',
498
- },
466
+ args: snapshotsJson['button-icon-left'].args,
499
467
  }
500
468
 
501
469
  export const ButtonPrimaryAufFarbigemHintergrund = {
@@ -516,11 +484,7 @@ export const ButtonPrimaryAufFarbigemHintergrund = {
516
484
  },
517
485
  },
518
486
 
519
- args: {
520
- _size: 'lg',
521
- _label: 'Primary',
522
- _onBackground: true,
523
- },
487
+ args: snapshotsJson['button-primary-background'].args,
524
488
  }
525
489
 
526
490
  export const ButtonSecondaryAufFarbigemHintergrund = {
@@ -541,12 +505,7 @@ export const ButtonSecondaryAufFarbigemHintergrund = {
541
505
  },
542
506
  },
543
507
 
544
- args: {
545
- _size: 'lg',
546
- _label: 'Secondary',
547
- _variant: 'secondary',
548
- _onBackground: true,
549
- },
508
+ args: snapshotsJson['button-secondary-background'].args,
550
509
  }
551
510
 
552
511
  export const ButtonTertiaryAufFarbigemHintergrund = {
@@ -567,10 +526,29 @@ export const ButtonTertiaryAufFarbigemHintergrund = {
567
526
  },
568
527
  },
569
528
 
570
- args: {
571
- _size: 'lg',
572
- _label: 'Tertiary',
573
- _variant: 'tertiary',
574
- _onBackground: true,
529
+ args: snapshotsJson['button-tertiary-background'].args,
530
+ }
531
+
532
+ export const Snapshot = {
533
+ render: snapshotTemplate.bind({}),
534
+ name: 'Snapshot',
535
+
536
+ argTypes: {
537
+ _size: {
538
+ control: false,
539
+ },
540
+
541
+ _variant: {
542
+ control: false,
543
+ },
544
+
545
+ _onBackground: {
546
+ control: false,
547
+ },
575
548
  },
549
+
550
+ args: snapshotsJson,
551
+ parameters: {
552
+ chromatic: { disableSnapshot: false },
553
+ }
576
554
  }
@@ -0,0 +1 @@
1
+ {"button-sm":{"config":{"template":"buttonWithLabel"},"args":{"_size":"sm","_label":"Small"}},"button-md":{"config":{"template":"buttonWithLabel"},"args":{"_size":"md","_label":"Medium"}},"button-lg":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Large","_size":"lg"}},"button-primary":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Primary","_size":"lg"}},"button-secondary":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Secondary","_size":"lg","_variant":"secondary"}},"button-tertiary":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Tertiary","_size":"lg","_variant":"tertiary"}},"button-primary-disabled":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Primary Disabled","_size":"lg","_disabled":true}},"button-secondary-disabled":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Secondary Disabled","_size":"lg","_variant":"secondary","_disabled":true}},"button-tertiary-disabled":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Tertiary Disabled","_size":"lg","_variant":"tertiary","_disabled":true}},"button-icon-right":{"config":{"template":"buttonWithLabelAndIconRight"},"args":{"_label":"Icon rechts","_size":"lg","_icon":"arrow-right"}},"button-icon-left":{"config":{"template":"buttonWithLabelAndIconLeft"},"args":{"_label":"Icon left","_size":"lg","_icon":"arrow-left"}},"button-primary-background":{"config":{"template":"buttonWithLabelOnBackground"},"args":{"_label":"Primary","_size":"lg","_onBackground":true}},"button-secondary-background":{"config":{"template":"buttonWithLabelOnBackground"},"args":{"_label":"Secondary","_variant":"secondary","_size":"lg","_onBackground":true}},"button-tertiary-background":{"config":{"template":"buttonWithLabelOnBackground"},"args":{"_label":"Tertiary","_variant":"tertiary","_size":"lg","_onBackground":true}}}
@@ -0,0 +1 @@
1
+ {"button-sm":{"config":{"template":"buttonWithLabel"},"args":{"_size":"sm","_label":"Small"}},"button-md":{"config":{"template":"buttonWithLabel"},"args":{"_size":"md","_label":"Medium"}},"button-lg":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Large","_size":"lg"}},"button-primary":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Primary","_size":"lg"}},"button-secondary":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Secondary","_size":"lg","_variant":"secondary"}},"button-secondary-on-white":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Secondary","_size":"lg","_variant":"secondary","_onWhite":true}},"button-tertiary":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Tertiary","_size":"lg","_variant":"tertiary"}},"button-primary-disabled":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Primary Disabled","_size":"lg","_disabled":true}},"button-secondary-disabled":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Secondary Disabled","_size":"lg","_variant":"secondary","_disabled":true}},"button-tertiary-disabled":{"config":{"template":"buttonWithLabel"},"args":{"_label":"Tertiary Disabled","_size":"lg","_variant":"tertiary","_disabled":true}},"button-icon-right":{"config":{"template":"buttonWithLabelAndIconRight"},"args":{"_label":"Icon rechts","_size":"lg","_icon":"arrow-right"}},"button-icon-left":{"config":{"template":"buttonWithLabelAndIconLeft"},"args":{"_label":"Icon left","_size":"lg","_icon":"arrow-left"}},"button-primary-background":{"config":{"template":"buttonWithLabelOnBackground"},"args":{"_label":"Primary","_size":"lg","_onBackground":true}},"button-secondary-background":{"config":{"template":"buttonWithLabelOnBackground"},"args":{"_label":"Secondary","_variant":"secondary","_size":"lg","_onBackground":true}},"button-tertiary-background":{"config":{"template":"buttonWithLabelOnBackground"},"args":{"_label":"Tertiary","_variant":"tertiary","_size":"lg","_onBackground":true}}}