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