hr-design-system-handlebars 1.11.12 → 1.12.1

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 (118) hide show
  1. package/.storybook/main.js +9 -0
  2. package/.storybook/manager.js +18 -18
  3. package/.storybook/preview.js +9 -1
  4. package/CHANGELOG.md +25 -0
  5. package/README.md +13 -2
  6. package/build/handlebars/handlebars.js +1 -1
  7. package/build/scripts/build.js +1 -1
  8. package/config.js +1 -0
  9. package/dist/assets/index.css +225 -189
  10. package/dist/views/components/base/image/icon.hbs +1 -1
  11. package/dist/views/components/base/link.hbs +11 -1
  12. package/dist/views/components/base/link_open.hbs +12 -13
  13. package/dist/views/components/base/link_v2.hbs +14 -0
  14. package/dist/views/components/button/button.hbs +9 -24
  15. package/dist/views/components/button/components/button_icon.hbs +2 -1
  16. package/dist/views/components/button/components/button_label.hbs +1 -1
  17. package/dist/views/components/button/link_button.hbs +6 -0
  18. package/dist/views/components/button/utilities/button_base_classes.hbs +1 -0
  19. package/dist/views/components/button/utilities/button_dimension_classes.hbs +1 -0
  20. package/dist/views/components/button/utilities/button_on_image_classes.hbs +39 -0
  21. package/dist/views/components/button/utilities/button_variation_classes.hbs +14 -0
  22. package/dist/views/components/content_nav/content_nav_container.hbs +1 -1
  23. package/dist/views/components/content_nav/content_nav_item.hbs +1 -1
  24. package/dist/views/components/event/calendar/event_calendar_footer.hbs +1 -1
  25. package/dist/views/components/event/event_ticket_button.hbs +11 -9
  26. package/dist/views/components/grid/grid_group_highlight.hbs +1 -1
  27. package/dist/views/components/label/label_old.hbs +1 -1
  28. package/dist/views/components/mediaplayer/media_player.hbs +4 -22
  29. package/dist/views/components/mediaplayer/mediaplayer_button.hbs +9 -0
  30. package/dist/views/components/modal/modal.hbs +2 -2
  31. package/dist/views/components/site_header/brand_navigation/brand_navigation.hbs +1 -1
  32. package/dist/views/components/teaser/cluster/teaser_cluster.hbs +4 -1
  33. package/dist/views/components/teaser/cluster/teaser_cluster_byline.hbs +1 -1
  34. package/dist/views/components/teaser/cluster/teaser_cluster_item.hbs +1 -1
  35. package/dist/views/components/teaser/components/teaser_av_consumption_close_button.hbs +6 -20
  36. package/dist/views/components/teaser/components/teaser_byline.hbs +1 -1
  37. package/dist/views/components/teaser/components/teaser_image.hbs +7 -15
  38. package/dist/views/components/teaser/components/teaser_ticker_body.hbs +40 -0
  39. package/dist/views/components/teaser/podcast/podcast_subscribe_button.hbs +18 -15
  40. package/dist/views/components/teaser/podcast/podcast_title.hbs +2 -2
  41. package/dist/views/components/teaser/tabbox/group_tabbox.hbs +4 -1
  42. package/dist/views/components/teaser/tabbox/teaser_tabbox.hbs +10 -11
  43. package/dist/views/components/teaser/teaser_poster.hbs +5 -1
  44. package/dist/views/components/teaser/ticker/teaser_ticker.hbs +4 -4
  45. package/gulpfile.js +9 -0
  46. package/package.json +4 -2
  47. package/src/assets/css/custom-components.css +37 -38
  48. package/src/assets/css/custom-utilities.css +2 -2
  49. package/src/assets/fixtures/event/calendar/event_calendar_months.inc.json +5 -1
  50. package/src/assets/fixtures/teaser/teaser_ticker.inc.json +3 -3
  51. package/src/assets/fixtures/teaser/ticker_teaser_standard_100.json +5 -1
  52. package/src/assets/tailwind.css +54 -22
  53. package/src/stories/conventions-and-datastructure.mdx +217 -4
  54. package/src/stories/views/components/base/image/icon.hbs +1 -1
  55. package/src/stories/views/components/base/link.hbs +11 -1
  56. package/src/stories/views/components/base/link_open.hbs +12 -13
  57. package/src/stories/views/components/base/link_v2.hbs +14 -0
  58. package/src/stories/views/components/button/button.hbs +9 -24
  59. package/src/stories/views/components/button/button.mdx +186 -0
  60. package/src/stories/views/components/button/button.stories.js +508 -0
  61. package/src/stories/views/components/button/components/button_icon.hbs +2 -1
  62. package/src/stories/views/components/button/components/button_icon.mdx +25 -0
  63. package/src/stories/views/components/button/components/button_icon.stories.js +44 -0
  64. package/src/stories/views/components/button/components/button_label.hbs +1 -1
  65. package/src/stories/views/components/button/components/button_label.mdx +25 -0
  66. package/src/stories/views/components/button/components/button_label.stories.js +33 -0
  67. package/src/stories/views/components/button/link_button.hbs +6 -0
  68. package/src/stories/views/components/button/link_button.mdx +137 -0
  69. package/src/stories/views/components/button/link_button.stories.js +420 -0
  70. package/src/stories/views/components/button/utilities/button_base_classes.hbs +1 -0
  71. package/src/stories/views/components/button/utilities/button_dimension_classes.hbs +1 -0
  72. package/src/stories/views/components/button/utilities/button_on_image_classes.hbs +39 -0
  73. package/src/stories/views/components/button/utilities/button_variation_classes.hbs +14 -0
  74. package/src/stories/views/components/content_nav/content_nav_container.hbs +1 -1
  75. package/src/stories/views/components/content_nav/content_nav_item.hbs +1 -1
  76. package/src/stories/views/components/event/calendar/event_calendar_footer.hbs +1 -1
  77. package/src/stories/views/components/event/event_ticket_button.hbs +11 -9
  78. package/src/stories/views/components/grid/grid_group_highlight.hbs +1 -1
  79. package/src/stories/views/components/label/label_old.hbs +1 -1
  80. package/src/stories/views/components/mediaplayer/media_player.hbs +4 -22
  81. package/src/stories/views/components/mediaplayer/mediaplayer_button.hbs +9 -0
  82. package/src/stories/views/components/mediaplayer/mediaplayer_button.mdx +82 -0
  83. package/src/stories/views/components/mediaplayer/mediaplayer_button.stories.js +178 -0
  84. package/src/stories/views/components/modal/modal.hbs +2 -2
  85. package/src/stories/views/components/site_header/brand_navigation/brand_navigation.hbs +1 -1
  86. package/src/stories/views/components/teaser/cluster/teaser_cluster.hbs +4 -1
  87. package/src/stories/views/components/teaser/cluster/teaser_cluster_byline.hbs +1 -1
  88. package/src/stories/views/components/teaser/cluster/teaser_cluster_item.hbs +1 -1
  89. package/src/stories/views/components/teaser/components/teaser_av_consumption_close_button.hbs +6 -20
  90. package/src/stories/views/components/teaser/components/teaser_byline.hbs +1 -1
  91. package/src/stories/views/components/teaser/components/teaser_image.hbs +7 -15
  92. package/src/stories/views/components/teaser/components/teaser_ticker_body.hbs +40 -0
  93. package/src/stories/views/components/teaser/fixtures/teaser_event_calendar_100_serif.json +1 -1
  94. package/src/stories/views/components/teaser/fixtures/ticker_teaser_standard_100.json +1 -1
  95. package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.hbs +18 -15
  96. package/src/stories/views/components/teaser/podcast/podcast_title.hbs +2 -2
  97. package/src/stories/views/components/teaser/tabbox/group_tabbox.hbs +4 -1
  98. package/src/stories/views/components/teaser/tabbox/teaser_tabbox.hbs +10 -11
  99. package/src/stories/views/components/teaser/teaser_poster.hbs +5 -1
  100. package/src/stories/views/components/teaser/ticker/teaser_ticker.hbs +4 -4
  101. package/src/stories/views/components/teaser/ticker/teaser_ticker.stories.js +1 -1
  102. package/tailwind.config.js +8 -1
  103. package/dist/views/components/button/button_pseudo.hbs +0 -8
  104. package/dist/views/components/button/button_pseudo.inc.hbs +0 -18
  105. package/dist/views/components/button/button_pseudo_v2.hbs +0 -12
  106. package/dist/views/components/button/button_round.hbs +0 -23
  107. package/dist/views/components/button/button_round_classes.hbs +0 -46
  108. package/dist/views/components/button/button_transparent.hbs +0 -17
  109. package/dist/views/components/button/button_v2.hbs +0 -7
  110. package/dist/views/components/button/components/button_pseudo_link.hbs +0 -3
  111. package/src/stories/views/components/button/button_pseudo.hbs +0 -8
  112. package/src/stories/views/components/button/button_pseudo.inc.hbs +0 -18
  113. package/src/stories/views/components/button/button_pseudo_v2.hbs +0 -12
  114. package/src/stories/views/components/button/button_round.hbs +0 -23
  115. package/src/stories/views/components/button/button_round_classes.hbs +0 -46
  116. package/src/stories/views/components/button/button_transparent.hbs +0 -17
  117. package/src/stories/views/components/button/button_v2.hbs +0 -7
  118. package/src/stories/views/components/button/components/button_pseudo_link.hbs +0 -3
@@ -1,30 +1,15 @@
1
- <button
2
- {{~#if _aria}} aria-label="{{_aria}}"{{/if}}
3
- {{~#if _isButton}} type="button"{{else}} type="submit"{{/if~}}
1
+ <button
2
+ {{#if _id}} id="{{_id}}"{{/if}}
3
+ class="ds-button {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant=_variant _onBackground=_onBackground _disableButtonPress=_disableButtonPress}} {{> components/button/utilities/button_dimension_classes _size=_size}}{{#if _css}} {{_css}}{{/if}} {{#> css}}{{/css}}{{#if _openModal}} js-modalButton{{/if}}"
4
+ {{#if _openModal}} aria-haspopup="true"{{/if}}
5
+ {{~#if _ariaLabel}} aria-label="{{_ariaLabel}}"{{/if}}
6
+ type="{{defaultIfEmpty _type "submit"}}"
4
7
  {{~#if _name}} name="{{_name}}"{{/if}}
5
- {{~#if _title}} title="{{_title}}"{{/if}}
6
- class="{{_addClass}}{{#if _addClass2}} {{_addClass2}}{{/if}}{{#if _buttonColor}} {{_buttonColor}}{{/if}}{{#if _buttonSpace}} {{> components/button/button_round_classes _teaserSize=_teaserSize _teaserType=_teaserType _isMobile1to1=_isMobile1to1}}{{/if}}{{#if _webview}} -webview{{/if}}"
8
+ {{~#if _title}} title="{{_title}}"{{/if}}
7
9
  {{~#if _value}} value="{{_value}}"{{/if}}
8
10
  {{~#if _alpineClick}} @click="{{_alpineClick}}"{{/if}}
9
11
  {{~#if _x-show}} x-show="{{_x-show}}"{{/if}}
10
12
  {{~#if _noFocus}} tabindex="-1"{{/if}}
11
- >
12
- {{~#if _showIcon~}}
13
- {{> components/base/image/icon
14
- _icon=_icon
15
- _iconmap=_iconmap
16
- _addClass=_addIconClass
17
- _webview=_webview
18
- _ariaHidden=false
19
- _iconTitle=false
20
- _iconDesc=false
21
- _iconText=false
22
- _overlayIcon=false
23
- }}
24
- {{/if~}}
25
- {{~#if _label~}}
26
- <span {{#if _srOnly}}class="sr-only"{{/if}}>
27
- {{~_label~}}
28
- </span>
29
- {{/if~}}
13
+ {{#> html_properties}}{{/html_properties}}>
14
+ {{> @partial-block }}
30
15
  </button>
@@ -0,0 +1,186 @@
1
+ import { ArgsTable, Meta, Story, Canvas } from '@storybook/blocks'
2
+ import * as ButtonStories from './button.stories'
3
+
4
+ <Meta of={ButtonStories} />
5
+
6
+ # Button
7
+
8
+ - [Übersicht](#übersicht)
9
+ - [Eigenschaften](#eigenschaften)
10
+ - [Varianten](#varianten)
11
+ - [Verwendung](#verwendung)
12
+
13
+ ## Übersicht
14
+
15
+ Buttons erlauben es eine Aktion oder ein Ereignis mit einem Klick auszulösen. Sie werden z.B. in der Navigation einer Tab-Box verwendet, um zwischen
16
+ den unterschiedlichen Tabs umzuschalten oder werden genutzt, um ein ein Modal zu öffnen.
17
+ Soll die Schaltfläche optisch wie ein Button aussehen, bei einem Klick aber eine neue Seite öffnen, darf nicht die Button-Komponente genutzt werden.
18
+ Für diesen Anwendungsfall gibt es mit dem Button-Link eine eigene Komponente. Sie erzeugt technisch ein HTML Link Element,
19
+ das optisch genauso wie ein Button aussieht. Beispiele hierfür sind die Schaltfläche am unteren Rand einer Tab-Box, die es
20
+ ermöglicht auf eine Seite mit weiteren Inhalten zu kommen, die Schaltfläche innerhalb eines Cluster-Teasers, die auf eine Seite mit weiteren Beiträgen verlinkt
21
+ oder die Schaltfläche innerhalb eines Poster-Teasers, die auf den konkreten Inhalt verlinkt.
22
+
23
+ Die Button-Komponente als solches ist sehr einfach gehalten. Sie stellt nur ein Grundgerüst (ein gestyltes HTML-Button Element) zur Verfügung.
24
+ Alle Inhalte des Buttons, wie das [Label](?path=/docs/komponenten-buttons-komponenten-label--label) oder ein mögliches
25
+ [Icon](?path=/docs/komponenten-buttons-komponenten-icon--icon), können flexibel durch Subkomponenten hinzugefügt werden.
26
+
27
+ <Canvas>
28
+ <Story of={ButtonStories.Spielplatz} />
29
+ </Canvas>
30
+
31
+ ## Eigenschaften
32
+
33
+ <ArgsTable story="Spielplatz" />
34
+
35
+ ## Varianten
36
+
37
+ Auf einer Inhaltsseite kann mehr als ein Button platziert werden. Um wichtige von weniger wichtigen Aktionen
38
+ unterscheidbar zu machen, sind unterschiedliche optische Varianten und Größen von Buttons zu verwenden.
39
+
40
+ ### Größen
41
+
42
+ <Canvas>
43
+ <Story of={ButtonStories.ButtonLg} />
44
+ <Story of={ButtonStories.ButtonMd} />
45
+ <Story of={ButtonStories.ButtonSm} />
46
+ </Canvas>
47
+
48
+ ### Button-Arten
49
+
50
+ <Canvas>
51
+ <Story of={ButtonStories.ButtonPrimary} />
52
+ <Story of={ButtonStories.ButtonSecondary} />
53
+ <Story of={ButtonStories.ButtonTertiary} />
54
+ </Canvas>
55
+
56
+ ### Button mit Icon <a id="button-icon" />
57
+
58
+ <Canvas>
59
+ <Story of={ButtonStories.ButtonIconRechts} />
60
+ <Story of={ButtonStories.ButtonIconLinks} />
61
+ </Canvas>
62
+
63
+ ## Verwendung
64
+
65
+ Ein Button wird mit der Handlebar Komponente `button` eingebunden. Wie einleitend schon beschrieben, stellt diese
66
+ Komponente lediglich das Grundgerüst eines Buttons dar. Die Beschriftung und/oder ein Icon müssen mit Subkomponenten hinzugefügt
67
+ werden.
68
+
69
+ <div class="bg-blue-200 !mt-4 p-4">
70
+ <h4 class="!text-stone-950 font-bold">Hinweis</h4>
71
+
72
+ <p>
73
+ Sowohl die Button-Komponente als auch die Subkomponenten Button-Label und Button-Icon sind
74
+ standardmäßig bereits gestyled. Das setzen von zusätzlichen Style Klassen über den Parameter{' '}
75
+ <pre class="inline">\_css</pre> ist zwar bei jeder Komponente möglich, sollte aber nur dann
76
+ gemacht werden, wenn es gar nicht anders geht.
77
+ </p>
78
+ </div>
79
+
80
+ ### Button mit Text
81
+
82
+ Ein Button der Ausprägung `primary` mit Beschriftung wird, wie in folgendem Codebeispiel gezeigt, gebaut.
83
+
84
+ <Canvas>
85
+ <Story of={ButtonStories.ButtonPrimary} />
86
+ </Canvas>
87
+
88
+ ```handlebars
89
+ {{#> components/button/button _size="lg"}}
90
+ {{> components/button/components/button_label _label="Primary"}}
91
+ {{/components/button/button}}
92
+ ```
93
+
94
+ ### Button mit Text und Icon
95
+
96
+ Ein Button der Ausprägung `primary` mit einem Label und einem rechts daneben stehenden Icon wird, wie
97
+ in folgendem Codebeispiel gezeigt, gebaut.
98
+
99
+ <Canvas>
100
+ <Story of={ButtonStories.ButtonIconRechts} />
101
+ </Canvas>
102
+
103
+ ```handlebars
104
+ {{#> components/button/button _size="lg"}}
105
+ {{> components/button/components/button_label _label="Icon rechts"}}
106
+ {{> components/button/components/button_icon _icon="arrow-right" _iconmap="icons"}}
107
+ {{/components/button/button}}
108
+ ```
109
+
110
+ Soll das Icon links vom Label stehen, muss der Aufruf der Subkomponenten einfach vertauscht werden.
111
+
112
+ <Canvas>
113
+ <Story of={ButtonStories.ButtonIconLinks} />{' '}
114
+ </Canvas>
115
+
116
+ ```handlebars
117
+ {{#> components/button/button _size="lg"}}
118
+ {{> components/button/components/button_icon _icon="arrow-left" _iconmap="icons"}}
119
+ {{> components/button/components/button_label _label="Icon links"}}
120
+ {{/components/button/button}}
121
+ ```
122
+
123
+ Der passende Abstand zwischen Icon und Label wird automatisch per CSS gesetzt.
124
+
125
+ ### Button auf farbigem Hintergund
126
+
127
+ Soll ein Button auf einem farbigen Hintergrund (bietet sich vor allem bei dunklen Hintergründen an) genutzt werden, kann durch setzen des Parameters
128
+ `_onBackground` eine auf dunkle Hintergründe abgestimmte kontrastreichere optische Variante der Button aktiviert werden.
129
+
130
+ <Canvas>
131
+ <Story of={ButtonStories.ButtonPrimaryAufFarbigemHintergrund} />
132
+ <Story of={ButtonStories.ButtonSecondaryAufFarbigemHintergrund} />
133
+ <Story of={ButtonStories.ButtonTertiaryAufFarbigemHintergrund} />
134
+ </Canvas>
135
+
136
+ ```handlebars
137
+ {{#> components/button/link_button _size="lg" _onBackground=true}}
138
+ {{> components/button/components/button_label _label="Primary"}}
139
+ {{/components/button/link_button}}
140
+ ```
141
+
142
+ ### Besonderheiten
143
+
144
+ Die Button-Komponente kann mit [Inline-Partials](?path=/docs/grundlegendes-konventionen-und-datenstrukturen--docs#namen-übergebener-komponenten-parameter-in-partial-blocks-und-inline-partials)
145
+ um zusätzliche HTML-Properties oder in Style-Komponenten ausgelagerte CSS-Klassen erweitert werden.
146
+
147
+ #### Setzen zusätzlicher HTML Attribute
148
+
149
+ In manchen Fällen reichen die standardmäßig von der Button-Komponente gesetzten HTML-Attribute nicht aus. Sollen weitere
150
+ Attribute gesetzt werden (z.B. zum Setzen von alpine.js Direktiven), muss dies wie in folgendem Beispiel gezeigt umgesetzt werden.
151
+
152
+ ```handlebars
153
+ {{#> components/button/button _size="lg"}}
154
+ {{> components/button/components/button_label _label="Button"}}
155
+ {{/components/button/button}}
156
+ {{#*inline "html_properties"}}
157
+ x-ref="button"
158
+ x-on:click="toggle()"
159
+ :aria-expanded="open"
160
+ :aria-controls="$id('dropdown-button')"
161
+ :class="open ? 'drop-shadow' : ''"
162
+ data-hr-click-tracking='{"settings": [{"type": "uxAction", "clickLabel": "podcastAbonnieren:ButtonClick"}]}'
163
+ {{/inline}}
164
+ ```
165
+
166
+ Dem hier gerenderten HTML-Button werden mit Hilfe des Inline-Partials `html_properties` die Attribute `x-ref`, `x-on`, `:aria-expanded`, `:aria-controls`, `:class`
167
+ sowie `data-hr-click-tracking` hinzugefügt.
168
+
169
+ #### Setzen von in Subkomponenten ausgelagerte CSS Klassen
170
+
171
+ Müssen CSS Klassen abhängig von bestimmten Eigenschaften (z.B. Teaser-Größe, Teaser-Art, etc.) gesetzt werden, hat sich mit der Zeit
172
+ als Best-Practice eine Auslagerung der ganzen Logik in Subkomponenten herausgestellt. Um den Inhalt dieser Subkomponenten einer
173
+ anderen Komponente dynamisch zu übergeben, können die bislang genutzten Standard Handlebar Properties (im Kontext der Button Komponente
174
+ `_css`) nicht genutzt werden. Einer solchen Property können ausschließlich Strings übergeben werden. Stattdessen werden auch hierfür
175
+ Inline-Partials eingesetzt.
176
+
177
+ ```handlebars
178
+ {{#> components/button/button _size="lg"}}
179
+ {{> components/button/components/button_label _label="Button"}}
180
+ {{/components/button/button}}
181
+ {{#*inline "css"}}
182
+ {{> components/button/utilities/button_on_image_classes _teaserSize=_teaserSize _teaserType=_teaserType _isMobile1to1=_isMobile1to1}}
183
+ {{/inline}}
184
+ ```
185
+
186
+ Über das Inline-Partial `css` können auf diese Weise theoretisch beliebig viele in Subkomponenten ausgelagerte CSS Klassen übergeben werden.