@ably/ui 8.2.0 → 8.2.1-dev.0f465a1
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.
- package/core/Footer.jsx +1 -3
- package/core/Meganav/component.css +11 -1
- package/core/Meganav/component.js +1 -1
- package/core/Meganav/component.json +4 -4
- package/core/Meganav.jsx +512 -352
- package/core/MeganavBlogPostsList/component.js +1 -1
- package/core/MeganavBlogPostsList.jsx +7 -4
- package/core/MeganavContentCompany/component.js +1 -0
- package/core/MeganavContentCompany.jsx +1514 -0
- package/core/MeganavContentDevelopers.jsx +80 -102
- package/core/MeganavContentPlatform.jsx +34 -17
- package/core/MeganavContentUseCases.jsx +128 -36
- package/core/MeganavContentWhyAbly/component.js +22 -1
- package/core/MeganavContentWhyAbly.jsx +2138 -330
- package/core/MeganavControl/component.js +1 -1
- package/core/MeganavControl.jsx +3 -1
- package/core/MeganavControlMobilePanelClose.jsx +7 -4
- package/core/MeganavItemsDesktop.jsx +13 -5
- package/core/MeganavItemsMobile.jsx +11 -6
- package/core/MeganavItemsSignedIn.jsx +4 -1
- package/core/MeganavSearchSuggestions/component.js +1 -1
- package/core/Notice/component.js +1 -1
- package/core/images/icon-tech-aws.svg +4 -0
- package/core/scripts.js +1 -1
- package/core/sprites.svg +150 -0
- package/core/styles.css +4 -0
- package/package.json +1 -1
- package/src/core/Footer/component.html.erb +1 -1
- package/src/core/Footer/component.jsx +1 -6
- package/src/core/Meganav/component.css +11 -1
- package/src/core/Meganav/component.json +4 -4
- package/src/core/Meganav/component.jsx +2 -2
- package/src/core/Meganav/component.rb +8 -4
- package/src/core/MeganavBlogPostsList/component.html.erb +4 -4
- package/src/core/MeganavBlogPostsList/component.js +2 -2
- package/src/core/MeganavBlogPostsList/component.jsx +6 -4
- package/src/core/MeganavContentCompany/component.html.erb +81 -0
- package/src/core/{MeganavContentWhyAbly → MeganavContentCompany}/component.js +0 -0
- package/src/core/MeganavContentCompany/component.jsx +108 -0
- package/src/core/{MeganavContentWhyAbly → MeganavContentCompany}/component.rb +2 -1
- package/src/core/MeganavContentDevelopers/component.html.erb +101 -80
- package/src/core/MeganavContentDevelopers/component.jsx +102 -83
- package/src/core/MeganavContentPlatform/component.html.erb +95 -91
- package/src/core/MeganavContentPlatform/component.jsx +105 -97
- package/src/core/MeganavContentUseCases/component.html.erb +112 -83
- package/src/core/MeganavContentUseCases/component.jsx +114 -87
- package/src/core/MeganavControl/component.html.erb +1 -1
- package/src/core/MeganavControl/component.js +9 -1
- package/src/core/MeganavControl/component.jsx +3 -2
- package/src/core/MeganavControl/component.rb +8 -2
- package/src/core/MeganavControlMobilePanelClose/component.html.erb +4 -2
- package/src/core/MeganavControlMobilePanelClose/component.jsx +3 -2
- package/src/core/MeganavControlMobilePanelClose/component.rb +4 -1
- package/src/core/MeganavItemsDesktop/component.html.erb +4 -3
- package/src/core/MeganavItemsDesktop/component.jsx +5 -3
- package/src/core/MeganavItemsDesktop/component.rb +8 -0
- package/src/core/MeganavItemsMobile/component.html.erb +1 -1
- package/src/core/MeganavItemsMobile/component.jsx +2 -1
- package/src/core/MeganavItemsMobile/component.rb +4 -0
- package/src/core/MeganavItemsSignedIn/component.html.erb +1 -1
- package/src/core/MeganavItemsSignedIn/component.jsx +1 -1
- package/src/core/MeganavSearchSuggestions/component.js +15 -5
- package/src/core/core.rb +4 -0
- package/src/core/icons/icon-display-about-ably-col.svg +4 -0
- package/src/core/icons/icon-display-careers-col.svg +9 -0
- package/src/core/icons/icon-display-case-studies-col.svg +5 -0
- package/src/core/icons/icon-display-chat-stack-col.svg +4 -0
- package/src/core/icons/icon-display-chat-stack.svg +4 -0
- package/src/core/icons/icon-display-compare-tech-col.svg +9 -0
- package/src/core/icons/icon-display-customers-col.svg +15 -0
- package/src/core/icons/icon-display-docs-col.svg +7 -0
- package/src/core/icons/icon-display-lightbulb-col.svg +10 -0
- package/src/core/icons/icon-display-quickstart-guides-col.svg +8 -0
- package/src/core/icons/icon-display-resources-col.svg +21 -0
- package/src/core/icons/icon-display-sdks-col.svg +11 -0
- package/src/core/icons/icon-display-tutorials-demos-col.svg +25 -0
- package/src/core/icons/icon-display-virtual-events-col.svg +12 -0
- package/src/core/icons/icon-display-virtual-events.svg +12 -0
- package/src/core/icons/icon-gui-copy.svg +10 -0
- package/src/core/images/icon-tech-aws.svg +4 -0
- package/src/core/styles/layout.css +4 -0
- package/core/images/blog-thumb1.jpg +0 -0
- package/core/images/blog-thumb2.jpg +0 -0
- package/core/images/blog-thumb3.jpg +0 -0
- package/src/core/MeganavContentWhyAbly/component.html.erb +0 -70
- package/src/core/MeganavContentWhyAbly/component.jsx +0 -95
- package/src/core/images/blog-thumb1.jpg +0 -0
- package/src/core/images/blog-thumb2.jpg +0 -0
- package/src/core/images/blog-thumb3.jpg +0 -0
|
@@ -1,84 +1,113 @@
|
|
|
1
|
-
<
|
|
2
|
-
<div>
|
|
3
|
-
|
|
4
|
-
<
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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 max-w-screen-xl mx-auto">
|
|
2
|
+
<div class="ui-meganav-content-spacer bg-extra-light-grey"></div>
|
|
3
|
+
<section class="grid grid-cols-12 ui-grid-gap-x w-full">
|
|
4
|
+
<div class="col-span-full md:col-span-4 py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24 bg-extra-light-grey">
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
</
|
|
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 bg-white">
|
|
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 bg-white">
|
|
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
|
-
<
|
|
6
|
-
<div>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
</
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
<
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
7
|
+
<div className="flex max-w-screen-xl mx-auto">
|
|
8
|
+
<div className="ui-meganav-content-spacer bg-extra-light-grey"></div>
|
|
9
|
+
<section className="grid grid-cols-12 ui-grid-gap-x w-full">
|
|
10
|
+
<div className="col-span-full md:col-span-4 py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24 bg-extra-light-grey">
|
|
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 bg-white">
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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'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 bg-white">
|
|
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 = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<%= button_tag(type: "button",
|
|
2
2
|
class: ["ui-meganav-link", "h-64", "flex", "items-center", "group", theme(:text_color), additional_css],
|
|
3
3
|
data: { id: "meganav-control" },
|
|
4
|
-
aria: { expanded: false, controls: aria_controls, label: "Show #{
|
|
4
|
+
aria: { expanded: false, controls: aria_controls, label: "Show #{aria_label} panel" }) do -%>
|
|
5
5
|
<%= content -%><%= render(AblyUi::Core::Icon.new(name: "icon-gui-disclosure-arrow", size: "1.5rem", color: "text-cool-black", additional_css: "transform rotate-90 group-hover:text-gui-hover group-focus:text-gui-focus")) %>
|
|
6
6
|
<% end %>
|
|
@@ -30,6 +30,7 @@ const MeganavControl = () => {
|
|
|
30
30
|
const classes = ["invisible", "visible"];
|
|
31
31
|
panel.classList.replace(...(open ? classes : classes.reverse()));
|
|
32
32
|
control.setAttribute("aria-expanded", open);
|
|
33
|
+
control.dataset.hover = open;
|
|
33
34
|
}
|
|
34
35
|
};
|
|
35
36
|
|
|
@@ -50,7 +51,10 @@ const MeganavControl = () => {
|
|
|
50
51
|
|
|
51
52
|
const ariaExpanded = control.getAttribute("aria-expanded");
|
|
52
53
|
|
|
53
|
-
if
|
|
54
|
+
// Prevent closing of the panel if it was already opened by hovering
|
|
55
|
+
const openedByHover = control.dataset.hover === "true";
|
|
56
|
+
|
|
57
|
+
if (ariaExpanded === "true" && !openedByHover) {
|
|
54
58
|
control.setAttribute("aria-expanded", false);
|
|
55
59
|
panel.classList.replace("visible", "invisible");
|
|
56
60
|
} else {
|
|
@@ -58,6 +62,10 @@ const MeganavControl = () => {
|
|
|
58
62
|
panel.classList.replace("invisible", "visible");
|
|
59
63
|
}
|
|
60
64
|
|
|
65
|
+
if (openedByHover) {
|
|
66
|
+
control.dataset.hover = false;
|
|
67
|
+
}
|
|
68
|
+
|
|
61
69
|
if (isSearchControl(control)) {
|
|
62
70
|
const searchInput = queryId("meganav-search-input", panel);
|
|
63
71
|
if (!searchInput) return;
|
|
@@ -3,14 +3,14 @@ import T from "prop-types";
|
|
|
3
3
|
|
|
4
4
|
import Icon from "../Icon/component.jsx";
|
|
5
5
|
|
|
6
|
-
const MeganavControl = ({ ariaControls, children, theme, additionalCSS }) => (
|
|
6
|
+
const MeganavControl = ({ ariaControls, ariaLabel, children, theme, additionalCSS }) => (
|
|
7
7
|
<button
|
|
8
8
|
type="button"
|
|
9
9
|
data-id="meganav-control"
|
|
10
10
|
className={`ui-meganav-link h-64 flex items-center group ${additionalCSS} ${theme.textColor}`}
|
|
11
11
|
aria-expanded="false"
|
|
12
12
|
aria-controls={ariaControls}
|
|
13
|
-
aria-label={`Show ${
|
|
13
|
+
aria-label={`Show ${ariaLabel} panel`}
|
|
14
14
|
>
|
|
15
15
|
{children}
|
|
16
16
|
<Icon
|
|
@@ -24,6 +24,7 @@ const MeganavControl = ({ ariaControls, children, theme, additionalCSS }) => (
|
|
|
24
24
|
|
|
25
25
|
MeganavControl.propTypes = {
|
|
26
26
|
ariaControls: T.string,
|
|
27
|
+
ariaLabel: T.string,
|
|
27
28
|
children: T.node,
|
|
28
29
|
theme: T.object,
|
|
29
30
|
additionalCSS: T.string,
|
|
@@ -2,10 +2,16 @@ module AblyUi
|
|
|
2
2
|
module Core
|
|
3
3
|
class MeganavControl < ViewComponent::Base
|
|
4
4
|
include AblyUi::Core::MeganavConfig
|
|
5
|
-
attr_reader :aria_controls, :additional_css
|
|
5
|
+
attr_reader :aria_controls, :aria_label, :additional_css
|
|
6
6
|
|
|
7
|
-
def initialize(
|
|
7
|
+
def initialize(
|
|
8
|
+
aria_controls:,
|
|
9
|
+
aria_label:,
|
|
10
|
+
theme_name:,
|
|
11
|
+
additional_css: ''
|
|
12
|
+
)
|
|
8
13
|
@aria_controls = aria_controls
|
|
14
|
+
@aria_label = aria_label
|
|
9
15
|
@additional_css = additional_css
|
|
10
16
|
theme_setup(theme_name)
|
|
11
17
|
end
|
|
@@ -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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<ul class="hidden md:flex" data-id="meganav-items-desktop">
|
|
2
2
|
<% panels.each do |panel| %>
|
|
3
3
|
<li class="ui-meganav-item">
|
|
4
|
-
<%= render(AblyUi::Core::MeganavControl.new(aria_controls: panel[:id], theme_name: @theme_name)) do %>
|
|
5
|
-
|
|
4
|
+
<%= render(AblyUi::Core::MeganavControl.new(aria_controls: panel[:id], aria_label: panel[:label], theme_name: @theme_name)) do %>
|
|
5
|
+
<span class="hidden lg:inline"><%= panel[:label] %></span>
|
|
6
|
+
<span class="lg:hidden"><%= panel[:short_label] %></span>
|
|
6
7
|
<% end %>
|
|
7
8
|
|
|
8
|
-
<%= content_tag :div, class:
|
|
9
|
+
<%= content_tag :div, class: "ui-meganav-panel invisible #{bg_css(panel[:id])}", data: { id: "meganav-panel" }, id: panel[:id] do %>
|
|
9
10
|
<%= render("AblyUi::Core::#{panel[:component]}".constantize.new(url_base: url_base)) %>
|
|
10
11
|
<% end %>
|
|
11
12
|
</li>
|
|
@@ -8,14 +8,16 @@ const MeganavDesktopItems = ({ panels, paths, theme, absUrl }) => (
|
|
|
8
8
|
<ul className="hidden md:flex" data-id="meganav-items-desktop">
|
|
9
9
|
{MeganavData.panels.map((panel) => {
|
|
10
10
|
const PanelComponent = panels[panel.component];
|
|
11
|
+
const bgCSS = ["platform-panel", "use-cases-panel"].includes(panel.id) ? "ui-meganav-panel-split-bg" : "";
|
|
11
12
|
|
|
12
13
|
return (
|
|
13
14
|
<li className="ui-meganav-item" key={panel.id}>
|
|
14
|
-
<MeganavControl theme={theme} ariaControls={panel.id}>
|
|
15
|
-
{panel.label}
|
|
15
|
+
<MeganavControl theme={theme} ariaControls={panel.id} ariaLabel={panel.label}>
|
|
16
|
+
<span className="hidden lg:inline">{panel.label}</span>
|
|
17
|
+
<span className="lg:hidden">{panel.shortLabel}</span>
|
|
16
18
|
</MeganavControl>
|
|
17
19
|
|
|
18
|
-
<div className=
|
|
20
|
+
<div className={`ui-meganav-panel invisible ${bgCSS}`} id={panel.id} data-id="meganav-panel">
|
|
19
21
|
<PanelComponent paths={paths} absUrl={absUrl} />
|
|
20
22
|
</div>
|
|
21
23
|
</li>
|
|
@@ -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>
|