@redocly/theme 0.62.0-next.1 → 0.62.0-next.3
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/lib/components/UserMenu/LoginButton.d.ts +8 -2
- package/lib/components/UserMenu/LoginButton.js +4 -3
- package/lib/core/types/hooks.d.ts +13 -1
- package/lib/markdoc/components/LoginButton/LoginButton.d.ts +9 -0
- package/lib/markdoc/components/LoginButton/LoginButton.js +48 -0
- package/lib/markdoc/components/default.d.ts +1 -0
- package/lib/markdoc/components/default.js +1 -0
- package/lib/markdoc/default.d.ts +6 -0
- package/lib/markdoc/default.js +2 -0
- package/lib/markdoc/tags/login-button.d.ts +2 -0
- package/lib/markdoc/tags/login-button.js +32 -0
- package/package.json +1 -1
- package/src/components/UserMenu/LoginButton.tsx +22 -7
- package/src/core/types/hooks.ts +20 -1
- package/src/markdoc/components/LoginButton/LoginButton.tsx +38 -0
- package/src/markdoc/components/default.ts +1 -0
- package/src/markdoc/default.ts +2 -0
- package/src/markdoc/tags/login-button.ts +30 -0
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ButtonVariant, ButtonSize } from '../../components/Button/Button';
|
|
2
3
|
export type LoginButtonProps = {
|
|
3
4
|
href: string;
|
|
4
5
|
className?: string;
|
|
6
|
+
variant?: ButtonVariant;
|
|
7
|
+
size?: ButtonSize;
|
|
8
|
+
label?: string;
|
|
9
|
+
labelTranslationKey?: string;
|
|
10
|
+
['data-component-name']?: string;
|
|
5
11
|
};
|
|
6
|
-
export declare function LoginButton({ href, className }: LoginButtonProps): JSX.Element;
|
|
12
|
+
export declare function LoginButton({ href, className, variant, size, label, labelTranslationKey, 'data-component-name': componentName, }: LoginButtonProps): React.JSX.Element;
|
|
@@ -7,11 +7,12 @@ exports.LoginButton = LoginButton;
|
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const hooks_1 = require("../../core/hooks");
|
|
9
9
|
const Button_1 = require("../../components/Button/Button");
|
|
10
|
-
function LoginButton({ href, className }) {
|
|
10
|
+
function LoginButton({ href, className, variant = 'primary', size = 'medium', label, labelTranslationKey = 'userMenu.login', 'data-component-name': componentName = 'UserMenu/LoginButton', }) {
|
|
11
11
|
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
12
12
|
const { translate } = useTranslate();
|
|
13
13
|
const telemetry = useTelemetry();
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const buttonLabel = label || translate(labelTranslationKey, 'Login');
|
|
15
|
+
return (react_1.default.createElement("div", { "data-component-name": componentName, className: className },
|
|
16
|
+
react_1.default.createElement(Button_1.Button, { "data-translation-key": label ? undefined : labelTranslationKey, to: href, onClick: () => telemetry.sendLoginButtonClickedMessage(), "data-testid": "login-btn", extraClass: className, variant: variant, size: size }, buttonLabel)));
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=LoginButton.js.map
|
|
@@ -138,7 +138,19 @@ export type ThemeHooks = {
|
|
|
138
138
|
items: BffCatalogEntityRevision[];
|
|
139
139
|
};
|
|
140
140
|
useCatalogClassic: (config: CatalogConfig) => FilteredCatalog;
|
|
141
|
-
useTelemetry: () => Omit<AsyncApiRealmUI.Telemetry, 'init' | 'updateCloudEventData' | 'forceFlush' | 'startSpan' | 'constructCloudEvent' | 'sendToOtelService'
|
|
141
|
+
useTelemetry: () => Omit<AsyncApiRealmUI.Telemetry, 'init' | 'updateCloudEventData' | 'forceFlush' | 'startSpan' | 'constructCloudEvent' | 'sendToOtelService'> & {
|
|
142
|
+
send<TEventType extends AsyncApiRealmUI.EventType>(event: TEventType, data?: AsyncApiRealmUI.EventPayload<TEventType>): void;
|
|
143
|
+
/**
|
|
144
|
+
* @deprecated This method is deprecated. Use send(event, data) instead.
|
|
145
|
+
*/
|
|
146
|
+
send<TEventType extends AsyncApiRealmUI.EventType>(params: AsyncApiRealmUI.SendEventParams<TEventType>): void;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* @deprecated This hook is deprecated. Use `useTelemetry` instead.
|
|
150
|
+
*/
|
|
151
|
+
useOtelTelemetry: () => {
|
|
152
|
+
send<TEventType extends AsyncApiRealmUI.EventType>(params: AsyncApiRealmUI.SendEventParams<TEventType>): void;
|
|
153
|
+
};
|
|
142
154
|
useUserTeams: () => string[];
|
|
143
155
|
usePageData: () => PageData | null;
|
|
144
156
|
usePageSharedData: <T = unknown>(dataId: string) => T;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ButtonVariant, ButtonSize } from '../../../components/Button/Button';
|
|
3
|
+
export type MarkdocLoginButtonProps = {
|
|
4
|
+
variant?: ButtonVariant;
|
|
5
|
+
size?: ButtonSize;
|
|
6
|
+
label?: string;
|
|
7
|
+
labelTranslationKey?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function LoginButton({ variant, size, label, labelTranslationKey, }: MarkdocLoginButtonProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LoginButton = LoginButton;
|
|
37
|
+
const React = __importStar(require("react"));
|
|
38
|
+
const hooks_1 = require("../../../core/hooks");
|
|
39
|
+
const LoginButton_1 = require("../../../components/UserMenu/LoginButton");
|
|
40
|
+
function LoginButton({ variant, size, label, labelTranslationKey, }) {
|
|
41
|
+
const { useUserMenu } = (0, hooks_1.useThemeHooks)();
|
|
42
|
+
const { userData, loginUrl } = useUserMenu();
|
|
43
|
+
if (userData === null || userData === void 0 ? void 0 : userData.isAuthenticated) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return (React.createElement(LoginButton_1.LoginButton, { href: loginUrl || '', variant: variant, size: size, label: label, labelTranslationKey: labelTranslationKey, "data-component-name": "Markdoc/LoginButton" }));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=LoginButton.js.map
|
|
@@ -21,3 +21,4 @@ export * from '../../markdoc/components/CodeWalkthrough/CodeContainer';
|
|
|
21
21
|
export * from '../../markdoc/components/CodeGroup/CodeGroup';
|
|
22
22
|
export * from '../../markdoc/components/Icon/Icon';
|
|
23
23
|
export * from '../../markdoc/components/ConnectMCP/ConnectMCP';
|
|
24
|
+
export * from '../../markdoc/components/LoginButton/LoginButton';
|
|
@@ -37,4 +37,5 @@ __exportStar(require("../../markdoc/components/CodeWalkthrough/CodeContainer"),
|
|
|
37
37
|
__exportStar(require("../../markdoc/components/CodeGroup/CodeGroup"), exports);
|
|
38
38
|
__exportStar(require("../../markdoc/components/Icon/Icon"), exports);
|
|
39
39
|
__exportStar(require("../../markdoc/components/ConnectMCP/ConnectMCP"), exports);
|
|
40
|
+
__exportStar(require("../../markdoc/components/LoginButton/LoginButton"), exports);
|
|
40
41
|
//# sourceMappingURL=default.js.map
|
package/lib/markdoc/default.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { toggle } from '../markdoc/tags/code-toggle';
|
|
|
23
23
|
import { codeGroup } from '../markdoc/tags/code-group';
|
|
24
24
|
import { icon } from '../markdoc/tags/icon';
|
|
25
25
|
import { connectMcp } from '../markdoc/tags/connect-mcp';
|
|
26
|
+
import { loginButton } from '../markdoc/tags/login-button';
|
|
26
27
|
export declare const tags: {
|
|
27
28
|
[admonition.tagName]: import("@markdoc/markdoc").Schema & {
|
|
28
29
|
attributes?: Record<string, import("@markdoc/markdoc").SchemaAttribute & {
|
|
@@ -119,4 +120,9 @@ export declare const tags: {
|
|
|
119
120
|
resolver?: string;
|
|
120
121
|
}>;
|
|
121
122
|
};
|
|
123
|
+
[loginButton.tagName]: import("@markdoc/markdoc").Schema & {
|
|
124
|
+
attributes?: Record<string, import("@markdoc/markdoc").SchemaAttribute & {
|
|
125
|
+
resolver?: string;
|
|
126
|
+
}>;
|
|
127
|
+
};
|
|
122
128
|
};
|
package/lib/markdoc/default.js
CHANGED
|
@@ -65,6 +65,7 @@ const code_toggle_1 = require("../markdoc/tags/code-toggle");
|
|
|
65
65
|
const code_group_1 = require("../markdoc/tags/code-group");
|
|
66
66
|
const icon_1 = require("../markdoc/tags/icon");
|
|
67
67
|
const connect_mcp_1 = require("../markdoc/tags/connect-mcp");
|
|
68
|
+
const login_button_1 = require("../markdoc/tags/login-button");
|
|
68
69
|
exports.tags = {
|
|
69
70
|
[admonition_1.admonition.tagName]: admonition_1.admonition.schema,
|
|
70
71
|
[debug_1.debug.tagName]: debug_1.debug.schema,
|
|
@@ -85,5 +86,6 @@ exports.tags = {
|
|
|
85
86
|
[code_group_1.codeGroup.tagName]: code_group_1.codeGroup.schema,
|
|
86
87
|
[icon_1.icon.tagName]: icon_1.icon.schema,
|
|
87
88
|
[connect_mcp_1.connectMcp.tagName]: connect_mcp_1.connectMcp.schema,
|
|
89
|
+
[login_button_1.loginButton.tagName]: login_button_1.loginButton.schema,
|
|
88
90
|
};
|
|
89
91
|
//# sourceMappingURL=default.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loginButton = void 0;
|
|
4
|
+
exports.loginButton = {
|
|
5
|
+
schema: {
|
|
6
|
+
render: 'LoginButton',
|
|
7
|
+
attributes: {
|
|
8
|
+
variant: {
|
|
9
|
+
type: String,
|
|
10
|
+
default: 'primary',
|
|
11
|
+
matches: ['primary', 'secondary', 'outlined', 'text', 'link', 'ghost'],
|
|
12
|
+
},
|
|
13
|
+
size: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: 'medium',
|
|
16
|
+
matches: ['small', 'medium', 'large'],
|
|
17
|
+
},
|
|
18
|
+
label: {
|
|
19
|
+
type: String,
|
|
20
|
+
description: 'Custom button label text. Overrides translation.',
|
|
21
|
+
},
|
|
22
|
+
labelTranslationKey: {
|
|
23
|
+
type: String,
|
|
24
|
+
default: 'userMenu.login',
|
|
25
|
+
description: 'Translation key for the button label.',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
selfClosing: true,
|
|
29
|
+
},
|
|
30
|
+
tagName: 'login-button',
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=login-button.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { ButtonVariant, ButtonSize } from '@redocly/theme/components/Button/Button';
|
|
4
4
|
|
|
5
5
|
import { useThemeHooks } from '@redocly/theme/core/hooks';
|
|
6
6
|
import { Button } from '@redocly/theme/components/Button/Button';
|
|
@@ -8,25 +8,40 @@ import { Button } from '@redocly/theme/components/Button/Button';
|
|
|
8
8
|
export type LoginButtonProps = {
|
|
9
9
|
href: string;
|
|
10
10
|
className?: string;
|
|
11
|
+
variant?: ButtonVariant;
|
|
12
|
+
size?: ButtonSize;
|
|
13
|
+
label?: string;
|
|
14
|
+
labelTranslationKey?: string;
|
|
15
|
+
['data-component-name']?: string;
|
|
11
16
|
};
|
|
12
17
|
|
|
13
|
-
export function LoginButton({
|
|
18
|
+
export function LoginButton({
|
|
19
|
+
href,
|
|
20
|
+
className,
|
|
21
|
+
variant = 'primary',
|
|
22
|
+
size = 'medium',
|
|
23
|
+
label,
|
|
24
|
+
labelTranslationKey = 'userMenu.login',
|
|
25
|
+
'data-component-name': componentName = 'UserMenu/LoginButton',
|
|
26
|
+
}: LoginButtonProps) {
|
|
14
27
|
const { useTranslate, useTelemetry } = useThemeHooks();
|
|
15
28
|
const { translate } = useTranslate();
|
|
16
29
|
const telemetry = useTelemetry();
|
|
17
30
|
|
|
31
|
+
const buttonLabel = label || translate(labelTranslationKey, 'Login');
|
|
32
|
+
|
|
18
33
|
return (
|
|
19
|
-
<div data-component-name=
|
|
34
|
+
<div data-component-name={componentName} className={className}>
|
|
20
35
|
<Button
|
|
21
|
-
data-translation-key=
|
|
36
|
+
data-translation-key={label ? undefined : labelTranslationKey}
|
|
22
37
|
to={href}
|
|
23
38
|
onClick={() => telemetry.sendLoginButtonClickedMessage()}
|
|
24
39
|
data-testid="login-btn"
|
|
25
40
|
extraClass={className}
|
|
26
|
-
variant=
|
|
27
|
-
size=
|
|
41
|
+
variant={variant}
|
|
42
|
+
size={size}
|
|
28
43
|
>
|
|
29
|
-
{
|
|
44
|
+
{buttonLabel}
|
|
30
45
|
</Button>
|
|
31
46
|
</div>
|
|
32
47
|
);
|
package/src/core/types/hooks.ts
CHANGED
|
@@ -177,7 +177,26 @@ export type ThemeHooks = {
|
|
|
177
177
|
| 'startSpan'
|
|
178
178
|
| 'constructCloudEvent'
|
|
179
179
|
| 'sendToOtelService'
|
|
180
|
-
|
|
180
|
+
> & {
|
|
181
|
+
send<TEventType extends AsyncApiRealmUI.EventType>(
|
|
182
|
+
event: TEventType,
|
|
183
|
+
data?: AsyncApiRealmUI.EventPayload<TEventType>,
|
|
184
|
+
): void;
|
|
185
|
+
/**
|
|
186
|
+
* @deprecated This method is deprecated. Use send(event, data) instead.
|
|
187
|
+
*/
|
|
188
|
+
send<TEventType extends AsyncApiRealmUI.EventType>(
|
|
189
|
+
params: AsyncApiRealmUI.SendEventParams<TEventType>,
|
|
190
|
+
): void;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* @deprecated This hook is deprecated. Use `useTelemetry` instead.
|
|
194
|
+
*/
|
|
195
|
+
useOtelTelemetry: () => {
|
|
196
|
+
send<TEventType extends AsyncApiRealmUI.EventType>(
|
|
197
|
+
params: AsyncApiRealmUI.SendEventParams<TEventType>,
|
|
198
|
+
): void;
|
|
199
|
+
};
|
|
181
200
|
useUserTeams: () => string[];
|
|
182
201
|
usePageData: () => PageData | null;
|
|
183
202
|
usePageSharedData: <T = unknown>(dataId: string) => T;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
import type { ButtonVariant, ButtonSize } from '@redocly/theme/components/Button/Button';
|
|
4
|
+
|
|
5
|
+
import { useThemeHooks } from '@redocly/theme/core/hooks';
|
|
6
|
+
import { LoginButton as UserMenuLoginButton } from '@redocly/theme/components/UserMenu/LoginButton';
|
|
7
|
+
|
|
8
|
+
export type MarkdocLoginButtonProps = {
|
|
9
|
+
variant?: ButtonVariant;
|
|
10
|
+
size?: ButtonSize;
|
|
11
|
+
label?: string;
|
|
12
|
+
labelTranslationKey?: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export function LoginButton({
|
|
16
|
+
variant,
|
|
17
|
+
size,
|
|
18
|
+
label,
|
|
19
|
+
labelTranslationKey,
|
|
20
|
+
}: MarkdocLoginButtonProps) {
|
|
21
|
+
const { useUserMenu } = useThemeHooks();
|
|
22
|
+
const { userData, loginUrl } = useUserMenu();
|
|
23
|
+
|
|
24
|
+
if (userData?.isAuthenticated) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<UserMenuLoginButton
|
|
30
|
+
href={loginUrl || ''}
|
|
31
|
+
variant={variant}
|
|
32
|
+
size={size}
|
|
33
|
+
label={label}
|
|
34
|
+
labelTranslationKey={labelTranslationKey}
|
|
35
|
+
data-component-name="Markdoc/LoginButton"
|
|
36
|
+
/>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -21,3 +21,4 @@ export * from '@redocly/theme/markdoc/components/CodeWalkthrough/CodeContainer';
|
|
|
21
21
|
export * from '@redocly/theme/markdoc/components/CodeGroup/CodeGroup';
|
|
22
22
|
export * from '@redocly/theme/markdoc/components/Icon/Icon';
|
|
23
23
|
export * from '@redocly/theme/markdoc/components/ConnectMCP/ConnectMCP';
|
|
24
|
+
export * from '@redocly/theme/markdoc/components/LoginButton/LoginButton';
|
package/src/markdoc/default.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { toggle } from '@redocly/theme/markdoc/tags/code-toggle';
|
|
|
26
26
|
import { codeGroup } from '@redocly/theme/markdoc/tags/code-group';
|
|
27
27
|
import { icon } from '@redocly/theme/markdoc/tags/icon';
|
|
28
28
|
import { connectMcp } from '@redocly/theme/markdoc/tags/connect-mcp';
|
|
29
|
+
import { loginButton } from '@redocly/theme/markdoc/tags/login-button';
|
|
29
30
|
|
|
30
31
|
export const tags = {
|
|
31
32
|
[admonition.tagName]: admonition.schema,
|
|
@@ -47,4 +48,5 @@ export const tags = {
|
|
|
47
48
|
[codeGroup.tagName]: codeGroup.schema,
|
|
48
49
|
[icon.tagName]: icon.schema,
|
|
49
50
|
[connectMcp.tagName]: connectMcp.schema,
|
|
51
|
+
[loginButton.tagName]: loginButton.schema,
|
|
50
52
|
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MarkdocSchemaWrapper } from '@redocly/theme/markdoc/tags/types';
|
|
2
|
+
|
|
3
|
+
export const loginButton: MarkdocSchemaWrapper = {
|
|
4
|
+
schema: {
|
|
5
|
+
render: 'LoginButton',
|
|
6
|
+
attributes: {
|
|
7
|
+
variant: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: 'primary',
|
|
10
|
+
matches: ['primary', 'secondary', 'outlined', 'text', 'link', 'ghost'],
|
|
11
|
+
},
|
|
12
|
+
size: {
|
|
13
|
+
type: String,
|
|
14
|
+
default: 'medium',
|
|
15
|
+
matches: ['small', 'medium', 'large'],
|
|
16
|
+
},
|
|
17
|
+
label: {
|
|
18
|
+
type: String,
|
|
19
|
+
description: 'Custom button label text. Overrides translation.',
|
|
20
|
+
},
|
|
21
|
+
labelTranslationKey: {
|
|
22
|
+
type: String,
|
|
23
|
+
default: 'userMenu.login',
|
|
24
|
+
description: 'Translation key for the button label.',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
selfClosing: true,
|
|
28
|
+
},
|
|
29
|
+
tagName: 'login-button',
|
|
30
|
+
};
|