@ably/ui 13.3.0 → 14.0.0-dev.58ef698

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 (407) hide show
  1. package/README.md +25 -152
  2. package/core/.DS_Store +0 -0
  3. package/core/Accordion/component.js +1 -0
  4. package/core/Code/component.css +1 -72
  5. package/core/Code/component.js +1 -1
  6. package/core/ConnectStateWrapper/component.js +1 -1
  7. package/core/ContactFooter/component.css +7 -10
  8. package/core/ContactFooter/component.js +1 -1
  9. package/core/CookieMessage/component.css +10 -13
  10. package/core/CookieMessage/component.js +1 -1
  11. package/core/CustomerLogos/component.js +1 -1
  12. package/core/DropdownMenu/component.js +1 -1
  13. package/core/FeaturedLink/component.js +1 -1
  14. package/core/Flash/component.css +19 -22
  15. package/core/Flash/component.js +1 -1
  16. package/core/Footer/component.css +22 -25
  17. package/core/Footer/component.js +1 -1
  18. package/core/Icon/component.js +1 -1
  19. package/core/Loader/component.js +1 -1
  20. package/core/Logo/component.js +1 -1
  21. package/core/Meganav/.DS_Store +0 -0
  22. package/core/Meganav/component.css +103 -106
  23. package/core/Meganav/component.js +1 -1
  24. package/core/MeganavBlogPostsList/component.js +1 -2
  25. package/core/MeganavContentCompany/component.js +1 -1
  26. package/core/MeganavContentDevelopers/component.js +1 -1
  27. package/core/MeganavContentProducts/component.js +1 -1
  28. package/core/MeganavContentUseCases/component.js +1 -1
  29. package/core/MeganavControl/component.js +1 -1
  30. package/core/MeganavControlMobileDropdown/component.js +1 -1
  31. package/core/MeganavControlMobilePanelClose/component.js +1 -1
  32. package/core/MeganavControlMobilePanelOpen/component.js +1 -1
  33. package/core/MeganavItemsDesktop/component.js +1 -1
  34. package/core/MeganavItemsMobile/component.js +1 -1
  35. package/core/MeganavItemsSignedIn/component.js +1 -1
  36. package/core/MeganavSearch/component.js +1 -1
  37. package/core/MeganavSearchAutocomplete/component.js +1 -1
  38. package/core/MeganavSearchPanel/component.js +1 -1
  39. package/core/MeganavSearchSuggestions/component.js +1 -1
  40. package/core/Notice/component.css +4 -7
  41. package/core/Notice/component.js +1 -1
  42. package/core/SignOutLink/component.js +1 -1
  43. package/core/Slider/component.css +4 -7
  44. package/core/Slider/component.js +1 -1
  45. package/core/Table/Table.js +1 -0
  46. package/core/Table/TableCell.js +1 -0
  47. package/core/Table/TableRow.js +1 -0
  48. package/core/Table/index.js +1 -0
  49. package/core/Table/stories/data.js +1 -0
  50. package/core/Tooltip/component.js +1 -0
  51. package/core/css.js +1 -0
  52. package/core/dom-query.js +1 -0
  53. package/core/hubspot-chat-toggle.js +1 -0
  54. package/core/icons/discord.svg +10 -0
  55. package/core/icons/facebook.svg +4 -0
  56. package/core/icons/github.svg +3 -0
  57. package/core/icons/glassdoor.svg +3 -0
  58. package/core/icons/google.svg +3 -0
  59. package/core/icons/icon-display-48hrs.svg +3 -0
  60. package/core/icons/icon-display-about-ably-col.svg +4 -0
  61. package/core/icons/icon-display-api-keys.svg +3 -0
  62. package/core/icons/icon-display-api.svg +3 -0
  63. package/core/icons/icon-display-asset-tracking-col.svg +18 -0
  64. package/core/icons/icon-display-browser.svg +10 -0
  65. package/core/icons/icon-display-calendar.svg +3 -0
  66. package/core/icons/icon-display-call-mobile.svg +3 -0
  67. package/core/icons/icon-display-careers-col.svg +9 -0
  68. package/core/icons/icon-display-case-studies-col.svg +5 -0
  69. package/core/icons/icon-display-chat-col.svg +4 -0
  70. package/core/icons/icon-display-chat-stack-col.svg +4 -0
  71. package/core/icons/icon-display-chat-stack.svg +4 -0
  72. package/core/icons/icon-display-cloud-servers.svg +3 -0
  73. package/core/icons/icon-display-compare-tech-col.svg +9 -0
  74. package/core/icons/icon-display-customers-col.svg +15 -0
  75. package/core/icons/icon-display-data-broadcast-col.svg +26 -0
  76. package/core/icons/icon-display-data-synchronization-col.svg +14 -0
  77. package/core/icons/icon-display-docs-col.svg +7 -0
  78. package/core/icons/icon-display-documentation.svg +3 -0
  79. package/core/icons/icon-display-events-col.svg +13 -0
  80. package/core/icons/icon-display-examples-col.svg +11 -0
  81. package/core/icons/icon-display-gdpr.svg +3 -0
  82. package/core/icons/icon-display-general-comms.svg +3 -0
  83. package/core/icons/icon-display-hipaa.svg +10 -0
  84. package/core/icons/icon-display-integrations-col.svg +8 -0
  85. package/core/icons/icon-display-it-support-access.svg +3 -0
  86. package/core/icons/icon-display-it-support-helpdesk.svg +3 -0
  87. package/core/icons/icon-display-kafka-at-the-edge-col.svg +8 -0
  88. package/core/icons/icon-display-laptop.svg +10 -0
  89. package/core/icons/icon-display-lightbulb-col.svg +10 -0
  90. package/core/icons/icon-display-live-chat.svg +3 -0
  91. package/core/icons/icon-display-map-pin.svg +3 -0
  92. package/core/icons/icon-display-message.svg +3 -0
  93. package/core/icons/icon-display-padlock-closed.svg +3 -0
  94. package/core/icons/icon-display-platform.svg +22 -0
  95. package/core/icons/icon-display-play.svg +3 -0
  96. package/core/icons/icon-display-privacy-shield-framework.svg +7 -0
  97. package/core/icons/icon-display-push-notifications-col.svg +6 -0
  98. package/core/icons/icon-display-quickstart-guides-col.svg +8 -0
  99. package/core/icons/icon-display-resources-col.svg +21 -0
  100. package/core/icons/icon-display-sdks-col.svg +11 -0
  101. package/core/icons/icon-display-servers.svg +3 -0
  102. package/core/icons/icon-display-shopping-cart.svg +10 -0
  103. package/core/icons/icon-display-sla.svg +3 -0
  104. package/core/icons/icon-display-soc2-type2.svg +3 -0
  105. package/core/icons/icon-display-tech-account-comms.svg +3 -0
  106. package/core/icons/icon-display-tutorials-demos-col.svg +25 -0
  107. package/core/icons/icon-display-virtual-events-col.svg +12 -0
  108. package/core/icons/icon-display-virtual-events.svg +12 -0
  109. package/core/icons/icon-gui-ably-badge.svg +3 -0
  110. package/core/icons/icon-gui-arrow-bidirectional-horizontal.svg +3 -0
  111. package/core/icons/icon-gui-arrow-bidirectional-vertical.svg +3 -0
  112. package/core/icons/icon-gui-arrow-down.svg +3 -0
  113. package/core/icons/icon-gui-arrow-left.svg +3 -0
  114. package/core/icons/icon-gui-arrow-right.svg +3 -0
  115. package/core/icons/icon-gui-arrow-up.svg +3 -0
  116. package/core/icons/icon-gui-burger-menu.svg +5 -0
  117. package/core/icons/icon-gui-check-circled-fill-black.svg +4 -0
  118. package/core/icons/icon-gui-check-circled-fill.svg +4 -0
  119. package/core/icons/icon-gui-check-circled.svg +3 -0
  120. package/core/icons/icon-gui-checklist-checked.svg +3 -0
  121. package/core/icons/icon-gui-clock.svg +3 -0
  122. package/core/icons/icon-gui-close.svg +3 -0
  123. package/core/icons/icon-gui-copy.svg +10 -0
  124. package/core/icons/icon-gui-cross-circled-fill.svg +4 -0
  125. package/core/icons/icon-gui-cross-circled.svg +3 -0
  126. package/core/icons/icon-gui-dash-circled.svg +3 -0
  127. package/core/icons/icon-gui-disclosure-arrow.svg +3 -0
  128. package/core/icons/icon-gui-document-generic.svg +3 -0
  129. package/core/icons/icon-gui-enlarge.svg +3 -0
  130. package/core/icons/icon-gui-external-link.svg +3 -0
  131. package/core/icons/icon-gui-filter-flow-step-1.svg +5 -0
  132. package/core/icons/icon-gui-filter-flow-step-2.svg +5 -0
  133. package/core/icons/icon-gui-filter-flow-step-3.svg +5 -0
  134. package/core/icons/icon-gui-history.svg +3 -0
  135. package/core/icons/icon-gui-info.svg +3 -0
  136. package/core/icons/icon-gui-link-arrow.svg +3 -0
  137. package/core/icons/icon-gui-link.svg +4 -0
  138. package/core/icons/icon-gui-live-chat.svg +3 -0
  139. package/core/icons/icon-gui-minus.svg +3 -0
  140. package/core/icons/icon-gui-plus.svg +3 -0
  141. package/core/icons/icon-gui-quote-marks-solid.svg +3 -0
  142. package/core/icons/icon-gui-refresh.svg +10 -0
  143. package/core/icons/icon-gui-resources.svg +3 -0
  144. package/core/icons/icon-gui-search.svg +3 -0
  145. package/core/icons/icon-gui-tick.svg +3 -0
  146. package/core/icons/icon-gui-warning.svg +5 -0
  147. package/core/icons/icon-live-updates-results-metrics-col.svg +26 -0
  148. package/core/icons/icon-multi-user-spaces-col.svg +13 -0
  149. package/core/icons/icon-social-x.svg +3 -0
  150. package/core/icons/icon-tech-apachekafka.svg +3 -0
  151. package/core/icons/linkedin.svg +3 -0
  152. package/core/icons/quote.svg +3 -0
  153. package/core/icons/stackoverflow.svg +3 -0
  154. package/core/icons/twitter.svg +3 -0
  155. package/core/icons/youtube.svg +11 -0
  156. package/core/icons.js +1 -0
  157. package/core/load-sprites.js +1 -0
  158. package/core/react-renderer.js +1 -0
  159. package/core/remote-blogs-posts.js +1 -0
  160. package/core/remote-data-store.js +1 -0
  161. package/core/remote-data-util.js +1 -0
  162. package/core/remote-session-data.js +1 -0
  163. package/core/scripts.js +1 -2
  164. package/core/sprites.svg +1 -525
  165. package/core/styles/buttons.css +122 -0
  166. package/core/styles/forms.css +62 -0
  167. package/core/styles/layout.css +19 -0
  168. package/core/styles/properties.css +276 -0
  169. package/core/styles/text.css +166 -0
  170. package/core/styles.base.css +1 -0
  171. package/core/styles.components.css +33 -0
  172. package/core/styles.css +2 -699
  173. package/core/url-base.js +1 -0
  174. package/core/utils/syntax-highlighter-registry.js +1 -0
  175. package/core/utils/syntax-highlighter.css +67 -0
  176. package/core/utils/syntax-highlighter.js +1 -0
  177. package/package.json +39 -34
  178. package/reset/scripts.js +1 -1
  179. package/reset/styles/normalize.css +353 -0
  180. package/reset/styles/reset.css +129 -0
  181. package/reset/styles.css +2 -477
  182. package/src/.DS_Store +0 -0
  183. package/src/core/.DS_Store +0 -0
  184. package/src/core/Accordion/Accordion.stories.tsx +39 -0
  185. package/src/core/Accordion/component.tsx +147 -0
  186. package/src/core/Code/Code.stories.tsx +71 -0
  187. package/src/core/Code/component.tsx +45 -0
  188. package/src/core/ConnectStateWrapper/{component.jsx → component.tsx} +7 -3
  189. package/src/core/ContactFooter/ContactFooter.stories.tsx +11 -0
  190. package/src/core/ContactFooter/component.css +7 -9
  191. package/src/core/ContactFooter/component.tsx +92 -0
  192. package/src/core/CookieMessage/CookieMessage.stories.tsx +12 -0
  193. package/src/core/CookieMessage/component.css +10 -12
  194. package/src/core/CookieMessage/{component.jsx → component.tsx} +15 -10
  195. package/src/core/CustomerLogos/CustomerLogos.stories.tsx +43 -0
  196. package/src/core/CustomerLogos/component.tsx +35 -0
  197. package/src/core/DropdownMenu/DropdownMenu.stories.tsx +48 -0
  198. package/src/core/DropdownMenu/{component.jsx → component.tsx} +64 -36
  199. package/src/core/FeaturedLink/FeaturedLink.stories.tsx +43 -0
  200. package/src/core/FeaturedLink/{component.jsx → component.tsx} +26 -18
  201. package/src/core/Flash/Flash.stories.tsx +37 -0
  202. package/src/core/Flash/component.css +19 -21
  203. package/src/core/Flash/{component.jsx → component.tsx} +78 -39
  204. package/src/core/Footer/Footer.stories.tsx +26 -0
  205. package/src/core/Footer/component.css +22 -24
  206. package/src/core/Footer/{component.jsx → component.tsx} +237 -70
  207. package/src/core/Icon/Icon.stories.tsx +150 -0
  208. package/src/core/Icon/component.tsx +26 -0
  209. package/src/core/Loader/Loader.stories.tsx +21 -0
  210. package/src/core/Loader/{component.jsx → component.tsx} +11 -8
  211. package/src/core/Logo/Logo.stories.tsx +12 -0
  212. package/src/core/Logo/component.tsx +29 -0
  213. package/src/core/Meganav/.DS_Store +0 -0
  214. package/src/core/Meganav/Meganav.stories.tsx +86 -0
  215. package/src/core/Meganav/component.css +103 -105
  216. package/src/core/Meganav/component.js +6 -7
  217. package/src/core/Meganav/component.tsx +228 -0
  218. package/src/core/MeganavBlogPostsList/{component.jsx → component.tsx} +15 -14
  219. package/src/core/MeganavContentCompany/{component.jsx → component.tsx} +82 -33
  220. package/src/core/MeganavContentDevelopers/{component.jsx → component.tsx} +98 -34
  221. package/src/core/MeganavContentProducts/component.tsx +165 -0
  222. package/src/core/MeganavContentUseCases/component.tsx +244 -0
  223. package/src/core/MeganavControl/{component.jsx → component.tsx} +18 -12
  224. package/src/core/MeganavControlMobileDropdown/{component.jsx → component.tsx} +3 -7
  225. package/src/core/MeganavControlMobilePanelClose/{component.jsx → component.tsx} +16 -9
  226. package/src/core/MeganavControlMobilePanelOpen/component.tsx +32 -0
  227. package/src/core/MeganavItemsDesktop/component.tsx +68 -0
  228. package/src/core/MeganavItemsMobile/component.tsx +197 -0
  229. package/src/core/MeganavItemsSignedIn/{component.jsx → component.tsx} +59 -23
  230. package/src/core/MeganavSearch/component.tsx +36 -0
  231. package/src/core/MeganavSearchAutocomplete/component.tsx +12 -0
  232. package/src/core/MeganavSearchPanel/component.tsx +52 -0
  233. package/src/core/MeganavSearchSuggestions/component.tsx +62 -0
  234. package/src/core/Notice/component.css +4 -6
  235. package/src/core/Notice/component.js +1 -1
  236. package/src/core/Notice/component.tsx +104 -0
  237. package/src/core/SignOutLink/component.tsx +51 -0
  238. package/src/core/Slider/Slider.stories.tsx +45 -0
  239. package/src/core/Slider/component.css +4 -6
  240. package/src/core/Slider/component.tsx +112 -0
  241. package/src/core/Table/Table.tsx +30 -0
  242. package/src/core/Table/TableCell.tsx +84 -0
  243. package/src/core/Table/TableRow.tsx +25 -0
  244. package/src/core/Table/index.ts +24 -0
  245. package/src/core/Table/stories/Table.stories.tsx +12 -0
  246. package/src/core/Table/stories/data.tsx +113 -0
  247. package/src/core/Tooltip/Tooltip.stories.tsx +27 -0
  248. package/src/core/Tooltip/component.tsx +60 -0
  249. package/src/core/icons.js +6 -0
  250. package/src/core/{react-renderer.js → react-renderer.tsx} +9 -7
  251. package/src/core/styles/buttons.css +121 -123
  252. package/src/core/styles/forms.css +49 -51
  253. package/src/core/styles/layout.css +14 -16
  254. package/src/core/styles/properties.css +250 -259
  255. package/src/core/styles/text.css +165 -167
  256. package/src/core/styles.components.css +22 -24
  257. package/src/core/utils/syntax-highlighter.css +55 -59
  258. package/src/pages/Buttons.mdx +121 -0
  259. package/src/pages/Chips.mdx +136 -0
  260. package/src/pages/Colour.mdx +23 -0
  261. package/src/pages/Forms.mdx +173 -0
  262. package/src/pages/Layout.mdx +58 -0
  263. package/src/pages/Typography.mdx +206 -0
  264. package/src/pages/utils.ts +70 -0
  265. package/tailwind.config.js +1 -7
  266. package/tailwind.extend.js +1 -1
  267. package/core/.gitignore +0 -1
  268. package/core/Code.jsx +0 -684
  269. package/core/CompanyAutocomplete/component.css +0 -46
  270. package/core/CompanyAutocomplete/component.js +0 -2
  271. package/core/CompanyAutocomplete/component.js.LICENSE.txt +0 -1
  272. package/core/ConnectStateWrapper.jsx +0 -222
  273. package/core/ContactFooter.jsx +0 -342
  274. package/core/CookieMessage.jsx +0 -204
  275. package/core/CustomerLogos.jsx +0 -144
  276. package/core/DropdownMenu.jsx +0 -313
  277. package/core/FeatureFooter/component.css +0 -13
  278. package/core/FeatureFooter/component.js +0 -1
  279. package/core/FeaturedLink.jsx +0 -241
  280. package/core/Flash.jsx +0 -622
  281. package/core/Footer.jsx +0 -587
  282. package/core/Icon.jsx +0 -152
  283. package/core/Loader.jsx +0 -154
  284. package/core/Logo.jsx +0 -147
  285. package/core/Meganav.jsx +0 -4151
  286. package/core/MeganavBlogPostsList/component.js.LICENSE.txt +0 -1
  287. package/core/MeganavBlogPostsList.jsx +0 -296
  288. package/core/MeganavContentCompany.jsx +0 -1058
  289. package/core/MeganavContentDevelopers.jsx +0 -334
  290. package/core/MeganavContentProducts.jsx +0 -373
  291. package/core/MeganavContentUseCases.jsx +0 -341
  292. package/core/MeganavControl.jsx +0 -199
  293. package/core/MeganavControlMobileDropdown.jsx +0 -197
  294. package/core/MeganavControlMobilePanelClose.jsx +0 -198
  295. package/core/MeganavControlMobilePanelOpen.jsx +0 -193
  296. package/core/MeganavItemsDesktop.jsx +0 -279
  297. package/core/MeganavItemsMobile.jsx +0 -689
  298. package/core/MeganavItemsSignedIn.jsx +0 -643
  299. package/core/MeganavSearch.jsx +0 -434
  300. package/core/MeganavSearchAutocomplete.jsx +0 -117
  301. package/core/MeganavSearchPanel.jsx +0 -386
  302. package/core/MeganavSearchSuggestions.jsx +0 -299
  303. package/core/Notice.jsx +0 -914
  304. package/core/Showcase/component.css +0 -31
  305. package/core/Showcase/component.js +0 -1
  306. package/core/Showcase.jsx +0 -17
  307. package/core/SignOutLink.jsx +0 -157
  308. package/core/Slider.jsx +0 -400
  309. package/core/Uptime/component.css +0 -128
  310. package/core/Uptime/component.js +0 -1
  311. package/core/Uptime.jsx +0 -895
  312. package/core/scripts.js.LICENSE.txt +0 -1
  313. package/preview/tmp/.keep +0 -0
  314. package/preview/tmp/pids/.keep +0 -0
  315. package/reset/.gitignore +0 -1
  316. package/src/core/Code/component.html.erb +0 -3
  317. package/src/core/Code/component.jsx +0 -31
  318. package/src/core/Code/component.rb +0 -12
  319. package/src/core/CompanyAutocomplete/component.css +0 -45
  320. package/src/core/CompanyAutocomplete/component.js +0 -204
  321. package/src/core/ContactFooter/component.html.erb +0 -32
  322. package/src/core/ContactFooter/component.jsx +0 -66
  323. package/src/core/ContactFooter/component.rb +0 -13
  324. package/src/core/CustomerLogos/component.html.erb +0 -9
  325. package/src/core/CustomerLogos/component.jsx +0 -28
  326. package/src/core/CustomerLogos/component.rb +0 -14
  327. package/src/core/FeatureFooter/component.css +0 -12
  328. package/src/core/FeatureFooter/component.html.erb +0 -54
  329. package/src/core/FeatureFooter/component.js +0 -7
  330. package/src/core/FeatureFooter/component.rb +0 -30
  331. package/src/core/FeaturedLink/component.html.erb +0 -15
  332. package/src/core/FeaturedLink/component.rb +0 -21
  333. package/src/core/Footer/component.html.erb +0 -256
  334. package/src/core/Footer/component.rb +0 -14
  335. package/src/core/Icon/component.html.erb +0 -3
  336. package/src/core/Icon/component.jsx +0 -19
  337. package/src/core/Icon/component.rb +0 -25
  338. package/src/core/Loader/component.html.erb +0 -18
  339. package/src/core/Loader/component.rb +0 -19
  340. package/src/core/Logo/component.html.erb +0 -3
  341. package/src/core/Logo/component.jsx +0 -20
  342. package/src/core/Logo/component.rb +0 -31
  343. package/src/core/Meganav/component.html.erb +0 -31
  344. package/src/core/Meganav/component.jsx +0 -123
  345. package/src/core/Meganav/component.rb +0 -60
  346. package/src/core/MeganavBlogPostsList/component.html.erb +0 -5
  347. package/src/core/MeganavBlogPostsList/component.rb +0 -13
  348. package/src/core/MeganavContentCompany/component.html.erb +0 -90
  349. package/src/core/MeganavContentCompany/component.rb +0 -14
  350. package/src/core/MeganavContentDevelopers/component.html.erb +0 -129
  351. package/src/core/MeganavContentDevelopers/component.rb +0 -13
  352. package/src/core/MeganavContentProducts/component.html.erb +0 -83
  353. package/src/core/MeganavContentProducts/component.jsx +0 -105
  354. package/src/core/MeganavContentProducts/component.rb +0 -14
  355. package/src/core/MeganavContentUseCases/component.html.erb +0 -135
  356. package/src/core/MeganavContentUseCases/component.jsx +0 -147
  357. package/src/core/MeganavContentUseCases/component.rb +0 -13
  358. package/src/core/MeganavControl/component.html.erb +0 -6
  359. package/src/core/MeganavControl/component.rb +0 -20
  360. package/src/core/MeganavControlMobileDropdown/component.html.erb +0 -7
  361. package/src/core/MeganavControlMobileDropdown/component.rb +0 -11
  362. package/src/core/MeganavControlMobilePanelClose/component.html.erb +0 -12
  363. package/src/core/MeganavControlMobilePanelClose/component.rb +0 -12
  364. package/src/core/MeganavControlMobilePanelOpen/component.html.erb +0 -7
  365. package/src/core/MeganavControlMobilePanelOpen/component.jsx +0 -25
  366. package/src/core/MeganavControlMobilePanelOpen/component.rb +0 -9
  367. package/src/core/MeganavItemsDesktop/component.html.erb +0 -17
  368. package/src/core/MeganavItemsDesktop/component.jsx +0 -49
  369. package/src/core/MeganavItemsDesktop/component.rb +0 -23
  370. package/src/core/MeganavItemsMobile/component.html.erb +0 -75
  371. package/src/core/MeganavItemsMobile/component.jsx +0 -137
  372. package/src/core/MeganavItemsMobile/component.rb +0 -21
  373. package/src/core/MeganavItemsSignedIn/component.html.erb +0 -53
  374. package/src/core/MeganavItemsSignedIn/component.rb +0 -33
  375. package/src/core/MeganavSearch/component.html.erb +0 -15
  376. package/src/core/MeganavSearch/component.jsx +0 -33
  377. package/src/core/MeganavSearch/component.rb +0 -13
  378. package/src/core/MeganavSearchAutocomplete/component.html.erb +0 -6
  379. package/src/core/MeganavSearchAutocomplete/component.jsx +0 -14
  380. package/src/core/MeganavSearchAutocomplete/component.rb +0 -6
  381. package/src/core/MeganavSearchPanel/component.html.erb +0 -22
  382. package/src/core/MeganavSearchPanel/component.jsx +0 -39
  383. package/src/core/MeganavSearchPanel/component.rb +0 -13
  384. package/src/core/MeganavSearchSuggestions/component.html.erb +0 -22
  385. package/src/core/MeganavSearchSuggestions/component.jsx +0 -49
  386. package/src/core/MeganavSearchSuggestions/component.rb +0 -18
  387. package/src/core/Notice/component.html.erb +0 -16
  388. package/src/core/Notice/component.jsx +0 -71
  389. package/src/core/Notice/component.rb +0 -29
  390. package/src/core/Showcase/component.css +0 -30
  391. package/src/core/Showcase/component.html.erb +0 -76
  392. package/src/core/Showcase/component.js +0 -180
  393. package/src/core/Showcase/component.jsx +0 -0
  394. package/src/core/Showcase/component.rb +0 -190
  395. package/src/core/SignOutLink/component.html.erb +0 -1
  396. package/src/core/SignOutLink/component.jsx +0 -32
  397. package/src/core/SignOutLink/component.rb +0 -17
  398. package/src/core/Slider/component.html.erb +0 -28
  399. package/src/core/Slider/component.jsx +0 -86
  400. package/src/core/Slider/component.rb +0 -38
  401. package/src/core/Uptime/component.css +0 -127
  402. package/src/core/Uptime/component.html.erb +0 -0
  403. package/src/core/Uptime/component.js +0 -1
  404. package/src/core/Uptime/component.jsx +0 -183
  405. package/src/core/Uptime/component.rb +0 -7
  406. package/src/core/core.rb +0 -81
  407. /package/{preview/log/.keep → src/core/Accordion/component.js} +0 -0
@@ -1,53 +0,0 @@
1
- <ul class="hidden md:flex items-center">
2
- <li class="ui-meganav-item relative">
3
- <%= render(AblyUi::Core::MeganavControl.new(aria_controls: "account-panel", aria_label: "Account", theme_name: @theme_name, additional_css: "mr-0")) do %>
4
- <%= account_name %>
5
- <% end %>
6
-
7
- <div class="ui-meganav-panel-account invisible" id="account-panel" data-id="meganav-panel">
8
- <% if account? %>
9
- <p class="ui-meganav-overline mt-16 mx-16">Your account</p>
10
- <ul class="mb-16 mx-16">
11
- <% @session_data[:account][:links].each do |key, link| %>
12
- <li>
13
- <%= link_to link[:text], link[:href], class: "ui-meganav-account-link" %>
14
- </li>
15
- <% end %>
16
- </ul>
17
- <% end %>
18
-
19
- <p class="ui-meganav-overline mx-16"><%= preferred_email %></p>
20
- <ul class="mb-8 mx-16">
21
- <li>
22
- <%= link_to @session_data[:mySettings][:text], @session_data[:mySettings][:href], class: "ui-meganav-account-link" %>
23
- </li>
24
-
25
- <% if access_tokens? %>
26
- <li>
27
- <%= link_to @session_data[:myAccessTokens][:href], class: "ui-meganav-account-link" do %>
28
- <%= @session_data[:myAccessTokens][:text] %><span class="ui-version-tag">preview</span>
29
- <% end %>
30
- </li>
31
- <% end %>
32
- </ul>
33
-
34
- <hr class="ui-meganav-hr mb-16" />
35
-
36
- <div class="mb-16 px-16">
37
- <% if @session_data[:logOut] %>
38
- <%= render(AblyUi::Core::SignOutLink.new(session_data: @session_data, classes: "ui-meganav-account-link", url_base: url_base)) %>
39
- <% end %>
40
- </div>
41
- </div>
42
- </li>
43
-
44
- <li>
45
- <%= render(AblyUi::Core::MeganavSearch.new(url_base: url_base)) %>
46
- </li>
47
-
48
- <% if account? %>
49
- <li>
50
- <%= link_to "Dashboard", @session_data[:account][:links][:dashboard][:href], class: "ui-btn-secondary p-btn-small" %>
51
- </li>
52
- <% end %>
53
- </ul>
@@ -1,33 +0,0 @@
1
- module AblyUi
2
- module Core
3
- class MeganavItemsSignedIn < ViewComponent::Base
4
- include MeganavConfig
5
- include Util
6
-
7
- attr_reader :url_base
8
-
9
- def initialize(session_data:, theme_name:, url_base:)
10
- @theme_name = theme_name
11
- @session_data = session_data
12
- @url_base = url_base
13
- end
14
-
15
- def account?
16
- @session_data[:account].present?
17
- end
18
-
19
- # Access tokens are behind a feature flag
20
- def access_tokens?
21
- @session_data[:myAccessTokens].present?
22
- end
23
-
24
- def account_name
25
- truncate(@session_data[:accountName], length: 20)
26
- end
27
-
28
- def preferred_email
29
- truncate(@session_data[:preferredEmail], length: 20)
30
- end
31
- end
32
- end
33
- end
@@ -1,15 +0,0 @@
1
- <button
2
- type="button"
3
- data-id="meganav-control"
4
- data-control="search"
5
- class="h-64 w-24 px-24 pr-48 py-20 group focus:outline-none"
6
- aria-expanded="false"
7
- aria-controls="panel-search"
8
- aria-label="Show Search Panel"
9
- >
10
- <%= render(AblyUi::Core::Icon.new(name: "icon-gui-search", size: "1.5rem", color: "text-cool-black", additional_css: "group-hover:text-gui-hover group-focus:text-gui-focus")) %>
11
- </button>
12
-
13
- <div class="ui-meganav-panel invisible" id="panel-search" data-id="meganav-panel">
14
- <%= render(AblyUi::Core::MeganavSearchPanel.new(url_base: url_base)) %>
15
- </div>
@@ -1,33 +0,0 @@
1
- import React from "react";
2
- import T from "prop-types";
3
-
4
- import Icon from "../Icon/component.jsx";
5
- import MeganavSearchPanel from "../MeganavSearchPanel/component.jsx";
6
-
7
- const MeganavSearch = ({ absUrl }) => {
8
- return (
9
- <>
10
- <button
11
- type="button"
12
- data-id="meganav-control"
13
- data-control="search"
14
- className="h-64 w-24 px-24 pr-48 py-20 group focus:outline-none"
15
- aria-expanded="false"
16
- aria-controls="panel-search"
17
- aria-label={`Show Search Panel`}
18
- >
19
- <Icon name="icon-gui-search" color="text-cool-black" size="1.5rem" additionalCSS="group-hover:text-gui-hover group-focus:text-gui-focus" />
20
- </button>
21
-
22
- <div className="ui-meganav-panel invisible" id="panel-search" data-id="meganav-panel">
23
- <MeganavSearchPanel absUrl={absUrl} />
24
- </div>
25
- </>
26
- );
27
- };
28
-
29
- MeganavSearch.propTypes = {
30
- absUrl: T.func,
31
- };
32
-
33
- export default MeganavSearch;
@@ -1,13 +0,0 @@
1
- module AblyUi
2
- module Core
3
- class MeganavSearch < ViewComponent::Base
4
- include Util
5
-
6
- attr_reader :url_base
7
-
8
- def initialize(url_base:)
9
- @url_base = url_base
10
- end
11
- end
12
- end
13
- end
@@ -1,6 +0,0 @@
1
- <div
2
- class="absolute w-full mt-8 z-10 hidden shadow-container rounded-lg bg-white border border-mid-grey"
3
- data-id="meganav-search-autocomplete-container"
4
- >
5
- <ol class="m-16" data-id="meganav-search-autocomplete-list"></ol>
6
- </div>
@@ -1,14 +0,0 @@
1
- import React from "react";
2
-
3
- const MeganavSearchAutocomplete = () => {
4
- return (
5
- <div
6
- className="absolute w-full mt-8 z-10 hidden shadow-container rounded-lg bg-white border border-mid-grey"
7
- data-id="meganav-search-autocomplete-container"
8
- >
9
- <ol className="m-16" data-id="meganav-search-autocomplete-list"></ol>
10
- </div>
11
- );
12
- };
13
-
14
- export default MeganavSearchAutocomplete;
@@ -1,6 +0,0 @@
1
- module AblyUi
2
- module Core
3
- class MeganavSearchAutocomplete < ViewComponent::Base
4
- end
5
- end
6
- end
@@ -1,22 +0,0 @@
1
- <section class="ui-meganav-content grid-cols-12">
2
- <div class="col-span-8">
3
- <div class="mb-32">
4
- <%= tag.form class: "flex items-start", action: abs_url("/search"), method: "get" do %>
5
- <div class="relative w-full">
6
- <%= render(AblyUi::Core::Icon.new(name: "icon-gui-search", size: "1.5rem", color: "text-cool-black", additional_css:"absolute top-12 left-16")) %>
7
- <input type="search" name="q" class="ui-input pl-48 h-48" placeholder="Search" autocomplete="off" data-id="meganav-search-input" />
8
-
9
- <%= render(AblyUi::Core::MeganavSearchAutocomplete.new) %>
10
- </div>
11
-
12
- <button type="submit" class="ui-btn-secondary flex-shrink-0 ml-8 sm:ml-16 md:ml-24 xl:ml-32">
13
- Search
14
- </button>
15
- <% end %>
16
- </div>
17
- </div>
18
-
19
- <div class="col-span-12">
20
- <%= render(AblyUi::Core::MeganavSearchSuggestions.new(url_base: url_base)) %>
21
- </div>
22
- </section>
@@ -1,39 +0,0 @@
1
- import React from "react";
2
- import T from "prop-types";
3
-
4
- import Icon from "../Icon/component.jsx";
5
- import MeganavSearchSuggestions from "../MeganavSearchSuggestions/component.jsx";
6
- import MeganavSearchAutocomplete from "../MeganavSearchAutocomplete/component.jsx";
7
-
8
- const MeganavSearchPanel = ({ absUrl }) => {
9
- return (
10
- <section className="ui-meganav-content grid-cols-12">
11
- <div className="col-span-8">
12
- <div className="mb-32">
13
- <form className="flex items-start" action={absUrl("/search")} method="get">
14
- <div className="relative w-full">
15
- <Icon name="icon-gui-search" color="text-cool-black" size="1.5rem" additionalCSS="absolute top-12 left-16" />
16
- <input type="search" name="q" className="ui-input pl-48 h-48" placeholder="Search" autoComplete="off" data-id="meganav-search-input" />
17
-
18
- <MeganavSearchAutocomplete />
19
- </div>
20
-
21
- <button type="submit" className="ui-btn-secondary flex-shrink-0 ml-8 sm:ml-16 md:ml-24 xl:ml-32">
22
- Search
23
- </button>
24
- </form>
25
- </div>
26
- </div>
27
-
28
- <div className="col-span-12">
29
- <MeganavSearchSuggestions displaySupportLink={true} absUrl={absUrl} />
30
- </div>
31
- </section>
32
- );
33
- };
34
-
35
- MeganavSearchPanel.propTypes = {
36
- absUrl: T.func,
37
- };
38
-
39
- export default MeganavSearchPanel;
@@ -1,13 +0,0 @@
1
- module AblyUi
2
- module Core
3
- class MeganavSearchPanel < ViewComponent::Base
4
- include Util
5
-
6
- attr_reader :url_base
7
-
8
- def initialize(url_base:)
9
- @url_base = url_base
10
- end
11
- end
12
- end
13
- end
@@ -1,22 +0,0 @@
1
- <p class="ui-text-overline2 text-cool-black py-12">Popular pages</p>
2
-
3
- <div class="flex justify-between items-center overflow-hidden">
4
- <ul class="flex transition-transform">
5
- <li class="py-12 pr-8 flex-shrink-0">
6
- <%= link_to 'How does Ably work?', abs_url("/docs/how-ably-works"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
7
- </li>
8
- <li class="py-12 px-8 flex-shrink-0">
9
- <%= link_to 'Quickstart guide', abs_url("/docs/quick-start-guide"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
10
- </li>
11
- <li class="py-12 px-8 flex-shrink-0">
12
- <%= link_to 'Publish/Subscribe Messaging', abs_url("/docs/core-features/pubsub"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
13
- </li>
14
- <li class="py-12 pl-8 flex-shrink-0">
15
- <%= link_to 'Platform', abs_url("/platform"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
16
- </li>
17
- </ul>
18
-
19
- <% if display_support_link? %>
20
- <%= render(AblyUi::Core::FeaturedLink.new(url: abs_url("/support"), text_size: "text-p2")) do %>Support<% end %>
21
- <% end %>
22
- </div>
@@ -1,49 +0,0 @@
1
- import React from "react";
2
- import T from "prop-types";
3
-
4
- import FeaturedLink from "../FeaturedLink/component.jsx";
5
-
6
- const MeganavSearchSuggestions = ({ absUrl, displaySupportLink }) => {
7
- return (
8
- <>
9
- <p className="ui-text-overline2 text-cool-black py-12">Popular pages</p>
10
-
11
- <div className="flex justify-between items-center overflow-hidden">
12
- <ul className="flex transition-transform">
13
- <li className="py-12 pr-8 flex-shrink-0">
14
- <a href={absUrl("/docs/how-ably-works")} className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus">
15
- How does Ably work?
16
- </a>
17
- </li>
18
- <li className="py-12 px-8 flex-shrink-0">
19
- <a href={absUrl("/docs/quick-start-guide")} className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus">
20
- Quickstart guide
21
- </a>
22
- </li>
23
- <li className="py-12 px-8 flex-shrink-0">
24
- <a href={absUrl("/docs/core-features/pubsub")} className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus">
25
- Publish/Subscribe Messaging
26
- </a>
27
- </li>
28
- <li className="py-12 pl-8 flex-shrink-0">
29
- <a href={absUrl("/platform")} className="ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus">
30
- Platform
31
- </a>
32
- </li>
33
- </ul>
34
- {displaySupportLink ? (
35
- <FeaturedLink url={absUrl("/support")} textSize="text-p2">
36
- Support
37
- </FeaturedLink>
38
- ) : null}
39
- </div>
40
- </>
41
- );
42
- };
43
-
44
- MeganavSearchSuggestions.propTypes = {
45
- absUrl: T.func,
46
- displaySupportLink: T.bool,
47
- };
48
-
49
- export default MeganavSearchSuggestions;
@@ -1,18 +0,0 @@
1
- module AblyUi
2
- module Core
3
- class MeganavSearchSuggestions < ViewComponent::Base
4
- include Util
5
-
6
- attr_reader :url_base
7
-
8
- def initialize(url_base:, display_support_link: true)
9
- @url_base = url_base
10
- @display_support_link = display_support_link
11
- end
12
-
13
- def display_support_link?
14
- @display_support_link
15
- end
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- <%# Note the style attribute is used for entry animation %>
2
- <%= tag.div class: "ui-announcement #{bg_color} #{text_color}", data: { id: "ui-notice" }, style: "max-height: 0; overflow: hidden" do %>
3
- <div class="ui-grid-px py-16 max-w-screen-xl mx-auto flex items-start">
4
- <%= content_wrapper class: "w-full pr-8 ui-text-p3 self-center" do %>
5
- <strong class="font-bold whitespace-nowrap pr-4"><%= @contents[:title] %></strong>
6
- <span class="pr-4"><%= @contents[:body_text] %></span>
7
- <span class="underline cursor-pointer whitespace-nowrap"><%= @contents[:button_label] %></span>
8
- <% end %>
9
-
10
- <% if close_btn? %>
11
- <%= button_tag type: 'button', class: 'h-20 w-20 mt-4 ml-auto border-none bg-none self-baseline' do %>
12
- <%= render(AblyUi::Core::Icon.new(name: "icon-gui-close", size: "1.25rem", color: "text-cool-black")) %>
13
- <% end %>
14
- <% end %>
15
- </div>
16
- <% end %>
@@ -1,71 +0,0 @@
1
- import React, { useEffect } from "react";
2
- import T from "prop-types";
3
-
4
- const contentWrapperClasses = "w-full pr-8 ui-text-p3 self-center";
5
-
6
- import NoticeScripts from "./component.js";
7
- import Icon from "../Icon/component.jsx";
8
-
9
- const ContentWrapper = ({ buttonLink, children }) =>
10
- buttonLink ? (
11
- <a href={buttonLink} className={contentWrapperClasses}>
12
- {children}
13
- </a>
14
- ) : (
15
- <div className={contentWrapperClasses}>{children}</div>
16
- );
17
-
18
- ContentWrapper.propTypes = {
19
- buttonLink: T.string,
20
- children: T.node,
21
- };
22
-
23
- const Notice = ({ buttonLink, buttonLabel, bodyText, title, config, closeBtn, bgColor = "bg-gradient-active-orange", textColor = "text-white" }) => {
24
- useEffect(() => {
25
- NoticeScripts({
26
- bannerContainer: document.querySelector('[data-id="ui-notice"]'),
27
- cookieId: config.cookieId,
28
- noticeId: config.noticeId,
29
- options: {
30
- collapse: config.collapse,
31
- },
32
- });
33
- }, []);
34
-
35
- const wrapperClasses = ["ui-announcement", bgColor, textColor].join(" ");
36
-
37
- return (
38
- <div className={wrapperClasses} data-id="ui-notice" style={{ maxHeight: 0, overflow: "hidden" }}>
39
- <div className="ui-grid-px py-16 max-w-screen-xl mx-auto flex items-start">
40
- <ContentWrapper buttonLink={buttonLink}>
41
- <strong className="font-bold whitespace-nowrap pr-4">{title}</strong>
42
- <span className="pr-4">{bodyText}</span>
43
- {buttonLabel && <span className="underline cursor-pointer whitespace-nowrap">{buttonLabel}</span>}
44
- </ContentWrapper>
45
-
46
- {closeBtn && (
47
- <button type="button" className="ml-auto h-20 w-20 border-none bg-none self-baseline">
48
- <Icon name="icon-gui-close" size="1.25rem" color="text-cool-black" />
49
- </button>
50
- )}
51
- </div>
52
- </div>
53
- );
54
- };
55
-
56
- Notice.propTypes = {
57
- buttonLink: T.string,
58
- buttonLabel: T.string,
59
- bodyText: T.string,
60
- title: T.string,
61
- closeBtn: T.bool,
62
- config: T.shape({
63
- collapse: T.bool,
64
- noticeId: T.string,
65
- cookieId: T.string,
66
- }),
67
- bgColor: T.string,
68
- textColor: T.string,
69
- };
70
-
71
- export default Notice;
@@ -1,29 +0,0 @@
1
- module AblyUi
2
- module Core
3
- class Notice < ViewComponent::Base
4
- def initialize(contents)
5
- @contents = contents
6
- end
7
-
8
- def close_btn?
9
- @contents[:close_btn]
10
- end
11
-
12
- def bg_color
13
- @contents[:bg_color] || 'bg-gradient-active-orange'
14
- end
15
-
16
- def text_color
17
- @contents[:text_color] || 'text-white'
18
- end
19
-
20
- def content_wrapper(*args, &block)
21
- if @contents[:button_link].present?
22
- link_to(@contents[:button_link], *args, &block)
23
- else
24
- tag.div(*args, &block)
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,30 +0,0 @@
1
- @layer components {
2
- .ui-showcase-overflow-container {
3
- -ms-overflow-style: none; /* Internet Explorer 10+ */
4
- scrollbar-width: none; /* Firefox */
5
-
6
- @apply overflow-x-auto;
7
- }
8
-
9
- .ui-showcase-overflow-container::-webkit-scrollbar {
10
- @apply hidden; /* Safari and Chrome */
11
- }
12
-
13
- .ui-showcase-logo-wrapper {
14
- @apply flex bg-white;
15
- }
16
-
17
- .ui-showcase-logo {
18
- min-width: var(--ui-showcase-client-logo-min-width);
19
- @apply w-full py-16 px-12 flex items-center justify-center;
20
- }
21
-
22
- .ui-showcase-logo-img {
23
- max-width: var(--ui-showcase-client-logo-max-width);
24
- @apply w-full;
25
- }
26
-
27
- .ui-showcase-index-bar {
28
- @apply bg-mid-grey;
29
- }
30
- }
@@ -1,76 +0,0 @@
1
- <section
2
- aria-roledescription="carousel"
3
- aria-label="Ably customers showcase"
4
- aria-live="off"
5
- class="font-sans antialiased rounded-sm shadow-container-subtle"
6
- data-id="showcase"
7
- >
8
- <div class="ui-showcase-overflow-container">
9
- <ol class="ui-showcase-logo-wrapper" data-id="showcase-controls">
10
- <% companies_data.each_with_index do |company, index| %>
11
- <li class="ui-showcase-logo">
12
- <%= tag.button class: ['focus:outline-gui-focus', 'border-none', 'p-0', 'transition-filter'],
13
- type: 'button',
14
- data: { id: 'showcase-control' },
15
- aria: { controls: @random_id } do %>
16
- <%= image_tag company[:logo], alt: "#{company[:name]} logo", class: ['ui-showcase-logo-img', index === 0 ? 'grayscale-0' : 'grayscale', 'hover:grayscale-0'], srcset: [["#{company[:logo2x]}", "2x"]] %>
17
- <% end %>
18
- </li>
19
- <% end %>
20
- </ol>
21
-
22
- <div class="ui-showcase-index-bar">
23
- <div data-id="showcase-index-bar" class="transform transition-transform w-1/<%= companies_data.size %> h-4 bg-active-orange relative"></div>
24
- </div>
25
- </div>
26
-
27
- <div class="overflow-x-hidden">
28
- <ol class="flex transform transition-transform" data-id="showcase-slides" id="<%= @random_id %>">
29
- <% companies_data.each_with_index do |company, index| %>
30
- <li
31
- class="w-full flex-shrink-0 p-24 sm:p-32 xl:p-64 bg-white"
32
- role="group"
33
- aria-roledescription="slide"
34
- aria-label="<%= index + 1 %> of <%= companies_data.size %>"
35
- >
36
- <% if company[:layout] == "quotes" %>
37
- <%= render(AblyUi::Core::Icon.new(name: "quote", size: "1.25rem", color: "text-cool-black")) %>
38
-
39
- <p class="ui-text-quote mb-24"><%= company[:quote] %></p>
40
-
41
- <div class="flex items-center">
42
- <div class="flex-shrink-0 flex-grow-0 mr-16 overflow-hidden rounded-full flex align-center justify-center w-48 h-48">
43
- <%= image_tag company[:author][:thumbnail], alt: "Picture of #{company[:author][:name]}, #{company[:author][:title]}", class: "w-48 h-48 grayscale" %>
44
- </div>
45
- <div>
46
- <p class="ui-text-p2"><%= company[:author][:name] %></p>
47
- <p class="ui-text-p3"><%= company[:author][:title] %></p>
48
- </div>
49
- </div>
50
- <% end %>
51
-
52
- <% if company[:layout] == "casestudies" %>
53
- <div class="flex justify-evenly text-cool-black full-width flex-col md:flex-row" data-id="showcase-casestudy">
54
- <% company[:columns].each_with_index do |col, n| %>
55
- <% if company[:columns].last == col %>
56
- <div class="flex-1 mt-40 sm:mt-0 <%= col[:classname] %>" data-id="casestudy-column">
57
- <p class="ui-text-h4 pb-24"><%= col[:heading] %></p>
58
- <p class="ui-text-p1"><%= col[:text] %></p>
59
- <%- if col[:button] %>
60
- <a class="ui-btn self-start p-btn mt-24" href="<%= col[:button][:href] %>"><%= col[:button][:label] %></a>
61
- <% end %>
62
- </div>
63
- <% else %>
64
- <div class="flex-1 mt-40 sm:mt-0 mr-24 sm:mr-32 xl:mr-64 <%= col[:classname] %>" data-id="casestudy-column">
65
- <p class="ui-text-title-xl"><%= col[:heading] %></p>
66
- <p class="ui-text-p1 mb-0 sm:mb-32"><%= col[:text] %></p>
67
- </div>
68
- <% end %>
69
- <% end %>
70
- </div>
71
- <% end %>
72
- </li>
73
- <% end %>
74
- </ol>
75
- </div>
76
- </section>