@orangesk/orange-design-system 2.0.0-beta.18 → 2.0.0-beta.19

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 (45) hide show
  1. package/build/components/Accordion/style.css +1 -1
  2. package/build/components/Accordion/style.css.map +1 -1
  3. package/build/components/AnchorNavigation/style.css +1 -1
  4. package/build/components/AnchorNavigation/style.css.map +1 -1
  5. package/build/components/Megamenu/style.css +1 -1
  6. package/build/components/Megamenu/style.css.map +1 -1
  7. package/build/components/index.js +1 -23
  8. package/build/components/index.js.map +1 -1
  9. package/build/components/tsconfig.tsbuildinfo +1 -1
  10. package/build/components/types/index.d.ts +2 -2
  11. package/build/components/types/src/components/Accordion/Accordion.d.ts +2 -2
  12. package/build/components/types/src/components/Accordion/Accordion.static.d.ts +1 -0
  13. package/build/components/types/src/components/Carousel/Carousel.static.d.ts +38 -18
  14. package/build/lib/components.css +1 -1
  15. package/build/lib/components.css.map +1 -1
  16. package/build/lib/megamenu.css +1 -1
  17. package/build/lib/megamenu.css.map +1 -1
  18. package/build/lib/megamenu.js +1 -1
  19. package/build/lib/megamenu.js.map +1 -1
  20. package/build/lib/scripts.js +1 -9
  21. package/build/lib/scripts.js.map +1 -1
  22. package/build/lib/style.css +1 -1
  23. package/build/lib/style.css.map +1 -1
  24. package/build/lib/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +1 -1
  26. package/src/components/Accordion/Accordion.static.ts +36 -30
  27. package/src/components/Accordion/Accordion.tsx +4 -4
  28. package/src/components/Accordion/AccordionHeader.tsx +0 -10
  29. package/src/components/Accordion/styles/mixins.scss +0 -6
  30. package/src/components/Accordion/styles/style.scss +2 -2
  31. package/src/components/Accordion/tests/Accordion.unit.test.js +12 -26
  32. package/src/components/AnchorNavigation/AnchorNavigation.static.ts +0 -1
  33. package/src/components/AnchorNavigation/styles/mixins.scss +4 -0
  34. package/src/components/Carousel/Carousel.static.ts +177 -91
  35. package/src/components/Carousel/tests/Carousel.static.test.js +213 -0
  36. package/src/components/Carousel/tests/Carousel.unit.test.js +58 -0
  37. package/src/components/Expander/Expander.static.ts +11 -12
  38. package/src/components/Footer/Footer.tsx +1 -1
  39. package/src/components/Footer/tests/Footer.conformance.test.js +4 -4
  40. package/src/components/Footer/tests/Footer.unit.test.js +4 -4
  41. package/src/components/Megamenu/Megamenu.tsx +71 -55
  42. package/src/components/Megamenu/MegamenuBlog.tsx +3 -6
  43. package/src/components/Megamenu/static.ts +0 -9
  44. package/src/components/Megamenu/styles/mixins.scss +1 -1
  45. package/src/components/PromoBanner/PromoBanner.tsx +2 -0
@@ -13,9 +13,15 @@ jest.mock("swiper", () => ({
13
13
  destroy: jest.fn(),
14
14
  update: jest.fn(),
15
15
  on: jest.fn(),
16
+ enable: jest.fn(),
17
+ disable: jest.fn(),
16
18
  activeIndex: 0,
17
19
  isBeginning: true,
18
20
  isEnd: false,
21
+ slides: [{}, {}, {}],
22
+ params: {
23
+ slidesPerView: 1,
24
+ },
19
25
  })),
20
26
  }));
21
27
 
@@ -44,9 +50,15 @@ describe("Carousel Static - External Controls", () => {
44
50
  destroy: jest.fn(),
45
51
  update: jest.fn(),
46
52
  on: jest.fn(),
53
+ enable: jest.fn(),
54
+ disable: jest.fn(),
47
55
  activeIndex: 0,
48
56
  isBeginning: true,
49
57
  isEnd: false,
58
+ slides: [{}, {}, {}],
59
+ params: {
60
+ slidesPerView: 1,
61
+ },
50
62
  };
51
63
 
52
64
  Swiper.mockImplementation(() => mockSwiperInstance);
@@ -189,6 +201,7 @@ describe("Carousel Static - External Controls", () => {
189
201
  it("should disable next button when at end", () => {
190
202
  mockSwiperInstance.isBeginning = false;
191
203
  mockSwiperInstance.isEnd = true;
204
+ mockSwiperInstance.activeIndex = 2; // Set to last slide so activeIndex + slidesPerView >= slidesCount
192
205
 
193
206
  carouselInstance.updateExternalControlsState();
194
207
 
@@ -401,3 +414,203 @@ describe("Carousel Static - External Controls", () => {
401
414
  });
402
415
  });
403
416
  });
417
+
418
+ describe("Carousel Static - Auto-Disable Feature", () => {
419
+ let carouselElement;
420
+ let carouselInstance;
421
+ let mockSwiperInstance;
422
+
423
+ beforeEach(() => {
424
+ jest.clearAllMocks();
425
+
426
+ // Create mock Swiper instance with slides array
427
+ mockSwiperInstance = {
428
+ slideNext: jest.fn(),
429
+ slidePrev: jest.fn(),
430
+ destroy: jest.fn(),
431
+ update: jest.fn(),
432
+ on: jest.fn(),
433
+ enable: jest.fn(),
434
+ disable: jest.fn(),
435
+ activeIndex: 0,
436
+ isBeginning: true,
437
+ isEnd: false,
438
+ slides: [], // Will be populated in tests
439
+ params: {
440
+ slidesPerView: 1.2,
441
+ },
442
+ };
443
+
444
+ Swiper.mockImplementation(() => mockSwiperInstance);
445
+
446
+ document.body.innerHTML = `
447
+ <div class="carousel" data-carousel-id="test-carousel" id="test-carousel">
448
+ <div class="carousel__viewport">
449
+ <div class="carousel__track">
450
+ <div class="carousel__slide">Slide 1</div>
451
+ <div class="carousel__slide">Slide 2</div>
452
+ <div class="carousel__slide">Slide 3</div>
453
+ </div>
454
+ </div>
455
+ <div class="carousel__pagination"></div>
456
+ </div>
457
+ `;
458
+
459
+ carouselElement = document.querySelector(".carousel");
460
+ global.requestAnimationFrame = jest.fn((cb) => cb());
461
+ });
462
+
463
+ afterEach(() => {
464
+ document.body.innerHTML = "";
465
+ global.requestAnimationFrame = undefined;
466
+ });
467
+
468
+ describe("Auto-disable when content fits", () => {
469
+ it("should enable carousel when more slides than slidesPerView", () => {
470
+ // 3 slides, slidesPerView 1.2
471
+ mockSwiperInstance.slides = [
472
+ document.createElement("div"),
473
+ document.createElement("div"),
474
+ document.createElement("div"),
475
+ ];
476
+ mockSwiperInstance.params.slidesPerView = 1.2;
477
+
478
+ carouselInstance = new Carousel(carouselElement);
479
+
480
+ expect(mockSwiperInstance.enable).toHaveBeenCalled();
481
+ });
482
+
483
+ it("should disable carousel when slides match slidesPerView", () => {
484
+ // 2 slides, slidesPerView 2
485
+ mockSwiperInstance.slides = [
486
+ document.createElement("div"),
487
+ document.createElement("div"),
488
+ ];
489
+ mockSwiperInstance.params.slidesPerView = 2;
490
+
491
+ carouselInstance = new Carousel(carouselElement);
492
+
493
+ expect(mockSwiperInstance.disable).toHaveBeenCalled();
494
+ });
495
+
496
+ it("should disable carousel when slides less than slidesPerView", () => {
497
+ // 1 slide, slidesPerView 3
498
+ mockSwiperInstance.slides = [document.createElement("div")];
499
+ mockSwiperInstance.params.slidesPerView = 3;
500
+
501
+ carouselInstance = new Carousel(carouselElement);
502
+
503
+ expect(mockSwiperInstance.disable).toHaveBeenCalled();
504
+ });
505
+
506
+ it("should enable carousel when slides exceed slidesPerView by more than 1", () => {
507
+ // 5 slides, slidesPerView 2
508
+ mockSwiperInstance.slides = [
509
+ document.createElement("div"),
510
+ document.createElement("div"),
511
+ document.createElement("div"),
512
+ document.createElement("div"),
513
+ document.createElement("div"),
514
+ ];
515
+ mockSwiperInstance.params.slidesPerView = 2;
516
+
517
+ carouselInstance = new Carousel(carouselElement);
518
+
519
+ expect(mockSwiperInstance.enable).toHaveBeenCalled();
520
+ });
521
+ });
522
+
523
+ describe("Update state on resize/breakpoint change", () => {
524
+ it("should update carousel enabled state on resize event", () => {
525
+ mockSwiperInstance.slides = [
526
+ document.createElement("div"),
527
+ document.createElement("div"),
528
+ ];
529
+ mockSwiperInstance.params.slidesPerView = 2;
530
+
531
+ carouselInstance = new Carousel(carouselElement);
532
+
533
+ // Clear previous calls
534
+ mockSwiperInstance.disable.mockClear();
535
+ mockSwiperInstance.enable.mockClear();
536
+
537
+ // Simulate resize event with different breakpoint
538
+ mockSwiperInstance.slides = [
539
+ document.createElement("div"),
540
+ document.createElement("div"),
541
+ document.createElement("div"),
542
+ document.createElement("div"),
543
+ ];
544
+ mockSwiperInstance.params.slidesPerView = 3;
545
+
546
+ // Get the resize callback
547
+ const resizeCallback = mockSwiperInstance.on.mock.calls.find(
548
+ (call) => call[0] === "resize",
549
+ );
550
+ if (resizeCallback) {
551
+ resizeCallback[1]();
552
+ expect(mockSwiperInstance.enable).toHaveBeenCalled();
553
+ }
554
+ });
555
+
556
+ it("should handle resize with decimal slidesPerView", () => {
557
+ mockSwiperInstance.slides = [
558
+ document.createElement("div"),
559
+ document.createElement("div"),
560
+ document.createElement("div"),
561
+ document.createElement("div"),
562
+ ];
563
+ mockSwiperInstance.params.slidesPerView = 2.5;
564
+
565
+ carouselInstance = new Carousel(carouselElement);
566
+
567
+ // 4 slides > 2.5, should be enabled
568
+ expect(mockSwiperInstance.enable).toHaveBeenCalled();
569
+ });
570
+ });
571
+
572
+ describe("Edge cases for auto-disable", () => {
573
+ it("should handle carousel with no slides", () => {
574
+ mockSwiperInstance.slides = [];
575
+ mockSwiperInstance.params.slidesPerView = 1;
576
+
577
+ carouselInstance = new Carousel(carouselElement);
578
+
579
+ expect(mockSwiperInstance.disable).toHaveBeenCalled();
580
+ });
581
+
582
+ it("should handle slidesPerView as string number", () => {
583
+ mockSwiperInstance.slides = [
584
+ document.createElement("div"),
585
+ document.createElement("div"),
586
+ ];
587
+ mockSwiperInstance.params.slidesPerView = "2";
588
+
589
+ carouselInstance = new Carousel(carouselElement);
590
+
591
+ expect(mockSwiperInstance.disable).toHaveBeenCalled();
592
+ });
593
+
594
+ it("should default to slidesPerView 1 if not specified", () => {
595
+ mockSwiperInstance.slides = [
596
+ document.createElement("div"),
597
+ document.createElement("div"),
598
+ ];
599
+ mockSwiperInstance.params.slidesPerView = undefined;
600
+
601
+ carouselInstance = new Carousel(carouselElement);
602
+
603
+ // 2 slides > 1 (default), should be enabled
604
+ expect(mockSwiperInstance.enable).toHaveBeenCalled();
605
+ });
606
+
607
+ it("should not crash if updateCarouselEnabledState called without instance", () => {
608
+ carouselInstance = new Carousel(carouselElement);
609
+ carouselInstance.instance = null;
610
+
611
+ expect(() => {
612
+ carouselInstance.updateCarouselEnabledState();
613
+ }).not.toThrow();
614
+ });
615
+ });
616
+ });
@@ -272,4 +272,62 @@ describe("rendering Carousel", () => {
272
272
  expect(carousel).toHaveAttribute("data-carousel-id", "test-data-id");
273
273
  });
274
274
  });
275
+
276
+ describe("Auto-disable feature", () => {
277
+ const items = [
278
+ <p key="item1">item1</p>,
279
+ <p key="item2">item2</p>,
280
+ <p key="item3">item3</p>,
281
+ ];
282
+
283
+ it("should render carousel element with id for auto-disable feature", () => {
284
+ const { container } = render(
285
+ <Carousel id="auto-disable-test" items={items} />,
286
+ );
287
+ const carousel = container.querySelector(".carousel");
288
+ expect(carousel).toHaveAttribute("id", "auto-disable-test");
289
+ });
290
+
291
+ it("should support swiperOptions with slidesPerView for auto-disable", () => {
292
+ const swiperOptions = {
293
+ slidesPerView: 2,
294
+ breakpoints: {
295
+ 1240: {
296
+ slidesPerView: 3,
297
+ },
298
+ },
299
+ };
300
+ const { container } = render(
301
+ <Carousel items={items} swiperOptions={swiperOptions} />,
302
+ );
303
+ const carousel = container.querySelector(".carousel");
304
+ expect(carousel.getAttribute("data-swiper-options")).toContain(
305
+ "slidesPerView",
306
+ );
307
+ });
308
+
309
+ it("should work with bleedRight carousel and auto-disable", () => {
310
+ const { container } = render(
311
+ <Carousel items={items} bleedRight showScrollbar />,
312
+ );
313
+ const carousel = container.querySelector(".carousel");
314
+ expect(carousel).toHaveClass("carousel--bleed-right");
315
+ });
316
+
317
+ it("should support minimal slides for testing auto-disable", () => {
318
+ const minimalItems = [<p key="item1">item1</p>];
319
+ const { container } = render(<Carousel items={minimalItems} />);
320
+ const slides = container.getElementsByClassName("carousel__slide");
321
+ expect(slides.length).toBe(1);
322
+ });
323
+
324
+ it("should support many slides for testing auto-disable with high slidesPerView", () => {
325
+ const manyItems = Array.from({ length: 10 }, (_, i) => (
326
+ <p key={`item${i}`}>item{i}</p>
327
+ ));
328
+ const { container } = render(<Carousel items={manyItems} />);
329
+ const slides = container.getElementsByClassName("carousel__slide");
330
+ expect(slides.length).toBe(10);
331
+ });
332
+ });
275
333
  });
@@ -13,35 +13,34 @@ export default class Expander {
13
13
  }
14
14
 
15
15
  toggle() {
16
- console.log('Toggle event triggered');
17
- const summary = this.element.querySelector('summary');
18
-
16
+ const summary = this.element.querySelector("summary");
17
+
19
18
  if (!summary) {
20
19
  return;
21
20
  }
22
-
23
- const summaryText = summary.getAttribute('data-summary');
24
- const summaryOpenedText = summary.getAttribute('data-summary-opened');
21
+
22
+ const summaryText = summary.getAttribute("data-summary");
23
+ const summaryOpenedText = summary.getAttribute("data-summary-opened");
25
24
 
26
25
  summary.setAttribute(
27
- 'aria-expanded',
28
- summary.getAttribute('aria-expanded') === 'true' ? 'false' : 'true'
26
+ "aria-expanded",
27
+ summary.getAttribute("aria-expanded") === "true" ? "false" : "true",
29
28
  );
30
29
 
31
30
  if (summaryOpenedText) {
32
31
  const text =
33
- summary.getAttribute('aria-expanded') === 'true'
32
+ summary.getAttribute("aria-expanded") === "true"
34
33
  ? summaryOpenedText
35
34
  : summaryText;
36
35
 
37
36
  if (text) {
38
- summary.setAttribute('aria-label', text);
37
+ summary.setAttribute("aria-label", text);
39
38
  }
40
39
  }
41
40
  }
42
41
 
43
42
  init() {
44
- this.element.addEventListener('toggle', this.toggle);
43
+ this.element.addEventListener("toggle", this.toggle);
45
44
  }
46
45
 
47
46
  update() {
@@ -50,7 +49,7 @@ export default class Expander {
50
49
  }
51
50
 
52
51
  destroy() {
53
- this.element.removeEventListener('toggle', this.toggle);
52
+ this.element.removeEventListener("toggle", this.toggle);
54
53
  }
55
54
 
56
55
  static getInstance(el: HTMLElementWithExpander | null): Expander | null {
@@ -68,7 +68,7 @@ const Footer: React.FC<FooterProps> = ({ className, data = footerData }) => {
68
68
  <div className={CLASS_GRID}>
69
69
  {data.columns.map((column, index) => (
70
70
  <div key={`footer-column-${index}`}>
71
- <h5 className={CLASS_TITLE}>{column.title}</h5>
71
+ <p className={CLASS_TITLE}>{column.title}</p>
72
72
  <ul className={CLASS_LIST}>
73
73
  {column.links.map((link, linkIndex) => (
74
74
  <li
@@ -107,14 +107,14 @@ describe("Footer Conformance Tests", () => {
107
107
 
108
108
  describe("Semantic HTML", () => {
109
109
  it("uses proper semantic elements", () => {
110
- const { getByRole, getAllByRole } = render(<Footer />);
110
+ const { getByRole, getAllByRole, container } = render(<Footer />);
111
111
 
112
112
  // Footer should be a landmark
113
113
  expect(getByRole("contentinfo")).toBeInTheDocument();
114
114
 
115
- // Should have proper heading structure
116
- const headings = getAllByRole("heading", { level: 5 });
117
- expect(headings.length).toBe(4); // One for each column
115
+ // Should have proper column titles (now rendered as paragraphs with footer__title class)
116
+ const titles = container.querySelectorAll(".footer__title");
117
+ expect(titles.length).toBe(4); // One for each column
118
118
 
119
119
  // Should have navigation lists
120
120
  const lists = getAllByRole("list");
@@ -115,14 +115,14 @@ describe("Footer", () => {
115
115
  });
116
116
 
117
117
  it("has proper semantic structure", () => {
118
- const { getByRole, getAllByRole } = render(<Footer />);
118
+ const { getByRole, getAllByRole, container } = render(<Footer />);
119
119
 
120
120
  // Should have footer landmark
121
121
  expect(getByRole("contentinfo")).toBeInTheDocument();
122
122
 
123
- // Should have headings for each column
124
- const headings = getAllByRole("heading", { level: 5 });
125
- expect(headings).toHaveLength(4); // 4 columns
123
+ // Should have column titles (now rendered as paragraphs with footer__title class)
124
+ const titles = container.querySelectorAll(".footer__title");
125
+ expect(titles).toHaveLength(4); // 4 columns
126
126
 
127
127
  // Should have lists for navigation
128
128
  const lists = getAllByRole("list");
@@ -81,12 +81,9 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
81
81
  data-hide-when-sticky="true"
82
82
  >
83
83
  <div className={CLASS_CONTAINER}>
84
- <h2 id="top-menu-title" className="sr-only">
85
- Top menu
86
- </h2>
87
84
  <ul
88
85
  className={cx(CLASS_NAV, CLASS_NAV_SPACE_SMALL)}
89
- aria-labelledby="top-menu-title"
86
+ aria-label="Top menu"
90
87
  >
91
88
  <li className={CLASS_NAV_ITEM}>
92
89
  <a
@@ -123,10 +120,7 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
123
120
 
124
121
  <div className={CLASS_MAIN}>
125
122
  <div className={CLASS_CONTAINER}>
126
- <h2 id="menu-title" className="sr-only">
127
- Hlavné menu
128
- </h2>
129
- <ul className={CLASS_NAV} aria-labelledby="menu-title">
123
+ <ul className={CLASS_NAV} aria-label="Hlavné menu">
130
124
  <li className={cx(CLASS_NAV_ITEM, CLASS_NAV_ITEM_MAIN)}>
131
125
  <a
132
126
  href="#"
@@ -199,62 +193,75 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
199
193
  </div>
200
194
 
201
195
  <div className={CLASS_CARD}>
202
- <h3 id="pausaly-heading">Paušály</h3>
196
+ <p id="pausaly-heading" className={CLASS_TEXT_LARGE}>
197
+ Internet
198
+ </p>
203
199
  <ul
204
200
  className={CLASS_SUBNAV}
205
201
  role="group"
206
202
  aria-labelledby="pausaly-heading"
207
203
  >
208
204
  <li className={CLASS_SUBNAV_ITEM}>
209
- <a href="#">Prehľad paušálov</a>
205
+ <a href="#">Prehľad internetu</a>
210
206
  </li>
211
207
  <li className={CLASS_SUBNAV_ITEM}>
212
- <a href="#">Chcem nové číslo</a>
208
+ <a href="#">Mobilný internet</a>
213
209
  </li>
214
210
  <li className={CLASS_SUBNAV_ITEM}>
215
- <a href="#">Yoxo paušál</a>{" "}
216
- <span
217
- className={cx(
218
- CLASS_TAG,
219
- CLASS_TAG_ORANGE,
220
- CLASS_TAG_SMALL,
221
- )}
222
- >
223
- Novinka
224
- </span>
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>
225
215
  </li>
226
216
  </ul>
227
217
 
228
- <h3 id="volania-s-kreditom-heading">
229
- Volania s kreditom
230
- </h3>
218
+ <p
219
+ id="volania-s-kreditom-heading"
220
+ className={CLASS_TEXT_LARGE}
221
+ >
222
+ Televízia
223
+ </p>
231
224
  <ul
232
225
  className={CLASS_SUBNAV}
233
226
  role="group"
234
227
  aria-labelledby="volania-s-kreditom-heading"
235
228
  >
236
229
  <li className={CLASS_SUBNAV_ITEM}>
237
- <a href="#">Prima Voľba</a>
230
+ <a href="#">Najlepšia TV na doma</a>
231
+ </li>
232
+ <li className={CLASS_SUBNAV_ITEM}>
233
+ <a href="#">TV cez satelit</a>
238
234
  </li>
239
235
  <li className={CLASS_SUBNAV_ITEM}>
240
- <a href="#">Prima Kids</a>
236
+ <a href="#">TV cez internet</a>
241
237
  </li>
242
238
  <li className={CLASS_SUBNAV_ITEM}>
243
- <a href="#">FunFón</a>
239
+ <a href="#">Novinky na Orange TV</a>
244
240
  </li>
245
241
  </ul>
246
242
 
247
- <h3 id="zahranicie-heading">Zahraničie</h3>
243
+ <p id="zahranicie-heading" className={CLASS_TEXT_LARGE}>
244
+ Internet + televízia
245
+ </p>
248
246
  <ul
249
247
  className={CLASS_SUBNAV}
250
248
  role="group"
251
249
  aria-labelledby="zahranicie-heading"
252
250
  >
253
251
  <li className={CLASS_SUBNAV_ITEM}>
254
- <a href="#">Roaming</a>
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>
255
262
  </li>
256
263
  <li className={CLASS_SUBNAV_ITEM}>
257
- <a href="#">Cestovateľské balíky</a>
264
+ <a href="#">Výhodný pár zariadení</a>
258
265
  </li>
259
266
  <li className={CLASS_SUBNAV_ITEM}>
260
267
  <a href="#">Volania do zahraničia</a>
@@ -266,36 +273,29 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
266
273
  </div>
267
274
 
268
275
  <div className={CLASS_CARD}>
269
- <h3 id="nase-sluzby-heading">Ste náš zákazník?</h3>
276
+ <p
277
+ id="nase-sluzby-heading"
278
+ className={CLASS_TEXT_LARGE}
279
+ >
280
+ Ste náš zákazník?
281
+ </p>
270
282
  <ul
271
283
  className={CLASS_SUBNAV}
272
284
  role="group"
273
285
  aria-labelledby="nase-sluzby-heading"
274
286
  >
275
- <li className={CLASS_SUBNAV_ITEM}>
276
- <a href="#">Chcem zmeniť paušál</a>
277
- </li>
278
- <li className={CLASS_SUBNAV_ITEM}>
279
- <a href="#">Dobiť kredit</a>
280
- </li>
281
287
  <li className={CLASS_SUBNAV_ITEM}>
282
288
  <a href="#">Predĺžiť služby</a>
283
289
  </li>
284
290
  <li className={CLASS_SUBNAV_ITEM}>
285
- <a href="#">Chcem nový telefón</a>
291
+ <a href="#">Nový internet</a>
286
292
  </li>
287
293
  <li className={CLASS_SUBNAV_ITEM}>
288
- <a href="#">Navzájom zadarmo</a>
289
- </li>
290
- <li className={CLASS_SUBNAV_ITEM}>
291
- <a href="#">Orange Svojim</a>
294
+ <a href="#">Nová televízia</a>
292
295
  </li>
293
296
  <li className={CLASS_SUBNAV_ITEM}>
294
297
  <a href="#">Odporučte Orange</a>
295
298
  </li>
296
- <li className={CLASS_SUBNAV_ITEM}>
297
- <a href="#">Ostatné služby</a>
298
- </li>
299
299
  </ul>
300
300
  </div>
301
301
  </div>
@@ -394,10 +394,10 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
394
394
  CLASS_INPUT,
395
395
  CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER,
396
396
  )}
397
- id="search-1"
397
+ id="megamenu-search-input"
398
398
  type="text"
399
399
  placeholder="Search"
400
- name="search-1"
400
+ name="search"
401
401
  defaultValue={searchEmpty ? "" : "apple"}
402
402
  />
403
403
  {searchEmpty ? (
@@ -558,10 +558,10 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
558
558
  CLASS_INPUT,
559
559
  CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER,
560
560
  )}
561
- id="search-1"
561
+ id="megamenu-mobile-search-input"
562
562
  type="text"
563
563
  placeholder="Search"
564
- name="search-1"
564
+ name="search"
565
565
  />
566
566
  <ul className={cx(CLASS_SUBNAV, "hide")}>
567
567
  <li className={CLASS_SUBNAV_ITEM}>
@@ -647,7 +647,12 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
647
647
  </ul>
648
648
  </div>
649
649
  <div>
650
- <h3 id="mobile-internet-heading">Internet</h3>
650
+ <p
651
+ id="mobile-internet-heading"
652
+ className={CLASS_TEXT_LARGE}
653
+ >
654
+ Internet
655
+ </p>
651
656
  <ul
652
657
  className={CLASS_SUBNAV}
653
658
  role="group"
@@ -667,7 +672,12 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
667
672
  </li>
668
673
  </ul>
669
674
 
670
- <h3 id="mobile-tv-heading">Televízia</h3>
675
+ <p
676
+ id="mobile-tv-heading"
677
+ className={CLASS_TEXT_LARGE}
678
+ >
679
+ Televízia
680
+ </p>
671
681
  <ul
672
682
  className={CLASS_SUBNAV}
673
683
  role="group"
@@ -687,9 +697,12 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
687
697
  </li>
688
698
  </ul>
689
699
 
690
- <h3 id="mobile-internet-tv-heading">
700
+ <p
701
+ id="mobile-internet-tv-heading"
702
+ className={CLASS_TEXT_LARGE}
703
+ >
691
704
  Internet + televízia
692
- </h3>
705
+ </p>
693
706
  <ul
694
707
  className={CLASS_SUBNAV}
695
708
  role="group"
@@ -718,9 +731,12 @@ export const Megamenu = ({ className, searchEmpty }: MegamenuProps) => {
718
731
  </li>
719
732
  </ul>
720
733
 
721
- <h3 id="mobile-customer-heading">
734
+ <p
735
+ id="mobile-customer-heading"
736
+ className={CLASS_TEXT_LARGE}
737
+ >
722
738
  Ste náš zákazník?
723
- </h3>
739
+ </p>
724
740
  <ul
725
741
  className={CLASS_SUBNAV}
726
742
  role="group"