@ably/ui 13.2.2 → 14.0.0-dev.fbce38f

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 (402) hide show
  1. package/README.md +25 -152
  2. package/core/Accordion/component.js +1 -0
  3. package/core/Code/component.css +1 -72
  4. package/core/Code/component.js +1 -1
  5. package/core/ConnectStateWrapper/component.js +1 -1
  6. package/core/ContactFooter/component.css +7 -10
  7. package/core/ContactFooter/component.js +1 -1
  8. package/core/CookieMessage/component.css +10 -13
  9. package/core/CookieMessage/component.js +1 -1
  10. package/core/CustomerLogos/component.js +1 -1
  11. package/core/DropdownMenu/component.js +1 -1
  12. package/core/FeaturedLink/component.js +1 -1
  13. package/core/Flash/component.css +19 -22
  14. package/core/Flash/component.js +1 -1
  15. package/core/Footer/component.css +22 -25
  16. package/core/Footer/component.js +1 -1
  17. package/core/Icon/component.js +1 -1
  18. package/core/Loader/component.js +1 -1
  19. package/core/Logo/component.js +1 -1
  20. package/core/Meganav/component.css +103 -106
  21. package/core/Meganav/component.js +1 -1
  22. package/core/MeganavBlogPostsList/component.js +1 -2
  23. package/core/MeganavContentCompany/component.js +1 -1
  24. package/core/MeganavContentDevelopers/component.js +1 -1
  25. package/core/MeganavContentProducts/component.js +1 -1
  26. package/core/MeganavContentUseCases/component.js +1 -1
  27. package/core/MeganavControl/component.js +1 -1
  28. package/core/MeganavControlMobileDropdown/component.js +1 -1
  29. package/core/MeganavControlMobilePanelClose/component.js +1 -1
  30. package/core/MeganavControlMobilePanelOpen/component.js +1 -1
  31. package/core/MeganavItemsDesktop/component.js +1 -1
  32. package/core/MeganavItemsMobile/component.js +1 -1
  33. package/core/MeganavItemsSignedIn/component.js +1 -1
  34. package/core/MeganavSearch/component.js +1 -1
  35. package/core/MeganavSearchAutocomplete/component.js +1 -1
  36. package/core/MeganavSearchPanel/component.js +1 -1
  37. package/core/MeganavSearchSuggestions/component.js +1 -1
  38. package/core/Notice/component.css +4 -7
  39. package/core/Notice/component.js +1 -1
  40. package/core/SignOutLink/component.js +1 -1
  41. package/core/Slider/component.css +4 -7
  42. package/core/Slider/component.js +1 -1
  43. package/core/Table/Table.js +1 -0
  44. package/core/Table/TableCell.js +1 -0
  45. package/core/Table/TableRow.js +1 -0
  46. package/core/Table/index.js +1 -0
  47. package/core/Table/stories/data.js +1 -0
  48. package/core/Tooltip/component.js +1 -0
  49. package/core/css.js +1 -0
  50. package/core/dom-query.js +1 -0
  51. package/core/hubspot-chat-toggle.js +1 -0
  52. package/core/icons/discord.svg +10 -0
  53. package/core/icons/facebook.svg +4 -0
  54. package/core/icons/github.svg +3 -0
  55. package/core/icons/glassdoor.svg +3 -0
  56. package/core/icons/google.svg +3 -0
  57. package/core/icons/icon-display-48hrs.svg +3 -0
  58. package/core/icons/icon-display-about-ably-col.svg +4 -0
  59. package/core/icons/icon-display-api-keys.svg +3 -0
  60. package/core/icons/icon-display-api.svg +3 -0
  61. package/core/icons/icon-display-asset-tracking-col.svg +18 -0
  62. package/core/icons/icon-display-browser.svg +10 -0
  63. package/core/icons/icon-display-calendar.svg +3 -0
  64. package/core/icons/icon-display-call-mobile.svg +3 -0
  65. package/core/icons/icon-display-careers-col.svg +9 -0
  66. package/core/icons/icon-display-case-studies-col.svg +5 -0
  67. package/core/icons/icon-display-chat-col.svg +4 -0
  68. package/core/icons/icon-display-chat-stack-col.svg +4 -0
  69. package/core/icons/icon-display-chat-stack.svg +4 -0
  70. package/core/icons/icon-display-cloud-servers.svg +3 -0
  71. package/core/icons/icon-display-compare-tech-col.svg +9 -0
  72. package/core/icons/icon-display-customers-col.svg +15 -0
  73. package/core/icons/icon-display-data-broadcast-col.svg +26 -0
  74. package/core/icons/icon-display-data-synchronization-col.svg +14 -0
  75. package/core/icons/icon-display-docs-col.svg +7 -0
  76. package/core/icons/icon-display-documentation.svg +3 -0
  77. package/core/icons/icon-display-events-col.svg +13 -0
  78. package/core/icons/icon-display-examples-col.svg +11 -0
  79. package/core/icons/icon-display-gdpr.svg +3 -0
  80. package/core/icons/icon-display-general-comms.svg +3 -0
  81. package/core/icons/icon-display-hipaa.svg +10 -0
  82. package/core/icons/icon-display-integrations-col.svg +8 -0
  83. package/core/icons/icon-display-it-support-access.svg +3 -0
  84. package/core/icons/icon-display-it-support-helpdesk.svg +3 -0
  85. package/core/icons/icon-display-kafka-at-the-edge-col.svg +8 -0
  86. package/core/icons/icon-display-laptop.svg +10 -0
  87. package/core/icons/icon-display-lightbulb-col.svg +10 -0
  88. package/core/icons/icon-display-live-chat.svg +3 -0
  89. package/core/icons/icon-display-map-pin.svg +3 -0
  90. package/core/icons/icon-display-message.svg +3 -0
  91. package/core/icons/icon-display-padlock-closed.svg +3 -0
  92. package/core/icons/icon-display-platform.svg +22 -0
  93. package/core/icons/icon-display-play.svg +3 -0
  94. package/core/icons/icon-display-privacy-shield-framework.svg +7 -0
  95. package/core/icons/icon-display-push-notifications-col.svg +6 -0
  96. package/core/icons/icon-display-quickstart-guides-col.svg +8 -0
  97. package/core/icons/icon-display-resources-col.svg +21 -0
  98. package/core/icons/icon-display-sdks-col.svg +11 -0
  99. package/core/icons/icon-display-servers.svg +3 -0
  100. package/core/icons/icon-display-shopping-cart.svg +10 -0
  101. package/core/icons/icon-display-sla.svg +3 -0
  102. package/core/icons/icon-display-soc2-type2.svg +3 -0
  103. package/core/icons/icon-display-tech-account-comms.svg +3 -0
  104. package/core/icons/icon-display-tutorials-demos-col.svg +25 -0
  105. package/core/icons/icon-display-virtual-events-col.svg +12 -0
  106. package/core/icons/icon-display-virtual-events.svg +12 -0
  107. package/core/icons/icon-gui-ably-badge.svg +3 -0
  108. package/core/icons/icon-gui-arrow-bidirectional-horizontal.svg +3 -0
  109. package/core/icons/icon-gui-arrow-bidirectional-vertical.svg +3 -0
  110. package/core/icons/icon-gui-arrow-down.svg +3 -0
  111. package/core/icons/icon-gui-arrow-left.svg +3 -0
  112. package/core/icons/icon-gui-arrow-right.svg +3 -0
  113. package/core/icons/icon-gui-arrow-up.svg +3 -0
  114. package/core/icons/icon-gui-burger-menu.svg +5 -0
  115. package/core/icons/icon-gui-check-circled-fill-black.svg +4 -0
  116. package/core/icons/icon-gui-check-circled-fill.svg +4 -0
  117. package/core/icons/icon-gui-check-circled.svg +3 -0
  118. package/core/icons/icon-gui-checklist-checked.svg +3 -0
  119. package/core/icons/icon-gui-clock.svg +3 -0
  120. package/core/icons/icon-gui-close.svg +3 -0
  121. package/core/icons/icon-gui-copy.svg +10 -0
  122. package/core/icons/icon-gui-cross-circled-fill.svg +4 -0
  123. package/core/icons/icon-gui-cross-circled.svg +3 -0
  124. package/core/icons/icon-gui-dash-circled.svg +3 -0
  125. package/core/icons/icon-gui-disclosure-arrow.svg +3 -0
  126. package/core/icons/icon-gui-document-generic.svg +3 -0
  127. package/core/icons/icon-gui-enlarge.svg +3 -0
  128. package/core/icons/icon-gui-external-link.svg +3 -0
  129. package/core/icons/icon-gui-filter-flow-step-1.svg +5 -0
  130. package/core/icons/icon-gui-filter-flow-step-2.svg +5 -0
  131. package/core/icons/icon-gui-filter-flow-step-3.svg +5 -0
  132. package/core/icons/icon-gui-history.svg +3 -0
  133. package/core/icons/icon-gui-info.svg +3 -0
  134. package/core/icons/icon-gui-link-arrow.svg +3 -0
  135. package/core/icons/icon-gui-link.svg +4 -0
  136. package/core/icons/icon-gui-live-chat.svg +3 -0
  137. package/core/icons/icon-gui-minus.svg +3 -0
  138. package/core/icons/icon-gui-plus.svg +3 -0
  139. package/core/icons/icon-gui-quote-marks-solid.svg +3 -0
  140. package/core/icons/icon-gui-refresh.svg +10 -0
  141. package/core/icons/icon-gui-resources.svg +3 -0
  142. package/core/icons/icon-gui-search.svg +3 -0
  143. package/core/icons/icon-gui-tick.svg +3 -0
  144. package/core/icons/icon-gui-warning.svg +5 -0
  145. package/core/icons/icon-live-updates-results-metrics-col.svg +26 -0
  146. package/core/icons/icon-multi-user-spaces-col.svg +13 -0
  147. package/core/icons/icon-social-x.svg +3 -0
  148. package/core/icons/icon-tech-apachekafka.svg +3 -0
  149. package/core/icons/linkedin.svg +3 -0
  150. package/core/icons/quote.svg +3 -0
  151. package/core/icons/stackoverflow.svg +3 -0
  152. package/core/icons/twitter.svg +3 -0
  153. package/core/icons/youtube.svg +11 -0
  154. package/core/icons.js +1 -0
  155. package/core/load-sprites.js +1 -0
  156. package/core/react-renderer.js +1 -0
  157. package/core/remote-blogs-posts.js +1 -0
  158. package/core/remote-data-store.js +1 -0
  159. package/core/remote-data-util.js +1 -0
  160. package/core/remote-session-data.js +1 -0
  161. package/core/scripts.js +1 -2
  162. package/core/sprites.svg +1 -525
  163. package/core/styles/buttons.css +122 -0
  164. package/core/styles/forms.css +62 -0
  165. package/core/styles/layout.css +19 -0
  166. package/core/styles/properties.css +276 -0
  167. package/core/styles/text.css +166 -0
  168. package/core/styles.base.css +1 -0
  169. package/core/styles.components.css +33 -0
  170. package/core/styles.css +2 -699
  171. package/core/url-base.js +1 -0
  172. package/core/utils/syntax-highlighter-registry.js +1 -0
  173. package/core/utils/syntax-highlighter.css +67 -0
  174. package/core/utils/syntax-highlighter.js +1 -0
  175. package/package.json +39 -34
  176. package/reset/scripts.js +1 -1
  177. package/reset/styles/normalize.css +353 -0
  178. package/reset/styles/reset.css +129 -0
  179. package/reset/styles.css +2 -477
  180. package/src/core/Accordion/Accordion.stories.tsx +39 -0
  181. package/src/core/Accordion/component.tsx +147 -0
  182. package/src/core/Code/Code.stories.tsx +71 -0
  183. package/src/core/Code/component.tsx +45 -0
  184. package/src/core/ConnectStateWrapper/{component.jsx → component.tsx} +7 -3
  185. package/src/core/ContactFooter/ContactFooter.stories.tsx +11 -0
  186. package/src/core/ContactFooter/component.css +7 -9
  187. package/src/core/ContactFooter/component.tsx +92 -0
  188. package/src/core/CookieMessage/CookieMessage.stories.tsx +12 -0
  189. package/src/core/CookieMessage/component.css +10 -12
  190. package/src/core/CookieMessage/{component.jsx → component.tsx} +15 -10
  191. package/src/core/CustomerLogos/CustomerLogos.stories.tsx +43 -0
  192. package/src/core/CustomerLogos/component.tsx +35 -0
  193. package/src/core/DropdownMenu/DropdownMenu.stories.tsx +48 -0
  194. package/src/core/DropdownMenu/{component.jsx → component.tsx} +64 -36
  195. package/src/core/FeaturedLink/FeaturedLink.stories.tsx +43 -0
  196. package/src/core/FeaturedLink/{component.jsx → component.tsx} +28 -17
  197. package/src/core/Flash/Flash.stories.tsx +37 -0
  198. package/src/core/Flash/component.css +19 -21
  199. package/src/core/Flash/{component.jsx → component.tsx} +78 -39
  200. package/src/core/Footer/Footer.stories.tsx +26 -0
  201. package/src/core/Footer/component.css +22 -24
  202. package/src/core/Footer/{component.jsx → component.tsx} +237 -70
  203. package/src/core/Icon/Icon.stories.tsx +150 -0
  204. package/src/core/Icon/component.tsx +26 -0
  205. package/src/core/Loader/Loader.stories.tsx +21 -0
  206. package/src/core/Loader/{component.jsx → component.tsx} +11 -8
  207. package/src/core/Logo/Logo.stories.tsx +12 -0
  208. package/src/core/Logo/component.tsx +29 -0
  209. package/src/core/Meganav/Meganav.stories.tsx +86 -0
  210. package/src/core/Meganav/component.css +103 -105
  211. package/src/core/Meganav/component.js +6 -7
  212. package/src/core/Meganav/component.tsx +228 -0
  213. package/src/core/MeganavBlogPostsList/{component.jsx → component.tsx} +15 -14
  214. package/src/core/MeganavContentCompany/{component.jsx → component.tsx} +82 -33
  215. package/src/core/MeganavContentDevelopers/{component.jsx → component.tsx} +98 -34
  216. package/src/core/MeganavContentProducts/component.tsx +165 -0
  217. package/src/core/MeganavContentUseCases/component.tsx +244 -0
  218. package/src/core/MeganavControl/{component.jsx → component.tsx} +18 -12
  219. package/src/core/MeganavControlMobileDropdown/{component.jsx → component.tsx} +3 -7
  220. package/src/core/MeganavControlMobilePanelClose/{component.jsx → component.tsx} +16 -9
  221. package/src/core/MeganavControlMobilePanelOpen/component.tsx +32 -0
  222. package/src/core/MeganavItemsDesktop/component.tsx +68 -0
  223. package/src/core/MeganavItemsMobile/component.tsx +197 -0
  224. package/src/core/MeganavItemsSignedIn/{component.jsx → component.tsx} +59 -23
  225. package/src/core/MeganavSearch/component.tsx +36 -0
  226. package/src/core/MeganavSearchAutocomplete/component.tsx +12 -0
  227. package/src/core/MeganavSearchPanel/component.tsx +52 -0
  228. package/src/core/MeganavSearchSuggestions/component.tsx +62 -0
  229. package/src/core/Notice/component.css +4 -6
  230. package/src/core/Notice/component.js +1 -1
  231. package/src/core/Notice/component.tsx +104 -0
  232. package/src/core/SignOutLink/component.tsx +51 -0
  233. package/src/core/Slider/Slider.stories.tsx +45 -0
  234. package/src/core/Slider/component.css +4 -6
  235. package/src/core/Slider/component.tsx +112 -0
  236. package/src/core/Table/Table.tsx +30 -0
  237. package/src/core/Table/TableCell.tsx +84 -0
  238. package/src/core/Table/TableRow.tsx +25 -0
  239. package/src/core/Table/index.ts +24 -0
  240. package/src/core/Table/stories/Table.stories.tsx +12 -0
  241. package/src/core/Table/stories/data.tsx +113 -0
  242. package/src/core/Tooltip/Tooltip.stories.tsx +27 -0
  243. package/src/core/Tooltip/component.tsx +60 -0
  244. package/src/core/icons.js +6 -0
  245. package/src/core/{react-renderer.js → react-renderer.tsx} +9 -7
  246. package/src/core/styles/buttons.css +121 -123
  247. package/src/core/styles/forms.css +49 -51
  248. package/src/core/styles/layout.css +14 -16
  249. package/src/core/styles/properties.css +250 -259
  250. package/src/core/styles/text.css +165 -167
  251. package/src/core/styles.components.css +22 -24
  252. package/src/core/utils/syntax-highlighter.css +55 -59
  253. package/src/pages/Buttons.mdx +121 -0
  254. package/src/pages/Chips.mdx +136 -0
  255. package/src/pages/Colour.mdx +23 -0
  256. package/src/pages/Forms.mdx +173 -0
  257. package/src/pages/Layout.mdx +58 -0
  258. package/src/pages/Typography.mdx +206 -0
  259. package/src/pages/utils.ts +70 -0
  260. package/tailwind.config.js +1 -7
  261. package/tailwind.extend.js +1 -1
  262. package/core/.gitignore +0 -1
  263. package/core/Code.jsx +0 -684
  264. package/core/CompanyAutocomplete/component.css +0 -46
  265. package/core/CompanyAutocomplete/component.js +0 -2
  266. package/core/CompanyAutocomplete/component.js.LICENSE.txt +0 -1
  267. package/core/ConnectStateWrapper.jsx +0 -222
  268. package/core/ContactFooter.jsx +0 -342
  269. package/core/CookieMessage.jsx +0 -204
  270. package/core/CustomerLogos.jsx +0 -144
  271. package/core/DropdownMenu.jsx +0 -313
  272. package/core/FeatureFooter/component.css +0 -13
  273. package/core/FeatureFooter/component.js +0 -1
  274. package/core/FeaturedLink.jsx +0 -236
  275. package/core/Flash.jsx +0 -622
  276. package/core/Footer.jsx +0 -587
  277. package/core/Icon.jsx +0 -152
  278. package/core/Loader.jsx +0 -154
  279. package/core/Logo.jsx +0 -147
  280. package/core/Meganav.jsx +0 -4146
  281. package/core/MeganavBlogPostsList/component.js.LICENSE.txt +0 -1
  282. package/core/MeganavBlogPostsList.jsx +0 -291
  283. package/core/MeganavContentCompany.jsx +0 -1053
  284. package/core/MeganavContentDevelopers.jsx +0 -334
  285. package/core/MeganavContentProducts.jsx +0 -368
  286. package/core/MeganavContentUseCases.jsx +0 -341
  287. package/core/MeganavControl.jsx +0 -199
  288. package/core/MeganavControlMobileDropdown.jsx +0 -197
  289. package/core/MeganavControlMobilePanelClose.jsx +0 -198
  290. package/core/MeganavControlMobilePanelOpen.jsx +0 -193
  291. package/core/MeganavItemsDesktop.jsx +0 -279
  292. package/core/MeganavItemsMobile.jsx +0 -684
  293. package/core/MeganavItemsSignedIn.jsx +0 -638
  294. package/core/MeganavSearch.jsx +0 -429
  295. package/core/MeganavSearchAutocomplete.jsx +0 -117
  296. package/core/MeganavSearchPanel.jsx +0 -381
  297. package/core/MeganavSearchSuggestions.jsx +0 -294
  298. package/core/Notice.jsx +0 -914
  299. package/core/Showcase/component.css +0 -31
  300. package/core/Showcase/component.js +0 -1
  301. package/core/Showcase.jsx +0 -17
  302. package/core/SignOutLink.jsx +0 -157
  303. package/core/Slider.jsx +0 -400
  304. package/core/Uptime/component.css +0 -128
  305. package/core/Uptime/component.js +0 -1
  306. package/core/Uptime.jsx +0 -890
  307. package/core/scripts.js.LICENSE.txt +0 -1
  308. package/preview/tmp/.keep +0 -0
  309. package/preview/tmp/pids/.keep +0 -0
  310. package/reset/.gitignore +0 -1
  311. package/src/core/Code/component.html.erb +0 -3
  312. package/src/core/Code/component.jsx +0 -31
  313. package/src/core/Code/component.rb +0 -12
  314. package/src/core/CompanyAutocomplete/component.css +0 -45
  315. package/src/core/CompanyAutocomplete/component.js +0 -204
  316. package/src/core/ContactFooter/component.html.erb +0 -32
  317. package/src/core/ContactFooter/component.jsx +0 -66
  318. package/src/core/ContactFooter/component.rb +0 -13
  319. package/src/core/CustomerLogos/component.html.erb +0 -9
  320. package/src/core/CustomerLogos/component.jsx +0 -28
  321. package/src/core/CustomerLogos/component.rb +0 -14
  322. package/src/core/FeatureFooter/component.css +0 -12
  323. package/src/core/FeatureFooter/component.html.erb +0 -54
  324. package/src/core/FeatureFooter/component.js +0 -7
  325. package/src/core/FeatureFooter/component.rb +0 -30
  326. package/src/core/FeaturedLink/component.html.erb +0 -15
  327. package/src/core/FeaturedLink/component.rb +0 -21
  328. package/src/core/Footer/component.html.erb +0 -256
  329. package/src/core/Footer/component.rb +0 -14
  330. package/src/core/Icon/component.html.erb +0 -3
  331. package/src/core/Icon/component.jsx +0 -19
  332. package/src/core/Icon/component.rb +0 -25
  333. package/src/core/Loader/component.html.erb +0 -18
  334. package/src/core/Loader/component.rb +0 -19
  335. package/src/core/Logo/component.html.erb +0 -3
  336. package/src/core/Logo/component.jsx +0 -20
  337. package/src/core/Logo/component.rb +0 -31
  338. package/src/core/Meganav/component.html.erb +0 -31
  339. package/src/core/Meganav/component.jsx +0 -123
  340. package/src/core/Meganav/component.rb +0 -60
  341. package/src/core/MeganavBlogPostsList/component.html.erb +0 -5
  342. package/src/core/MeganavBlogPostsList/component.rb +0 -13
  343. package/src/core/MeganavContentCompany/component.html.erb +0 -90
  344. package/src/core/MeganavContentCompany/component.rb +0 -14
  345. package/src/core/MeganavContentDevelopers/component.html.erb +0 -129
  346. package/src/core/MeganavContentDevelopers/component.rb +0 -13
  347. package/src/core/MeganavContentProducts/component.html.erb +0 -83
  348. package/src/core/MeganavContentProducts/component.jsx +0 -105
  349. package/src/core/MeganavContentProducts/component.rb +0 -14
  350. package/src/core/MeganavContentUseCases/component.html.erb +0 -135
  351. package/src/core/MeganavContentUseCases/component.jsx +0 -147
  352. package/src/core/MeganavContentUseCases/component.rb +0 -13
  353. package/src/core/MeganavControl/component.html.erb +0 -6
  354. package/src/core/MeganavControl/component.rb +0 -20
  355. package/src/core/MeganavControlMobileDropdown/component.html.erb +0 -7
  356. package/src/core/MeganavControlMobileDropdown/component.rb +0 -11
  357. package/src/core/MeganavControlMobilePanelClose/component.html.erb +0 -12
  358. package/src/core/MeganavControlMobilePanelClose/component.rb +0 -12
  359. package/src/core/MeganavControlMobilePanelOpen/component.html.erb +0 -7
  360. package/src/core/MeganavControlMobilePanelOpen/component.jsx +0 -25
  361. package/src/core/MeganavControlMobilePanelOpen/component.rb +0 -9
  362. package/src/core/MeganavItemsDesktop/component.html.erb +0 -17
  363. package/src/core/MeganavItemsDesktop/component.jsx +0 -49
  364. package/src/core/MeganavItemsDesktop/component.rb +0 -23
  365. package/src/core/MeganavItemsMobile/component.html.erb +0 -75
  366. package/src/core/MeganavItemsMobile/component.jsx +0 -137
  367. package/src/core/MeganavItemsMobile/component.rb +0 -21
  368. package/src/core/MeganavItemsSignedIn/component.html.erb +0 -53
  369. package/src/core/MeganavItemsSignedIn/component.rb +0 -33
  370. package/src/core/MeganavSearch/component.html.erb +0 -15
  371. package/src/core/MeganavSearch/component.jsx +0 -33
  372. package/src/core/MeganavSearch/component.rb +0 -13
  373. package/src/core/MeganavSearchAutocomplete/component.html.erb +0 -6
  374. package/src/core/MeganavSearchAutocomplete/component.jsx +0 -14
  375. package/src/core/MeganavSearchAutocomplete/component.rb +0 -6
  376. package/src/core/MeganavSearchPanel/component.html.erb +0 -22
  377. package/src/core/MeganavSearchPanel/component.jsx +0 -39
  378. package/src/core/MeganavSearchPanel/component.rb +0 -13
  379. package/src/core/MeganavSearchSuggestions/component.html.erb +0 -22
  380. package/src/core/MeganavSearchSuggestions/component.jsx +0 -49
  381. package/src/core/MeganavSearchSuggestions/component.rb +0 -18
  382. package/src/core/Notice/component.html.erb +0 -16
  383. package/src/core/Notice/component.jsx +0 -71
  384. package/src/core/Notice/component.rb +0 -29
  385. package/src/core/Showcase/component.css +0 -30
  386. package/src/core/Showcase/component.html.erb +0 -76
  387. package/src/core/Showcase/component.js +0 -180
  388. package/src/core/Showcase/component.jsx +0 -0
  389. package/src/core/Showcase/component.rb +0 -190
  390. package/src/core/SignOutLink/component.html.erb +0 -1
  391. package/src/core/SignOutLink/component.jsx +0 -32
  392. package/src/core/SignOutLink/component.rb +0 -17
  393. package/src/core/Slider/component.html.erb +0 -28
  394. package/src/core/Slider/component.jsx +0 -86
  395. package/src/core/Slider/component.rb +0 -38
  396. package/src/core/Uptime/component.css +0 -127
  397. package/src/core/Uptime/component.html.erb +0 -0
  398. package/src/core/Uptime/component.js +0 -1
  399. package/src/core/Uptime/component.jsx +0 -183
  400. package/src/core/Uptime/component.rb +0 -7
  401. package/src/core/core.rb +0 -81
  402. /package/{preview/log/.keep → src/core/Accordion/component.js} +0 -0
@@ -1,27 +1,56 @@
1
1
  import React from "react";
2
- import T from "prop-types";
3
2
 
4
- import MeganavControl from "../MeganavControl/component.jsx";
5
- import SignOutLink from "../SignOutLink/component.jsx";
6
- import MeganavSearch from "../MeganavSearch/component.jsx";
3
+ import MeganavControl from "../MeganavControl/component.tsx";
4
+ import SignOutLink from "../SignOutLink/component.tsx";
5
+ import MeganavSearch from "../MeganavSearch/component.tsx";
6
+ import {
7
+ AbsUrl,
8
+ MeganavSessionState,
9
+ MeganavTheme,
10
+ } from "../Meganav/component.tsx";
11
+
12
+ type MeganavItemsSignedIn = {
13
+ sessionState: MeganavSessionState;
14
+ theme: MeganavTheme;
15
+ absUrl: AbsUrl;
16
+ };
7
17
 
8
18
  const truncate = (string, length) => {
9
- return string?.length && string.length > length ? `${string.slice(0, length - 1)}…` : string;
19
+ return string?.length && string.length > length
20
+ ? `${string.slice(0, length - 1)}…`
21
+ : string;
10
22
  };
11
23
 
12
- const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
13
- const links = sessionState.account ? Object.keys(sessionState.account.links).map((key) => sessionState.account.links[key]) : [];
24
+ const MeganavItemsSignedIn = ({
25
+ sessionState,
26
+ theme,
27
+ absUrl,
28
+ }: MeganavItemsSignedIn) => {
29
+ const links = sessionState.account
30
+ ? Object.keys(sessionState.account.links).map(
31
+ (key) => sessionState.account.links[key]
32
+ )
33
+ : [];
14
34
  const accountName = truncate(sessionState.accountName, 20);
15
35
  const preferredEmail = truncate(sessionState.preferredEmail, 20);
16
36
 
17
37
  return (
18
38
  <ul className="hidden md:flex items-center">
19
39
  <li className="ui-meganav-item relative">
20
- <MeganavControl ariaControls="account-panel" ariaLabel="Account" theme={theme} additionalCSS="mr-0">
40
+ <MeganavControl
41
+ ariaControls="account-panel"
42
+ ariaLabel="Account"
43
+ theme={theme}
44
+ additionalCSS="mr-0"
45
+ >
21
46
  {accountName}
22
47
  </MeganavControl>
23
48
 
24
- <div className="ui-meganav-panel-account invisible" id="account-panel" data-id="meganav-panel">
49
+ <div
50
+ className="ui-meganav-panel-account invisible"
51
+ id="account-panel"
52
+ data-id="meganav-panel"
53
+ >
25
54
  {/* Users exist without accounts in which case there is no links here */}
26
55
  {sessionState.account && (
27
56
  <>
@@ -29,7 +58,10 @@ const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
29
58
  <ul className="mb-16 mx-16">
30
59
  {links.map((item) => (
31
60
  <li key={item.href}>
32
- <a className="ui-meganav-account-link" href={absUrl(item.href)}>
61
+ <a
62
+ className="ui-meganav-account-link"
63
+ href={absUrl(item.href)}
64
+ >
33
65
  {item.text}
34
66
  </a>
35
67
  </li>
@@ -41,13 +73,19 @@ const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
41
73
  <p className="ui-meganav-overline mx-16">{preferredEmail}</p>
42
74
  <ul className="mb-8 mx-16">
43
75
  <li>
44
- <a href={absUrl(sessionState.mySettings.href)} className="ui-meganav-account-link">
76
+ <a
77
+ href={absUrl(sessionState.mySettings.href)}
78
+ className="ui-meganav-account-link"
79
+ >
45
80
  {sessionState.mySettings.text}
46
81
  </a>
47
82
  </li>
48
83
  {sessionState.myAccessTokens && (
49
84
  <li>
50
- <a href={absUrl(sessionState.myAccessTokens.href)} className="ui-meganav-account-link">
85
+ <a
86
+ href={absUrl(sessionState.myAccessTokens.href)}
87
+ className="ui-meganav-account-link"
88
+ >
51
89
  {sessionState.myAccessTokens.text}
52
90
  <span className="ui-version-tag">preview</span>
53
91
  </a>
@@ -61,7 +99,11 @@ const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
61
99
  <div className="mb-16 px-16">
62
100
  <SignOutLink absUrl={absUrl} {...sessionState.logOut}>
63
101
  {({ text, href, onClick }) => (
64
- <a onClick={onClick} href={absUrl(href)} className="ui-meganav-account-link">
102
+ <a
103
+ onClick={onClick}
104
+ href={absUrl(href)}
105
+ className="ui-meganav-account-link"
106
+ >
65
107
  {text}
66
108
  </a>
67
109
  )}
@@ -77,7 +119,10 @@ const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
77
119
 
78
120
  {sessionState.account && (
79
121
  <li>
80
- <a href={absUrl(sessionState.account.links.dashboard.href)} className="ui-btn-secondary p-btn-small">
122
+ <a
123
+ href={absUrl(sessionState.account.links.dashboard.href)}
124
+ className="ui-btn-secondary p-btn-small"
125
+ >
81
126
  Dashboard
82
127
  </a>
83
128
  </li>
@@ -86,13 +131,4 @@ const MeganavItemsSignedIn = ({ sessionState, theme, absUrl }) => {
86
131
  );
87
132
  };
88
133
 
89
- MeganavItemsSignedIn.propTypes = {
90
- sessionState: T.object,
91
- paths: T.shape({
92
- iconSprites: T.string,
93
- }),
94
- theme: T.object,
95
- absUrl: T.func,
96
- };
97
-
98
134
  export default MeganavItemsSignedIn;
@@ -0,0 +1,36 @@
1
+ import React from "react";
2
+
3
+ import Icon from "../Icon/component.tsx";
4
+ import MeganavSearchPanel from "../MeganavSearchPanel/component.tsx";
5
+ import { AbsUrl } from "../Meganav/component.tsx";
6
+
7
+ const MeganavSearch = ({ absUrl }: { absUrl: AbsUrl }) => (
8
+ <>
9
+ <button
10
+ type="button"
11
+ data-id="meganav-control"
12
+ data-control="search"
13
+ className="h-64 w-24 px-24 pr-48 py-20 group focus:outline-none"
14
+ aria-expanded="false"
15
+ aria-controls="panel-search"
16
+ aria-label={`Show Search Panel`}
17
+ >
18
+ <Icon
19
+ name="icon-gui-search"
20
+ color="text-cool-black"
21
+ size="1.5rem"
22
+ additionalCSS="group-hover:text-gui-hover group-focus:text-gui-focus"
23
+ />
24
+ </button>
25
+
26
+ <div
27
+ className="ui-meganav-panel invisible"
28
+ id="panel-search"
29
+ data-id="meganav-panel"
30
+ >
31
+ <MeganavSearchPanel absUrl={absUrl} />
32
+ </div>
33
+ </>
34
+ );
35
+
36
+ export default MeganavSearch;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+
3
+ const MeganavSearchAutocomplete = () => (
4
+ <div
5
+ className="absolute w-full mt-8 z-10 hidden shadow-container rounded-lg bg-white border border-mid-grey"
6
+ data-id="meganav-search-autocomplete-container"
7
+ >
8
+ <ol className="m-16" data-id="meganav-search-autocomplete-list"></ol>
9
+ </div>
10
+ );
11
+
12
+ export default MeganavSearchAutocomplete;
@@ -0,0 +1,52 @@
1
+ import React from "react";
2
+
3
+ import Icon from "../Icon/component.tsx";
4
+ import MeganavSearchSuggestions from "../MeganavSearchSuggestions/component.tsx";
5
+ import MeganavSearchAutocomplete from "../MeganavSearchAutocomplete/component.tsx";
6
+ import { AbsUrl } from "../Meganav/component.tsx";
7
+
8
+ const MeganavSearchPanel = ({ absUrl }: { absUrl: AbsUrl }) => (
9
+ <section className="ui-meganav-content grid-cols-12">
10
+ <div className="col-span-8">
11
+ <div className="mb-32">
12
+ <form
13
+ className="flex items-start"
14
+ action={absUrl("/search")}
15
+ method="get"
16
+ >
17
+ <div className="relative w-full">
18
+ <Icon
19
+ name="icon-gui-search"
20
+ color="text-cool-black"
21
+ size="1.5rem"
22
+ additionalCSS="absolute top-12 left-16"
23
+ />
24
+ <input
25
+ type="search"
26
+ name="q"
27
+ className="ui-input pl-48 h-48"
28
+ placeholder="Search"
29
+ autoComplete="off"
30
+ data-id="meganav-search-input"
31
+ />
32
+
33
+ <MeganavSearchAutocomplete />
34
+ </div>
35
+
36
+ <button
37
+ type="submit"
38
+ className="ui-btn-secondary flex-shrink-0 ml-8 sm:ml-16 md:ml-24 xl:ml-32"
39
+ >
40
+ Search
41
+ </button>
42
+ </form>
43
+ </div>
44
+ </div>
45
+
46
+ <div className="col-span-12">
47
+ <MeganavSearchSuggestions displaySupportLink={true} absUrl={absUrl} />
48
+ </div>
49
+ </section>
50
+ );
51
+
52
+ export default MeganavSearchPanel;
@@ -0,0 +1,62 @@
1
+ import React from "react";
2
+
3
+ import FeaturedLink from "../FeaturedLink/component.tsx";
4
+ import { AbsUrl } from "../Meganav/component.tsx";
5
+
6
+ type MeganavSearchSuggestionsProps = {
7
+ absUrl: AbsUrl;
8
+ displaySupportLink: boolean;
9
+ };
10
+
11
+ const MeganavSearchSuggestions = ({
12
+ absUrl,
13
+ displaySupportLink,
14
+ }: MeganavSearchSuggestionsProps) => (
15
+ <>
16
+ <p className="ui-text-overline2 text-cool-black py-12">Popular pages</p>
17
+
18
+ <div className="flex justify-between items-center overflow-hidden">
19
+ <ul className="flex transition-transform">
20
+ <li className="py-12 pr-8 flex-shrink-0">
21
+ <a
22
+ href={absUrl("/docs/how-ably-works")}
23
+ className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus"
24
+ >
25
+ How does Ably work?
26
+ </a>
27
+ </li>
28
+ <li className="py-12 px-8 flex-shrink-0">
29
+ <a
30
+ href={absUrl("/docs/quick-start-guide")}
31
+ className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus"
32
+ >
33
+ Quickstart guide
34
+ </a>
35
+ </li>
36
+ <li className="py-12 px-8 flex-shrink-0">
37
+ <a
38
+ href={absUrl("/docs/core-features/pubsub")}
39
+ className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus"
40
+ >
41
+ Publish/Subscribe Messaging
42
+ </a>
43
+ </li>
44
+ <li className="py-12 pl-8 flex-shrink-0">
45
+ <a
46
+ href={absUrl("/platform")}
47
+ className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus"
48
+ >
49
+ Platform
50
+ </a>
51
+ </li>
52
+ </ul>
53
+ {displaySupportLink ? (
54
+ <FeaturedLink url={absUrl("/support")} textSize="text-p2">
55
+ Support
56
+ </FeaturedLink>
57
+ ) : null}
58
+ </div>
59
+ </>
60
+ );
61
+
62
+ export default MeganavSearchSuggestions;
@@ -1,7 +1,5 @@
1
- @layer components {
2
- .ui-announcement {
3
- @apply font-sans;
4
- max-height: 37.5rem;
5
- transition: max-height 300ms;
6
- }
1
+ .ui-announcement {
2
+ @apply font-sans;
3
+ max-height: 37.5rem;
4
+ transition: max-height 300ms;
7
5
  }
@@ -3,7 +3,7 @@ import Cookie from "js-cookie";
3
3
  import throttle from "lodash.throttle";
4
4
 
5
5
  import { queryId } from "../dom-query";
6
- import { FLASH_DATA_ID } from "../Flash/component.jsx";
6
+ import { FLASH_DATA_ID } from "../Flash/component.tsx";
7
7
 
8
8
  const COOKIE_EXPIRY = 90;
9
9
  const COLLAPSE_TRIGGER_DISTANCE = 5;
@@ -0,0 +1,104 @@
1
+ import React, { ReactNode, useEffect } from "react";
2
+
3
+ import NoticeScripts from "./component.js";
4
+ import "./component.css";
5
+ import Icon from "../Icon/component.tsx";
6
+
7
+ type ContentWrapperProps = {
8
+ buttonLink: string;
9
+ children: ReactNode;
10
+ };
11
+
12
+ // TODO(jamiehenson):
13
+ // This type is a bit messed up currently due to the NoticeScripts import being interpreted as NoticeProps.
14
+ // Plan is to TS-ify the JS assets too, so this can be rectified then. The NoticeScripts-oriented props are
15
+ // the ones after the line break.
16
+ type NoticeProps = {
17
+ buttonLink?: string;
18
+ buttonLabel?: string;
19
+ bodyText?: string;
20
+ title?: string;
21
+ closeBtn?: boolean;
22
+ config?: {
23
+ collapse: boolean;
24
+ noticeId: string;
25
+ cookieId: string;
26
+ };
27
+ bgColor?: string;
28
+ textColor?: string;
29
+
30
+ bannerContainer?: Element | null;
31
+ cookieId?: string;
32
+ noticeId?: string;
33
+ options?: { collapse: boolean };
34
+ };
35
+
36
+ const contentWrapperClasses = "w-full pr-8 ui-text-p3 self-center";
37
+
38
+ const ContentWrapper = ({ buttonLink, children }: ContentWrapperProps) =>
39
+ buttonLink ? (
40
+ <a href={buttonLink} className={contentWrapperClasses}>
41
+ {children}
42
+ </a>
43
+ ) : (
44
+ <div className={contentWrapperClasses}>{children}</div>
45
+ );
46
+
47
+ const Notice = ({
48
+ buttonLink,
49
+ buttonLabel,
50
+ bodyText,
51
+ title,
52
+ config,
53
+ closeBtn,
54
+ bgColor = "bg-gradient-active-orange",
55
+ textColor = "text-white",
56
+ }: NoticeProps) => {
57
+ useEffect(() => {
58
+ NoticeScripts({
59
+ bannerContainer: document.querySelector('[data-id="ui-notice"]'),
60
+ cookieId: config?.cookieId,
61
+ noticeId: config?.noticeId,
62
+ options: {
63
+ collapse: config?.collapse || false,
64
+ },
65
+ });
66
+ }, []);
67
+
68
+ const wrapperClasses = ["ui-announcement", bgColor, textColor].join(" ");
69
+
70
+ return (
71
+ <div
72
+ className={wrapperClasses}
73
+ data-id="ui-notice"
74
+ style={{ maxHeight: 0, overflow: "hidden" }}
75
+ >
76
+ <div className="ui-grid-px py-16 max-w-screen-xl mx-auto flex items-start">
77
+ <ContentWrapper buttonLink={buttonLink ?? "#"}>
78
+ <strong className="font-bold whitespace-nowrap pr-4">{title}</strong>
79
+ <span className="pr-4">{bodyText}</span>
80
+ {buttonLabel && (
81
+ <span className="underline cursor-pointer whitespace-nowrap">
82
+ {buttonLabel}
83
+ </span>
84
+ )}
85
+ </ContentWrapper>
86
+
87
+ {closeBtn && (
88
+ <button
89
+ type="button"
90
+ className="ml-auto h-20 w-20 border-none bg-none self-baseline"
91
+ >
92
+ <Icon
93
+ name="icon-gui-close"
94
+ size="1.25rem"
95
+ color="text-cool-black"
96
+ />
97
+ </button>
98
+ )}
99
+ </div>
100
+ </div>
101
+ );
102
+ };
103
+
104
+ export default Notice;
@@ -0,0 +1,51 @@
1
+ import React, { MouseEventHandler, ReactNode, useRef } from "react";
2
+ import { AbsUrl } from "../Meganav/component.tsx";
3
+
4
+ type SignOutLinkProps = {
5
+ token: string;
6
+ href: string;
7
+ text: string;
8
+ children: ({
9
+ href,
10
+ text,
11
+ onClick,
12
+ }: {
13
+ href: string;
14
+ text: string;
15
+ onClick: MouseEventHandler<HTMLAnchorElement>;
16
+ }) => ReactNode;
17
+ absUrl: AbsUrl;
18
+ };
19
+
20
+ const SignOutLink = ({
21
+ token,
22
+ href,
23
+ text,
24
+ children,
25
+ absUrl,
26
+ }: SignOutLinkProps) => {
27
+ const formRef = useRef<HTMLFormElement>(null);
28
+
29
+ const onClick = (e) => {
30
+ formRef.current?.submit();
31
+ e.preventDefault();
32
+ };
33
+
34
+ return (
35
+ <>
36
+ <form
37
+ ref={formRef}
38
+ method="post"
39
+ action={absUrl(href)}
40
+ className="hidden"
41
+ >
42
+ <input name="_method" value="delete" type="hidden" />
43
+ <input name="authenticity_token" value={token} type="hidden" />
44
+ </form>
45
+
46
+ {children({ href, text, onClick })}
47
+ </>
48
+ );
49
+ };
50
+
51
+ export default SignOutLink;
@@ -0,0 +1,45 @@
1
+ import React, { ReactNode } from "react";
2
+ import Slider from "./component.tsx";
3
+
4
+ export default {
5
+ title: "Components/Slider",
6
+ component: Slider,
7
+ parameters: {
8
+ layout: "fullscreen",
9
+ },
10
+ tags: ["autodocs"],
11
+ };
12
+
13
+ const Slide = ({ children }: { children: ReactNode }) => (
14
+ <div className="h-full p-24 bg-white rounded">
15
+ <p className="ui-text-p2 text-center">{children}</p>
16
+ </div>
17
+ );
18
+
19
+ const slides = [
20
+ <Slide key="1">
21
+ Powers live chat, updates, analytics, and composition for millions of users.
22
+ </Slide>,
23
+ <Slide key="2">
24
+ Powers virtual venues for millions of event attendees around the world.
25
+ </Slide>,
26
+ <Slide key="3">
27
+ Provides 5 million daily users with live financial commentary and stock
28
+ tickers.
29
+ </Slide>,
30
+ <Slide key="4">Monitors live car performance data across the USA.</Slide>,
31
+ ];
32
+
33
+ export const SliderOnAllBreakpoints = {
34
+ args: {
35
+ slides,
36
+ },
37
+ };
38
+
39
+ export const SliderOnSmallBreakpointOnly = {
40
+ args: {
41
+ slides,
42
+ classes: `sm:grid-cols-${slides.length / 2} md:grid-cols-${slides.length}`,
43
+ mqEnableThreshold: () => !window.matchMedia("(min-width: 48rem)").matches,
44
+ },
45
+ };
@@ -1,8 +1,6 @@
1
- @layer components {
2
- .ui-slider-marker {
3
- font-size: 0.5rem;
4
- top: -1px;
1
+ .ui-slider-marker {
2
+ font-size: 0.5rem;
3
+ top: -1px;
5
4
 
6
- @apply leading-none px-4 relative;
7
- }
5
+ @apply leading-none px-4 relative;
8
6
  }
@@ -0,0 +1,112 @@
1
+ import React, { CSSProperties, ReactNode, useEffect, useRef } from "react";
2
+
3
+ import Icon from "../Icon/component.tsx";
4
+ import SliderScripts from "./component.js";
5
+ import "./component.css";
6
+
7
+ type SliderProps = {
8
+ slides?: ReactNode[];
9
+ classes?: string;
10
+ slideClasses?: string;
11
+ slideMinWidth?: string;
12
+ slideMaxWidth?: string;
13
+ mqEnableThreshold?: () => boolean;
14
+
15
+ container?: HTMLDivElement | null;
16
+ };
17
+
18
+ const Slider = ({
19
+ slides = [],
20
+ classes = "",
21
+ slideClasses = "",
22
+ slideMinWidth = "16.875rem",
23
+ slideMaxWidth = "1fr",
24
+ mqEnableThreshold = () => true,
25
+ ...props
26
+ }: SliderProps) => {
27
+ const containerRef = useRef<HTMLDivElement>(null);
28
+
29
+ useEffect(() => {
30
+ SliderScripts({
31
+ container: containerRef.current,
32
+ mqEnableThreshold,
33
+ });
34
+ }, []);
35
+
36
+ if (slides.length === 0) return;
37
+
38
+ return (
39
+ <div
40
+ className="w-full overflow-x-hidden"
41
+ data-id="slider"
42
+ style={
43
+ {
44
+ "--dynamic-grid-columns-count": slides.length,
45
+ "--dynamic-grid-column-min-width": slideMinWidth,
46
+ "--dynamic-grid-column-max-width": slideMaxWidth,
47
+ } as CSSProperties
48
+ }
49
+ ref={containerRef}
50
+ >
51
+ <ol
52
+ className={`grid ui-grid-gap grid-cols-dynamic transform transition-transform ${classes}`}
53
+ data-id="slider-strip"
54
+ {...props}
55
+ >
56
+ {slides.map((slide, i) => (
57
+ <li key={i} className={slideClasses} data-id="slider-slide">
58
+ {slide}
59
+ </li>
60
+ ))}
61
+ </ol>
62
+
63
+ <div
64
+ className="justify-center items-center my-24 hidden"
65
+ data-id="slider-controls"
66
+ >
67
+ <button
68
+ type="button"
69
+ className="p-0 w-24 h-24 flex items-center focus:outline-gui-focus"
70
+ data-id="slider-previous"
71
+ >
72
+ <Icon
73
+ name="icon-gui-disclosure-arrow"
74
+ size="1.5rem"
75
+ color="text-cool-black"
76
+ additionalCSS="transform rotate-180"
77
+ data-id="meganav-control-mobile-dropdown-menu"
78
+ />
79
+ </button>
80
+
81
+ <ul className="flex justify-center items-center mx-32 relative h-24">
82
+ {slides.map((_, i) => (
83
+ <li key={i}>
84
+ <span
85
+ className="ui-slider-marker text-cool-black"
86
+ data-id="slider-marker"
87
+ >
88
+ &#x2b24;
89
+ </span>{" "}
90
+ {/* ⬤ */}
91
+ </li>
92
+ ))}
93
+ </ul>
94
+
95
+ <button
96
+ type="button"
97
+ className="p-0 w-24 h-24 flex items-center focus:outline-gui-focus"
98
+ data-id="slider-next"
99
+ >
100
+ <Icon
101
+ name="icon-gui-disclosure-arrow"
102
+ size="1.5rem"
103
+ color="text-cool-black"
104
+ data-id="meganav-control-mobile-dropdown-menu"
105
+ />
106
+ </button>
107
+ </div>
108
+ </div>
109
+ );
110
+ };
111
+
112
+ export default Slider;
@@ -0,0 +1,30 @@
1
+ import React, { PropsWithChildren, ReactElement, cloneElement } from "react";
2
+
3
+ type TableProps = {
4
+ id?: string;
5
+ };
6
+
7
+ export const Table = ({ id, children }: PropsWithChildren<TableProps>) => (
8
+ <table id={id} className="ui-standard-container mb-4 sm:table-fixed">
9
+ {children}
10
+ </table>
11
+ );
12
+
13
+ export const TableBody = ({ children }: PropsWithChildren) => (
14
+ <tbody>{children}</tbody>
15
+ );
16
+
17
+ export const TableHeader = ({ children }: PropsWithChildren) => (
18
+ <thead className="sticky bg-white z-10 top-0" key="sticky-block">
19
+ {cloneElement(children as ReactElement, { isHeader: true })}
20
+ </thead>
21
+ );
22
+
23
+ export const TableRowHeader = ({ children }: PropsWithChildren) => (
24
+ <tr
25
+ className="-ml-24 mt-8 sm:ml-0 sm:mt-0 ui-text-overline1 !text-cool-black bg-light-grey sm:sticky z-10"
26
+ style={{ top: "4rem" }}
27
+ >
28
+ {cloneElement(children as ReactElement, { isRowHeader: true })}
29
+ </tr>
30
+ );