Commit 0cdec2e
* feat(theme): configurable schema expansion level (#1222)
Adds an opt-in `themeConfig.api.schemaExpansion` option that controls
the default expansion depth of nested request/response schema trees,
plus an inline icon control next to each schema header that lets
readers change the depth at view time. The selected depth is persisted
in localStorage.
- New `SchemaExpansionProvider` and `SchemaDepthProvider` contexts
thread the active expansion level and per-node depth without
prop-drilling through the recursive Schema renderer.
- `SchemaNodeDetails` opens its `<Details>` when `depth < level` and
remounts on level change so the control feels responsive.
- New `SchemaExpansionControl` renders an icon trigger inline with the
Body/Schema headers; clicking opens a compact popover with depth
options including "All".
- Behavior is unchanged when `schemaExpansion` is unset.
Demo: enables the option and adds an envelope-wrapped fixture under
`demo/examples/tests/schemaExpansion.yaml` for manual exercise.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* style(theme): remove pointer cursor on schema expansion control
Defaults to the standard arrow cursor on hover for a less clicky feel.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* style(theme): fix wide click target on schema expansion trigger
Lock the trigger button to a 22x22 box so the hover background and
click area match the icon, rather than stretching to the flex row's
height.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(theme): render schema expansion popover in a portal
When the surrounding <details> was collapsed, the absolutely-positioned
popover got clipped by the details element. Render the popover via a
portal to document.body with fixed positioning computed from the
trigger's bounding rect, and reposition on scroll/resize.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(theme): use fixed positioning instead of portal for popover
Avoid pulling in @types/react-dom by computing the trigger's bounding
rect and rendering the popover with position: fixed in-place. Fixed
positioning still escapes the surrounding details overflow, so the
menu is no longer clipped when the schema is collapsed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* style(theme): keep REQUIRED label inline with schema title
When the parent summary became a flex row, the h3/strong holding the
title and the REQUIRED span fell back to block layout and wrapped.
Make the title element itself an inline-flex with a small gap so the
title and the badge stay on one line and align vertically.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* docs(theme): clarify tooltip on schema expansion control
Switch the aria-label / title from "Schema expansion depth" to a more
descriptive "Set how deep schemas auto-expand" so hovering the icon
explains what the control does.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(theme): close schema expansion popover on scroll
Repositioning the popover during scroll lagged behind the trigger and
felt detached. Close the popover instead so it always appears anchored
at the moment of opening. Also revert the tooltip text to its original
"Schema expansion depth".
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore(theme): polish a11y, i18n, and BEM for schema expansion control
- Centralize translation IDs under OPENAPI_SCHEMA_EXPANSION in
translationIds.ts so they can be discovered alongside other theme
strings and overridden via i18n catalogs.
- aria-haspopup="menu" (was "true") + aria-controls + popover id +
aria-label on the menu so assistive tech announces it as a menu.
- Move focus to the active option when the menu opens; arrow-key
navigation between options; ESC stops propagation so it doesn't
also collapse a parent details element.
- Per-option aria-label "Expand to depth N" via translate() so screen
readers get a full description instead of just a number.
- Class names already follow BEM (block, __element, --modifier).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(theme): apply default expansion depth even when control is hidden
`themeConfig.api.schemaExpansion.default` now reliably auto-expands to
the configured depth on every page load when `enabled` is false — the
provider previously kept reading from localStorage in that case, so a
stale value from a prior session where the control was enabled could
shadow the new default. Persistence is now implicitly off whenever the
control is hidden.
Also clarify the docstrings so it's discoverable that you can set just
`{ default: 1 }` to get auto-expansion without rendering the UI.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 7115da3 commit 0cdec2e
12 files changed
Lines changed: 772 additions & 79 deletions
File tree
- demo
- examples/tests
- packages/docusaurus-theme-openapi-docs/src
- theme
- ApiItem
- RequestSchema
- ResponseSchema
- SchemaExpansion
- Schema
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
271 | 271 | | |
272 | 272 | | |
273 | 273 | | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
274 | 281 | | |
275 | 282 | | |
276 | 283 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
Lines changed: 25 additions & 20 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
177 | 178 | | |
178 | 179 | | |
179 | 180 | | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
190 | 193 | | |
191 | | - | |
| 194 | + | |
192 | 195 | | |
193 | 196 | | |
194 | 197 | | |
| |||
200 | 203 | | |
201 | 204 | | |
202 | 205 | | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
211 | 216 | | |
212 | | - | |
| 217 | + | |
213 | 218 | | |
214 | 219 | | |
215 | 220 | | |
| |||
Lines changed: 38 additions & 39 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
77 | 78 | | |
78 | 79 | | |
79 | 80 | | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
| |||
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
188 | 187 | | |
189 | 188 | | |
190 | 189 | | |
| |||
Lines changed: 15 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
91 | 92 | | |
92 | 93 | | |
93 | 94 | | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
| |||
0 commit comments