@ably/ui 14.0.4 → 14.0.6
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/Flash.js +1 -1
- package/core/styles/forms.css +4 -4
- package/core/styles/toggles.css +38 -0
- package/core/styles.components.css +1 -0
- package/package.json +15 -18
- package/tailwind.config.js +3 -0
- package/src/core/Accordion/Accordion.stories.tsx +0 -39
- package/src/core/Accordion.tsx +0 -149
- package/src/core/Code/Code.stories.tsx +0 -71
- package/src/core/Code/component.css +0 -1
- package/src/core/Code/component.js +0 -27
- package/src/core/Code.tsx +0 -44
- package/src/core/ConnectStateWrapper.tsx +0 -43
- package/src/core/ContactFooter/ContactFooter.stories.tsx +0 -11
- package/src/core/ContactFooter/component.css +0 -11
- package/src/core/ContactFooter/component.js +0 -2
- package/src/core/ContactFooter.tsx +0 -91
- package/src/core/CookieMessage/CookieMessage.stories.tsx +0 -12
- package/src/core/CookieMessage/component.css +0 -15
- package/src/core/CookieMessage.tsx +0 -52
- package/src/core/CustomerLogos/CustomerLogos.stories.tsx +0 -43
- package/src/core/CustomerLogos.tsx +0 -35
- package/src/core/DropdownMenu/DropdownMenu.stories.tsx +0 -48
- package/src/core/DropdownMenu.tsx +0 -140
- package/src/core/Expander/Expander.stories.tsx +0 -132
- package/src/core/Expander.tsx +0 -63
- package/src/core/FeaturedLink/FeaturedLink.stories.tsx +0 -43
- package/src/core/FeaturedLink.tsx +0 -93
- package/src/core/Flash/Flash.stories.tsx +0 -37
- package/src/core/Flash/component.css +0 -28
- package/src/core/Flash.tsx +0 -233
- package/src/core/Footer/Footer.stories.tsx +0 -26
- package/src/core/Footer/component.css +0 -33
- package/src/core/Footer.tsx +0 -535
- package/src/core/Icon/Icon.stories.tsx +0 -151
- package/src/core/Icon.tsx +0 -26
- package/src/core/Loader/Loader.stories.tsx +0 -21
- package/src/core/Loader.tsx +0 -52
- package/src/core/Logo/Logo.stories.tsx +0 -12
- package/src/core/Logo.tsx +0 -29
- package/src/core/Meganav/Meganav.stories.tsx +0 -86
- package/src/core/Meganav/component.css +0 -114
- package/src/core/Meganav/component.js +0 -150
- package/src/core/Meganav/component.json +0 -37
- package/src/core/Meganav.tsx +0 -225
- package/src/core/MeganavBlogPostsList/component.js +0 -43
- package/src/core/MeganavBlogPostsList.tsx +0 -41
- package/src/core/MeganavContentCompany.tsx +0 -166
- package/src/core/MeganavContentDevelopers.tsx +0 -210
- package/src/core/MeganavContentProducts.tsx +0 -163
- package/src/core/MeganavContentUseCases.tsx +0 -244
- package/src/core/MeganavControl/component.js +0 -117
- package/src/core/MeganavControl.tsx +0 -39
- package/src/core/MeganavControlMobileDropdown/component.js +0 -46
- package/src/core/MeganavControlMobileDropdown.tsx +0 -31
- package/src/core/MeganavControlMobilePanelClose/component.js +0 -36
- package/src/core/MeganavControlMobilePanelClose.tsx +0 -34
- package/src/core/MeganavControlMobilePanelOpen/component.js +0 -59
- package/src/core/MeganavControlMobilePanelOpen.tsx +0 -31
- package/src/core/MeganavItemsDesktop.tsx +0 -68
- package/src/core/MeganavItemsMobile.tsx +0 -197
- package/src/core/MeganavItemsSignedIn.tsx +0 -130
- package/src/core/MeganavSearch.tsx +0 -36
- package/src/core/MeganavSearchAutocomplete/component.js +0 -177
- package/src/core/MeganavSearchAutocomplete.tsx +0 -12
- package/src/core/MeganavSearchPanel.tsx +0 -52
- package/src/core/MeganavSearchSuggestions/component.js +0 -133
- package/src/core/MeganavSearchSuggestions.tsx +0 -62
- package/src/core/Notice/component.css +0 -7
- package/src/core/Notice/component.js +0 -154
- package/src/core/Notice.tsx +0 -102
- package/src/core/SignOutLink.tsx +0 -51
- package/src/core/Slider/Slider.stories.tsx +0 -98
- package/src/core/Slider/component.css +0 -40
- package/src/core/Slider/component.js +0 -105
- package/src/core/Slider.tsx +0 -224
- package/src/core/Table/Table.stories.tsx +0 -12
- package/src/core/Table/Table.tsx +0 -58
- package/src/core/Table/TableCell.tsx +0 -71
- package/src/core/Table/TableRow.tsx +0 -25
- package/src/core/Table/data.tsx +0 -133
- package/src/core/Table.tsx +0 -15
- package/src/core/Tooltip/Tooltip.stories.tsx +0 -27
- package/src/core/Tooltip.tsx +0 -88
- package/src/core/css.js +0 -3
- package/src/core/dom-query.js +0 -5
- package/src/core/fonts/NEXT-Book-Light-Italic.eot +0 -0
- package/src/core/fonts/NEXT-Book-Light-Italic.otf +0 -0
- package/src/core/fonts/NEXT-Book-Light-Italic.woff +0 -0
- package/src/core/fonts/NEXT-Book-Light-Italic.woff2 +0 -0
- package/src/core/fonts/NEXT-Book-Light.eot +0 -0
- package/src/core/fonts/NEXT-Book-Light.otf +0 -0
- package/src/core/fonts/NEXT-Book-Light.woff +0 -0
- package/src/core/fonts/NEXT-Book-Light.woff2 +0 -0
- package/src/core/fonts/NEXT-Book-Medium-Italic.eot +0 -0
- package/src/core/fonts/NEXT-Book-Medium-Italic.otf +0 -0
- package/src/core/fonts/NEXT-Book-Medium-Italic.woff +0 -0
- package/src/core/fonts/NEXT-Book-Medium-Italic.woff2 +0 -0
- package/src/core/fonts/NEXT-Book-Medium.eot +0 -0
- package/src/core/fonts/NEXT-Book-Medium.otf +0 -0
- package/src/core/fonts/NEXT-Book-Medium.woff +0 -0
- package/src/core/fonts/NEXT-Book-Medium.woff2 +0 -0
- package/src/core/fonts/jetBrains-mono.css +0 -3
- package/src/core/fonts/manrope.css +0 -3
- package/src/core/fonts/next.css +0 -63
- package/src/core/fonts/source-code-pro.css +0 -3
- package/src/core/hubspot-chat-toggle.js +0 -67
- package/src/core/icons/discord.svg +0 -10
- package/src/core/icons/facebook.svg +0 -4
- package/src/core/icons/github.svg +0 -3
- package/src/core/icons/glassdoor.svg +0 -3
- package/src/core/icons/google.svg +0 -3
- package/src/core/icons/icon-display-48hrs.svg +0 -3
- package/src/core/icons/icon-display-about-ably-col.svg +0 -4
- package/src/core/icons/icon-display-api-keys.svg +0 -3
- package/src/core/icons/icon-display-api.svg +0 -3
- package/src/core/icons/icon-display-asset-tracking-col.svg +0 -18
- package/src/core/icons/icon-display-browser.svg +0 -10
- package/src/core/icons/icon-display-calendar.svg +0 -3
- package/src/core/icons/icon-display-call-mobile.svg +0 -3
- package/src/core/icons/icon-display-careers-col.svg +0 -9
- package/src/core/icons/icon-display-case-studies-col.svg +0 -5
- package/src/core/icons/icon-display-chat-col.svg +0 -4
- package/src/core/icons/icon-display-chat-stack-col.svg +0 -4
- package/src/core/icons/icon-display-chat-stack.svg +0 -4
- package/src/core/icons/icon-display-cloud-servers.svg +0 -3
- package/src/core/icons/icon-display-compare-tech-col.svg +0 -9
- package/src/core/icons/icon-display-customers-col.svg +0 -15
- package/src/core/icons/icon-display-data-broadcast-col.svg +0 -26
- package/src/core/icons/icon-display-data-synchronization-col.svg +0 -14
- package/src/core/icons/icon-display-docs-col.svg +0 -7
- package/src/core/icons/icon-display-documentation.svg +0 -3
- package/src/core/icons/icon-display-events-col.svg +0 -13
- package/src/core/icons/icon-display-examples-col.svg +0 -11
- package/src/core/icons/icon-display-gdpr.svg +0 -3
- package/src/core/icons/icon-display-general-comms.svg +0 -3
- package/src/core/icons/icon-display-hipaa.svg +0 -10
- package/src/core/icons/icon-display-integrations-col.svg +0 -8
- package/src/core/icons/icon-display-it-support-access.svg +0 -3
- package/src/core/icons/icon-display-it-support-helpdesk.svg +0 -3
- package/src/core/icons/icon-display-kafka-at-the-edge-col.svg +0 -8
- package/src/core/icons/icon-display-laptop.svg +0 -10
- package/src/core/icons/icon-display-lightbulb-col.svg +0 -10
- package/src/core/icons/icon-display-live-chat.svg +0 -3
- package/src/core/icons/icon-display-map-pin.svg +0 -3
- package/src/core/icons/icon-display-message.svg +0 -3
- package/src/core/icons/icon-display-padlock-closed.svg +0 -3
- package/src/core/icons/icon-display-platform.svg +0 -22
- package/src/core/icons/icon-display-play.svg +0 -3
- package/src/core/icons/icon-display-privacy-shield-framework.svg +0 -7
- package/src/core/icons/icon-display-push-notifications-col.svg +0 -6
- package/src/core/icons/icon-display-quickstart-guides-col.svg +0 -8
- package/src/core/icons/icon-display-resources-col.svg +0 -21
- package/src/core/icons/icon-display-sdks-col.svg +0 -11
- package/src/core/icons/icon-display-servers.svg +0 -3
- package/src/core/icons/icon-display-shopping-cart.svg +0 -10
- package/src/core/icons/icon-display-sla.svg +0 -3
- package/src/core/icons/icon-display-soc2-type2.svg +0 -3
- package/src/core/icons/icon-display-tech-account-comms.svg +0 -3
- package/src/core/icons/icon-display-tutorials-demos-col.svg +0 -25
- package/src/core/icons/icon-display-virtual-events-col.svg +0 -12
- package/src/core/icons/icon-display-virtual-events.svg +0 -12
- package/src/core/icons/icon-gui-ably-badge.svg +0 -3
- package/src/core/icons/icon-gui-arrow-bidirectional-horizontal.svg +0 -3
- package/src/core/icons/icon-gui-arrow-bidirectional-vertical.svg +0 -3
- package/src/core/icons/icon-gui-arrow-down.svg +0 -3
- package/src/core/icons/icon-gui-arrow-left.svg +0 -3
- package/src/core/icons/icon-gui-arrow-right.svg +0 -3
- package/src/core/icons/icon-gui-arrow-up.svg +0 -3
- package/src/core/icons/icon-gui-burger-menu.svg +0 -5
- package/src/core/icons/icon-gui-check-circled-fill-black.svg +0 -4
- package/src/core/icons/icon-gui-check-circled-fill.svg +0 -4
- package/src/core/icons/icon-gui-check-circled.svg +0 -3
- package/src/core/icons/icon-gui-checklist-checked.svg +0 -3
- package/src/core/icons/icon-gui-clock.svg +0 -3
- package/src/core/icons/icon-gui-close.svg +0 -3
- package/src/core/icons/icon-gui-copy.svg +0 -10
- package/src/core/icons/icon-gui-cross-circled-fill.svg +0 -4
- package/src/core/icons/icon-gui-cross-circled.svg +0 -3
- package/src/core/icons/icon-gui-dash-circled.svg +0 -3
- package/src/core/icons/icon-gui-disclosure-arrow.svg +0 -3
- package/src/core/icons/icon-gui-document-generic.svg +0 -3
- package/src/core/icons/icon-gui-enlarge.svg +0 -3
- package/src/core/icons/icon-gui-external-link.svg +0 -3
- package/src/core/icons/icon-gui-filter-flow-step-1.svg +0 -5
- package/src/core/icons/icon-gui-filter-flow-step-2.svg +0 -5
- package/src/core/icons/icon-gui-filter-flow-step-3.svg +0 -5
- package/src/core/icons/icon-gui-history.svg +0 -3
- package/src/core/icons/icon-gui-info.svg +0 -3
- package/src/core/icons/icon-gui-link-arrow.svg +0 -3
- package/src/core/icons/icon-gui-link.svg +0 -4
- package/src/core/icons/icon-gui-live-chat.svg +0 -3
- package/src/core/icons/icon-gui-minus.svg +0 -3
- package/src/core/icons/icon-gui-partial.svg +0 -4
- package/src/core/icons/icon-gui-plus.svg +0 -3
- package/src/core/icons/icon-gui-quote-marks-solid.svg +0 -3
- package/src/core/icons/icon-gui-refresh.svg +0 -10
- package/src/core/icons/icon-gui-resources.svg +0 -3
- package/src/core/icons/icon-gui-search.svg +0 -3
- package/src/core/icons/icon-gui-tick.svg +0 -3
- package/src/core/icons/icon-gui-warning.svg +0 -5
- package/src/core/icons/icon-live-updates-results-metrics-col.svg +0 -26
- package/src/core/icons/icon-multi-user-spaces-col.svg +0 -13
- package/src/core/icons/icon-social-x.svg +0 -3
- package/src/core/icons/icon-tech-apachekafka.svg +0 -3
- package/src/core/icons/linkedin.svg +0 -3
- package/src/core/icons/quote.svg +0 -3
- package/src/core/icons/stackoverflow.svg +0 -3
- package/src/core/icons/twitter.svg +0 -3
- package/src/core/icons/youtube.svg +0 -11
- package/src/core/icons.js +0 -6
- package/src/core/images/ably-logo.png +0 -0
- package/src/core/images/ably-logo.svg +0 -15
- package/src/core/images/ably-stack.svg +0 -14
- package/src/core/images/best-support-2023.svg +0 -1
- package/src/core/images/cust-logo-ao-col-pos.png +0 -0
- package/src/core/images/cust-logo-ao-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-ausopen-col-pos.png +0 -0
- package/src/core/images/cust-logo-ausopen-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-ausopen-mono-pos.svg +0 -5
- package/src/core/images/cust-logo-bloomberg-mono-pos.svg +0 -11
- package/src/core/images/cust-logo-hopin-mono-pos.svg +0 -4
- package/src/core/images/cust-logo-hubspot-col-pos.png +0 -0
- package/src/core/images/cust-logo-hubspot-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-hubspot-mono-pos.svg +0 -4
- package/src/core/images/cust-logo-lightspeed-col-pos.png +0 -0
- package/src/core/images/cust-logo-lightspeed-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-lightspeed-syst-col-pos.png +0 -0
- package/src/core/images/cust-logo-lightspeed-syst-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-mentimeter-mono-pos.svg +0 -17
- package/src/core/images/cust-logo-split-col-pos.png +0 -0
- package/src/core/images/cust-logo-split-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-split-mono-pos.svg +0 -9
- package/src/core/images/cust-logo-toyota-mono-pos.svg +0 -18
- package/src/core/images/cust-logo-vitac-col-pos.png +0 -0
- package/src/core/images/cust-logo-vitac-col-pos@2x.png +0 -0
- package/src/core/images/cust-logo-webflow-col-pos.svg +0 -3
- package/src/core/images/cust-photo-hubspot-max-freiert.jpg +0 -0
- package/src/core/images/cust-photo-split-pato-echague.jpg +0 -0
- package/src/core/images/cust-photo-vitac-joe-antonio.jpg +0 -0
- package/src/core/images/fastest-implementation-2023.svg +0 -1
- package/src/core/images/flexible-companies.png +0 -0
- package/src/core/images/high-performer-2022.png +0 -0
- package/src/core/images/high-performer-2023.svg +0 -1
- package/src/core/images/highest-user-adoption-2022.png +0 -0
- package/src/core/images/highest-user-adoption-2023.svg +0 -1
- package/src/core/images/icon-tech-aws.svg +0 -4
- package/src/core/images/rocket-list-2021.png +0 -0
- package/src/core/images/scale-motif-open-empathetic.svg +0 -1
- package/src/core/images/technical-support-01-800x533.jpg +0 -0
- package/src/core/images/users-love-us-2022.png +0 -0
- package/src/core/load-sprites.js +0 -11
- package/src/core/react-renderer.tsx +0 -29
- package/src/core/remote-blogs-posts.js +0 -42
- package/src/core/remote-data-store.js +0 -34
- package/src/core/remote-data-util.js +0 -4
- package/src/core/remote-session-data.js +0 -58
- package/src/core/scripts.js +0 -10
- package/src/core/styles/buttons.css +0 -124
- package/src/core/styles/forms.css +0 -64
- package/src/core/styles/layout.css +0 -21
- package/src/core/styles/properties.css +0 -278
- package/src/core/styles/text.css +0 -168
- package/src/core/styles.base.css +0 -1
- package/src/core/styles.components.css +0 -43
- package/src/core/styles.css +0 -2
- package/src/core/url-base.js +0 -7
- package/src/core/utils/syntax-highlighter-registry.js +0 -63
- package/src/core/utils/syntax-highlighter.css +0 -71
- package/src/core/utils/syntax-highlighter.js +0 -103
- package/src/pages/Buttons.mdx +0 -121
- package/src/pages/Chips.mdx +0 -136
- package/src/pages/Colour.mdx +0 -23
- package/src/pages/Forms.mdx +0 -173
- package/src/pages/Layout.mdx +0 -58
- package/src/pages/Typography.mdx +0 -206
- package/src/pages/utils.ts +0 -70
- package/src/reset/scripts.js +0 -1
- package/src/reset/styles/normalize.css +0 -353
- package/src/reset/styles/reset.css +0 -139
- package/src/reset/styles.css +0 -2
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
import FeaturedLink from "./FeaturedLink";
|
|
4
|
-
import { AbsUrl } from "./Meganav";
|
|
5
|
-
|
|
6
|
-
type MeganavContentProductsProps = {
|
|
7
|
-
paths: {
|
|
8
|
-
ablyStack: string;
|
|
9
|
-
iconSprites: string;
|
|
10
|
-
};
|
|
11
|
-
absUrl: AbsUrl;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const MeganavContentProducts = ({
|
|
15
|
-
paths,
|
|
16
|
-
absUrl,
|
|
17
|
-
}: MeganavContentProductsProps) => (
|
|
18
|
-
<div className="flex max-w-screen-xl mx-auto">
|
|
19
|
-
<div className="ui-meganav-content-spacer bg-extra-light-grey"></div>
|
|
20
|
-
<section className="grid grid-cols-12 ui-grid-gap-x w-full">
|
|
21
|
-
<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">
|
|
22
|
-
<div className="flex mb-20">
|
|
23
|
-
<img src={paths.ablyStack} alt="Ably homepage" />
|
|
24
|
-
<h3 className="ui-meganav-overline ml-24">The Ably Platform</h3>
|
|
25
|
-
</div>
|
|
26
|
-
<p className="ui-text-p2 font-bold mb-24" style={{ maxWidth: "330px" }}>
|
|
27
|
-
Easily power any realtime experience in your application. No complex
|
|
28
|
-
infrastructure to manage or provision. Just a simple API that handles
|
|
29
|
-
everything realtime, and lets you focus on your code.
|
|
30
|
-
</p>
|
|
31
|
-
|
|
32
|
-
<FeaturedLink url={absUrl("/platform")} textSize="text-p2">
|
|
33
|
-
Explore how it works
|
|
34
|
-
</FeaturedLink>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<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">
|
|
38
|
-
<h3
|
|
39
|
-
className="ui-meganav-overline"
|
|
40
|
-
id="meganav-products-panel-list-examples"
|
|
41
|
-
>
|
|
42
|
-
Products
|
|
43
|
-
</h3>
|
|
44
|
-
<ul
|
|
45
|
-
className="mb-16"
|
|
46
|
-
aria-labelledby="meganav-products-panel-list-examples"
|
|
47
|
-
>
|
|
48
|
-
<li>
|
|
49
|
-
<a
|
|
50
|
-
href={absUrl("/solutions/channels")}
|
|
51
|
-
className="group ui-meganav-media"
|
|
52
|
-
>
|
|
53
|
-
<p className="ui-meganav-media-heading">Pub/Sub Channels</p>
|
|
54
|
-
<p className="ui-meganav-media-copy">
|
|
55
|
-
Build infinitely scalable realtime applications.
|
|
56
|
-
</p>
|
|
57
|
-
</a>
|
|
58
|
-
</li>
|
|
59
|
-
<li>
|
|
60
|
-
<a href={absUrl("/spaces")} className="group ui-meganav-media">
|
|
61
|
-
<p className="ui-meganav-media-heading">Spaces (Beta)</p>
|
|
62
|
-
<p className="ui-meganav-media-copy">
|
|
63
|
-
Create multi-user collaborative environments.
|
|
64
|
-
</p>
|
|
65
|
-
</a>
|
|
66
|
-
</li>
|
|
67
|
-
<li>
|
|
68
|
-
<a href={absUrl("/livesync")} className="group ui-meganav-media">
|
|
69
|
-
<p className="ui-meganav-media-heading">LiveSync (Alpha)</p>
|
|
70
|
-
<p className="ui-meganav-media-copy">
|
|
71
|
-
Seamlessly sync database changes with frontend clients at scale.
|
|
72
|
-
</p>
|
|
73
|
-
</a>
|
|
74
|
-
</li>
|
|
75
|
-
</ul>
|
|
76
|
-
</div>
|
|
77
|
-
|
|
78
|
-
<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">
|
|
79
|
-
<h3
|
|
80
|
-
className="ui-meganav-overline"
|
|
81
|
-
id="meganav-products-panel-list-our-technology"
|
|
82
|
-
>
|
|
83
|
-
Technology
|
|
84
|
-
</h3>
|
|
85
|
-
<ul
|
|
86
|
-
className="mb-16"
|
|
87
|
-
aria-labelledby="meganav-products-panel-list-our-technology"
|
|
88
|
-
>
|
|
89
|
-
<li>
|
|
90
|
-
<a
|
|
91
|
-
href={absUrl("/four-pillars-of-dependability#performance")}
|
|
92
|
-
className="ui-meganav-media group"
|
|
93
|
-
>
|
|
94
|
-
<p className="ui-meganav-media-heading">
|
|
95
|
-
Predictable performance
|
|
96
|
-
</p>
|
|
97
|
-
<p className="ui-meganav-media-copy">
|
|
98
|
-
A low-latency and high-throughput global network.
|
|
99
|
-
</p>
|
|
100
|
-
</a>
|
|
101
|
-
</li>
|
|
102
|
-
<li>
|
|
103
|
-
<a
|
|
104
|
-
href={absUrl("/four-pillars-of-dependability#integrity")}
|
|
105
|
-
className="ui-meganav-media group"
|
|
106
|
-
>
|
|
107
|
-
<p className="ui-meganav-media-heading">
|
|
108
|
-
Guaranteed ordering & delivery
|
|
109
|
-
</p>
|
|
110
|
-
<p className="ui-meganav-media-copy">
|
|
111
|
-
Data is delivered - in order - even after disconnections.
|
|
112
|
-
</p>
|
|
113
|
-
</a>
|
|
114
|
-
</li>
|
|
115
|
-
<li>
|
|
116
|
-
<a
|
|
117
|
-
href={absUrl("/four-pillars-of-dependability#reliability")}
|
|
118
|
-
className="ui-meganav-media group"
|
|
119
|
-
>
|
|
120
|
-
<p className="ui-meganav-media-heading">
|
|
121
|
-
Fault tolerant infrastructure
|
|
122
|
-
</p>
|
|
123
|
-
<p className="ui-meganav-media-copy">
|
|
124
|
-
Redundancy is built in at global and regional levels.
|
|
125
|
-
</p>
|
|
126
|
-
</a>
|
|
127
|
-
</li>
|
|
128
|
-
<li>
|
|
129
|
-
<a
|
|
130
|
-
href={absUrl("/four-pillars-of-dependability#availability")}
|
|
131
|
-
className="ui-meganav-media group"
|
|
132
|
-
>
|
|
133
|
-
<p className="ui-meganav-media-heading">
|
|
134
|
-
High scalability & availability
|
|
135
|
-
</p>
|
|
136
|
-
<p className="ui-meganav-media-copy">
|
|
137
|
-
Built for scale with legitimate 99.999% uptime SLAs.
|
|
138
|
-
</p>
|
|
139
|
-
</a>
|
|
140
|
-
</li>
|
|
141
|
-
<li>
|
|
142
|
-
<a href={absUrl("/network")} className="ui-meganav-media group">
|
|
143
|
-
<p className="ui-meganav-media-heading">Global edge network</p>
|
|
144
|
-
<p className="ui-meganav-media-copy">
|
|
145
|
-
An edge network of 15 core routing datacenters and 205+ PoPs.
|
|
146
|
-
</p>
|
|
147
|
-
</a>
|
|
148
|
-
</li>
|
|
149
|
-
</ul>
|
|
150
|
-
|
|
151
|
-
<FeaturedLink
|
|
152
|
-
url={absUrl("/four-pillars-of-dependability")}
|
|
153
|
-
textSize="text-p3"
|
|
154
|
-
>
|
|
155
|
-
Explore Four Pillars of Dependability
|
|
156
|
-
</FeaturedLink>
|
|
157
|
-
</div>
|
|
158
|
-
</section>
|
|
159
|
-
<div className="ui-meganav-content-spacer"></div>
|
|
160
|
-
</div>
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
export default MeganavContentProducts;
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
import Icon from "./Icon";
|
|
4
|
-
import { AbsUrl } from "./Meganav";
|
|
5
|
-
|
|
6
|
-
const MeganavContentUseCases = ({ absUrl }: { absUrl: AbsUrl }) => (
|
|
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
|
|
12
|
-
className="ui-meganav-overline"
|
|
13
|
-
id="meganav-use-cases-panel-use-cases"
|
|
14
|
-
>
|
|
15
|
-
Solutions
|
|
16
|
-
</h3>
|
|
17
|
-
<ul aria-labelledby="meganav-use-cases-panel-industry-use-cases">
|
|
18
|
-
<li>
|
|
19
|
-
<a
|
|
20
|
-
href={absUrl("/solutions/chat")}
|
|
21
|
-
className="ui-meganav-media-with-image group"
|
|
22
|
-
>
|
|
23
|
-
<Icon name="icon-display-chat-stack-col" size="2.5rem" />
|
|
24
|
-
<div className="flex flex-col justify-center">
|
|
25
|
-
<p className="ui-meganav-media-heading">Live Chat</p>
|
|
26
|
-
<p className="ui-meganav-media-copy">
|
|
27
|
-
Deliver highly reliable chat experiences at scale.
|
|
28
|
-
</p>
|
|
29
|
-
</div>
|
|
30
|
-
</a>
|
|
31
|
-
</li>
|
|
32
|
-
<li>
|
|
33
|
-
<a
|
|
34
|
-
href={absUrl("/solutions/multiplayer-collaboration")}
|
|
35
|
-
className="ui-meganav-media-with-image group"
|
|
36
|
-
>
|
|
37
|
-
<Icon name="icon-multi-user-spaces-col" size="2.5rem" />
|
|
38
|
-
<div className="flex flex-col justify-center">
|
|
39
|
-
<p className="ui-meganav-media-heading">
|
|
40
|
-
Multiplayer Collaboration
|
|
41
|
-
</p>
|
|
42
|
-
<p className="ui-meganav-media-copy">
|
|
43
|
-
Bring collaborative multiplayer experiences to your users.
|
|
44
|
-
</p>
|
|
45
|
-
</div>
|
|
46
|
-
</a>
|
|
47
|
-
</li>
|
|
48
|
-
<li>
|
|
49
|
-
<a
|
|
50
|
-
href={absUrl("/solutions/data-broadcast")}
|
|
51
|
-
className="ui-meganav-media-with-image group"
|
|
52
|
-
>
|
|
53
|
-
<Icon name="icon-display-data-broadcast-col" size="2.5rem" />
|
|
54
|
-
<div className="flex flex-col justify-center">
|
|
55
|
-
<p className="ui-meganav-media-heading">Data Broadcast</p>
|
|
56
|
-
<p className="ui-meganav-media-copy">
|
|
57
|
-
Broadcast realtime event data to millions of devices around
|
|
58
|
-
the globe.
|
|
59
|
-
</p>
|
|
60
|
-
</div>
|
|
61
|
-
</a>
|
|
62
|
-
</li>
|
|
63
|
-
<li>
|
|
64
|
-
<a
|
|
65
|
-
href={absUrl("/solutions/data-synchronization")}
|
|
66
|
-
className="ui-meganav-media-with-image group"
|
|
67
|
-
>
|
|
68
|
-
<Icon
|
|
69
|
-
name="icon-display-data-synchronization-col"
|
|
70
|
-
size="2.5rem"
|
|
71
|
-
/>
|
|
72
|
-
<div className="flex flex-col justify-center">
|
|
73
|
-
<p className="ui-meganav-media-heading">Data Synchronization</p>
|
|
74
|
-
<p className="ui-meganav-media-copy">
|
|
75
|
-
Keep your frontend and backend in realtime sync, at global
|
|
76
|
-
scale.
|
|
77
|
-
</p>
|
|
78
|
-
</div>
|
|
79
|
-
</a>
|
|
80
|
-
</li>
|
|
81
|
-
<li>
|
|
82
|
-
<a
|
|
83
|
-
href={absUrl("/push-notifications")}
|
|
84
|
-
className="ui-meganav-media-with-image group"
|
|
85
|
-
>
|
|
86
|
-
<Icon name="icon-display-push-notifications-col" size="2.5rem" />
|
|
87
|
-
<div className="flex flex-col justify-center">
|
|
88
|
-
<p className="ui-meganav-media-heading">Notifications</p>
|
|
89
|
-
<p className="ui-meganav-media-copy">
|
|
90
|
-
Deliver cross-platform push notifications with a simple
|
|
91
|
-
unified API.
|
|
92
|
-
</p>
|
|
93
|
-
</div>
|
|
94
|
-
</a>
|
|
95
|
-
</li>
|
|
96
|
-
<li>
|
|
97
|
-
<a
|
|
98
|
-
href={absUrl("/solutions/asset-tracking")}
|
|
99
|
-
className="ui-meganav-media-with-image group"
|
|
100
|
-
>
|
|
101
|
-
<Icon name="icon-display-asset-tracking-col" size="2.5rem" />
|
|
102
|
-
<div className="flex flex-col justify-center">
|
|
103
|
-
<p className="ui-meganav-media-heading">
|
|
104
|
-
Asset Tracking (Beta)
|
|
105
|
-
</p>
|
|
106
|
-
<p className="ui-meganav-media-copy">
|
|
107
|
-
Track assets in realtime with a solution optimised for last
|
|
108
|
-
mile logistics.
|
|
109
|
-
</p>
|
|
110
|
-
</div>
|
|
111
|
-
</a>
|
|
112
|
-
</li>
|
|
113
|
-
</ul>
|
|
114
|
-
</div>
|
|
115
|
-
|
|
116
|
-
<div className="col-span-full md:col-span-4 pt-24 pb-0 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0 bg-white">
|
|
117
|
-
<h3
|
|
118
|
-
className="ui-meganav-overline"
|
|
119
|
-
id="meganav-use-cases-panel-industry"
|
|
120
|
-
>
|
|
121
|
-
Industry
|
|
122
|
-
</h3>
|
|
123
|
-
<ul aria-labelledby="meganav-use-cases-panel-industry">
|
|
124
|
-
<li>
|
|
125
|
-
<a
|
|
126
|
-
href={absUrl("/solutions/edtech")}
|
|
127
|
-
className="ui-meganav-media group"
|
|
128
|
-
>
|
|
129
|
-
<p className="ui-meganav-media-heading">EdTech</p>
|
|
130
|
-
<p className="ui-meganav-media-copy">
|
|
131
|
-
Deliver interactive learning experiences.
|
|
132
|
-
</p>
|
|
133
|
-
</a>
|
|
134
|
-
</li>
|
|
135
|
-
<li>
|
|
136
|
-
<a
|
|
137
|
-
href={absUrl("/solutions/fintech")}
|
|
138
|
-
className="ui-meganav-media group"
|
|
139
|
-
>
|
|
140
|
-
<p className="ui-meganav-media-heading">FinTech</p>
|
|
141
|
-
<p className="ui-meganav-media-copy">
|
|
142
|
-
Deliver personalised financial data in realtime.
|
|
143
|
-
</p>
|
|
144
|
-
</a>
|
|
145
|
-
</li>
|
|
146
|
-
<li>
|
|
147
|
-
<a
|
|
148
|
-
href={absUrl("/solutions/automotive-logistics-and-mobility")}
|
|
149
|
-
className="ui-meganav-media group"
|
|
150
|
-
>
|
|
151
|
-
<p className="ui-meganav-media-heading">
|
|
152
|
-
Automotive, Logistics, & Mobility
|
|
153
|
-
</p>
|
|
154
|
-
<p className="ui-meganav-media-copy">
|
|
155
|
-
Power diagnostics, order tracking and more.
|
|
156
|
-
</p>
|
|
157
|
-
</a>
|
|
158
|
-
</li>
|
|
159
|
-
<li>
|
|
160
|
-
<a
|
|
161
|
-
href={absUrl("/solutions/b2b-platforms")}
|
|
162
|
-
className="ui-meganav-media group"
|
|
163
|
-
>
|
|
164
|
-
<p className="ui-meganav-media-heading">B2B Platforms</p>
|
|
165
|
-
<p className="ui-meganav-media-copy">
|
|
166
|
-
Empower your customers with realtime solutions.
|
|
167
|
-
</p>
|
|
168
|
-
</a>
|
|
169
|
-
</li>
|
|
170
|
-
<li>
|
|
171
|
-
<a
|
|
172
|
-
href={absUrl("/solutions/healthcare")}
|
|
173
|
-
className="ui-meganav-media group"
|
|
174
|
-
>
|
|
175
|
-
<p className="ui-meganav-media-heading">Healthcare (HIPAA)</p>
|
|
176
|
-
<p className="ui-meganav-media-copy">
|
|
177
|
-
Provide trustworthy, HIPAA-compliant realtime apps.
|
|
178
|
-
</p>
|
|
179
|
-
</a>
|
|
180
|
-
</li>
|
|
181
|
-
</ul>
|
|
182
|
-
</div>
|
|
183
|
-
|
|
184
|
-
<div className="col-span-full md:col-span-4 pt-0 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0 bg-white">
|
|
185
|
-
<ul
|
|
186
|
-
aria-labelledby="meganav-use-cases-panel-solutions"
|
|
187
|
-
className="mt-0 md:mt-40"
|
|
188
|
-
>
|
|
189
|
-
<li>
|
|
190
|
-
<a
|
|
191
|
-
href={absUrl("/solutions/ecommerce-and-retail")}
|
|
192
|
-
className="ui-meganav-media group"
|
|
193
|
-
>
|
|
194
|
-
<p className="ui-meganav-media-heading">eCommerce & Retail</p>
|
|
195
|
-
<p className="ui-meganav-media-copy">
|
|
196
|
-
Enrich customer experiences with realtime updates.
|
|
197
|
-
</p>
|
|
198
|
-
</a>
|
|
199
|
-
</li>
|
|
200
|
-
<li>
|
|
201
|
-
<a
|
|
202
|
-
href={absUrl("/solutions/sports-and-media")}
|
|
203
|
-
className="ui-meganav-media group"
|
|
204
|
-
>
|
|
205
|
-
<p className="ui-meganav-media-heading">
|
|
206
|
-
Sports, Media & Audience Engagement
|
|
207
|
-
</p>
|
|
208
|
-
<p className="ui-meganav-media-copy">
|
|
209
|
-
Deliver engaging global realtime experiences.
|
|
210
|
-
</p>
|
|
211
|
-
</a>
|
|
212
|
-
</li>
|
|
213
|
-
<li>
|
|
214
|
-
<a
|
|
215
|
-
href={absUrl("/solutions/gaming")}
|
|
216
|
-
className="ui-meganav-media group"
|
|
217
|
-
>
|
|
218
|
-
<p className="ui-meganav-media-heading">Gaming</p>
|
|
219
|
-
<p className="ui-meganav-media-copy">
|
|
220
|
-
Power ultra fast and reliable gaming experiences.
|
|
221
|
-
</p>
|
|
222
|
-
</a>
|
|
223
|
-
</li>
|
|
224
|
-
<li>
|
|
225
|
-
<a
|
|
226
|
-
href={absUrl("/solutions/iot-and-connected-devices")}
|
|
227
|
-
className="ui-meganav-media group"
|
|
228
|
-
>
|
|
229
|
-
<p className="ui-meganav-media-heading">
|
|
230
|
-
IoT & Connected Devices
|
|
231
|
-
</p>
|
|
232
|
-
<p className="ui-meganav-media-copy">
|
|
233
|
-
Monitor and control global IoT deployments in realtime.
|
|
234
|
-
</p>
|
|
235
|
-
</a>
|
|
236
|
-
</li>
|
|
237
|
-
</ul>
|
|
238
|
-
</div>
|
|
239
|
-
</section>
|
|
240
|
-
<div className="ui-meganav-content-spacer"></div>
|
|
241
|
-
</div>
|
|
242
|
-
);
|
|
243
|
-
|
|
244
|
-
export default MeganavContentUseCases;
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { queryId, queryIdAll } from "../dom-query";
|
|
2
|
-
|
|
3
|
-
const MeganavControl = () => {
|
|
4
|
-
const controls = Array.from(queryIdAll("meganav-control"));
|
|
5
|
-
const panels = Array.from(queryIdAll("meganav-panel"));
|
|
6
|
-
const mdBreakpoint = getComputedStyle(
|
|
7
|
-
document.documentElement,
|
|
8
|
-
).getPropertyValue("--bp-md");
|
|
9
|
-
|
|
10
|
-
const hoverEnabled = () =>
|
|
11
|
-
window.matchMedia(
|
|
12
|
-
`(hover: hover) and (pointer: fine) and (min-width: ${mdBreakpoint})`,
|
|
13
|
-
).matches;
|
|
14
|
-
|
|
15
|
-
const isSearchControl = (node) => node.dataset.control === "search";
|
|
16
|
-
|
|
17
|
-
const isSearchPanelOpen = () => {
|
|
18
|
-
const searchPanel = document.querySelector(
|
|
19
|
-
'[data-id="meganav-panel"]#panel-search',
|
|
20
|
-
);
|
|
21
|
-
if (!searchPanel) return;
|
|
22
|
-
return !searchPanel.classList.contains("invisible");
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const controlsHaveFocus = () =>
|
|
26
|
-
controls.some((control) => control === document.activeElement);
|
|
27
|
-
|
|
28
|
-
const hover = (control, panel, open) => {
|
|
29
|
-
if (hoverEnabled() && !controlsHaveFocus() && !isSearchPanelOpen()) {
|
|
30
|
-
const classes = ["invisible", "visible"];
|
|
31
|
-
panel.classList.replace(...(open ? classes : classes.reverse()));
|
|
32
|
-
control.setAttribute("aria-expanded", open);
|
|
33
|
-
control.dataset.hover = open;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const mouseenterHandler = (control, panel) => () =>
|
|
38
|
-
hover(control, panel, true);
|
|
39
|
-
|
|
40
|
-
const mouseleaveHandler = (control, panel) => () =>
|
|
41
|
-
hover(control, panel, false);
|
|
42
|
-
|
|
43
|
-
const clickHandler = (control, panel) => () => {
|
|
44
|
-
controls.forEach(
|
|
45
|
-
(node) => node !== control && node.setAttribute("aria-expanded", false),
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
panels.forEach(
|
|
49
|
-
(node) =>
|
|
50
|
-
node !== panel && node.classList.replace("visible", "invisible"),
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
const ariaExpanded = control.getAttribute("aria-expanded");
|
|
54
|
-
|
|
55
|
-
// Prevent closing of the panel if it was already opened by hovering
|
|
56
|
-
const openedByHover = control.dataset.hover === "true";
|
|
57
|
-
|
|
58
|
-
if (ariaExpanded === "true" && !openedByHover) {
|
|
59
|
-
control.setAttribute("aria-expanded", false);
|
|
60
|
-
panel.classList.replace("visible", "invisible");
|
|
61
|
-
} else {
|
|
62
|
-
control.setAttribute("aria-expanded", true);
|
|
63
|
-
panel.classList.replace("invisible", "visible");
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (openedByHover) {
|
|
67
|
-
control.dataset.hover = false;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (isSearchControl(control)) {
|
|
71
|
-
const searchInput = queryId("meganav-search-input", panel);
|
|
72
|
-
if (!searchInput) return;
|
|
73
|
-
searchInput.focus();
|
|
74
|
-
} else {
|
|
75
|
-
control.focus();
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
return controls
|
|
80
|
-
.map((control) => {
|
|
81
|
-
const item = control.parentNode;
|
|
82
|
-
const panel = document.querySelector(
|
|
83
|
-
`#${control.getAttribute("aria-controls")}`,
|
|
84
|
-
);
|
|
85
|
-
const click = clickHandler(control, panel);
|
|
86
|
-
control.addEventListener("click", click);
|
|
87
|
-
let mouseenter, mouseleave;
|
|
88
|
-
|
|
89
|
-
if (!isSearchControl(control)) {
|
|
90
|
-
mouseenter = mouseenterHandler(control, panel);
|
|
91
|
-
mouseleave = mouseleaveHandler(control, panel);
|
|
92
|
-
|
|
93
|
-
item.addEventListener("mouseenter", mouseenter);
|
|
94
|
-
item.addEventListener("mouseleave", mouseleave);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return [
|
|
98
|
-
{
|
|
99
|
-
teardown: () => {
|
|
100
|
-
if (mouseenter && mouseleave) {
|
|
101
|
-
item.removeEventListener("mouseenter", mouseenter);
|
|
102
|
-
item.removeEventListener("mouseleave", mouseleave);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
control.removeEventListener("click", click);
|
|
106
|
-
},
|
|
107
|
-
clear: () => {
|
|
108
|
-
control.setAttribute("aria-expanded", false);
|
|
109
|
-
panel.classList.replace("visible", "invisible");
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
];
|
|
113
|
-
})
|
|
114
|
-
.flat();
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
export default MeganavControl;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
import Icon from "./Icon";
|
|
4
|
-
import { MeganavTheme } from "./Meganav";
|
|
5
|
-
|
|
6
|
-
type MeganavControlProps = {
|
|
7
|
-
ariaControls: string;
|
|
8
|
-
ariaLabel: string;
|
|
9
|
-
children: ReactNode;
|
|
10
|
-
theme: MeganavTheme;
|
|
11
|
-
additionalCSS?: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const MeganavControl = ({
|
|
15
|
-
ariaControls,
|
|
16
|
-
ariaLabel,
|
|
17
|
-
children,
|
|
18
|
-
theme,
|
|
19
|
-
additionalCSS,
|
|
20
|
-
}: MeganavControlProps) => (
|
|
21
|
-
<button
|
|
22
|
-
type="button"
|
|
23
|
-
data-id="meganav-control"
|
|
24
|
-
className={`ui-meganav-link h-64 flex items-center group ${additionalCSS} ${theme.textColor}`}
|
|
25
|
-
aria-expanded="false"
|
|
26
|
-
aria-controls={ariaControls}
|
|
27
|
-
aria-label={`Show ${ariaLabel} panel`}
|
|
28
|
-
>
|
|
29
|
-
{children}
|
|
30
|
-
<Icon
|
|
31
|
-
name="icon-gui-disclosure-arrow"
|
|
32
|
-
color="text-cool-black"
|
|
33
|
-
size="1.5rem"
|
|
34
|
-
additionalCSS="transform rotate-90 group-hover:text-gui-hover group-focus:text-gui-focus"
|
|
35
|
-
/>
|
|
36
|
-
</button>
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
export default MeganavControl;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import scrollLock from "scroll-lock";
|
|
2
|
-
|
|
3
|
-
import { queryId } from "../dom-query";
|
|
4
|
-
|
|
5
|
-
const MeganavControlMobileDropdown = ({ clearPanels }) => {
|
|
6
|
-
const control = queryId("meganav-control-mobile-dropdown");
|
|
7
|
-
const dropdown = queryId("meganav-mobile-dropdown");
|
|
8
|
-
const menuIcon = queryId("meganav-control-mobile-dropdown-menu");
|
|
9
|
-
const closeIcon = queryId("meganav-control-mobile-dropdown-close");
|
|
10
|
-
|
|
11
|
-
const clickHandler = () => {
|
|
12
|
-
const ariaExpanded = control.getAttribute("aria-expanded");
|
|
13
|
-
|
|
14
|
-
if (ariaExpanded === "false") {
|
|
15
|
-
dropdown.classList.replace("invisible", "visible");
|
|
16
|
-
control.setAttribute("aria-expanded", true);
|
|
17
|
-
scrollLock.disablePageScroll();
|
|
18
|
-
} else {
|
|
19
|
-
dropdown.classList.replace("visible", "invisible");
|
|
20
|
-
control.setAttribute("aria-expanded", false);
|
|
21
|
-
scrollLock.enablePageScroll();
|
|
22
|
-
clearPanels();
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
menuIcon.classList.toggle("hidden");
|
|
26
|
-
closeIcon.classList.toggle("hidden");
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
control.addEventListener("click", clickHandler);
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
teardown: () => {
|
|
33
|
-
control.removeEventListener("click", clickHandler);
|
|
34
|
-
scrollLock.enablePageScroll();
|
|
35
|
-
},
|
|
36
|
-
clear: () => {
|
|
37
|
-
dropdown.classList.replace("visible", "invisible");
|
|
38
|
-
control.setAttribute("aria-expanded", false);
|
|
39
|
-
menuIcon.classList.remove("hidden");
|
|
40
|
-
closeIcon.classList.add("hidden");
|
|
41
|
-
scrollLock.enablePageScroll();
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export default MeganavControlMobileDropdown;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
import Icon from "./Icon";
|
|
4
|
-
import { MeganavTheme } from "./Meganav";
|
|
5
|
-
|
|
6
|
-
const MeganavControlMobileDropdown = ({ theme }: { theme: MeganavTheme }) => (
|
|
7
|
-
<button
|
|
8
|
-
type="button"
|
|
9
|
-
className="block ml-24 mr-0 px-0 py-16 hover:text-gui-hover focus:text-gui-focus focus:outline-none"
|
|
10
|
-
data-id="meganav-control-mobile-dropdown"
|
|
11
|
-
aria-expanded="false"
|
|
12
|
-
aria-controls="meganav-mobile-dropdown"
|
|
13
|
-
>
|
|
14
|
-
<Icon
|
|
15
|
-
name="icon-gui-burger-menu"
|
|
16
|
-
size="1.5rem"
|
|
17
|
-
color={theme.mobileMenuColor}
|
|
18
|
-
additionalCSS="transition-colors"
|
|
19
|
-
data-id="meganav-control-mobile-dropdown-menu"
|
|
20
|
-
/>
|
|
21
|
-
<Icon
|
|
22
|
-
name="icon-gui-close"
|
|
23
|
-
size="1.5rem"
|
|
24
|
-
color={theme.mobileMenuColor}
|
|
25
|
-
additionalCSS="transition-colors hidden"
|
|
26
|
-
data-id="meganav-control-mobile-dropdown-close"
|
|
27
|
-
/>
|
|
28
|
-
</button>
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
export default MeganavControlMobileDropdown;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { queryIdAll } from "../dom-query";
|
|
2
|
-
|
|
3
|
-
export default () => {
|
|
4
|
-
const closeControls = Array.from(
|
|
5
|
-
queryIdAll("meganav-control-mobile-panel-close"),
|
|
6
|
-
);
|
|
7
|
-
const openControls = Array.from(
|
|
8
|
-
queryIdAll("meganav-control-mobile-panel-open"),
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
const clickHandler = (btn, openBtn, panel) => () => {
|
|
12
|
-
btn.setAttribute("aria-expanded", false);
|
|
13
|
-
openBtn.setAttribute("aria-expanded", false);
|
|
14
|
-
panel.classList.replace("block", "hidden");
|
|
15
|
-
panel.style.height = null;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
return closeControls.map((btn) => {
|
|
19
|
-
const openBtn = openControls.find(
|
|
20
|
-
(open) =>
|
|
21
|
-
open.getAttribute("aria-controls") ===
|
|
22
|
-
btn.getAttribute("aria-controls"),
|
|
23
|
-
);
|
|
24
|
-
const panel = document.querySelector(
|
|
25
|
-
`#${btn.getAttribute("aria-controls")}`,
|
|
26
|
-
);
|
|
27
|
-
const handler = clickHandler(btn, openBtn, panel);
|
|
28
|
-
|
|
29
|
-
btn.addEventListener("click", handler);
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
teardown: () => btn.removeEventListener("click", handler),
|
|
33
|
-
clear: () => btn.setAttribute("aria-expanded", false),
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
};
|