@orangesk/orange-design-system 2.0.0-beta.30 → 2.0.0-beta.32

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 (82) hide show
  1. package/README.md +7 -7
  2. package/build/appstore.svg +31 -0
  3. package/build/components/Breadcrumbs/style.css +1 -1
  4. package/build/components/Breadcrumbs/style.css.map +1 -1
  5. package/build/components/Carousel/style.css +1 -1
  6. package/build/components/Carousel/style.css.map +1 -1
  7. package/build/components/Footer/style.css +1 -1
  8. package/build/components/Footer/style.css.map +1 -1
  9. package/build/components/Megamenu/style.css +1 -1
  10. package/build/components/Megamenu/style.css.map +1 -1
  11. package/build/components/Preview/style.css +1 -1
  12. package/build/components/Preview/style.css.map +1 -1
  13. package/build/components/PromoBanner/style.css +1 -1
  14. package/build/components/PromoBanner/style.css.map +1 -1
  15. package/build/components/index.js +1 -1
  16. package/build/components/index.js.map +1 -1
  17. package/build/components/tsconfig.tsbuildinfo +1 -1
  18. package/build/components/types/index.d.ts +17 -2
  19. package/build/components/types/src/components/Carousel/Carousel.static.d.ts +1 -11
  20. package/build/components/types/src/components/Footer/Footer.static.d.ts +21 -0
  21. package/build/components/types/src/components/Footer/constants.d.ts +12 -2
  22. package/build/components/types/src/components/Footer/data.d.ts +5 -0
  23. package/build/components/types/src/components/Footer/static.d.ts +21 -0
  24. package/build/components/types/src/components/Megamenu/Megamenu.d.ts +4 -2
  25. package/build/components/types/src/components/Megamenu/Megamenu.static.d.ts +16 -5
  26. package/build/components/types/src/components/Megamenu/MegamenuBlog.d.ts +1 -1
  27. package/build/components/types/src/components/Megamenu/MegamenuSearchContent.d.ts +10 -0
  28. package/build/components/types/src/components/Megamenu/MyOrangeMobilePanel.d.ts +6 -0
  29. package/build/components/types/src/components/Megamenu/constants.d.ts +15 -0
  30. package/build/components/types/src/components/Megamenu/data.d.ts +21 -0
  31. package/build/components/types/src/components/Megamenu/ids.d.ts +11 -0
  32. package/build/components/types/src/components/PromoBanner/PromoBanner.d.ts +5 -1
  33. package/build/components/types/src/components/index.d.ts +2 -1
  34. package/build/googleplay.svg +52 -0
  35. package/build/lib/base.css.map +1 -1
  36. package/build/lib/components.css +1 -1
  37. package/build/lib/components.css.map +1 -1
  38. package/build/lib/footer.css +1 -1
  39. package/build/lib/footer.css.map +1 -1
  40. package/build/lib/footer.js +2 -0
  41. package/build/lib/footer.js.map +1 -0
  42. package/build/lib/megamenu.css +1 -1
  43. package/build/lib/megamenu.css.map +1 -1
  44. package/build/lib/megamenu.js +1 -1
  45. package/build/lib/megamenu.js.map +1 -1
  46. package/build/lib/scripts.js +1 -1
  47. package/build/lib/scripts.js.map +1 -1
  48. package/build/lib/style.css +1 -1
  49. package/build/lib/style.css.map +1 -1
  50. package/build/lib/tsconfig.tsbuildinfo +1 -1
  51. package/build/lib/utilities.css +1 -1
  52. package/build/lib/utilities.css.map +1 -1
  53. package/build/search-index.json +8 -4
  54. package/package.json +12 -12
  55. package/src/components/Breadcrumbs/styles/mixins.scss +6 -1
  56. package/src/components/Carousel/Carousel.static.ts +60 -89
  57. package/src/components/Carousel/styles/mixins.scss +4 -12
  58. package/src/components/Footer/Footer.static.ts +130 -0
  59. package/src/components/Footer/Footer.tsx +142 -62
  60. package/src/components/Footer/constants.ts +12 -2
  61. package/src/components/Footer/data.ts +13 -0
  62. package/src/components/Footer/static.ts +59 -0
  63. package/src/components/Footer/styles/mixins.scss +122 -18
  64. package/src/components/Footer/styles/style.scss +63 -4
  65. package/src/components/Footer/tests/Footer.unit.test.js +2 -2
  66. package/src/components/Megamenu/Megamenu.static.ts +200 -90
  67. package/src/components/Megamenu/Megamenu.tsx +363 -615
  68. package/src/components/Megamenu/MegamenuBlog.tsx +192 -73
  69. package/src/components/Megamenu/MegamenuSearchContent.tsx +74 -0
  70. package/src/components/Megamenu/MyOrangeMobilePanel.tsx +127 -0
  71. package/src/components/Megamenu/constants.ts +15 -0
  72. package/src/components/Megamenu/data.ts +231 -0
  73. package/src/components/Megamenu/ids.ts +35 -0
  74. package/src/components/Megamenu/styles/mixins.scss +223 -16
  75. package/src/components/Megamenu/styles/style.scss +64 -0
  76. package/src/components/Preview/styles/style.scss +2 -1
  77. package/src/components/PromoBanner/PromoBanner.tsx +12 -1
  78. package/src/components/PromoBanner/styles/mixins.scss +31 -7
  79. package/src/components/PromoBanner/styles/style.scss +41 -0
  80. package/src/components/PromoBanner/tests/PromoBanner.unit.test.js +44 -0
  81. package/src/components/index.ts +3 -0
  82. package/src/styles/utilities/horizontal-scroll.scss +28 -11
@@ -1,6 +1,9 @@
1
1
  import cx from "classnames";
2
2
 
3
3
  import { MegamenuIcon } from "./MegaMenuIcon";
4
+ import { MyOrangeMobilePanel } from "./MyOrangeMobilePanel";
5
+ import { MegamenuSearchContent } from "./MegamenuSearchContent";
6
+ import { getMegamenuIds } from "./ids";
4
7
  import {
5
8
  CLASS_CONTAINER,
6
9
  CLASS_GRID,
@@ -13,14 +16,18 @@ import {
13
16
  CLASS_NAV_DROPDOWN,
14
17
  CLASS_NAV_ICON,
15
18
  CLASS_NAV_ITEM,
19
+ CLASS_NAV_ITEM_LEAD,
16
20
  CLASS_NAV_ITEM_MAIN,
17
21
  CLASS_NAV_LINK,
22
+ CLASS_NAV_LINK_LOCALE,
23
+ CLASS_NAV_MOBILE_LOCALE,
18
24
  CLASS_NAV_LOGO,
19
25
  CLASS_NAV_SPACER,
20
26
  CLASS_ROOT,
21
27
  CLASS_SUBNAV,
22
28
  CLASS_SUBNAV_ITEM,
23
29
  CLASS_TEXT_LARGE,
30
+ CLASS_CAPTION,
24
31
  CLASS_TOP,
25
32
  CLASS_MOBILE,
26
33
  CLASS_MOBILE_OVERLAY,
@@ -37,42 +44,135 @@ import {
37
44
  CLASS_ACCORDION_ICON,
38
45
  CLASS_ACCORDION_BODY,
39
46
  CLASS_CARD,
40
- CLASS_INPUT,
41
- CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER,
42
47
  CLASS_NAV_SPACE_SMALL,
43
48
  CLASS_NAV_CART_ICON,
44
49
  CLASS_SPACER,
45
50
  CLASS_TAG,
46
51
  CLASS_TAG_ORANGE,
47
52
  CLASS_TAG_SMALL,
48
- CLASS_LIST_INLINE,
49
53
  } from "./constants";
50
-
51
- export const list = [
52
- "Dobitie kreditu",
53
- "Nedostupnosť služieb",
54
- "Faktúry",
55
- "Zdieľanie dát",
56
- "Prečerpané dáta",
57
- "Elektronická faktúra",
58
- "Prvá pomoc internet",
59
- "Nastavenie zariadení a sim kariet",
60
- "Pevny internet do domacnosti",
61
- "Dátový roaming",
62
- "Nákup online",
63
- "Telemarketing",
64
- ];
54
+ import React from "react";
55
+ import { MenuItem, MenuSection, menuSections } from "./data";
65
56
 
66
57
  export type MegamenuProps = {
67
58
  className?: string;
59
+ title?: string;
60
+ isSticky?: boolean;
68
61
  searchEmpty?: boolean;
62
+ searchFilled?: boolean;
69
63
  };
70
64
 
71
- export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
65
+ const renderMenuItems = (items: MenuItem[]) => (
66
+ <>
67
+ {items.map((item) => (
68
+ <li className={CLASS_SUBNAV_ITEM} key={item.label}>
69
+ <a
70
+ href={item.href ?? "#"}
71
+ className={item.isLarge ? CLASS_TEXT_LARGE : undefined}
72
+ >
73
+ {item.label}
74
+ </a>
75
+ {item.tag ? (
76
+ <span className={cx(CLASS_TAG, CLASS_TAG_ORANGE, CLASS_TAG_SMALL)}>
77
+ {item.tag}
78
+ </span>
79
+ ) : null}
80
+ </li>
81
+ ))}
82
+ </>
83
+ );
84
+
85
+ const renderMenuSectionGrid = (
86
+ section: MenuSection,
87
+ idPrefix: string,
88
+ captionClass: string,
89
+ mergeColumnsToSingleCard = false,
90
+ ) => {
91
+ const featuredHeadingId = `${idPrefix}-${section.id}-${section.featured.id}`;
92
+
93
+ return (
94
+ <div className={CLASS_GRID}>
95
+ <div className={cx(CLASS_CARD, "is-highlighted")}>
96
+ <h3 id={featuredHeadingId} className="sr-only">
97
+ {section.featured.heading}
98
+ </h3>
99
+ <ul
100
+ className={CLASS_SUBNAV}
101
+ role="group"
102
+ aria-labelledby={featuredHeadingId}
103
+ >
104
+ {renderMenuItems(section.featured.items)}
105
+ </ul>
106
+ </div>
107
+
108
+ {mergeColumnsToSingleCard ? (
109
+ <div className={CLASS_CARD}>
110
+ {section.columns.flat().map((group) => {
111
+ const headingId = `${idPrefix}-${section.id}-${group.id}-heading`;
112
+
113
+ return (
114
+ <React.Fragment key={group.id}>
115
+ <p id={headingId} className={captionClass}>
116
+ {group.heading}
117
+ </p>
118
+ <ul
119
+ className={CLASS_SUBNAV}
120
+ role="group"
121
+ aria-labelledby={headingId}
122
+ >
123
+ {renderMenuItems(group.items)}
124
+ </ul>
125
+ </React.Fragment>
126
+ );
127
+ })}
128
+ </div>
129
+ ) : (
130
+ section.columns.map((groups, columnIndex) => (
131
+ <div className={CLASS_CARD} key={`${section.id}-${columnIndex}`}>
132
+ {groups.map((group) => {
133
+ const headingId = `${idPrefix}-${section.id}-${group.id}-heading`;
134
+
135
+ return (
136
+ <React.Fragment key={group.id}>
137
+ <p id={headingId} className={captionClass}>
138
+ {group.heading}
139
+ </p>
140
+ <ul
141
+ className={CLASS_SUBNAV}
142
+ role="group"
143
+ aria-labelledby={headingId}
144
+ >
145
+ {renderMenuItems(group.items)}
146
+ </ul>
147
+ </React.Fragment>
148
+ );
149
+ })}
150
+ </div>
151
+ ))
152
+ )}
153
+ </div>
154
+ );
155
+ };
156
+
157
+ export const Megamenu = ({
158
+ className,
159
+ title = "Človek",
160
+ isSticky = true,
161
+ searchEmpty,
162
+ searchFilled,
163
+ }: MegamenuProps) => {
164
+ const ids = getMegamenuIds("main");
165
+ const hasSearchEmpty = Boolean(searchEmpty);
166
+ const hasSearchFilled = Boolean(searchFilled);
167
+ const showSearchState = hasSearchEmpty || hasSearchFilled;
168
+ const searchValue = hasSearchEmpty ? "" : hasSearchFilled ? "apple" : "";
169
+
72
170
  return (
73
171
  <header>
74
172
  <nav
75
- className={cx(CLASS_ROOT, className)}
173
+ className={cx(CLASS_ROOT, className, {
174
+ "is-sticky": isSticky,
175
+ })}
76
176
  data-megamenu
77
177
  aria-label="Main navigation"
78
178
  >
@@ -102,7 +202,7 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
102
202
 
103
203
  <li className={CLASS_NAV_SPACER} aria-hidden="true"></li>
104
204
 
105
- <li className={CLASS_NAV_ITEM}>
205
+ <li className={cx(CLASS_NAV_ITEM, CLASS_NAV_ITEM_LEAD)}>
106
206
  <a href="#" className={CLASS_NAV_LINK}>
107
207
  <MegamenuIcon
108
208
  name="call"
@@ -114,6 +214,16 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
114
214
  Kontakt
115
215
  </a>
116
216
  </li>
217
+ <li className={CLASS_NAV_ITEM}>
218
+ <a href="#" className={cx(CLASS_NAV_LINK, "is-active")}>
219
+ SK
220
+ </a>
221
+ </li>
222
+ <li className={CLASS_NAV_ITEM}>
223
+ <a href="#" className={CLASS_NAV_LINK}>
224
+ EN
225
+ </a>
226
+ </li>
117
227
  </ul>
118
228
  </div>
119
229
  </div>
@@ -125,7 +235,7 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
125
235
  <a
126
236
  href="#"
127
237
  className={CLASS_NAV_LOGO}
128
- aria-label="Domovská stránka"
238
+ aria-label={`${title} - Domovská stránka`}
129
239
  >
130
240
  <svg
131
241
  viewBox="0 0 40 40"
@@ -141,210 +251,38 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
141
251
  </svg>
142
252
  </a>
143
253
  </li>
144
- <li
145
- className={cx(
146
- CLASS_NAV_ITEM,
147
- CLASS_NAV_ITEM_MAIN,
148
- CLASS_HIDE_MD_DOWN,
149
- )}
150
- >
151
- <button
152
- type="button"
153
- className={cx(CLASS_NAV_BUTTON, CLASS_NAV_BUTTON_INDICATOR)}
154
- aria-controls="megamenu-volania"
155
- aria-expanded="false"
156
- aria-haspopup="true"
254
+ {menuSections.map((section) => (
255
+ <li
256
+ key={section.id}
257
+ className={cx(
258
+ CLASS_NAV_ITEM,
259
+ CLASS_NAV_ITEM_MAIN,
260
+ CLASS_HIDE_MD_DOWN,
261
+ )}
157
262
  >
158
- Volania
159
- </button>
160
- <div className={CLASS_NAV_DROPDOWN} id="megamenu-volania">
161
- <div className={CLASS_CONTAINER}>
162
- <div className={CLASS_GRID}>
163
- <div className={cx(CLASS_CARD, "is-highlighted")}>
164
- <h3 id="featured-services" className="sr-only">
165
- Odporúčané služby
166
- </h3>
167
- <ul
168
- className={CLASS_SUBNAV}
169
- role="group"
170
- aria-labelledby="featured-services"
171
- >
172
- <li className={CLASS_SUBNAV_ITEM}>
173
- <a href="#" className={CLASS_TEXT_LARGE}>
174
- Internet na doma
175
- </a>
176
- </li>
177
- <li className={CLASS_SUBNAV_ITEM}>
178
- <a href="#" className={CLASS_TEXT_LARGE}>
179
- Mobilné paušály
180
- </a>
181
- </li>
182
- <li className={CLASS_SUBNAV_ITEM}>
183
- <a href="#" className={CLASS_TEXT_LARGE}>
184
- Televízia
185
- </a>
186
- </li>
187
- <li className={CLASS_SUBNAV_ITEM}>
188
- <a href="#" className={CLASS_TEXT_LARGE}>
189
- Internet + TV
190
- </a>
191
- </li>
192
- </ul>
193
- </div>
194
-
195
- <div className={CLASS_CARD}>
196
- <p id="pausaly-heading" className={CLASS_TEXT_LARGE}>
197
- Internet
198
- </p>
199
- <ul
200
- className={CLASS_SUBNAV}
201
- role="group"
202
- aria-labelledby="pausaly-heading"
203
- >
204
- <li className={CLASS_SUBNAV_ITEM}>
205
- <a href="#">Prehľad internetu</a>
206
- </li>
207
- <li className={CLASS_SUBNAV_ITEM}>
208
- <a href="#">Mobilný internet</a>
209
- </li>
210
- <li className={CLASS_SUBNAV_ITEM}>
211
- <a href="#">Bezpečný internet so sebou</a>
212
- </li>
213
- <li className={CLASS_SUBNAV_ITEM}>
214
- <a href="#">Domáca linka k internetu</a>
215
- </li>
216
- </ul>
217
-
218
- <p
219
- id="volania-s-kreditom-heading"
220
- className={CLASS_TEXT_LARGE}
221
- >
222
- Televízia
223
- </p>
224
- <ul
225
- className={CLASS_SUBNAV}
226
- role="group"
227
- aria-labelledby="volania-s-kreditom-heading"
228
- >
229
- <li className={CLASS_SUBNAV_ITEM}>
230
- <a href="#">Najlepšia TV na doma</a>
231
- </li>
232
- <li className={CLASS_SUBNAV_ITEM}>
233
- <a href="#">TV cez satelit</a>
234
- </li>
235
- <li className={CLASS_SUBNAV_ITEM}>
236
- <a href="#">TV cez internet</a>
237
- </li>
238
- <li className={CLASS_SUBNAV_ITEM}>
239
- <a href="#">Novinky na Orange TV</a>
240
- </li>
241
- </ul>
242
-
243
- <p id="zahranicie-heading" className={CLASS_TEXT_LARGE}>
244
- Internet + televízia
245
- </p>
246
- <ul
247
- className={CLASS_SUBNAV}
248
- role="group"
249
- aria-labelledby="zahranicie-heading"
250
- >
251
- <li className={CLASS_SUBNAV_ITEM}>
252
- <a href="#">Ponuka Love</a>{" "}
253
- <span
254
- className={cx(
255
- CLASS_TAG,
256
- CLASS_TAG_ORANGE,
257
- CLASS_TAG_SMALL,
258
- )}
259
- >
260
- Novinka
261
- </span>
262
- </li>
263
- <li className={CLASS_SUBNAV_ITEM}>
264
- <a href="#">Výhodný pár zariadení</a>
265
- </li>
266
- <li className={CLASS_SUBNAV_ITEM}>
267
- <a href="#">Volania do zahraničia</a>
268
- </li>
269
- <li className={CLASS_SUBNAV_ITEM}>
270
- <a href="#">Regulovaný roaming</a>
271
- </li>
272
- </ul>
273
- </div>
274
-
275
- <div className={CLASS_CARD}>
276
- <p
277
- id="nase-sluzby-heading"
278
- className={CLASS_TEXT_LARGE}
279
- >
280
- Ste náš zákazník?
281
- </p>
282
- <ul
283
- className={CLASS_SUBNAV}
284
- role="group"
285
- aria-labelledby="nase-sluzby-heading"
286
- >
287
- <li className={CLASS_SUBNAV_ITEM}>
288
- <a href="#">Predĺžiť služby</a>
289
- </li>
290
- <li className={CLASS_SUBNAV_ITEM}>
291
- <a href="#">Nový internet</a>
292
- </li>
293
- <li className={CLASS_SUBNAV_ITEM}>
294
- <a href="#">Nová televízia</a>
295
- </li>
296
- <li className={CLASS_SUBNAV_ITEM}>
297
- <a href="#">Odporučte Orange</a>
298
- </li>
299
- </ul>
300
- </div>
263
+ <button
264
+ type="button"
265
+ className={cx(CLASS_NAV_BUTTON, CLASS_NAV_BUTTON_INDICATOR)}
266
+ aria-controls={`megamenu-${section.id}`}
267
+ aria-expanded="false"
268
+ aria-haspopup="true"
269
+ >
270
+ {section.label}
271
+ </button>
272
+ <div
273
+ className={CLASS_NAV_DROPDOWN}
274
+ id={`megamenu-${section.id}`}
275
+ >
276
+ <div className={CLASS_CONTAINER}>
277
+ {renderMenuSectionGrid(
278
+ section,
279
+ "megamenu",
280
+ CLASS_CAPTION,
281
+ )}
301
282
  </div>
302
283
  </div>
303
- </div>
304
- </li>
305
- <li
306
- className={cx(
307
- CLASS_NAV_ITEM,
308
- CLASS_NAV_ITEM_MAIN,
309
- CLASS_HIDE_MD_DOWN,
310
- )}
311
- >
312
- <button
313
- type="button"
314
- className={cx(CLASS_NAV_BUTTON, CLASS_NAV_BUTTON_INDICATOR)}
315
- aria-controls="megamenu-internet-tv"
316
- aria-expanded="false"
317
- aria-haspopup="true"
318
- >
319
- Internet, TV
320
- </button>
321
- <div className={CLASS_NAV_DROPDOWN} id="megamenu-internet-tv">
322
- <div className={CLASS_CONTAINER}>CONTENT</div>
323
- </div>
324
- </li>
325
- <li
326
- className={cx(
327
- CLASS_NAV_ITEM,
328
- CLASS_NAV_ITEM_MAIN,
329
- CLASS_HIDE_MD_DOWN,
330
- )}
331
- >
332
- <button
333
- type="button"
334
- className={cx(CLASS_NAV_BUTTON, CLASS_NAV_BUTTON_INDICATOR)}
335
- aria-controls="megamenu-telefony-zariadenia"
336
- aria-expanded="false"
337
- aria-haspopup="true"
338
- >
339
- Telefóny a zariadenia
340
- </button>
341
- <div
342
- className={CLASS_NAV_DROPDOWN}
343
- id="megamenu-telefony-zariadenia"
344
- >
345
- <div className={CLASS_CONTAINER}>CONTENT</div>
346
- </div>
347
- </li>
284
+ </li>
285
+ ))}
348
286
  <li
349
287
  className={cx(
350
288
  CLASS_NAV_ITEM,
@@ -375,7 +313,7 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
375
313
  type="button"
376
314
  className={CLASS_NAV_BUTTON}
377
315
  aria-label="Vyhľadávanie"
378
- aria-controls="megamenu-search"
316
+ aria-controls={ids.searchDropdownId}
379
317
  aria-expanded="false"
380
318
  aria-haspopup="true"
381
319
  >
@@ -387,54 +325,19 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
387
325
  />
388
326
  </button>
389
327
 
390
- <div className={CLASS_NAV_DROPDOWN} id="megamenu-search">
328
+ <div
329
+ className={cx(CLASS_NAV_DROPDOWN, "is-spaced")}
330
+ id={ids.searchDropdownId}
331
+ >
391
332
  <div className={CLASS_CONTAINER}>
392
- <input
393
- className={cx(
394
- CLASS_INPUT,
395
- CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER,
396
- )}
397
- id="megamenu-search-input"
398
- type="text"
399
- placeholder="Search"
400
- name="search"
401
- defaultValue={searchEmpty ? "" : "apple"}
333
+ <MegamenuSearchContent
334
+ inputId={ids.searchInputDesktopId}
335
+ inputLabel="Vyhľadávanie v hlavnom menu"
336
+ searchValue={searchValue}
337
+ hasSearchEmpty={hasSearchEmpty}
338
+ hasSearchFilled={hasSearchFilled}
339
+ emptyStateLinkHref="/"
402
340
  />
403
- {searchEmpty ? (
404
- <>
405
- <p>Najhľadanejši výrazy</p>
406
- <ul className={CLASS_LIST_INLINE}>
407
- {list.map((item) => (
408
- <li key={item}>
409
- <a href="/" className={cx(CLASS_TAG)}>
410
- {item}
411
- </a>
412
- </li>
413
- ))}
414
- </ul>
415
- </>
416
- ) : (
417
- <ul className={CLASS_SUBNAV}>
418
- <li className={CLASS_SUBNAV_ITEM}>
419
- <a href="#">apple</a>
420
- </li>
421
- <li className={CLASS_SUBNAV_ITEM}>
422
- <a href="#">apple hodinky</a>
423
- </li>
424
- <li className={CLASS_SUBNAV_ITEM}>
425
- <a href="#">apple iphone</a>
426
- </li>
427
- <li className={CLASS_SUBNAV_ITEM}>
428
- <a href="#">apple 16</a>
429
- </li>
430
- <li className={CLASS_SUBNAV_ITEM}>
431
- <a href="#">apple pro</a>
432
- </li>
433
- <li className={CLASS_SUBNAV_ITEM}>
434
- <a href="#">apple watch</a>
435
- </li>
436
- </ul>
437
- )}
438
341
  </div>
439
342
  </div>
440
343
  </li>
@@ -443,7 +346,6 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
443
346
  href="#"
444
347
  className={cx(CLASS_NAV_LINK)}
445
348
  aria-label="Košík, 1 položka"
446
- aria-describedby="cart-count"
447
349
  >
448
350
  <span
449
351
  className={CLASS_NAV_CART_ICON}
@@ -457,13 +359,18 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
457
359
  aria-hidden="true"
458
360
  />
459
361
  </span>
460
- <span id="cart-count" className="sr-only">
461
- 1 položka v košíku
462
- </span>
362
+ <span className="sr-only">1 položka v košíku</span>
463
363
  </a>
464
364
  </li>
465
365
  <li className={CLASS_NAV_ITEM}>
466
- <a href="#" className={CLASS_NAV_LINK}>
366
+ <button
367
+ type="button"
368
+ className={CLASS_NAV_BUTTON}
369
+ data-megamenu-mobile-toggle
370
+ data-megamenu-mobile-target="my-orange"
371
+ aria-haspopup="dialog"
372
+ aria-expanded="false"
373
+ >
467
374
  <MegamenuIcon
468
375
  width={24}
469
376
  height={24}
@@ -472,14 +379,16 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
472
379
  aria-hidden="true"
473
380
  />
474
381
  Môj Orange
475
- </a>
382
+ </button>
476
383
  </li>
477
384
  <li className={cx(CLASS_NAV_ITEM, CLASS_HIDE_LG_UP)}>
478
385
  <button
479
386
  type="button"
480
387
  className={CLASS_NAV_BUTTON}
481
388
  aria-label="Otvoriť menu"
482
- aria-haspopup="true"
389
+ data-megamenu-mobile-toggle
390
+ data-megamenu-mobile-target="main"
391
+ aria-haspopup="dialog"
483
392
  aria-expanded="false"
484
393
  >
485
394
  <MegamenuIcon
@@ -499,11 +408,14 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
499
408
  <div
500
409
  // className={cx(CLASS_MOBILE, "is-active")}
501
410
  className={cx(CLASS_MOBILE)}
411
+ data-megamenu-mobile-panel="main"
412
+ id={ids.mobileMainPanelId}
502
413
  role="dialog"
503
414
  aria-modal="true"
504
- aria-labelledby="mobile-menu-title"
415
+ aria-labelledby={ids.mobileMainTitleId}
416
+ aria-hidden="true"
505
417
  >
506
- <h2 id="mobile-menu-title" className="sr-only">
418
+ <h2 id={ids.mobileMainTitleId} className="sr-only">
507
419
  Hlavné menu
508
420
  </h2>
509
421
  <button
@@ -537,6 +449,7 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
537
449
  <button
538
450
  type="button"
539
451
  data-megamenu-close-button
452
+ data-megamenu-mobile-target="main"
540
453
  className={CLASS_NAV_BUTTON}
541
454
  aria-label="Zatvoriť menu"
542
455
  >
@@ -553,356 +466,191 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
553
466
  </div>
554
467
  <div className={CLASS_MOBILE_BODY}>
555
468
  <div className={CLASS_CONTAINER}>
556
- <input
557
- className={cx(
558
- CLASS_INPUT,
559
- CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER,
560
- )}
561
- id="megamenu-mobile-search-input"
562
- type="text"
563
- placeholder="Search"
564
- name="search"
469
+ <MegamenuSearchContent
470
+ inputId={ids.searchInputMobileId}
471
+ inputLabel="Vyhľadávanie v mobilnom menu"
472
+ searchValue={searchValue}
473
+ hasSearchEmpty={hasSearchEmpty}
474
+ hasSearchFilled={hasSearchFilled}
565
475
  />
566
- <ul className={cx(CLASS_SUBNAV, "hide")}>
567
- <li className={CLASS_SUBNAV_ITEM}>
568
- <a href="#">apple</a>
569
- </li>
570
- <li className={CLASS_SUBNAV_ITEM}>
571
- <a href="#">apple hodinky</a>
572
- </li>
573
- <li className={CLASS_SUBNAV_ITEM}>
574
- <a href="#">apple iphone</a>
575
- </li>
576
- <li className={CLASS_SUBNAV_ITEM}>
577
- <a href="#">apple 16</a>
578
- </li>
579
- <li className={CLASS_SUBNAV_ITEM}>
580
- <a href="#">apple pro</a>
581
- </li>
582
- <li className={CLASS_SUBNAV_ITEM}>
583
- <a href="#">apple watch</a>
584
- </li>
585
- </ul>
586
476
 
587
- <ul className={CLASS_ACCORDION}>
588
- <li className={CLASS_ACCORDION_ITEM}>
589
- <div className={CLASS_ACCORDION_HEADER}>
590
- <button
591
- type="button"
592
- className={CLASS_ACCORDION_BUTTON}
593
- aria-controls="mobile-accordion-volania"
594
- aria-expanded="false"
595
- data-accordion-toggle
596
- id="mobile-volania-button"
597
- >
598
- <span className={CLASS_ACCORDION_TITLE}>Volania</span>
599
- <MegamenuIcon
600
- name="chevron-right"
601
- width={24}
602
- height={24}
603
- className={CLASS_ACCORDION_ICON}
604
- aria-hidden="true"
605
- />
606
- </button>
607
- </div>
608
- <div
609
- className={CLASS_ACCORDION_BODY}
610
- id="mobile-accordion-volania"
611
- role="region"
612
- aria-labelledby="mobile-volania-button"
613
- >
614
- <div className={CLASS_GRID}>
615
- <div className={cx(CLASS_CARD, "is-highlighted")}>
616
- <h3
617
- id="mobile-volania-featured-heading"
618
- className="sr-only"
619
- >
620
- Odporúčané služby
621
- </h3>
622
- <ul
623
- className={CLASS_SUBNAV}
624
- role="group"
625
- aria-labelledby="mobile-volania-featured-heading"
626
- >
627
- <li className={CLASS_SUBNAV_ITEM}>
628
- <a href="#" className={CLASS_TEXT_LARGE}>
629
- Internet na doma
630
- </a>
631
- </li>
632
- <li className={CLASS_SUBNAV_ITEM}>
633
- <a href="#" className={CLASS_TEXT_LARGE}>
634
- Mobilný internet
635
- </a>
636
- </li>
637
- <li className={CLASS_SUBNAV_ITEM}>
638
- <a href="#" className={CLASS_TEXT_LARGE}>
639
- Televízia
640
- </a>
641
- </li>
642
- <li className={CLASS_SUBNAV_ITEM}>
643
- <a href="#" className={CLASS_TEXT_LARGE}>
644
- Internet + TV
645
- </a>
646
- </li>
647
- </ul>
648
- </div>
649
- <div>
650
- <p
651
- id="mobile-internet-heading"
652
- className={CLASS_TEXT_LARGE}
653
- >
654
- Internet
655
- </p>
656
- <ul
657
- className={CLASS_SUBNAV}
658
- role="group"
659
- aria-labelledby="mobile-internet-heading"
660
- >
661
- <li className={CLASS_SUBNAV_ITEM}>
662
- <a href="#">Prehľad internetu</a>
663
- </li>
664
- <li className={CLASS_SUBNAV_ITEM}>
665
- <a href="#">Mobilný internet</a>
666
- </li>
667
- <li className={CLASS_SUBNAV_ITEM}>
668
- <a href="#">Bezpečný internet so sebou</a>
669
- </li>
670
- <li className={CLASS_SUBNAV_ITEM}>
671
- <a href="#">Domáca linka k internetu</a>
672
- </li>
673
- </ul>
674
-
675
- <p
676
- id="mobile-tv-heading"
677
- className={CLASS_TEXT_LARGE}
678
- >
679
- Televízia
680
- </p>
681
- <ul
682
- className={CLASS_SUBNAV}
683
- role="group"
684
- aria-labelledby="mobile-tv-heading"
685
- >
686
- <li className={CLASS_SUBNAV_ITEM}>
687
- <a href="#">Najlepšia TV na doma</a>
688
- </li>
689
- <li className={CLASS_SUBNAV_ITEM}>
690
- <a href="#">TV cez satelit</a>
691
- </li>
692
- <li className={CLASS_SUBNAV_ITEM}>
693
- <a href="#">TV cez internet</a>
694
- </li>
695
- <li className={CLASS_SUBNAV_ITEM}>
696
- <a href="#">Novinky na Orange TV</a>
697
- </li>
698
- </ul>
477
+ {!showSearchState ? (
478
+ <>
479
+ <ul className={CLASS_ACCORDION}>
480
+ {menuSections.map((section) => {
481
+ const accordionId = `mobile-accordion-${section.id}`;
482
+ const buttonId = `mobile-${section.id}-button`;
699
483
 
700
- <p
701
- id="mobile-internet-tv-heading"
702
- className={CLASS_TEXT_LARGE}
703
- >
704
- Internet + televízia
705
- </p>
706
- <ul
707
- className={CLASS_SUBNAV}
708
- role="group"
709
- aria-labelledby="mobile-internet-tv-heading"
710
- >
711
- <li className={CLASS_SUBNAV_ITEM}>
712
- <a href="#">Ponuka Love</a>{" "}
713
- <span
714
- className={cx(
715
- CLASS_TAG,
716
- CLASS_TAG_ORANGE,
717
- CLASS_TAG_SMALL,
718
- )}
484
+ return (
485
+ <li className={CLASS_ACCORDION_ITEM} key={section.id}>
486
+ <div className={CLASS_ACCORDION_HEADER}>
487
+ <button
488
+ type="button"
489
+ className={CLASS_ACCORDION_BUTTON}
490
+ aria-controls={accordionId}
491
+ aria-expanded="false"
492
+ data-accordion-toggle
493
+ id={buttonId}
719
494
  >
720
- Novinka
721
- </span>
722
- </li>
723
- <li className={CLASS_SUBNAV_ITEM}>
724
- <a href="#">Výhodný pár zariadení</a>
725
- </li>
726
- <li className={CLASS_SUBNAV_ITEM}>
727
- <a href="#">Volania do zahraničia</a>
728
- </li>
729
- <li className={CLASS_SUBNAV_ITEM}>
730
- <a href="#">Regulovaný roaming</a>
731
- </li>
732
- </ul>
495
+ <span className={CLASS_ACCORDION_TITLE}>
496
+ {section.label}
497
+ </span>
498
+ <MegamenuIcon
499
+ name="chevron-right"
500
+ width={24}
501
+ height={24}
502
+ className={CLASS_ACCORDION_ICON}
503
+ aria-hidden="true"
504
+ />
505
+ </button>
506
+ </div>
507
+ <div
508
+ className={CLASS_ACCORDION_BODY}
509
+ id={accordionId}
510
+ role="region"
511
+ aria-labelledby={buttonId}
512
+ >
513
+ {renderMenuSectionGrid(
514
+ section,
515
+ "mobile",
516
+ CLASS_CAPTION,
517
+ true,
518
+ )}
519
+ </div>
520
+ </li>
521
+ );
522
+ })}
733
523
 
734
- <p
735
- id="mobile-customer-heading"
736
- className={CLASS_TEXT_LARGE}
737
- >
738
- Ste náš zákazník?
739
- </p>
740
- <ul
741
- className={CLASS_SUBNAV}
742
- role="group"
743
- aria-labelledby="mobile-customer-heading"
744
- >
745
- <li className={CLASS_SUBNAV_ITEM}>
746
- <a href="#">Predĺžiť služby</a>
747
- </li>
748
- <li className={CLASS_SUBNAV_ITEM}>
749
- <a href="#">Nový internet</a>
750
- </li>
751
- <li className={CLASS_SUBNAV_ITEM}>
752
- <a href="#">Nová televízia</a>
753
- </li>
754
- <li className={CLASS_SUBNAV_ITEM}>
755
- <a href="#">Odporučte Orange</a>
756
- </li>
757
- </ul>
524
+ <li className={CLASS_ACCORDION_ITEM}>
525
+ <div className={CLASS_ACCORDION_HEADER}>
526
+ <a href="#" className={CLASS_ACCORDION_BUTTON}>
527
+ <span className={CLASS_ACCORDION_TITLE}>Akcie</span>
528
+ </a>
758
529
  </div>
759
- </div>
760
- </div>
761
- </li>
530
+ </li>
762
531
 
763
- <li className={CLASS_ACCORDION_ITEM}>
764
- <div className={CLASS_ACCORDION_HEADER}>
765
- <button
766
- type="button"
767
- className={CLASS_ACCORDION_BUTTON}
768
- aria-controls="mobile-accordion-internet-tv"
769
- aria-expanded="false"
770
- data-accordion-toggle
771
- id="mobile-internet-tv-button"
772
- >
773
- <span className={CLASS_ACCORDION_TITLE}>
774
- Internet, TV
775
- </span>
776
- <MegamenuIcon
777
- name="chevron-right"
778
- width={24}
779
- height={24}
780
- className={CLASS_ACCORDION_ICON}
781
- aria-hidden="true"
782
- />
783
- </button>
784
- </div>
785
- <div
786
- className={CLASS_ACCORDION_BODY}
787
- id="mobile-accordion-internet-tv"
788
- role="region"
789
- aria-labelledby="mobile-internet-tv-button"
790
- >
791
- CONTENT
792
- </div>
793
- </li>
532
+ <li className={CLASS_ACCORDION_ITEM}>
533
+ <div className={CLASS_ACCORDION_HEADER}>
534
+ <a href="#" className={CLASS_ACCORDION_BUTTON}>
535
+ <span className={CLASS_ACCORDION_TITLE}>Pomoc</span>
536
+ </a>
537
+ </div>
538
+ </li>
539
+ </ul>
794
540
 
795
- <li className={CLASS_ACCORDION_ITEM}>
796
- <div className={CLASS_ACCORDION_HEADER}>
797
- <button
798
- type="button"
799
- className={CLASS_ACCORDION_BUTTON}
800
- aria-controls="mobile-accordion-telefony"
801
- aria-expanded="false"
802
- data-accordion-toggle
803
- id="mobile-telefony-button"
804
- >
805
- <span className={CLASS_ACCORDION_TITLE}>
806
- Telefóny a zariadenia
807
- </span>
808
- <MegamenuIcon
809
- name="chevron-right"
810
- width={24}
811
- height={24}
812
- className={CLASS_ACCORDION_ICON}
813
- aria-hidden="true"
814
- />
815
- </button>
816
- </div>
817
- <div
818
- className={CLASS_ACCORDION_BODY}
819
- id="mobile-accordion-telefony"
820
- role="region"
821
- aria-labelledby="mobile-telefony-button"
541
+ <ul
542
+ className={cx(
543
+ CLASS_NAV,
544
+ CLASS_NAV_SPACE_SMALL,
545
+ CLASS_NAV_MOBILE_LOCALE,
546
+ )}
547
+ aria-label="Výber jazyka"
822
548
  >
823
- CONTENT
824
- </div>
825
- </li>
826
-
827
- <li className={CLASS_ACCORDION_ITEM}>
828
- <div className={CLASS_ACCORDION_HEADER}>
829
- <a href="#" className={CLASS_ACCORDION_BUTTON}>
830
- <span className={CLASS_ACCORDION_TITLE}>Akcie</span>
831
- </a>
832
- </div>
833
- </li>
834
-
835
- <li className={CLASS_ACCORDION_ITEM}>
836
- <div className={CLASS_ACCORDION_HEADER}>
837
- <a href="#" className={CLASS_ACCORDION_BUTTON}>
838
- <span className={CLASS_ACCORDION_TITLE}>Pomoc</span>
839
- </a>
840
- </div>
841
- </li>
842
- </ul>
843
-
844
- <h3 id="mobile-quick-access-heading" className="sr-only">
845
- Rýchly prístup
846
- </h3>
847
- <ul
848
- className={cx(CLASS_NAV, CLASS_NAV_VERTICAL)}
849
- role="group"
850
- aria-labelledby="mobile-quick-access-heading"
851
- >
852
- <li className={CLASS_NAV_ITEM}>
853
- <a href="#" className={CLASS_NAV_BUTTON}>
854
- <MegamenuIcon
855
- width={24}
856
- height={24}
857
- name="user"
858
- className={CLASS_NAV_ICON}
859
- aria-hidden="true"
860
- />
861
- Môj Orange
862
- </a>
863
- </li>
864
- <li className={CLASS_NAV_ITEM}>
865
- <a href="#" className={CLASS_NAV_BUTTON}>
866
- <MegamenuIcon
867
- width={24}
868
- height={24}
869
- name="call"
870
- className={CLASS_NAV_ICON}
871
- aria-hidden="true"
872
- />
873
- Kontakt
874
- </a>
875
- </li>
876
- <li className={CLASS_NAV_ITEM}>
877
- <a href="#" className={CLASS_NAV_BUTTON}>
878
- <MegamenuIcon
879
- width={24}
880
- height={24}
881
- name="advertising"
882
- className={CLASS_NAV_ICON}
883
- aria-hidden="true"
884
- />
885
- Akcie
886
- </a>
887
- </li>
888
- <li className={CLASS_NAV_ITEM}>
889
- <a href="#" className={CLASS_NAV_BUTTON}>
890
- <MegamenuIcon
891
- width={24}
892
- height={24}
893
- name="newspaper"
894
- className={CLASS_NAV_ICON}
895
- aria-hidden="true"
896
- />
897
- Pomoc
898
- </a>
899
- </li>
900
- </ul>
549
+ <li className={CLASS_NAV_ITEM}>
550
+ <a
551
+ href="#"
552
+ className={cx(
553
+ CLASS_NAV_LINK,
554
+ CLASS_NAV_LINK_LOCALE,
555
+ "is-active",
556
+ )}
557
+ >
558
+ SK
559
+ </a>
560
+ </li>
561
+ <li className={CLASS_NAV_ITEM}>
562
+ <a
563
+ href="#"
564
+ className={cx(CLASS_NAV_LINK, CLASS_NAV_LINK_LOCALE)}
565
+ >
566
+ EN
567
+ </a>
568
+ </li>
569
+ </ul>
570
+ </>
571
+ ) : null}
901
572
  </div>
573
+
574
+ {!showSearchState ? (
575
+ <>
576
+ <hr className="mt-none" />
577
+ <div className={CLASS_CONTAINER}>
578
+ <h3 id="mobile-quick-access-heading" className="sr-only">
579
+ Rýchly prístup
580
+ </h3>
581
+ <ul
582
+ className={cx(CLASS_NAV, CLASS_NAV_VERTICAL)}
583
+ role="group"
584
+ aria-labelledby="mobile-quick-access-heading"
585
+ >
586
+ <li className={CLASS_NAV_ITEM}>
587
+ <button
588
+ type="button"
589
+ className={CLASS_NAV_BUTTON}
590
+ data-megamenu-mobile-toggle
591
+ data-megamenu-mobile-target="my-orange"
592
+ aria-haspopup="dialog"
593
+ aria-expanded="false"
594
+ >
595
+ <MegamenuIcon
596
+ width={24}
597
+ height={24}
598
+ name="user"
599
+ className={CLASS_NAV_ICON}
600
+ aria-hidden="true"
601
+ />
602
+ Môj Orange
603
+ </button>
604
+ </li>
605
+ <li className={CLASS_NAV_ITEM}>
606
+ <a href="#" className={CLASS_NAV_BUTTON}>
607
+ <MegamenuIcon
608
+ width={24}
609
+ height={24}
610
+ name="call"
611
+ className={CLASS_NAV_ICON}
612
+ aria-hidden="true"
613
+ />
614
+ Kontakt
615
+ </a>
616
+ </li>
617
+ <li className={CLASS_NAV_ITEM}>
618
+ <a href="#" className={CLASS_NAV_BUTTON}>
619
+ <MegamenuIcon
620
+ width={24}
621
+ height={24}
622
+ name="advertising"
623
+ className={CLASS_NAV_ICON}
624
+ aria-hidden="true"
625
+ />
626
+ Akcie
627
+ </a>
628
+ </li>
629
+ <li className={CLASS_NAV_ITEM}>
630
+ <a href="#" className={CLASS_NAV_BUTTON}>
631
+ <MegamenuIcon
632
+ width={24}
633
+ height={24}
634
+ name="newspaper"
635
+ className={CLASS_NAV_ICON}
636
+ aria-hidden="true"
637
+ />
638
+ Pomoc
639
+ </a>
640
+ </li>
641
+ </ul>
642
+ </div>
643
+ </>
644
+ ) : null}
902
645
  </div>
903
646
  </div>
904
647
  </div>
905
648
 
649
+ <MyOrangeMobilePanel
650
+ panelId={ids.myOrangePanelId}
651
+ titleId={ids.myOrangeTitleId}
652
+ />
653
+
906
654
  <button
907
655
  aria-label="Zatvoriť dropdown menu"
908
656
  className={CLASS_OVERLAY}