@ably/ui 14.1.0-dev.708de27 → 14.1.0-dev.f3a3c90

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