hr-design-system-handlebars 1.11.10 → 1.11.11

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 (114) hide show
  1. package/.babelrc.json +14 -0
  2. package/.storybook/main.js +34 -52
  3. package/.storybook/preview-head.html +4 -1
  4. package/.storybook/preview.js +25 -35
  5. package/CHANGELOG.md +17 -0
  6. package/dist/assets/index.css +11 -3
  7. package/package.json +20 -13
  8. package/src/assets/css/custom-utilities.css +3 -3
  9. package/src/stories/BrandColors.data.js +42 -0
  10. package/src/stories/BrandColors.mdx +25 -0
  11. package/src/stories/{Colors.stories.mdx → Colors.data.js} +2 -18
  12. package/src/stories/Colors.mdx +19 -0
  13. package/src/stories/Example.mdx +56 -0
  14. package/src/stories/Example.stories.js +57 -0
  15. package/src/stories/{Fixtures.stories.mdx → Fixtures.mdx} +3 -5
  16. package/src/stories/{InstallAndUpdate.stories.mdx → InstallAndUpdate.mdx} +0 -2
  17. package/src/stories/Introduction.mdx +3 -0
  18. package/src/stories/{SvgOptimization.stories.mdx → SvgOptimization.mdx} +0 -2
  19. package/src/stories/{Typography.stories.mdx → Typography.mdx} +13 -14
  20. package/src/stories/{conventions-and-datastructure.stories.mdx → conventions-and-datastructure.mdx} +7 -9
  21. package/src/stories/views/components/Button.mdx +30 -0
  22. package/src/stories/views/components/Button_.stories.js +77 -0
  23. package/src/stories/views/components/event/calendar/{event_calendar_components.stories.mdx → event_calendar_components.mdx} +31 -87
  24. package/src/stories/views/components/event/calendar/event_calendar_components.stories.js +129 -0
  25. package/src/stories/views/components/geoTag/geoTag.mdx +32 -0
  26. package/src/stories/views/components/geoTag/geoTag.stories.js +35 -0
  27. package/src/stories/views/components/grid/grid.mdx +210 -0
  28. package/src/stories/views/components/grid/grid.stories.js +148 -0
  29. package/src/stories/views/components/label/label.mdx +54 -0
  30. package/src/stories/views/components/label/label.stories.js +183 -0
  31. package/src/stories/views/components/page/page.data.js +17 -0
  32. package/src/stories/views/components/page/page.mdx +110 -0
  33. package/src/stories/views/components/page/page.stories.js +50 -0
  34. package/src/stories/views/components/page/page_pagination.data.js +8 -0
  35. package/src/stories/views/components/page/page_pagination.mdx +8 -0
  36. package/src/stories/views/components/page/page_pagination.stories.js +34 -0
  37. package/src/stories/views/components/page/page_player.mdx +21 -0
  38. package/src/stories/views/components/page/page_player.stories.js +34 -0
  39. package/src/stories/views/components/site_header/{header.stories.mdx → header.mdx} +218 -152
  40. package/src/stories/views/components/site_header/header.stories.js +62 -0
  41. package/src/stories/views/components/teaser/cluster/teaser_cluster.mdx +32 -0
  42. package/src/stories/views/components/teaser/cluster/teaser_cluster.stories.js +146 -0
  43. package/src/stories/views/components/teaser/components/teaser_byline.mdx +97 -0
  44. package/src/stories/views/components/teaser/components/teaser_byline.stories.js +30 -0
  45. package/src/stories/views/components/teaser/components/teaser_heading.mdx +96 -0
  46. package/src/stories/views/components/teaser/components/teaser_heading.stories.js +158 -0
  47. package/src/stories/views/components/teaser/components/teaser_text.mdx +36 -0
  48. package/src/stories/views/components/teaser/components/teaser_text.stories.js +74 -0
  49. package/src/stories/views/components/teaser/components/teaser_title.mdx +42 -0
  50. package/src/stories/views/components/teaser/components/teaser_title.stories.js +85 -0
  51. package/src/stories/views/components/teaser/components/teaser_topline.mdx +29 -0
  52. package/src/stories/views/components/teaser/components/teaser_topline.stories.js +27 -0
  53. package/src/stories/views/components/teaser/content_nav/teaser_content_nav.mdx +54 -0
  54. package/src/stories/views/components/teaser/content_nav/{teaser_content_nav.stories.mdx → teaser_content_nav.stories.js} +80 -61
  55. package/src/stories/views/components/teaser/group_teaser/group.mdx +18 -0
  56. package/src/stories/views/components/teaser/group_teaser/group.stories.js +85 -0
  57. package/src/stories/views/components/teaser/podcast/podcast.mdx +11 -0
  58. package/src/stories/views/components/teaser/podcast/{podcast.stories.mdx → podcast.stories.js} +50 -39
  59. package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.mdx +10 -0
  60. package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.stories.js +51 -0
  61. package/src/stories/views/components/teaser/tabbox/teaser_tabbox.mdx +10 -0
  62. package/src/stories/views/components/teaser/tabbox/teaser_tabbox.stories.js +40 -0
  63. package/src/stories/views/components/teaser/teaser_alternativ.mdx +76 -0
  64. package/src/stories/views/components/teaser/teaser_alternativ.stories.js +126 -0
  65. package/src/stories/views/components/teaser/teaser_alternativ_av.mdx +75 -0
  66. package/src/stories/views/components/teaser/teaser_alternativ_av.stories.js +111 -0
  67. package/src/stories/views/components/teaser/teaser_event_calendar.mdx +57 -0
  68. package/src/stories/views/components/teaser/teaser_event_calendar.stories.js +92 -0
  69. package/src/stories/views/components/teaser/teaser_indextext.mdx +35 -0
  70. package/src/stories/views/components/teaser/teaser_indextext.stories.js +85 -0
  71. package/src/stories/views/components/teaser/teaser_logic/teaser_logic.mdx +23 -0
  72. package/src/stories/views/components/teaser/teaser_logic/teaser_logic.stories.js +36 -0
  73. package/src/stories/views/components/teaser/teaser_poster.mdx +95 -0
  74. package/src/stories/views/components/teaser/teaser_poster.stories.js +67 -0
  75. package/src/stories/views/components/teaser/teaser_stage.mdx +15 -0
  76. package/src/stories/views/components/teaser/teaser_stage.stories.js +60 -0
  77. package/src/stories/views/components/teaser/teaser_standard.mdx +129 -0
  78. package/src/stories/views/components/teaser/teaser_standard.stories.js +166 -0
  79. package/src/stories/views/components/teaser/teaser_standard_av.mdx +38 -0
  80. package/src/stories/views/components/teaser/teaser_standard_av.stories.js +117 -0
  81. package/src/stories/views/components/teaser/teaser_standard_event.mdx +103 -0
  82. package/src/stories/views/components/teaser/teaser_standard_event.stories.js +119 -0
  83. package/src/stories/views/components/teaser/ticker/teaser_ticker.mdx +10 -0
  84. package/src/stories/views/components/teaser/ticker/{teaser_ticker.stories.mdx → teaser_ticker.stories.js} +25 -24
  85. package/.storybook/withThemeDecorator.js +0 -12
  86. package/src/stories/BrandColors.stories.mdx +0 -39
  87. package/src/stories/Example.stories.mdx +0 -93
  88. package/src/stories/Introduction.stories.mdx +0 -211
  89. package/src/stories/views/components/Button.stories.mdx +0 -82
  90. package/src/stories/views/components/geoTag/geoTag.stories.mdx +0 -61
  91. package/src/stories/views/components/grid/grid.stories.mdx +0 -275
  92. package/src/stories/views/components/label/label.stories.mdx +0 -200
  93. package/src/stories/views/components/page/page.stories.mdx +0 -144
  94. package/src/stories/views/components/page/page_pagination.stories.mdx +0 -36
  95. package/src/stories/views/components/page/page_player.stories.mdx +0 -43
  96. package/src/stories/views/components/teaser/cluster/teaser_cluster.stories.mdx +0 -97
  97. package/src/stories/views/components/teaser/components/teaser_byline.stories.mdx +0 -78
  98. package/src/stories/views/components/teaser/components/teaser_heading.stories.mdx +0 -219
  99. package/src/stories/views/components/teaser/components/teaser_text.stories.mdx +0 -94
  100. package/src/stories/views/components/teaser/components/teaser_title.stories.mdx +0 -124
  101. package/src/stories/views/components/teaser/components/teaser_topline.stories.mdx +0 -63
  102. package/src/stories/views/components/teaser/group_teaser/group.stories.mdx +0 -85
  103. package/src/stories/views/components/teaser/podcast/podcast_subscribe_button.stories.mdx +0 -52
  104. package/src/stories/views/components/teaser/tabbox/teaser_tabbox.stories.mdx +0 -39
  105. package/src/stories/views/components/teaser/teaser_alternativ.stories.mdx +0 -163
  106. package/src/stories/views/components/teaser/teaser_alternativ_av.stories.mdx +0 -142
  107. package/src/stories/views/components/teaser/teaser_event_calendar.stories.mdx +0 -131
  108. package/src/stories/views/components/teaser/teaser_indextext.stories.mdx +0 -111
  109. package/src/stories/views/components/teaser/teaser_logic/teaser_logic.stories.mdx +0 -39
  110. package/src/stories/views/components/teaser/teaser_poster.stories.mdx +0 -130
  111. package/src/stories/views/components/teaser/teaser_stage.stories.mdx +0 -53
  112. package/src/stories/views/components/teaser/teaser_standard.stories.mdx +0 -170
  113. package/src/stories/views/components/teaser/teaser_standard_av.stories.mdx +0 -95
  114. package/src/stories/views/components/teaser/teaser_standard_event.stories.mdx +0 -150
@@ -1,64 +1,41 @@
1
- import { ArgsTable, Meta, Story, Canvas, Preview } from '@storybook/addon-docs'
2
- import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'
3
- import navigation from './header.hbs'
4
- import brandnav from './brand_navigation/brand_navigation.hbs'
5
- import JsonData from './fixtures/site_header_default.json'
6
- import JsonData2 from './fixtures/site_header_mit_warnung.json'
7
- import JsonData3 from './fixtures/site_header_mit_submenu.json'
8
- import JsonDataTopTopics from './fixtures/site_header_mit_top_topics.json'
9
-
10
- <Meta title="Komponenten/Header/Header"
11
- argTypes={{}}
12
- parameters={{
13
- chromatic: {
14
- viewports: [360, 768, 1024],
15
- },
16
- layout: 'fullscreen',
17
- docs: { inlineStories : false, iframeHeight: 240 },
18
- viewport: {
19
- viewports: INITIAL_VIEWPORTS
20
- },
21
- }}
22
-
23
- />
24
-
25
- export const Template = (args, { globals: { customConditionalToolbar } }) => {
26
- // You can either use a function to create DOM elements or use a plain html string!
27
- // return `<div>${label}</div>`;
28
- let brand =
29
- undefined !== customConditionalToolbar ? customConditionalToolbar['brands'] : 'hessenschau'
30
- return navigation({ brand, ...args })
31
- }
32
-
1
+ import { ArgsTable, Meta, Story, Canvas, Preview } from '@storybook/blocks'
2
+ import * as HeaderStories from './header.stories'
33
3
 
4
+ <Meta of={HeaderStories} />
34
5
 
35
6
  # Header
36
7
 
37
8
  [Frameworks](#frameworks) - [Varianten](#varianten) - [Scrollverhalten](#scrollverhalten) - [Templates & Codes](#templates) - [Sub-Komponenten](#subkomponenten)
38
9
 
39
10
  <Canvas>
40
- <Story name="Default"
41
- args={JsonData}
42
- parameters={{}}>
43
- {Template.bind({})}
44
- </Story>
11
+ <Story of={HeaderStories.Default} />
45
12
  </Canvas>
46
13
 
47
14
  ## Beschreibung
48
15
 
49
- Die <b>Header</b>-Komponente ist die Haupt-Navigation der Hessenschau. Sie ist in der Komponente 'Page' eingebunden und besteht grundsätzlich aus 4 Subkomponenten:
16
+ Die <b>Header</b>-Komponente ist die Haupt-Navigation der Hessenschau. Sie ist in der Komponente 'Page' eingebunden und besteht grundsätzlich aus 4 Subkomponenten:
50
17
 
51
18
  <ul>
52
- <li>components/site_header/<b>anchor_navigation</b></li>
53
- <li>components/site_header/<b>brand_navigation</b></li>
54
- <li>components/site_header/<b>service_navigation</b></li>
55
- <li>components/site_header/<b>section_navigation</b></li>
19
+ <li>
20
+ components/site\_header/<b>anchor\_navigation</b>
21
+ </li>
22
+ <li>
23
+ components/site\_header/<b>brand\_navigation</b>
24
+ </li>
25
+ <li>
26
+ components/site\_header/<b>service\_navigation</b>
27
+ </li>
28
+ <li>
29
+ components/site\_header/<b>section\_navigation</b>
30
+ </li>
56
31
  </ul>
32
+
57
33
  <br />
34
+
58
35
  Die Header-Komponente wird in handlebars wie folgt eingebaut:
59
36
 
60
37
  ```html
61
- {{> components/site_header/header}}
38
+ {{> components/site_header/header}}
62
39
  ```
63
40
 
64
41
  <a name="frameworks" />
@@ -66,72 +43,83 @@ Die Header-Komponente wird in handlebars wie folgt eingebaut:
66
43
  ### Frameworks
67
44
 
68
45
  Die wesentlichen Funktionen und Features der Navigation sind mit dem Javascript-Framework [**Alpine.js**](https://alpinejs.dev/) realisiert. Alpine regelt u.a. die Sichtbarkeit der einzelnen Elemente und ist für die Interaktivität der Navigation zuständig. Alle Codes, die in der Header-Komponente Alpine.js direkt betreffen, sind in der Datei **"header_alpine.js** ausgelagert. Hier finden sich global verwendete dynamische Variablen (via Alpine.store) und zu verwendende Kontexte (via Alpine.data).
69
-
70
- Für das CSS wird das Framework [**TailwindCSS**](https://www.tailwindcss.com) verwendet.
71
46
 
47
+ Für das CSS wird das Framework [**TailwindCSS**](https://www.tailwindcss.com) verwendet.
72
48
 
73
49
  <a name="varianten" />
74
50
 
75
51
  ### Varianten
76
52
 
77
- Die Navigation ist sticky und responsiv mit drei Breakpoints für Smartphone, Tablet und Desktop. Für diese drei Viewportgrößen gibt es jeweils unterschiedliche Darstellungen der Subkomponenten innerhalb der Navigation. Grundsätzlich kann die Navigation z.B. in der Anzahl der ServiceNavigation-Items und der Sichtbarkeit von Flyouts und/oder Submenus variieren.
53
+ Die Navigation ist sticky und responsiv mit drei Breakpoints für Smartphone, Tablet und Desktop. Für diese drei Viewportgrößen gibt es jeweils unterschiedliche Darstellungen der Subkomponenten innerhalb der Navigation. Grundsätzlich kann die Navigation z.B. in der Anzahl der ServiceNavigation-Items und der Sichtbarkeit von Flyouts und/oder Submenus variieren.
78
54
 
79
55
  Desktop:
56
+
80
57
  <img src="/images/navi_default.png" />
58
+
81
59
  <br />
82
60
 
83
- ***
61
+ ---
84
62
 
85
63
  Tablet:
64
+
86
65
  <img src="/images/navi_tablet.PNG" />
66
+
87
67
  <br />
88
68
 
89
- ***
69
+ ---
90
70
 
91
71
  Mobil:
72
+
92
73
  <img src="/images/navi_mobil_default.png" />
74
+
93
75
  <br />
94
76
 
95
- ***
77
+ ---
96
78
 
97
79
  <br />
80
+
98
81
  <br />
82
+
99
83
  <br />
84
+
100
85
  <br />
101
- Navigation mit zusätzlichem Service-Item:
86
+
87
+ Navigation mit zusätzlichem Service-Item:{' '}
102
88
 
103
89
  <Canvas>
104
- <Story name="Mit Warnung" args={JsonData2}>bla
105
- {Template.bind({})}
106
- </Story>
90
+ <Story of={HeaderStories.MitWarnung} />
107
91
  </Canvas>
108
92
 
109
- ***
93
+ ---
110
94
 
111
95
  <br />
96
+
112
97
  <br />
98
+
113
99
  <br />
100
+
114
101
  <br />
115
- Navigation mit zusätzlicher Subnavigation:
102
+
103
+ Navigation mit zusätzlicher Subnavigation:{' '}
116
104
 
117
105
  <Canvas>
118
- <Story name="Mit Subnavigation" args={JsonData3}>
119
- {Template.bind({})}
120
- </Story>
106
+ <Story of={HeaderStories.MitSubnavigation} />
121
107
  </Canvas>
122
108
 
123
- ***
109
+ ---
124
110
 
125
111
  <br />
112
+
126
113
  <br />
114
+
127
115
  <br />
116
+
128
117
  <br />
129
- Navigation mit Top Topics:
118
+
119
+ Navigation mit Top Topics:{' '}
130
120
 
131
121
  <Canvas>
132
- <Story name="Mit Top Topics" args={JsonDataTopTopics}>
133
- {Template.bind({})}
134
- </Story>
122
+ <Story of={HeaderStories.MitTopTopics} />
135
123
  </Canvas>
136
124
 
137
125
  <br />
@@ -140,59 +128,72 @@ Navigation mit Top Topics:
140
128
 
141
129
  ### Scrollverhalten
142
130
 
143
- Es gibt 3 Scrollpositionen, die relevant sind: 0%, 50% und 90%. Die Höhe des Viewports wird hierbei als Referenz bzw. 100% angenommen. (Programmatisch wird die Scrollposition in der Variable **"percent"** abgebildet und zur Verarbeitung genutzt) Scrollt man bei ausgeblendeter Navigation die Seite wieder um 1px zurück, wird im Desktop-Viewport die Section-Navigation wieder eingeblendet, im Tablet und Mobil-Viewport kommt je nach Scrollposition die Navigation wieder in den sichtbaren Bereich bzw. die Service-List mit den Service-Icons wird wieder eingeblendet. Die Brand-Navigation wird erst wieder angezeigt, wenn ganz nach oben gescrollt wird.
131
+ Es gibt 3 Scrollpositionen, die relevant sind: 0%, 50% und 90%. Die Höhe des Viewports wird hierbei als Referenz bzw. 100% angenommen. (Programmatisch wird die Scrollposition in der Variable **"percent"** abgebildet und zur Verarbeitung genutzt) Scrollt man bei ausgeblendeter Navigation die Seite wieder um 1px zurück, wird im Desktop-Viewport die Section-Navigation wieder eingeblendet, im Tablet und Mobil-Viewport kommt je nach Scrollposition die Navigation wieder in den sichtbaren Bereich bzw. die Service-List mit den Service-Icons wird wieder eingeblendet. Die Brand-Navigation wird erst wieder angezeigt, wenn ganz nach oben gescrollt wird.
144
132
 
145
- | Scrollposition | Viewport | Beschreibung |
146
- |:---------------|:---------|:-------------|
147
- |`>0%`| alle Viewports | Brand-Navigation wird ausgeblendet |
148
- |`>50%`| Desktop | Section-Navigation wird ausgeblendet & Logo verkleinert |
149
- || Tablet | Logo wird verkleinert |
150
- || Mobil | Logo wird verkleinert & ServiceList wird ausgeblendet |
151
- |`>90%`| Desktop | keine weitere Änderung |
152
- || Tablet | Navigation verschwindet ganz |
153
- || Mobil | Navigation verschwindet ganz |
133
+ | Scrollposition | Viewport | Beschreibung |
134
+ | :------------- | :------------- | :------------------------------------------------------ |
135
+ | `>0%` | alle Viewports | Brand-Navigation wird ausgeblendet |
136
+ | `>50%` | Desktop | Section-Navigation wird ausgeblendet & Logo verkleinert |
137
+ | | Tablet | Logo wird verkleinert |
138
+ | | Mobil | Logo wird verkleinert & ServiceList wird ausgeblendet |
139
+ | `>90%` | Desktop | keine weitere Änderung |
140
+ | | Tablet | Navigation verschwindet ganz |
141
+ | | Mobil | Navigation verschwindet ganz |
154
142
 
155
143
  <br />
156
144
 
157
145
  **Desktop >0%:**
146
+
158
147
  <img src="/images/navi_scroll_50percent.png" />
159
148
 
160
149
  **Desktop >50%:**
150
+
161
151
  <img src="/images/navi_scroll_90percent.png" />
152
+
162
153
  <br />
163
154
 
164
- ***
155
+ ---
156
+
157
+ **Tablet > 0% / \< 50%:**
165
158
 
166
- **Tablet > 0% / < 50%:**
167
159
  <img src="/images/navi_tablet_scroll_1percent.PNG" />
160
+
168
161
  <br />
169
162
 
170
- **Tablet > 50% / < 90%:**
163
+ **Tablet > 50% / \< 90%:**
164
+
171
165
  <img src="/images/navi_tablet_scroll_50percent.PNG" />
166
+
172
167
  <br />
173
168
 
174
- ***
169
+ ---
170
+
171
+ **Mobil >0% / \< 50%:**
175
172
 
176
- **Mobil >0% / < 50%:**
177
173
  <img src="/images/navi_mobil_scroll_1percent.png" />
174
+
178
175
  <br />
179
176
 
180
- **Mobil >50% / < 90%:**
177
+ **Mobil >50% / \< 90%:**
178
+
181
179
  <img src="/images/navi_mobil_scroll_50percent.PNG" />
180
+
182
181
  <br />
183
182
 
184
- ***
183
+ ---
185
184
 
186
185
  <br />
186
+
187
187
  <a href="#top">Back to top</a>
188
+
188
189
  <a name="templates" />
189
190
 
190
191
  ### Template & Codes
191
192
 
192
- Im Haupt-Template **header.hbs** wird für den umschließenden Hauptcontainer mittels der Alpine-Direktive **"x-data"** der Kontext auf das Data-Objekt **"mainNavigationHandler()"** gesetzt und beim erstmaligen Initialisieren die Unter-Funktion **"init()"** aufgerufen. Durch den angegebenen Kontext stehen innerhalb der Navigation nun alle Unterfunktionen von mainNavigationHandler() bereit. Hier finden sich neben der "init()"-Funktion z.B. auch alle Hilfsfunktionen, die zur Ermittlung der Scrollposition bzw. der Sichtbarkeit der jeweiligen Elemente benötig werden.
193
+ Im Haupt-Template **header.hbs** wird für den umschließenden Hauptcontainer mittels der Alpine-Direktive **"x-data"** der Kontext auf das Data-Objekt **"mainNavigationHandler()"** gesetzt und beim erstmaligen Initialisieren die Unter-Funktion **"init()"** aufgerufen. Durch den angegebenen Kontext stehen innerhalb der Navigation nun alle Unterfunktionen von mainNavigationHandler() bereit. Hier finden sich neben der "init()"-Funktion z.B. auch alle Hilfsfunktionen, die zur Ermittlung der Scrollposition bzw. der Sichtbarkeit der jeweiligen Elemente benötig werden.
193
194
 
194
195
  ```html
195
- <div class="sb-main-navigation" x-data="mainNavigationHandler()" x-init="init()">
196
+ <div class="sb-main-navigation" x-data="mainNavigationHandler()" x-init="init()"></div>
196
197
  ```
197
198
 
198
199
  Innerhalb von "init()" werden die Listener und deren Handler für das Scrollen via Scrollrad oder Mouse- bzw. Touch-Aktionen definiert:
@@ -209,8 +210,8 @@ init(){
209
210
  window.userScroll = true;
210
211
  }
211
212
  const clickedOnScrollbar = mouseX => {
212
- return document.documentElement.offsetWidth <= mouseX ? true : false;
213
- }
213
+ return document.documentElement.offsetWidth <= mouseX ? true : false;
214
+ }
214
215
  const mouseDownHandler = e => {
215
216
  clickedOnScrollbar(e.clientX) ? mouseEvent() : null
216
217
  };
@@ -229,18 +230,19 @@ init(){
229
230
  }
230
231
  ```
231
232
 
232
- *Beispielhaft wird hier eine der weiteren Hilfsfunktionen aus dem mainNavigationHandler() erklärt:*
233
+ _Beispielhaft wird hier eine der weiteren Hilfsfunktionen aus dem mainNavigationHandler() erklärt:_
233
234
 
234
- Innerhalb des serviceNavWrappers wird mit Alpine die Function "shouldServiceNavBeHidden()" zum Setzen der korrekten CSS-Klassen via Ternary Expression verwendet: Wenn shouldServiceNavBeHidden() den Wert '_true_' zurückgibt, wird die CSS-Klasse "-mt-40" gesetzt, welche den Wrapper mit einem negativen Margin von -10rem aus dem Viewport schiebt:
235
+ Innerhalb des serviceNavWrappers wird mit Alpine die Function "shouldServiceNavBeHidden()" zum Setzen der korrekten CSS-Klassen via Ternary Expression verwendet: Wenn shouldServiceNavBeHidden() den Wert '_true_' zurückgibt, wird die CSS-Klasse "-mt-40" gesetzt, welche den Wrapper mit einem negativen Margin von -10rem aus dem Viewport schiebt:
235
236
 
236
237
  **header.hbs:**
237
238
 
238
239
  ```html
239
- <div id="serviceNavWrapper"
240
- :class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
240
+ <div id="serviceNavWrapper"
241
+ :class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
241
242
  ```
242
- WENN _percent > 90_ ist, der _Viewport NICHT Desktop_ ist, die _Scrollrichtung nach unten_ ist und es _kein offenes Burger-Menu_ gibt, sendet die Funktion *true* als Rückgabewert zurück. Wenn die Seite _via JS_ (z.B. durch einen Ankerlink) gescrollt wird, verstecke die ServiceNavigation unter den gleichen Bedingungen, aber _unabhängig von der Scrollrichtung_:
243
-
243
+
244
+ WENN _percent > 90_ ist, der _Viewport NICHT Desktop_ ist, die _Scrollrichtung nach unten_ ist und es _kein offenes Burger-Menu_ gibt, sendet die Funktion _true_ als Rückgabewert zurück. Wenn die Seite _via JS_ (z.B. durch einen Ankerlink) gescrollt wird, verstecke die ServiceNavigation unter den gleichen Bedingungen, aber _unabhängig von der Scrollrichtung_:
245
+
244
246
  **header_alpine.js:**
245
247
 
246
248
  ```js
@@ -251,147 +253,211 @@ shouldServiceNavBeHidden() {
251
253
  return (this.percent > 90 && !this.$screen('lg') && this.$store.burgeropen == false)
252
254
  }
253
255
  }
254
- ```
255
-
256
+ ```
256
257
 
257
- ***
258
+ ---
258
259
 
259
- Weiterhin sind in der Datei **header_alpine.js** weitere Alpine.data-Kontexte für das Overlay, die Dropdown-Menus und die Flyouts hinterlegt.
260
- Für die Erklärung können die Kommentare direkt in der Datei herangezogen werden.
260
+ Weiterhin sind in der Datei **header_alpine.js** weitere Alpine.data-Kontexte für das Overlay, die Dropdown-Menus und die Flyouts hinterlegt.
261
+ Für die Erklärung können die Kommentare direkt in der Datei herangezogen werden.
261
262
 
262
263
  <a href="#top">Back to top</a>
264
+
263
265
  <br />
266
+
264
267
  <a name="subkomponenten" />
265
268
 
266
269
  ### Sub-Komponenten
270
+
267
271
  <br />
268
272
 
269
- <b>Anchor Navigation</b>
273
+ <b>Anchor Navigation</b>
274
+
270
275
  <br />
271
276
 
272
277
  **anchor_navigation.hbs** Inkludiert folgende Subkomponenten:
273
278
 
274
- * featurebox_anchor.hbs
279
+ - featurebox_anchor.hbs
275
280
 
276
281
  In dieser (nicht sichtbaren) Sub-Komponente werden Anchorlinks zu den Teilbereichen der Navigation bereitgestellt, um sie für Screen-Reader direkt erreichbar zu machen.
277
282
 
278
283
  **header.hbs:**
284
+
279
285
  ```html
280
- <div id="anchorNavWrapper" class="hidden">
281
- {{> components/site_header/anchor_navigation}}
282
- </div>
283
- ```
286
+ <div id="anchorNavWrapper" class="hidden">{{> components/site_header/anchor_navigation}}</div>
287
+ ```
288
+
289
+ ---
284
290
 
285
- ***
291
+ <br />
286
292
 
287
- <br/>
288
293
  <b>Brand Navigation</b>
294
+
289
295
  <br />
290
296
 
291
297
  **brand_navigation.hbs** inkludiert folgende Subkomponenten:
292
298
 
293
- * brand_navigation_item
299
+ - brand_navigation_item
294
300
 
295
- Die Brand-Navigation stellt im obersten Bereich des Headers direkte Links zu den einzelnen Angeboten des HR zur Verfügung.
301
+ Die Brand-Navigation stellt im obersten Bereich des Headers direkte Links zu den einzelnen Angeboten des HR zur Verfügung.
296
302
 
297
- ```html
298
- <div id="brandNavWrapper" class="relative flex items-center justify-center order-1 w-full bg-white z-10000 print:hidden">
299
- {{> components/site_header/brand_navigation/brand_navigation }}
303
+ ```html
304
+ <div
305
+ id="brandNavWrapper"
306
+ class="relative flex items-center justify-center order-1 w-full bg-white z-10000 print:hidden"
307
+ >
308
+ {{> components/site_header/brand_navigation/brand_navigation }}
300
309
  </div>
301
310
  ```
302
311
 
303
- ***
312
+ ---
304
313
 
305
314
  <br />
315
+
306
316
  <b>Service Navigation</b>
317
+
307
318
  <br />
308
319
 
309
320
  **service_navigation.hbs** inkludiert folgende Subkomponenten:
310
321
 
311
- * service_logo.hbs
312
- * service_list.hbs
313
- * service_navigation_item.hbs
314
- * navigation_flyout.hbs
315
- * navigation_search.hbs
316
- * burger.hbs
317
- <br />
322
+ - service_logo.hbs
323
+ - service_list.hbs
324
+ - service_navigation_item.hbs
325
+ - navigation_flyout.hbs
326
+ - navigation_search.hbs
327
+ - burger.hbs
328
+ <br />
318
329
 
319
- Die Service-Navigation beinhaltet das Logo **(service_logo.hbs)**, die Service-List **(service_list.hbs)** und die Suchfunktion **(navigation_search.hbs)**, sowie bei mobilen Viewports das Burger-Menu **(burger.hbs)**, welches die mobile Variante der **SectionNavigation** darstellt.<br />
320
- Die gesamte ServiceNavigation liegt innerhalb des **"serviceNavWrapper"**. Bei mobilem Viewport wird dieser Wrapper beim Scrollen der Seite mit Hilfe der Funktion **"shouldServiceNavBeHidden()"** ein- bzw. ausgeblendet.
330
+ Die Service-Navigation beinhaltet das Logo **(service_logo.hbs)**, die Service-List **(service_list.hbs)** und die Suchfunktion **(navigation_search.hbs)**, sowie bei mobilen Viewports das Burger-Menu **(burger.hbs)**, welches die mobile Variante der **SectionNavigation** darstellt.<br />
331
+ Die gesamte ServiceNavigation liegt innerhalb des **"serviceNavWrapper"**. Bei mobilem Viewport wird dieser Wrapper beim Scrollen der Seite mit Hilfe der Funktion **"shouldServiceNavBeHidden()"** ein- bzw. ausgeblendet.
321
332
 
322
- Innerhalb des Hauptwrappers liegt der **"serviceNavMainContainer"** welcher die serviceNavHeadline, einen Wrapper für das Logo sowie den **"serviceItemsWrapper"** beinhaltet. In diesem wiederum liegt die Service-List **(service_list.hbs)** , die Komponente für die Suchfunktion **(navigation_search.hbs)** sowie für mobil/Tablet das Burger-Menu **(burger.hbs)**.
333
+ Innerhalb des Hauptwrappers liegt der **"serviceNavMainContainer"** welcher die serviceNavHeadline, einen Wrapper für das Logo sowie den **"serviceItemsWrapper"** beinhaltet. In diesem wiederum liegt die Service-List **(service_list.hbs)** , die Komponente für die Suchfunktion **(navigation_search.hbs)** sowie für mobil/Tablet das Burger-Menu **(burger.hbs)**.
323
334
 
324
335
  **header.hbs:**
325
336
 
326
- ```html
327
- <div id="serviceNavWrapper" :class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
328
- class="relative flex justify-center order-2 w-full transition-all duration-500 ease-in-out md:border-white lg:border-b bg-blue-congress z-10002">
329
- <div id="serviceNavMainContainer" class="flex w-full h-10 lg:container md:h-12 lg:px-10 lg:h-16 z-10001">
330
- <span id="serviceNavHeadline" class="hidden print:hidden">Service Navigation</span>
331
- <div id="serviceLogoWrapper" class="flex items-center order-1 w-full pl-4 pr-2 tablet:pl-5 lg:items-end lg:pb-3 bg-blue-congress md:px-0 md:h-12 lg:h-16 md:w-1/2 md:max-w-1/2 lg:w-1/4 lg:max-w-1/4">
332
- {{> components/site_header/service_logo }}
337
+ ```html
338
+ <div
339
+ id="serviceNavWrapper"
340
+ :class="shouldServiceNavBeHidden() ? '-mt-40' : ''"
341
+ class="relative flex justify-center order-2 w-full transition-all duration-500 ease-in-out md:border-white lg:border-b bg-blue-congress z-10002"
342
+ >
343
+ <div
344
+ id="serviceNavMainContainer"
345
+ class="flex w-full h-10 lg:container md:h-12 lg:px-10 lg:h-16 z-10001"
346
+ >
347
+ <span id="serviceNavHeadline" class="hidden print:hidden">Service Navigation</span>
348
+ <div
349
+ id="serviceLogoWrapper"
350
+ class="flex items-center order-1 w-full pl-4 pr-2 tablet:pl-5 lg:items-end lg:pb-3 bg-blue-congress md:px-0 md:h-12 lg:h-16 md:w-1/2 md:max-w-1/2 lg:w-1/4 lg:max-w-1/4"
351
+ >
352
+ {{> components/site_header/service_logo }}
353
+ </div>
354
+ <div
355
+ id="serviceItemsWrapper"
356
+ class="flex items-center justify-end flex-initial order-2 inline-block w-full max-w-full align-top bg-blue-congress md:h-12 lg:h-16 lg:order-2 lg:w-3/4 lg:max-w-3/4 md:mt-0 md:w-1/2 md:max-w-1/2 md:order-2 md:border-0 print:hidden "
357
+ >
358
+ {{> components/site_header/service_navigation/service_list }} {{>
359
+ components/site_header/navigation_search/quick_search_button }}
360
+
361
+ <div class="hidden lg:flex">
362
+ {{> components/site_header/navigation_search/quick_search_form }}
333
363
  </div>
334
- <div id="serviceItemsWrapper" class="flex items-center justify-end flex-initial order-2 inline-block w-full max-w-full align-top bg-blue-congress md:h-12 lg:h-16 lg:order-2 lg:w-3/4 lg:max-w-3/4 md:mt-0 md:w-1/2 md:max-w-1/2 md:order-2 md:border-0 print:hidden ">
335
-
336
- {{> components/site_header/service_navigation/service_list }}
337
- {{> components/site_header/navigation_search/quick_search_button }}
338
-
339
- <div class="hidden lg:flex">
340
- {{> components/site_header/navigation_search/quick_search_form }}
341
- </div>
342
- <div id="burgerWrapper" class="flex justify-end flex-none order-2 lg:order-4 md:order-4 lg:hidden ">
343
- {{> components/site_header/burger }}
344
- </div>
364
+ <div
365
+ id="burgerWrapper"
366
+ class="flex justify-end flex-none order-2 lg:order-4 md:order-4 lg:hidden "
367
+ >
368
+ {{> components/site_header/burger }}
345
369
  </div>
346
370
  </div>
347
- </div>
371
+ </div>
372
+ </div>
348
373
  ```
349
374
 
350
- Innerhalb der Service-List Komponente **(service_list.hbs)** befinden sich die Service-Navigation-Items. Ein Click auf ein Item öffnet entweder direkt eine Zielseite oder ein Flyout mit Links zu den Unterseiten des jeweiligen Strukturknotens/Bereichs oder externen Zielen. Standard-Items sind "Video/Podcast", "Verkehr" und "Wetter". Bei Unwetterwarnungen wird zusätzlich ein "Warnung"-Item angezeigt.
351
- Innerhalb der Service-List können mittels der Funktion **"shouldServiceIconsBeHidden()"** je nach Scrollposition die Service-Icons ausgeblendet werden.
375
+ Innerhalb der Service-List Komponente **(service_list.hbs)** befinden sich die Service-Navigation-Items. Ein Click auf ein Item öffnet entweder direkt eine Zielseite oder ein Flyout mit Links zu den Unterseiten des jeweiligen Strukturknotens/Bereichs oder externen Zielen. Standard-Items sind "Video/Podcast", "Verkehr" und "Wetter". Bei Unwetterwarnungen wird zusätzlich ein "Warnung"-Item angezeigt.
376
+ Innerhalb der Service-List können mittels der Funktion **"shouldServiceIconsBeHidden()"** je nach Scrollposition die Service-Icons ausgeblendet werden.
377
+
352
378
  <br />
379
+
353
380
  Service-Navigation Flyout Desktop:
354
- <br /><br />
381
+
382
+ <br />
383
+
384
+ <br />
385
+
355
386
  <img src="/images/navi_flyout_service.png" />
387
+
356
388
  <br />
357
389
 
358
- ***
390
+ ---
359
391
 
360
392
  <br />
393
+
361
394
  <br />
395
+
362
396
  Service-Navigation Flyout Tablet/Mobil:
363
- <br /><br />
397
+
398
+ <br />
399
+
400
+ <br />
401
+
364
402
  <img src="/images/navi_tablet_flyout_service.png" />
403
+
365
404
  <br />
405
+
366
406
  <br />
407
+
367
408
  <a href="#top">Back to top</a>
409
+
368
410
  <br />
369
411
 
370
- ***
412
+ ---
413
+
371
414
  <br />
415
+
372
416
  <b>Section Navigation</b>
373
417
 
374
418
  **section_navigation.hbs** inkludiert folgende Subkomponenten:
375
419
 
376
- * section_navigation_item.hbs
377
- * navigation_flyout.hbs
420
+ - section_navigation_item.hbs
421
+ - navigation_flyout.hbs
378
422
 
379
423
  <br />
380
- Die Section-Navigation stellt die Links zu den einzelnen Themenbereichen der Hessenschau bereit. Die Navigation-Items der Section Navigation können je nach Einstellung vom CMS direkt zur Themen-Indexseite verlinken oder ihrerseits ein Flyout öffnen, über dessen Einträge dann Themenbereiche angesteuert werden können:
424
+
425
+ Die Section-Navigation stellt die Links zu den einzelnen Themenbereichen der Hessenschau bereit. Die
426
+ Navigation-Items der Section Navigation können je nach Einstellung vom CMS direkt zur Themen-Indexseite
427
+ verlinken oder ihrerseits ein Flyout öffnen, über dessen Einträge dann Themenbereiche angesteuert werden
428
+ können:
429
+
381
430
  <br />
431
+
382
432
  <br />
433
+
383
434
  Section-Navigation Flyout Desktop:
435
+
384
436
  <br />
437
+
385
438
  <br />
439
+
386
440
  <img src="/images/navi_flyout_section.png" />
387
- <br /><br />
388
- Bei den Viewports "mobil" und "tablet" wird die Section-Navigation in Form eines Burger-Menus dargstellt:
441
+
389
442
  <br />
443
+
444
+ <br />
445
+
446
+ Bei den Viewports "mobil" und "tablet" wird die Section-Navigation in Form eines Burger-Menus
447
+ dargstellt:
448
+
449
+ <br />
450
+
390
451
  <br />
452
+
391
453
  <img src="/images/navi_mobil_burger_open.png" />
392
- <br /><br />
393
454
 
394
- ***
455
+ <br />
456
+
457
+ <br />{' '}
458
+
459
+ ---
395
460
 
396
461
  <br />
397
- <a href="#top">Back to top</a>
462
+
463
+ <a href="#top">Back to top</a>
@@ -0,0 +1,62 @@
1
+ import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'
2
+ import navigation from './header.hbs'
3
+ import brandnav from './brand_navigation/brand_navigation.hbs'
4
+ import JsonData from './fixtures/site_header_default.json'
5
+ import JsonData2 from './fixtures/site_header_mit_warnung.json'
6
+ import JsonData3 from './fixtures/site_header_mit_submenu.json'
7
+ import JsonDataTopTopics from './fixtures/site_header_mit_top_topics.json'
8
+
9
+ const Template = (args, { globals: { customConditionalToolbar } }) => {
10
+ // You can either use a function to create DOM elements or use a plain html string!
11
+ // return `<div>${label}</div>`;
12
+ let brand =
13
+ undefined !== customConditionalToolbar ? customConditionalToolbar['brands'] : 'hessenschau'
14
+ return navigation({ brand, ...args })
15
+ }
16
+
17
+ export default {
18
+ title: 'Komponenten/Header/Header',
19
+ argTypes: {},
20
+
21
+ parameters: {
22
+ chromatic: {
23
+ viewports: [360, 768, 1024],
24
+ },
25
+
26
+ layout: 'fullscreen',
27
+
28
+ docs: {
29
+ inlineStories: false,
30
+ iframeHeight: 240,
31
+ },
32
+
33
+ viewport: {
34
+ viewports: INITIAL_VIEWPORTS,
35
+ },
36
+ },
37
+ }
38
+
39
+ export const Default = {
40
+ render: Template.bind({}),
41
+ name: 'Default',
42
+ args: JsonData,
43
+ parameters: {},
44
+ }
45
+
46
+ export const MitWarnung = {
47
+ render: Template.bind({}),
48
+ name: 'Mit Warnung',
49
+ args: JsonData2,
50
+ }
51
+
52
+ export const MitSubnavigation = {
53
+ render: Template.bind({}),
54
+ name: 'Mit Subnavigation',
55
+ args: JsonData3,
56
+ }
57
+
58
+ export const MitTopTopics = {
59
+ render: Template.bind({}),
60
+ name: 'Mit Top Topics',
61
+ args: JsonDataTopTopics,
62
+ }