@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.
@@ -1,6 +1,12 @@
1
- import type { JSX } from 'react';
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
- return (react_1.default.createElement("div", { "data-component-name": "UserMenu/LoginButton", className: className },
15
- react_1.default.createElement(Button_1.Button, { "data-translation-key": "userMenu.login", to: href, onClick: () => telemetry.sendLoginButtonClickedMessage(), "data-testid": "login-btn", extraClass: className, variant: "primary", size: "medium" }, translate('userMenu.login', 'Login'))));
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
@@ -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
  };
@@ -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,2 @@
1
+ import type { MarkdocSchemaWrapper } from '../../markdoc/tags/types';
2
+ export declare const loginButton: MarkdocSchemaWrapper;
@@ -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
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.62.0-next.1",
3
+ "version": "0.62.0-next.3",
4
4
  "description": "Shared UI components lib",
5
5
  "keywords": [
6
6
  "theme",
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
 
3
- import type { JSX } from 'react';
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({ href, className }: LoginButtonProps): JSX.Element {
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="UserMenu/LoginButton" className={className}>
34
+ <div data-component-name={componentName} className={className}>
20
35
  <Button
21
- data-translation-key="userMenu.login"
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="primary"
27
- size="medium"
41
+ variant={variant}
42
+ size={size}
28
43
  >
29
- {translate('userMenu.login', 'Login')}
44
+ {buttonLabel}
30
45
  </Button>
31
46
  </div>
32
47
  );
@@ -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';
@@ -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
+ };