vocs 2.0.17 → 2.1.2
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/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/globals.d.ts +16 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/config.d.ts +28 -0
- package/dist/internal/config.d.ts.map +1 -1
- package/dist/internal/config.js +10 -2
- package/dist/internal/config.js.map +1 -1
- package/dist/internal/llms.d.ts +21 -2
- package/dist/internal/llms.d.ts.map +1 -1
- package/dist/internal/llms.js +41 -1
- package/dist/internal/llms.js.map +1 -1
- package/dist/internal/markdown-negotiation.d.ts +36 -0
- package/dist/internal/markdown-negotiation.d.ts.map +1 -0
- package/dist/internal/markdown-negotiation.js +81 -0
- package/dist/internal/markdown-negotiation.js.map +1 -0
- package/dist/internal/markdown.d.ts.map +1 -1
- package/dist/internal/markdown.js +5 -0
- package/dist/internal/markdown.js.map +1 -1
- package/dist/internal/openapi/anchors.d.ts +25 -0
- package/dist/internal/openapi/anchors.d.ts.map +1 -0
- package/dist/internal/openapi/anchors.js +37 -0
- package/dist/internal/openapi/anchors.js.map +1 -0
- package/dist/internal/openapi/app.d.ts +89 -0
- package/dist/internal/openapi/app.d.ts.map +1 -0
- package/dist/internal/openapi/app.js +62 -0
- package/dist/internal/openapi/app.js.map +1 -0
- package/dist/internal/openapi/index.d.ts +8 -0
- package/dist/internal/openapi/index.d.ts.map +1 -0
- package/dist/internal/openapi/index.js +5 -0
- package/dist/internal/openapi/index.js.map +1 -0
- package/dist/internal/openapi/markdown.d.ts +42 -0
- package/dist/internal/openapi/markdown.d.ts.map +1 -0
- package/dist/internal/openapi/markdown.js +235 -0
- package/dist/internal/openapi/markdown.js.map +1 -0
- package/dist/internal/openapi/openapi.d.ts +187 -0
- package/dist/internal/openapi/openapi.d.ts.map +1 -0
- package/dist/internal/openapi/openapi.js +44 -0
- package/dist/internal/openapi/openapi.js.map +1 -0
- package/dist/internal/openapi/openrpc.d.ts +90 -0
- package/dist/internal/openapi/openrpc.d.ts.map +1 -0
- package/dist/internal/openapi/openrpc.js +213 -0
- package/dist/internal/openapi/openrpc.js.map +1 -0
- package/dist/internal/openapi/parser.d.ts +181 -0
- package/dist/internal/openapi/parser.d.ts.map +1 -0
- package/dist/internal/openapi/parser.js +329 -0
- package/dist/internal/openapi/parser.js.map +1 -0
- package/dist/internal/openapi/registry.d.ts +36 -0
- package/dist/internal/openapi/registry.d.ts.map +1 -0
- package/dist/internal/openapi/registry.js +79 -0
- package/dist/internal/openapi/registry.js.map +1 -0
- package/dist/internal/openapi/sample.d.ts +115 -0
- package/dist/internal/openapi/sample.d.ts.map +1 -0
- package/dist/internal/openapi/sample.js +434 -0
- package/dist/internal/openapi/sample.js.map +1 -0
- package/dist/internal/openapi/search.d.ts +19 -0
- package/dist/internal/openapi/search.d.ts.map +1 -0
- package/dist/internal/openapi/search.js +98 -0
- package/dist/internal/openapi/search.js.map +1 -0
- package/dist/internal/openapi/sidebar.d.ts +30 -0
- package/dist/internal/openapi/sidebar.d.ts.map +1 -0
- package/dist/internal/openapi/sidebar.js +67 -0
- package/dist/internal/openapi/sidebar.js.map +1 -0
- package/dist/internal/openapi/union.d.ts +36 -0
- package/dist/internal/openapi/union.d.ts.map +1 -0
- package/dist/internal/openapi/union.js +69 -0
- package/dist/internal/openapi/union.js.map +1 -0
- package/dist/internal/search.d.ts.map +1 -1
- package/dist/internal/search.js +20 -0
- package/dist/internal/search.js.map +1 -1
- package/dist/internal/vite-plugins.d.ts +12 -0
- package/dist/internal/vite-plugins.d.ts.map +1 -1
- package/dist/internal/vite-plugins.js +102 -11
- package/dist/internal/vite-plugins.js.map +1 -1
- package/dist/react/Badge.d.ts +2 -3
- package/dist/react/Badge.d.ts.map +1 -1
- package/dist/react/Layout.client.d.ts.map +1 -1
- package/dist/react/Layout.client.js +2 -2
- package/dist/react/Layout.client.js.map +1 -1
- package/dist/react/OpenApi.d.ts +6 -0
- package/dist/react/OpenApi.d.ts.map +1 -0
- package/dist/react/OpenApi.js +6 -0
- package/dist/react/OpenApi.js.map +1 -0
- package/dist/react/internal/CodeToHtml.client.d.ts +53 -2
- package/dist/react/internal/CodeToHtml.client.d.ts.map +1 -1
- package/dist/react/internal/CodeToHtml.client.js +154 -21
- package/dist/react/internal/CodeToHtml.client.js.map +1 -1
- package/dist/react/internal/Sidebar.d.ts.map +1 -1
- package/dist/react/internal/Sidebar.js +99 -2
- package/dist/react/internal/Sidebar.js.map +1 -1
- package/dist/react/internal/openapi/CodeSample.client.d.ts +21 -0
- package/dist/react/internal/openapi/CodeSample.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/CodeSample.client.js +134 -0
- package/dist/react/internal/openapi/CodeSample.client.js.map +1 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts +17 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.js +18 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.js.map +1 -0
- package/dist/react/internal/openapi/Disclosure.client.d.ts +28 -0
- package/dist/react/internal/openapi/Disclosure.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/Disclosure.client.js +38 -0
- package/dist/react/internal/openapi/Disclosure.client.js.map +1 -0
- package/dist/react/internal/openapi/Endpoints.d.ts +26 -0
- package/dist/react/internal/openapi/Endpoints.d.ts.map +1 -0
- package/dist/react/internal/openapi/Endpoints.js +33 -0
- package/dist/react/internal/openapi/Endpoints.js.map +1 -0
- package/dist/react/internal/openapi/EndpointsView.d.ts +24 -0
- package/dist/react/internal/openapi/EndpointsView.d.ts.map +1 -0
- package/dist/react/internal/openapi/EndpointsView.js +26 -0
- package/dist/react/internal/openapi/EndpointsView.js.map +1 -0
- package/dist/react/internal/openapi/EnumValues.client.d.ts +14 -0
- package/dist/react/internal/openapi/EnumValues.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/EnumValues.client.js +20 -0
- package/dist/react/internal/openapi/EnumValues.client.js.map +1 -0
- package/dist/react/internal/openapi/HeadingAnchor.d.ts +15 -0
- package/dist/react/internal/openapi/HeadingAnchor.d.ts.map +1 -0
- package/dist/react/internal/openapi/HeadingAnchor.js +12 -0
- package/dist/react/internal/openapi/HeadingAnchor.js.map +1 -0
- package/dist/react/internal/openapi/OpenApiPage.d.ts +79 -0
- package/dist/react/internal/openapi/OpenApiPage.d.ts.map +1 -0
- package/dist/react/internal/openapi/OpenApiPage.js +72 -0
- package/dist/react/internal/openapi/OpenApiPage.js.map +1 -0
- package/dist/react/internal/openapi/Operation.d.ts +25 -0
- package/dist/react/internal/openapi/Operation.d.ts.map +1 -0
- package/dist/react/internal/openapi/Operation.js +101 -0
- package/dist/react/internal/openapi/Operation.js.map +1 -0
- package/dist/react/internal/openapi/Playground.client.d.ts +33 -0
- package/dist/react/internal/openapi/Playground.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/Playground.client.js +170 -0
- package/dist/react/internal/openapi/Playground.client.js.map +1 -0
- package/dist/react/internal/openapi/PropertyExample.client.d.ts +17 -0
- package/dist/react/internal/openapi/PropertyExample.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/PropertyExample.client.js +21 -0
- package/dist/react/internal/openapi/PropertyExample.client.js.map +1 -0
- package/dist/react/internal/openapi/Reference.d.ts +55 -0
- package/dist/react/internal/openapi/Reference.d.ts.map +1 -0
- package/dist/react/internal/openapi/Reference.js +42 -0
- package/dist/react/internal/openapi/Reference.js.map +1 -0
- package/dist/react/internal/openapi/Schema.d.ts +110 -0
- package/dist/react/internal/openapi/Schema.d.ts.map +1 -0
- package/dist/react/internal/openapi/Schema.js +239 -0
- package/dist/react/internal/openapi/Schema.js.map +1 -0
- package/dist/react/internal/openapi/SchemaUnion.client.d.ts +25 -0
- package/dist/react/internal/openapi/SchemaUnion.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/SchemaUnion.client.js +48 -0
- package/dist/react/internal/openapi/SchemaUnion.client.js.map +1 -0
- package/dist/react/internal/openapi/anchor-navigation.client.d.ts +47 -0
- package/dist/react/internal/openapi/anchor-navigation.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/anchor-navigation.client.js +120 -0
- package/dist/react/internal/openapi/anchor-navigation.client.js.map +1 -0
- package/dist/react/internal/openapi/auth.d.ts +28 -0
- package/dist/react/internal/openapi/auth.d.ts.map +1 -0
- package/dist/react/internal/openapi/auth.js +75 -0
- package/dist/react/internal/openapi/auth.js.map +1 -0
- package/dist/react/useLayout.d.ts +2 -0
- package/dist/react/useLayout.d.ts.map +1 -1
- package/dist/react/useLayout.js +2 -0
- package/dist/react/useLayout.js.map +1 -1
- package/dist/server/handlers.d.ts +1 -1
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/handlers.js +26 -5
- package/dist/server/handlers.js.map +1 -1
- package/dist/server/og-assets.d.ts +5 -0
- package/dist/server/og-assets.d.ts.map +1 -0
- package/dist/server/og-assets.js +11 -0
- package/dist/server/og-assets.js.map +1 -0
- package/dist/server/openapi/assets.d.ts +33 -0
- package/dist/server/openapi/assets.d.ts.map +1 -0
- package/dist/server/openapi/assets.generated.d.ts +9 -0
- package/dist/server/openapi/assets.generated.d.ts.map +1 -0
- package/dist/server/openapi/assets.generated.js +1091 -0
- package/dist/server/openapi/assets.generated.js.map +1 -0
- package/dist/server/openapi/assets.js +32 -0
- package/dist/server/openapi/assets.js.map +1 -0
- package/dist/server/openapi/handler.d.ts +103 -0
- package/dist/server/openapi/handler.d.ts.map +1 -0
- package/dist/server/openapi/handler.js +198 -0
- package/dist/server/openapi/handler.js.map +1 -0
- package/dist/server/openapi/handler.test.d.ts +2 -0
- package/dist/server/openapi/handler.test.d.ts.map +1 -0
- package/dist/server/openapi/handler.test.js +203 -0
- package/dist/server/openapi/handler.test.js.map +1 -0
- package/dist/server/openapi/html.d.ts +16 -0
- package/dist/server/openapi/html.d.ts.map +1 -0
- package/dist/server/openapi/html.js +75 -0
- package/dist/server/openapi/html.js.map +1 -0
- package/dist/server/openapi/pages.d.ts +33 -0
- package/dist/server/openapi/pages.d.ts.map +1 -0
- package/dist/server/openapi/pages.js +130 -0
- package/dist/server/openapi/pages.js.map +1 -0
- package/dist/server/openapi/pages.test.d.ts +2 -0
- package/dist/server/openapi/pages.test.d.ts.map +1 -0
- package/dist/server/openapi/pages.test.js +94 -0
- package/dist/server/openapi/pages.test.js.map +1 -0
- package/dist/server/openapi/state.d.ts +42 -0
- package/dist/server/openapi/state.d.ts.map +1 -0
- package/dist/server/openapi/state.js +101 -0
- package/dist/server/openapi/state.js.map +1 -0
- package/dist/styles/index.css +16 -0
- package/dist/styles/markdown.css +9 -7
- package/dist/styles/openapi-playground.css +80 -0
- package/dist/styles/openapi.css +660 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +1 -0
- package/dist/vite.js.map +1 -1
- package/dist/waku/internal/middleware/md-router.d.ts +0 -4
- package/dist/waku/internal/middleware/md-router.d.ts.map +1 -1
- package/dist/waku/internal/middleware/md-router.js +3 -48
- package/dist/waku/internal/middleware/md-router.js.map +1 -1
- package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js +1 -1
- package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js.map +1 -1
- package/dist/waku/internal/patches/router.d.ts.map +1 -1
- package/dist/waku/internal/patches/router.js +114 -1
- package/dist/waku/internal/patches/router.js.map +1 -1
- package/package.json +5 -1
- package/src/config.ts +1 -0
- package/src/globals.d.ts +16 -0
- package/src/index.ts +1 -0
- package/src/internal/config.ts +40 -1
- package/src/internal/llms.ts +51 -1
- package/src/internal/markdown-negotiation.test.ts +42 -0
- package/src/internal/markdown-negotiation.ts +95 -0
- package/src/internal/markdown.ts +5 -0
- package/src/internal/openapi/anchors.ts +44 -0
- package/src/internal/openapi/app.ts +127 -0
- package/src/internal/openapi/index.ts +24 -0
- package/src/internal/openapi/markdown.test.ts +115 -0
- package/src/internal/openapi/markdown.ts +275 -0
- package/src/internal/openapi/openapi.ts +212 -0
- package/src/internal/openapi/openrpc.test.ts +239 -0
- package/src/internal/openapi/openrpc.ts +295 -0
- package/src/internal/openapi/parser.test.ts +203 -0
- package/src/internal/openapi/parser.ts +613 -0
- package/src/internal/openapi/registry.test.ts +89 -0
- package/src/internal/openapi/registry.ts +89 -0
- package/src/internal/openapi/sample.test.ts +283 -0
- package/src/internal/openapi/sample.ts +562 -0
- package/src/internal/openapi/search.test.ts +62 -0
- package/src/internal/openapi/search.ts +108 -0
- package/src/internal/openapi/sidebar.test.ts +131 -0
- package/src/internal/openapi/sidebar.ts +94 -0
- package/src/internal/openapi/union.test.ts +51 -0
- package/src/internal/openapi/union.ts +74 -0
- package/src/internal/search.ts +20 -0
- package/src/internal/test/virtual-config.stub.ts +14 -0
- package/src/internal/vite-plugins.ts +106 -11
- package/src/openapi-app/App.tsx +64 -0
- package/src/openapi-app/blocks.tsx +33 -0
- package/src/openapi-app/client.tsx +25 -0
- package/src/openapi-app/links.test.ts +84 -0
- package/src/openapi-app/links.ts +66 -0
- package/src/openapi-app/payload.ts +20 -0
- package/src/openapi-app/virtual/config.ts +7 -0
- package/src/openapi-app/virtual/group-icons.ts +2 -0
- package/src/openapi-app/virtual/langs.ts +6 -0
- package/src/openapi-app/virtual/openapi.ts +10 -0
- package/src/openapi-app/virtual/search-index.ts +21 -0
- package/src/openapi-app/virtual/slots.ts +4 -0
- package/src/openapi-app/virtual/user-styles.ts +2 -0
- package/src/openapi-app/waku.tsx +154 -0
- package/src/react/Badge.tsx +2 -3
- package/src/react/Layout.client.tsx +17 -4
- package/src/react/OpenApi.tsx +5 -0
- package/src/react/internal/CodeToHtml.client.tsx +283 -22
- package/src/react/internal/Sidebar.tsx +126 -22
- package/src/react/internal/openapi/CodeSample.client.tsx +294 -0
- package/src/react/internal/openapi/CollapsibleChildren.client.tsx +41 -0
- package/src/react/internal/openapi/Disclosure.client.tsx +67 -0
- package/src/react/internal/openapi/Endpoints.tsx +58 -0
- package/src/react/internal/openapi/EndpointsView.tsx +76 -0
- package/src/react/internal/openapi/EnumValues.client.tsx +49 -0
- package/src/react/internal/openapi/HeadingAnchor.tsx +28 -0
- package/src/react/internal/openapi/OpenApiPage.tsx +173 -0
- package/src/react/internal/openapi/Operation.test.tsx +101 -0
- package/src/react/internal/openapi/Operation.tsx +335 -0
- package/src/react/internal/openapi/Playground.client.tsx +234 -0
- package/src/react/internal/openapi/PropertyExample.client.tsx +55 -0
- package/src/react/internal/openapi/Reference.tsx +120 -0
- package/src/react/internal/openapi/Schema.tsx +467 -0
- package/src/react/internal/openapi/SchemaUnion.client.tsx +123 -0
- package/src/react/internal/openapi/anchor-navigation.client.ts +154 -0
- package/src/react/internal/openapi/auth.ts +69 -0
- package/src/react/useLayout.ts +4 -0
- package/src/server/handlers.ts +31 -6
- package/src/server/og-assets.ts +14 -0
- package/src/server/openapi/assets.generated.ts +1093 -0
- package/src/server/openapi/assets.ts +57 -0
- package/src/server/openapi/handler.test.ts +244 -0
- package/src/server/openapi/handler.ts +277 -0
- package/src/server/openapi/html.ts +84 -0
- package/src/server/openapi/pages.test.ts +111 -0
- package/src/server/openapi/pages.ts +153 -0
- package/src/server/openapi/state.ts +136 -0
- package/src/styles/index.css +16 -0
- package/src/styles/markdown.css +9 -7
- package/src/styles/openapi-playground.css +80 -0
- package/src/styles/openapi.css +660 -0
- package/src/vite.ts +1 -0
- package/src/waku/internal/middleware/md-router.ts +8 -52
- package/src/waku/internal/patches/adapters/vercel-build-enhancer.ts +1 -1
- package/src/waku/internal/patches/router.ts +131 -1
|
@@ -12,11 +12,73 @@ import { Badge } from '../Badge.js';
|
|
|
12
12
|
import { Link } from '../Link.js';
|
|
13
13
|
import { useSidebar } from '../useSidebar.js';
|
|
14
14
|
const maxDepth = 5;
|
|
15
|
+
/** Active in-page anchor id, for hash-link sidebar items (e.g. OpenAPI). */
|
|
16
|
+
const ActiveAnchorContext = React.createContext(null);
|
|
17
|
+
/** Whether any sidebar item links to an in-page anchor. */
|
|
18
|
+
function hasHashLink(items) {
|
|
19
|
+
return items.some((item) => item.link?.includes('#') || (item.items && hasHashLink(item.items)));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Tracks the in-page section currently in view, so hash-link sidebar items
|
|
23
|
+
* (used by the OpenAPI section) can show active state. Mirrors the Outline's
|
|
24
|
+
* IntersectionObserver approach.
|
|
25
|
+
*/
|
|
26
|
+
function useActiveAnchor(enabled, path) {
|
|
27
|
+
const [activeId, setActiveId] = React.useState(null);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
if (!enabled || typeof window === 'undefined')
|
|
30
|
+
return;
|
|
31
|
+
// Reset on every client-side navigation: derive the active section from the
|
|
32
|
+
// hash of the destination `path` (landing pages like the OpenAPI section
|
|
33
|
+
// root have none, so they start with no active section). Reading `path`
|
|
34
|
+
// here — rather than only `window.location` — keeps it a genuine effect
|
|
35
|
+
// dependency so navigation reliably re-runs this.
|
|
36
|
+
const hashFromPath = path.includes('#') ? path.slice(path.indexOf('#') + 1) : '';
|
|
37
|
+
const hash = hashFromPath || (window.location.hash ? window.location.hash.slice(1) : '');
|
|
38
|
+
setActiveId(hash || null);
|
|
39
|
+
// OpenAPI pages render inside `article[data-v-content]` too, so the generic
|
|
40
|
+
// markdown selector would also match operation sub-headings (Parameters,
|
|
41
|
+
// Responses, schema anchors, …) whose ids have no sidebar entry — hijacking
|
|
42
|
+
// the active anchor as you scroll through a section. On those pages observe
|
|
43
|
+
// only the group header (`<h1>`) and per-operation titles, which back the
|
|
44
|
+
// hash-link sidebar items, so the active item persists across the section.
|
|
45
|
+
const isOpenApi = document.querySelector('[data-v-openapi]') !== null;
|
|
46
|
+
const selector = isOpenApi
|
|
47
|
+
? '[data-v-openapi-h1][id], [data-v-openapi-operation-title][id]'
|
|
48
|
+
: 'article[data-v-content] :is(h2, h3, h4, h5, h6)[id]';
|
|
49
|
+
const observer = new IntersectionObserver((entries) => {
|
|
50
|
+
for (const entry of entries)
|
|
51
|
+
if (entry.isIntersecting) {
|
|
52
|
+
setActiveId(entry.target.id);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}, { rootMargin: '0px 0px -80% 0px' });
|
|
56
|
+
const observeAll = () => {
|
|
57
|
+
observer.disconnect();
|
|
58
|
+
for (const element of document.querySelectorAll(selector))
|
|
59
|
+
observer.observe(element);
|
|
60
|
+
};
|
|
61
|
+
observeAll();
|
|
62
|
+
const content = document.querySelector('article[data-v-content]') ??
|
|
63
|
+
document.querySelector('[data-v-openapi]');
|
|
64
|
+
const mutation = content ? new MutationObserver(observeAll) : null;
|
|
65
|
+
if (content && mutation)
|
|
66
|
+
mutation.observe(content, { childList: true, subtree: true });
|
|
67
|
+
return () => {
|
|
68
|
+
observer.disconnect();
|
|
69
|
+
mutation?.disconnect();
|
|
70
|
+
};
|
|
71
|
+
}, [enabled, path]);
|
|
72
|
+
return activeId;
|
|
73
|
+
}
|
|
15
74
|
export function Sidebar(props) {
|
|
16
75
|
const { className, onNavigate, scrollRef } = props;
|
|
17
76
|
const sidebar = useSidebar();
|
|
18
77
|
const condenseSidebar = React.useMemo(() => Sidebar_core.length(sidebar.items, { startDepth: 2 }) > 25, [sidebar.items]);
|
|
19
|
-
|
|
78
|
+
const hashLinks = React.useMemo(() => hasHashLink(sidebar.items), [sidebar.items]);
|
|
79
|
+
const { path } = useRouter();
|
|
80
|
+
const activeAnchor = useActiveAnchor(hashLinks, path);
|
|
81
|
+
return (_jsx(ActiveAnchorContext.Provider, { value: activeAnchor, children: _jsxs("nav", { className: cx("vocs:flex-1 vocs:flex vocs:flex-col vocs:text-sm vocs:font-[450] vocs:[&>*:not(:last-child)[data-collapsed='false']]:mb-4", className), "data-v-sidebar": true, children: [sidebar.backLink && _jsx(BackLink, { onNavigate: onNavigate }), sidebar.items.map((item, i) => (_jsx(Section, { ...item, condensed: condenseSidebar, onNavigate: onNavigate, scrollRef: scrollRef }, `${item.text}-${i}`)))] }) }));
|
|
20
82
|
}
|
|
21
83
|
function BackLink(props) {
|
|
22
84
|
const { onNavigate } = props;
|
|
@@ -33,7 +95,25 @@ function Item(props) {
|
|
|
33
95
|
const { badge, condensed = false, depth = 0, disabled, external, link, onNavigate, scrollRef, text, } = props;
|
|
34
96
|
const { path } = useRouter();
|
|
35
97
|
const isExternal = external ?? Path.isExternal(link);
|
|
36
|
-
const
|
|
98
|
+
const activeAnchor = React.useContext(ActiveAnchorContext);
|
|
99
|
+
const hashId = link?.includes('#') ? link.split('#')[1] : undefined;
|
|
100
|
+
const active = React.useMemo(() => {
|
|
101
|
+
if (isExternal)
|
|
102
|
+
return false;
|
|
103
|
+
if (hashId)
|
|
104
|
+
return hashId === activeAnchor;
|
|
105
|
+
if (!Path.matches(path, link))
|
|
106
|
+
return false;
|
|
107
|
+
// Page-level item (e.g. the OpenAPI "Overview"). When in-page anchor
|
|
108
|
+
// tracking is active, only highlight it while viewing the top of the page —
|
|
109
|
+
// i.e. when the active section is the page's top heading (whose id matches
|
|
110
|
+
// the last path segment) or no section is active yet. Otherwise the matching
|
|
111
|
+
// anchor item below it is highlighted instead.
|
|
112
|
+
if (activeAnchor == null)
|
|
113
|
+
return true;
|
|
114
|
+
const topId = (link?.split('#')[0] ?? '').split('/').filter(Boolean).pop();
|
|
115
|
+
return activeAnchor === topId;
|
|
116
|
+
}, [path, link, isExternal, hashId, activeAnchor]);
|
|
37
117
|
const itemRef = React.useRef(null);
|
|
38
118
|
const prevPath = React.useRef(path);
|
|
39
119
|
React.useEffect(() => {
|
|
@@ -60,6 +140,23 @@ function Item(props) {
|
|
|
60
140
|
});
|
|
61
141
|
});
|
|
62
142
|
}, [link, path, scrollRef]);
|
|
143
|
+
// Keep the active in-page anchor item (OpenAPI endpoints) visible as the page
|
|
144
|
+
// scrolls, since `path` doesn't change between same-page anchors.
|
|
145
|
+
React.useEffect(() => {
|
|
146
|
+
if (!active || !hashId)
|
|
147
|
+
return;
|
|
148
|
+
const item = itemRef.current;
|
|
149
|
+
const container = scrollRef?.current;
|
|
150
|
+
if (!item || !container)
|
|
151
|
+
return;
|
|
152
|
+
const itemTop = item.offsetTop;
|
|
153
|
+
const itemBottom = itemTop + item.offsetHeight;
|
|
154
|
+
const containerScrollTop = container.scrollTop;
|
|
155
|
+
const containerHeight = container.clientHeight;
|
|
156
|
+
if (itemTop >= containerScrollTop && itemBottom <= containerScrollTop + containerHeight)
|
|
157
|
+
return;
|
|
158
|
+
container.scrollTo({ behavior: 'smooth', top: itemTop - 100 });
|
|
159
|
+
}, [active, hashId, scrollRef]);
|
|
63
160
|
if (link && !disabled) {
|
|
64
161
|
if (isExternal)
|
|
65
162
|
return (_jsxs("a", { className: Item.className, "data-condensed": condensed && depth > 1, "data-link": true, "data-v-sidebar-item": true, href: link, ref: itemRef, target: "_blank", rel: "noopener noreferrer", onClick: onNavigate, children: [_jsxs("span", { className: "vocs:inline-flex vocs:items-center vocs:gap-1 vocs:min-w-0 vocs:truncate", children: [text, _jsx(LucideArrowUpRight, { className: "vocs:size-3 vocs:shrink-0" })] }), badge && _jsx(ItemBadge, { badge: badge })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/react/internal/Sidebar.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/react/internal/Sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type * as OpenApi from '../../../internal/openapi/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* The sticky right-hand panel for an operation: a request code sample with a
|
|
4
|
+
* language selector, an action slot (the `Test Request` button), and the
|
|
5
|
+
* response examples grouped by status code.
|
|
6
|
+
*
|
|
7
|
+
* Snippets are generated server-side with `@scalar/snippetz`; this component
|
|
8
|
+
* only handles tab selection and defers highlighting to Vocs's own Shiki
|
|
9
|
+
* highlighter via `CodeToHtml`. All styling lives in `openapi.css` keyed on the
|
|
10
|
+
* `data-v-openapi-sample*` attributes below.
|
|
11
|
+
*/
|
|
12
|
+
export declare function CodeSample(props: CodeSample.Props): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare namespace CodeSample {
|
|
14
|
+
type Props = {
|
|
15
|
+
samples: OpenApi.CodeSample[];
|
|
16
|
+
responses: OpenApi.ResponseSample[];
|
|
17
|
+
/** Action slot rendered between the request and response (the test button). */
|
|
18
|
+
action?: React.ReactNode;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=CodeSample.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSample.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CodeSample.client.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,OAAO,MAAM,oCAAoC,CAAA;AAIlE;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,2CAqJjD;AAmHD,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,KAAK,GAAG;QACX,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,CAAA;QAC7B,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,CAAA;QACnC,+EAA+E;QAC/E,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;KACzB,CAAA;CACF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import LucideCheck from '~icons/lucide/check';
|
|
5
|
+
import LucideChevronDown from '~icons/lucide/chevron-down';
|
|
6
|
+
import LucideChevronUp from '~icons/lucide/chevron-up';
|
|
7
|
+
import LucideClipboard from '~icons/lucide/clipboard';
|
|
8
|
+
import { schemaPropertyId } from '../../../internal/openapi/anchors.js';
|
|
9
|
+
import { CodeToHtml } from '../CodeToHtml.client.js';
|
|
10
|
+
import { registerSampleAnchors, revealAnchor } from './anchor-navigation.client.js';
|
|
11
|
+
/**
|
|
12
|
+
* The sticky right-hand panel for an operation: a request code sample with a
|
|
13
|
+
* language selector, an action slot (the `Test Request` button), and the
|
|
14
|
+
* response examples grouped by status code.
|
|
15
|
+
*
|
|
16
|
+
* Snippets are generated server-side with `@scalar/snippetz`; this component
|
|
17
|
+
* only handles tab selection and defers highlighting to Vocs's own Shiki
|
|
18
|
+
* highlighter via `CodeToHtml`. All styling lives in `openapi.css` keyed on the
|
|
19
|
+
* `data-v-openapi-sample*` attributes below.
|
|
20
|
+
*/
|
|
21
|
+
export function CodeSample(props) {
|
|
22
|
+
const { samples, responses, action } = props;
|
|
23
|
+
const [sampleId, setSampleId] = useState(samples[0]?.id);
|
|
24
|
+
const [status, setStatus] = useState(responses[0]?.status);
|
|
25
|
+
// When a request has many query params, the extras collapse by default.
|
|
26
|
+
const [queryExpanded, setQueryExpanded] = useState(false);
|
|
27
|
+
const sample = samples.find((entry) => entry.id === sampleId) ?? samples[0];
|
|
28
|
+
const response = responses.find((entry) => entry.status === status) ?? responses[0];
|
|
29
|
+
// Map each response to the set of schema anchor ids its example lines target,
|
|
30
|
+
// so a left-hand "Example" click can switch to the owning response tab before
|
|
31
|
+
// the matching line is revealed (see `revealResponseLine`).
|
|
32
|
+
const responseAnchors = useMemo(() => responses.map((entry) => ({
|
|
33
|
+
status: entry.status,
|
|
34
|
+
ids: new Set(entry.linePaths
|
|
35
|
+
.map((path) => (path ? schemaPropertyId(entry.idBase, path) : undefined))
|
|
36
|
+
.filter((value) => Boolean(value))),
|
|
37
|
+
})), [responses]);
|
|
38
|
+
// Request sample anchor ids (path + query parameters). Path params are inline
|
|
39
|
+
// spans; query params are whole lines. Both share the operation-scoped id used
|
|
40
|
+
// by the left-hand parameter rows, so a left "Example" can reveal them too.
|
|
41
|
+
// Query params beyond the collapse threshold only render once expanded, so we
|
|
42
|
+
// track which ids are hidden to expand the snippet before revealing them.
|
|
43
|
+
const requestAnchors = useMemo(() => {
|
|
44
|
+
const ids = new Set();
|
|
45
|
+
const collapsedIds = new Set();
|
|
46
|
+
let hasCollapsed = false;
|
|
47
|
+
for (const entry of samples) {
|
|
48
|
+
for (const anchor of entry.anchors)
|
|
49
|
+
ids.add(anchor.id);
|
|
50
|
+
for (const id of entry.lineAnchors)
|
|
51
|
+
if (id)
|
|
52
|
+
ids.add(id);
|
|
53
|
+
if (entry.collapsed) {
|
|
54
|
+
hasCollapsed = true;
|
|
55
|
+
for (const anchor of entry.collapsed.anchors)
|
|
56
|
+
collapsedIds.add(anchor.id);
|
|
57
|
+
for (const id of entry.collapsed.lineAnchors)
|
|
58
|
+
if (id)
|
|
59
|
+
collapsedIds.add(id);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const hiddenIds = hasCollapsed
|
|
63
|
+
? new Set([...ids].filter((id) => !collapsedIds.has(id)))
|
|
64
|
+
: new Set();
|
|
65
|
+
return { ids, hiddenIds };
|
|
66
|
+
}, [samples]);
|
|
67
|
+
useEffect(() => registerSampleAnchors({
|
|
68
|
+
has: (id) => requestAnchors.ids.has(id) || responseAnchors.some((entry) => entry.ids.has(id)),
|
|
69
|
+
select: (id) => {
|
|
70
|
+
const match = responseAnchors.find((entry) => entry.ids.has(id));
|
|
71
|
+
if (match) {
|
|
72
|
+
setStatus(match.status);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (requestAnchors.hiddenIds.has(id))
|
|
76
|
+
setQueryExpanded(true);
|
|
77
|
+
},
|
|
78
|
+
}), [responseAnchors, requestAnchors]);
|
|
79
|
+
// Use the collapsed snippet variant (first few query params) unless expanded.
|
|
80
|
+
const view = sample?.collapsed && !queryExpanded ? sample.collapsed : sample;
|
|
81
|
+
return (_jsxs("div", { "data-v-openapi-sample": true, children: [sample && view && (_jsxs("div", { "data-v-openapi-sample-request": true, children: [_jsxs("div", { "data-v-openapi-sample-header": true, children: [_jsx(LanguageDropdown, { samples: samples, selected: sample, onSelect: (id) => setSampleId(id) }), _jsxs("div", { "data-v-openapi-sample-actions": true, children: [_jsx(CopyButton, { code: sample.code }), action] })] }), _jsx("div", { "data-v-openapi-sample-request-body": true, onClick: onAnchorClick, children: _jsx(CodeToHtml, { code: view.display, lang: sample.lang, shrinkIndent: false, anchorRanges: view.anchors, colorRanges: view.colorRanges, lineAnchors: view.lineAnchors }) }), sample.collapsed && (_jsx("button", { type: "button", "data-v-openapi-sample-more": true, onClick: () => setQueryExpanded((value) => !value), children: queryExpanded ? (_jsxs(_Fragment, { children: [_jsx(LucideChevronUp, { "data-v-openapi-sample-more-icon": true }), "Show less"] })) : (_jsxs(_Fragment, { children: [_jsx(LucideChevronDown, { "data-v-openapi-sample-more-icon": true }), "Show ", sample.hiddenQueryCount, " more"] })) }))] })), response && (_jsxs("div", { "data-v-openapi-sample-response": true, children: [_jsx("div", { "data-v-openapi-sample-tabs": true, children: responses.map((entry) => (_jsx(Tab, { active: entry.status === response.status, onClick: () => setStatus(entry.status), children: entry.status }, entry.status))) }), _jsx("div", { "data-v-openapi-sample-response-body": true, onClick: onAnchorClick, children: _jsx(CodeToHtml, { code: response.code, lang: response.lang, shrinkIndent: false, dimRanges: response.placeholders, lineAnchors: response.linePaths.map((path) => path ? schemaPropertyId(response.idBase, path) : undefined) }) })] }))] }));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Navigates to the schema row matching a clicked element carrying a
|
|
85
|
+
* `data-anchor` id. Used for both response example lines (per-line anchors) and
|
|
86
|
+
* request sample path/query parameter spans (per-range anchors).
|
|
87
|
+
*/
|
|
88
|
+
function onAnchorClick(event) {
|
|
89
|
+
// Don't hijack text selection.
|
|
90
|
+
if (window.getSelection()?.toString())
|
|
91
|
+
return;
|
|
92
|
+
if (!(event.target instanceof Element))
|
|
93
|
+
return;
|
|
94
|
+
const line = event.target.closest('[data-anchor]');
|
|
95
|
+
if (!line || !event.currentTarget.contains(line))
|
|
96
|
+
return;
|
|
97
|
+
const anchor = line.dataset['anchor'];
|
|
98
|
+
if (!anchor)
|
|
99
|
+
return;
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
void revealAnchor(anchor);
|
|
102
|
+
}
|
|
103
|
+
/** Copies the current request sample's source to the clipboard. */
|
|
104
|
+
function CopyButton(props) {
|
|
105
|
+
const { code } = props;
|
|
106
|
+
const [copied, setCopied] = useState(false);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (!copied)
|
|
109
|
+
return;
|
|
110
|
+
const timeout = setTimeout(() => setCopied(false), 1000);
|
|
111
|
+
return () => clearTimeout(timeout);
|
|
112
|
+
}, [copied]);
|
|
113
|
+
return (_jsxs("button", { type: "button", onClick: () => {
|
|
114
|
+
navigator.clipboard?.writeText(code).then(() => setCopied(true), () => { });
|
|
115
|
+
}, "data-v-openapi-action": true, children: [copied ? (_jsx(LucideCheck, { "data-v-openapi-action-icon": true, "data-copied": true })) : (_jsx(LucideClipboard, { "data-v-openapi-action-icon": true })), "Copy"] }));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Language selector for the request sample, rendered as a dropdown (defaulting
|
|
119
|
+
* to the first sample, i.e. cURL) rather than a row of tabs.
|
|
120
|
+
*/
|
|
121
|
+
function LanguageDropdown(props) {
|
|
122
|
+
const { samples, selected, onSelect } = props;
|
|
123
|
+
const [open, setOpen] = useState(false);
|
|
124
|
+
if (samples.length <= 1)
|
|
125
|
+
return _jsx("span", { "data-v-openapi-lang-label": true, children: selected.label });
|
|
126
|
+
return (_jsxs("div", { "data-v-openapi-lang": true, children: [_jsxs("button", { type: "button", onClick: () => setOpen((value) => !value), "data-v-openapi-lang-trigger": true, children: [selected.label, _jsx(LucideChevronDown, { "data-v-openapi-lang-chevron": true })] }), open && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "aria-label": "Close", tabIndex: -1, "data-v-openapi-dropdown-backdrop": true, onClick: () => setOpen(false) }), _jsx("ul", { "data-v-openapi-lang-menu": true, children: samples.map((entry) => (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => {
|
|
127
|
+
onSelect(entry.id);
|
|
128
|
+
setOpen(false);
|
|
129
|
+
}, "data-v-openapi-lang-option": true, "data-selected": entry.id === selected.id || undefined, children: [_jsx(LucideCheck, { "data-v-openapi-lang-option-check": true }), _jsx("span", { "data-v-openapi-lang-option-label": true, children: entry.label })] }) }, entry.id))) })] }))] }));
|
|
130
|
+
}
|
|
131
|
+
function Tab(props) {
|
|
132
|
+
return (_jsx("button", { type: "button", onClick: props.onClick, "data-v-openapi-tab": true, "data-active": props.active || undefined, children: props.children }));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=CodeSample.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSample.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CodeSample.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,WAAW,MAAM,qBAAqB,CAAA;AAC7C,OAAO,iBAAiB,MAAM,4BAA4B,CAAA;AAC1D,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,eAAe,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEnF;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAC5C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC1D,wEAAwE;IACxE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;IAC3E,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;IAEnF,8EAA8E;IAC9E,8EAA8E;IAC9E,4DAA4D;IAC5D,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CACH,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,IAAI,GAAG,CACV,KAAK,CAAC,SAAS;aACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACxE,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACtD;KACF,CAAC,CAAC,EACL,CAAC,SAAS,CAAC,CACZ,CAAA;IAED,8EAA8E;IAC9E,+EAA+E;IAC/E,4EAA4E;IAC5E,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;QAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;QACtC,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO;gBAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACtD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,WAAW;gBAAE,IAAI,EAAE;oBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,YAAY,GAAG,IAAI,CAAA;gBACnB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO;oBAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACzE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW;oBAAE,IAAI,EAAE;wBAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,YAAY;YAC5B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,IAAI,GAAG,EAAU,CAAA;QACrB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA;IAC3B,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,SAAS,CACP,GAAG,EAAE,CACH,qBAAqB,CAAC;QACpB,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CACV,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;YACb,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACvB,OAAM;YACR,CAAC;YACD,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;KACF,CAAC,EACJ,CAAC,eAAe,EAAE,cAAc,CAAC,CAClC,CAAA;IAED,8EAA8E;IAC9E,MAAM,IAAI,GAAG,MAAM,EAAE,SAAS,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAE5E,OAAO,CACL,yDACG,MAAM,IAAI,IAAI,IAAI,CACjB,iEACE,gEACE,KAAC,gBAAgB,IACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GACjC,EACF,iEACE,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAI,EAChC,MAAM,IACH,IACF,EAGN,0DAAwC,OAAO,EAAE,aAAa,YAC5D,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,CAAC,OAAO,EAClB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,YAAY,EAAE,KAAK,EACnB,YAAY,EAAE,IAAI,CAAC,OAAO,EAC1B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,GAC7B,GACE,EACL,MAAM,CAAC,SAAS,IAAI,CACnB,iBACE,IAAI,EAAC,QAAQ,sCAEb,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAEjD,aAAa,CAAC,CAAC,CAAC,CACf,8BACE,KAAC,eAAe,8CAAmC,iBAElD,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,iBAAiB,8CAAmC,WAC/C,MAAM,CAAC,gBAAgB,aAC5B,CACJ,GACM,CACV,IACG,CACP,EAEA,QAAQ,IAAI,CACX,kEACE,4DACG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxB,KAAC,GAAG,IAEF,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,YAErC,KAAK,CAAC,MAAM,IAJR,KAAK,CAAC,MAAM,CAKb,CACP,CAAC,GACE,EAGN,2DAAyC,OAAO,EAAE,aAAa,YAC7D,KAAC,UAAU,IACT,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,YAAY,EAAE,KAAK,EACnB,SAAS,EAAE,QAAQ,CAAC,YAAY,EAChC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAC3D,GACD,GACE,IACF,CACP,IACG,CACP,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAuC;IAC5D,+BAA+B;IAC/B,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE;QAAE,OAAM;IAC7C,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC;QAAE,OAAM;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAc,eAAe,CAAC,CAAA;IAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAM;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrC,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,KAAK,YAAY,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED,mEAAmE;AACnE,SAAS,UAAU,CAAC,KAAuB;IACzC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;QACxD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CACvC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EACrB,GAAG,EAAE,GAAE,CAAC,CACT,CAAA;QACH,CAAC,4CAGA,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,WAAW,8DAA0C,CACvD,CAAC,CAAC,CAAC,CACF,KAAC,eAAe,yCAA8B,CAC/C,YAEM,CACV,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAIzB;IACC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC7C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,4DAAiC,QAAQ,CAAC,KAAK,GAAQ,CAAA;IACvF,OAAO,CACL,uDACE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,kDAC5D,QAAQ,CAAC,KAAK,EACf,KAAC,iBAAiB,0CAA+B,IAC1C,EACR,IAAI,IAAI,CACP,8BACE,iBACE,IAAI,EAAC,QAAQ,gBACF,OAAO,EAClB,QAAQ,EAAE,CAAC,CAAC,4CAEZ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAC7B,EACF,yDACG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,uBACE,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;oCACZ,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;oCAClB,OAAO,CAAC,KAAK,CAAC,CAAA;gCAChB,CAAC,uDAEc,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAI,SAAS,aAEpD,KAAC,WAAW,+CAAoC,EAChD,mEAAwC,KAAK,CAAC,KAAK,GAAQ,IACpD,IAZF,KAAK,CAAC,EAAE,CAaZ,CACN,CAAC,GACC,IACJ,CACJ,IACG,CACP,CAAA;AACH,CAAC;AAED,SAAS,GAAG,CAAC,KAA0E;IACrF,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,KAAK,CAAC,OAAO,6CAET,KAAK,CAAC,MAAM,IAAI,SAAS,YAErC,KAAK,CAAC,QAAQ,GACR,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collapses nested schema properties (e.g. `error.details`) behind a toggle,
|
|
3
|
+
* matching the "Show/Hide Child Attributes" pattern from Scalar/Stripe.
|
|
4
|
+
* Built on the shared {@link Disclosure} accordion. The wrapping
|
|
5
|
+
* `data-v-openapi-collapse` element scopes the trigger/panel styling (see
|
|
6
|
+
* `openapi.css`); the Show/Hide icons and labels swap on the trigger's Base UI
|
|
7
|
+
* `data-panel-open` state.
|
|
8
|
+
*/
|
|
9
|
+
export declare function CollapsibleChildren(props: CollapsibleChildren.Props): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare namespace CollapsibleChildren {
|
|
11
|
+
type Props = {
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
/** Text after the Show/Hide verb. @default 'Child Attributes' */
|
|
14
|
+
label?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=CollapsibleChildren.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleChildren.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CollapsibleChildren.client.tsx"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,2CAkBnE;AAED,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC;IAC3C,KAAK,KAAK,GAAG;QACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;QACzB,iEAAiE;QACjE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,CAAA;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import LucidePlus from '~icons/lucide/plus';
|
|
4
|
+
import LucideX from '~icons/lucide/x';
|
|
5
|
+
import { Disclosure } from './Disclosure.client.js';
|
|
6
|
+
/**
|
|
7
|
+
* Collapses nested schema properties (e.g. `error.details`) behind a toggle,
|
|
8
|
+
* matching the "Show/Hide Child Attributes" pattern from Scalar/Stripe.
|
|
9
|
+
* Built on the shared {@link Disclosure} accordion. The wrapping
|
|
10
|
+
* `data-v-openapi-collapse` element scopes the trigger/panel styling (see
|
|
11
|
+
* `openapi.css`); the Show/Hide icons and labels swap on the trigger's Base UI
|
|
12
|
+
* `data-panel-open` state.
|
|
13
|
+
*/
|
|
14
|
+
export function CollapsibleChildren(props) {
|
|
15
|
+
const { children, label = 'Child Attributes' } = props;
|
|
16
|
+
return (_jsx("div", { "data-v-openapi-collapse": true, children: _jsx(Disclosure, { trigger: _jsxs(_Fragment, { children: [_jsx(LucidePlus, { "data-v-openapi-collapse-icon-show": true }), _jsx(LucideX, { "data-v-openapi-collapse-icon-hide": true }), _jsxs("span", { "data-v-openapi-collapse-label-show": true, children: ["Show ", label] }), _jsxs("span", { "data-v-openapi-collapse-label-hide": true, children: ["Hide ", label] })] }), children: children }) }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=CollapsibleChildren.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleChildren.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CollapsibleChildren.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,OAAO,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,kBAAkB,EAAE,GAAG,KAAK,CAAA;IACtD,OAAO,CACL,yDACE,KAAC,UAAU,IACT,OAAO,EACL,8BACE,KAAC,UAAU,gDAAqC,EAChD,KAAC,OAAO,gDAAqC,EAC7C,gFAA+C,KAAK,IAAQ,EAC5D,gFAA+C,KAAK,IAAQ,IAC3D,YAGJ,QAAQ,GACE,GACT,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single collapsible disclosure built on the Base UI Accordion primitive,
|
|
3
|
+
* used for the toggleable sections across OpenAPI pages (nested "child
|
|
4
|
+
* attributes", responses, etc.). Collapsed by default.
|
|
5
|
+
*
|
|
6
|
+
* The panel is kept mounted so its content is always present in the DOM; this
|
|
7
|
+
* lets {@link revealAnchor} scroll to a property inside a collapsed disclosure
|
|
8
|
+
* (e.g. when clicking a response example line). The disclosure registers its
|
|
9
|
+
* panel + an `open()` callback so navigation can reveal it on demand.
|
|
10
|
+
*
|
|
11
|
+
* The trigger is a plain node so it can be passed from server components.
|
|
12
|
+
* Styling is attached via stable data attributes — `data-v-openapi-disclosure`,
|
|
13
|
+
* `-disclosure-trigger`, `-disclosure-panel` — which consumers scope by
|
|
14
|
+
* ancestor (e.g. `[data-v-openapi-response] [data-v-openapi-disclosure-trigger]`)
|
|
15
|
+
* so no Tailwind classes are passed through props. Open-state styling is driven
|
|
16
|
+
* via the Base UI `data-panel-open` attribute on the trigger.
|
|
17
|
+
*/
|
|
18
|
+
export declare function Disclosure(props: Disclosure.Props): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare namespace Disclosure {
|
|
20
|
+
type Props = {
|
|
21
|
+
/** Content of the trigger button. Style open state via `data-panel-open`. */
|
|
22
|
+
trigger: React.ReactNode;
|
|
23
|
+
/** @default false */
|
|
24
|
+
defaultOpen?: boolean | undefined;
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=Disclosure.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disclosure.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Disclosure.client.tsx"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,2CAiCjD;AAED,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,KAAK,GAAG;QACX,6EAA6E;QAC7E,OAAO,EAAE,KAAK,CAAC,SAAS,CAAA;QACxB,qBAAqB;QACrB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAC1B,CAAA;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Accordion } from '@base-ui/react/accordion';
|
|
4
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { registerDisclosure } from './anchor-navigation.client.js';
|
|
6
|
+
/**
|
|
7
|
+
* A single collapsible disclosure built on the Base UI Accordion primitive,
|
|
8
|
+
* used for the toggleable sections across OpenAPI pages (nested "child
|
|
9
|
+
* attributes", responses, etc.). Collapsed by default.
|
|
10
|
+
*
|
|
11
|
+
* The panel is kept mounted so its content is always present in the DOM; this
|
|
12
|
+
* lets {@link revealAnchor} scroll to a property inside a collapsed disclosure
|
|
13
|
+
* (e.g. when clicking a response example line). The disclosure registers its
|
|
14
|
+
* panel + an `open()` callback so navigation can reveal it on demand.
|
|
15
|
+
*
|
|
16
|
+
* The trigger is a plain node so it can be passed from server components.
|
|
17
|
+
* Styling is attached via stable data attributes — `data-v-openapi-disclosure`,
|
|
18
|
+
* `-disclosure-trigger`, `-disclosure-panel` — which consumers scope by
|
|
19
|
+
* ancestor (e.g. `[data-v-openapi-response] [data-v-openapi-disclosure-trigger]`)
|
|
20
|
+
* so no Tailwind classes are passed through props. Open-state styling is driven
|
|
21
|
+
* via the Base UI `data-panel-open` attribute on the trigger.
|
|
22
|
+
*/
|
|
23
|
+
export function Disclosure(props) {
|
|
24
|
+
const { trigger, defaultOpen = false, children } = props;
|
|
25
|
+
const [value, setValue] = useState(defaultOpen ? ['disclosure'] : []);
|
|
26
|
+
const panelRef = useRef(null);
|
|
27
|
+
const open = useCallback(() => {
|
|
28
|
+
setValue((current) => (current.includes('disclosure') ? current : ['disclosure']));
|
|
29
|
+
}, []);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
const panel = panelRef.current;
|
|
32
|
+
if (!panel)
|
|
33
|
+
return;
|
|
34
|
+
return registerDisclosure(panel, open);
|
|
35
|
+
}, [open]);
|
|
36
|
+
return (_jsx(Accordion.Root, { "data-v-openapi-disclosure": true, value: value, onValueChange: (next) => setValue(next), multiple: true, keepMounted: true, children: _jsxs(Accordion.Item, { value: "disclosure", children: [_jsx(Accordion.Header, { "data-v-openapi-disclosure-header": true, children: _jsx(Accordion.Trigger, { "data-v-openapi-disclosure-trigger": true, children: trigger }) }), _jsx(Accordion.Panel, { ref: panelRef, "data-v-openapi-disclosure-panel": true, children: children })] }) }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Disclosure.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disclosure.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Disclosure.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IAEpD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACpF,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,CACL,KAAC,SAAS,CAAC,IAAI,uCAEb,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAgB,CAAC,EACnD,QAAQ,QACR,WAAW,kBAEX,MAAC,SAAS,CAAC,IAAI,IAAC,KAAK,EAAC,YAAY,aAChC,KAAC,SAAS,CAAC,MAAM,wDACf,KAAC,SAAS,CAAC,OAAO,yDAAoC,OAAO,GAAqB,GACjE,EACnB,KAAC,SAAS,CAAC,KAAK,IAAC,GAAG,EAAE,QAAQ,qDAC3B,QAAQ,GACO,IACH,GACF,CAClB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the domain/category list for an OpenAPI spec as an accordion (Vite/RSC
|
|
3
|
+
* site integration). The UI lives in the framework-agnostic
|
|
4
|
+
* {@link file://./EndpointsView.tsx `EndpointsView`}; this is the Waku adapter
|
|
5
|
+
* that resolves the spec from `virtual:vocs/openapi` and links with the Vocs
|
|
6
|
+
* `Link`.
|
|
7
|
+
*
|
|
8
|
+
* This is an opt-in component — OpenAPI landing pages no longer render the list
|
|
9
|
+
* automatically. Drop `<OpenApi.Endpoints />` into a consumer override page
|
|
10
|
+
* (e.g. `pages/api.mdx`) to surface it.
|
|
11
|
+
*
|
|
12
|
+
* The target spec is resolved from `path` (the OpenAPI mount, e.g. `/api`).
|
|
13
|
+
* When omitted, it defaults to the only configured spec; if multiple specs
|
|
14
|
+
* exist, `path` is required.
|
|
15
|
+
*/
|
|
16
|
+
export declare function Endpoints(props: Endpoints.Props): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare namespace Endpoints {
|
|
18
|
+
type Props = {
|
|
19
|
+
/**
|
|
20
|
+
* OpenAPI mount path identifying which spec to render (e.g. `/api`).
|
|
21
|
+
* Optional when only one spec is configured.
|
|
22
|
+
*/
|
|
23
|
+
path?: string | undefined;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Endpoints.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Endpoints.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,2CA4B/C;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,KAAK,GAAG;QACX;;;WAGG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { specs } from 'virtual:vocs/openapi';
|
|
3
|
+
import { Link } from '../../Link.js';
|
|
4
|
+
import { EndpointsView } from './EndpointsView.js';
|
|
5
|
+
/**
|
|
6
|
+
* Renders the domain/category list for an OpenAPI spec as an accordion (Vite/RSC
|
|
7
|
+
* site integration). The UI lives in the framework-agnostic
|
|
8
|
+
* {@link file://./EndpointsView.tsx `EndpointsView`}; this is the Waku adapter
|
|
9
|
+
* that resolves the spec from `virtual:vocs/openapi` and links with the Vocs
|
|
10
|
+
* `Link`.
|
|
11
|
+
*
|
|
12
|
+
* This is an opt-in component — OpenAPI landing pages no longer render the list
|
|
13
|
+
* automatically. Drop `<OpenApi.Endpoints />` into a consumer override page
|
|
14
|
+
* (e.g. `pages/api.mdx`) to surface it.
|
|
15
|
+
*
|
|
16
|
+
* The target spec is resolved from `path` (the OpenAPI mount, e.g. `/api`).
|
|
17
|
+
* When omitted, it defaults to the only configured spec; if multiple specs
|
|
18
|
+
* exist, `path` is required.
|
|
19
|
+
*/
|
|
20
|
+
export function Endpoints(props) {
|
|
21
|
+
const mounts = Object.keys(specs);
|
|
22
|
+
const mount = props.path ?? (mounts.length === 1 ? mounts[0] : undefined);
|
|
23
|
+
if (!mount) {
|
|
24
|
+
if (mounts.length === 0)
|
|
25
|
+
return _jsx("p", { children: "No OpenAPI spec is configured." });
|
|
26
|
+
return (_jsxs("p", { children: ["Multiple OpenAPI specs are configured. Pass a ", _jsx("code", { children: "path" }), " to", ' ', _jsx("code", { children: "<Endpoints />" }), " (one of: ", mounts.join(', '), ")."] }));
|
|
27
|
+
}
|
|
28
|
+
const ir = specs[mount];
|
|
29
|
+
if (!ir)
|
|
30
|
+
return _jsxs("p", { children: ["No OpenAPI spec is mounted at ", mount, "."] });
|
|
31
|
+
return (_jsx(EndpointsView, { ir: ir, href: (to) => to, Link: ({ href, children, ...rest }) => (_jsx(Link, { to: href ?? '', ...rest, children: children })) }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=Endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Endpoints.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Endpoints.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,yDAAqC,CAAA;QACrE,OAAO,CACL,0EACgD,kCAAiB,SAAI,GAAG,EACtE,2CAAgC,gBAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAC1D,CACL,CAAA;IACH,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,CAAC,EAAE;QAAE,OAAO,0DAAkC,KAAK,SAAM,CAAA;IAE7D,OAAO,CACL,KAAC,aAAa,IACZ,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAChB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CACrC,KAAC,IAAI,IAAC,EAAE,EAAE,IAAI,IAAI,EAAE,KAAM,IAAI,YAC3B,QAAQ,GACJ,CACR,GACD,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
import type { Ir } from '../../../internal/openapi/parser.js';
|
|
3
|
+
/**
|
|
4
|
+
* Prop-driven domain/category accordion for an OpenAPI spec: each category
|
|
5
|
+
* expands to its operations (method badge + summary), every entry linking to
|
|
6
|
+
* that operation's anchor on its category page.
|
|
7
|
+
*
|
|
8
|
+
* Framework-agnostic — the caller supplies the parsed {@link Ir}, an `href`
|
|
9
|
+
* mapper (so links resolve correctly under any mount), and an optional `Link`
|
|
10
|
+
* component (the Vocs/Waku `Link` for the site, a plain `<a>` for the standalone
|
|
11
|
+
* client).
|
|
12
|
+
*/
|
|
13
|
+
export declare function EndpointsView(props: EndpointsView.Props): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare namespace EndpointsView {
|
|
15
|
+
type Props = {
|
|
16
|
+
/** Parsed OpenAPI spec. */
|
|
17
|
+
ir: Ir;
|
|
18
|
+
/** Maps a section-relative href to a final href (e.g. mount-prefixed). */
|
|
19
|
+
href: (to: string) => string;
|
|
20
|
+
/** Link component. Defaults to a plain anchor. */
|
|
21
|
+
Link?: ComponentType<React.ComponentProps<'a'>> | undefined;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=EndpointsView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointsView.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/EndpointsView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAA;AAK7D;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,2CA2CvD;AAMD,MAAM,CAAC,OAAO,WAAW,aAAa,CAAC;IACrC,KAAK,KAAK,GAAG;QACX,2BAA2B;QAC3B,EAAE,EAAE,EAAE,CAAA;QACN,0EAA0E;QAC1E,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;QAC5B,kDAAkD;QAClD,IAAI,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAA;KAC5D,CAAA;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import LucideChevronRight from '~icons/lucide/chevron-right';
|
|
3
|
+
import { methodVariant } from '../../../internal/openapi/sidebar.js';
|
|
4
|
+
import { Badge } from '../../Badge.js';
|
|
5
|
+
import { Disclosure } from './Disclosure.client.js';
|
|
6
|
+
/**
|
|
7
|
+
* Prop-driven domain/category accordion for an OpenAPI spec: each category
|
|
8
|
+
* expands to its operations (method badge + summary), every entry linking to
|
|
9
|
+
* that operation's anchor on its category page.
|
|
10
|
+
*
|
|
11
|
+
* Framework-agnostic — the caller supplies the parsed {@link Ir}, an `href`
|
|
12
|
+
* mapper (so links resolve correctly under any mount), and an optional `Link`
|
|
13
|
+
* component (the Vocs/Waku `Link` for the site, a plain `<a>` for the standalone
|
|
14
|
+
* client).
|
|
15
|
+
*/
|
|
16
|
+
export function EndpointsView(props) {
|
|
17
|
+
const { ir, href, Link = DefaultLink } = props;
|
|
18
|
+
// Root-mounted specs have `ir.path === '/'`; collapse it to '' so links read
|
|
19
|
+
// `/group#op` instead of `//group#op` (which the browser treats as a host).
|
|
20
|
+
const base = ir.path === '/' ? '' : ir.path.replace(/\/$/, '');
|
|
21
|
+
return (_jsx("div", { "data-v-openapi-overview": true, children: ir.groups.map((category) => (_jsx("div", { "data-v-openapi-overview-category": true, children: _jsx(Disclosure, { trigger: _jsxs(_Fragment, { children: [_jsx(LucideChevronRight, { "data-v-openapi-overview-chevron": true }), _jsxs("span", { "data-v-openapi-overview-category-head": true, children: [_jsx("span", { "data-v-openapi-overview-category-name": true, children: category.name }), category.description && (_jsx("span", { "data-v-openapi-overview-category-description": true, children: category.description }))] })] }), children: _jsx("ul", { "data-v-openapi-overview-endpoints": true, children: category.operations.map((operation) => (_jsx("li", { children: _jsxs(Link, { href: href(`${base}/${category.id}#${operation.id}`), "data-v-openapi-overview-endpoint": true, children: [_jsx(Badge, { variant: methodVariant(operation.method), children: operation.method }), _jsx("span", { "data-v-openapi-overview-endpoint-title": true, children: operation.summary || operation.path }), _jsx(LucideChevronRight, { "data-v-openapi-overview-endpoint-chevron": true })] }) }, operation.id))) }) }) }, category.id))) }));
|
|
22
|
+
}
|
|
23
|
+
function DefaultLink(props) {
|
|
24
|
+
return _jsx("a", { ...props });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=EndpointsView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointsView.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/EndpointsView.tsx"],"names":[],"mappings":";AACA,OAAO,kBAAkB,MAAM,6BAA6B,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,KAAK,CAAA;IAC9C,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9D,OAAO,CACL,yDACG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,kEACE,KAAC,UAAU,IACT,OAAO,EACL,8BACE,KAAC,kBAAkB,8CAAmC,EACtD,0EACE,wEAA6C,QAAQ,CAAC,IAAI,GAAQ,EACjE,QAAQ,CAAC,WAAW,IAAI,CACvB,+EAAoD,QAAQ,CAAC,WAAW,GAAQ,CACjF,IACI,IACN,YAGL,kEACG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACtC,uBACE,MAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC,uDAGpD,KAAC,KAAK,IAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,YAAG,SAAS,CAAC,MAAM,GAAS,EAC3E,yEACG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,GAC/B,EACP,KAAC,kBAAkB,uDAA4C,IAC1D,IAVA,SAAS,CAAC,EAAE,CAWhB,CACN,CAAC,GACC,GACM,IA9BL,QAAQ,CAAC,EAAE,CA+Bf,CACP,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAgC;IACnD,OAAO,eAAO,KAAK,GAAI,CAAA;AACzB,CAAC"}
|