Skip to content

Commit 7a88f62

Browse files
committed
Switch to DisclosureGroup
1 parent 99a0133 commit 7a88f62

File tree

3 files changed

+48
-23
lines changed

3 files changed

+48
-23
lines changed

packages/gitbook/src/components/DocumentView/OpenAPI/style.css

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@
334334
}
335335

336336
.openapi-securities-scopes ul {
337-
@apply !my-0 !list-none !pl-0;
337+
@apply !my-0 ml-4 pl-0;
338338
}
339339

340340
.openapi-securities-url {
@@ -1016,11 +1016,7 @@ body:has(.openapi-select-popover) {
10161016
}
10171017

10181018
.openapi-required-scopes {
1019-
@apply ring-1 ring-tint-subtle text-base font-medium mx-0;
1020-
}
1021-
1022-
.openapi-required-scopes .openapi-disclosure-trigger-label {
1023-
@apply top-1/2 -translate-y-1/2;
1019+
@apply border text-base rounded-md straight-corners:rounded-none circular-corners:rounded-md font-medium mx-0;
10241020
}
10251021

10261022
.openapi-required-scopes .openapi-required-scopes-header {
@@ -1029,4 +1025,15 @@ body:has(.openapi-select-popover) {
10291025

10301026
.openapi-required-scopes .openapi-required-scopes-header svg {
10311027
@apply size-3.5 text-tint-subtle rotate-none;
1028+
}
1029+
1030+
.openapi-required-scopes .openapi-disclosure-group-panel {
1031+
@apply px-3 pb-3;
1032+
}
1033+
.openapi-required-scopes .openapi-securities-scopes {
1034+
@apply ml-6;
1035+
}
1036+
1037+
.openapi-required-scopes .openapi-required-scopes-description {
1038+
@apply text-xs text-tint-subtle font-normal mb-2;
10321039
}

packages/react-openapi/src/OpenAPIDisclosureGroup.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use client';
22

3+
import clsx from 'classnames';
34
import { createContext, useContext, useRef } from 'react';
45
import { mergeProps, useButton, useDisclosure, useFocusRing, useId } from 'react-aria';
56
import {
@@ -17,6 +18,7 @@ interface Props {
1718
selectStateKey?: string;
1819
/** Icon to display for the select */
1920
selectIcon?: React.ReactNode;
21+
className?: string;
2022
}
2123

2224
type TDisclosureGroup = {
@@ -35,14 +37,15 @@ const DisclosureGroupStateContext = createContext<DisclosureGroupState | null>(n
3537
* Display an interactive OpenAPI disclosure group.
3638
*/
3739
export function OpenAPIDisclosureGroup(props: DisclosureGroupProps & Props) {
38-
const { icon, groups, selectStateKey, selectIcon } = props;
40+
const { icon, groups, selectStateKey, selectIcon, className } = props;
3941

4042
const state = useDisclosureGroupState(props);
4143

4244
return (
4345
<DisclosureGroupStateContext.Provider value={state}>
4446
{groups.map((group) => (
4547
<DisclosureItem
48+
className={className}
4649
selectStateKey={selectStateKey}
4750
selectIcon={selectIcon}
4851
icon={icon}
@@ -59,8 +62,9 @@ function DisclosureItem(props: {
5962
icon?: React.ReactNode;
6063
selectStateKey?: string;
6164
selectIcon?: React.ReactNode;
65+
className?: string;
6266
}) {
63-
const { icon, group, selectStateKey, selectIcon } = props;
67+
const { icon, group, selectStateKey, selectIcon, className } = props;
6468

6569
const defaultId = useId();
6670
const id = group.key || defaultId;
@@ -95,7 +99,10 @@ function DisclosureItem(props: {
9599
const selectedTab = group.tabs?.find((tab) => tab.key === store.key) || group.tabs?.[0];
96100

97101
return (
98-
<div className="openapi-disclosure-group" aria-expanded={state.isExpanded}>
102+
<div
103+
className={clsx('openapi-disclosure-group', className)}
104+
aria-expanded={state.isExpanded}
105+
>
99106
<div
100107
slot="trigger"
101108
ref={triggerRef}

packages/react-openapi/src/OpenAPIRequiredScopes.tsx

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client';
22

33
import { OpenAPICopyButton } from './OpenAPICopyButton';
4-
import { OpenAPIDisclosure } from './OpenAPIDisclosure';
4+
import { OpenAPIDisclosureGroup } from './OpenAPIDisclosureGroup';
55
import { useSelectState } from './OpenAPISelect';
66
import type { OpenAPIClientContext } from './context';
77
import { t } from './translate';
@@ -39,20 +39,28 @@ export function OpenAPIRequiredScopes(props: {
3939
}
4040

4141
return (
42-
<OpenAPIDisclosure
43-
defaultExpanded
42+
<OpenAPIDisclosureGroup
4443
className="openapi-required-scopes"
45-
header={
46-
<div className="openapi-required-scopes-header">
47-
{context.icons.lock}
48-
<span>{t(context.translation, 'required_scopes')}</span>
49-
</div>
50-
}
51-
icon={context.icons.plus}
52-
label=""
53-
>
54-
<OpenAPISchemaScopes scopes={scopes} context={context} />
55-
</OpenAPIDisclosure>
44+
icon={context.icons.chevronRight}
45+
groups={[
46+
{
47+
key: 'required-scopes',
48+
label: (
49+
<div className="openapi-required-scopes-header">
50+
{context.icons.lock}
51+
<span>{t(context.translation, 'required_scopes')}</span>
52+
</div>
53+
),
54+
tabs: [
55+
{
56+
key: 'scopes',
57+
label: '',
58+
body: <OpenAPISchemaScopes scopes={scopes} context={context} />,
59+
},
60+
],
61+
},
62+
]}
63+
/>
5664
);
5765
}
5866

@@ -64,6 +72,9 @@ function OpenAPISchemaScopes(props: {
6472

6573
return (
6674
<div className="openapi-securities-scopes openapi-markdown">
75+
<div className="openapi-required-scopes-description">
76+
This endpoint requires the following scopes:
77+
</div>
6778
<ul>
6879
{scopes.map((scope) => (
6980
<OpenAPIScopeItem key={scope[0]} scope={scope} context={context} />

0 commit comments

Comments
 (0)