@ably/ui 8.2.1-dev.f35b482 → 8.4.0

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 (51) hide show
  1. package/core/Footer.jsx +1 -3
  2. package/core/Meganav/component.css +4 -0
  3. package/core/Meganav/component.js +1 -1
  4. package/core/Meganav.jsx +42 -25
  5. package/core/MeganavBlogPostsList.jsx +2 -1
  6. package/core/MeganavContentCompany.jsx +5 -4
  7. package/core/MeganavContentDevelopers.jsx +3 -3
  8. package/core/MeganavContentPlatform.jsx +13 -9
  9. package/core/MeganavContentUseCases.jsx +4 -4
  10. package/core/MeganavControl/component.js +1 -1
  11. package/core/MeganavControl.jsx +3 -1
  12. package/core/MeganavItemsDesktop.jsx +7 -3
  13. package/core/MeganavItemsSignedIn.jsx +4 -1
  14. package/core/sprites.svg +9 -0
  15. package/package.json +1 -1
  16. package/src/core/Footer/component.html.erb +1 -1
  17. package/src/core/Footer/component.jsx +1 -6
  18. package/src/core/Meganav/component.css +4 -0
  19. package/src/core/MeganavBlogPostsList/component.html.erb +1 -1
  20. package/src/core/MeganavBlogPostsList/component.jsx +3 -1
  21. package/src/core/MeganavContentCompany/component.html.erb +4 -4
  22. package/src/core/MeganavContentCompany/component.jsx +3 -3
  23. package/src/core/MeganavContentDevelopers/component.html.erb +3 -3
  24. package/src/core/MeganavContentDevelopers/component.jsx +3 -3
  25. package/src/core/MeganavContentPlatform/component.html.erb +10 -10
  26. package/src/core/MeganavContentPlatform/component.jsx +16 -10
  27. package/src/core/MeganavContentUseCases/component.html.erb +4 -4
  28. package/src/core/MeganavContentUseCases/component.jsx +4 -4
  29. package/src/core/MeganavControl/component.html.erb +1 -1
  30. package/src/core/MeganavControl/component.js +9 -1
  31. package/src/core/MeganavControl/component.jsx +3 -2
  32. package/src/core/MeganavControl/component.rb +8 -2
  33. package/src/core/MeganavItemsDesktop/component.html.erb +2 -2
  34. package/src/core/MeganavItemsDesktop/component.jsx +3 -2
  35. package/src/core/MeganavItemsDesktop/component.rb +8 -0
  36. package/src/core/MeganavItemsSignedIn/component.html.erb +1 -1
  37. package/src/core/MeganavItemsSignedIn/component.jsx +1 -1
  38. package/src/core/icons/icon-gui-copy.svg +10 -0
  39. package/core/.DS_Store +0 -0
  40. package/core/MeganavContentWhyAbly/component.js +0 -6
  41. package/core/MeganavContentWhyAbly.jsx +0 -6
  42. package/core/fonts/.DS_Store +0 -0
  43. package/core/images/.DS_Store +0 -0
  44. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/log/.keep +0 -0
  45. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/tmp/.keep +0 -0
  46. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/tmp/pids/.keep +0 -0
  47. package/src/.DS_Store +0 -0
  48. package/src/core/.DS_Store +0 -0
  49. package/src/core/fonts/.DS_Store +0 -0
  50. package/src/core/images/.DS_Store +0 -0
  51. package/src/reset/.DS_Store +0 -0
@@ -1,5 +1,5 @@
1
1
  <div class="hidden 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" data-id="meganav-company-panel-blog-section">
2
2
  <h3 class="ui-meganav-overline" id="meganav-company-panel-recent-blog-posts">Blog</h3>
3
3
  <ul class="mb-8" aria-labelledby="meganav-company-panel-recent-blog-posts" data-id="meganav-company-panel-recent-blog-posts"></ul>
4
- <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/blog"))) do %>More from our Blog<% end %>
4
+ <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/blog"), text_size: 'text-p3')) do %>More from our Blog<% end %>
5
5
  </div>
@@ -20,7 +20,9 @@ const MeganavBlogPostsList = ({ recentBlogPosts, absUrl }) =>
20
20
  ))}
21
21
  </ul>
22
22
 
23
- <FeaturedLink url={absUrl("/blog")}>More from our Blog</FeaturedLink>
23
+ <FeaturedLink url={absUrl("/blog")} textSize="text-p3">
24
+ More from our Blog
25
+ </FeaturedLink>
24
26
  </div>
25
27
  ) : null;
26
28
 
@@ -1,6 +1,6 @@
1
- <div class="flex">
1
+ <div class="flex max-w-screen-xl mx-auto">
2
2
  <div class="ui-meganav-content-spacer"></div>
3
- <section class="grid grid-cols-12 ui-grid-gap-x">
3
+ <section class="grid grid-cols-12 ui-grid-gap-x w-full">
4
4
  <div class="col-span-full md:col-span-4 pt-24 md:py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24">
5
5
  <h3 class="ui-meganav-overline" id="meganav-company-panel-list-why-companies">Why companies choose Ably</h3>
6
6
  <ul aria-labelledby="meganav-company-panel-list-why-companies">
@@ -18,7 +18,7 @@
18
18
  <%= render(AblyUi::Core::Icon.new(name: "icon-display-case-studies-col", size: "2.5rem")) %>
19
19
  <div class="flex flex-col justify-center">
20
20
  <p class="ui-meganav-media-heading">Case studies</p>
21
- <p class="ui-meganav-media-copy">Discover how customers are benefitting from Ably.</p>
21
+ <p class="ui-meganav-media-copy">Discover how customers are benefiting from Ably.</p>
22
22
  </div>
23
23
  <% end %>
24
24
  </li>
@@ -55,7 +55,7 @@
55
55
  <% end %>
56
56
  </li>
57
57
  <li>
58
- <%= link_to abs_url("/compare"), class: "ui-meganav-media-with-image group" do %>
58
+ <%= link_to abs_url("/about"), class: "ui-meganav-media-with-image group" do %>
59
59
  <%= render(AblyUi::Core::Icon.new(name: "icon-display-about-ably-col", size: "2.5rem")) %>
60
60
  <div class="flex flex-col justify-center">
61
61
  <p class="ui-meganav-media-heading">About Ably</p>
@@ -12,9 +12,9 @@ const MeganavContentCompany = ({ paths, absUrl }) => {
12
12
  const BlogPostsList = ConnectStateWrapper(MeganavBlogPostsList, { recentBlogPosts: selectRecentBlogPosts });
13
13
 
14
14
  return (
15
- <div className="flex">
15
+ <div className="flex max-w-screen-xl mx-auto">
16
16
  <div className="ui-meganav-content-spacer"></div>
17
- <section className="grid grid-cols-12 ui-grid-gap-x">
17
+ <section className="grid grid-cols-12 ui-grid-gap-x w-full">
18
18
  <div className="col-span-full md:col-span-4 pt-24 md:py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24">
19
19
  <h3 className="ui-meganav-overline" id="meganav-company-panel-list-why-companies">
20
20
  Why companies choose Ably
@@ -34,7 +34,7 @@ const MeganavContentCompany = ({ paths, absUrl }) => {
34
34
  <Icon name="icon-display-case-studies-col" size="2.5rem" />
35
35
  <div className="flex flex-col justify-center">
36
36
  <p className="ui-meganav-media-heading">Case studies</p>
37
- <p className="ui-meganav-media-copy">Discover how customers are benefitting from Ably.</p>
37
+ <p className="ui-meganav-media-copy">Discover how customers are benefiting from Ably.</p>
38
38
  </div>
39
39
  </a>
40
40
  </li>
@@ -1,6 +1,6 @@
1
- <div class="flex">
1
+ <div class="flex max-w-screen-xl mx-auto">
2
2
  <div class="ui-meganav-content-spacer"></div>
3
- <section class="grid grid-cols-12 ui-grid-gap-x">
3
+ <section class="grid grid-cols-12 ui-grid-gap-x w-full">
4
4
  <div class="col-span-full md:col-span-4 pt-24 md:py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24">
5
5
  <h3 class="ui-meganav-overline uppercase" id="meganav-developers-panel-explore">
6
6
  Explore
@@ -29,7 +29,7 @@
29
29
  <%= render(AblyUi::Core::Icon.new(name: "icon-display-quickstart-guides-col", size: "2.5rem")) %>
30
30
  <div class="flex flex-col justify-center">
31
31
  <p class="ui-meganav-media-heading">Quickstart guides</p>
32
- <p class="ui-meganav-media-copy">Documentation to help you get up and running quickly.</p>
32
+ <p class="ui-meganav-media-copy">Documentation to help you get started quickly.</p>
33
33
  </div>
34
34
  <% end %>
35
35
  </li>
@@ -4,9 +4,9 @@ import T from "prop-types";
4
4
  import Icon from "../Icon/component.jsx";
5
5
 
6
6
  const MeganavContentDevelopers = ({ absUrl }) => (
7
- <div className="flex">
7
+ <div className="flex max-w-screen-xl mx-auto">
8
8
  <div className="ui-meganav-content-spacer"></div>
9
- <section className="grid grid-cols-12 ui-grid-gap-x">
9
+ <section className="grid grid-cols-12 ui-grid-gap-x w-full">
10
10
  <div className="col-span-full md:col-span-4 pt-24 md:py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24">
11
11
  <h3 className="ui-meganav-overline uppercase" id="meganav-developers-panel-explore">
12
12
  Explore
@@ -35,7 +35,7 @@ const MeganavContentDevelopers = ({ absUrl }) => (
35
35
  <Icon name="icon-display-quickstart-guides-col" size="2.5rem" />
36
36
  <div className="flex flex-col justify-center">
37
37
  <p className="ui-meganav-media-heading">Quickstart guides</p>
38
- <p className="ui-meganav-media-copy">Documentation to help you get up and running quickly.</p>
38
+ <p className="ui-meganav-media-copy">Documentation to help you get started quickly.</p>
39
39
  </div>
40
40
  </a>
41
41
  </li>
@@ -1,23 +1,23 @@
1
- <div class="flex">
1
+ <div class="flex max-w-screen-xl mx-auto">
2
2
  <div class="ui-meganav-content-spacer bg-extra-light-grey"></div>
3
3
  <section class="grid grid-cols-12 ui-grid-gap-x w-full">
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">
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
5
  <div class="flex mb-20">
6
6
  <%= image_tag(ably_stack_path, alt: "Ably homepage") %>
7
7
  <h3 class="ui-meganav-overline ml-24">The Ably Platform</h3>
8
8
  </div>
9
9
 
10
- <p class="text-p2 font-medium text-cool-black mb-8" style="max-width: 330px">
10
+ <p class="text-p2 font-medium text-cool-black mb-24" style="max-width: 330px">
11
11
  Easily power any realtime experience in your application. No complex infrastructure to manage or provision. Just a simple API that handles everything
12
12
  realtime, and lets you focus on your code.
13
13
  </p>
14
14
 
15
- <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/platform"))) do %>Explore how it works<% end %>
15
+ <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/platform"), text_size: 'text-p2')) do %>Explore how it works<% end %>
16
16
  </div>
17
17
 
18
- <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">
18
+ <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">
19
19
  <h3 class="ui-meganav-overline" id="meganav-platform-panel-list-examples">Our Examples</h3>
20
- <ul aria-labelledby="meganav-platform-panel-list-examples">
20
+ <ul class="mb-16" aria-labelledby="meganav-platform-panel-list-examples">
21
21
  <li>
22
22
  <%= link_to abs_url("/examples/avatar-stack"), class: "ui-meganav-media group" do %>
23
23
  <p class="ui-meganav-media-heading">Avatar Stack</p>
@@ -56,12 +56,12 @@
56
56
  </li>
57
57
  </ul>
58
58
 
59
- <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/examples"))) do %>Explore all live examples<% end %>
59
+ <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/examples"), text_size: 'text-p3')) do %>Explore all live examples<% end %>
60
60
  </div>
61
61
 
62
- <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">
62
+ <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">
63
63
  <h3 class="ui-meganav-overline" id="meganav-platform-panel-list-our-technology">Our technology</h3>
64
- <ul class="mb-8" aria-labelledby="meganav-platform-panel-list-our-technology">
64
+ <ul class="mb-16" aria-labelledby="meganav-platform-panel-list-our-technology">
65
65
  <li>
66
66
  <%= link_to abs_url("/four-pillars-of-dependability#performance"), class: "ui-meganav-media group" do %>
67
67
  <p class="ui-meganav-media-heading">Predictable performance</p>
@@ -94,7 +94,7 @@
94
94
  </li>
95
95
  </ul>
96
96
 
97
- <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/four-pillars-of-dependability"))) do %>Explore Four Pillars of Dependability<% end %>
97
+ <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/four-pillars-of-dependability"), text_size: 'text-p3')) do %>Explore Four Pillars of Dependability<% end %>
98
98
  </div>
99
99
  </section>
100
100
  <div class="ui-meganav-content-spacer"></div>
@@ -4,27 +4,29 @@ import T from "prop-types";
4
4
  import FeaturedLink from "../FeaturedLink/component.jsx";
5
5
 
6
6
  const MeganavContentPlatform = ({ paths, absUrl }) => (
7
- <div className="flex">
7
+ <div className="flex max-w-screen-xl mx-auto">
8
8
  <div className="ui-meganav-content-spacer bg-extra-light-grey"></div>
9
9
  <section className="grid grid-cols-12 ui-grid-gap-x w-full">
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">
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
11
  <div className="flex mb-20">
12
12
  <img src={paths.ablyStack} alt="Ably homepage" />
13
13
  <h3 className="ui-meganav-overline ml-24">The Ably Platform</h3>
14
14
  </div>
15
- <p className="text-p2 font-medium text-cool-black mb-8" style={{ maxWidth: "330px" }}>
15
+ <p className="text-p2 font-medium text-cool-black mb-24" style={{ maxWidth: "330px" }}>
16
16
  Easily power any realtime experience in your application. No complex infrastructure to manage or provision. Just a simple API that handles everything
17
17
  realtime, and lets you focus on your code.
18
18
  </p>
19
19
 
20
- <FeaturedLink url={absUrl("/platform")}>Explore how it works</FeaturedLink>
20
+ <FeaturedLink url={absUrl("/platform")} textSize="text-p2">
21
+ Explore how it works
22
+ </FeaturedLink>
21
23
  </div>
22
24
 
23
- <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">
25
+ <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">
24
26
  <h3 className="ui-meganav-overline" id="meganav-platform-panel-list-examples">
25
27
  Our Examples
26
28
  </h3>
27
- <ul aria-labelledby="meganav-platform-panel-list-examples">
29
+ <ul className="mb-16" aria-labelledby="meganav-platform-panel-list-examples">
28
30
  <li>
29
31
  <a href={absUrl("/examples/avatar-stack")} className="group ui-meganav-media">
30
32
  <p className="ui-meganav-media-heading">Avatar Stack</p>
@@ -62,14 +64,16 @@ const MeganavContentPlatform = ({ paths, absUrl }) => (
62
64
  </a>
63
65
  </li>
64
66
  </ul>
65
- <FeaturedLink url={absUrl("/examples")}>Explore all live examples</FeaturedLink>
67
+ <FeaturedLink url={absUrl("/examples")} textSize="text-p3">
68
+ Explore all live examples
69
+ </FeaturedLink>
66
70
  </div>
67
71
 
68
- <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">
72
+ <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">
69
73
  <h3 className="ui-meganav-overline" id="meganav-platform-panel-list-our-technology">
70
74
  Our technology
71
75
  </h3>
72
- <ul className="mb-8" aria-labelledby="meganav-platform-panel-list-our-technology">
76
+ <ul className="mb-16" aria-labelledby="meganav-platform-panel-list-our-technology">
73
77
  <li>
74
78
  <a href={absUrl("/four-pillars-of-dependability#performance")} className="ui-meganav-media group">
75
79
  <p className="ui-meganav-media-heading">Predictable performance</p>
@@ -102,7 +106,9 @@ const MeganavContentPlatform = ({ paths, absUrl }) => (
102
106
  </li>
103
107
  </ul>
104
108
 
105
- <FeaturedLink url={absUrl("/four-pillars-of-dependability")}>Explore Four Pillars of Dependability</FeaturedLink>
109
+ <FeaturedLink url={absUrl("/four-pillars-of-dependability")} textSize="text-p3">
110
+ Explore Four Pillars of Dependability
111
+ </FeaturedLink>
106
112
  </div>
107
113
  </section>
108
114
  <div className="ui-meganav-content-spacer"></div>
@@ -1,7 +1,7 @@
1
- <div class="flex">
1
+ <div class="flex max-w-screen-xl mx-auto">
2
2
  <div class="ui-meganav-content-spacer bg-extra-light-grey"></div>
3
3
  <section class="grid grid-cols-12 ui-grid-gap-x w-full">
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">
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
5
  <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-use-cases">
6
6
  Use cases
7
7
  </h3>
@@ -27,7 +27,7 @@
27
27
  </ul>
28
28
  </div>
29
29
 
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">
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
31
  <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-industry">
32
32
  Industry
33
33
  </h3>
@@ -89,7 +89,7 @@
89
89
  </ul>
90
90
  </div>
91
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">
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
93
  <h3 class="ui-meganav-overline" id="meganav-use-cases-panel-solutions">
94
94
  Solutions
95
95
  </h3>
@@ -4,10 +4,10 @@ import T from "prop-types";
4
4
  import Icon from "../Icon/component.jsx";
5
5
 
6
6
  const MeganavContentUseCases = ({ absUrl }) => (
7
- <div className="flex">
7
+ <div className="flex max-w-screen-xl mx-auto">
8
8
  <div className="ui-meganav-content-spacer bg-extra-light-grey"></div>
9
9
  <section className="grid grid-cols-12 ui-grid-gap-x w-full">
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">
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
11
  <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-use-cases">
12
12
  Use cases
13
13
  </h3>
@@ -33,7 +33,7 @@ const MeganavContentUseCases = ({ absUrl }) => (
33
33
  </ul>
34
34
  </div>
35
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">
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
37
  <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-industry">
38
38
  Industry
39
39
  </h3>
@@ -95,7 +95,7 @@ const MeganavContentUseCases = ({ absUrl }) => (
95
95
  </ul>
96
96
  </div>
97
97
 
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">
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
99
  <h3 className="ui-meganav-overline" id="meganav-use-cases-panel-solutions">
100
100
  Solutions
101
101
  </h3>
@@ -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 #{content}" }) do -%>
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 (ariaExpanded === "true") {
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 ${children}`}
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(aria_controls:, theme_name:, additional_css: '')
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
@@ -1,12 +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 %>
4
+ <%= render(AblyUi::Core::MeganavControl.new(aria_controls: panel[:id], aria_label: panel[:label], theme_name: @theme_name)) do %>
5
5
  <span class="hidden lg:inline"><%= panel[:label] %></span>
6
6
  <span class="lg:hidden"><%= panel[:short_label] %></span>
7
7
  <% end %>
8
8
 
9
- <%= content_tag :div, class: 'ui-meganav-panel invisible', data: { id: "meganav-panel" }, id: panel[:id] do %>
9
+ <%= content_tag :div, class: "ui-meganav-panel invisible #{bg_css(panel[:id])}", data: { id: "meganav-panel" }, id: panel[:id] do %>
10
10
  <%= render("AblyUi::Core::#{panel[:component]}".constantize.new(url_base: url_base)) %>
11
11
  <% end %>
12
12
  </li>
@@ -8,15 +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
+ <MeganavControl theme={theme} ariaControls={panel.id} ariaLabel={panel.label}>
15
16
  <span className="hidden lg:inline">{panel.label}</span>
16
17
  <span className="lg:hidden">{panel.shortLabel}</span>
17
18
  </MeganavControl>
18
19
 
19
- <div className="ui-meganav-panel invisible" id={panel.id} data-id="meganav-panel">
20
+ <div className={`ui-meganav-panel invisible ${bgCSS}`} id={panel.id} data-id="meganav-panel">
20
21
  <PanelComponent paths={paths} absUrl={absUrl} />
21
22
  </div>
22
23
  </li>
@@ -10,6 +10,14 @@ module AblyUi
10
10
  @theme_name = theme_name
11
11
  @url_base = url_base
12
12
  end
13
+
14
+ def bg_css(panel_id)
15
+ if %w[platform-panel use-cases-panel].include?(panel_id)
16
+ 'ui-meganav-panel-split-bg'
17
+ else
18
+ ''
19
+ end
20
+ end
13
21
  end
14
22
  end
15
23
  end
@@ -1,6 +1,6 @@
1
1
  <ul class="hidden md:flex items-center">
2
2
  <li class="ui-meganav-item relative">
3
- <%= render(AblyUi::Core::MeganavControl.new(aria_controls: "account-panel", theme_name: @theme_name, additional_css: "mr-0")) do %>
3
+ <%= render(AblyUi::Core::MeganavControl.new(aria_controls: "account-panel", aria_label: "Account", theme_name: @theme_name, additional_css: "mr-0")) do %>
4
4
  <%= account_name %>
5
5
  <% end %>
6
6
 
@@ -17,7 +17,7 @@ const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
17
17
  return (
18
18
  <ul className="hidden md:flex items-center">
19
19
  <li className="ui-meganav-item relative">
20
- <MeganavControl ariaControls="account-panel" theme={theme} additionalCSS="mr-0">
20
+ <MeganavControl ariaControls="account-panel" ariaLabel="Account" theme={theme} additionalCSS="mr-0">
21
21
  {accountName}
22
22
  </MeganavControl>
23
23
 
@@ -0,0 +1,10 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_222_232)">
3
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2.66634 0.835938C1.65382 0.835938 0.833008 1.65675 0.833008 2.66927V9.33594C0.833008 10.3485 1.65382 11.1693 2.66634 11.1693H3.33301C3.60915 11.1693 3.83301 10.9454 3.83301 10.6693C3.83301 10.3931 3.60915 10.1693 3.33301 10.1693H2.66634C2.2061 10.1693 1.83301 9.79618 1.83301 9.33594V2.66927C1.83301 2.20903 2.2061 1.83594 2.66634 1.83594H9.33301C9.79325 1.83594 10.1663 2.20903 10.1663 2.66927V3.33594C10.1663 3.61208 10.3902 3.83594 10.6663 3.83594C10.9425 3.83594 11.1663 3.61208 11.1663 3.33594V2.66927C11.1663 1.65675 10.3455 0.835938 9.33301 0.835938H2.66634ZM6.66634 4.83594C5.65382 4.83594 4.83301 5.65675 4.83301 6.66927V13.3359C4.83301 14.3485 5.65382 15.1693 6.66634 15.1693H13.333C14.3455 15.1693 15.1663 14.3485 15.1663 13.3359V6.66927C15.1663 5.65675 14.3455 4.83594 13.333 4.83594H6.66634ZM5.83301 6.66927C5.83301 6.20903 6.2061 5.83594 6.66634 5.83594H13.333C13.7932 5.83594 14.1663 6.20903 14.1663 6.66927V13.3359C14.1663 13.7962 13.7932 14.1693 13.333 14.1693H6.66634C6.2061 14.1693 5.83301 13.7962 5.83301 13.3359V6.66927Z" fill="currentColor"/>
4
+ </g>
5
+ <defs>
6
+ <clipPath id="clip0_222_232">
7
+ <rect width="16" height="16" fill="white"/>
8
+ </clipPath>
9
+ </defs>
10
+ </svg>
package/core/.DS_Store DELETED
Binary file
@@ -1,6 +0,0 @@
1
- /******/ (() => { // webpackBootstrap
2
- /******/ "use strict";
3
- /******/
4
- /******/
5
- /******/ })()
6
- ;
@@ -1,6 +0,0 @@
1
- /******/ (() => { // webpackBootstrap
2
- /******/ "use strict";
3
- /******/
4
- /******/
5
- /******/ })()
6
- ;
Binary file
Binary file
package/src/.DS_Store DELETED
Binary file
Binary file
Binary file
Binary file
Binary file