@ably/ui 14.0.5 → 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.
Files changed (279) hide show
  1. package/core/Flash.js +1 -1
  2. package/package.json +7 -9
  3. package/src/core/Accordion/Accordion.stories.tsx +0 -39
  4. package/src/core/Accordion.tsx +0 -149
  5. package/src/core/Code/Code.stories.tsx +0 -71
  6. package/src/core/Code/component.css +0 -1
  7. package/src/core/Code/component.js +0 -27
  8. package/src/core/Code.tsx +0 -44
  9. package/src/core/ConnectStateWrapper.tsx +0 -43
  10. package/src/core/ContactFooter/ContactFooter.stories.tsx +0 -11
  11. package/src/core/ContactFooter/component.css +0 -11
  12. package/src/core/ContactFooter/component.js +0 -2
  13. package/src/core/ContactFooter.tsx +0 -91
  14. package/src/core/CookieMessage/CookieMessage.stories.tsx +0 -12
  15. package/src/core/CookieMessage/component.css +0 -15
  16. package/src/core/CookieMessage.tsx +0 -52
  17. package/src/core/CustomerLogos/CustomerLogos.stories.tsx +0 -43
  18. package/src/core/CustomerLogos.tsx +0 -35
  19. package/src/core/DropdownMenu/DropdownMenu.stories.tsx +0 -48
  20. package/src/core/DropdownMenu.tsx +0 -140
  21. package/src/core/Expander/Expander.stories.tsx +0 -132
  22. package/src/core/Expander.tsx +0 -63
  23. package/src/core/FeaturedLink/FeaturedLink.stories.tsx +0 -43
  24. package/src/core/FeaturedLink.tsx +0 -93
  25. package/src/core/Flash/Flash.stories.tsx +0 -37
  26. package/src/core/Flash/component.css +0 -28
  27. package/src/core/Flash.tsx +0 -233
  28. package/src/core/Footer/Footer.stories.tsx +0 -26
  29. package/src/core/Footer/component.css +0 -33
  30. package/src/core/Footer.tsx +0 -535
  31. package/src/core/Icon/Icon.stories.tsx +0 -151
  32. package/src/core/Icon.tsx +0 -26
  33. package/src/core/Loader/Loader.stories.tsx +0 -21
  34. package/src/core/Loader.tsx +0 -52
  35. package/src/core/Logo/Logo.stories.tsx +0 -12
  36. package/src/core/Logo.tsx +0 -29
  37. package/src/core/Meganav/Meganav.stories.tsx +0 -86
  38. package/src/core/Meganav/component.css +0 -114
  39. package/src/core/Meganav/component.js +0 -150
  40. package/src/core/Meganav/component.json +0 -37
  41. package/src/core/Meganav.tsx +0 -225
  42. package/src/core/MeganavBlogPostsList/component.js +0 -43
  43. package/src/core/MeganavBlogPostsList.tsx +0 -41
  44. package/src/core/MeganavContentCompany.tsx +0 -166
  45. package/src/core/MeganavContentDevelopers.tsx +0 -210
  46. package/src/core/MeganavContentProducts.tsx +0 -163
  47. package/src/core/MeganavContentUseCases.tsx +0 -244
  48. package/src/core/MeganavControl/component.js +0 -117
  49. package/src/core/MeganavControl.tsx +0 -39
  50. package/src/core/MeganavControlMobileDropdown/component.js +0 -46
  51. package/src/core/MeganavControlMobileDropdown.tsx +0 -31
  52. package/src/core/MeganavControlMobilePanelClose/component.js +0 -36
  53. package/src/core/MeganavControlMobilePanelClose.tsx +0 -34
  54. package/src/core/MeganavControlMobilePanelOpen/component.js +0 -59
  55. package/src/core/MeganavControlMobilePanelOpen.tsx +0 -31
  56. package/src/core/MeganavItemsDesktop.tsx +0 -68
  57. package/src/core/MeganavItemsMobile.tsx +0 -197
  58. package/src/core/MeganavItemsSignedIn.tsx +0 -130
  59. package/src/core/MeganavSearch.tsx +0 -36
  60. package/src/core/MeganavSearchAutocomplete/component.js +0 -177
  61. package/src/core/MeganavSearchAutocomplete.tsx +0 -12
  62. package/src/core/MeganavSearchPanel.tsx +0 -52
  63. package/src/core/MeganavSearchSuggestions/component.js +0 -133
  64. package/src/core/MeganavSearchSuggestions.tsx +0 -62
  65. package/src/core/Notice/component.css +0 -7
  66. package/src/core/Notice/component.js +0 -154
  67. package/src/core/Notice.tsx +0 -102
  68. package/src/core/SignOutLink.tsx +0 -51
  69. package/src/core/Slider/Slider.stories.tsx +0 -98
  70. package/src/core/Slider/component.css +0 -40
  71. package/src/core/Slider/component.js +0 -105
  72. package/src/core/Slider.tsx +0 -224
  73. package/src/core/Table/Table.stories.tsx +0 -12
  74. package/src/core/Table/Table.tsx +0 -58
  75. package/src/core/Table/TableCell.tsx +0 -71
  76. package/src/core/Table/TableRow.tsx +0 -25
  77. package/src/core/Table/data.tsx +0 -133
  78. package/src/core/Table.tsx +0 -15
  79. package/src/core/Tooltip/Tooltip.stories.tsx +0 -27
  80. package/src/core/Tooltip.tsx +0 -88
  81. package/src/core/css.js +0 -3
  82. package/src/core/dom-query.js +0 -5
  83. package/src/core/fonts/NEXT-Book-Light-Italic.eot +0 -0
  84. package/src/core/fonts/NEXT-Book-Light-Italic.otf +0 -0
  85. package/src/core/fonts/NEXT-Book-Light-Italic.woff +0 -0
  86. package/src/core/fonts/NEXT-Book-Light-Italic.woff2 +0 -0
  87. package/src/core/fonts/NEXT-Book-Light.eot +0 -0
  88. package/src/core/fonts/NEXT-Book-Light.otf +0 -0
  89. package/src/core/fonts/NEXT-Book-Light.woff +0 -0
  90. package/src/core/fonts/NEXT-Book-Light.woff2 +0 -0
  91. package/src/core/fonts/NEXT-Book-Medium-Italic.eot +0 -0
  92. package/src/core/fonts/NEXT-Book-Medium-Italic.otf +0 -0
  93. package/src/core/fonts/NEXT-Book-Medium-Italic.woff +0 -0
  94. package/src/core/fonts/NEXT-Book-Medium-Italic.woff2 +0 -0
  95. package/src/core/fonts/NEXT-Book-Medium.eot +0 -0
  96. package/src/core/fonts/NEXT-Book-Medium.otf +0 -0
  97. package/src/core/fonts/NEXT-Book-Medium.woff +0 -0
  98. package/src/core/fonts/NEXT-Book-Medium.woff2 +0 -0
  99. package/src/core/fonts/jetBrains-mono.css +0 -3
  100. package/src/core/fonts/manrope.css +0 -3
  101. package/src/core/fonts/next.css +0 -63
  102. package/src/core/fonts/source-code-pro.css +0 -3
  103. package/src/core/hubspot-chat-toggle.js +0 -67
  104. package/src/core/icons/discord.svg +0 -10
  105. package/src/core/icons/facebook.svg +0 -4
  106. package/src/core/icons/github.svg +0 -3
  107. package/src/core/icons/glassdoor.svg +0 -3
  108. package/src/core/icons/google.svg +0 -3
  109. package/src/core/icons/icon-display-48hrs.svg +0 -3
  110. package/src/core/icons/icon-display-about-ably-col.svg +0 -4
  111. package/src/core/icons/icon-display-api-keys.svg +0 -3
  112. package/src/core/icons/icon-display-api.svg +0 -3
  113. package/src/core/icons/icon-display-asset-tracking-col.svg +0 -18
  114. package/src/core/icons/icon-display-browser.svg +0 -10
  115. package/src/core/icons/icon-display-calendar.svg +0 -3
  116. package/src/core/icons/icon-display-call-mobile.svg +0 -3
  117. package/src/core/icons/icon-display-careers-col.svg +0 -9
  118. package/src/core/icons/icon-display-case-studies-col.svg +0 -5
  119. package/src/core/icons/icon-display-chat-col.svg +0 -4
  120. package/src/core/icons/icon-display-chat-stack-col.svg +0 -4
  121. package/src/core/icons/icon-display-chat-stack.svg +0 -4
  122. package/src/core/icons/icon-display-cloud-servers.svg +0 -3
  123. package/src/core/icons/icon-display-compare-tech-col.svg +0 -9
  124. package/src/core/icons/icon-display-customers-col.svg +0 -15
  125. package/src/core/icons/icon-display-data-broadcast-col.svg +0 -26
  126. package/src/core/icons/icon-display-data-synchronization-col.svg +0 -14
  127. package/src/core/icons/icon-display-docs-col.svg +0 -7
  128. package/src/core/icons/icon-display-documentation.svg +0 -3
  129. package/src/core/icons/icon-display-events-col.svg +0 -13
  130. package/src/core/icons/icon-display-examples-col.svg +0 -11
  131. package/src/core/icons/icon-display-gdpr.svg +0 -3
  132. package/src/core/icons/icon-display-general-comms.svg +0 -3
  133. package/src/core/icons/icon-display-hipaa.svg +0 -10
  134. package/src/core/icons/icon-display-integrations-col.svg +0 -8
  135. package/src/core/icons/icon-display-it-support-access.svg +0 -3
  136. package/src/core/icons/icon-display-it-support-helpdesk.svg +0 -3
  137. package/src/core/icons/icon-display-kafka-at-the-edge-col.svg +0 -8
  138. package/src/core/icons/icon-display-laptop.svg +0 -10
  139. package/src/core/icons/icon-display-lightbulb-col.svg +0 -10
  140. package/src/core/icons/icon-display-live-chat.svg +0 -3
  141. package/src/core/icons/icon-display-map-pin.svg +0 -3
  142. package/src/core/icons/icon-display-message.svg +0 -3
  143. package/src/core/icons/icon-display-padlock-closed.svg +0 -3
  144. package/src/core/icons/icon-display-platform.svg +0 -22
  145. package/src/core/icons/icon-display-play.svg +0 -3
  146. package/src/core/icons/icon-display-privacy-shield-framework.svg +0 -7
  147. package/src/core/icons/icon-display-push-notifications-col.svg +0 -6
  148. package/src/core/icons/icon-display-quickstart-guides-col.svg +0 -8
  149. package/src/core/icons/icon-display-resources-col.svg +0 -21
  150. package/src/core/icons/icon-display-sdks-col.svg +0 -11
  151. package/src/core/icons/icon-display-servers.svg +0 -3
  152. package/src/core/icons/icon-display-shopping-cart.svg +0 -10
  153. package/src/core/icons/icon-display-sla.svg +0 -3
  154. package/src/core/icons/icon-display-soc2-type2.svg +0 -3
  155. package/src/core/icons/icon-display-tech-account-comms.svg +0 -3
  156. package/src/core/icons/icon-display-tutorials-demos-col.svg +0 -25
  157. package/src/core/icons/icon-display-virtual-events-col.svg +0 -12
  158. package/src/core/icons/icon-display-virtual-events.svg +0 -12
  159. package/src/core/icons/icon-gui-ably-badge.svg +0 -3
  160. package/src/core/icons/icon-gui-arrow-bidirectional-horizontal.svg +0 -3
  161. package/src/core/icons/icon-gui-arrow-bidirectional-vertical.svg +0 -3
  162. package/src/core/icons/icon-gui-arrow-down.svg +0 -3
  163. package/src/core/icons/icon-gui-arrow-left.svg +0 -3
  164. package/src/core/icons/icon-gui-arrow-right.svg +0 -3
  165. package/src/core/icons/icon-gui-arrow-up.svg +0 -3
  166. package/src/core/icons/icon-gui-burger-menu.svg +0 -5
  167. package/src/core/icons/icon-gui-check-circled-fill-black.svg +0 -4
  168. package/src/core/icons/icon-gui-check-circled-fill.svg +0 -4
  169. package/src/core/icons/icon-gui-check-circled.svg +0 -3
  170. package/src/core/icons/icon-gui-checklist-checked.svg +0 -3
  171. package/src/core/icons/icon-gui-clock.svg +0 -3
  172. package/src/core/icons/icon-gui-close.svg +0 -3
  173. package/src/core/icons/icon-gui-copy.svg +0 -10
  174. package/src/core/icons/icon-gui-cross-circled-fill.svg +0 -4
  175. package/src/core/icons/icon-gui-cross-circled.svg +0 -3
  176. package/src/core/icons/icon-gui-dash-circled.svg +0 -3
  177. package/src/core/icons/icon-gui-disclosure-arrow.svg +0 -3
  178. package/src/core/icons/icon-gui-document-generic.svg +0 -3
  179. package/src/core/icons/icon-gui-enlarge.svg +0 -3
  180. package/src/core/icons/icon-gui-external-link.svg +0 -3
  181. package/src/core/icons/icon-gui-filter-flow-step-1.svg +0 -5
  182. package/src/core/icons/icon-gui-filter-flow-step-2.svg +0 -5
  183. package/src/core/icons/icon-gui-filter-flow-step-3.svg +0 -5
  184. package/src/core/icons/icon-gui-history.svg +0 -3
  185. package/src/core/icons/icon-gui-info.svg +0 -3
  186. package/src/core/icons/icon-gui-link-arrow.svg +0 -3
  187. package/src/core/icons/icon-gui-link.svg +0 -4
  188. package/src/core/icons/icon-gui-live-chat.svg +0 -3
  189. package/src/core/icons/icon-gui-minus.svg +0 -3
  190. package/src/core/icons/icon-gui-partial.svg +0 -4
  191. package/src/core/icons/icon-gui-plus.svg +0 -3
  192. package/src/core/icons/icon-gui-quote-marks-solid.svg +0 -3
  193. package/src/core/icons/icon-gui-refresh.svg +0 -10
  194. package/src/core/icons/icon-gui-resources.svg +0 -3
  195. package/src/core/icons/icon-gui-search.svg +0 -3
  196. package/src/core/icons/icon-gui-tick.svg +0 -3
  197. package/src/core/icons/icon-gui-warning.svg +0 -5
  198. package/src/core/icons/icon-live-updates-results-metrics-col.svg +0 -26
  199. package/src/core/icons/icon-multi-user-spaces-col.svg +0 -13
  200. package/src/core/icons/icon-social-x.svg +0 -3
  201. package/src/core/icons/icon-tech-apachekafka.svg +0 -3
  202. package/src/core/icons/linkedin.svg +0 -3
  203. package/src/core/icons/quote.svg +0 -3
  204. package/src/core/icons/stackoverflow.svg +0 -3
  205. package/src/core/icons/twitter.svg +0 -3
  206. package/src/core/icons/youtube.svg +0 -11
  207. package/src/core/icons.js +0 -6
  208. package/src/core/images/ably-logo.png +0 -0
  209. package/src/core/images/ably-logo.svg +0 -15
  210. package/src/core/images/ably-stack.svg +0 -14
  211. package/src/core/images/best-support-2023.svg +0 -1
  212. package/src/core/images/cust-logo-ao-col-pos.png +0 -0
  213. package/src/core/images/cust-logo-ao-col-pos@2x.png +0 -0
  214. package/src/core/images/cust-logo-ausopen-col-pos.png +0 -0
  215. package/src/core/images/cust-logo-ausopen-col-pos@2x.png +0 -0
  216. package/src/core/images/cust-logo-ausopen-mono-pos.svg +0 -5
  217. package/src/core/images/cust-logo-bloomberg-mono-pos.svg +0 -11
  218. package/src/core/images/cust-logo-hopin-mono-pos.svg +0 -4
  219. package/src/core/images/cust-logo-hubspot-col-pos.png +0 -0
  220. package/src/core/images/cust-logo-hubspot-col-pos@2x.png +0 -0
  221. package/src/core/images/cust-logo-hubspot-mono-pos.svg +0 -4
  222. package/src/core/images/cust-logo-lightspeed-col-pos.png +0 -0
  223. package/src/core/images/cust-logo-lightspeed-col-pos@2x.png +0 -0
  224. package/src/core/images/cust-logo-lightspeed-syst-col-pos.png +0 -0
  225. package/src/core/images/cust-logo-lightspeed-syst-col-pos@2x.png +0 -0
  226. package/src/core/images/cust-logo-mentimeter-mono-pos.svg +0 -17
  227. package/src/core/images/cust-logo-split-col-pos.png +0 -0
  228. package/src/core/images/cust-logo-split-col-pos@2x.png +0 -0
  229. package/src/core/images/cust-logo-split-mono-pos.svg +0 -9
  230. package/src/core/images/cust-logo-toyota-mono-pos.svg +0 -18
  231. package/src/core/images/cust-logo-vitac-col-pos.png +0 -0
  232. package/src/core/images/cust-logo-vitac-col-pos@2x.png +0 -0
  233. package/src/core/images/cust-logo-webflow-col-pos.svg +0 -3
  234. package/src/core/images/cust-photo-hubspot-max-freiert.jpg +0 -0
  235. package/src/core/images/cust-photo-split-pato-echague.jpg +0 -0
  236. package/src/core/images/cust-photo-vitac-joe-antonio.jpg +0 -0
  237. package/src/core/images/fastest-implementation-2023.svg +0 -1
  238. package/src/core/images/flexible-companies.png +0 -0
  239. package/src/core/images/high-performer-2022.png +0 -0
  240. package/src/core/images/high-performer-2023.svg +0 -1
  241. package/src/core/images/highest-user-adoption-2022.png +0 -0
  242. package/src/core/images/highest-user-adoption-2023.svg +0 -1
  243. package/src/core/images/icon-tech-aws.svg +0 -4
  244. package/src/core/images/rocket-list-2021.png +0 -0
  245. package/src/core/images/scale-motif-open-empathetic.svg +0 -1
  246. package/src/core/images/technical-support-01-800x533.jpg +0 -0
  247. package/src/core/images/users-love-us-2022.png +0 -0
  248. package/src/core/load-sprites.js +0 -11
  249. package/src/core/react-renderer.tsx +0 -29
  250. package/src/core/remote-blogs-posts.js +0 -42
  251. package/src/core/remote-data-store.js +0 -34
  252. package/src/core/remote-data-util.js +0 -4
  253. package/src/core/remote-session-data.js +0 -58
  254. package/src/core/scripts.js +0 -10
  255. package/src/core/styles/buttons.css +0 -124
  256. package/src/core/styles/forms.css +0 -64
  257. package/src/core/styles/layout.css +0 -21
  258. package/src/core/styles/properties.css +0 -278
  259. package/src/core/styles/text.css +0 -168
  260. package/src/core/styles/toggles.css +0 -38
  261. package/src/core/styles.base.css +0 -1
  262. package/src/core/styles.components.css +0 -44
  263. package/src/core/styles.css +0 -2
  264. package/src/core/url-base.js +0 -7
  265. package/src/core/utils/syntax-highlighter-registry.js +0 -63
  266. package/src/core/utils/syntax-highlighter.css +0 -71
  267. package/src/core/utils/syntax-highlighter.js +0 -103
  268. package/src/pages/Buttons.mdx +0 -121
  269. package/src/pages/Chips.mdx +0 -136
  270. package/src/pages/Colour.mdx +0 -23
  271. package/src/pages/Forms.mdx +0 -219
  272. package/src/pages/Layout.mdx +0 -58
  273. package/src/pages/Toggles.mdx +0 -42
  274. package/src/pages/Typography.mdx +0 -206
  275. package/src/pages/utils.ts +0 -80
  276. package/src/reset/scripts.js +0 -1
  277. package/src/reset/styles/normalize.css +0 -353
  278. package/src/reset/styles/reset.css +0 -139
  279. 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
- };