@ably/ui 8.7.0-dev.73348b7 → 8.7.0-dev.9b0589d

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 (65) hide show
  1. package/README.md +1 -1
  2. package/core/.DS_Store +0 -0
  3. package/core/Code/component.css +3 -3
  4. package/core/Code/component.js +1 -1
  5. package/core/Code.jsx +353 -7273
  6. package/core/CompanyAutocomplete/component.js +1 -1
  7. package/core/ConnectStateWrapper.jsx +13 -4
  8. package/core/ContactFooter.jsx +13 -119
  9. package/core/CookieMessage.jsx +21 -293
  10. package/core/CustomerLogos.jsx +15 -117
  11. package/core/DropdownMenu/component.js +1 -0
  12. package/core/DropdownMenu.jsx +317 -0
  13. package/core/FeaturedLink.jsx +10 -116
  14. package/core/Flash.jsx +29 -1483
  15. package/core/Footer.jsx +17 -123
  16. package/core/Icon.jsx +9 -114
  17. package/core/Loader.jsx +9 -114
  18. package/core/Logo.jsx +13 -118
  19. package/core/Meganav/component.js +1 -2
  20. package/core/Meganav.jsx +2844 -10177
  21. package/core/MeganavBlogPostsList/component.js +1 -1
  22. package/core/MeganavBlogPostsList.jsx +11 -118
  23. package/core/MeganavContentCompany.jsx +31 -124
  24. package/core/MeganavContentDevelopers.jsx +23 -117
  25. package/core/MeganavContentPlatform.jsx +11 -118
  26. package/core/MeganavContentUseCases.jsx +11 -117
  27. package/core/MeganavControl.jsx +10 -116
  28. package/core/MeganavControlMobileDropdown/component.js +1 -1
  29. package/core/MeganavControlMobileDropdown.jsx +10 -116
  30. package/core/MeganavControlMobilePanelClose.jsx +10 -116
  31. package/core/MeganavControlMobilePanelOpen.jsx +10 -116
  32. package/core/MeganavItemsDesktop.jsx +13 -121
  33. package/core/MeganavItemsMobile.jsx +18 -132
  34. package/core/MeganavItemsSignedIn.jsx +16 -129
  35. package/core/MeganavSearch.jsx +13 -123
  36. package/core/MeganavSearchAutocomplete/component.js +1 -2
  37. package/core/MeganavSearchPanel.jsx +12 -121
  38. package/core/MeganavSearchSuggestions.jsx +11 -118
  39. package/core/Notice/component.js +1 -2
  40. package/core/Notice.jsx +62 -2136
  41. package/core/SignOutLink.jsx +9 -114
  42. package/core/Slider/component.js +1 -1
  43. package/core/Slider.jsx +25 -582
  44. package/core/Uptime.jsx +15 -118
  45. package/core/scripts.js +1 -1
  46. package/core/scripts.js.LICENSE.txt +32 -0
  47. package/core/sprites.svg +7 -0
  48. package/package.json +4 -4
  49. package/src/core/Code/component.css +1 -67
  50. package/src/core/Code/component.js +11 -46
  51. package/src/core/Code/component.jsx +7 -3
  52. package/src/core/CustomerLogos/component.html.erb +2 -2
  53. package/src/core/CustomerLogos/component.jsx +3 -2
  54. package/src/core/CustomerLogos/component.rb +2 -1
  55. package/src/core/DropdownMenu/component.js +0 -0
  56. package/src/core/DropdownMenu/component.jsx +114 -0
  57. package/src/core/MeganavContentDevelopers/component.html.erb +9 -0
  58. package/src/core/MeganavContentDevelopers/component.jsx +9 -0
  59. package/src/core/MeganavContentUseCases/component.html.erb +1 -1
  60. package/src/core/MeganavContentUseCases/component.jsx +1 -1
  61. package/src/core/MeganavSearchSuggestions/component.html.erb +1 -1
  62. package/src/core/icons/icon-display-integrations-col.svg +8 -0
  63. package/src/core/utils/syntax-highlighter-registry.js +61 -0
  64. package/src/core/utils/syntax-highlighter.css +69 -0
  65. package/src/core/utils/syntax-highlighter.js +98 -0
@@ -0,0 +1,114 @@
1
+ import React, { createContext, useContext, useState, useEffect, useRef } from "react";
2
+ import T from "prop-types";
3
+ import Icon from "../Icon/component.jsx";
4
+
5
+ const DropdownMenuContext = createContext();
6
+
7
+ const DropdownMenu = ({ children }) => {
8
+ const [isOpen, setOpen] = useState(false);
9
+ const ref = useRef(null);
10
+
11
+ useEffect(() => {
12
+ const clickHandler = (e) => {
13
+ if (ref?.current?.contains(e.target)) return;
14
+ setOpen(false);
15
+ };
16
+
17
+ document.addEventListener("click", clickHandler);
18
+
19
+ return () => {
20
+ document.removeEventListener("click", clickHandler);
21
+ };
22
+ }, []);
23
+
24
+ return (
25
+ <DropdownMenuContext.Provider value={{ isOpen, setOpen }}>
26
+ <div id="dropdown-menu" className="relative" ref={ref}>
27
+ {children}
28
+ </div>
29
+ </DropdownMenuContext.Provider>
30
+ );
31
+ };
32
+
33
+ DropdownMenu.propTypes = {
34
+ children: T.node,
35
+ };
36
+
37
+ const Trigger = ({ children, additionalTriggerCSS = "" }) => {
38
+ const { isOpen, setOpen } = useContext(DropdownMenuContext);
39
+
40
+ return (
41
+ <button
42
+ id="menu-trigger"
43
+ onClick={() => setOpen(!isOpen)}
44
+ className={`${additionalTriggerCSS} flex items-center p-8 ml-8 group hover:text-gui-hover hover:bg-light-grey active:text-gui-active focus:text-gui-focus focus:outline-none rounded-lg`}
45
+ >
46
+ <span className="leading-normal">{children}</span>
47
+ <Icon
48
+ name="icon-gui-disclosure-arrow"
49
+ color="text-cool-black"
50
+ size="1.25rem"
51
+ additionalCSS="transform rotate-90 group-hover:text-gui-hover group-active:text-gui-active group-focus:text-gui-focus"
52
+ />
53
+ </button>
54
+ );
55
+ };
56
+
57
+ <DropdownMenu.Trigger className="list of names">Click me</DropdownMenu.Trigger>;
58
+
59
+ Trigger.propTypes = {
60
+ children: T.node,
61
+ additionalTriggerCSS: T.string,
62
+ };
63
+
64
+ const Content = ({ children, anchorPosition = "right", additionalContentCSS }) => {
65
+ const { isOpen } = useContext(DropdownMenuContext);
66
+
67
+ if (!isOpen) {
68
+ return null;
69
+ }
70
+
71
+ const anchorPositionClasses = anchorPosition === "right" ? "right-0" : "left-0";
72
+
73
+ return (
74
+ <div
75
+ id="menu-content"
76
+ className={`${additionalContentCSS} absolute p-8 z-10 border border-mid-grey bg-white rounded shadow-container ${anchorPositionClasses}`}
77
+ style={{ minWidth: 275, top: 44 }}
78
+ >
79
+ {children}
80
+ </div>
81
+ );
82
+ };
83
+
84
+ Content.propTypes = {
85
+ children: T.node,
86
+ anchorPosition: T.string,
87
+ additionalContentCSS: T.string,
88
+ };
89
+
90
+ const Link = ({ url, title, subtitle, iconName, children }) => {
91
+ return (
92
+ <a href={url} className="menu-link group block p-8 hover:bg-light-grey hover:text-cool-black rounded">
93
+ <p className="mb-4">
94
+ {title}
95
+ {iconName ? <Icon name={iconName} size="1rem" color="text-cool-black" additionalCSS="align-middle ml-8 relative -top-1 -left-4" /> : null}
96
+ </p>
97
+ {subtitle ? <p className="text-p3 mb-16 text-dark-grey">{subtitle}</p> : null}
98
+ {children}
99
+ </a>
100
+ );
101
+ };
102
+
103
+ Link.propTypes = {
104
+ url: T.string,
105
+ title: T.string,
106
+ subtitle: T.string,
107
+ iconName: T.string,
108
+ children: T.node,
109
+ };
110
+
111
+ DropdownMenu.Trigger = Trigger;
112
+ DropdownMenu.Content = Content;
113
+ DropdownMenu.Link = Link;
114
+ export default DropdownMenu;
@@ -56,6 +56,15 @@
56
56
  </div>
57
57
  <% end %>
58
58
  </li>
59
+ <li>
60
+ <%= link_to abs_url("/integrations"), class: "ui-meganav-media-with-image group" do %>
61
+ <%= render(AblyUi::Core::Icon.new(name: "icon-display-integrations-col", size: "2.5rem")) %>
62
+ <div class="flex flex-col justify-center">
63
+ <p class="ui-meganav-media-heading">Integrations</p>
64
+ <p class="ui-meganav-media-copy">Find out more about Ably integrations. </p>
65
+ </div>
66
+ <% end %>
67
+ </li>
59
68
  </ul>
60
69
  </div>
61
70
 
@@ -62,6 +62,15 @@ const MeganavContentDevelopers = ({ absUrl }) => (
62
62
  </div>
63
63
  </a>
64
64
  </li>
65
+ <li>
66
+ <a href={absUrl("/integrations")} className="ui-meganav-media-with-image group">
67
+ <Icon name="icon-display-integrations-col" size="2.5rem" />
68
+ <div className="flex flex-col justify-center">
69
+ <p className="ui-meganav-media-heading">Integrations</p>
70
+ <p className="ui-meganav-media-copy">Find out more about Ably integrations. </p>
71
+ </div>
72
+ </a>
73
+ </li>
65
74
  </ul>
66
75
  </div>
67
76
 
@@ -58,7 +58,7 @@
58
58
  </li>
59
59
  <li>
60
60
  <%= link_to abs_url("/solutions/fintech"), class: "ui-meganav-media group" do %>
61
- <p class="ui-meganav-media-heading">Fintech</p>
61
+ <p class="ui-meganav-media-heading">FinTech</p>
62
62
  <p class="ui-meganav-media-copy">Deliver personalised financial data in realtime.</p>
63
63
  <% end %>
64
64
  </li>
@@ -64,7 +64,7 @@ const MeganavContentUseCases = ({ absUrl }) => (
64
64
  </li>
65
65
  <li>
66
66
  <a href={absUrl("/solutions/fintech")} className="ui-meganav-media group">
67
- <p className="ui-meganav-media-heading">Fintech</p>
67
+ <p className="ui-meganav-media-heading">FinTech</p>
68
68
  <p className="ui-meganav-media-copy">Deliver personalised financial data in realtime.</p>
69
69
  </a>
70
70
  </li>
@@ -12,7 +12,7 @@
12
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
13
  </li>
14
14
  <li class="py-12 pl-8 flex-shrink-0">
15
- <%= link_to 'Platform', abs_url("/docs/how-ably-works"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
15
+ <%= link_to 'Platform', abs_url("/platform"), class: "ui-text-p2 hover:text-gui-hover active:text-gui-active focus:text-gui-focus" %>
16
16
  </li>
17
17
  </ul>
18
18
 
@@ -0,0 +1,8 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M7.69985 7.70029C3.40409 11.9961 3.18585 18.7426 7.21241 22.7692L11.9425 27.4993L27.4988 11.9429L22.7688 7.21285C18.7422 3.18629 11.9956 3.40453 7.69985 7.70029Z" stroke="#03020D" stroke-width="1.5" stroke-linejoin="round"/>
3
+ <path d="M45.2129 45.2131L42.3844 42.3847" stroke="#03020D" stroke-width="1.37459" stroke-linecap="round" stroke-linejoin="round"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M40.4514 40.451C35.8956 45.0068 28.6731 45.2897 24.3219 40.9385L19.5918 36.2084C19.2989 35.9155 19.2989 35.4406 19.5918 35.1477L35.1482 19.5914C35.441 19.2985 35.9159 19.2985 36.2088 19.5914L40.9389 24.3215C45.2902 28.6727 45.0073 35.8952 40.4514 40.451Z" fill="#FF5416"/>
5
+ <path d="M2.78647 2.78662L7.73622 7.73637" stroke="#03020D" stroke-width="1.37459" stroke-linecap="round" stroke-linejoin="round"/>
6
+ <path d="M23.2925 16.2217L28.2423 21.1714" stroke="#03020D" stroke-width="1.37459" stroke-linecap="round" stroke-linejoin="round"/>
7
+ <path d="M16.2215 23.2927L21.1712 28.2425" stroke="#03020D" stroke-width="1.37459" stroke-linecap="round" stroke-linejoin="round"/>
8
+ </svg>
@@ -0,0 +1,61 @@
1
+ // This file can be used in the browser, but because of the weight of all the language
2
+ // definitions, preferably it should be used on the server.
3
+
4
+ import bash from "highlight.js/lib/languages/bash";
5
+ import cpp from "highlight.js/lib/languages/cpp";
6
+ import csharp from "highlight.js/lib/languages/csharp";
7
+ import css from "highlight.js/lib/languages/css";
8
+ import dart from "highlight.js/lib/languages/dart";
9
+ import dos from "highlight.js/lib/languages/dos";
10
+ import diff from "highlight.js/lib/languages/diff";
11
+ import erlang from "highlight.js/lib/languages/erlang";
12
+ import elixir from "highlight.js/lib/languages/elixir";
13
+ import plaintext from "highlight.js/lib/languages/plaintext";
14
+ import go from "highlight.js/lib/languages/go";
15
+ import http from "highlight.js/lib/languages/http";
16
+ import java from "highlight.js/lib/languages/java";
17
+ import javascript from "highlight.js/lib/languages/javascript";
18
+ import typescript from "highlight.js/lib/languages/typescript";
19
+ import json from "highlight.js/lib/languages/json";
20
+ import objectivec from "highlight.js/lib/languages/objectivec";
21
+ import php from "highlight.js/lib/languages/php";
22
+ import python from "highlight.js/lib/languages/python";
23
+ import ruby from "highlight.js/lib/languages/ruby";
24
+ import swift from "highlight.js/lib/languages/swift";
25
+ import sql from "highlight.js/lib/languages/sql";
26
+ import xml from "highlight.js/lib/languages/xml";
27
+ import yaml from "highlight.js/lib/languages/yaml";
28
+ import curl from "highlightjs-curl/src/languages/curl";
29
+
30
+ const registry = [
31
+ { label: "Text", key: "text", module: plaintext },
32
+ { label: "JS", key: "javascript", module: javascript },
33
+ { label: "TS", key: "typescript", module: typescript },
34
+ { label: "Java", key: "java", module: java },
35
+ { label: "Ruby", key: "ruby", module: ruby },
36
+ { label: "Python", key: "python", module: python },
37
+ { label: "PHP", key: "php", module: php },
38
+ { label: "Shell", key: "bash", module: bash },
39
+ { label: "C#", key: "cs", module: csharp },
40
+ { label: "CSS", key: "css", module: css },
41
+ { label: "Go", key: "go", module: go },
42
+ { label: "HTML", key: "xml", module: xml },
43
+ { label: "HTTP", key: "http", module: http },
44
+ { label: "C++", key: "cpp", module: cpp },
45
+ { label: "Dart", key: "dart", module: dart },
46
+ { label: "Swift", key: "swift", module: swift },
47
+ { label: "Objective C", key: "objectivec", module: objectivec },
48
+ { label: "Node.js", key: "javascript", module: javascript },
49
+ { label: "JSON", key: "json", module: json },
50
+ { label: "DOS", key: "dos", module: dos },
51
+ { label: "YAML", key: "yaml", module: yaml },
52
+ { label: "Erlang", key: "erlang", module: erlang },
53
+ { label: "Elixir", key: "elixir", module: elixir },
54
+ { label: "Diff", key: "diff", module: diff },
55
+ { label: "SQL", key: "sql", module: sql },
56
+ { label: "cURL", key: "curl", module: curl },
57
+ { label: "HTML", key: "html", module: xml },
58
+ { label: "XML", key: "xml", module: xml },
59
+ ];
60
+
61
+ export default registry;
@@ -0,0 +1,69 @@
1
+ @layer base {
2
+ @import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,600;0,700;1,600;1,700&display=swap");
3
+ }
4
+
5
+ @layer components {
6
+ .hljs {
7
+ background: var(--syntax-black);
8
+ color: var(--syntax-light-grey);
9
+ }
10
+
11
+ .hljs-emphasis {
12
+ @apply italic;
13
+ }
14
+
15
+ .hljs-strong {
16
+ @apply font-bold;
17
+ }
18
+
19
+ .hljs-comment,
20
+ .hljs-quote {
21
+ color: var(--syntax-dark-grey);
22
+ }
23
+
24
+ .hljs-variable,
25
+ .hljs-template-variable,
26
+ .hljs-tag,
27
+ .hljs-name,
28
+ .hljs-selector-id,
29
+ .hljs-selector-class,
30
+ .hljs-regexp,
31
+ .hljs-deletion {
32
+ color: var(--syntax-red);
33
+ }
34
+
35
+ .hljs-number,
36
+ .hljs-built_in,
37
+ .hljs-literal,
38
+ .hljs-type,
39
+ .hljs-params,
40
+ .hljs-meta,
41
+ .hljs-link {
42
+ color: var(--syntax-orange);
43
+ }
44
+
45
+ .hljs-attribute {
46
+ color: var(--syntax-yellow);
47
+ }
48
+
49
+ .hljs-string,
50
+ .hljs-symbol,
51
+ .hljs-bullet,
52
+ .hljs-addition {
53
+ color: var(--syntax-green);
54
+ }
55
+
56
+ .hljs-title,
57
+ .hljs-section {
58
+ color: var(--syntax-blue);
59
+ }
60
+
61
+ .hljs-keyword,
62
+ .hljs-selector-tag {
63
+ color: var(--syntax-lilac);
64
+ }
65
+
66
+ .hljs-subst {
67
+ color: var(--syntax-mid-grey);
68
+ }
69
+ }
@@ -0,0 +1,98 @@
1
+ import hljs from "highlight.js/lib/core";
2
+
3
+ // Map certain frameworks, protocols etc to available langauage packs
4
+ const languageToHighlightKey = (lang) => {
5
+ let id;
6
+
7
+ if (!lang) {
8
+ lang = "text";
9
+ }
10
+
11
+ switch (lang.toLowerCase()) {
12
+ case "android":
13
+ id = "java";
14
+ break;
15
+
16
+ case ".net":
17
+ case "net":
18
+ case "dotnet":
19
+ case "csharp":
20
+ case "c#":
21
+ id = "cs";
22
+ break;
23
+
24
+ case "objc":
25
+ case "objective c":
26
+ id = "objectivec";
27
+ break;
28
+
29
+ case "laravel":
30
+ id = "php";
31
+ break;
32
+
33
+ case "flutter":
34
+ id = "dart";
35
+ break;
36
+
37
+ case "node.js":
38
+ case "js":
39
+ id = "javascript";
40
+ break;
41
+
42
+ case "ts":
43
+ id = "typescript";
44
+ break;
45
+
46
+ case "shell":
47
+ case "fh":
48
+ case "sh":
49
+ id = "bash";
50
+ break;
51
+
52
+ case "https":
53
+ case "http":
54
+ case "txt":
55
+ case "plaintext":
56
+ id = "text";
57
+ break;
58
+
59
+ case "cmd":
60
+ case "bat":
61
+ id = "dos";
62
+ break;
63
+
64
+ case "yml":
65
+ id = "yaml";
66
+ break;
67
+
68
+ case "erl":
69
+ id = "erlang";
70
+ break;
71
+
72
+ case "patch":
73
+ id = "diff";
74
+ break;
75
+
76
+ case "svg":
77
+ id = "xml";
78
+ break;
79
+
80
+ default:
81
+ break;
82
+ }
83
+
84
+ return id || lang;
85
+ };
86
+
87
+ const registerDefaultLanguages = (register) => {
88
+ register.forEach(({ key, module }) => hljs.registerLanguage(key, module));
89
+ };
90
+
91
+ const highlightSnippet = (languageKeyword, snippet) => {
92
+ const language = languageToHighlightKey(languageKeyword);
93
+ if (typeof snippet !== "string" || !snippet || !language) return;
94
+
95
+ return hljs.highlight(snippet, { language }).value;
96
+ };
97
+
98
+ export { highlightSnippet, languageToHighlightKey, registerDefaultLanguages };