@ably/ui 13.3.0 → 14.0.0-dev.3f64b93

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 (510) hide show
  1. package/README.md +26 -155
  2. package/core/.DS_Store +0 -0
  3. package/core/Accordion/.DS_Store +0 -0
  4. package/core/Accordion.js +1 -0
  5. package/core/Code/.DS_Store +0 -0
  6. package/core/Code/component.css +1 -72
  7. package/core/Code/component.js +1 -1
  8. package/core/Code.js +1 -0
  9. package/core/ConnectStateWrapper.js +1 -0
  10. package/core/ContactFooter/.DS_Store +0 -0
  11. package/core/ContactFooter/component.css +7 -10
  12. package/core/ContactFooter/component.js +1 -1
  13. package/core/ContactFooter.js +1 -0
  14. package/core/CookieMessage/.DS_Store +0 -0
  15. package/core/CookieMessage/component.css +10 -13
  16. package/core/CookieMessage.js +1 -0
  17. package/core/CustomerLogos/.DS_Store +0 -0
  18. package/core/CustomerLogos.js +1 -0
  19. package/core/DropdownMenu/.DS_Store +0 -0
  20. package/core/DropdownMenu.js +1 -0
  21. package/core/Expander.js +1 -0
  22. package/core/FeaturedLink/.DS_Store +0 -0
  23. package/core/FeaturedLink.js +1 -0
  24. package/core/Flash/.DS_Store +0 -0
  25. package/core/Flash/component.css +19 -22
  26. package/core/Flash.js +1 -0
  27. package/core/Footer/.DS_Store +0 -0
  28. package/core/Footer/component.css +22 -25
  29. package/core/Footer.js +1 -0
  30. package/core/Icon/.DS_Store +0 -0
  31. package/core/Icon.js +1 -0
  32. package/core/Loader/.DS_Store +0 -0
  33. package/core/Loader.js +13 -0
  34. package/core/Logo/.DS_Store +0 -0
  35. package/core/Logo.js +1 -0
  36. package/core/Meganav/.DS_Store +0 -0
  37. package/core/Meganav/component.css +103 -106
  38. package/core/Meganav/component.js +1 -1
  39. package/core/Meganav.js +1 -0
  40. package/core/MeganavBlogPostsList/.DS_Store +0 -0
  41. package/core/MeganavBlogPostsList/component.js +1 -2
  42. package/core/MeganavBlogPostsList.js +1 -0
  43. package/core/MeganavContentCompany.js +1 -0
  44. package/core/MeganavContentDevelopers.js +1 -0
  45. package/core/MeganavContentProducts.js +1 -0
  46. package/core/MeganavContentUseCases.js +1 -0
  47. package/core/MeganavControl/.DS_Store +0 -0
  48. package/core/MeganavControl/component.js +1 -1
  49. package/core/MeganavControl.js +1 -0
  50. package/core/MeganavControlMobileDropdown/.DS_Store +0 -0
  51. package/core/MeganavControlMobileDropdown/component.js +1 -1
  52. package/core/MeganavControlMobileDropdown.js +1 -0
  53. package/core/MeganavControlMobilePanelClose/.DS_Store +0 -0
  54. package/core/MeganavControlMobilePanelClose/component.js +1 -1
  55. package/core/MeganavControlMobilePanelClose.js +1 -0
  56. package/core/MeganavControlMobilePanelOpen/.DS_Store +0 -0
  57. package/core/MeganavControlMobilePanelOpen/component.js +1 -1
  58. package/core/MeganavControlMobilePanelOpen.js +1 -0
  59. package/core/MeganavItemsDesktop.js +1 -0
  60. package/core/MeganavItemsMobile.js +1 -0
  61. package/core/MeganavItemsSignedIn.js +1 -0
  62. package/core/MeganavSearch.js +1 -0
  63. package/core/MeganavSearchAutocomplete/.DS_Store +0 -0
  64. package/core/MeganavSearchAutocomplete/component.js +1 -1
  65. package/core/MeganavSearchAutocomplete.js +1 -0
  66. package/core/MeganavSearchPanel.js +1 -0
  67. package/core/MeganavSearchSuggestions/.DS_Store +0 -0
  68. package/core/MeganavSearchSuggestions/component.js +1 -1
  69. package/core/MeganavSearchSuggestions.js +1 -0
  70. package/core/Notice/.DS_Store +0 -0
  71. package/core/Notice/component.css +4 -7
  72. package/core/Notice/component.js +1 -1
  73. package/core/Notice.js +1 -0
  74. package/core/SignOutLink.js +1 -0
  75. package/core/Slider/.DS_Store +0 -0
  76. package/core/Slider/component.css +34 -5
  77. package/core/Slider/component.js +1 -1
  78. package/core/Slider.js +1 -0
  79. package/core/Table/.DS_Store +0 -0
  80. package/core/Table/Table.js +1 -0
  81. package/core/Table/TableCell.js +7 -0
  82. package/core/Table/TableRow.js +1 -0
  83. package/core/Table/data.js +1 -0
  84. package/core/Table.js +1 -0
  85. package/core/Tooltip/.DS_Store +0 -0
  86. package/core/Tooltip.js +1 -0
  87. package/core/css.js +1 -0
  88. package/core/dom-query.js +1 -0
  89. package/core/hubspot-chat-toggle.js +1 -0
  90. package/core/icons/discord.svg +10 -0
  91. package/core/icons/facebook.svg +4 -0
  92. package/core/icons/github.svg +3 -0
  93. package/core/icons/glassdoor.svg +3 -0
  94. package/core/icons/google.svg +3 -0
  95. package/core/icons/icon-display-48hrs.svg +3 -0
  96. package/core/icons/icon-display-about-ably-col.svg +4 -0
  97. package/core/icons/icon-display-api-keys.svg +3 -0
  98. package/core/icons/icon-display-api.svg +3 -0
  99. package/core/icons/icon-display-asset-tracking-col.svg +18 -0
  100. package/core/icons/icon-display-browser.svg +10 -0
  101. package/core/icons/icon-display-calendar.svg +3 -0
  102. package/core/icons/icon-display-call-mobile.svg +3 -0
  103. package/core/icons/icon-display-careers-col.svg +9 -0
  104. package/core/icons/icon-display-case-studies-col.svg +5 -0
  105. package/core/icons/icon-display-chat-col.svg +4 -0
  106. package/core/icons/icon-display-chat-stack-col.svg +4 -0
  107. package/core/icons/icon-display-chat-stack.svg +4 -0
  108. package/core/icons/icon-display-cloud-servers.svg +3 -0
  109. package/core/icons/icon-display-compare-tech-col.svg +9 -0
  110. package/core/icons/icon-display-customers-col.svg +15 -0
  111. package/core/icons/icon-display-data-broadcast-col.svg +26 -0
  112. package/core/icons/icon-display-data-synchronization-col.svg +14 -0
  113. package/core/icons/icon-display-docs-col.svg +7 -0
  114. package/core/icons/icon-display-documentation.svg +3 -0
  115. package/core/icons/icon-display-events-col.svg +13 -0
  116. package/core/icons/icon-display-examples-col.svg +11 -0
  117. package/core/icons/icon-display-gdpr.svg +3 -0
  118. package/core/icons/icon-display-general-comms.svg +3 -0
  119. package/core/icons/icon-display-hipaa.svg +10 -0
  120. package/core/icons/icon-display-integrations-col.svg +8 -0
  121. package/core/icons/icon-display-it-support-access.svg +3 -0
  122. package/core/icons/icon-display-it-support-helpdesk.svg +3 -0
  123. package/core/icons/icon-display-kafka-at-the-edge-col.svg +8 -0
  124. package/core/icons/icon-display-laptop.svg +10 -0
  125. package/core/icons/icon-display-lightbulb-col.svg +10 -0
  126. package/core/icons/icon-display-live-chat.svg +3 -0
  127. package/core/icons/icon-display-map-pin.svg +3 -0
  128. package/core/icons/icon-display-message.svg +3 -0
  129. package/core/icons/icon-display-padlock-closed.svg +3 -0
  130. package/core/icons/icon-display-platform.svg +22 -0
  131. package/core/icons/icon-display-play.svg +3 -0
  132. package/core/icons/icon-display-privacy-shield-framework.svg +7 -0
  133. package/core/icons/icon-display-push-notifications-col.svg +6 -0
  134. package/core/icons/icon-display-quickstart-guides-col.svg +8 -0
  135. package/core/icons/icon-display-resources-col.svg +21 -0
  136. package/core/icons/icon-display-sdks-col.svg +11 -0
  137. package/core/icons/icon-display-servers.svg +3 -0
  138. package/core/icons/icon-display-shopping-cart.svg +10 -0
  139. package/core/icons/icon-display-sla.svg +3 -0
  140. package/core/icons/icon-display-soc2-type2.svg +3 -0
  141. package/core/icons/icon-display-tech-account-comms.svg +3 -0
  142. package/core/icons/icon-display-tutorials-demos-col.svg +25 -0
  143. package/core/icons/icon-display-virtual-events-col.svg +12 -0
  144. package/core/icons/icon-display-virtual-events.svg +12 -0
  145. package/core/icons/icon-gui-ably-badge.svg +3 -0
  146. package/core/icons/icon-gui-arrow-bidirectional-horizontal.svg +3 -0
  147. package/core/icons/icon-gui-arrow-bidirectional-vertical.svg +3 -0
  148. package/core/icons/icon-gui-arrow-down.svg +3 -0
  149. package/core/icons/icon-gui-arrow-left.svg +3 -0
  150. package/core/icons/icon-gui-arrow-right.svg +3 -0
  151. package/core/icons/icon-gui-arrow-up.svg +3 -0
  152. package/core/icons/icon-gui-burger-menu.svg +5 -0
  153. package/core/icons/icon-gui-check-circled-fill-black.svg +4 -0
  154. package/core/icons/icon-gui-check-circled-fill.svg +4 -0
  155. package/core/icons/icon-gui-check-circled.svg +3 -0
  156. package/core/icons/icon-gui-checklist-checked.svg +3 -0
  157. package/core/icons/icon-gui-clock.svg +3 -0
  158. package/core/icons/icon-gui-close.svg +3 -0
  159. package/core/icons/icon-gui-copy.svg +10 -0
  160. package/core/icons/icon-gui-cross-circled-fill.svg +4 -0
  161. package/core/icons/icon-gui-cross-circled.svg +3 -0
  162. package/core/icons/icon-gui-dash-circled.svg +3 -0
  163. package/core/icons/icon-gui-disclosure-arrow.svg +3 -0
  164. package/core/icons/icon-gui-document-generic.svg +3 -0
  165. package/core/icons/icon-gui-enlarge.svg +3 -0
  166. package/core/icons/icon-gui-external-link.svg +3 -0
  167. package/core/icons/icon-gui-filter-flow-step-1.svg +5 -0
  168. package/core/icons/icon-gui-filter-flow-step-2.svg +5 -0
  169. package/core/icons/icon-gui-filter-flow-step-3.svg +5 -0
  170. package/core/icons/icon-gui-history.svg +3 -0
  171. package/core/icons/icon-gui-info.svg +3 -0
  172. package/core/icons/icon-gui-link-arrow.svg +3 -0
  173. package/core/icons/icon-gui-link.svg +4 -0
  174. package/core/icons/icon-gui-live-chat.svg +3 -0
  175. package/core/icons/icon-gui-minus.svg +3 -0
  176. package/core/icons/icon-gui-partial.svg +4 -0
  177. package/core/icons/icon-gui-plus.svg +3 -0
  178. package/core/icons/icon-gui-quote-marks-solid.svg +3 -0
  179. package/core/icons/icon-gui-refresh.svg +10 -0
  180. package/core/icons/icon-gui-resources.svg +3 -0
  181. package/core/icons/icon-gui-search.svg +3 -0
  182. package/core/icons/icon-gui-tick.svg +3 -0
  183. package/core/icons/icon-gui-warning.svg +5 -0
  184. package/core/icons/icon-live-updates-results-metrics-col.svg +26 -0
  185. package/core/icons/icon-multi-user-spaces-col.svg +13 -0
  186. package/core/icons/icon-social-x.svg +3 -0
  187. package/core/icons/icon-tech-apachekafka.svg +3 -0
  188. package/core/icons/linkedin.svg +3 -0
  189. package/core/icons/quote.svg +3 -0
  190. package/core/icons/stackoverflow.svg +3 -0
  191. package/core/icons/twitter.svg +3 -0
  192. package/core/icons/youtube.svg +11 -0
  193. package/core/icons.js +1 -0
  194. package/core/load-sprites.js +1 -0
  195. package/core/react-renderer.js +1 -0
  196. package/core/remote-blogs-posts.js +1 -0
  197. package/core/remote-data-store.js +1 -0
  198. package/core/remote-data-util.js +1 -0
  199. package/core/remote-session-data.js +1 -0
  200. package/core/scripts.js +1 -2
  201. package/core/sprites.svg +1 -525
  202. package/core/styles/buttons.css +122 -0
  203. package/core/styles/forms.css +62 -0
  204. package/core/styles/layout.css +19 -0
  205. package/core/styles/properties.css +276 -0
  206. package/core/styles/text.css +166 -0
  207. package/core/styles.base.css +1 -0
  208. package/core/styles.components.css +33 -0
  209. package/core/styles.css +2 -699
  210. package/core/url-base.js +1 -0
  211. package/core/utils/syntax-highlighter-registry.js +1 -0
  212. package/core/utils/syntax-highlighter.css +67 -0
  213. package/core/utils/syntax-highlighter.js +1 -0
  214. package/package.json +38 -34
  215. package/reset/scripts.js +1 -1
  216. package/reset/styles/normalize.css +353 -0
  217. package/reset/styles/reset.css +129 -0
  218. package/reset/styles.css +2 -477
  219. package/src/.DS_Store +0 -0
  220. package/src/core/.DS_Store +0 -0
  221. package/src/core/Accordion/.DS_Store +0 -0
  222. package/src/core/Accordion/Accordion.stories.tsx +39 -0
  223. package/src/core/Accordion.tsx +147 -0
  224. package/src/core/Code/.DS_Store +0 -0
  225. package/src/core/Code/Code.stories.tsx +71 -0
  226. package/src/core/Code.tsx +45 -0
  227. package/src/core/{ConnectStateWrapper/component.jsx → ConnectStateWrapper.tsx} +8 -4
  228. package/src/core/ContactFooter/.DS_Store +0 -0
  229. package/src/core/ContactFooter/ContactFooter.stories.tsx +11 -0
  230. package/src/core/ContactFooter/component.css +7 -9
  231. package/src/core/ContactFooter.tsx +92 -0
  232. package/src/core/CookieMessage/.DS_Store +0 -0
  233. package/src/core/CookieMessage/CookieMessage.stories.tsx +12 -0
  234. package/src/core/CookieMessage/component.css +10 -12
  235. package/src/core/{CookieMessage/component.jsx → CookieMessage.tsx} +16 -11
  236. package/src/core/CustomerLogos/.DS_Store +0 -0
  237. package/src/core/CustomerLogos/CustomerLogos.stories.tsx +43 -0
  238. package/src/core/CustomerLogos.tsx +35 -0
  239. package/src/core/DropdownMenu/.DS_Store +0 -0
  240. package/src/core/DropdownMenu/DropdownMenu.stories.tsx +48 -0
  241. package/src/core/{DropdownMenu/component.jsx → DropdownMenu.tsx} +64 -36
  242. package/src/core/Expander/Expander.stories.tsx +132 -0
  243. package/src/core/Expander.tsx +54 -0
  244. package/src/core/FeaturedLink/.DS_Store +0 -0
  245. package/src/core/FeaturedLink/FeaturedLink.stories.tsx +43 -0
  246. package/src/core/{FeaturedLink/component.jsx → FeaturedLink.tsx} +26 -18
  247. package/src/core/Flash/.DS_Store +0 -0
  248. package/src/core/Flash/Flash.stories.tsx +37 -0
  249. package/src/core/Flash/component.css +19 -21
  250. package/src/core/{Flash/component.jsx → Flash.tsx} +78 -39
  251. package/src/core/Footer/.DS_Store +0 -0
  252. package/src/core/Footer/Footer.stories.tsx +26 -0
  253. package/src/core/Footer/component.css +22 -24
  254. package/src/core/{Footer/component.jsx → Footer.tsx} +237 -70
  255. package/src/core/Icon/.DS_Store +0 -0
  256. package/src/core/Icon/Icon.stories.tsx +151 -0
  257. package/src/core/Icon.tsx +26 -0
  258. package/src/core/Loader/.DS_Store +0 -0
  259. package/src/core/Loader/Loader.stories.tsx +21 -0
  260. package/src/core/{Loader/component.jsx → Loader.tsx} +11 -8
  261. package/src/core/Logo/.DS_Store +0 -0
  262. package/src/core/Logo/Logo.stories.tsx +12 -0
  263. package/src/core/Logo.tsx +29 -0
  264. package/src/core/Meganav/.DS_Store +0 -0
  265. package/src/core/Meganav/Meganav.stories.tsx +86 -0
  266. package/src/core/Meganav/component.css +103 -105
  267. package/src/core/Meganav/component.js +6 -7
  268. package/src/core/Meganav.tsx +226 -0
  269. package/src/core/MeganavBlogPostsList/.DS_Store +0 -0
  270. package/src/core/{MeganavBlogPostsList/component.jsx → MeganavBlogPostsList.tsx} +15 -14
  271. package/src/core/{MeganavContentCompany/component.jsx → MeganavContentCompany.tsx} +82 -33
  272. package/src/core/{MeganavContentDevelopers/component.jsx → MeganavContentDevelopers.tsx} +98 -34
  273. package/src/core/MeganavContentProducts.tsx +165 -0
  274. package/src/core/MeganavContentUseCases.tsx +244 -0
  275. package/src/core/MeganavControl/.DS_Store +0 -0
  276. package/src/core/{MeganavControl/component.jsx → MeganavControl.tsx} +18 -12
  277. package/src/core/MeganavControlMobileDropdown/.DS_Store +0 -0
  278. package/src/core/{MeganavControlMobileDropdown/component.jsx → MeganavControlMobileDropdown.tsx} +3 -7
  279. package/src/core/MeganavControlMobilePanelClose/.DS_Store +0 -0
  280. package/src/core/{MeganavControlMobilePanelClose/component.jsx → MeganavControlMobilePanelClose.tsx} +15 -9
  281. package/src/core/MeganavControlMobilePanelOpen/.DS_Store +0 -0
  282. package/src/core/MeganavControlMobilePanelOpen.tsx +31 -0
  283. package/src/core/MeganavItemsDesktop.tsx +68 -0
  284. package/src/core/MeganavItemsMobile.tsx +197 -0
  285. package/src/core/{MeganavItemsSignedIn/component.jsx → MeganavItemsSignedIn.tsx} +55 -23
  286. package/src/core/MeganavSearch.tsx +36 -0
  287. package/src/core/MeganavSearchAutocomplete/.DS_Store +0 -0
  288. package/src/core/MeganavSearchAutocomplete.tsx +12 -0
  289. package/src/core/MeganavSearchPanel.tsx +52 -0
  290. package/src/core/MeganavSearchSuggestions/.DS_Store +0 -0
  291. package/src/core/MeganavSearchSuggestions.tsx +62 -0
  292. package/src/core/Notice/.DS_Store +0 -0
  293. package/src/core/Notice/component.css +4 -6
  294. package/src/core/Notice/component.js +1 -1
  295. package/src/core/Notice.tsx +103 -0
  296. package/src/core/SignOutLink.tsx +51 -0
  297. package/src/core/Slider/.DS_Store +0 -0
  298. package/src/core/Slider/Slider.stories.tsx +98 -0
  299. package/src/core/Slider/component.css +35 -5
  300. package/src/core/Slider.tsx +193 -0
  301. package/src/core/Table/.DS_Store +0 -0
  302. package/src/core/Table/Table.stories.tsx +12 -0
  303. package/src/core/Table/Table.tsx +59 -0
  304. package/src/core/Table/TableCell.tsx +109 -0
  305. package/src/core/Table/TableRow.tsx +25 -0
  306. package/src/core/Table/data.tsx +113 -0
  307. package/src/core/Table.tsx +26 -0
  308. package/src/core/Tooltip/.DS_Store +0 -0
  309. package/src/core/Tooltip/Tooltip.stories.tsx +27 -0
  310. package/src/core/Tooltip.tsx +88 -0
  311. package/src/core/icons/icon-gui-partial.svg +4 -0
  312. package/src/core/icons.js +6 -0
  313. package/src/core/{react-renderer.js → react-renderer.tsx} +9 -7
  314. package/src/core/styles/buttons.css +121 -123
  315. package/src/core/styles/forms.css +49 -51
  316. package/src/core/styles/layout.css +14 -16
  317. package/src/core/styles/properties.css +250 -259
  318. package/src/core/styles/text.css +165 -167
  319. package/src/core/styles.components.css +22 -24
  320. package/src/core/utils/syntax-highlighter.css +55 -59
  321. package/src/pages/Buttons.mdx +121 -0
  322. package/src/pages/Chips.mdx +136 -0
  323. package/src/pages/Colour.mdx +23 -0
  324. package/src/pages/Forms.mdx +173 -0
  325. package/src/pages/Layout.mdx +58 -0
  326. package/src/pages/Typography.mdx +206 -0
  327. package/src/pages/utils.ts +70 -0
  328. package/tailwind.config.js +1 -7
  329. package/tailwind.extend.js +1 -1
  330. package/core/.gitignore +0 -1
  331. package/core/Code.jsx +0 -684
  332. package/core/CompanyAutocomplete/component.css +0 -46
  333. package/core/CompanyAutocomplete/component.js +0 -2
  334. package/core/CompanyAutocomplete/component.js.LICENSE.txt +0 -1
  335. package/core/ConnectStateWrapper/component.js +0 -1
  336. package/core/ConnectStateWrapper.jsx +0 -222
  337. package/core/ContactFooter.jsx +0 -342
  338. package/core/CookieMessage/component.js +0 -1
  339. package/core/CookieMessage.jsx +0 -204
  340. package/core/CustomerLogos/component.js +0 -1
  341. package/core/CustomerLogos.jsx +0 -144
  342. package/core/DropdownMenu/component.js +0 -1
  343. package/core/DropdownMenu.jsx +0 -313
  344. package/core/FeatureFooter/component.css +0 -13
  345. package/core/FeatureFooter/component.js +0 -1
  346. package/core/FeaturedLink/component.js +0 -1
  347. package/core/FeaturedLink.jsx +0 -241
  348. package/core/Flash/component.js +0 -1
  349. package/core/Flash.jsx +0 -622
  350. package/core/Footer/component.js +0 -1
  351. package/core/Footer.jsx +0 -587
  352. package/core/Icon/component.js +0 -1
  353. package/core/Icon.jsx +0 -152
  354. package/core/Loader/component.js +0 -1
  355. package/core/Loader.jsx +0 -154
  356. package/core/Logo/component.js +0 -1
  357. package/core/Logo.jsx +0 -147
  358. package/core/Meganav.jsx +0 -4151
  359. package/core/MeganavBlogPostsList/component.js.LICENSE.txt +0 -1
  360. package/core/MeganavBlogPostsList.jsx +0 -296
  361. package/core/MeganavContentCompany/component.js +0 -1
  362. package/core/MeganavContentCompany.jsx +0 -1058
  363. package/core/MeganavContentDevelopers/component.js +0 -1
  364. package/core/MeganavContentDevelopers.jsx +0 -334
  365. package/core/MeganavContentProducts/component.js +0 -1
  366. package/core/MeganavContentProducts.jsx +0 -373
  367. package/core/MeganavContentUseCases/component.js +0 -1
  368. package/core/MeganavContentUseCases.jsx +0 -341
  369. package/core/MeganavControl.jsx +0 -199
  370. package/core/MeganavControlMobileDropdown.jsx +0 -197
  371. package/core/MeganavControlMobilePanelClose.jsx +0 -198
  372. package/core/MeganavControlMobilePanelOpen.jsx +0 -193
  373. package/core/MeganavItemsDesktop/component.js +0 -1
  374. package/core/MeganavItemsDesktop.jsx +0 -279
  375. package/core/MeganavItemsMobile/component.js +0 -1
  376. package/core/MeganavItemsMobile.jsx +0 -689
  377. package/core/MeganavItemsSignedIn/component.js +0 -1
  378. package/core/MeganavItemsSignedIn.jsx +0 -643
  379. package/core/MeganavSearch/component.js +0 -1
  380. package/core/MeganavSearch.jsx +0 -434
  381. package/core/MeganavSearchAutocomplete.jsx +0 -117
  382. package/core/MeganavSearchPanel/component.js +0 -1
  383. package/core/MeganavSearchPanel.jsx +0 -386
  384. package/core/MeganavSearchSuggestions.jsx +0 -299
  385. package/core/Notice.jsx +0 -914
  386. package/core/Showcase/component.css +0 -31
  387. package/core/Showcase/component.js +0 -1
  388. package/core/Showcase.jsx +0 -17
  389. package/core/SignOutLink/component.js +0 -1
  390. package/core/SignOutLink.jsx +0 -157
  391. package/core/Slider.jsx +0 -400
  392. package/core/Uptime/component.css +0 -128
  393. package/core/Uptime/component.js +0 -1
  394. package/core/Uptime.jsx +0 -895
  395. package/core/scripts.js.LICENSE.txt +0 -1
  396. package/preview/log/.keep +0 -0
  397. package/preview/tmp/.keep +0 -0
  398. package/preview/tmp/pids/.keep +0 -0
  399. package/reset/.gitignore +0 -1
  400. package/src/core/Code/component.html.erb +0 -3
  401. package/src/core/Code/component.jsx +0 -31
  402. package/src/core/Code/component.rb +0 -12
  403. package/src/core/CompanyAutocomplete/component.css +0 -45
  404. package/src/core/CompanyAutocomplete/component.js +0 -204
  405. package/src/core/ConnectStateWrapper/component.js +0 -0
  406. package/src/core/ContactFooter/component.html.erb +0 -32
  407. package/src/core/ContactFooter/component.jsx +0 -66
  408. package/src/core/ContactFooter/component.rb +0 -13
  409. package/src/core/CookieMessage/component.js +0 -1
  410. package/src/core/CustomerLogos/component.html.erb +0 -9
  411. package/src/core/CustomerLogos/component.js +0 -0
  412. package/src/core/CustomerLogos/component.jsx +0 -28
  413. package/src/core/CustomerLogos/component.rb +0 -14
  414. package/src/core/DropdownMenu/component.js +0 -0
  415. package/src/core/FeatureFooter/component.css +0 -12
  416. package/src/core/FeatureFooter/component.html.erb +0 -54
  417. package/src/core/FeatureFooter/component.js +0 -7
  418. package/src/core/FeatureFooter/component.rb +0 -30
  419. package/src/core/FeaturedLink/component.html.erb +0 -15
  420. package/src/core/FeaturedLink/component.js +0 -0
  421. package/src/core/FeaturedLink/component.rb +0 -21
  422. package/src/core/Flash/component.js +0 -1
  423. package/src/core/Footer/component.html.erb +0 -256
  424. package/src/core/Footer/component.js +0 -1
  425. package/src/core/Footer/component.rb +0 -14
  426. package/src/core/Icon/component.html.erb +0 -3
  427. package/src/core/Icon/component.js +0 -0
  428. package/src/core/Icon/component.jsx +0 -19
  429. package/src/core/Icon/component.rb +0 -25
  430. package/src/core/Loader/component.html.erb +0 -18
  431. package/src/core/Loader/component.js +0 -0
  432. package/src/core/Loader/component.rb +0 -19
  433. package/src/core/Logo/component.html.erb +0 -3
  434. package/src/core/Logo/component.js +0 -0
  435. package/src/core/Logo/component.jsx +0 -20
  436. package/src/core/Logo/component.rb +0 -31
  437. package/src/core/Meganav/component.html.erb +0 -31
  438. package/src/core/Meganav/component.jsx +0 -123
  439. package/src/core/Meganav/component.rb +0 -60
  440. package/src/core/MeganavBlogPostsList/component.html.erb +0 -5
  441. package/src/core/MeganavBlogPostsList/component.rb +0 -13
  442. package/src/core/MeganavContentCompany/component.html.erb +0 -90
  443. package/src/core/MeganavContentCompany/component.js +0 -0
  444. package/src/core/MeganavContentCompany/component.rb +0 -14
  445. package/src/core/MeganavContentDevelopers/component.html.erb +0 -129
  446. package/src/core/MeganavContentDevelopers/component.js +0 -0
  447. package/src/core/MeganavContentDevelopers/component.rb +0 -13
  448. package/src/core/MeganavContentProducts/component.html.erb +0 -83
  449. package/src/core/MeganavContentProducts/component.js +0 -0
  450. package/src/core/MeganavContentProducts/component.jsx +0 -105
  451. package/src/core/MeganavContentProducts/component.rb +0 -14
  452. package/src/core/MeganavContentUseCases/component.html.erb +0 -135
  453. package/src/core/MeganavContentUseCases/component.js +0 -1
  454. package/src/core/MeganavContentUseCases/component.jsx +0 -147
  455. package/src/core/MeganavContentUseCases/component.rb +0 -13
  456. package/src/core/MeganavControl/component.html.erb +0 -6
  457. package/src/core/MeganavControl/component.rb +0 -20
  458. package/src/core/MeganavControlMobileDropdown/component.html.erb +0 -7
  459. package/src/core/MeganavControlMobileDropdown/component.rb +0 -11
  460. package/src/core/MeganavControlMobilePanelClose/component.html.erb +0 -12
  461. package/src/core/MeganavControlMobilePanelClose/component.rb +0 -12
  462. package/src/core/MeganavControlMobilePanelOpen/component.html.erb +0 -7
  463. package/src/core/MeganavControlMobilePanelOpen/component.jsx +0 -25
  464. package/src/core/MeganavControlMobilePanelOpen/component.rb +0 -9
  465. package/src/core/MeganavItemsDesktop/component.html.erb +0 -17
  466. package/src/core/MeganavItemsDesktop/component.js +0 -0
  467. package/src/core/MeganavItemsDesktop/component.jsx +0 -49
  468. package/src/core/MeganavItemsDesktop/component.rb +0 -23
  469. package/src/core/MeganavItemsMobile/component.html.erb +0 -75
  470. package/src/core/MeganavItemsMobile/component.js +0 -0
  471. package/src/core/MeganavItemsMobile/component.jsx +0 -137
  472. package/src/core/MeganavItemsMobile/component.rb +0 -21
  473. package/src/core/MeganavItemsSignedIn/component.html.erb +0 -53
  474. package/src/core/MeganavItemsSignedIn/component.js +0 -0
  475. package/src/core/MeganavItemsSignedIn/component.rb +0 -33
  476. package/src/core/MeganavSearch/component.html.erb +0 -15
  477. package/src/core/MeganavSearch/component.js +0 -0
  478. package/src/core/MeganavSearch/component.jsx +0 -33
  479. package/src/core/MeganavSearch/component.rb +0 -13
  480. package/src/core/MeganavSearchAutocomplete/component.html.erb +0 -6
  481. package/src/core/MeganavSearchAutocomplete/component.jsx +0 -14
  482. package/src/core/MeganavSearchAutocomplete/component.rb +0 -6
  483. package/src/core/MeganavSearchPanel/component.html.erb +0 -22
  484. package/src/core/MeganavSearchPanel/component.js +0 -0
  485. package/src/core/MeganavSearchPanel/component.jsx +0 -39
  486. package/src/core/MeganavSearchPanel/component.rb +0 -13
  487. package/src/core/MeganavSearchSuggestions/component.html.erb +0 -22
  488. package/src/core/MeganavSearchSuggestions/component.jsx +0 -49
  489. package/src/core/MeganavSearchSuggestions/component.rb +0 -18
  490. package/src/core/Notice/component.html.erb +0 -16
  491. package/src/core/Notice/component.jsx +0 -71
  492. package/src/core/Notice/component.rb +0 -29
  493. package/src/core/Showcase/component.css +0 -30
  494. package/src/core/Showcase/component.html.erb +0 -76
  495. package/src/core/Showcase/component.js +0 -180
  496. package/src/core/Showcase/component.jsx +0 -0
  497. package/src/core/Showcase/component.rb +0 -190
  498. package/src/core/SignOutLink/component.html.erb +0 -1
  499. package/src/core/SignOutLink/component.js +0 -0
  500. package/src/core/SignOutLink/component.jsx +0 -32
  501. package/src/core/SignOutLink/component.rb +0 -17
  502. package/src/core/Slider/component.html.erb +0 -28
  503. package/src/core/Slider/component.jsx +0 -86
  504. package/src/core/Slider/component.rb +0 -38
  505. package/src/core/Uptime/component.css +0 -127
  506. package/src/core/Uptime/component.html.erb +0 -0
  507. package/src/core/Uptime/component.js +0 -1
  508. package/src/core/Uptime/component.jsx +0 -183
  509. package/src/core/Uptime/component.rb +0 -7
  510. package/src/core/core.rb +0 -81
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+
3
+ type IconProps = {
4
+ name: string;
5
+ size?: string;
6
+ color?: string;
7
+ additionalCSS?: string;
8
+ };
9
+
10
+ const Icon = ({
11
+ name,
12
+ size = "0.75rem",
13
+ color = "",
14
+ additionalCSS = "",
15
+ ...additionalAttributes
16
+ }: IconProps) => (
17
+ <svg
18
+ className={`${color} ${additionalCSS}`}
19
+ style={{ width: size, height: size }}
20
+ {...additionalAttributes}
21
+ >
22
+ <use xlinkHref={`#sprite-${name}`} />
23
+ </svg>
24
+ );
25
+
26
+ export default Icon;
Binary file
@@ -0,0 +1,21 @@
1
+ import Loader from "../Loader";
2
+
3
+ export default {
4
+ title: "Components/Loader",
5
+ component: Loader,
6
+ tags: ["autodocs"],
7
+ };
8
+
9
+ export const Default = {};
10
+
11
+ export const ChangedRingColor = {
12
+ args: {
13
+ ringColor: "text-light-grey",
14
+ },
15
+ };
16
+
17
+ export const HalfSize = {
18
+ args: {
19
+ size: "0.75em",
20
+ },
21
+ };
@@ -1,7 +1,16 @@
1
1
  import React from "react";
2
- import T from "prop-types";
3
2
 
4
- const Loader = ({ ringColor = "text-dark-grey", size = "1.5rem", additionalCSS = "" }) => (
3
+ type LoaderProps = {
4
+ size?: string;
5
+ ringColor?: string;
6
+ additionalCSS?: string;
7
+ };
8
+
9
+ const Loader = ({
10
+ ringColor = "text-dark-grey",
11
+ size = "1.5rem",
12
+ additionalCSS = "",
13
+ }: LoaderProps) => (
5
14
  <svg
6
15
  className={`${ringColor} ${additionalCSS}`}
7
16
  style={{ width: size, height: size }}
@@ -40,10 +49,4 @@ const Loader = ({ ringColor = "text-dark-grey", size = "1.5rem", additionalCSS =
40
49
  </svg>
41
50
  );
42
51
 
43
- Loader.propTypes = {
44
- size: T.string,
45
- ringColor: T.string,
46
- additionalCSS: T.string,
47
- };
48
-
49
52
  export default Loader;
Binary file
@@ -0,0 +1,12 @@
1
+ import Logo from "../Logo";
2
+ import logoUrl from "../images/ably-logo.png";
3
+
4
+ export default {
5
+ title: "Components/Logo",
6
+ component: Logo,
7
+ args: {
8
+ logoUrl,
9
+ },
10
+ };
11
+
12
+ export const Default = {};
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+
3
+ type LogoProps = {
4
+ dataId: string;
5
+ logoUrl: string;
6
+ href?: string;
7
+ additionalImgAttrs?: object;
8
+ additionalLinkAttrs?: object;
9
+ };
10
+
11
+ const Logo = ({
12
+ dataId,
13
+ logoUrl,
14
+ href = "/",
15
+ additionalImgAttrs,
16
+ additionalLinkAttrs,
17
+ }: LogoProps) => (
18
+ <a
19
+ href={href}
20
+ data-id={dataId}
21
+ className="block"
22
+ style={{ height: "2.125rem" }}
23
+ {...additionalLinkAttrs}
24
+ >
25
+ <img src={logoUrl} width="108px" alt="Ably logo" {...additionalImgAttrs} />
26
+ </a>
27
+ );
28
+
29
+ export default React.memo(Logo);
Binary file
@@ -0,0 +1,86 @@
1
+ import React, { useEffect } from "react";
2
+ import { rest } from "msw";
3
+
4
+ import Meganav from "../Meganav";
5
+ import loadIcons from "../icons.js";
6
+ import logo from "../images/ably-logo.png";
7
+ import ablyStack from "../images/ably-stack.svg";
8
+ import awsLogo from "../images/icon-tech-aws.svg";
9
+
10
+ import {
11
+ attachStoreToWindow,
12
+ createRemoteDataStore,
13
+ getRemoteDataStore,
14
+ } from "../remote-data-store.js";
15
+ import { reducerBlogPosts, fetchBlogPosts } from "../remote-blogs-posts.js";
16
+ import {
17
+ reducerSessionData,
18
+ fetchSessionData,
19
+ } from "../remote-session-data.js";
20
+
21
+ export default {
22
+ title: "Components/Meganav",
23
+ component: Meganav,
24
+ parameters: {
25
+ layout: "fullscreen",
26
+ msw: [
27
+ rest.get("/api/me", (_req, res, ctx) => {
28
+ return res(ctx.json({}));
29
+ }),
30
+ rest.get("/api/blog", (_req, res, ctx) => {
31
+ return res(
32
+ ctx.json([
33
+ {
34
+ title: "Achieving exactly-once delivery with Ably",
35
+ link: "https://ably.com/blog/achieving-exactly-once-message-processing-with-ably",
36
+ pubDate: "Nov 17, 2020",
37
+ },
38
+ {
39
+ title:
40
+ "Why Ably integrates with functions instead of delivering them",
41
+ link: "https://ably.com/blog/why-we-dont-offer-functions",
42
+ pubDate: "Jul 28, 2020",
43
+ },
44
+ {
45
+ title: "Adventures in BEAM optimization with our MQTT adapter",
46
+ link: "https://ably.com/blog/beam-optimization-mqtt",
47
+ pubDate: "Jul 17, 2020",
48
+ },
49
+ ])
50
+ );
51
+ }),
52
+ ],
53
+ },
54
+ };
55
+
56
+ attachStoreToWindow(
57
+ createRemoteDataStore({
58
+ ...reducerBlogPosts,
59
+ ...reducerSessionData,
60
+ })
61
+ );
62
+
63
+ const Page = () => {
64
+ useEffect(() => {
65
+ loadIcons();
66
+
67
+ const store = getRemoteDataStore();
68
+
69
+ fetchSessionData(store, "/api/me");
70
+ fetchBlogPosts(store, "/api/blog");
71
+ }, []);
72
+
73
+ return (
74
+ <Meganav
75
+ paths={{
76
+ logo,
77
+ ablyStack,
78
+ awsLogo,
79
+ }}
80
+ />
81
+ );
82
+ };
83
+
84
+ export const Default = {
85
+ render: () => <Page />,
86
+ };
@@ -1,114 +1,112 @@
1
- @layer components {
2
- .ui-meganav-wrapper {
3
- /* Define values for new stacking context defined by position: fixed */
4
- --stacking-context-meganav-dropdown: 10;
5
- --stacking-context-meganav-mobile-panel: 20;
6
-
7
- z-index: var(--stacking-context-page-meganav);
8
-
9
- @apply fixed top-0 w-full;
10
- @apply antialiased font-sans transition-colors;
11
- }
12
-
13
- .ui-meganav {
14
- height: var(--ui-meganav-height);
15
-
16
- @apply flex justify-between items-center max-w-screen-xl mx-auto;
17
- }
18
-
19
- .ui-meganav-panel,
20
- .ui-meganav-mobile-dropdown,
21
- .ui-meganav-panel-account {
22
- z-index: var(--stacking-context-meganav-dropdown);
23
-
24
- @apply absolute left-0 right-0;
25
- @apply border-mid-grey border-t shadow-container;
26
- }
27
-
28
- .ui-meganav-panel {
29
- @apply bg-white;
30
- }
31
-
32
- .ui-meganav-panel-mobile {
33
- z-index: var(--stacking-context-meganav-mobile-panel);
34
-
35
- /* Prevents momentum-based scrolling https://devdocs.io/css/-webkit-overflow-scrolling */
36
- -webkit-overflow-scrolling: auto;
37
-
38
- @apply bg-white pt-16 border-0;
39
- @apply border-mid-grey border-t shadow-container;
40
- @apply fixed top-64 left-0 right-0 overflow-y-auto;
41
- }
42
-
43
- .ui-meganav-panel-account {
44
- left: auto;
45
- min-width: 20rem;
46
- @apply bg-white rounded-t-none;
47
- }
48
-
49
- .ui-meganav-panel-split-bg {
50
- background: linear-gradient(to right, #fafafb 33%, white 33%, white 100%);
51
- }
52
-
53
- .ui-meganav-link {
54
- @apply text-menu2 font-bold block font-sans;
55
- @apply mr-12 lg:mr-24 px-0 py-20;
56
- @apply hover:text-gui-hover focus:text-gui-focus focus:outline-none;
57
- @apply transition-colors;
58
- }
59
-
60
- .ui-meganav-item {
61
- flex: 1 0 auto;
62
- }
63
-
64
- .ui-meganav-mobile-link {
65
- @apply p-menu-row relative -left-8 w-extend-8;
66
- @apply text-menu2 font-bold font-mono font-medium block text-cool-black text-left;
67
- @apply flex items-center;
68
- @apply focus:text-gui-focus focus:outline-none;
69
- }
70
-
71
- .ui-meganav-account-link {
72
- @apply block px-8 py-8 hover:bg-light-grey hover:text-gui-hover rounded relative -left-8 text-menu3 w-extend-8 font-bold font-mono;
73
- }
74
-
75
- .ui-meganav-content {
76
- @apply max-w-screen-xl py-24 lg:py-32 mx-auto;
77
- @apply grid grid-cols-1;
78
- @apply px-24 md:px-32 lg:px-32 xl:px-64;
79
- }
80
-
81
- /* This is implemented not as padding so we can change the color of just this space, while keeping the grid
1
+ .ui-meganav-wrapper {
2
+ /* Define values for new stacking context defined by position: fixed */
3
+ --stacking-context-meganav-dropdown: 10;
4
+ --stacking-context-meganav-mobile-panel: 20;
5
+
6
+ z-index: var(--stacking-context-page-meganav);
7
+
8
+ @apply fixed top-0 w-full;
9
+ @apply antialiased font-sans transition-colors;
10
+ }
11
+
12
+ .ui-meganav {
13
+ height: var(--ui-meganav-height);
14
+
15
+ @apply flex justify-between items-center max-w-screen-xl mx-auto;
16
+ }
17
+
18
+ .ui-meganav-panel,
19
+ .ui-meganav-mobile-dropdown,
20
+ .ui-meganav-panel-account {
21
+ z-index: var(--stacking-context-meganav-dropdown);
22
+
23
+ @apply absolute left-0 right-0;
24
+ @apply border-mid-grey border-t shadow-container;
25
+ }
26
+
27
+ .ui-meganav-panel {
28
+ @apply bg-white;
29
+ }
30
+
31
+ .ui-meganav-panel-mobile {
32
+ z-index: var(--stacking-context-meganav-mobile-panel);
33
+
34
+ /* Prevents momentum-based scrolling https://devdocs.io/css/-webkit-overflow-scrolling */
35
+ -webkit-overflow-scrolling: auto;
36
+
37
+ @apply bg-white pt-16 border-0;
38
+ @apply border-mid-grey border-t shadow-container;
39
+ @apply fixed top-64 left-0 right-0 overflow-y-auto;
40
+ }
41
+
42
+ .ui-meganav-panel-account {
43
+ left: auto;
44
+ min-width: 20rem;
45
+ @apply bg-white rounded-t-none;
46
+ }
47
+
48
+ .ui-meganav-panel-split-bg {
49
+ background: linear-gradient(to right, #fafafb 33%, white 33%, white 100%);
50
+ }
51
+
52
+ .ui-meganav-link {
53
+ @apply text-menu2 font-bold font-sans;
54
+ @apply mr-12 lg:mr-24 px-0 py-20;
55
+ @apply hover:text-gui-hover focus:text-gui-focus focus:outline-none;
56
+ @apply transition-colors;
57
+ }
58
+
59
+ .ui-meganav-item {
60
+ flex: 1 0 auto;
61
+ }
62
+
63
+ .ui-meganav-mobile-link {
64
+ @apply p-menu-row relative -left-8 w-extend-8;
65
+ @apply text-menu2 font-mono font-medium block text-cool-black text-left;
66
+ @apply flex items-center;
67
+ @apply focus:text-gui-focus focus:outline-none;
68
+ }
69
+
70
+ .ui-meganav-account-link {
71
+ @apply block px-8 py-8 hover:bg-light-grey hover:text-gui-hover rounded relative -left-8 text-menu3 w-extend-8 font-bold font-mono;
72
+ }
73
+
74
+ .ui-meganav-content {
75
+ @apply max-w-screen-xl py-24 lg:py-32 mx-auto;
76
+ @apply grid grid-cols-1;
77
+ @apply px-24 md:px-32 lg:px-32 xl:px-64;
78
+ }
79
+
80
+ /* This is implemented not as padding so we can change the color of just this space, while keeping the grid
82
81
  as close to the designs as possible */
83
- .ui-meganav-content-spacer {
84
- @apply hidden md:block md:w-32 lg:w-32 xl:w-64 self-stretch flex-shrink-0 flex-grow-0;
85
- }
82
+ .ui-meganav-content-spacer {
83
+ @apply hidden md:block md:w-32 lg:w-32 xl:w-64 self-stretch flex-shrink-0 flex-grow-0;
84
+ }
86
85
 
87
- .ui-meganav-media {
88
- @apply block px-8 py-8 hover:bg-light-grey rounded relative -left-8 w-extend-8;
89
- }
86
+ .ui-meganav-media {
87
+ @apply block px-8 py-8 hover:bg-light-grey rounded relative -left-8 w-extend-8;
88
+ }
90
89
 
91
- .ui-meganav-media-with-image {
92
- grid-template-columns: max-content 1fr;
93
- grid-template-rows: min-content 1fr;
90
+ .ui-meganav-media-with-image {
91
+ grid-template-columns: max-content 1fr;
92
+ grid-template-rows: min-content 1fr;
94
93
 
95
- @apply block px-8 py-8 hover:bg-light-grey rounded relative -left-8 w-extend-8;
96
- @apply grid gap-x-16;
97
- }
94
+ @apply block px-8 py-8 hover:bg-light-grey rounded relative -left-8 w-extend-8;
95
+ @apply grid gap-x-16;
96
+ }
98
97
 
99
- .ui-meganav-media-heading {
100
- @apply text-menu3 text-cool-black font-bold font-sans group-hover:text-gui-hover group-focus:text-gui-focus leading-normal;
101
- }
98
+ .ui-meganav-media-heading {
99
+ @apply text-menu3 text-cool-black font-bold font-sans group-hover:text-gui-hover group-focus:text-gui-focus leading-normal;
100
+ }
102
101
 
103
- .ui-meganav-media-copy {
104
- @apply text-p3 font-sans font-medium text-dark-grey leading-normal;
105
- }
102
+ .ui-meganav-media-copy {
103
+ @apply text-p3 font-sans font-medium text-dark-grey leading-normal;
104
+ }
106
105
 
107
- .ui-meganav-overline {
108
- @apply text-overline2 text-cool-black uppercase font-medium font-mono tracking-widen-0.16 p-overline;
109
- }
106
+ .ui-meganav-overline {
107
+ @apply text-overline2 text-cool-black uppercase font-medium font-mono tracking-widen-0.16 p-overline;
108
+ }
110
109
 
111
- .ui-meganav-hr {
112
- @apply my-0 text-mid-grey;
113
- }
110
+ .ui-meganav-hr {
111
+ @apply my-0 text-mid-grey;
114
112
  }
@@ -12,13 +12,12 @@ import "./component.css";
12
12
 
13
13
  import { queryId, queryIdAll } from "../dom-query";
14
14
 
15
- import MeganavControl from "../MeganavControl/component";
16
-
17
- import MeganavControlMobileDropdown from "../MeganavControlMobileDropdown/component";
18
- import MobilePanelOpenClick from "../MeganavControlMobilePanelOpen/component";
19
- import MobilePanelCloseClick from "../MeganavControlMobilePanelClose/component";
20
- import MeganavSearchAutocomplete from "../MeganavSearchAutocomplete/component";
21
- import MeganavSearchSuggestions from "../MeganavSearchSuggestions/component";
15
+ import MeganavControl from "../MeganavControl/component.js";
16
+ import MeganavControlMobileDropdown from "../MeganavControlMobileDropdown/component.js";
17
+ import MobilePanelOpenClick from "../MeganavControlMobilePanelOpen/component.js";
18
+ import MobilePanelCloseClick from "../MeganavControlMobilePanelClose/component.js";
19
+ import MeganavSearchAutocomplete from "../MeganavSearchAutocomplete/component.js";
20
+ import MeganavSearchSuggestions from "../MeganavSearchSuggestions/component.js";
22
21
 
23
22
  // Close menu when user clicks outside of viewport
24
23
  const windowOnBlur = (closeAll) => {
@@ -0,0 +1,226 @@
1
+ import React, { ReactNode, useEffect, useState } from "react";
2
+
3
+ import { connectState } from "./remote-data-store.js";
4
+ import { selectSessionData } from "./remote-session-data.js";
5
+
6
+ import Logo from "./Logo";
7
+ import "./Meganav/component.css";
8
+ import MeganavData from "./Meganav/component.json";
9
+ import MeganavScripts from "./Meganav/component.js";
10
+ import MeganavItemsDesktop from "./MeganavItemsDesktop";
11
+ import MeganavItemsSignedIn from "./MeganavItemsSignedIn";
12
+ import MeganavItemsMobile from "./MeganavItemsMobile";
13
+ import Notice from "./Notice";
14
+ import _absUrl from "./url-base.js";
15
+ import MeganavContentProducts from "./MeganavContentProducts";
16
+ import MeganavContentUseCases from "./MeganavContentUseCases";
17
+ import MeganavContentCompany from "./MeganavContentCompany";
18
+ import MeganavContentDevelopers from "./MeganavContentDevelopers";
19
+ import MeganavSearch from "./MeganavSearch";
20
+
21
+ export type MeganavTheme = {
22
+ backgroundColor?: string;
23
+ textColor?: string;
24
+ buttonBackgroundColor?: string;
25
+ buttonTextColor?: string;
26
+ mobileMenuColor?: string;
27
+ logoTextColor?: string;
28
+ barShadow?: string;
29
+ };
30
+
31
+ export type AbsUrl = (path: string) => string;
32
+
33
+ export type MeganavPanels = {
34
+ [index: string]: ({ paths, absUrl }) => ReactNode;
35
+ };
36
+
37
+ export type MeganavSessionState = {
38
+ signedIn: boolean;
39
+ logOut: {
40
+ token: string;
41
+ href: string;
42
+ text: string;
43
+ };
44
+ accountName: string;
45
+ preferredEmail: string;
46
+ account: {
47
+ links: {
48
+ dashboard: {
49
+ href: string;
50
+ };
51
+ };
52
+ };
53
+ mySettings: {
54
+ text: string;
55
+ href: string;
56
+ };
57
+ myAccessTokens: {
58
+ text: string;
59
+ href: string;
60
+ };
61
+ };
62
+
63
+ type SignInProps = {
64
+ sessionState: MeganavSessionState;
65
+ theme: MeganavTheme;
66
+ loginLink: string;
67
+ absUrl: AbsUrl;
68
+ };
69
+
70
+ type MeganavProps = {
71
+ paths?: {
72
+ logo: string;
73
+ iconSprites: string;
74
+ ablyStack: string;
75
+ blogThumb1: string;
76
+ blogThumb2: string;
77
+ blogThumb3: string;
78
+ };
79
+
80
+ themeName: "white" | "black" | "transparentToWhite";
81
+ notice?: {
82
+ props: {
83
+ title: string;
84
+ bodyText: string;
85
+ buttonLink: string;
86
+ buttonLabel: string;
87
+ closeBtn: boolean;
88
+ };
89
+ config: {
90
+ cookieId: string;
91
+ noticeId: string;
92
+ collapse: boolean;
93
+ };
94
+ };
95
+ loginLink?: string;
96
+ urlBase?: string;
97
+ addSearchApiKey: string;
98
+ };
99
+
100
+ const SignIn = ({ sessionState, theme, loginLink, absUrl }: SignInProps) => {
101
+ return sessionState.signedIn ? (
102
+ <MeganavItemsSignedIn
103
+ absUrl={absUrl}
104
+ sessionState={sessionState}
105
+ theme={theme}
106
+ />
107
+ ) : (
108
+ <ul className="hidden md:flex items-center">
109
+ <li className="ui-meganav-item">
110
+ <a
111
+ href={absUrl("/contact")}
112
+ className={`ui-meganav-link ${theme.textColor}`}
113
+ data-id="meganav-link"
114
+ >
115
+ Contact us
116
+ </a>
117
+ </li>
118
+ <li className="ui-meganav-item">
119
+ <a
120
+ href={absUrl(loginLink)}
121
+ className={`ui-meganav-link mr-0 ${theme.textColor}`}
122
+ data-id="meganav-link"
123
+ >
124
+ Login
125
+ </a>
126
+ </li>
127
+ <li className="ui-meganav-item">
128
+ <MeganavSearch absUrl={absUrl} />
129
+ </li>
130
+ <li className="ui-meganav-item">
131
+ <a
132
+ href={absUrl("/sign-up")}
133
+ data-id="meganav-sign-up-btn"
134
+ className={`ui-btn p-btn-small ${theme.buttonBackgroundColor} ${theme.buttonTextColor}`}
135
+ >
136
+ Sign up free
137
+ </a>
138
+ </li>
139
+ </ul>
140
+ );
141
+ };
142
+
143
+ const SignInPlaceholder = () => <div />;
144
+
145
+ const panels = {
146
+ MeganavContentProducts,
147
+ MeganavContentUseCases,
148
+ MeganavContentCompany,
149
+ MeganavContentDevelopers,
150
+ };
151
+
152
+ const Meganav = ({
153
+ paths,
154
+ themeName = "white",
155
+ notice,
156
+ loginLink = "/login",
157
+ urlBase,
158
+ addSearchApiKey,
159
+ }: MeganavProps) => {
160
+ const [sessionState, setSessionState] = useState<MeganavSessionState>();
161
+
162
+ useEffect(() => {
163
+ // Note if state is never updated, sessionState stays null and never removes the placeholder.
164
+ // This makes SSR consistent (ie. we always show the placeholder)
165
+ connectState(selectSessionData, setSessionState);
166
+ }, []);
167
+
168
+ useEffect(() => {
169
+ const teardown = MeganavScripts({ themeName, addSearchApiKey });
170
+ // TODO(jamiehenson): update this when JS assets are converted to TS
171
+ // @ts-expect-error: teardown parsed as Element from JS file, cannot be coerced into Function form
172
+ return () => teardown();
173
+ }, [sessionState]);
174
+
175
+ const theme = MeganavData.themes[themeName];
176
+ const absUrl = (path) => _absUrl(path, urlBase);
177
+
178
+ return (
179
+ <nav
180
+ className={`ui-meganav-wrapper ${theme.backgroundColor} ${theme.barShadow}`}
181
+ data-id="meganav"
182
+ aria-label="Main"
183
+ >
184
+ {notice && <Notice {...notice.props} config={notice.config} />}
185
+ <div className="ui-meganav ui-grid-px">
186
+ <div className="mr-24">
187
+ <Logo
188
+ dataId="meganav-logo"
189
+ href={urlBase}
190
+ logoUrl={paths?.logo ?? ""}
191
+ />
192
+ </div>
193
+
194
+ <MeganavItemsDesktop
195
+ panels={panels}
196
+ paths={paths}
197
+ theme={theme}
198
+ absUrl={absUrl}
199
+ />
200
+
201
+ {/* Because we load the session state through fetch, we display a placeholder until fetch returns */}
202
+ {sessionState ? (
203
+ <SignIn
204
+ sessionState={sessionState}
205
+ theme={theme}
206
+ loginLink={loginLink}
207
+ absUrl={absUrl}
208
+ />
209
+ ) : (
210
+ <SignInPlaceholder />
211
+ )}
212
+
213
+ <MeganavItemsMobile
214
+ panels={panels}
215
+ sessionState={sessionState}
216
+ paths={paths}
217
+ theme={theme}
218
+ loginLink={loginLink}
219
+ absUrl={absUrl}
220
+ />
221
+ </div>
222
+ </nav>
223
+ );
224
+ };
225
+
226
+ export default Meganav;