@ably/ui 17.10.1-dev.26bd7a31 → 17.10.1-dev.330122df
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.
- package/AGENTS.md +197 -0
- package/core/Header/HeaderLinks.js +1 -1
- package/core/Header/HeaderLinks.js.map +1 -1
- package/core/Icon/components/icon-product-chat-mono.js +1 -1
- package/core/Icon/components/icon-product-chat-mono.js.map +1 -1
- package/core/Icon/components/icon-product-liveobjects-mono.js +1 -1
- package/core/Icon/components/icon-product-liveobjects-mono.js.map +1 -1
- package/core/Icon/components/icon-product-livesync-mono.js +1 -1
- package/core/Icon/components/icon-product-livesync-mono.js.map +1 -1
- package/core/Icon/components/icon-product-pubsub-mono.js +1 -1
- package/core/Icon/components/icon-product-pubsub-mono.js.map +1 -1
- package/core/Icon/components/icon-product-spaces-mono.js +1 -1
- package/core/Icon/components/icon-product-spaces-mono.js.map +1 -1
- package/core/Meganav/MeganavBlog.js +1 -1
- package/core/Meganav/MeganavBlog.js.map +1 -1
- package/core/Meganav/MeganavCustomerStories.js +1 -1
- package/core/Meganav/MeganavCustomerStories.js.map +1 -1
- package/core/Meganav/MeganavMobile.js +1 -1
- package/core/Meganav/MeganavMobile.js.map +1 -1
- package/core/Meganav/MeganavPanel.js +1 -1
- package/core/Meganav/MeganavPanel.js.map +1 -1
- package/core/Meganav/MeganavPanelItemLinks.js +1 -1
- package/core/Meganav/MeganavPanelItemLinks.js.map +1 -1
- package/core/Meganav/PanelTitle.js +2 -0
- package/core/Meganav/PanelTitle.js.map +1 -0
- package/core/Meganav/data.js +1 -1
- package/core/Meganav/data.js.map +1 -1
- package/core/Meganav/images/cust-logo-doxy-dark.png +0 -0
- package/core/Meganav/images/cust-logo-doxy-light.png +0 -0
- package/core/Meganav/utils/getMenuItemsForHeader.js +1 -1
- package/core/Meganav/utils/getMenuItemsForHeader.js.map +1 -1
- package/core/ProductTile/ProductIcon.js +1 -1
- package/core/ProductTile/ProductIcon.js.map +1 -1
- package/core/icons/product/icon-product-chat-mono.svg +1 -1
- package/core/icons/product/icon-product-liveobjects-mono.svg +1 -4
- package/core/icons/product/icon-product-livesync-mono.svg +4 -4
- package/core/icons/product/icon-product-pubsub-mono.svg +1 -1
- package/core/icons/product/icon-product-spaces-mono.svg +1 -1
- package/core/sprites-product.svg +1 -1
- package/index.d.ts +19 -12
- package/package.json +5 -3
- package/core/Meganav/utils.js +0 -2
- package/core/Meganav/utils.js.map +0 -1
package/AGENTS.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Agent Development Guide
|
|
2
|
+
|
|
3
|
+
This file is not necessarily for people, the intended audience is automated agents.
|
|
4
|
+
|
|
5
|
+
## Other references
|
|
6
|
+
|
|
7
|
+
Consider the content of `README.md` as well, it contains technical information
|
|
8
|
+
used by contributors to this project, as well as consumers of this project
|
|
9
|
+
|
|
10
|
+
## Consumers
|
|
11
|
+
|
|
12
|
+
This project is intended to primarily be consumed by the Ably website, voltaire
|
|
13
|
+
& docs projects. It is distributed via NPM as the `@ably/ui` package.
|
|
14
|
+
|
|
15
|
+
## Build & Test Commands
|
|
16
|
+
|
|
17
|
+
- `pnpm build` - Build the library (prebuild, icons, swc, tsc, cleanup)
|
|
18
|
+
- `pnpm test` - Run all tests with Vitest
|
|
19
|
+
- `pnpm test -- src/core/insights/index.test.ts` - Run a single test file
|
|
20
|
+
- `pnpm lint` - Run ESLint on all files
|
|
21
|
+
- `pnpm format:check` - Check formatting with Prettier
|
|
22
|
+
- `pnpm format:write` - Auto-format all files with Prettier
|
|
23
|
+
- `pnpm storybook` - Start Storybook dev server on port 6006
|
|
24
|
+
- `pnpm start` - Start Vite dev server on port 5000
|
|
25
|
+
|
|
26
|
+
## Code Style
|
|
27
|
+
|
|
28
|
+
- **Language**: TypeScript with strict mode enabled
|
|
29
|
+
- **React**: Use functional components with hooks; React 18.x
|
|
30
|
+
- **Imports**: Default export for main component, named exports for types/utils
|
|
31
|
+
- **Naming**: PascalCase for components/types, camelCase for functions/variables,
|
|
32
|
+
kebab-case for files
|
|
33
|
+
- **Types**: Define prop types as `ComponentNameProps`, use `PropsWithChildren<T>`
|
|
34
|
+
when needed
|
|
35
|
+
- **Styling**: Tailwind 3.4.
|
|
36
|
+
- **Utility**: Use `cn()` from `./src/core/utils/cn` for className merging (clsx
|
|
37
|
+
& tailwind-merge)
|
|
38
|
+
- **Formatting**: Prettier defaults (no config = defaults), 2-space indent
|
|
39
|
+
- **Error Handling**: Wrap external service calls in try-catch, log with logger module
|
|
40
|
+
- **Comments**: JSDoc for props, inline comments for complex logic
|
|
41
|
+
|
|
42
|
+
Keep emojis in the code to a minimum, only introduce them if there is precedent
|
|
43
|
+
in the file you're working on.
|
|
44
|
+
|
|
45
|
+
Comments and commit messages should not include statements like "local tests pass",
|
|
46
|
+
this is a given for how we work.
|
|
47
|
+
|
|
48
|
+
## Development
|
|
49
|
+
|
|
50
|
+
- Run `pnpm lint` & `pnpm format:write` on files after making changes, we lint
|
|
51
|
+
files in CI and don't want preventable failures. `pnpm lint:fix` should also
|
|
52
|
+
apply our formatting rules while trying to fix most things for you
|
|
53
|
+
- Run tests with `pnpm test` after making file changes
|
|
54
|
+
|
|
55
|
+
## Styling Guide
|
|
56
|
+
|
|
57
|
+
### Color Palettes
|
|
58
|
+
|
|
59
|
+
The design system uses semantic color palettes defined in `src/core/styles/properties.css`
|
|
60
|
+
and configured for Tailwind in `tailwind.config.js`. Each palette has a different
|
|
61
|
+
number of color values:
|
|
62
|
+
|
|
63
|
+
- **Neutral**: 000, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300 (14 values)
|
|
64
|
+
- **Orange**: 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100 (11 values)
|
|
65
|
+
- **Yellow**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
66
|
+
- **Green**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
67
|
+
- **Blue**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
68
|
+
- **Violet**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
69
|
+
- **Pink**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
70
|
+
|
|
71
|
+
### Interactive Element Styling Patterns
|
|
72
|
+
|
|
73
|
+
When developing components with @ably/ui, **always** use Tailwind classes following
|
|
74
|
+
these established patterns to ensure consistent interactive behavior across light
|
|
75
|
+
and dark modes:
|
|
76
|
+
|
|
77
|
+
#### Dark Mode Mirroring
|
|
78
|
+
|
|
79
|
+
For any given color, add a dark mode class that mirrors it across the palette.
|
|
80
|
+
Lower values (lighter colors) in light mode should map to higher values (darker
|
|
81
|
+
colors) in dark mode, and vice versa.
|
|
82
|
+
|
|
83
|
+
**Examples:**
|
|
84
|
+
|
|
85
|
+
- `bg-neutral-100` pairs with `dark:bg-neutral-1200`
|
|
86
|
+
- `bg-neutral-200` pairs with `dark:bg-neutral-1100`
|
|
87
|
+
- `bg-neutral-1200` pairs with `dark:bg-neutral-100`
|
|
88
|
+
- `text-neutral-1300` pairs with `dark:text-neutral-000`
|
|
89
|
+
- `bg-orange-200` pairs with `dark:bg-orange-900` (orange has 11 values: 200 + 900 = 1100)
|
|
90
|
+
- `bg-blue-300` pairs with `dark:bg-blue-700` (blue has 9 values: 300 + 700 = 1000)
|
|
91
|
+
|
|
92
|
+
The sum of mirrored color numbers should equal the total palette range. Different
|
|
93
|
+
palettes have different ranges, so calculate mirrors accordingly:
|
|
94
|
+
|
|
95
|
+
- Neutral (000-1300): `light + dark = 1300`
|
|
96
|
+
- Orange (100-1100): `light + dark = 1200`
|
|
97
|
+
- Secondary colors (100-900): `light + dark = 1000`
|
|
98
|
+
|
|
99
|
+
#### Hover States
|
|
100
|
+
|
|
101
|
+
Use the **next color value** along the palette for hover states:
|
|
102
|
+
|
|
103
|
+
- `bg-neutral-100` → `hover:bg-neutral-200`
|
|
104
|
+
- `bg-neutral-200` → `hover:bg-neutral-300`
|
|
105
|
+
- `bg-orange-600` → `hover:bg-orange-700`
|
|
106
|
+
|
|
107
|
+
Apply this pattern to both light and dark mode classes:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
bg-neutral-200 hover:bg-neutral-300
|
|
111
|
+
dark:bg-neutral-1100 dark:hover:bg-neutral-1000
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
#### Active States
|
|
115
|
+
|
|
116
|
+
Use **two color values** along the palette for active/pressed states:
|
|
117
|
+
|
|
118
|
+
- `bg-neutral-100` → `active:bg-neutral-300`
|
|
119
|
+
- `bg-neutral-200` → `active:bg-neutral-400`
|
|
120
|
+
- `bg-orange-600` → `active:bg-orange-800`
|
|
121
|
+
|
|
122
|
+
Apply to both modes:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
bg-neutral-200 hover:bg-neutral-300 active:bg-neutral-400
|
|
126
|
+
dark:bg-neutral-1100 dark:hover:bg-neutral-1000 dark:active:bg-neutral-900
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### Focus Styles
|
|
130
|
+
|
|
131
|
+
Add the `focus-base` class to all interactive elements (buttons, links, inputs,
|
|
132
|
+
selects, etc.). This class is defined in `src/core/styles/utils.css` and provides
|
|
133
|
+
consistent focus styling with an accessible outline:
|
|
134
|
+
|
|
135
|
+
```css
|
|
136
|
+
.focus-base {
|
|
137
|
+
@apply focus:outline-none focus-visible:outline-4 focus-visible:outline-offset-0 focus-visible:outline-gui-focus;
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### Transitions
|
|
142
|
+
|
|
143
|
+
Add `transition-colors` to interactive elements unless a higher-specificity
|
|
144
|
+
`transition` class is already present (e.g., `transition-all`, `transition-transform`).
|
|
145
|
+
This ensures smooth visual feedback for state changes.
|
|
146
|
+
|
|
147
|
+
### Complete Example
|
|
148
|
+
|
|
149
|
+
Here's a complete button component demonstrating all patterns:
|
|
150
|
+
|
|
151
|
+
```tsx
|
|
152
|
+
<button
|
|
153
|
+
className={cn(
|
|
154
|
+
"px-4 py-2 rounded",
|
|
155
|
+
"bg-neutral-200 hover:bg-neutral-300 active:bg-neutral-400",
|
|
156
|
+
"dark:bg-neutral-1100 dark:hover:bg-neutral-1000 dark:active:bg-neutral-900",
|
|
157
|
+
"text-neutral-1300 dark:text-neutral-000",
|
|
158
|
+
"focus-base transition-colors",
|
|
159
|
+
)}
|
|
160
|
+
>
|
|
161
|
+
Click me
|
|
162
|
+
</button>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Additional Examples
|
|
166
|
+
|
|
167
|
+
**Select dropdown:**
|
|
168
|
+
|
|
169
|
+
```tsx
|
|
170
|
+
<Select.Trigger
|
|
171
|
+
className="bg-neutral-200 hover:bg-neutral-300 active:bg-neutral-400 dark:bg-neutral-1100 dark:hover:bg-neutral-1000 dark:active:bg-neutral-900 focus-base transition-colors border border-neutral-300 dark:border-neutral-1000"
|
|
172
|
+
>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Badge with orange:**
|
|
176
|
+
|
|
177
|
+
```tsx
|
|
178
|
+
<span
|
|
179
|
+
className="bg-orange-200 hover:bg-orange-300 active:bg-orange-400 dark:bg-orange-900 dark:hover:bg-orange-800 dark:active:bg-orange-700 focus-base transition-colors"
|
|
180
|
+
>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Toggle/Switch:**
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
<Switch
|
|
187
|
+
className="bg-neutral-600 hover:bg-neutral-700 active:bg-neutral-800 data-[state=checked]:bg-orange-600 data-[state=checked]:hover:bg-orange-700 data-[state=checked]:active:bg-orange-800 focus-base transition-colors"
|
|
188
|
+
>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Git workflow
|
|
192
|
+
|
|
193
|
+
- Always do work on a new branch, start the branch on the HEAD of `origin/main`
|
|
194
|
+
- Before pushing the branch run the tests and linters to ensure they are happy
|
|
195
|
+
- When updating a branch, rebase on `origin/main` and force-push (with lease)
|
|
196
|
+
- Use our PR template in the `.github` folder as a reference for the pull request
|
|
197
|
+
- Keep commit messages concise
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{useRef,useMemo}from"react";import Icon from"../Icon";import LinkButton from"../LinkButton";import cn from"../utils/cn";import DropdownMenu from"../DropdownMenu";const testSessionState={signedIn:false,logOut:{token:"0000",href:"accounts/sign_out"},accountName:"Ably"};export const HeaderLinks=({sessionState=testSessionState,headerLinks,searchButtonVisibility,searchButton,className})=>{const{signedIn,logOut}=sessionState;const formRef=useRef(null);const headerLinkClasses="
|
|
1
|
+
import React,{useRef,useMemo}from"react";import Icon from"../Icon";import LinkButton from"../LinkButton";import cn from"../utils/cn";import DropdownMenu from"../DropdownMenu";const testSessionState={signedIn:false,logOut:{token:"0000",href:"accounts/sign_out"},accountName:"Ably"};export const HeaderLinks=({sessionState=testSessionState,headerLinks,searchButtonVisibility,searchButton,className})=>{const{signedIn,logOut}=sessionState;const formRef=useRef(null);const headerLinkClasses="font-sans !text-label2 md:!text-label3 font-bold py-4 text-neutral-1300 dark:text-neutral-000 md:text-neutral-1000 dark:md:text-neutral-300 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1300 dark:active:text-neutral-000 transition-colors";const dropdownMenuLinkClasses="block p-2 ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg";const onClickLogout=e=>{e.preventDefault();formRef.current?.submit()};const DashboardLink=({className})=>useMemo(()=>React.createElement("a",{href:"/dashboard",className:className},"Dashboard"),[className]);const LogoutForm=React.createElement("form",{ref:formRef,method:"post",action:logOut.href,className:"hidden"},React.createElement("input",{name:"_method",value:"delete",type:"hidden"}),React.createElement("input",{name:"authenticity_token",value:logOut.token,type:"hidden"}));return React.createElement("nav",{className:cn("flex md:flex-1 md:items-center md:justify-end flex-col md:flex-row border-t-[1px] border-neutral-300 md:border-t-0 md:gap-4 pt-3 pb-4 md:py-0",className)},signedIn&&React.createElement(React.Fragment,null,LogoutForm,React.createElement("div",{className:"block md:hidden"},React.createElement("div",{className:"flex flex-col border-b-[1px] border-neutral-300 px-4 pb-3 mb-3"},React.createElement("span",{className:"py-3 ui-text-sub-header text-[18px] text-neutral-700 dark:text-neutral-600 font-bold"},sessionState.accountName),React.createElement(DashboardLink,{className:headerLinkClasses})))),headerLinks?.map(({href,label,external})=>React.createElement("a",{key:href,className:cn(headerLinkClasses,"flex items-center gap-1.5 px-4 md:px-0 leading-none"),href:href,target:external?"_blank":undefined,rel:external?"noreferrer noopener":undefined},label,external&&React.createElement(Icon,{name:"icon-gui-arrow-top-right-on-square-mini",size:"20px"}))),searchButtonVisibility!=="mobile"?searchButton:null,signedIn?React.createElement(React.Fragment,null,React.createElement("div",{className:"hidden md:block relative"},React.createElement(DropdownMenu,null,React.createElement(DropdownMenu.Trigger,{description:`Account menu for ${sessionState.accountName}`},React.createElement("span",{className:"block text-ellipsis overflow-hidden whitespace-nowrap w-full max-w-[9.375rem] leading-normal"},sessionState.accountName)),React.createElement(DropdownMenu.Content,{anchorPosition:"right",contentClassNames:"w-60 mt-3"},React.createElement("div",{className:"p-2"},React.createElement(DashboardLink,{className:dropdownMenuLinkClasses}),React.createElement("button",{onClick:onClickLogout,className:dropdownMenuLinkClasses},"Logout"))))),React.createElement("div",{className:"block md:hidden px-4 pt-4 pb-0"},React.createElement(LinkButton,{onClick:onClickLogout,variant:"secondary",className:"w-full md:ui-button-secondary-xs","aria-label":"Logout",rightIcon:"icon-gui-arrow-right-end-on-rectangle-outline"},"Logout"))):React.createElement("div",{className:"flex gap-3 pt-3 md:py-0 px-4 md:px-0"},React.createElement(LinkButton,{href:"/login",variant:"secondary",className:"flex-1 md:flex-none md:ui-button-secondary-xs hover:text-neutral-1300 dark:hover:text-neutral-000"},"Login"),React.createElement(LinkButton,{href:"/sign-up",variant:"primary",className:"flex-1 md:flex-none md:ui-button-primary-xs hover:text-neutral-000 dark:hover:text-neutral-1300"},"Start free")))};
|
|
2
2
|
//# sourceMappingURL=HeaderLinks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Header/HeaderLinks.tsx"],"sourcesContent":["import React, { MouseEvent, useRef, useMemo } from \"react\";\nimport { HeaderProps } from \"../Header\";\nimport Icon from \"../Icon\";\nimport LinkButton from \"../LinkButton\";\nimport cn from \"../utils/cn\";\nimport DropdownMenu from \"../DropdownMenu\";\n\nconst testSessionState = {\n signedIn: false,\n logOut: {\n token: \"0000\",\n href: \"accounts/sign_out\",\n },\n accountName: \"Ably\",\n};\n\nexport const HeaderLinks: React.FC<\n Pick<\n HeaderProps,\n | \"sessionState\"\n | \"headerLinks\"\n | \"searchButtonVisibility\"\n | \"searchButton\"\n | \"className\"\n >\n> = ({\n sessionState = testSessionState,\n headerLinks,\n searchButtonVisibility,\n searchButton,\n className,\n}) => {\n const { signedIn, logOut } = sessionState;\n const formRef = useRef<HTMLFormElement>(null);\n\n const headerLinkClasses =\n \"
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Header/HeaderLinks.tsx"],"sourcesContent":["import React, { MouseEvent, useRef, useMemo } from \"react\";\nimport { HeaderProps } from \"../Header\";\nimport Icon from \"../Icon\";\nimport LinkButton from \"../LinkButton\";\nimport cn from \"../utils/cn\";\nimport DropdownMenu from \"../DropdownMenu\";\n\nconst testSessionState = {\n signedIn: false,\n logOut: {\n token: \"0000\",\n href: \"accounts/sign_out\",\n },\n accountName: \"Ably\",\n};\n\nexport const HeaderLinks: React.FC<\n Pick<\n HeaderProps,\n | \"sessionState\"\n | \"headerLinks\"\n | \"searchButtonVisibility\"\n | \"searchButton\"\n | \"className\"\n >\n> = ({\n sessionState = testSessionState,\n headerLinks,\n searchButtonVisibility,\n searchButton,\n className,\n}) => {\n const { signedIn, logOut } = sessionState;\n const formRef = useRef<HTMLFormElement>(null);\n\n const headerLinkClasses =\n \"font-sans !text-label2 md:!text-label3 font-bold py-4 text-neutral-1300 dark:text-neutral-000 md:text-neutral-1000 dark:md:text-neutral-300 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1300 dark:active:text-neutral-000 transition-colors\";\n\n const dropdownMenuLinkClasses =\n \"block p-2 ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg\";\n\n const onClickLogout = (e: MouseEvent) => {\n e.preventDefault();\n formRef.current?.submit();\n };\n\n const DashboardLink = ({ className }: { className: string }) =>\n useMemo(\n () => (\n <a href=\"/dashboard\" className={className}>\n Dashboard\n </a>\n ),\n [className],\n );\n\n const LogoutForm = (\n <form ref={formRef} method=\"post\" action={logOut.href} className=\"hidden\">\n <input name=\"_method\" value=\"delete\" type=\"hidden\" />\n <input name=\"authenticity_token\" value={logOut.token} type=\"hidden\" />\n </form>\n );\n\n return (\n <nav\n className={cn(\n \"flex md:flex-1 md:items-center md:justify-end flex-col md:flex-row border-t-[1px] border-neutral-300 md:border-t-0 md:gap-4 pt-3 pb-4 md:py-0\",\n className,\n )}\n >\n {signedIn && (\n <>\n {LogoutForm}\n <div className=\"block md:hidden\">\n <div className=\"flex flex-col border-b-[1px] border-neutral-300 px-4 pb-3 mb-3\">\n <span className=\"py-3 ui-text-sub-header text-[18px] text-neutral-700 dark:text-neutral-600 font-bold\">\n {sessionState.accountName}\n </span>\n {<DashboardLink className={headerLinkClasses} />}\n </div>\n </div>\n </>\n )}\n\n {headerLinks?.map(({ href, label, external }) => (\n <a\n key={href}\n className={cn(\n headerLinkClasses,\n \"flex items-center gap-1.5 px-4 md:px-0 leading-none\",\n )}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noreferrer noopener\" : undefined}\n >\n {label}\n {external && (\n <Icon name=\"icon-gui-arrow-top-right-on-square-mini\" size=\"20px\" />\n )}\n </a>\n ))}\n\n {searchButtonVisibility !== \"mobile\" ? searchButton : null}\n {signedIn ? (\n <>\n <div className=\"hidden md:block relative\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n description={`Account menu for ${sessionState.accountName}`}\n >\n <span className=\"block text-ellipsis overflow-hidden whitespace-nowrap w-full max-w-[9.375rem] leading-normal\">\n {sessionState.accountName}\n </span>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n anchorPosition=\"right\"\n contentClassNames=\"w-60 mt-3\"\n >\n <div className=\"p-2\">\n <DashboardLink className={dropdownMenuLinkClasses} />\n <button\n onClick={onClickLogout}\n className={dropdownMenuLinkClasses}\n >\n Logout\n </button>\n </div>\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n <div className=\"block md:hidden px-4 pt-4 pb-0\">\n <LinkButton\n onClick={onClickLogout}\n variant=\"secondary\"\n className=\"w-full md:ui-button-secondary-xs\"\n aria-label=\"Logout\"\n rightIcon=\"icon-gui-arrow-right-end-on-rectangle-outline\"\n >\n Logout\n </LinkButton>\n </div>\n </>\n ) : (\n <div className=\"flex gap-3 pt-3 md:py-0 px-4 md:px-0\">\n <LinkButton\n href=\"/login\"\n variant=\"secondary\"\n className=\"flex-1 md:flex-none md:ui-button-secondary-xs hover:text-neutral-1300 dark:hover:text-neutral-000\"\n >\n Login\n </LinkButton>\n <LinkButton\n href=\"/sign-up\"\n variant=\"primary\"\n className=\"flex-1 md:flex-none md:ui-button-primary-xs hover:text-neutral-000 dark:hover:text-neutral-1300\"\n >\n Start free\n </LinkButton>\n </div>\n )}\n </nav>\n );\n};\n"],"names":["React","useRef","useMemo","Icon","LinkButton","cn","DropdownMenu","testSessionState","signedIn","logOut","token","href","accountName","HeaderLinks","sessionState","headerLinks","searchButtonVisibility","searchButton","className","formRef","headerLinkClasses","dropdownMenuLinkClasses","onClickLogout","e","preventDefault","current","submit","DashboardLink","a","LogoutForm","form","ref","method","action","input","name","value","type","nav","div","span","map","label","external","key","target","undefined","rel","size","Trigger","description","Content","anchorPosition","contentClassNames","button","onClick","variant","aria-label","rightIcon"],"mappings":"AAAA,OAAOA,OAAqBC,MAAM,CAAEC,OAAO,KAAQ,OAAQ,AAE3D,QAAOC,SAAU,SAAU,AAC3B,QAAOC,eAAgB,eAAgB,AACvC,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,iBAAkB,iBAAkB,CAE3C,MAAMC,iBAAmB,CACvBC,SAAU,MACVC,OAAQ,CACNC,MAAO,OACPC,KAAM,mBACR,EACAC,YAAa,MACf,CAEA,QAAO,MAAMC,YAST,CAAC,CACHC,aAAeP,gBAAgB,CAC/BQ,WAAW,CACXC,sBAAsB,CACtBC,YAAY,CACZC,SAAS,CACV,IACC,KAAM,CAAEV,QAAQ,CAAEC,MAAM,CAAE,CAAGK,aAC7B,MAAMK,QAAUlB,OAAwB,MAExC,MAAMmB,kBACJ,0QAEF,MAAMC,wBACJ,8LAEF,MAAMC,cAAgB,AAACC,IACrBA,EAAEC,cAAc,EAChBL,CAAAA,QAAQM,OAAO,EAAEC,QACnB,EAEA,MAAMC,cAAgB,CAAC,CAAET,SAAS,CAAyB,GACzDhB,QACE,IACE,oBAAC0B,KAAEjB,KAAK,aAAaO,UAAWA,WAAW,aAI7C,CAACA,UAAU,EAGf,MAAMW,WACJ,oBAACC,QAAKC,IAAKZ,QAASa,OAAO,OAAOC,OAAQxB,OAAOE,IAAI,CAAEO,UAAU,UAC/D,oBAACgB,SAAMC,KAAK,UAAUC,MAAM,SAASC,KAAK,WAC1C,oBAACH,SAAMC,KAAK,qBAAqBC,MAAO3B,OAAOC,KAAK,CAAE2B,KAAK,YAI/D,OACE,oBAACC,OACCpB,UAAWb,GACT,gJACAa,YAGDV,UACC,wCACGqB,WACD,oBAACU,OAAIrB,UAAU,mBACb,oBAACqB,OAAIrB,UAAU,kEACb,oBAACsB,QAAKtB,UAAU,wFACbJ,aAAaF,WAAW,EAE1B,oBAACe,eAAcT,UAAWE,uBAMlCL,aAAa0B,IAAI,CAAC,CAAE9B,IAAI,CAAE+B,KAAK,CAAEC,QAAQ,CAAE,GAC1C,oBAACf,KACCgB,IAAKjC,KACLO,UAAWb,GACTe,kBACA,uDAEFT,KAAMA,KACNkC,OAAQF,SAAW,SAAWG,UAC9BC,IAAKJ,SAAW,sBAAwBG,WAEvCJ,MACAC,UACC,oBAACxC,MAAKgC,KAAK,0CAA0Ca,KAAK,WAK/DhC,yBAA2B,SAAWC,aAAe,KACrDT,SACC,wCACE,oBAAC+B,OAAIrB,UAAU,4BACb,oBAACZ,kBACC,oBAACA,aAAa2C,OAAO,EACnBC,YAAa,CAAC,iBAAiB,EAAEpC,aAAaF,WAAW,CAAC,CAAC,EAE3D,oBAAC4B,QAAKtB,UAAU,gGACbJ,aAAaF,WAAW,GAG7B,oBAACN,aAAa6C,OAAO,EACnBC,eAAe,QACfC,kBAAkB,aAElB,oBAACd,OAAIrB,UAAU,OACb,oBAACS,eAAcT,UAAWG,0BAC1B,oBAACiC,UACCC,QAASjC,cACTJ,UAAWG,yBACZ,cAOT,oBAACkB,OAAIrB,UAAU,kCACb,oBAACd,YACCmD,QAASjC,cACTkC,QAAQ,YACRtC,UAAU,mCACVuC,aAAW,SACXC,UAAU,iDACX,YAML,oBAACnB,OAAIrB,UAAU,wCACb,oBAACd,YACCO,KAAK,SACL6C,QAAQ,YACRtC,UAAU,qGACX,SAGD,oBAACd,YACCO,KAAK,WACL6C,QAAQ,UACRtC,UAAU,mGACX,eAOX,CAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as React from"react";import{forwardRef}from"react";const IconProductChatMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:
|
|
1
|
+
import*as React from"react";import{forwardRef}from"react";const IconProductChatMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:6,d:"M38 11h52c13.255 0 24 10.745 24 24v70.41c0 5.213-6.19 7.946-10.043 4.434l-22.812-20.8A4 4 0 0 0 78.45 88H38c-13.255 0-24-10.745-24-24V35c0-13.255 10.745-24 24-24Z"}));const ForwardRef=forwardRef(IconProductChatMono);export default ForwardRef;
|
|
2
2
|
//# sourceMappingURL=icon-product-chat-mono.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-chat-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductChatMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-chat-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductChatMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={6} d=\"M38 11h52c13.255 0 24 10.745 24 24v70.41c0 5.213-6.19 7.946-10.043 4.434l-22.812-20.8A4 4 0 0 0 78.45 88H38c-13.255 0-24-10.745-24-24V35c0-13.255 10.745-24 24-24Z\" /></svg>;\nconst ForwardRef = forwardRef(IconProductChatMono);\nexport default ForwardRef;"],"names":["React","forwardRef","IconProductChatMono","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","path","stroke","strokeWidth","d","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,oBAAsB,CAAC,CAC3BC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,IAAKC,OAAQ,IAAKC,KAAK,OAAOC,QAAQ,cAAcN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,QAAKC,OAAO,eAAeC,YAAa,EAAGC,EAAE,wKACxT,MAAMC,WAAalB,WAAWC,oBAC9B,gBAAeiB,UAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as React from"react";import{forwardRef}from"react";const IconProductLiveobjectsMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("
|
|
1
|
+
import*as React from"react";import{forwardRef}from"react";const IconProductLiveobjectsMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("g",{stroke:"currentColor",strokeLinecap:"round",strokeWidth:6},React.createElement("path",{d:"M76 11h17c13.255 0 24 10.745 24 24v17M52 11H35c-13.255 0-24 10.745-24 24v17m0 24v17c0 13.255 10.745 24 24 24h17m65-41v17c0 13.255-10.745 24-24 24H76"}),React.createElement("path",{strokeLinejoin:"round",d:"m43 66 17 17 26-38"})));const ForwardRef=forwardRef(IconProductLiveobjectsMono);export default ForwardRef;
|
|
2
2
|
//# sourceMappingURL=icon-product-liveobjects-mono.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-liveobjects-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductLiveobjectsMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-liveobjects-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductLiveobjectsMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<g stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth={6}><path d=\"M76 11h17c13.255 0 24 10.745 24 24v17M52 11H35c-13.255 0-24 10.745-24 24v17m0 24v17c0 13.255 10.745 24 24 24h17m65-41v17c0 13.255-10.745 24-24 24H76\" /><path strokeLinejoin=\"round\" d=\"m43 66 17 17 26-38\" /></g></svg>;\nconst ForwardRef = forwardRef(IconProductLiveobjectsMono);\nexport default ForwardRef;"],"names":["React","forwardRef","IconProductLiveobjectsMono","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","g","stroke","strokeLinecap","strokeWidth","path","d","strokeLinejoin","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,2BAA6B,CAAC,CAClCC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,IAAKC,OAAQ,IAAKC,KAAK,OAAOC,QAAQ,cAAcN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,KAAEC,OAAO,eAAeC,cAAc,QAAQC,YAAa,GAAG,oBAACC,QAAKC,EAAE,yJAAyJ,oBAACD,QAAKE,eAAe,QAAQD,EAAE,yBACzgB,MAAME,WAAarB,WAAWC,2BAC9B,gBAAeoB,UAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as React from"react";import{forwardRef}from"react";const IconProductLivesyncMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeWidth:
|
|
1
|
+
import*as React from"react";import{forwardRef}from"react";const IconProductLivesyncMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeWidth:6,d:"M115.029 117H64V78.015a1 1 0 0 1 1.605-.797l50.029 37.986c.763.579.353 1.796-.605 1.796ZM11 52v25c0 22.091 17.909 40 40 40h13M12.97 11H64v38.985a1 1 0 0 1-1.605.797L12.366 12.797c-.763-.58-.353-1.797.605-1.797ZM117 76V51c0-22.091-17.909-40-40-40H64"}));const ForwardRef=forwardRef(IconProductLivesyncMono);export default ForwardRef;
|
|
2
2
|
//# sourceMappingURL=icon-product-livesync-mono.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-livesync-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductLivesyncMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth={
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-livesync-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductLivesyncMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth={6} d=\"M115.029 117H64V78.015a1 1 0 0 1 1.605-.797l50.029 37.986c.763.579.353 1.796-.605 1.796ZM11 52v25c0 22.091 17.909 40 40 40h13M12.97 11H64v38.985a1 1 0 0 1-1.605.797L12.366 12.797c-.763-.58-.353-1.797.605-1.797ZM117 76V51c0-22.091-17.909-40-40-40H64\" /></svg>;\nconst ForwardRef = forwardRef(IconProductLivesyncMono);\nexport default ForwardRef;"],"names":["React","forwardRef","IconProductLivesyncMono","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","path","stroke","strokeLinecap","strokeWidth","d","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,wBAA0B,CAAC,CAC/BC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,IAAKC,OAAQ,IAAKC,KAAK,OAAOC,QAAQ,cAAcN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,QAAKC,OAAO,eAAeC,cAAc,QAAQC,YAAa,EAAGC,EAAE,8PAC9U,MAAMC,WAAanB,WAAWC,wBAC9B,gBAAekB,UAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as React from"react";import{forwardRef}from"react";const IconProductPubsubMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:
|
|
1
|
+
import*as React from"react";import{forwardRef}from"react";const IconProductPubsubMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:6,d:"M56.604 13.893 16.802 77.888C15.145 80.552 17.061 84 20.2 84H62a2 2 0 0 1 2 2v25.995c0 4.023 5.272 5.529 7.397 2.112l39.802-63.994c1.657-2.665-.259-6.113-3.397-6.113H66a2 2 0 0 1-2-2V16.005c0-4.023-5.271-5.529-7.396-2.112Z"}));const ForwardRef=forwardRef(IconProductPubsubMono);export default ForwardRef;
|
|
2
2
|
//# sourceMappingURL=icon-product-pubsub-mono.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-pubsub-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductPubsubMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-pubsub-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductPubsubMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={6} d=\"M56.604 13.893 16.802 77.888C15.145 80.552 17.061 84 20.2 84H62a2 2 0 0 1 2 2v25.995c0 4.023 5.272 5.529 7.397 2.112l39.802-63.994c1.657-2.665-.259-6.113-3.397-6.113H66a2 2 0 0 1-2-2V16.005c0-4.023-5.271-5.529-7.396-2.112Z\" /></svg>;\nconst ForwardRef = forwardRef(IconProductPubsubMono);\nexport default ForwardRef;"],"names":["React","forwardRef","IconProductPubsubMono","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","path","stroke","strokeWidth","d","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,sBAAwB,CAAC,CAC7BC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,IAAKC,OAAQ,IAAKC,KAAK,OAAOC,QAAQ,cAAcN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,QAAKC,OAAO,eAAeC,YAAa,EAAGC,EAAE,oOACxT,MAAMC,WAAalB,WAAWC,sBAC9B,gBAAeiB,UAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as React from"react";import{forwardRef}from"react";const IconProductSpacesMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:
|
|
1
|
+
import*as React from"react";import{forwardRef}from"react";const IconProductSpacesMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,fill:"none",viewBox:"0 0 128 128",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:6,d:"m41.23 109.769-23.404-84.56c-1.244-4.494 2.889-8.627 7.383-7.383l84.56 23.405c5.545 1.535 5.96 9.239.611 11.36L72.213 67.726a8 8 0 0 0-4.487 4.487L52.59 110.38c-2.121 5.349-9.825 4.934-11.36-.611Z"}));const ForwardRef=forwardRef(IconProductSpacesMono);export default ForwardRef;
|
|
2
2
|
//# sourceMappingURL=icon-product-spaces-mono.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-spaces-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductSpacesMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/Icon/components/icon-product-spaces-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconProductSpacesMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} fill=\"none\" viewBox=\"0 0 128 128\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={6} d=\"m41.23 109.769-23.404-84.56c-1.244-4.494 2.889-8.627 7.383-7.383l84.56 23.405c5.545 1.535 5.96 9.239.611 11.36L72.213 67.726a8 8 0 0 0-4.487 4.487L52.59 110.38c-2.121 5.349-9.825 4.934-11.36-.611Z\" /></svg>;\nconst ForwardRef = forwardRef(IconProductSpacesMono);\nexport default ForwardRef;"],"names":["React","forwardRef","IconProductSpacesMono","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","path","stroke","strokeWidth","d","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,sBAAwB,CAAC,CAC7BC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,IAAKC,OAAQ,IAAKC,KAAK,OAAOC,QAAQ,cAAcN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,QAAKC,OAAO,eAAeC,YAAa,EAAGC,EAAE,0MACxT,MAAMC,WAAalB,WAAWC,sBAC9B,gBAAeiB,UAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import{PanelTitle}from"./
|
|
1
|
+
import React from"react";import{PanelTitle}from"./PanelTitle";import Badge from"../Badge";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";const getCategoryColor=category=>{const upperCategory=category.toUpperCase();if(["NEW RELEASE","ABLY ENGINEERING","ABLY NEWS","NEW FEATURE","REALTIME EXPERIENCES"].includes(upperCategory))return"orange";if(["CHAT","SPACES"].includes(upperCategory))return"blue";if(["LIVEOBJECTS","LIVESYNC"].includes(upperCategory))return"green";if(upperCategory==="PUBSUB")return"pink";if(upperCategory==="AI TRANSPORT")return"violet";return"neutral"};const MeganavBlog=({title,link,icon,posts})=>{return React.createElement(React.Fragment,null,React.createElement("div",{className:"mt-3 hidden md:block"},React.createElement(PanelTitle,{title:title,link:link}),posts.map(post=>React.createElement("a",{href:post.link,className:"flex flex-col gap-1 p-3 transition-colors group/blog-post rounded-lg hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 focus-base",key:post.link},React.createElement("span",{className:"flex gap-2"},post.categories.map(category=>React.createElement(Badge,{color:getCategoryColor(category),key:category,size:"xs",className:"group-hover/blog-post:bg-neutral-000 dark:group-hover/blog-post:bg-neutral-1300"},category.toUpperCase()))),React.createElement("span",{className:"ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover/blog-post:text-neutral-1300 dark:group-hover/blog-post:text-neutral-000"},post.title),React.createElement("span",{className:"text-[11px] font-medium leading-[1.4] text-neutral-700 dark:text-neutral-600"},post.pubDate)))),React.createElement("div",{className:"block md:hidden"},React.createElement(MeganavPanelItemLinks,{listItems:[{label:title,link:link,icon:icon}]})))};export default MeganavBlog;
|
|
2
2
|
//# sourceMappingURL=MeganavBlog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/MeganavBlog.tsx"],"sourcesContent":["import React from \"react\";\nimport { PanelTitle } from \"./
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/MeganavBlog.tsx"],"sourcesContent":["import React from \"react\";\nimport { PanelTitle } from \"./PanelTitle\";\nimport Badge from \"../Badge\";\n\nimport { ColorClassColorGroups } from \"../styles/colors/types\";\nimport MeganavPanelItemLinks from \"./MeganavPanelItemLinks\";\nimport { IconName } from \"../Icon/types\";\n\nexport type BlogPost = {\n title: string;\n link: string;\n categories: string[];\n pubDate: string;\n};\n\nexport type MeganavBlogProps = {\n title: string;\n link: string;\n icon?: IconName;\n posts: BlogPost[];\n};\n\nconst getCategoryColor = (category: string): ColorClassColorGroups => {\n const upperCategory = category.toUpperCase();\n if (\n [\n \"NEW RELEASE\",\n \"ABLY ENGINEERING\",\n \"ABLY NEWS\",\n \"NEW FEATURE\",\n \"REALTIME EXPERIENCES\",\n ].includes(upperCategory)\n )\n return \"orange\";\n if ([\"CHAT\", \"SPACES\"].includes(upperCategory)) return \"blue\";\n if ([\"LIVEOBJECTS\", \"LIVESYNC\"].includes(upperCategory)) return \"green\";\n if (upperCategory === \"PUBSUB\") return \"pink\";\n if (upperCategory === \"AI TRANSPORT\") return \"violet\";\n return \"neutral\";\n};\n\nconst MeganavBlog = ({ title, link, icon, posts }: MeganavBlogProps) => {\n return (\n <>\n <div className=\"mt-3 hidden md:block\">\n <PanelTitle title={title} link={link} />\n {posts.map((post) => (\n <a\n href={post.link}\n className=\"flex flex-col gap-1 p-3 \n transition-colors group/blog-post rounded-lg\n hover:bg-neutral-100 dark:hover:bg-neutral-1200 \n active:bg-neutral-200 dark:active:bg-neutral-1100 focus-base\"\n key={post.link}\n >\n <span className=\"flex gap-2\">\n {post.categories.map((category: string) => (\n <Badge\n color={getCategoryColor(category)}\n key={category}\n size=\"xs\"\n className=\"group-hover/blog-post:bg-neutral-000 dark:group-hover/blog-post:bg-neutral-1300\"\n >\n {category.toUpperCase()}\n </Badge>\n ))}\n </span>\n <span\n className=\"ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300\n group-hover/blog-post:text-neutral-1300 dark:group-hover/blog-post:text-neutral-000\"\n >\n {post.title}\n </span>\n\n <span className=\"text-[11px] font-medium leading-[1.4] text-neutral-700 dark:text-neutral-600\">\n {post.pubDate}\n </span>\n </a>\n ))}\n </div>\n <div className=\"block md:hidden\">\n <MeganavPanelItemLinks\n listItems={[\n {\n label: title,\n link: link,\n icon: icon,\n },\n ]}\n />\n </div>\n </>\n );\n};\n\nexport default MeganavBlog;\n"],"names":["React","PanelTitle","Badge","MeganavPanelItemLinks","getCategoryColor","category","upperCategory","toUpperCase","includes","MeganavBlog","title","link","icon","posts","div","className","map","post","a","href","key","span","categories","color","size","pubDate","listItems","label"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAASC,UAAU,KAAQ,cAAe,AAC1C,QAAOC,UAAW,UAAW,AAG7B,QAAOC,0BAA2B,yBAA0B,CAiB5D,MAAMC,iBAAmB,AAACC,WACxB,MAAMC,cAAgBD,SAASE,WAAW,GAC1C,GACE,CACE,cACA,mBACA,YACA,cACA,uBACD,CAACC,QAAQ,CAACF,eAEX,MAAO,SACT,GAAI,CAAC,OAAQ,SAAS,CAACE,QAAQ,CAACF,eAAgB,MAAO,OACvD,GAAI,CAAC,cAAe,WAAW,CAACE,QAAQ,CAACF,eAAgB,MAAO,QAChE,GAAIA,gBAAkB,SAAU,MAAO,OACvC,GAAIA,gBAAkB,eAAgB,MAAO,SAC7C,MAAO,SACT,EAEA,MAAMG,YAAc,CAAC,CAAEC,KAAK,CAAEC,IAAI,CAAEC,IAAI,CAAEC,KAAK,CAAoB,IACjE,OACE,wCACE,oBAACC,OAAIC,UAAU,wBACb,oBAACd,YAAWS,MAAOA,MAAOC,KAAMA,OAC/BE,MAAMG,GAAG,CAAC,AAACC,MACV,oBAACC,KACCC,KAAMF,KAAKN,IAAI,CACfI,UAAU,uLAIVK,IAAKH,KAAKN,IAAI,EAEd,oBAACU,QAAKN,UAAU,cACbE,KAAKK,UAAU,CAACN,GAAG,CAAC,AAACX,UACpB,oBAACH,OACCqB,MAAOnB,iBAAiBC,UACxBe,IAAKf,SACLmB,KAAK,KACLT,UAAU,mFAETV,SAASE,WAAW,MAI3B,oBAACc,QACCN,UAAU,4JAGTE,KAAKP,KAAK,EAGb,oBAACW,QAAKN,UAAU,gFACbE,KAAKQ,OAAO,KAKrB,oBAACX,OAAIC,UAAU,mBACb,oBAACZ,uBACCuB,UAAW,CACT,CACEC,MAAOjB,MACPC,KAAMA,KACNC,KAAMA,IACR,EACD,IAKX,CAEA,gBAAeH,WAAY"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import{PanelTitle}from"./
|
|
1
|
+
import React from"react";import{PanelTitle}from"./PanelTitle";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";const MeganavCustomerStories=({customerStoriesHighlight,title,link,icon})=>{const{companyName,companyDesc,companyLink,companyLogo,companyLogoDark}=customerStoriesHighlight;return React.createElement(React.Fragment,null,React.createElement("div",{className:"mt-3 hidden md:block"},React.createElement(PanelTitle,{title:title,link:link}),React.createElement("a",{href:companyLink,className:"flex flex-col gap-y-2.5 p-3 pointer-events-auto rounded-lg transition-colors group/customer-story-highlight hover:bg-neutral-100 dark:hover:bg-neutral-1200 focus-base active:bg-neutral-200 dark:active:bg-neutral-1100"},React.createElement("figure",{className:"rounded bg-neutral-100 dark:bg-neutral-1200 group-hover/customer-story-highlight:bg-neutral-000 dark:group-hover/customer-story-highlight:bg-neutral-1300 flex justify-center items-center gap-4 h-[180px]"},React.createElement("img",{src:companyLogo,alt:companyName,className:"max-h-[120px] dark:hidden"}),companyLogoDark&&React.createElement("img",{src:companyLogoDark,alt:companyName,className:"max-h-[120px] hidden dark:block"})),React.createElement("span",{className:"flex flex-col gap-2"},React.createElement("span",{className:"ui-text-p4 text-neutral-1000 dark:text-neutral-300"},React.createElement("strong",{className:"font-semibold text-neutral-1300 dark:text-neutral-000"},companyName)," ",companyDesc)))),React.createElement("div",{className:"block md:hidden"},React.createElement(MeganavPanelItemLinks,{listItems:[{label:title,link:link,icon:icon}]})))};export default MeganavCustomerStories;
|
|
2
2
|
//# sourceMappingURL=MeganavCustomerStories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/MeganavCustomerStories.tsx"],"sourcesContent":["import React from \"react\";\nimport { PanelTitle } from \"./
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/MeganavCustomerStories.tsx"],"sourcesContent":["import React from \"react\";\nimport { PanelTitle } from \"./PanelTitle\";\nimport MeganavPanelItemLinks from \"./MeganavPanelItemLinks\";\nimport { IconName } from \"../Icon/types\";\n\nexport type CustomerStoryHighlight = {\n companyName: string;\n companyDesc: string;\n companyLink: string;\n companyLogo: string;\n companyLogoDark?: string;\n};\n\nconst MeganavCustomerStories = ({\n customerStoriesHighlight,\n title,\n link,\n icon,\n}: {\n customerStoriesHighlight: CustomerStoryHighlight;\n title: string;\n link: string;\n icon?: IconName;\n}) => {\n const {\n companyName,\n companyDesc,\n companyLink,\n companyLogo,\n companyLogoDark,\n } = customerStoriesHighlight;\n return (\n <>\n <div className=\"mt-3 hidden md:block\">\n <PanelTitle title={title} link={link} />\n <a\n href={companyLink}\n className=\"flex flex-col gap-y-2.5 p-3 pointer-events-auto rounded-lg\n transition-colors group/customer-story-highlight \n hover:bg-neutral-100 dark:hover:bg-neutral-1200 focus-base\n active:bg-neutral-200 dark:active:bg-neutral-1100\"\n >\n <figure\n className=\"rounded bg-neutral-100 dark:bg-neutral-1200 \n group-hover/customer-story-highlight:bg-neutral-000 \n dark:group-hover/customer-story-highlight:bg-neutral-1300\n flex justify-center items-center gap-4 h-[180px]\"\n >\n <img\n src={companyLogo}\n alt={companyName}\n className=\"max-h-[120px] dark:hidden\"\n />\n {companyLogoDark && (\n <img\n src={companyLogoDark}\n alt={companyName}\n className=\"max-h-[120px] hidden dark:block\"\n />\n )}\n </figure>\n <span className=\"flex flex-col gap-2\">\n <span className=\"ui-text-p4 text-neutral-1000 dark:text-neutral-300\">\n <strong className=\"font-semibold text-neutral-1300 dark:text-neutral-000\">\n {companyName}\n </strong>{\" \"}\n {companyDesc}\n </span>\n </span>\n </a>\n </div>\n <div className=\"block md:hidden\">\n <MeganavPanelItemLinks\n listItems={[\n {\n label: title,\n link: link,\n icon: icon,\n },\n ]}\n />\n </div>\n </>\n );\n};\n\nexport default MeganavCustomerStories;\n"],"names":["React","PanelTitle","MeganavPanelItemLinks","MeganavCustomerStories","customerStoriesHighlight","title","link","icon","companyName","companyDesc","companyLink","companyLogo","companyLogoDark","div","className","a","href","figure","img","src","alt","span","strong","listItems","label"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAASC,UAAU,KAAQ,cAAe,AAC1C,QAAOC,0BAA2B,yBAA0B,CAW5D,MAAMC,uBAAyB,CAAC,CAC9BC,wBAAwB,CACxBC,KAAK,CACLC,IAAI,CACJC,IAAI,CAML,IACC,KAAM,CACJC,WAAW,CACXC,WAAW,CACXC,WAAW,CACXC,WAAW,CACXC,eAAe,CAChB,CAAGR,yBACJ,OACE,wCACE,oBAACS,OAAIC,UAAU,wBACb,oBAACb,YAAWI,MAAOA,MAAOC,KAAMA,OAChC,oBAACS,KACCC,KAAMN,YACNI,UAAU,6NAKV,oBAACG,UACCH,UAAU,gNAKV,oBAACI,OACCC,IAAKR,YACLS,IAAKZ,YACLM,UAAU,8BAEXF,iBACC,oBAACM,OACCC,IAAKP,gBACLQ,IAAKZ,YACLM,UAAU,qCAIhB,oBAACO,QAAKP,UAAU,uBACd,oBAACO,QAAKP,UAAU,sDACd,oBAACQ,UAAOR,UAAU,yDACfN,aACO,IACTC,gBAKT,oBAACI,OAAIC,UAAU,mBACb,oBAACZ,uBACCqB,UAAW,CACT,CACEC,MAAOnB,MACPC,KAAMA,KACNC,KAAMA,IACR,EACD,IAKX,CAEA,gBAAeJ,sBAAuB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import Accordion from"../Accordion";import{menuItemLinks}from"./data";import cn from"../utils/cn";export const MeganavMobile=({navItems})=>{const menuItemClassname="text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000";return React.createElement("div",{className:"overflow-y-auto"},React.createElement(Accordion,{theme:"transparent",className:"px-4 pt-4",data:navItems,icons:{closed:{name:"icon-gui-chevron-down-outline"},open:{name:"icon-gui-chevron-up-outline"}},options:{autoClose:true,hideBorders:true,headerCSS:`px-0 ${menuItemClassname}`,contentCSS:"px-0",selectedHeaderCSS:"text-neutral-1300 dark:text-neutral-000",rowIconSize:"24px"}}),menuItemLinks&&React.createElement("div",{className:"mb-3"},menuItemLinks.map(link=>React.createElement("a",{href:link.link,key:link.name,className:cn("px-4 w-full block ui-text-p1",menuItemClassname)},link.name))))};
|
|
1
|
+
import React from"react";import Accordion from"../Accordion";import{menuItemLinks}from"./data";import cn from"../utils/cn";export const MeganavMobile=({navItems})=>{const menuItemClassname="text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000 hover:text-neutral-1000 dark:hover:text-neutral-000 active:text-neutral-1000 dark:active:text-neutral-000";return React.createElement("div",{className:"overflow-y-auto"},React.createElement(Accordion,{theme:"transparent",className:"px-4 pt-4",data:navItems,icons:{closed:{name:"icon-gui-chevron-down-outline"},open:{name:"icon-gui-chevron-up-outline"}},options:{autoClose:true,hideBorders:true,headerCSS:`px-0 ${menuItemClassname}`,contentCSS:"px-0",selectedHeaderCSS:"text-neutral-1300 dark:text-neutral-000",rowIconSize:"24px"}}),menuItemLinks&&React.createElement("div",{className:"mb-3"},menuItemLinks.map(link=>React.createElement("a",{href:link.link,key:link.name,className:cn("px-4 w-full block ui-text-p1",menuItemClassname)},link.name))))};
|
|
2
2
|
//# sourceMappingURL=MeganavMobile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/MeganavMobile.tsx"],"sourcesContent":["import React from \"react\";\nimport Accordion from \"../Accordion\";\nimport { AccordionData } from \"../Accordion/types\";\nimport { menuItemLinks } from \"./data\";\nimport cn from \"../utils/cn\";\n\nexport const MeganavMobile = ({ navItems }: { navItems: AccordionData[] }) => {\n const menuItemClassname =\n \"text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000\";\n return (\n <div className=\"overflow-y-auto\">\n <Accordion\n theme=\"transparent\"\n className=\"px-4 pt-4\"\n data={navItems}\n icons={{\n closed: { name: \"icon-gui-chevron-down-outline\" },\n open: { name: \"icon-gui-chevron-up-outline\" },\n }}\n options={{\n autoClose: true,\n hideBorders: true,\n headerCSS: `px-0 ${menuItemClassname}`,\n contentCSS: \"px-0\",\n selectedHeaderCSS: \"text-neutral-1300 dark:text-neutral-000\",\n rowIconSize: \"24px\",\n }}\n />\n {menuItemLinks && (\n <div className=\"mb-3\">\n {menuItemLinks.map((link) => (\n <a\n href={link.link}\n key={link.name}\n className={cn(\"px-4 w-full block ui-text-p1\", menuItemClassname)}\n >\n {link.name}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","Accordion","menuItemLinks","cn","MeganavMobile","navItems","menuItemClassname","div","className","theme","data","icons","closed","name","open","options","autoClose","hideBorders","headerCSS","contentCSS","selectedHeaderCSS","rowIconSize","map","link","a","href","key"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,cAAe,cAAe,AAErC,QAASC,aAAa,KAAQ,QAAS,AACvC,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,cAAgB,CAAC,CAAEC,QAAQ,CAAiC,IACvE,MAAMC,kBACJ,
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/MeganavMobile.tsx"],"sourcesContent":["import React from \"react\";\nimport Accordion from \"../Accordion\";\nimport { AccordionData } from \"../Accordion/types\";\nimport { menuItemLinks } from \"./data\";\nimport cn from \"../utils/cn\";\n\nexport const MeganavMobile = ({ navItems }: { navItems: AccordionData[] }) => {\n const menuItemClassname =\n \"text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000 hover:text-neutral-1000 dark:hover:text-neutral-000 active:text-neutral-1000 dark:active:text-neutral-000\";\n return (\n <div className=\"overflow-y-auto\">\n <Accordion\n theme=\"transparent\"\n className=\"px-4 pt-4\"\n data={navItems}\n icons={{\n closed: { name: \"icon-gui-chevron-down-outline\" },\n open: { name: \"icon-gui-chevron-up-outline\" },\n }}\n options={{\n autoClose: true,\n hideBorders: true,\n headerCSS: `px-0 ${menuItemClassname}`,\n contentCSS: \"px-0\",\n selectedHeaderCSS: \"text-neutral-1300 dark:text-neutral-000\",\n rowIconSize: \"24px\",\n }}\n />\n {menuItemLinks && (\n <div className=\"mb-3\">\n {menuItemLinks.map((link) => (\n <a\n href={link.link}\n key={link.name}\n className={cn(\"px-4 w-full block ui-text-p1\", menuItemClassname)}\n >\n {link.name}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","Accordion","menuItemLinks","cn","MeganavMobile","navItems","menuItemClassname","div","className","theme","data","icons","closed","name","open","options","autoClose","hideBorders","headerCSS","contentCSS","selectedHeaderCSS","rowIconSize","map","link","a","href","key"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,cAAe,cAAe,AAErC,QAASC,aAAa,KAAQ,QAAS,AACvC,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,cAAgB,CAAC,CAAEC,QAAQ,CAAiC,IACvE,MAAMC,kBACJ,+KACF,OACE,oBAACC,OAAIC,UAAU,mBACb,oBAACP,WACCQ,MAAM,cACND,UAAU,YACVE,KAAML,SACNM,MAAO,CACLC,OAAQ,CAAEC,KAAM,+BAAgC,EAChDC,KAAM,CAAED,KAAM,6BAA8B,CAC9C,EACAE,QAAS,CACPC,UAAW,KACXC,YAAa,KACbC,UAAW,CAAC,KAAK,EAAEZ,kBAAkB,CAAC,CACtCa,WAAY,OACZC,kBAAmB,0CACnBC,YAAa,MACf,IAEDnB,eACC,oBAACK,OAAIC,UAAU,QACZN,cAAcoB,GAAG,CAAC,AAACC,MAClB,oBAACC,KACCC,KAAMF,KAAKA,IAAI,CACfG,IAAKH,KAAKV,IAAI,CACdL,UAAWL,GAAG,+BAAgCG,oBAE7CiB,KAAKV,IAAI,IAOxB,CAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import{productsForNav}from"./data";import{productNames}from"../ProductTile/data";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";import MeganavTile from"./MeganavTile";import cn from"../utils/cn";const
|
|
1
|
+
import React from"react";import{productsForNav}from"./data";import{productNames}from"../ProductTile/data";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";import MeganavTile from"./MeganavTile";import cn from"../utils/cn";const basePanelClassName="bg-neutral-000 dark:bg-neutral-1300 m-0 md:m-6";const gridPanelClassName=cn(basePanelClassName,"grid grid-cols-1 md:grid-cols-3 gap-x-4");export const MeganavPanel=({displayProductTile,panelLeft,panelMiddleItems,panelRightItems,panelRightBottom,panelRightBottomClassName})=>{const renderProductsGrid=()=>React.createElement("div",{className:"grid grid-cols-1 sm:grid-cols-2 col-span-1 sm:col-span-2"},productNames.map(product=>React.createElement(MeganavTile,{key:product,productName:product,link:productsForNav[product].link??"#",animateIcons:true})));return React.createElement("div",{className:cn(gridPanelClassName,"items-start")},displayProductTile?renderProductsGrid():React.createElement(React.Fragment,null,panelLeft,panelMiddleItems),React.createElement("div",{className:"flex flex-col justify-between gap-y-6 mt-3 self-stretch"},panelRightItems?.map(rightItem=>React.createElement(MeganavPanelItemLinks,{key:rightItem.link?.label||rightItem.label,label:rightItem.label,listItems:rightItem.listItems,link:rightItem.link,displayTitleInMobile:rightItem.displayTitleInMobile??true})),panelRightBottom&&React.createElement("div",{className:cn("items-end mt-4 md:mt-0",panelRightBottomClassName)},panelRightBottom)))};export const MeganavPanelFullwidth=({panelItems})=>React.createElement(React.Fragment,null,React.createElement("div",{className:cn(gridPanelClassName,"hidden md:grid")},panelItems.map(item=>React.createElement(MeganavTile,{key:item.label,navLabel:item.label,navIcon:item.icon,navDescription:item.description,link:item.link,showAblyText:false}))),React.createElement("div",{className:cn(basePanelClassName,"block md:hidden")},React.createElement(MeganavPanelItemLinks,{listItems:panelItems})));
|
|
2
2
|
//# sourceMappingURL=MeganavPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/MeganavPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport { FlyoutPanelList, productsForNav } from \"./data\";\nimport { ProductName, productNames } from \"../ProductTile/data\";\nimport MeganavPanelItemLinks, {\n MeganavPanelItemLink,\n} from \"./MeganavPanelItemLinks\";\nimport MeganavTile from \"./MeganavTile\";\nimport cn from \"../utils/cn\";\n\ntype MeganavPanelProps = {\n displayProductTile?: boolean;\n panelLeft?: React.ReactNode;\n panelMiddleItems?: React.ReactNode;\n panelRightItems?: MeganavPanelItemLink[];\n panelRightBottom?: React.ReactNode;\n};\n\nconst
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/MeganavPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport { FlyoutPanelList, productsForNav } from \"./data\";\nimport { ProductName, productNames } from \"../ProductTile/data\";\nimport MeganavPanelItemLinks, {\n MeganavPanelItemLink,\n} from \"./MeganavPanelItemLinks\";\nimport MeganavTile from \"./MeganavTile\";\nimport cn from \"../utils/cn\";\n\ntype MeganavPanelProps = {\n displayProductTile?: boolean;\n panelLeft?: React.ReactNode;\n panelMiddleItems?: React.ReactNode;\n panelRightItems?: MeganavPanelItemLink[];\n panelRightBottom?: React.ReactNode;\n panelRightBottomClassName?: string;\n};\n\nconst basePanelClassName = \"bg-neutral-000 dark:bg-neutral-1300 m-0 md:m-6\";\n\nconst gridPanelClassName = cn(\n basePanelClassName,\n \"grid grid-cols-1 md:grid-cols-3 gap-x-4\",\n);\n\nexport const MeganavPanel = ({\n displayProductTile,\n panelLeft,\n panelMiddleItems,\n panelRightItems,\n panelRightBottom,\n panelRightBottomClassName,\n}: MeganavPanelProps) => {\n const renderProductsGrid = () => (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 col-span-1 sm:col-span-2\">\n {productNames.map((product) => (\n <MeganavTile\n key={product}\n productName={product as ProductName}\n link={productsForNav[product].link ?? \"#\"}\n animateIcons\n />\n ))}\n </div>\n );\n\n return (\n <div className={cn(gridPanelClassName, \"items-start\")}>\n {displayProductTile ? (\n renderProductsGrid()\n ) : (\n <>\n {panelLeft}\n {panelMiddleItems}\n </>\n )}\n\n <div className=\"flex flex-col justify-between gap-y-6 mt-3 self-stretch\">\n {panelRightItems?.map((rightItem) => (\n <MeganavPanelItemLinks\n key={rightItem.link?.label || rightItem.label}\n label={rightItem.label}\n listItems={rightItem.listItems}\n link={rightItem.link}\n displayTitleInMobile={rightItem.displayTitleInMobile ?? true}\n />\n ))}\n {panelRightBottom && (\n <div\n className={cn(\"items-end mt-4 md:mt-0\", panelRightBottomClassName)}\n >\n {panelRightBottom}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const MeganavPanelFullwidth = ({\n panelItems,\n}: {\n panelItems: FlyoutPanelList[];\n}) => (\n <>\n <div className={cn(gridPanelClassName, \"hidden md:grid\")}>\n {panelItems.map((item) => (\n <MeganavTile\n key={item.label}\n navLabel={item.label}\n navIcon={item.icon}\n navDescription={item.description}\n link={item.link}\n showAblyText={false}\n />\n ))}\n </div>\n <div className={cn(basePanelClassName, \"block md:hidden\")}>\n <MeganavPanelItemLinks listItems={panelItems} />\n </div>\n </>\n);\n"],"names":["React","productsForNav","productNames","MeganavPanelItemLinks","MeganavTile","cn","basePanelClassName","gridPanelClassName","MeganavPanel","displayProductTile","panelLeft","panelMiddleItems","panelRightItems","panelRightBottom","panelRightBottomClassName","renderProductsGrid","div","className","map","product","key","productName","link","animateIcons","rightItem","label","listItems","displayTitleInMobile","MeganavPanelFullwidth","panelItems","item","navLabel","navIcon","icon","navDescription","description","showAblyText"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAA0BC,cAAc,KAAQ,QAAS,AACzD,QAAsBC,YAAY,KAAQ,qBAAsB,AAChE,QAAOC,0BAEA,yBAA0B,AACjC,QAAOC,gBAAiB,eAAgB,AACxC,QAAOC,OAAQ,aAAc,CAW7B,MAAMC,mBAAqB,iDAE3B,MAAMC,mBAAqBF,GACzBC,mBACA,0CAGF,QAAO,MAAME,aAAe,CAAC,CAC3BC,kBAAkB,CAClBC,SAAS,CACTC,gBAAgB,CAChBC,eAAe,CACfC,gBAAgB,CAChBC,yBAAyB,CACP,IAClB,MAAMC,mBAAqB,IACzB,oBAACC,OAAIC,UAAU,4DACZf,aAAagB,GAAG,CAAC,AAACC,SACjB,oBAACf,aACCgB,IAAKD,QACLE,YAAaF,QACbG,KAAMrB,cAAc,CAACkB,QAAQ,CAACG,IAAI,EAAI,IACtCC,aAAAA,SAMR,OACE,oBAACP,OAAIC,UAAWZ,GAAGE,mBAAoB,gBACpCE,mBACCM,qBAEA,wCACGL,UACAC,kBAIL,oBAACK,OAAIC,UAAU,2DACZL,iBAAiBM,IAAI,AAACM,WACrB,oBAACrB,uBACCiB,IAAKI,UAAUF,IAAI,EAAEG,OAASD,UAAUC,KAAK,CAC7CA,MAAOD,UAAUC,KAAK,CACtBC,UAAWF,UAAUE,SAAS,CAC9BJ,KAAME,UAAUF,IAAI,CACpBK,qBAAsBH,UAAUG,oBAAoB,EAAI,QAG3Dd,kBACC,oBAACG,OACCC,UAAWZ,GAAG,yBAA0BS,4BAEvCD,mBAMb,CAAE,AAEF,QAAO,MAAMe,sBAAwB,CAAC,CACpCC,UAAU,CAGX,GACC,wCACE,oBAACb,OAAIC,UAAWZ,GAAGE,mBAAoB,mBACpCsB,WAAWX,GAAG,CAAC,AAACY,MACf,oBAAC1B,aACCgB,IAAKU,KAAKL,KAAK,CACfM,SAAUD,KAAKL,KAAK,CACpBO,QAASF,KAAKG,IAAI,CAClBC,eAAgBJ,KAAKK,WAAW,CAChCb,KAAMQ,KAAKR,IAAI,CACfc,aAAc,UAIpB,oBAACpB,OAAIC,UAAWZ,GAAGC,mBAAoB,oBACrC,oBAACH,uBAAsBuB,UAAWG,cAGtC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import Icon from"../Icon";import cn from"../utils/cn";import Badge from"../Badge";import{PanelTitle}from"./
|
|
1
|
+
import React from"react";import Icon from"../Icon";import cn from"../utils/cn";import Badge from"../Badge";import{PanelTitle}from"./PanelTitle";const MeganavPanelItemLinks=({label,listItems,link,displayTitleInMobile=true})=>{return React.createElement("ul",{className:cn(!displayTitleInMobile&&"-mt-3 md:mt-0")},(link?.label||label)&&React.createElement(PanelTitle,{title:link?.label||label||"",link:link?.link??"",displayTitleInMobile:displayTitleInMobile}),listItems&&listItems.map(listItem=>React.createElement("li",{className:cn("list-none py-2.5 md:py-2 px-3 my-0 flex gap-x-2.5 rounded-lg group hover:cursor-pointer","hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100",listItem.isMobile?"md:hidden":"md:flex"),key:listItem.label},listItem.icon&&React.createElement(Icon,{name:listItem.icon,size:"1.25rem",additionalCSS:"text-neutral-1000 dark:text-neutral-300"}),React.createElement("a",{className:"pointer-events-auto font-sans text-label2 md:text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover:text-neutral-1300 dark:group-hover:text-neutral-000 focus-base",href:listItem.link},listItem.label),listItem.badge&&React.createElement(Badge,{size:"xs"},listItem.badge))))};export default MeganavPanelItemLinks;
|
|
2
2
|
//# sourceMappingURL=MeganavPanelItemLinks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/MeganavPanelItemLinks.tsx"],"sourcesContent":["import React from \"react\";\nimport Icon from \"../Icon\";\nimport cn from \"../utils/cn\";\nimport Badge from \"../Badge\";\nimport { PanelTitle } from \"./
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/MeganavPanelItemLinks.tsx"],"sourcesContent":["import React from \"react\";\nimport Icon from \"../Icon\";\nimport cn from \"../utils/cn\";\nimport Badge from \"../Badge\";\nimport { PanelTitle } from \"./PanelTitle\";\nimport { IconName } from \"../Icon/types\";\nimport { FlyoutPanelList } from \"./data\";\n\nexport type MeganavPanelItemLink = {\n label?: string;\n listItems: FlyoutPanelList[];\n icon?: IconName;\n link?: {\n label: string;\n link: string;\n };\n displayTitleInMobile?: boolean;\n};\n\nconst MeganavPanelItemLinks = ({\n label,\n listItems,\n link,\n displayTitleInMobile = true,\n}: MeganavPanelItemLink) => {\n return (\n <ul className={cn(!displayTitleInMobile && \"-mt-3 md:mt-0\")}>\n {(link?.label || label) && (\n <PanelTitle\n title={link?.label || label || \"\"}\n link={link?.link ?? \"\"}\n displayTitleInMobile={displayTitleInMobile}\n />\n )}\n\n {listItems &&\n listItems.map((listItem) => (\n <li\n className={cn(\n \"list-none py-2.5 md:py-2 px-3 my-0 flex gap-x-2.5 rounded-lg group hover:cursor-pointer\",\n \"hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100\",\n listItem.isMobile ? \"md:hidden\" : \"md:flex\",\n )}\n key={listItem.label}\n >\n {listItem.icon && (\n <Icon\n name={listItem.icon}\n size=\"1.25rem\"\n additionalCSS=\"text-neutral-1000 dark:text-neutral-300\"\n />\n )}\n <a\n className=\"pointer-events-auto font-sans text-label2 md:text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 \n group-hover:text-neutral-1300 dark:group-hover:text-neutral-000 focus-base\"\n href={listItem.link}\n >\n {listItem.label}\n </a>\n {listItem.badge && <Badge size=\"xs\">{listItem.badge}</Badge>}\n </li>\n ))}\n </ul>\n );\n};\n\nexport default MeganavPanelItemLinks;\n"],"names":["React","Icon","cn","Badge","PanelTitle","MeganavPanelItemLinks","label","listItems","link","displayTitleInMobile","ul","className","title","map","listItem","li","isMobile","key","icon","name","size","additionalCSS","a","href","badge"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,SAAU,SAAU,AAC3B,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,UAAW,UAAW,AAC7B,QAASC,UAAU,KAAQ,cAAe,CAe1C,MAAMC,sBAAwB,CAAC,CAC7BC,KAAK,CACLC,SAAS,CACTC,IAAI,CACJC,qBAAuB,IAAI,CACN,IACrB,OACE,oBAACC,MAAGC,UAAWT,GAAG,CAACO,sBAAwB,kBACxC,AAACD,CAAAA,MAAMF,OAASA,KAAI,GACnB,oBAACF,YACCQ,MAAOJ,MAAMF,OAASA,OAAS,GAC/BE,KAAMA,MAAMA,MAAQ,GACpBC,qBAAsBA,uBAIzBF,WACCA,UAAUM,GAAG,CAAC,AAACC,UACb,oBAACC,MACCJ,UAAWT,GACT,0FACA,oGACAY,SAASE,QAAQ,CAAG,YAAc,WAEpCC,IAAKH,SAASR,KAAK,EAElBQ,SAASI,IAAI,EACZ,oBAACjB,MACCkB,KAAML,SAASI,IAAI,CACnBE,KAAK,UACLC,cAAc,4CAGlB,oBAACC,KACCX,UAAU,6LAEVY,KAAMT,SAASN,IAAI,EAElBM,SAASR,KAAK,EAEhBQ,SAASU,KAAK,EAAI,oBAACrB,OAAMiB,KAAK,MAAMN,SAASU,KAAK,IAK/D,CAEA,gBAAenB,qBAAsB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import React from"react";import FeaturedLink from"../FeaturedLink";import cn from"../utils/cn";export const PanelTitle=({title,link,displayTitleInMobile=true})=>{return React.createElement("div",{className:cn("mb-3 px-3",displayTitleInMobile?"block":"hidden md:block")},link?React.createElement(FeaturedLink,{url:link,textSize:"text-overline2",additionalCSS:"ui-text-overline2 mb-0 py-0 font-medium font-mono text-neutral-700 dark:text-neutral-600 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1100 dark:active:text-neutral-200 focus-base"},title):React.createElement("p",{className:"ui-text-overline2 text-neutral-700 dark:text-neutral-600 font-medium font-mono"},title))};
|
|
2
|
+
//# sourceMappingURL=PanelTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/PanelTitle.tsx"],"sourcesContent":["import React from \"react\";\nimport FeaturedLink from \"../FeaturedLink\";\nimport cn from \"../utils/cn\";\n\nexport const PanelTitle = ({\n title,\n link,\n displayTitleInMobile = true,\n}: {\n title: string;\n link?: string;\n displayTitleInMobile?: boolean;\n}) => {\n return (\n <div\n className={cn(\n \"mb-3 px-3\",\n displayTitleInMobile ? \"block\" : \"hidden md:block\",\n )}\n >\n {link ? (\n <FeaturedLink\n url={link}\n textSize=\"text-overline2\"\n additionalCSS=\"ui-text-overline2 mb-0 py-0 font-medium font-mono\n text-neutral-700 dark:text-neutral-600 hover:text-neutral-1300 dark:hover:text-neutral-000\n active:text-neutral-1100 dark:active:text-neutral-200 focus-base\"\n >\n {title}\n </FeaturedLink>\n ) : (\n <p className=\"ui-text-overline2 text-neutral-700 dark:text-neutral-600 font-medium font-mono\">\n {title}\n </p>\n )}\n </div>\n );\n};\n"],"names":["React","FeaturedLink","cn","PanelTitle","title","link","displayTitleInMobile","div","className","url","textSize","additionalCSS","p"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,iBAAkB,iBAAkB,AAC3C,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,WAAa,CAAC,CACzBC,KAAK,CACLC,IAAI,CACJC,qBAAuB,IAAI,CAK5B,IACC,OACE,oBAACC,OACCC,UAAWN,GACT,YACAI,qBAAuB,QAAU,oBAGlCD,KACC,oBAACJ,cACCQ,IAAKJ,KACLK,SAAS,iBACTC,cAAc,iNAIbP,OAGH,oBAACQ,KAAEJ,UAAU,kFACVJ,OAKX,CAAE"}
|
package/core/Meganav/data.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import G2BestMeetsRequirementsSpring2025 from"../images/badges/g2-best-meets-requirements-spring-2025.svg";import G2BestResultsSpring2025 from"../images/badges/g2-best-results-spring-2025.svg";import G2BestSupportSpring2025 from"../images/badges/g2-best-support-spring-2025.svg";import{products}from"../ProductTile/data";import DoxyMeLogo from"../Meganav/images/cust-logo-doxy-light.png";import DoxyMeLogoDark from"../Meganav/images/cust-logo-doxy-dark.png";export const productsMenu=[{label:"Architecture",icon:"icon-gui-squares-2-x-2-outline",link:"/platform"},{label:"Integrations",icon:"icon-gui-puzzle-piece-outline",link:"/docs/platform/integrations"},{label:"SDKs",icon:"icon-gui-cube-transparent-outline",link:"/docs/sdks"},{label:"Security & Compliance",icon:"icon-gui-shield-check-outline",link:"/security-and-compliance"}];export const compareMenu=[{label:"Ably vs Pusher",link:"/ably-vs-pusher"},{label:"Ably vs PubNub",link:"/ably-vs-pubnub"},{label:"Ably vs Socket.io",link:"/ably-vs-
|
|
1
|
+
import React from"react";import G2BestMeetsRequirementsSpring2025 from"../images/badges/g2-best-meets-requirements-spring-2025.svg";import G2BestResultsSpring2025 from"../images/badges/g2-best-results-spring-2025.svg";import G2BestSupportSpring2025 from"../images/badges/g2-best-support-spring-2025.svg";import{products}from"../ProductTile/data";import DoxyMeLogo from"../Meganav/images/cust-logo-doxy-light.png";import DoxyMeLogoDark from"../Meganav/images/cust-logo-doxy-dark.png";export const productsMenu=[{label:"Architecture",icon:"icon-gui-squares-2-x-2-outline",link:"/platform"},{label:"Integrations",icon:"icon-gui-puzzle-piece-outline",link:"/docs/platform/integrations"},{label:"SDKs",icon:"icon-gui-cube-transparent-outline",link:"/docs/sdks"},{label:"Security & Compliance",icon:"icon-gui-shield-check-outline",link:"/security-and-compliance"}];export const compareMenu=[{label:"Ably vs Pusher",link:"/compare/ably-vs-pusher"},{label:"Ably vs PubNub",link:"/compare/ably-vs-pubnub"},{label:"Ably vs Socket.io",link:"/compare/ably-vs-socketio"}];export const solutionsMenu=[{label:"Fan Engagement",icon:"icon-gui-hand-thumb-up-outline",link:"/fan-engagement",description:"Enhance every moment with live, interactive fan experiences."},{label:"FinTech",icon:"icon-gui-currency-dollar-outline",link:"/fin-tech",description:"Speed, reliability, and confidence in every user interaction."},{label:"EdTech",icon:"icon-gui-academic-cap-outline",link:"/ed-tech",description:"Power collaborative, interactive learning environments."},{label:"CXTech",icon:"icon-gui-face-smile-outline",link:"/cx-tech",description:"Deliver fast support, strong relationships, and high retention."},{label:"HealthTech",icon:"icon-gui-heartbeat-outline",link:"/health-tech",description:"Reliable tools with full data privacy and compliance."}];export const customerStoriesHighlight={companyLogo:DoxyMeLogo,companyLogoDark:DoxyMeLogoDark,companyLink:"/case-studies/doxyme",companyName:"Doxy.me",companyDesc:"built their realtime stack in under six months, cutting costs by 65%, eliminating errors, and transforming a once-feared system into a core strength."};export const companyMenu=[{label:"Our Story",icon:"icon-gui-ably-badge",link:"/case-studies"},{label:"Careers",icon:"icon-gui-briefcase-outline",link:"/careers",badge:"WE'RE HIRING"}];export const ablyAwards=[{image:G2BestSupportSpring2025,desc:"G2 Best Support Spring 2025"},{image:G2BestMeetsRequirementsSpring2025,desc:"G2 Best Meets Requirements Spring 2025"},{image:G2BestResultsSpring2025,desc:"G2 Best Results Spring 2025"}];export const menuItemLinks=[{name:"Pricing",link:"/pricing",isHiddenMobile:true},{name:"Docs",link:"/docs",isHiddenMobile:true}];export const defaultBlogPosts=[{title:"Ably AI Transport: keep your agents connected and stateful across devices",link:"/blog/ably-ai-transport",categories:["New Release","AI Transport"],pubDate:"Dec 9, 2025"},{title:"Live chat at unlimited scale: What it takes to support stadium-sized audiences",link:"/blog/live-chat-at-unlimited-scale",categories:["Chat"],pubDate:"Nov 18, 2025"}];export const productsForNav={...products,pubsub:{...products.pubsub,link:"/pubsub"},liveSync:{...products.liveSync,link:"/livesync"},chat:{...products.chat,link:"/chat"},spaces:{...products.spaces,link:"/spaces"},aiTransport:{...products.aiTransport,link:"/ai-transport"},liveObjects:{...products.liveObjects,link:"/liveobjects"}};
|
|
2
2
|
//# sourceMappingURL=data.js.map
|
package/core/Meganav/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/data.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconName } from \"../Icon/types\";\nimport { CustomerStoryHighlight } from \"./MeganavCustomerStories\";\nimport { BlogPost } from \"./MeganavBlog\";\nimport G2BestMeetsRequirementsSpring2025 from \"../images/badges/g2-best-meets-requirements-spring-2025.svg\";\nimport G2BestResultsSpring2025 from \"../images/badges/g2-best-results-spring-2025.svg\";\nimport G2BestSupportSpring2025 from \"../images/badges/g2-best-support-spring-2025.svg\";\nimport { products } from \"../ProductTile/data\";\nimport DoxyMeLogo from \"../Meganav/images/cust-logo-doxy-light.png\";\nimport DoxyMeLogoDark from \"../Meganav/images/cust-logo-doxy-dark.png\";\n\nexport type FlyoutPanelList = {\n label: string;\n icon?: IconName;\n link: string;\n isMobile?: boolean;\n description?: string;\n badge?: string;\n};\n\nexport type MenuItem = {\n name: string;\n link?: string;\n isHiddenMobile?: boolean;\n content?: React.ReactNode;\n panelClassName?: string;\n};\n\nexport const productsMenu: FlyoutPanelList[] = [\n {\n label: \"Architecture\",\n icon: \"icon-gui-squares-2-x-2-outline\",\n link: \"/platform\",\n },\n {\n label: \"Integrations\",\n icon: \"icon-gui-puzzle-piece-outline\",\n link: \"/docs/platform/integrations\",\n },\n {\n label: \"SDKs\",\n icon: \"icon-gui-cube-transparent-outline\",\n link: \"/docs/sdks\",\n },\n {\n label: \"Security & Compliance\",\n icon: \"icon-gui-shield-check-outline\",\n link: \"/security-and-compliance\",\n },\n];\n\nexport const compareMenu: FlyoutPanelList[] = [\n {\n label: \"Ably vs Pusher\",\n link: \"/ably-vs-pusher\",\n },\n {\n label: \"Ably vs PubNub\",\n link: \"/ably-vs-pubnub\",\n },\n {\n label: \"Ably vs Socket.io\",\n link: \"/ably-vs-
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Meganav/data.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconName } from \"../Icon/types\";\nimport { CustomerStoryHighlight } from \"./MeganavCustomerStories\";\nimport { BlogPost } from \"./MeganavBlog\";\nimport G2BestMeetsRequirementsSpring2025 from \"../images/badges/g2-best-meets-requirements-spring-2025.svg\";\nimport G2BestResultsSpring2025 from \"../images/badges/g2-best-results-spring-2025.svg\";\nimport G2BestSupportSpring2025 from \"../images/badges/g2-best-support-spring-2025.svg\";\nimport { products } from \"../ProductTile/data\";\nimport DoxyMeLogo from \"../Meganav/images/cust-logo-doxy-light.png\";\nimport DoxyMeLogoDark from \"../Meganav/images/cust-logo-doxy-dark.png\";\n\nexport type FlyoutPanelList = {\n label: string;\n icon?: IconName;\n link: string;\n isMobile?: boolean;\n description?: string;\n badge?: string;\n};\n\nexport type MenuItem = {\n name: string;\n link?: string;\n isHiddenMobile?: boolean;\n content?: React.ReactNode;\n panelClassName?: string;\n};\n\nexport const productsMenu: FlyoutPanelList[] = [\n {\n label: \"Architecture\",\n icon: \"icon-gui-squares-2-x-2-outline\",\n link: \"/platform\",\n },\n {\n label: \"Integrations\",\n icon: \"icon-gui-puzzle-piece-outline\",\n link: \"/docs/platform/integrations\",\n },\n {\n label: \"SDKs\",\n icon: \"icon-gui-cube-transparent-outline\",\n link: \"/docs/sdks\",\n },\n {\n label: \"Security & Compliance\",\n icon: \"icon-gui-shield-check-outline\",\n link: \"/security-and-compliance\",\n },\n];\n\nexport const compareMenu: FlyoutPanelList[] = [\n {\n label: \"Ably vs Pusher\",\n link: \"/compare/ably-vs-pusher\",\n },\n {\n label: \"Ably vs PubNub\",\n link: \"/compare/ably-vs-pubnub\",\n },\n {\n label: \"Ably vs Socket.io\",\n link: \"/compare/ably-vs-socketio\",\n },\n];\n\nexport const solutionsMenu: FlyoutPanelList[] = [\n {\n label: \"Fan Engagement\",\n icon: \"icon-gui-hand-thumb-up-outline\",\n link: \"/fan-engagement\",\n description: \"Enhance every moment with live, interactive fan experiences.\",\n },\n {\n label: \"FinTech\",\n icon: \"icon-gui-currency-dollar-outline\",\n link: \"/fin-tech\",\n description:\n \"Speed, reliability, and confidence in every user interaction.\",\n },\n {\n label: \"EdTech\",\n icon: \"icon-gui-academic-cap-outline\",\n link: \"/ed-tech\",\n description: \"Power collaborative, interactive learning environments.\",\n },\n {\n label: \"CXTech\",\n icon: \"icon-gui-face-smile-outline\",\n link: \"/cx-tech\",\n description:\n \"Deliver fast support, strong relationships, and high retention.\",\n },\n\n {\n label: \"HealthTech\",\n icon: \"icon-gui-heartbeat-outline\",\n link: \"/health-tech\",\n description: \"Reliable tools with full data privacy and compliance.\",\n },\n];\n\nexport const customerStoriesHighlight: CustomerStoryHighlight = {\n companyLogo: DoxyMeLogo,\n companyLogoDark: DoxyMeLogoDark,\n companyLink: \"/case-studies/doxyme\",\n companyName: \"Doxy.me\",\n companyDesc:\n \"built their realtime stack in under six months, cutting costs by 65%, eliminating errors, and transforming a once-feared system into a core strength.\",\n};\n\nexport const companyMenu: FlyoutPanelList[] = [\n {\n label: \"Our Story\",\n icon: \"icon-gui-ably-badge\",\n link: \"/case-studies\",\n },\n {\n label: \"Careers\",\n icon: \"icon-gui-briefcase-outline\",\n link: \"/careers\",\n badge: \"WE'RE HIRING\",\n },\n];\n\nexport const ablyAwards = [\n {\n image: G2BestSupportSpring2025,\n desc: \"G2 Best Support Spring 2025\",\n },\n {\n image: G2BestMeetsRequirementsSpring2025,\n desc: \"G2 Best Meets Requirements Spring 2025\",\n },\n {\n image: G2BestResultsSpring2025,\n desc: \"G2 Best Results Spring 2025\",\n },\n];\n\nexport const menuItemLinks = [\n { name: \"Pricing\", link: \"/pricing\", isHiddenMobile: true },\n { name: \"Docs\", link: \"/docs\", isHiddenMobile: true },\n];\n\nexport const defaultBlogPosts: BlogPost[] = [\n {\n title:\n \"Ably AI Transport: keep your agents connected and stateful across devices\",\n link: \"/blog/ably-ai-transport\",\n categories: [\"New Release\", \"AI Transport\"],\n pubDate: \"Dec 9, 2025\",\n },\n {\n title:\n \"Live chat at unlimited scale: What it takes to support stadium-sized audiences\",\n link: \"/blog/live-chat-at-unlimited-scale\",\n categories: [\"Chat\"],\n pubDate: \"Nov 18, 2025\",\n },\n];\n\nexport const productsForNav = {\n ...products,\n pubsub: { ...products.pubsub, link: \"/pubsub\" },\n liveSync: { ...products.liveSync, link: \"/livesync\" },\n chat: { ...products.chat, link: \"/chat\" },\n spaces: { ...products.spaces, link: \"/spaces\" },\n aiTransport: {\n ...products.aiTransport,\n link: \"/ai-transport\",\n },\n liveObjects: { ...products.liveObjects, link: \"/liveobjects\" },\n};\n"],"names":["React","G2BestMeetsRequirementsSpring2025","G2BestResultsSpring2025","G2BestSupportSpring2025","products","DoxyMeLogo","DoxyMeLogoDark","productsMenu","label","icon","link","compareMenu","solutionsMenu","description","customerStoriesHighlight","companyLogo","companyLogoDark","companyLink","companyName","companyDesc","companyMenu","badge","ablyAwards","image","desc","menuItemLinks","name","isHiddenMobile","defaultBlogPosts","title","categories","pubDate","productsForNav","pubsub","liveSync","chat","spaces","aiTransport","liveObjects"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAI1B,QAAOC,sCAAuC,6DAA8D,AAC5G,QAAOC,4BAA6B,kDAAmD,AACvF,QAAOC,4BAA6B,kDAAmD,AACvF,QAASC,QAAQ,KAAQ,qBAAsB,AAC/C,QAAOC,eAAgB,4CAA6C,AACpE,QAAOC,mBAAoB,2CAA4C,AAmBvE,QAAO,MAAMC,aAAkC,CAC7C,CACEC,MAAO,eACPC,KAAM,iCACNC,KAAM,WACR,EACA,CACEF,MAAO,eACPC,KAAM,gCACNC,KAAM,6BACR,EACA,CACEF,MAAO,OACPC,KAAM,oCACNC,KAAM,YACR,EACA,CACEF,MAAO,wBACPC,KAAM,gCACNC,KAAM,0BACR,EACD,AAAC,AAEF,QAAO,MAAMC,YAAiC,CAC5C,CACEH,MAAO,iBACPE,KAAM,yBACR,EACA,CACEF,MAAO,iBACPE,KAAM,yBACR,EACA,CACEF,MAAO,oBACPE,KAAM,2BACR,EACD,AAAC,AAEF,QAAO,MAAME,cAAmC,CAC9C,CACEJ,MAAO,iBACPC,KAAM,iCACNC,KAAM,kBACNG,YAAa,8DACf,EACA,CACEL,MAAO,UACPC,KAAM,mCACNC,KAAM,YACNG,YACE,+DACJ,EACA,CACEL,MAAO,SACPC,KAAM,gCACNC,KAAM,WACNG,YAAa,yDACf,EACA,CACEL,MAAO,SACPC,KAAM,8BACNC,KAAM,WACNG,YACE,iEACJ,EAEA,CACEL,MAAO,aACPC,KAAM,6BACNC,KAAM,eACNG,YAAa,uDACf,EACD,AAAC,AAEF,QAAO,MAAMC,yBAAmD,CAC9DC,YAAaV,WACbW,gBAAiBV,eACjBW,YAAa,uBACbC,YAAa,UACbC,YACE,uJACJ,CAAE,AAEF,QAAO,MAAMC,YAAiC,CAC5C,CACEZ,MAAO,YACPC,KAAM,sBACNC,KAAM,eACR,EACA,CACEF,MAAO,UACPC,KAAM,6BACNC,KAAM,WACNW,MAAO,cACT,EACD,AAAC,AAEF,QAAO,MAAMC,WAAa,CACxB,CACEC,MAAOpB,wBACPqB,KAAM,6BACR,EACA,CACED,MAAOtB,kCACPuB,KAAM,wCACR,EACA,CACED,MAAOrB,wBACPsB,KAAM,6BACR,EACD,AAAC,AAEF,QAAO,MAAMC,cAAgB,CAC3B,CAAEC,KAAM,UAAWhB,KAAM,WAAYiB,eAAgB,IAAK,EAC1D,CAAED,KAAM,OAAQhB,KAAM,QAASiB,eAAgB,IAAK,EACrD,AAAC,AAEF,QAAO,MAAMC,iBAA+B,CAC1C,CACEC,MACE,4EACFnB,KAAM,0BACNoB,WAAY,CAAC,cAAe,eAAe,CAC3CC,QAAS,aACX,EACA,CACEF,MACE,iFACFnB,KAAM,qCACNoB,WAAY,CAAC,OAAO,CACpBC,QAAS,cACX,EACD,AAAC,AAEF,QAAO,MAAMC,eAAiB,CAC5B,GAAG5B,QAAQ,CACX6B,OAAQ,CAAE,GAAG7B,SAAS6B,MAAM,CAAEvB,KAAM,SAAU,EAC9CwB,SAAU,CAAE,GAAG9B,SAAS8B,QAAQ,CAAExB,KAAM,WAAY,EACpDyB,KAAM,CAAE,GAAG/B,SAAS+B,IAAI,CAAEzB,KAAM,OAAQ,EACxC0B,OAAQ,CAAE,GAAGhC,SAASgC,MAAM,CAAE1B,KAAM,SAAU,EAC9C2B,YAAa,CACX,GAAGjC,SAASiC,WAAW,CACvB3B,KAAM,eACR,EACA4B,YAAa,CAAE,GAAGlC,SAASkC,WAAW,CAAE5B,KAAM,cAAe,CAC/D,CAAE"}
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import Status,{StatusUrl}from"../../Status";import MeganavBlog from"../MeganavBlog";import MeganavCustomerStories from"../MeganavCustomerStories";import{MeganavPanel,MeganavPanelFullwidth}from"../MeganavPanel";import{ablyAwards,companyMenu,compareMenu,customerStoriesHighlight,productsMenu,solutionsMenu,menuItemLinks,defaultBlogPosts}from"../data";export const getMenuItemsForHeader=blogPosts=>{const panelClassName="w-full sm:w-[50.9375rem]";const recentBlogPosts=blogPosts?.length>0?blogPosts.slice(0,2):defaultBlogPosts;return[{name:"Products",content:React.createElement(MeganavPanel,{displayProductTile:true,panelRightItems:[{label:"Platform",listItems:productsMenu},{link:{label:"Compare our tech",link:"/compare"},listItems:compareMenu}],panelRightBottom:React.createElement(Status,{statusUrl:StatusUrl,additionalCSS:"px-3 py-2 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg",showDescription:true})}),panelClassName},{name:"Solutions",content:React.createElement(MeganavPanelFullwidth,{panelItems:solutionsMenu}),panelClassName},{name:"Company",content:React.createElement(MeganavPanel,{panelLeft:React.createElement(MeganavCustomerStories,{title:"Customer stories",link:"/case-studies",customerStoriesHighlight:customerStoriesHighlight}),panelMiddleItems:React.createElement(MeganavBlog,{title:"Blog",link:"/blog",posts:recentBlogPosts}),panelRightItems:[{label:"
|
|
1
|
+
import React from"react";import Status,{StatusUrl}from"../../Status";import MeganavBlog from"../MeganavBlog";import MeganavCustomerStories from"../MeganavCustomerStories";import{MeganavPanel,MeganavPanelFullwidth}from"../MeganavPanel";import{ablyAwards,companyMenu,compareMenu,customerStoriesHighlight,productsMenu,solutionsMenu,menuItemLinks,defaultBlogPosts}from"../data";export const getMenuItemsForHeader=blogPosts=>{const panelClassName="w-full sm:w-[50.9375rem]";const recentBlogPosts=blogPosts?.length>0?blogPosts.slice(0,2):defaultBlogPosts;return[{name:"Products",content:React.createElement(MeganavPanel,{displayProductTile:true,panelRightItems:[{label:"Platform",listItems:productsMenu},{link:{label:"Compare our tech",link:"/compare"},listItems:compareMenu}],panelRightBottom:React.createElement(Status,{statusUrl:StatusUrl,additionalCSS:"px-3 py-2 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg",showDescription:true})}),panelClassName},{name:"Solutions",content:React.createElement(MeganavPanelFullwidth,{panelItems:solutionsMenu}),panelClassName},{name:"Company",content:React.createElement(MeganavPanel,{panelLeft:React.createElement(MeganavCustomerStories,{title:"Customer stories",link:"/case-studies",icon:"icon-gui-rocket-launch-outline",customerStoriesHighlight:customerStoriesHighlight}),panelMiddleItems:React.createElement(MeganavBlog,{title:"Blog",link:"/blog",posts:recentBlogPosts,icon:"icon-gui-light-bulb-outline"}),panelRightItems:[{label:"Ably",listItems:companyMenu,displayTitleInMobile:false}],panelRightBottom:React.createElement("div",{className:"flex-1 gap-x-2 hidden md:flex p-3"},ablyAwards.slice(0,3).map(award=>React.createElement("img",{key:award.desc,src:award.image,alt:award.desc,width:"57",height:"64",loading:"lazy"}))),panelRightBottomClassName:"hidden md:flex"}),panelClassName},...menuItemLinks]};
|
|
2
2
|
//# sourceMappingURL=getMenuItemsForHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/Meganav/utils/getMenuItemsForHeader.tsx"],"sourcesContent":["import React from \"react\";\nimport Status, { StatusUrl } from \"../../Status\";\nimport MeganavBlog, { BlogPost } from \"../MeganavBlog\";\nimport MeganavCustomerStories from \"../MeganavCustomerStories\";\nimport { MeganavPanel, MeganavPanelFullwidth } from \"../MeganavPanel\";\nimport {\n ablyAwards,\n companyMenu,\n compareMenu,\n customerStoriesHighlight,\n MenuItem,\n productsMenu,\n solutionsMenu,\n menuItemLinks,\n defaultBlogPosts,\n} from \"../data\";\n\nexport const getMenuItemsForHeader = (blogPosts: BlogPost[]): MenuItem[] => {\n const panelClassName = \"w-full sm:w-[50.9375rem]\";\n const recentBlogPosts =\n blogPosts?.length > 0 ? blogPosts.slice(0, 2) : defaultBlogPosts;\n\n return [\n {\n name: \"Products\",\n content: (\n <MeganavPanel\n displayProductTile={true}\n panelRightItems={[\n { label: \"Platform\", listItems: productsMenu },\n {\n link: { label: \"Compare our tech\", link: \"/compare\" },\n listItems: compareMenu,\n },\n ]}\n panelRightBottom={\n <Status\n statusUrl={StatusUrl}\n additionalCSS=\"px-3 py-2 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg\"\n showDescription\n />\n }\n />\n ),\n panelClassName,\n },\n {\n name: \"Solutions\",\n content: <MeganavPanelFullwidth panelItems={solutionsMenu} />,\n panelClassName,\n },\n {\n name: \"Company\",\n content: (\n <MeganavPanel\n panelLeft={\n <MeganavCustomerStories\n title=\"Customer stories\"\n link=\"/case-studies\"\n customerStoriesHighlight={customerStoriesHighlight}\n />\n }\n panelMiddleItems={\n <MeganavBlog
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/Meganav/utils/getMenuItemsForHeader.tsx"],"sourcesContent":["import React from \"react\";\nimport Status, { StatusUrl } from \"../../Status\";\nimport MeganavBlog, { BlogPost } from \"../MeganavBlog\";\nimport MeganavCustomerStories from \"../MeganavCustomerStories\";\nimport { MeganavPanel, MeganavPanelFullwidth } from \"../MeganavPanel\";\nimport {\n ablyAwards,\n companyMenu,\n compareMenu,\n customerStoriesHighlight,\n MenuItem,\n productsMenu,\n solutionsMenu,\n menuItemLinks,\n defaultBlogPosts,\n} from \"../data\";\n\nexport const getMenuItemsForHeader = (blogPosts: BlogPost[]): MenuItem[] => {\n const panelClassName = \"w-full sm:w-[50.9375rem]\";\n const recentBlogPosts =\n blogPosts?.length > 0 ? blogPosts.slice(0, 2) : defaultBlogPosts;\n\n return [\n {\n name: \"Products\",\n content: (\n <MeganavPanel\n displayProductTile={true}\n panelRightItems={[\n { label: \"Platform\", listItems: productsMenu },\n {\n link: { label: \"Compare our tech\", link: \"/compare\" },\n listItems: compareMenu,\n },\n ]}\n panelRightBottom={\n <Status\n statusUrl={StatusUrl}\n additionalCSS=\"px-3 py-2 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg\"\n showDescription\n />\n }\n />\n ),\n panelClassName,\n },\n {\n name: \"Solutions\",\n content: <MeganavPanelFullwidth panelItems={solutionsMenu} />,\n panelClassName,\n },\n {\n name: \"Company\",\n content: (\n <MeganavPanel\n panelLeft={\n <MeganavCustomerStories\n title=\"Customer stories\"\n link=\"/case-studies\"\n icon=\"icon-gui-rocket-launch-outline\"\n customerStoriesHighlight={customerStoriesHighlight}\n />\n }\n panelMiddleItems={\n <MeganavBlog\n title=\"Blog\"\n link=\"/blog\"\n posts={recentBlogPosts}\n icon=\"icon-gui-light-bulb-outline\"\n />\n }\n panelRightItems={[\n {\n label: \"Ably\",\n listItems: companyMenu,\n displayTitleInMobile: false,\n },\n ]}\n panelRightBottom={\n <div className=\"flex-1 gap-x-2 hidden md:flex p-3\">\n {ablyAwards.slice(0, 3).map((award) => (\n <img\n key={award.desc}\n src={award.image}\n alt={award.desc}\n width=\"57\"\n height=\"64\"\n loading=\"lazy\"\n />\n ))}\n </div>\n }\n panelRightBottomClassName=\"hidden md:flex\"\n />\n ),\n panelClassName,\n },\n ...menuItemLinks,\n ];\n};\n"],"names":["React","Status","StatusUrl","MeganavBlog","MeganavCustomerStories","MeganavPanel","MeganavPanelFullwidth","ablyAwards","companyMenu","compareMenu","customerStoriesHighlight","productsMenu","solutionsMenu","menuItemLinks","defaultBlogPosts","getMenuItemsForHeader","blogPosts","panelClassName","recentBlogPosts","length","slice","name","content","displayProductTile","panelRightItems","label","listItems","link","panelRightBottom","statusUrl","additionalCSS","showDescription","panelItems","panelLeft","title","icon","panelMiddleItems","posts","displayTitleInMobile","div","className","map","award","img","key","desc","src","image","alt","width","height","loading","panelRightBottomClassName"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,QAAUC,SAAS,KAAQ,cAAe,AACjD,QAAOC,gBAA+B,gBAAiB,AACvD,QAAOC,2BAA4B,2BAA4B,AAC/D,QAASC,YAAY,CAAEC,qBAAqB,KAAQ,iBAAkB,AACtE,QACEC,UAAU,CACVC,WAAW,CACXC,WAAW,CACXC,wBAAwB,CAExBC,YAAY,CACZC,aAAa,CACbC,aAAa,CACbC,gBAAgB,KACX,SAAU,AAEjB,QAAO,MAAMC,sBAAwB,AAACC,YACpC,MAAMC,eAAiB,2BACvB,MAAMC,gBACJF,WAAWG,OAAS,EAAIH,UAAUI,KAAK,CAAC,EAAG,GAAKN,iBAElD,MAAO,CACL,CACEO,KAAM,WACNC,QACE,oBAACjB,cACCkB,mBAAoB,KACpBC,gBAAiB,CACf,CAAEC,MAAO,WAAYC,UAAWf,YAAa,EAC7C,CACEgB,KAAM,CAAEF,MAAO,mBAAoBE,KAAM,UAAW,EACpDD,UAAWjB,WACb,EACD,CACDmB,iBACE,oBAAC3B,QACC4B,UAAW3B,UACX4B,cAAc,yHACdC,gBAAAA,SAKRd,cACF,EACA,CACEI,KAAM,YACNC,QAAS,oBAAChB,uBAAsB0B,WAAYpB,gBAC5CK,cACF,EACA,CACEI,KAAM,UACNC,QACE,oBAACjB,cACC4B,UACE,oBAAC7B,wBACC8B,MAAM,mBACNP,KAAK,gBACLQ,KAAK,iCACLzB,yBAA0BA,2BAG9B0B,iBACE,oBAACjC,aACC+B,MAAM,OACNP,KAAK,QACLU,MAAOnB,gBACPiB,KAAK,gCAGTX,gBAAiB,CACf,CACEC,MAAO,OACPC,UAAWlB,YACX8B,qBAAsB,KACxB,EACD,CACDV,iBACE,oBAACW,OAAIC,UAAU,qCACZjC,WAAWa,KAAK,CAAC,EAAG,GAAGqB,GAAG,CAAC,AAACC,OAC3B,oBAACC,OACCC,IAAKF,MAAMG,IAAI,CACfC,IAAKJ,MAAMK,KAAK,CAChBC,IAAKN,MAAMG,IAAI,CACfI,MAAM,KACNC,OAAO,KACPC,QAAQ,WAKhBC,0BAA0B,mBAG9BnC,cACF,KACGJ,cACJ,AACH,CAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from"react";import Icon from"../Icon";import cn from"../utils/cn";const ProductIcon=({name,hoverName,selected,size,unavailable})=>{if(!name){return null}const
|
|
1
|
+
import React from"react";import Icon from"../Icon";import cn from"../utils/cn";const ProductIcon=({name,hoverName,selected,size,unavailable})=>{if(!name){return null}const iconSize=size/6*4;return React.createElement("span",{className:"flex items-center justify-center border border-neutral-300 dark:border-neutral-1000 rounded-xl bg-neutral-100 dark:bg-neutral-1200 hover:bg-neutral-000 dark:hover:bg-neutral-1300 active:bg-neutral-000 dark:active:bg-neutral-1300",style:{width:size,height:size}},hoverName?React.createElement(Icon,{name:hoverName,size:`${iconSize}px`,additionalCSS:cn({"hidden group-hover/product-tile:flex":!selected,flex:selected})}):null,React.createElement(Icon,{name:name,size:`${iconSize}px`,additionalCSS:cn({"text-neutral-000 dark:text-neutral-1300":selected&&!unavailable,"text-neutral-1300 dark:text-neutral-000":!selected&&!unavailable,"text-neutral-700 dark:text-neutral-600":selected&&unavailable,"text-neutral-600 dark:text-neutral-700":!selected&&unavailable,"flex group-hover/product-tile:hidden":hoverName&&!selected,hidden:hoverName&&selected})}))};export default ProductIcon;
|
|
2
2
|
//# sourceMappingURL=ProductIcon.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/ProductTile/ProductIcon.tsx"],"sourcesContent":["import React from \"react\";\nimport Icon from \"../Icon\";\nimport { IconName } from \"../Icon/types\";\nimport cn from \"../utils/cn\";\n\ntype ProductIconProps = {\n name?: IconName;\n hoverName?: IconName;\n selected?: boolean;\n size: number;\n unavailable: boolean;\n};\n\nconst ProductIcon = ({\n name,\n hoverName,\n selected,\n size,\n unavailable,\n}: ProductIconProps) => {\n if (!name) {\n return null;\n }\n\n //
|
|
1
|
+
{"version":3,"sources":["../../../src/core/ProductTile/ProductIcon.tsx"],"sourcesContent":["import React from \"react\";\nimport Icon from \"../Icon\";\nimport { IconName } from \"../Icon/types\";\nimport cn from \"../utils/cn\";\n\ntype ProductIconProps = {\n name?: IconName;\n hoverName?: IconName;\n selected?: boolean;\n size: number;\n unavailable: boolean;\n};\n\nconst ProductIcon = ({\n name,\n hoverName,\n selected,\n size,\n unavailable,\n}: ProductIconProps) => {\n if (!name) {\n return null;\n }\n\n // Padding around the icon is 1/4 the icon's size, so the icon is 4 of 6 parts\n const iconSize = (size / 6) * 4;\n\n return (\n // Outer container, contains the gradient stroke (since we can't natively have CSS gradient strokes)\n\n <span\n className=\"flex items-center justify-center border border-neutral-300 dark:border-neutral-1000 rounded-xl\n bg-neutral-100 dark:bg-neutral-1200 hover:bg-neutral-000 dark:hover:bg-neutral-1300 active:bg-neutral-000 dark:active:bg-neutral-1300\"\n style={{ width: size, height: size }}\n >\n {/* The product icons themselves */}\n {hoverName ? (\n <Icon\n name={hoverName}\n size={`${iconSize}px`}\n additionalCSS={cn({\n \"hidden group-hover/product-tile:flex\": !selected,\n flex: selected,\n })}\n />\n ) : null}\n <Icon\n name={name}\n size={`${iconSize}px`}\n additionalCSS={cn({\n \"text-neutral-000 dark:text-neutral-1300\": selected && !unavailable,\n \"text-neutral-1300 dark:text-neutral-000\": !selected && !unavailable,\n \"text-neutral-700 dark:text-neutral-600\": selected && unavailable,\n \"text-neutral-600 dark:text-neutral-700\": !selected && unavailable,\n \"flex group-hover/product-tile:hidden\": hoverName && !selected,\n hidden: hoverName && selected,\n })}\n />\n </span>\n );\n};\n\nexport default ProductIcon;\n"],"names":["React","Icon","cn","ProductIcon","name","hoverName","selected","size","unavailable","iconSize","span","className","style","width","height","additionalCSS","flex","hidden"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,SAAU,SAAU,AAE3B,QAAOC,OAAQ,aAAc,CAU7B,MAAMC,YAAc,CAAC,CACnBC,IAAI,CACJC,SAAS,CACTC,QAAQ,CACRC,IAAI,CACJC,WAAW,CACM,IACjB,GAAI,CAACJ,KAAM,CACT,OAAO,IACT,CAGA,MAAMK,SAAW,AAACF,KAAO,EAAK,EAE9B,OAGE,oBAACG,QACCC,UAAU,uOAEVC,MAAO,CAAEC,MAAON,KAAMO,OAAQP,IAAK,GAGlCF,UACC,oBAACJ,MACCG,KAAMC,UACNE,KAAM,CAAC,EAAEE,SAAS,EAAE,CAAC,CACrBM,cAAeb,GAAG,CAChB,uCAAwC,CAACI,SACzCU,KAAMV,QACR,KAEA,KACJ,oBAACL,MACCG,KAAMA,KACNG,KAAM,CAAC,EAAEE,SAAS,EAAE,CAAC,CACrBM,cAAeb,GAAG,CAChB,0CAA2CI,UAAY,CAACE,YACxD,0CAA2C,CAACF,UAAY,CAACE,YACzD,yCAA0CF,UAAYE,YACtD,yCAA0C,CAACF,UAAYE,YACvD,uCAAwCH,WAAa,CAACC,SACtDW,OAAQZ,WAAaC,QACvB,KAIR,CAEA,gBAAeH,WAAY"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="
|
|
2
|
+
<path d="M38 11H90C103.255 11 114 21.7452 114 35V105.41C114 110.623 107.81 113.356 103.957 109.844L81.1452 89.0442C80.4084 88.3724 79.4473 88 78.4502 88H38C24.7452 88 14 77.2548 14 64V35C14 21.7452 24.7452 11 38 11Z" stroke="currentColor" stroke-width="6"/>
|
|
3
3
|
</svg>
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
<path d="M76 11H93C106.255 11 117 21.7452 117 35V52M52 11H35C21.7452 11 11 21.7452 11 35V52M11 76V93C11 106.255 21.7452 117 35 117H52M117 76V93C117 106.255 106.255 117 93 117H76" stroke="currentColor" stroke-width="5" stroke-linecap="round"/>
|
|
3
|
-
<path d="M43 66L60 83L86 45" stroke="currentColor" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
-
</svg>
|
|
1
|
+
<svg fill="none" height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><g stroke="currentColor" stroke-linecap="round" stroke-width="6"><path d="m76 11h17c13.255 0 24 10.7452 24 24v17m-65-41h-17c-13.2548 0-24 10.7452-24 24v17m0 24v17c0 13.255 10.7452 24 24 24h17m65-41v17c0 13.255-10.745 24-24 24h-17"/><path d="m43 66 17 17 26-38" stroke-linejoin="round"/></g></svg>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M115.029 117H64V78.0148C64 77.1881 64.9462 76.7184 65.6047 77.2184L115.634 115.204C116.397 115.783 115.987 117 115.029 117Z" stroke="currentColor" stroke-width="
|
|
3
|
-
<path d="M11 52V77C11 99.0914 28.9086 117 51 117H64" stroke="currentColor" stroke-width="
|
|
4
|
-
<path d="M12.9708 11L64 11L64 49.9852C64 50.8119 63.0538 51.2816 62.3953 50.7816L12.366 12.7965C11.603 12.2171 12.0127 11 12.9708 11Z" stroke="currentColor" stroke-width="
|
|
5
|
-
<path d="M117 76L117 51C117 28.9086 99.0914 11 77 11L64 11" stroke="currentColor" stroke-width="
|
|
2
|
+
<path d="M115.029 117H64V78.0148C64 77.1881 64.9462 76.7184 65.6047 77.2184L115.634 115.204C116.397 115.783 115.987 117 115.029 117Z" stroke="currentColor" stroke-width="6" stroke-linecap="round"/>
|
|
3
|
+
<path d="M11 52V77C11 99.0914 28.9086 117 51 117H64" stroke="currentColor" stroke-width="6" stroke-linecap="round"/>
|
|
4
|
+
<path d="M12.9708 11L64 11L64 49.9852C64 50.8119 63.0538 51.2816 62.3953 50.7816L12.366 12.7965C11.603 12.2171 12.0127 11 12.9708 11Z" stroke="currentColor" stroke-width="6" stroke-linecap="round"/>
|
|
5
|
+
<path d="M117 76L117 51C117 28.9086 99.0914 11 77 11L64 11" stroke="currentColor" stroke-width="6" stroke-linecap="round"/>
|
|
6
6
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M56.
|
|
2
|
+
<path d="M56.6038 13.8927L16.8021 77.8875C15.1449 80.552 17.061 84 20.1988 84H62.0004C63.105 84 64.0004 84.8954 64.0004 86V111.995C64.0004 116.018 69.2722 117.524 71.397 114.107L111.199 50.1125C112.856 47.4481 110.94 44 107.802 44H66.0004C64.8958 44 64.0004 43.1046 64.0004 42V16.0052C64.0004 11.9818 58.7286 10.4762 56.6038 13.8927Z" stroke="currentColor" stroke-width="6"/>
|
|
3
3
|
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M41.2306 109.769L17.8256 25.2088C16.5818 20.7149 20.7149 16.5818 25.2088 17.8256L109.769 41.2306C115.314 42.7655 115.729 50.4697 110.38 52.5907L72.2134 67.7257C70.1627 68.5389 68.5389 70.1627 67.7257 72.2134L52.5907 110.38C50.4697 115.729 42.7655 115.314 41.2306 109.769Z" stroke="currentColor" stroke-width="
|
|
2
|
+
<path d="M41.2306 109.769L17.8256 25.2088C16.5818 20.7149 20.7149 16.5818 25.2088 17.8256L109.769 41.2306C115.314 42.7655 115.729 50.4697 110.38 52.5907L72.2134 67.7257C70.1627 68.5389 68.5389 70.1627 67.7257 72.2134L52.5907 110.38C50.4697 115.729 42.7655 115.314 41.2306 109.769Z" stroke="currentColor" stroke-width="6"/>
|
|
3
3
|
</svg>
|
package/core/sprites-product.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg width="0" height="0" style="position:absolute"><defs><linearGradient id="aba" x1="74" y1="4" x2="74" y2="104" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="ada" x1="64" y1="26.421" x2="64" y2="111.391" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="afa" x1="64" y1="29.85" x2="64" y2="109.883" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aia" x1="64" y1="27.103" x2="64" y2="110.608" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aga" x1="64" y1="27.103" x2="64" y2="110.608" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aka" x1="64" y1="101.232" x2="64" y2="16.969" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aoa" x1="64" y1="27.434" x2="64" y2="110.189" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aqa" x1="65.785" y1="31.716" x2="65.785" y2="108.821" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient></defs><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-ai-transport" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M74 4a5 5 0 0 1 4.808 3.626l5.42 18.975a25 25 0 0 0 17.171 17.17l18.975 5.421a5 5 0 0 1 0 9.616l-18.975 5.42A25 25 0 0 0 84.229 81.4l-5.421 18.975a5 5 0 0 1-9.616 0l-5.42-18.975A25 25 0 0 0 46.6 64.229l-18.975-5.421a5 5 0 0 1 0-9.616l18.975-5.42A25 25 0 0 0 63.771 26.6l5.421-18.975A5 5 0 0 1 74 4Z" fill="url(#aba)"/><path d="m47 95-26 26M31 84 17 98" stroke="url(#aba)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-ai-transport-mono" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M74 4a5 5 0 0 1 4.808 3.626l5.42 18.975a25 25 0 0 0 17.171 17.17l18.975 5.421a5 5 0 0 1 0 9.616l-18.975 5.42A25 25 0 0 0 84.229 81.4l-5.421 18.975a5 5 0 0 1-9.616 0l-5.42-18.975A25 25 0 0 0 46.6 64.229l-18.975-5.421a5 5 0 0 1 0-9.616l18.975-5.42A25 25 0 0 0 63.771 26.6l5.421-18.975A5 5 0 0 1 74 4Z" stroke="currentColor" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/><path d="m47 95-26 26M31 84 17 98" stroke="currentColor" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-asset-tracking" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M72.208 116.222C85.188 101.747 109 72.533 109 53c0-24.853-20.147-45-45-45S19 28.147 19 53c0 19.533 23.811 48.747 36.792 63.222 4.435 4.945 11.98 4.945 16.416 0ZM64 71c9.941 0 18-8.059 18-18s-8.059-18-18-18-18 8.059-18 18 8.059 18 18 18Z" fill="url(#ada)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-asset-tracking-mono" xmlns="http://www.w3.org/2000/svg"><path d="m72.208 116.222-1.861-1.669 1.86 1.669Zm-16.416 0-1.86 1.669 1.86-1.669ZM106.5 53c0 4.412-1.355 9.548-3.723 15.103-2.358 5.532-5.658 11.333-9.396 17.034-7.477 11.404-16.582 22.22-23.034 29.416l3.722 3.338c6.528-7.28 15.82-18.308 23.493-30.013 3.838-5.852 7.302-11.922 9.814-17.814 2.502-5.868 4.124-11.71 4.124-17.064h-5ZM64 10.5c23.472 0 42.5 19.028 42.5 42.5h5c0-26.233-21.266-47.5-47.5-47.5v5ZM21.5 53c0-23.472 19.028-42.5 42.5-42.5v-5C37.767 5.5 16.5 26.767 16.5 53h5Zm36.154 61.553c-6.453-7.196-15.558-18.012-23.035-29.416-3.738-5.701-7.038-11.502-9.396-17.034C22.855 62.548 21.5 57.413 21.5 53h-5c0 5.355 1.622 11.196 4.124 17.064 2.512 5.892 5.976 11.962 9.814 17.815 7.674 11.704 16.965 22.732 23.493 30.012l3.723-3.338Zm12.693 0c-3.442 3.837-9.252 3.837-12.693 0l-3.723 3.338c5.429 6.053 14.71 6.053 20.138 0l-3.722-3.338ZM79.5 53c0 8.56-6.94 15.5-15.5 15.5v5c11.322 0 20.5-9.178 20.5-20.5h-5ZM64 37.5c8.56 0 15.5 6.94 15.5 15.5h5c0-11.322-9.178-20.5-20.5-20.5v5ZM48.5 53c0-8.56 6.94-15.5 15.5-15.5v-5c-11.322 0-20.5 9.178-20.5 20.5h5ZM64 68.5c-8.56 0-15.5-6.94-15.5-15.5h-5c0 11.322 9.178 20.5 20.5 20.5v-5Z" fill="currentColor"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-chat" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 35c0-12.426 10.074-22.5 22.5-22.5h60c12.426 0 22.5 10.074 22.5 22.5v74.41c0 7.385-8.77 11.257-14.227 6.281l-22.812-20.8a1.5 1.5 0 0 0-1.01-.391H34c-12.426 0-22.5-10.074-22.5-22.5V35Z" fill="url(#afa)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-chat-mono" xmlns="http://www.w3.org/2000/svg"><path d="
|
|
1
|
+
<svg width="0" height="0" style="position:absolute"><defs><linearGradient id="aba" x1="74" y1="4" x2="74" y2="104" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="ada" x1="64" y1="26.421" x2="64" y2="111.391" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="afa" x1="64" y1="29.85" x2="64" y2="109.883" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aia" x1="64" y1="27.103" x2="64" y2="110.608" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aga" x1="64" y1="27.103" x2="64" y2="110.608" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aka" x1="64" y1="101.232" x2="64" y2="16.969" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aoa" x1="64" y1="27.434" x2="64" y2="110.189" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient><linearGradient id="aqa" x1="65.785" y1="31.716" x2="65.785" y2="108.821" gradientUnits="userSpaceOnUse"><stop stop-color="#FF5416"/><stop offset="1" stop-color="#FF2739"/></linearGradient></defs><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-ai-transport" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M74 4a5 5 0 0 1 4.808 3.626l5.42 18.975a25 25 0 0 0 17.171 17.17l18.975 5.421a5 5 0 0 1 0 9.616l-18.975 5.42A25 25 0 0 0 84.229 81.4l-5.421 18.975a5 5 0 0 1-9.616 0l-5.42-18.975A25 25 0 0 0 46.6 64.229l-18.975-5.421a5 5 0 0 1 0-9.616l18.975-5.42A25 25 0 0 0 63.771 26.6l5.421-18.975A5 5 0 0 1 74 4Z" fill="url(#aba)"/><path d="m47 95-26 26M31 84 17 98" stroke="url(#aba)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-ai-transport-mono" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M74 4a5 5 0 0 1 4.808 3.626l5.42 18.975a25 25 0 0 0 17.171 17.17l18.975 5.421a5 5 0 0 1 0 9.616l-18.975 5.42A25 25 0 0 0 84.229 81.4l-5.421 18.975a5 5 0 0 1-9.616 0l-5.42-18.975A25 25 0 0 0 46.6 64.229l-18.975-5.421a5 5 0 0 1 0-9.616l18.975-5.42A25 25 0 0 0 63.771 26.6l5.421-18.975A5 5 0 0 1 74 4Z" stroke="currentColor" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/><path d="m47 95-26 26M31 84 17 98" stroke="currentColor" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-asset-tracking" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M72.208 116.222C85.188 101.747 109 72.533 109 53c0-24.853-20.147-45-45-45S19 28.147 19 53c0 19.533 23.811 48.747 36.792 63.222 4.435 4.945 11.98 4.945 16.416 0ZM64 71c9.941 0 18-8.059 18-18s-8.059-18-18-18-18 8.059-18 18 8.059 18 18 18Z" fill="url(#ada)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-asset-tracking-mono" xmlns="http://www.w3.org/2000/svg"><path d="m72.208 116.222-1.861-1.669 1.86 1.669Zm-16.416 0-1.86 1.669 1.86-1.669ZM106.5 53c0 4.412-1.355 9.548-3.723 15.103-2.358 5.532-5.658 11.333-9.396 17.034-7.477 11.404-16.582 22.22-23.034 29.416l3.722 3.338c6.528-7.28 15.82-18.308 23.493-30.013 3.838-5.852 7.302-11.922 9.814-17.814 2.502-5.868 4.124-11.71 4.124-17.064h-5ZM64 10.5c23.472 0 42.5 19.028 42.5 42.5h5c0-26.233-21.266-47.5-47.5-47.5v5ZM21.5 53c0-23.472 19.028-42.5 42.5-42.5v-5C37.767 5.5 16.5 26.767 16.5 53h5Zm36.154 61.553c-6.453-7.196-15.558-18.012-23.035-29.416-3.738-5.701-7.038-11.502-9.396-17.034C22.855 62.548 21.5 57.413 21.5 53h-5c0 5.355 1.622 11.196 4.124 17.064 2.512 5.892 5.976 11.962 9.814 17.815 7.674 11.704 16.965 22.732 23.493 30.012l3.723-3.338Zm12.693 0c-3.442 3.837-9.252 3.837-12.693 0l-3.723 3.338c5.429 6.053 14.71 6.053 20.138 0l-3.722-3.338ZM79.5 53c0 8.56-6.94 15.5-15.5 15.5v5c11.322 0 20.5-9.178 20.5-20.5h-5ZM64 37.5c8.56 0 15.5 6.94 15.5 15.5h5c0-11.322-9.178-20.5-20.5-20.5v5ZM48.5 53c0-8.56 6.94-15.5 15.5-15.5v-5c-11.322 0-20.5 9.178-20.5 20.5h5ZM64 68.5c-8.56 0-15.5-6.94-15.5-15.5h-5c0 11.322 9.178 20.5 20.5 20.5v-5Z" fill="currentColor"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-chat" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 35c0-12.426 10.074-22.5 22.5-22.5h60c12.426 0 22.5 10.074 22.5 22.5v74.41c0 7.385-8.77 11.257-14.227 6.281l-22.812-20.8a1.5 1.5 0 0 0-1.01-.391H34c-12.426 0-22.5-10.074-22.5-22.5V35Z" fill="url(#afa)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-chat-mono" xmlns="http://www.w3.org/2000/svg"><path d="M38 11h52c13.255 0 24 10.745 24 24v70.41c0 5.213-6.19 7.946-10.043 4.434l-22.812-20.8A4 4 0 0 0 78.45 88H38c-13.255 0-24-10.745-24-24V35c0-13.255 10.745-24 24-24Z" stroke="currentColor" stroke-width="6"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-liveobjects" xmlns="http://www.w3.org/2000/svg"><rect x="9" y="9" width="110" height="110" rx="26" fill="url(#aia)"/><path d="m43 66 17 17 26-38" stroke="#fff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-liveobjects-dark" xmlns="http://www.w3.org/2000/svg"><rect x="9" y="9" width="110" height="110" rx="26" fill="url(#aga)"/><path d="m43 66 17 17 26-38" stroke="#03020D" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-liveobjects-mono" xmlns="http://www.w3.org/2000/svg"><g stroke="currentColor" stroke-linecap="round" stroke-width="6"><path d="M76 11h17c13.255 0 24 10.745 24 24v17M52 11H35c-13.255 0-24 10.745-24 24v17m0 24v17c0 13.255 10.745 24 24 24h17m65-41v17c0 13.255-10.745 24-24 24H76"/><path d="m43 66 17 17 26-38" stroke-linejoin="round"/></g></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-livesync" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5 52a2.5 2.5 0 0 0-5 0v25c0 23.472 19.028 42.5 42.5 42.5h64.029c3.353 0 4.787-4.26 2.117-6.288l-50.03-37.985c-2.304-1.75-5.616-.106-5.616 2.788V114.5H51c-20.71 0-37.5-16.79-37.5-37.5V52Zm53-2.015c0 2.894-3.312 4.538-5.617 2.788L10.854 14.788C8.184 12.76 9.618 8.5 12.971 8.5H77c23.472 0 42.5 19.028 42.5 42.5v25a2.5 2.5 0 1 1-5 0V51c0-20.71-16.79-37.5-37.5-37.5H66.5v36.485Z" fill="url(#aka)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-livesync-mono" xmlns="http://www.w3.org/2000/svg"><path d="M115.029 117H64V78.015a1 1 0 0 1 1.605-.797l50.029 37.986c.763.579.353 1.796-.605 1.796ZM11 52v25c0 22.091 17.909 40 40 40h13M12.97 11H64v38.985a1 1 0 0 1-1.605.797L12.366 12.797c-.763-.58-.353-1.797.605-1.797ZM117 76V51c0-22.091-17.909-40-40-40H64" stroke="currentColor" stroke-width="6" stroke-linecap="round"/></symbol><symbol fill="none" viewBox="0 0 20 20" id="sprite-icon-product-platform" xmlns="http://www.w3.org/2000/svg"><path d="M9.703 1.325a.625.625 0 0 1 .594 0L18.422 5.7a.624.624 0 0 1 0 1.1l-8.126 4.375a.625.625 0 0 1-.593 0L1.578 6.8a.625.625 0 0 1 0-1.1l8.125-4.375Z" fill="#ff5416"/><path d="m2.72 8.835 6.39 3.44a1.875 1.875 0 0 0 1.78 0l6.39-3.44 1.14.615a.625.625 0 0 1 0 1.1l-8.124 4.375a.626.626 0 0 1-.592 0L1.58 10.55a.626.626 0 0 1 0-1.1l1.142-.615Z" fill="#ff5416"/><path d="m9.11 16.026-6.39-3.442-1.14.616a.625.625 0 0 0 0 1.1l8.124 4.375c.184.1.408.1.592 0L18.42 14.3a.626.626 0 0 0 0-1.1l-1.142-.615-6.39 3.442a1.875 1.875 0 0 1-1.778-.001Z" fill="#ff5416"/></symbol><symbol fill="none" viewBox="0 0 20 20" id="sprite-icon-product-platform-mono" xmlns="http://www.w3.org/2000/svg"><path d="M5.357 8.125 1.875 10l3.482 1.875m0-3.75 4.643 2.5 4.643-2.5m-9.286 0L1.875 6.25 10 1.875l8.125 4.375-3.482 1.875m-9.286 3.75L1.875 13.75 10 18.125l8.125-4.375-3.482-1.875m-9.286 0 4.643 2.5 4.643-2.5m0-3.75L18.125 10l-3.482 1.875" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-pubsub" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M54.48 12.572c3.453-5.551 12.02-3.105 12.02 3.433V41.5h41.302c5.099 0 8.212 5.603 5.519 9.933L73.52 115.428c-3.453 5.551-12.02 3.105-12.02-3.433V86.5H20.198c-5.099 0-8.212-5.603-5.52-9.933L54.48 12.572Z" fill="url(#aoa)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-pubsub-mono" xmlns="http://www.w3.org/2000/svg"><path d="M56.604 13.893 16.802 77.888C15.145 80.552 17.061 84 20.2 84H62a2 2 0 0 1 2 2v25.995c0 4.023 5.272 5.529 7.397 2.112l39.802-63.995c1.657-2.664-.259-6.112-3.397-6.112H66a2 2 0 0 1-2-2V16.005c0-4.023-5.271-5.529-7.396-2.112Z" stroke="currentColor" stroke-width="6"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-spaces" xmlns="http://www.w3.org/2000/svg"><path d="M15.318 25.777c-1.762-6.366 4.093-12.221 10.46-10.46l84.559 23.406c7.856 2.174 8.443 13.088.866 16.093L73.036 69.951a5.5 5.5 0 0 0-3.085 3.085l-15.135 38.167c-3.005 7.577-13.919 6.99-16.093-.866l-23.405-84.56Z" fill="url(#aqa)"/></symbol><symbol fill="none" viewBox="0 0 128 128" id="sprite-icon-product-spaces-mono" xmlns="http://www.w3.org/2000/svg"><path d="m41.23 109.769-23.404-84.56c-1.244-4.494 2.889-8.627 7.383-7.383l84.56 23.405c5.545 1.535 5.96 9.239.611 11.36L72.213 67.726a8 8 0 0 0-4.487 4.487L52.59 110.38c-2.121 5.349-9.825 4.934-11.36-.611Z" stroke="currentColor" stroke-width="6"/></symbol></svg>
|
package/index.d.ts
CHANGED
|
@@ -5420,6 +5420,7 @@ export default _default;
|
|
|
5420
5420
|
}
|
|
5421
5421
|
|
|
5422
5422
|
declare module '@ably/ui/core/Meganav/MeganavBlog' {
|
|
5423
|
+
import { IconName } from ".@ably/ui/core/Icon/types";
|
|
5423
5424
|
export type BlogPost = {
|
|
5424
5425
|
title: string;
|
|
5425
5426
|
link: string;
|
|
@@ -5429,14 +5430,16 @@ export type BlogPost = {
|
|
|
5429
5430
|
export type MeganavBlogProps = {
|
|
5430
5431
|
title: string;
|
|
5431
5432
|
link: string;
|
|
5433
|
+
icon?: IconName;
|
|
5432
5434
|
posts: BlogPost[];
|
|
5433
5435
|
};
|
|
5434
|
-
const MeganavBlog: ({ title, link, posts }: MeganavBlogProps) => import("react/jsx-runtime").JSX.Element;
|
|
5436
|
+
const MeganavBlog: ({ title, link, icon, posts }: MeganavBlogProps) => import("react/jsx-runtime").JSX.Element;
|
|
5435
5437
|
export default MeganavBlog;
|
|
5436
5438
|
//# sourceMappingURL=MeganavBlog.d.ts.map
|
|
5437
5439
|
}
|
|
5438
5440
|
|
|
5439
5441
|
declare module '@ably/ui/core/Meganav/MeganavCustomerStories' {
|
|
5442
|
+
import { IconName } from ".@ably/ui/core/Icon/types";
|
|
5440
5443
|
export type CustomerStoryHighlight = {
|
|
5441
5444
|
companyName: string;
|
|
5442
5445
|
companyDesc: string;
|
|
@@ -5444,10 +5447,11 @@ export type CustomerStoryHighlight = {
|
|
|
5444
5447
|
companyLogo: string;
|
|
5445
5448
|
companyLogoDark?: string;
|
|
5446
5449
|
};
|
|
5447
|
-
const MeganavCustomerStories: ({ customerStoriesHighlight, title, link, }: {
|
|
5450
|
+
const MeganavCustomerStories: ({ customerStoriesHighlight, title, link, icon, }: {
|
|
5448
5451
|
customerStoriesHighlight: CustomerStoryHighlight;
|
|
5449
5452
|
title: string;
|
|
5450
5453
|
link: string;
|
|
5454
|
+
icon?: IconName;
|
|
5451
5455
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5452
5456
|
export default MeganavCustomerStories;
|
|
5453
5457
|
//# sourceMappingURL=MeganavCustomerStories.d.ts.map
|
|
@@ -5471,8 +5475,9 @@ type MeganavPanelProps = {
|
|
|
5471
5475
|
panelMiddleItems?: React.ReactNode;
|
|
5472
5476
|
panelRightItems?: MeganavPanelItemLink[];
|
|
5473
5477
|
panelRightBottom?: React.ReactNode;
|
|
5478
|
+
panelRightBottomClassName?: string;
|
|
5474
5479
|
};
|
|
5475
|
-
export const MeganavPanel: ({ displayProductTile, panelLeft, panelMiddleItems, panelRightItems, panelRightBottom, }: MeganavPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
5480
|
+
export const MeganavPanel: ({ displayProductTile, panelLeft, panelMiddleItems, panelRightItems, panelRightBottom, panelRightBottomClassName, }: MeganavPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
5476
5481
|
export const MeganavPanelFullwidth: ({ panelItems, }: {
|
|
5477
5482
|
panelItems: FlyoutPanelList[];
|
|
5478
5483
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -5491,8 +5496,9 @@ export type MeganavPanelItemLink = {
|
|
|
5491
5496
|
label: string;
|
|
5492
5497
|
link: string;
|
|
5493
5498
|
};
|
|
5499
|
+
displayTitleInMobile?: boolean;
|
|
5494
5500
|
};
|
|
5495
|
-
const MeganavPanelItemLinks: ({ label, listItems, link, }: MeganavPanelItemLink) => import("react/jsx-runtime").JSX.Element;
|
|
5501
|
+
const MeganavPanelItemLinks: ({ label, listItems, link, displayTitleInMobile, }: MeganavPanelItemLink) => import("react/jsx-runtime").JSX.Element;
|
|
5496
5502
|
export default MeganavPanelItemLinks;
|
|
5497
5503
|
//# sourceMappingURL=MeganavPanelItemLinks.d.ts.map
|
|
5498
5504
|
}
|
|
@@ -5514,6 +5520,15 @@ export default MeganavTile;
|
|
|
5514
5520
|
//# sourceMappingURL=MeganavTile.d.ts.map
|
|
5515
5521
|
}
|
|
5516
5522
|
|
|
5523
|
+
declare module '@ably/ui/core/Meganav/PanelTitle' {
|
|
5524
|
+
export const PanelTitle: ({ title, link, displayTitleInMobile, }: {
|
|
5525
|
+
title: string;
|
|
5526
|
+
link?: string;
|
|
5527
|
+
displayTitleInMobile?: boolean;
|
|
5528
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
5529
|
+
//# sourceMappingURL=PanelTitle.d.ts.map
|
|
5530
|
+
}
|
|
5531
|
+
|
|
5517
5532
|
declare module '@ably/ui/core/Meganav/data' {
|
|
5518
5533
|
import React from "react";
|
|
5519
5534
|
import { IconName } from ".@ably/ui/core/Icon/types";
|
|
@@ -5609,14 +5624,6 @@ export const getMenuItemsForHeader: (blogPosts: BlogPost[]) => MenuItem[];
|
|
|
5609
5624
|
//# sourceMappingURL=getMenuItemsForHeader.d.ts.map
|
|
5610
5625
|
}
|
|
5611
5626
|
|
|
5612
|
-
declare module '@ably/ui/core/Meganav/utils' {
|
|
5613
|
-
export const PanelTitle: ({ title, link, }: {
|
|
5614
|
-
title: string;
|
|
5615
|
-
link?: string;
|
|
5616
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
5617
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
5618
|
-
}
|
|
5619
|
-
|
|
5620
5627
|
declare module '@ably/ui/core/Meganav' {
|
|
5621
5628
|
import { HeaderSessionState, ThemedScrollpoint } from "@ably/ui/core/Header";
|
|
5622
5629
|
import { BlogPost } from "@ably/ui/core/Meganav/MeganavBlog";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ably/ui",
|
|
3
|
-
"version": "17.10.1-dev.
|
|
3
|
+
"version": "17.10.1-dev.330122df",
|
|
4
4
|
"description": "Home of the Ably design system library ([design.ably.com](https://design.ably.com)). It provides a showcase, development/test environment and a publishing pipeline for different distributables.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
"reset",
|
|
13
13
|
"tailwind.config.js",
|
|
14
14
|
"tailwind.extend.js",
|
|
15
|
-
"index.d.ts"
|
|
15
|
+
"index.d.ts",
|
|
16
|
+
"AGENTS.md",
|
|
17
|
+
"CLAUDE.md"
|
|
16
18
|
],
|
|
17
19
|
"types": "index.d.ts",
|
|
18
20
|
"msw": {
|
|
@@ -54,7 +56,7 @@
|
|
|
54
56
|
"msw": "2.12.0",
|
|
55
57
|
"msw-storybook-addon": "^2.0.5",
|
|
56
58
|
"playwright": "^1.49.1",
|
|
57
|
-
"posthog-js": "^1.
|
|
59
|
+
"posthog-js": "^1.301.0",
|
|
58
60
|
"prettier": "^3.2.5",
|
|
59
61
|
"storybook": "^10.0.0",
|
|
60
62
|
"svg-sprite": "^2.0.4",
|
package/core/Meganav/utils.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import React from"react";import FeaturedLink from"../FeaturedLink";export const PanelTitle=({title,link})=>{return React.createElement("div",{className:"mb-3 px-3"},link?React.createElement(FeaturedLink,{url:link,textSize:"text-overline2",additionalCSS:"ui-text-overline2 mb-0 py-0 font-medium font-mono text-neutral-700 dark:text-neutral-600 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1100 dark:active:text-neutral-200 focus-base"},title):React.createElement("p",{className:"ui-text-overline2 text-neutral-700 dark:text-neutral-600 font-medium font-mono"},title))};
|
|
2
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/utils.tsx"],"sourcesContent":["import React from \"react\";\nimport FeaturedLink from \"../FeaturedLink\";\n\nexport const PanelTitle = ({\n title,\n link,\n}: {\n title: string;\n link?: string;\n}) => {\n return (\n <div className=\"mb-3 px-3\">\n {link ? (\n <FeaturedLink\n url={link}\n textSize=\"text-overline2\"\n additionalCSS=\"ui-text-overline2 mb-0 py-0 font-medium font-mono\n text-neutral-700 dark:text-neutral-600 hover:text-neutral-1300 dark:hover:text-neutral-000\n active:text-neutral-1100 dark:active:text-neutral-200 focus-base\"\n >\n {title}\n </FeaturedLink>\n ) : (\n <p className=\"ui-text-overline2 text-neutral-700 dark:text-neutral-600 font-medium font-mono\">\n {title}\n </p>\n )}\n </div>\n );\n};\n"],"names":["React","FeaturedLink","PanelTitle","title","link","div","className","url","textSize","additionalCSS","p"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,iBAAkB,iBAAkB,AAE3C,QAAO,MAAMC,WAAa,CAAC,CACzBC,KAAK,CACLC,IAAI,CAIL,IACC,OACE,oBAACC,OAAIC,UAAU,aACZF,KACC,oBAACH,cACCM,IAAKH,KACLI,SAAS,iBACTC,cAAc,iNAIbN,OAGH,oBAACO,KAAEJ,UAAU,kFACVH,OAKX,CAAE"}
|