@ably/ui 8.1.1 → 8.2.1-dev.ade9a3d

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 (92) hide show
  1. package/core/.DS_Store +0 -0
  2. package/core/Meganav/component.css +7 -1
  3. package/core/Meganav/component.js +1 -1
  4. package/core/Meganav/component.json +4 -4
  5. package/core/Meganav.jsx +507 -360
  6. package/core/MeganavBlogPostsList/component.js +1 -1
  7. package/core/MeganavBlogPostsList.jsx +5 -3
  8. package/core/MeganavContentCompany/component.js +1 -0
  9. package/core/MeganavContentCompany.jsx +1513 -0
  10. package/core/MeganavContentDevelopers.jsx +80 -102
  11. package/core/MeganavContentPlatform.jsx +47 -30
  12. package/core/MeganavContentUseCases.jsx +128 -36
  13. package/core/MeganavContentWhyAbly/component.js +6 -1
  14. package/core/MeganavContentWhyAbly.jsx +3 -1468
  15. package/core/MeganavControlMobilePanelClose.jsx +7 -4
  16. package/core/MeganavItemsDesktop.jsx +6 -2
  17. package/core/MeganavItemsMobile.jsx +11 -6
  18. package/core/MeganavItemsSignedIn.jsx +1 -1
  19. package/core/MeganavSearch.jsx +1 -1
  20. package/core/MeganavSearchPanel.jsx +1 -1
  21. package/core/MeganavSearchSuggestions/component.js +1 -1
  22. package/core/Notice/component.js +1 -1
  23. package/core/fonts/.DS_Store +0 -0
  24. package/core/images/.DS_Store +0 -0
  25. package/core/images/icon-tech-aws.svg +4 -0
  26. package/core/scripts.js +1 -1
  27. package/core/sprites.svg +141 -0
  28. package/core/styles.css +4 -0
  29. package/package.json +1 -1
  30. package/{src/core/MeganavContentWhyAbly/component.js → preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/log/.keep} +0 -0
  31. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/tmp/.keep +0 -0
  32. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/tmp/pids/.keep +0 -0
  33. package/src/.DS_Store +0 -0
  34. package/src/core/.DS_Store +0 -0
  35. package/src/core/Meganav/component.css +7 -1
  36. package/src/core/Meganav/component.json +4 -4
  37. package/src/core/Meganav/component.jsx +2 -2
  38. package/src/core/Meganav/component.rb +8 -4
  39. package/src/core/MeganavBlogPostsList/component.html.erb +3 -3
  40. package/src/core/MeganavBlogPostsList/component.js +2 -2
  41. package/src/core/MeganavBlogPostsList/component.jsx +3 -3
  42. package/src/core/MeganavContentCompany/component.html.erb +81 -0
  43. package/src/core/MeganavContentCompany/component.js +0 -0
  44. package/src/core/MeganavContentCompany/component.jsx +108 -0
  45. package/src/core/{MeganavContentWhyAbly → MeganavContentCompany}/component.rb +2 -1
  46. package/src/core/MeganavContentDevelopers/component.html.erb +101 -80
  47. package/src/core/MeganavContentDevelopers/component.jsx +102 -83
  48. package/src/core/MeganavContentPlatform/component.html.erb +95 -85
  49. package/src/core/MeganavContentPlatform/component.jsx +99 -92
  50. package/src/core/MeganavContentUseCases/component.html.erb +112 -83
  51. package/src/core/MeganavContentUseCases/component.jsx +114 -87
  52. package/src/core/MeganavControlMobilePanelClose/component.html.erb +4 -2
  53. package/src/core/MeganavControlMobilePanelClose/component.jsx +3 -2
  54. package/src/core/MeganavControlMobilePanelClose/component.rb +4 -1
  55. package/src/core/MeganavItemsDesktop/component.html.erb +2 -1
  56. package/src/core/MeganavItemsDesktop/component.jsx +2 -1
  57. package/src/core/MeganavItemsMobile/component.html.erb +1 -1
  58. package/src/core/MeganavItemsMobile/component.jsx +2 -1
  59. package/src/core/MeganavItemsMobile/component.rb +4 -0
  60. package/src/core/MeganavSearchPanel/component.html.erb +1 -1
  61. package/src/core/MeganavSearchPanel/component.jsx +1 -1
  62. package/src/core/MeganavSearchSuggestions/component.html.erb +2 -2
  63. package/src/core/MeganavSearchSuggestions/component.js +15 -5
  64. package/src/core/core.rb +4 -0
  65. package/src/core/fonts/.DS_Store +0 -0
  66. package/src/core/icons/icon-display-about-ably-col.svg +4 -0
  67. package/src/core/icons/icon-display-careers-col.svg +9 -0
  68. package/src/core/icons/icon-display-case-studies-col.svg +5 -0
  69. package/src/core/icons/icon-display-chat-stack-col.svg +4 -0
  70. package/src/core/icons/icon-display-chat-stack.svg +4 -0
  71. package/src/core/icons/icon-display-compare-tech-col.svg +9 -0
  72. package/src/core/icons/icon-display-customers-col.svg +15 -0
  73. package/src/core/icons/icon-display-docs-col.svg +7 -0
  74. package/src/core/icons/icon-display-lightbulb-col.svg +10 -0
  75. package/src/core/icons/icon-display-quickstart-guides-col.svg +8 -0
  76. package/src/core/icons/icon-display-resources-col.svg +21 -0
  77. package/src/core/icons/icon-display-sdks-col.svg +11 -0
  78. package/src/core/icons/icon-display-tutorials-demos-col.svg +25 -0
  79. package/src/core/icons/icon-display-virtual-events-col.svg +12 -0
  80. package/src/core/icons/icon-display-virtual-events.svg +12 -0
  81. package/src/core/images/.DS_Store +0 -0
  82. package/src/core/images/icon-tech-aws.svg +4 -0
  83. package/src/core/styles/layout.css +4 -0
  84. package/src/reset/.DS_Store +0 -0
  85. package/core/images/blog-thumb1.jpg +0 -0
  86. package/core/images/blog-thumb2.jpg +0 -0
  87. package/core/images/blog-thumb3.jpg +0 -0
  88. package/src/core/MeganavContentWhyAbly/component.html.erb +0 -70
  89. package/src/core/MeganavContentWhyAbly/component.jsx +0 -95
  90. package/src/core/images/blog-thumb1.jpg +0 -0
  91. package/src/core/images/blog-thumb2.jpg +0 -0
  92. package/src/core/images/blog-thumb3.jpg +0 -0
@@ -1,84 +1,113 @@
1
- <section class="ui-meganav-content ui-grid-gap md:grid-cols-2 gap-y-0 md:gap-y-32">
2
- <div>
3
- <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-industry-use-cases">By use case</h3>
4
- <ul aria-labelledby="meganav-use-cases-panel-industry-use-cases">
5
- <li>
6
- <%= link_to abs_url("/solutions/edtech"), class: "ui-meganav-media group" do %>
7
- <p class="ui-meganav-media-heading">EdTech</p>
8
- <p class="ui-meganav-media-copy">Deliver interactive learning experiences like multi-user classrooms with chat.</p>
9
- <% end %>
10
- </li>
11
- <li>
12
- <%= link_to abs_url("/solutions/virtual-events"), class: "ui-meganav-media group" do %>
13
- <p class="ui-meganav-media-heading">Virtual Events</p>
14
- <p class="ui-meganav-media-copy">Power engaging virtual events with interactive realtime features.</p>
15
- <% end %>
16
- </li>
17
- <li>
18
- <%= link_to abs_url("/solutions/sports-and-media"), class: "ui-meganav-media group" do %>
19
- <p class="ui-meganav-media-heading">Sports & Media</p>
20
- <p class="ui-meganav-media-copy">Deliver global realtime experiences to keep fans informed, engaged, entertained.</p>
21
- <% end %>
22
- </li>
23
- <li>
24
- <%= link_to abs_url("/solutions/fintech"), class: "ui-meganav-media group" do %>
25
- <p class="ui-meganav-media-heading">Fintech</p>
26
- <p class="ui-meganav-media-copy">Deliver fast, personalised fintech data in realtime to mobile & web customers.</p>
27
- <% end %>
28
- </li>
29
- <li>
30
- <%= link_to abs_url("/solutions/gaming"), class: "ui-meganav-media group" do %>
31
- <p class="ui-meganav-media-heading">Gaming</p>
32
- <p class="ui-meganav-media-copy">Power interactive gaming experiences that are wicked fast and utterly reliable.</p>
33
- <% end %>
34
- </li>
35
- <li>
36
- <%= link_to abs_url("/solutions/automotive-logistics-and-mobility"), class: "ui-meganav-media group" do %>
37
- <p class="ui-meganav-media-heading">Automotive, Logistics, & Mobility</p>
38
- <p class="ui-meganav-media-copy">Power asset tracking, live transit updates, race-critical diagnostics, and more.</p>
39
- <% end %>
40
- </li>
41
- </ul>
42
- </div>
1
+ <div class="flex">
2
+ <div class="ui-meganav-content-spacer bg-extra-light-grey"></div>
3
+ <section class="grid grid-cols-12 ui-grid-gap-x">
4
+ <div class="col-span-full md:col-span-4 bg-extra-light-grey py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24">
5
+ <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-use-cases">
6
+ Use cases
7
+ </h3>
8
+ <ul aria-labelledby="meganav-use-cases-panel-industry-use-cases">
9
+ <li>
10
+ <%= link_to abs_url("/solutions/chat"), class: "ui-meganav-media-with-image group" do %>
11
+ <%= render(AblyUi::Core::Icon.new(name: "icon-display-chat-stack-col", size: "2.5rem")) %>
12
+ <div class="flex flex-col justify-center">
13
+ <p class="ui-meganav-media-heading">Chat</p>
14
+ <p class="ui-meganav-media-copy">Deliver highly reliable chat experiences at scale. </p>
15
+ </div>
16
+ <% end %>
17
+ </li>
18
+ <li>
19
+ <%= link_to abs_url("/solutions/virtual-events"), class: "ui-meganav-media-with-image group" do %>
20
+ <%= render(AblyUi::Core::Icon.new(name: "icon-display-virtual-events-col", size: "2.5rem")) %>
21
+ <div class="flex flex-col justify-center">
22
+ <p class="ui-meganav-media-heading">Virtual Events</p>
23
+ <p class="ui-meganav-media-copy">Power engaging virtual events with realtime features.</p>
24
+ </div>
25
+ <% end %>
26
+ </li>
27
+ </ul>
28
+ </div>
43
29
 
44
- <div>
45
- <ul class="md:mt-40" aria-labelledby="meganav-use-cases-panel-industry-use-cases">
46
- <li>
47
- <%= link_to abs_url("/solutions/b2b-platforms"), class: "ui-meganav-media group" do %>
48
- <p class="ui-meganav-media-heading">B2B Platforms</p>
49
- <p class="ui-meganav-media-copy">Empower customers with realtime technology that gives them a competitive edge.</p>
50
- <% end %>
51
- </li>
52
- <li>
53
- <%= link_to abs_url("/solutions/healthcare"), class: "ui-meganav-media group" do %>
54
- <p class="ui-meganav-media-heading">Healthcare</p>
55
- <p class="ui-meganav-media-copy">Provide HIPAA-compliant realtime apps healthcare professionals can depend on.</p>
56
- <% end %>
57
- </li>
58
- <li>
59
- <%= link_to abs_url("/solutions/ecommerce-and-retail"), class: "ui-meganav-media group" do %>
60
- <p class="ui-meganav-media-heading">eCommerce & Retail</p>
61
- <p class="ui-meganav-media-copy">Enable realtime pricing, inventory, and transactions to enrich user experiences.</p>
62
- <% end %>
63
- </li>
64
- <li>
65
- <%= link_to abs_url("/solutions/iot-and-connected-devices"), class: "ui-meganav-media group" do %>
66
- <p class="ui-meganav-media-heading">IoT & Connected Devices</p>
67
- <p class="ui-meganav-media-copy">Monitor and control global IoT deployments of any kind in realtime.</p>
68
- <% end %>
69
- </li>
70
- <li>
71
- <%= link_to abs_url("/solutions/asset-tracking"), class: "ui-meganav-media group" do %>
72
- <p class="ui-meganav-media-heading">Asset Tracking</p>
73
- <p class="ui-meganav-media-copy">Track assets in realtime with a solution optimized for last mile logistics, food delivery applications, and urban mobility services.</p>
74
- <% end %>
75
- </li>
76
- <li>
77
- <%= link_to abs_url("/solutions/extend-kafka-to-the-edge"), class: "ui-meganav-media group" do %>
78
- <p class="ui-meganav-media-heading">Extend Kafka to the edge</p>
79
- <p class="ui-meganav-media-copy">Enhance and reliably expand Kafka&apos;s event streaming capabilities beyond your private network.</p>
80
- <% end %>
81
- </li>
82
- </ul>
83
- </div>
84
- </section>
30
+ <div class="col-span-full md:col-span-4 pt-24 pb-8 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0">
31
+ <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-industry">
32
+ Industry
33
+ </h3>
34
+ <ul aria-labelledby="meganav-use-cases-panel-industry">
35
+ <li>
36
+ <%= link_to abs_url("/solutions/edtech"), class: "ui-meganav-media group" do %>
37
+ <p class="ui-meganav-media-heading">EdTech</p>
38
+ <p class="ui-meganav-media-copy">Deliver interactive learning experiences.</p>
39
+ <% end %>
40
+ </li>
41
+ <li>
42
+ <%= link_to abs_url("/solutions/fintech"), class: "ui-meganav-media group" do %>
43
+ <p class="ui-meganav-media-heading">Fintech</p>
44
+ <p class="ui-meganav-media-copy">Deliver personalised financial data in realtime.</p>
45
+ <% end %>
46
+ </li>
47
+ <li>
48
+ <%= link_to abs_url("/solutions/automotive-logistics-and-mobility"), class: "ui-meganav-media group" do %>
49
+ <p class="ui-meganav-media-heading">Automotive, Logistics, & Mobility</p>
50
+ <p class="ui-meganav-media-copy">Power diagnostics, order tracking and more.</p>
51
+ <% end %>
52
+ </li>
53
+ <li>
54
+ <%= link_to abs_url("/solutions/b2b-platforms"), class: "ui-meganav-media group" do %>
55
+ <p class="ui-meganav-media-heading">B2B Platforms</p>
56
+ <p class="ui-meganav-media-copy">Empower your customers with realtime solutions.</p>
57
+ <% end %>
58
+ </li>
59
+ <li>
60
+ <%= link_to abs_url("/solutions/healthcare"), class: "ui-meganav-media group" do %>
61
+ <p class="ui-meganav-media-heading">Healthcare (HIPAA)</p>
62
+ <p class="ui-meganav-media-copy">Provide trustworthy, HIPAA-compliant realtime apps.</p>
63
+ <% end %>
64
+ </li>
65
+ <li>
66
+ <%= link_to abs_url("/solutions/ecommerce-and-retail"), class: "ui-meganav-media group" do %>
67
+ <p class="ui-meganav-media-heading">eCommerce & Retail</p>
68
+ <p class="ui-meganav-media-copy">Enrich customer experiences with realtime updates.</p>
69
+ <% end %>
70
+ </li>
71
+ <li>
72
+ <%= link_to abs_url("/solutions/sports-and-media"), class: "ui-meganav-media group" do %>
73
+ <p class="ui-meganav-media-heading">Sports, Media & Audience Engagement</p>
74
+ <p class="ui-meganav-media-copy">Deliver engaging global realtime experiences.</p>
75
+ <% end %>
76
+ </li>
77
+ <li>
78
+ <%= link_to abs_url("/solutions/gaming"), class: "ui-meganav-media group" do %>
79
+ <p class="ui-meganav-media-heading">Gaming</p>
80
+ <p class="ui-meganav-media-copy">Power ultra fast and reliable gaming experiences.</p>
81
+ <% end %>
82
+ </li>
83
+ <li>
84
+ <%= link_to abs_url("/solutions/iot-and-connected-devices"), class: "ui-meganav-media group" do %>
85
+ <p class="ui-meganav-media-heading">IoT & Connected Devices</p>
86
+ <p class="ui-meganav-media-copy">Monitor and control global IoT deployments in realtime.</p>
87
+ <% end %>
88
+ </li>
89
+ </ul>
90
+ </div>
91
+
92
+ <div class="col-span-full md:col-span-4 pt-8 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0">
93
+ <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-solutions">
94
+ Solutions
95
+ </h3>
96
+ <ul aria-labelledby="meganav-use-cases-panel-solutions">
97
+ <li>
98
+ <%= link_to abs_url("/solutions/extend-kafka-to-the-edge"), class: "ui-meganav-media group" do %>
99
+ <p class="ui-meganav-media-heading">Extend Kafka to the edge</p>
100
+ <p class="ui-meganav-media-copy">Reliably expand Kafka’s event streaming beyond your private network.</p>
101
+ <% end %>
102
+ </li>
103
+ <li>
104
+ <%= link_to abs_url("/solutions/asset-tracking"), class: "ui-meganav-media group" do %>
105
+ <p class="ui-meganav-media-heading">Asset Tracking</p>
106
+ <p class="ui-meganav-media-copy">Track assets in realtime with a solution optimised for last mile logistics.</p>
107
+ <% end %>
108
+ </li>
109
+ </ul>
110
+ </div>
111
+ </section>
112
+ <div class="ui-meganav-content-spacer"></div>
113
+ </div>
@@ -1,95 +1,122 @@
1
1
  import React from "react";
2
2
  import T from "prop-types";
3
3
 
4
+ import Icon from "../Icon/component.jsx";
5
+
4
6
  const MeganavContentUseCases = ({ absUrl }) => (
5
- <section className="ui-meganav-content ui-grid-gap md:grid-cols-2 gap-y-0 md:gap-y-32">
6
- <div>
7
- <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-industry-use-cases">
8
- By use case
9
- </h3>
10
- <ul aria-labelledby="meganav-use-cases-panel-industry-use-cases">
11
- <li>
12
- <a href={absUrl("/solutions/edtech")} className="ui-meganav-media group">
13
- <p className="ui-meganav-media-heading">EdTech</p>
14
- <p className="ui-meganav-media-copy">Deliver interactive learning experiences like multi-user classrooms with chat.</p>
15
- </a>
16
- </li>
17
- <li>
18
- <a href={absUrl("/solutions/virtual-events")} className="ui-meganav-media group">
19
- <p className="ui-meganav-media-heading">Virtual Events</p>
20
- <p className="ui-meganav-media-copy">Power engaging virtual events with interactive realtime features.</p>
21
- </a>
22
- </li>
23
- <li>
24
- <a href={absUrl("/solutions/sports-and-media")} className="ui-meganav-media group">
25
- <p className="ui-meganav-media-heading">Sports & Media</p>
26
- <p className="ui-meganav-media-copy">Deliver global realtime experiences to keep fans informed, engaged, entertained.</p>
27
- </a>
28
- </li>
29
- <li>
30
- <a href={absUrl("/solutions/fintech")} className="ui-meganav-media group">
31
- <p className="ui-meganav-media-heading">Fintech</p>
32
- <p className="ui-meganav-media-copy">Deliver fast, personalised fintech data in realtime to mobile & web customers.</p>
33
- </a>
34
- </li>
35
- <li>
36
- <a href={absUrl("/solutions/gaming")} className="ui-meganav-media group">
37
- <p className="ui-meganav-media-heading">Gaming</p>
38
- <p className="ui-meganav-media-copy">Power interactive gaming experiences that are wicked fast and utterly reliable.</p>
39
- </a>
40
- </li>
41
- <li>
42
- <a href={absUrl("/solutions/automotive-logistics-and-mobility")} className="ui-meganav-media group">
43
- <p className="ui-meganav-media-heading">Automotive, Logistics, & Mobility</p>
44
- <p className="ui-meganav-media-copy">Power asset tracking, live transit updates, race-critical diagnostics, and more.</p>
45
- </a>
46
- </li>
47
- </ul>
48
- </div>
7
+ <div className="flex">
8
+ <div className="ui-meganav-content-spacer bg-extra-light-grey"></div>
9
+ <section className="grid grid-cols-12 ui-grid-gap-x">
10
+ <div className="col-span-full md:col-span-4 bg-extra-light-grey py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24">
11
+ <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-use-cases">
12
+ Use cases
13
+ </h3>
14
+ <ul aria-labelledby="meganav-use-cases-panel-industry-use-cases">
15
+ <li>
16
+ <a href={absUrl("/solutions/chat")} className="ui-meganav-media-with-image group">
17
+ <Icon name="icon-display-chat-stack-col" size="2.5rem" />
18
+ <div className="flex flex-col justify-center">
19
+ <p className="ui-meganav-media-heading">Chat</p>
20
+ <p className="ui-meganav-media-copy">Deliver highly reliable chat experiences at scale. </p>
21
+ </div>
22
+ </a>
23
+ </li>
24
+ <li>
25
+ <a href={absUrl("/solutions/virtual-events")} className="ui-meganav-media-with-image group">
26
+ <Icon name="icon-display-virtual-events-col" size="2.5rem" />
27
+ <div className="flex flex-col justify-center">
28
+ <p className="ui-meganav-media-heading">Virtual Events</p>
29
+ <p className="ui-meganav-media-copy">Power engaging virtual events with realtime features.</p>
30
+ </div>
31
+ </a>
32
+ </li>
33
+ </ul>
34
+ </div>
35
+
36
+ <div className="col-span-full md:col-span-4 pt-24 pb-8 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0">
37
+ <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-industry">
38
+ Industry
39
+ </h3>
40
+ <ul aria-labelledby="meganav-use-cases-panel-industry">
41
+ <li>
42
+ <a href={absUrl("/solutions/edtech")} className="ui-meganav-media group">
43
+ <p className="ui-meganav-media-heading">EdTech</p>
44
+ <p className="ui-meganav-media-copy">Deliver interactive learning experiences.</p>
45
+ </a>
46
+ </li>
47
+ <li>
48
+ <a href={absUrl("/solutions/fintech")} className="ui-meganav-media group">
49
+ <p className="ui-meganav-media-heading">Fintech</p>
50
+ <p className="ui-meganav-media-copy">Deliver personalised financial data in realtime.</p>
51
+ </a>
52
+ </li>
53
+ <li>
54
+ <a href={absUrl("/solutions/automotive-logistics-and-mobility")} className="ui-meganav-media group">
55
+ <p className="ui-meganav-media-heading">Automotive, Logistics, & Mobility</p>
56
+ <p className="ui-meganav-media-copy">Power diagnostics, order tracking and more.</p>
57
+ </a>
58
+ </li>
59
+ <li>
60
+ <a href={absUrl("/solutions/b2b-platforms")} className="ui-meganav-media group">
61
+ <p className="ui-meganav-media-heading">B2B Platforms</p>
62
+ <p className="ui-meganav-media-copy">Empower your customers with realtime solutions.</p>
63
+ </a>
64
+ </li>
65
+ <li>
66
+ <a href={absUrl("/solutions/healthcare")} className="ui-meganav-media group">
67
+ <p className="ui-meganav-media-heading">Healthcare (HIPAA)</p>
68
+ <p className="ui-meganav-media-copy">Provide trustworthy, HIPAA-compliant realtime apps.</p>
69
+ </a>
70
+ </li>
71
+ <li>
72
+ <a href={absUrl("/solutions/ecommerce-and-retail")} className="ui-meganav-media group">
73
+ <p className="ui-meganav-media-heading">eCommerce & Retail</p>
74
+ <p className="ui-meganav-media-copy">Enrich customer experiences with realtime updates.</p>
75
+ </a>
76
+ </li>
77
+ <li>
78
+ <a href={absUrl("/solutions/sports-and-media")} className="ui-meganav-media group">
79
+ <p className="ui-meganav-media-heading">Sports, Media & Audience Engagement</p>
80
+ <p className="ui-meganav-media-copy">Deliver engaging global realtime experiences.</p>
81
+ </a>
82
+ </li>
83
+ <li>
84
+ <a href={absUrl("/solutions/gaming")} className="ui-meganav-media group">
85
+ <p className="ui-meganav-media-heading">Gaming</p>
86
+ <p className="ui-meganav-media-copy">Power ultra fast and reliable gaming experiences.</p>
87
+ </a>
88
+ </li>
89
+ <li>
90
+ <a href={absUrl("/solutions/iot-and-connected-devices")} className="ui-meganav-media group">
91
+ <p className="ui-meganav-media-heading">IoT & Connected Devices</p>
92
+ <p className="ui-meganav-media-copy">Monitor and control global IoT deployments in realtime.</p>
93
+ </a>
94
+ </li>
95
+ </ul>
96
+ </div>
49
97
 
50
- <div>
51
- <ul className="md:mt-40">
52
- <li>
53
- <a href={absUrl("/solutions/b2b-platforms")} className="ui-meganav-media group">
54
- <p className="ui-meganav-media-heading">B2B Platforms</p>
55
- <p className="ui-meganav-media-copy">Empower customers with realtime technology that gives them a competitive edge.</p>
56
- </a>
57
- </li>
58
- <li>
59
- <a href={absUrl("/solutions/healthcare")} className="ui-meganav-media group">
60
- <p className="ui-meganav-media-heading">Healthcare</p>
61
- <p className="ui-meganav-media-copy">Provide HIPAA-compliant realtime apps healthcare professionals can depend on.</p>
62
- </a>
63
- </li>
64
- <li>
65
- <a href={absUrl("/solutions/ecommerce-and-retail")} className="ui-meganav-media group">
66
- <p className="ui-meganav-media-heading">eCommerce & Retail</p>
67
- <p className="ui-meganav-media-copy">Enable realtime pricing, inventory, and transactions to enrich user experiences.</p>
68
- </a>
69
- </li>
70
- <li>
71
- <a href={absUrl("/solutions/iot-and-connected-devices")} className="ui-meganav-media group">
72
- <p className="ui-meganav-media-heading">IoT & Connected Devices</p>
73
- <p className="ui-meganav-media-copy">Monitor and control global IoT deployments of any kind in realtime.</p>
74
- </a>
75
- </li>
76
- <li>
77
- <a href={absUrl("/solutions/asset-tracking")} className="ui-meganav-media group">
78
- <p className="ui-meganav-media-heading">Asset Tracking</p>
79
- <p className="ui-meganav-media-copy">
80
- Track assets in realtime with a solution optimized for last mile logistics, food delivery applications, and urban mobility services.
81
- </p>
82
- </a>
83
- </li>
84
- <li>
85
- <a href={absUrl("/solutions/extend-kafka-to-the-edge")} className="ui-meganav-media group">
86
- <p className="ui-meganav-media-heading">Extend Kafka to the edge</p>
87
- <p className="ui-meganav-media-copy">Enhance and reliably expand Kafka&apos;s event streaming capabilities beyond your private network.</p>
88
- </a>
89
- </li>
90
- </ul>
91
- </div>
92
- </section>
98
+ <div className="col-span-full md:col-span-4 pt-8 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0">
99
+ <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-solutions">
100
+ Solutions
101
+ </h3>
102
+ <ul aria-labelledby="meganav-use-cases-panel-solutions">
103
+ <li>
104
+ <a href={absUrl("/solutions/extend-kafka-to-the-edge")} className="ui-meganav-media group">
105
+ <p className="ui-meganav-media-heading">Extend Kafka to the edge</p>
106
+ <p className="ui-meganav-media-copy">Reliably expand Kafka’s event streaming beyond your private network.</p>
107
+ </a>
108
+ </li>
109
+ <li>
110
+ <a href={absUrl("/solutions/asset-tracking")} className="ui-meganav-media group">
111
+ <p className="ui-meganav-media-heading">Asset Tracking</p>
112
+ <p className="ui-meganav-media-copy">Track assets in realtime with a solution optimised for last mile logistics.</p>
113
+ </a>
114
+ </li>
115
+ </ul>
116
+ </div>
117
+ </section>
118
+ <div className="ui-meganav-content-spacer"></div>
119
+ </div>
93
120
  );
94
121
 
95
122
  MeganavContentUseCases.propTypes = {
@@ -2,9 +2,11 @@
2
2
  <%= button_tag(type: "button",
3
3
  class: "ui-meganav-mobile-link text-gui-default mb-16",
4
4
  data: { id: "meganav-control-mobile-panel-close" },
5
- aria: { expanded: false, controls: @aria_controls, label: "Hide panel" }) do -%>
5
+ aria: { expanded: false, controls: aria_controls, label: "Hide panel" }) do -%>
6
6
  <%= render(AblyUi::Core::Icon.new(name: "icon-gui-disclosure-arrow", size: "1.5rem", color: "text-cool-black", additional_css: "relative -top-1 transform rotate-180")) %>
7
7
  Back
8
8
  <% end %>
9
- <hr class="ui-meganav-hr" />
9
+ <% if display_hr %>
10
+ <hr class="ui-meganav-hr" />
11
+ <% end %>
10
12
  </div>
@@ -3,7 +3,7 @@ import T from "prop-types";
3
3
 
4
4
  import Icon from "../Icon/component.jsx";
5
5
 
6
- const MeganavControlMobilePanelClose = ({ ariaControls }) => (
6
+ const MeganavControlMobilePanelClose = ({ ariaControls, displayHr = true }) => (
7
7
  <div className="mx-24 md:mx-32">
8
8
  <button
9
9
  type="button"
@@ -16,12 +16,13 @@ const MeganavControlMobilePanelClose = ({ ariaControls }) => (
16
16
  <Icon name="icon-gui-disclosure-arrow" color="text-cool-black" size="1.5rem" additionalCSS="relative -top-1 transform rotate-180" />
17
17
  Back
18
18
  </button>
19
- <hr className="ui-meganav-hr" />
19
+ {displayHr ? <hr className="ui-meganav-hr" /> : null}
20
20
  </div>
21
21
  );
22
22
 
23
23
  MeganavControlMobilePanelClose.propTypes = {
24
24
  ariaControls: T.string,
25
+ displayHr: T.bool,
25
26
  };
26
27
 
27
28
  export default MeganavControlMobilePanelClose;
@@ -1,8 +1,11 @@
1
1
  module AblyUi
2
2
  module Core
3
3
  class MeganavControlMobilePanelClose < ViewComponent::Base
4
- def initialize(aria_controls:)
4
+ attr_reader :aria_controls, :display_hr
5
+
6
+ def initialize(aria_controls:, display_hr: true)
5
7
  @aria_controls = aria_controls
8
+ @display_hr = display_hr
6
9
  end
7
10
  end
8
11
  end
@@ -2,7 +2,8 @@
2
2
  <% panels.each do |panel| %>
3
3
  <li class="ui-meganav-item">
4
4
  <%= render(AblyUi::Core::MeganavControl.new(aria_controls: panel[:id], theme_name: @theme_name)) do %>
5
- <%= panel[:label] %>
5
+ <span class="hidden lg:inline"><%= panel[:label] %></span>
6
+ <span class="lg:hidden"><%= panel[:short_label] %></span>
6
7
  <% end %>
7
8
 
8
9
  <%= content_tag :div, class: 'ui-meganav-panel invisible', data: { id: "meganav-panel" }, id: panel[:id] do %>
@@ -12,7 +12,8 @@ const MeganavDesktopItems = ({ panels, paths, theme, absUrl }) => (
12
12
  return (
13
13
  <li className="ui-meganav-item" key={panel.id}>
14
14
  <MeganavControl theme={theme} ariaControls={panel.id}>
15
- {panel.label}
15
+ <span className="hidden lg:inline">{panel.label}</span>
16
+ <span className="lg:hidden">{panel.shortLabel}</span>
16
17
  </MeganavControl>
17
18
 
18
19
  <div className="ui-meganav-panel invisible" id={panel.id} data-id="meganav-panel">
@@ -48,7 +48,7 @@
48
48
  <% end %>
49
49
 
50
50
  <%= content_tag(:div, class: "ui-meganav-panel-mobile hidden", id: "#{panel[:id]}-mobile", data: { scroll_lock_scrollable: true }) do %>
51
- <%= render(AblyUi::Core::MeganavControlMobilePanelClose.new(aria_controls: "#{panel[:id]}-mobile")) %>
51
+ <%= render(AblyUi::Core::MeganavControlMobilePanelClose.new(aria_controls: "#{panel[:id]}-mobile", display_hr: display_hr(panel[:id]))) %>
52
52
  <%= render("AblyUi::Core::#{panel[:component]}".constantize.new(url_base: url_base)) %>
53
53
  <% end %>
54
54
  </li>
@@ -68,13 +68,14 @@ const MeganavItemsMobile = ({ panels, paths, sessionState, theme, loginLink, abs
68
68
  <ul className="mb-16" data-id="meganav-mobile-panel-controls">
69
69
  {MeganavData.panels.map((panel) => {
70
70
  const PanelComponent = panels[panel.component];
71
+ const displayHr = ["company-panel", "developers-panel"].includes(panel.id);
71
72
 
72
73
  return (
73
74
  <li className="ui-meganav-mobile-item" key={`${panel.id}-mobile`}>
74
75
  <MeganavControlMobilePanelOpen ariaControls={`${panel.id}-mobile`}>{panel.label}</MeganavControlMobilePanelOpen>
75
76
 
76
77
  <div className="ui-meganav-panel-mobile hidden" id={`${panel.id}-mobile`} data-scroll-lock-scrollable>
77
- <MeganavControlMobilePanelClose ariaControls={`${panel.id}-mobile`} />
78
+ <MeganavControlMobilePanelClose ariaControls={`${panel.id}-mobile`} displayHr={displayHr} />
78
79
  <PanelComponent paths={paths} absUrl={absUrl} />
79
80
  </div>
80
81
  </li>
@@ -12,6 +12,10 @@ module AblyUi
12
12
  @login_link = login_link
13
13
  @url_base = url_base
14
14
  end
15
+
16
+ def display_hr(panel_id)
17
+ %w[company-panel developers-panel].include?(panel_id)
18
+ end
15
19
  end
16
20
  end
17
21
  end
@@ -9,7 +9,7 @@
9
9
  <%= render(AblyUi::Core::MeganavSearchAutocomplete.new) %>
10
10
  </div>
11
11
 
12
- <button type="submit" class="ui-btn-secondary ml-8 sm:ml-16 md:ml-24 xl:ml-32">
12
+ <button type="submit" class="ui-btn-secondary flex-shrink-0 ml-8 sm:ml-16 md:ml-24 xl:ml-32">
13
13
  Search
14
14
  </button>
15
15
  <% end %>
@@ -18,7 +18,7 @@ const MeganavSearchPanel = ({ absUrl }) => {
18
18
  <MeganavSearchAutocomplete />
19
19
  </div>
20
20
 
21
- <button type="submit" className="ui-btn-secondary ml-8 sm:ml-16 md:ml-24 xl:ml-32">
21
+ <button type="submit" className="ui-btn-secondary flex-shrink-0 ml-8 sm:ml-16 md:ml-24 xl:ml-32">
22
22
  Search
23
23
  </button>
24
24
  </form>
@@ -1,7 +1,7 @@
1
1
  <p class="ui-text-overline2 text-cool-black py-12">Popular pages</p>
2
2
 
3
- <div class="flex justify-between items-center overflow-x-scroll md:overflow-auto">
4
- <ul class="flex">
3
+ <div class="flex justify-between items-center overflow-hidden">
4
+ <ul class="flex transition-transform">
5
5
  <li class="py-12 pr-8 flex-shrink-0">
6
6
  <%= link_to 'How does Ably work?', abs_url("/docs/how-ably-works"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
7
7
  </li>
@@ -18,15 +18,16 @@ const getDistance = (e, touchStartX) =>
18
18
 
19
19
  const withinBuffer = (distance) => Math.abs(distance) < DRAG_BUFFER;
20
20
 
21
+ const getItemsTotalWidth = (nodes) =>
22
+ nodes
23
+ .map((item) => item.getBoundingClientRect().width)
24
+ .reduce((acc, val) => acc + val, 0);
25
+
21
26
  const MeganavSearchSuggestions = () => {
22
27
  const suggestionsToggle = queryId("meganav-mobile-search-input");
23
28
  const suggestions = queryId("meganav-mobile-search-suggestions");
24
29
  const list = suggestions.querySelector("ul");
25
- const listItems = list.querySelectorAll("li");
26
-
27
- const itemsTotalWidth = Array.from(listItems)
28
- .map((item) => item.getBoundingClientRect().width)
29
- .reduce((acc, val) => acc + val, 0);
30
+ const listItems = Array.from(list.querySelectorAll("li"));
30
31
 
31
32
  const dragLeft = (distance, threshold) => {
32
33
  const currentTranslateX = getTranslateX(list);
@@ -50,6 +51,7 @@ const MeganavSearchSuggestions = () => {
50
51
  const listWidth = list.getBoundingClientRect().width;
51
52
  const currentTranslateX = getTranslateX(list);
52
53
  const translateX = Math.round(currentTranslateX + distance);
54
+ const itemsTotalWidth = getItemsTotalWidth(listItems);
53
55
 
54
56
  if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {
55
57
  return;
@@ -61,6 +63,7 @@ const MeganavSearchSuggestions = () => {
61
63
  const dragRightEnd = (distance, threshold) => {
62
64
  const listWidth = list.getBoundingClientRect().width;
63
65
  const currentTranslateX = getTranslateX(list);
66
+ const itemsTotalWidth = getItemsTotalWidth(listItems);
64
67
  let translateX = Math.round(currentTranslateX + distance);
65
68
 
66
69
  if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {
@@ -99,11 +102,18 @@ const MeganavSearchSuggestions = () => {
99
102
  suggestions.classList.remove("max-h-96");
100
103
  };
101
104
 
105
+ const wheelHandler = (e) => {
106
+ const distance = e.deltaY * 4;
107
+ if (withinBuffer(distance)) return;
108
+ distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);
109
+ };
110
+
102
111
  suggestionsToggle.addEventListener("focus", focusSuggestionsHandler);
103
112
  suggestionsToggle.addEventListener("blur", blurSuggestionsHandler);
104
113
  suggestions.addEventListener("touchstart", touchstartHandler);
105
114
  suggestions.addEventListener("touchmove", touchmoveHandler);
106
115
  suggestions.addEventListener("touchend", touchendHandler);
116
+ suggestions.addEventListener("wheel", wheelHandler);
107
117
 
108
118
  return {
109
119
  teardown: () => {