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
|
@@ -0,0 +1,660 @@
|
|
|
1
|
+
/* Styling for the auto-generated OpenAPI reference.
|
|
2
|
+
|
|
3
|
+
Every visually-styled element in `src/react/internal/openapi/` carries a
|
|
4
|
+
stable `data-v-openapi-*` attribute instead of inline Tailwind classes, and
|
|
5
|
+
all styling lives here via `@apply`. This keeps the markup declarative and
|
|
6
|
+
lets consumers override any part of the reference UI by targeting the same
|
|
7
|
+
attributes from their own CSS. State is expressed with attribute selectors
|
|
8
|
+
(`[data-active]`, `[data-selected]`, `[data-static]`, `[data-separator]`,
|
|
9
|
+
`[data-visible]`, `[data-copied]`) and the Base UI `[data-panel-open]`
|
|
10
|
+
attribute set on disclosure triggers. */
|
|
11
|
+
|
|
12
|
+
/* Sidebar method badges (GET/POST/…) are a touch smaller than the default
|
|
13
|
+
badge so they sit more compactly beside endpoint labels. */
|
|
14
|
+
[data-v-sidebar-item-badge] {
|
|
15
|
+
@apply vocs:text-[10px] vocs:px-1.5 vocs:py-0.5;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* #region Page layout */
|
|
19
|
+
|
|
20
|
+
/* Both the landing and group pages use the full-bleed layout (left gutter
|
|
21
|
+
collapsed to the sidebar so content sits flush after it). Group pages span the
|
|
22
|
+
full available width to give the two-column operation layout (docs + sticky
|
|
23
|
+
playground) room; the landing page caps itself to content width below. */
|
|
24
|
+
[data-v-openapi] {
|
|
25
|
+
@apply vocs:flex vocs:flex-col vocs:gap-6;
|
|
26
|
+
}
|
|
27
|
+
[data-v-openapi-landing] {
|
|
28
|
+
@apply vocs:max-w-content;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* A category section (single-page layout) / categories list (overview). */
|
|
32
|
+
[data-v-openapi-group] {
|
|
33
|
+
@apply vocs:flex vocs:flex-col vocs:gap-2 vocs:pt-6;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Spec / category header. Mirrors the markdown `hgroup` page header: `text-h1`
|
|
37
|
+
on the container scopes the `0.75em` bottom padding to the heading size, and
|
|
38
|
+
the description uses the same subtitle styling as a markdown page subtitle. */
|
|
39
|
+
[data-v-openapi-header] {
|
|
40
|
+
@apply vocs:flex vocs:flex-col vocs:max-w-content vocs:text-h1 vocs:border-b vocs:border-primary vocs:pb-[0.75em];
|
|
41
|
+
}
|
|
42
|
+
[data-v-openapi-h1],
|
|
43
|
+
[data-v-openapi-h2] {
|
|
44
|
+
@apply vocs:!mt-0;
|
|
45
|
+
}
|
|
46
|
+
[data-v-openapi-info-title] {
|
|
47
|
+
@apply vocs:!mt-0;
|
|
48
|
+
}
|
|
49
|
+
[data-v-openapi-description] {
|
|
50
|
+
@apply vocs:text-secondary vocs:text-subtitle vocs:font-[450] vocs:leading-base vocs:mt-[0.25em];
|
|
51
|
+
}
|
|
52
|
+
/* Overview landing page: categories as accordions whose panels list every
|
|
53
|
+
endpoint as a GET-badge + path row (primary background, not surface). The
|
|
54
|
+
whole list is encapsulated in a card-styled pane (matching the `Card`
|
|
55
|
+
component); row dividers inset via the horizontal padding. (Width is capped
|
|
56
|
+
to content width by the shared `[data-v-openapi]` rule.) */
|
|
57
|
+
[data-v-openapi-overview] {
|
|
58
|
+
@apply vocs:flex vocs:flex-col vocs:overflow-hidden vocs:rounded-md vocs:border vocs:border-primary vocs:bg-surfaceTint/70 vocs:px-4;
|
|
59
|
+
}
|
|
60
|
+
[data-v-openapi-overview-category] {
|
|
61
|
+
@apply vocs:border-t vocs:border-primary;
|
|
62
|
+
}
|
|
63
|
+
[data-v-openapi-overview-category]:first-child {
|
|
64
|
+
@apply vocs:border-t-0;
|
|
65
|
+
}
|
|
66
|
+
[data-v-openapi-overview] [data-v-openapi-disclosure-trigger] {
|
|
67
|
+
@apply vocs:flex vocs:items-center vocs:gap-2 vocs:py-3 vocs:text-left vocs:cursor-pointer;
|
|
68
|
+
/* Bleed into the card's `px-4` padding so the hover highlight spans the full
|
|
69
|
+
width (edge to edge), inset only by the card border. The width must grow by
|
|
70
|
+
the bleed on both sides (`100% + 2rem`) so it also reaches the right edge —
|
|
71
|
+
a negative margin alone shifts the box without widening it. */
|
|
72
|
+
@apply vocs:-mx-4 vocs:w-[calc(100%+2rem)] vocs:px-4 vocs:transition-colors;
|
|
73
|
+
}
|
|
74
|
+
[data-v-openapi-overview] [data-v-openapi-disclosure-trigger]:hover {
|
|
75
|
+
background-color: light-dark(var(--vocs-color-gray12), var(--vocs-color-gray4));
|
|
76
|
+
}
|
|
77
|
+
[data-v-openapi-overview-chevron] {
|
|
78
|
+
@apply vocs:size-4 vocs:shrink-0 vocs:text-secondary vocs:transition-transform;
|
|
79
|
+
}
|
|
80
|
+
[data-v-openapi-disclosure-trigger][data-panel-open] [data-v-openapi-overview-chevron] {
|
|
81
|
+
@apply vocs:rotate-90;
|
|
82
|
+
}
|
|
83
|
+
[data-v-openapi-overview-category-head] {
|
|
84
|
+
@apply vocs:flex vocs:flex-col vocs:gap-0.5 vocs:min-w-0 vocs:flex-1;
|
|
85
|
+
}
|
|
86
|
+
[data-v-openapi-overview-category-name] {
|
|
87
|
+
@apply vocs:text-primary vocs:font-medium;
|
|
88
|
+
}
|
|
89
|
+
[data-v-openapi-overview-category-description] {
|
|
90
|
+
@apply vocs:text-[13px] vocs:text-secondary;
|
|
91
|
+
}
|
|
92
|
+
[data-v-openapi-overview] [data-v-openapi-disclosure-panel] {
|
|
93
|
+
@apply vocs:pt-1 vocs:pb-3;
|
|
94
|
+
}
|
|
95
|
+
[data-v-openapi-overview-endpoints] {
|
|
96
|
+
@apply vocs:flex vocs:flex-col vocs:gap-2;
|
|
97
|
+
}
|
|
98
|
+
[data-v-openapi-overview-endpoint] {
|
|
99
|
+
@apply vocs:flex vocs:items-center vocs:gap-3 vocs:bg-primary vocs:border vocs:border-primary vocs:rounded-lg vocs:px-3 vocs:py-2;
|
|
100
|
+
}
|
|
101
|
+
[data-v-openapi-overview-endpoint]:hover {
|
|
102
|
+
background-color: light-dark(var(--vocs-color-gray12), var(--vocs-color-gray4));
|
|
103
|
+
}
|
|
104
|
+
[data-v-openapi-overview-endpoint-title] {
|
|
105
|
+
@apply vocs:text-[14px] vocs:text-primary vocs:truncate vocs:min-w-0 vocs:flex-1;
|
|
106
|
+
}
|
|
107
|
+
[data-v-openapi-overview-endpoint-chevron] {
|
|
108
|
+
@apply vocs:size-4 vocs:shrink-0 vocs:text-secondary;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Nested markdown containers (property descriptions, prose) reuse
|
|
112
|
+
`data-v-content` purely for typography. The top-level article's
|
|
113
|
+
`data-v-content` centering rule (`margin-inline: auto`) must not leak into
|
|
114
|
+
them: on the flex-column parents used here, auto cross-axis margins make the
|
|
115
|
+
flex item shrink-to-content and center instead of stretching, which shows up
|
|
116
|
+
as stray left padding below the `lg` breakpoint. Reset the margins. */
|
|
117
|
+
[data-v-openapi] [data-v-content] {
|
|
118
|
+
margin-left: unset;
|
|
119
|
+
margin-right: unset;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Consumer "override" intro: render authored MDX exactly like a regular page.
|
|
123
|
+
The page article supplies its block rhythm via a `space-y-6` className that
|
|
124
|
+
the nested intro doesn't inherit, so reapply it here; the heading treatment
|
|
125
|
+
(h1 border, h2/h3 spacing) comes from the shared `article[data-v-content]`
|
|
126
|
+
rules in markdown.css, which are extended to match `[data-v-openapi-intro]`.
|
|
127
|
+
Cap to content width to match the auto-generated header (`data-v-openapi-header`)
|
|
128
|
+
— on group pages the markdown intro reads at content width while the
|
|
129
|
+
operations below span the full page. */
|
|
130
|
+
[data-v-openapi-intro] {
|
|
131
|
+
@apply vocs:space-y-6 vocs:max-w-content;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Consumer-authored guide page (e.g. `pages/api/auth.mdx`). Rendered inside the
|
|
135
|
+
full-bleed article (gutter collapsed to the sidebar, like the rest of the
|
|
136
|
+
section) but capped to content width so it reads like a regular markdown page.
|
|
137
|
+
Block rhythm + heading treatment come from the shared `article[data-v-content]`
|
|
138
|
+
markdown rules, which are extended to match `[data-v-openapi-guide]`. */
|
|
139
|
+
[data-v-openapi-guide] {
|
|
140
|
+
@apply vocs:space-y-6 vocs:max-w-content;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* #endregion */
|
|
144
|
+
|
|
145
|
+
/* #region Operation layout
|
|
146
|
+
On small screens the operation stacks header → playground → body, so the
|
|
147
|
+
interactive sample sits directly under the title. On large screens it becomes
|
|
148
|
+
two columns with the playground sticky on the right, spanning the header and
|
|
149
|
+
body rows. */
|
|
150
|
+
|
|
151
|
+
[data-v-openapi-operation] {
|
|
152
|
+
display: grid;
|
|
153
|
+
row-gap: 2rem;
|
|
154
|
+
column-gap: 4rem;
|
|
155
|
+
grid-template-columns: minmax(0, 1fr);
|
|
156
|
+
grid-template-areas:
|
|
157
|
+
"header"
|
|
158
|
+
"aside"
|
|
159
|
+
"body";
|
|
160
|
+
}
|
|
161
|
+
[data-v-openapi-operation][data-separator] {
|
|
162
|
+
@apply vocs:border-t vocs:border-primary vocs:mt-20 vocs:pt-20;
|
|
163
|
+
}
|
|
164
|
+
[data-v-openapi-operation]:not([data-separator]) {
|
|
165
|
+
@apply vocs:pt-8;
|
|
166
|
+
}
|
|
167
|
+
[data-v-openapi-operation-header] {
|
|
168
|
+
grid-area: header;
|
|
169
|
+
@apply vocs:flex vocs:flex-col vocs:gap-3 vocs:min-w-0;
|
|
170
|
+
}
|
|
171
|
+
[data-v-openapi-operation-body] {
|
|
172
|
+
grid-area: body;
|
|
173
|
+
@apply vocs:flex vocs:flex-col vocs:gap-8 vocs:min-w-0;
|
|
174
|
+
}
|
|
175
|
+
[data-v-openapi-operation-aside] {
|
|
176
|
+
grid-area: aside;
|
|
177
|
+
top: calc(var(--vocs-spacing-topNav) + var(--vocs-spacing-banner) + 1rem);
|
|
178
|
+
@apply vocs:flex vocs:flex-col vocs:min-w-0 vocs:self-start vocs:lg:sticky vocs:lg:max-h-[calc(100dvh-var(--vocs-spacing-topNav)-var(--vocs-spacing-banner)-2rem)] vocs:lg:overflow-hidden;
|
|
179
|
+
}
|
|
180
|
+
@media (min-width: 64rem) {
|
|
181
|
+
[data-v-openapi-operation] {
|
|
182
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
183
|
+
grid-template-areas:
|
|
184
|
+
"header aside"
|
|
185
|
+
"body aside";
|
|
186
|
+
align-items: start;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
[data-v-openapi-operation-title] {
|
|
191
|
+
@apply vocs:!mt-0 vocs:flex vocs:items-center vocs:gap-2 vocs:scroll-mt-0!;
|
|
192
|
+
}
|
|
193
|
+
[data-v-openapi-endpoint] {
|
|
194
|
+
@apply vocs:flex vocs:items-center vocs:gap-3 vocs:bg-code-block vocs:border vocs:border-primary vocs:rounded-lg vocs:px-3 vocs:py-2;
|
|
195
|
+
}
|
|
196
|
+
[data-v-openapi-endpoint-path] {
|
|
197
|
+
@apply vocs:!px-0 vocs:text-[13px] vocs:text-secondary vocs:break-all;
|
|
198
|
+
}
|
|
199
|
+
[data-v-openapi-prose] {
|
|
200
|
+
@apply vocs:text-[15px] vocs:text-secondary;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* #endregion */
|
|
204
|
+
|
|
205
|
+
/* #region Sections, parameters & schema */
|
|
206
|
+
|
|
207
|
+
[data-v-openapi-section] {
|
|
208
|
+
@apply vocs:flex vocs:flex-col vocs:gap-3;
|
|
209
|
+
}
|
|
210
|
+
[data-v-openapi-section-title] {
|
|
211
|
+
@apply vocs:flex vocs:items-center vocs:gap-2;
|
|
212
|
+
}
|
|
213
|
+
[data-v-openapi-params],
|
|
214
|
+
[data-v-openapi-schema],
|
|
215
|
+
[data-v-openapi-responses] {
|
|
216
|
+
@apply vocs:flex vocs:flex-col;
|
|
217
|
+
}
|
|
218
|
+
[data-v-openapi-children] {
|
|
219
|
+
@apply vocs:border-l vocs:border-primary vocs:pl-4;
|
|
220
|
+
}
|
|
221
|
+
[data-v-openapi-content] {
|
|
222
|
+
@apply vocs:flex vocs:flex-col vocs:gap-3;
|
|
223
|
+
}
|
|
224
|
+
[data-v-openapi-media] {
|
|
225
|
+
@apply vocs:flex vocs:flex-col vocs:gap-2;
|
|
226
|
+
}
|
|
227
|
+
[data-v-openapi-media-type] {
|
|
228
|
+
@apply vocs:text-[12px] vocs:text-secondary;
|
|
229
|
+
}
|
|
230
|
+
[data-v-openapi-variant] {
|
|
231
|
+
@apply vocs:flex vocs:flex-col vocs:gap-2;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* A single parameter/property row. */
|
|
235
|
+
[data-v-openapi-property] {
|
|
236
|
+
@apply vocs:flex vocs:flex-col vocs:gap-1.5 vocs:py-3;
|
|
237
|
+
}
|
|
238
|
+
[data-v-openapi-property-head] {
|
|
239
|
+
@apply vocs:flex vocs:items-center vocs:gap-2 vocs:flex-wrap;
|
|
240
|
+
}
|
|
241
|
+
[data-v-openapi-property-name] {
|
|
242
|
+
@apply vocs:font-mono vocs:text-[13px];
|
|
243
|
+
}
|
|
244
|
+
[data-v-openapi-property-prefix] {
|
|
245
|
+
@apply vocs:font-normal vocs:text-secondary;
|
|
246
|
+
}
|
|
247
|
+
[data-v-openapi-property-label] {
|
|
248
|
+
@apply vocs:font-semibold vocs:text-primary;
|
|
249
|
+
}
|
|
250
|
+
[data-v-openapi-property-required] {
|
|
251
|
+
@apply vocs:!text-[10px] vocs:!px-1.5 vocs:!py-0.5;
|
|
252
|
+
}
|
|
253
|
+
[data-v-openapi-property-head] .heading-anchor {
|
|
254
|
+
@apply vocs:!ml-0;
|
|
255
|
+
}
|
|
256
|
+
/* Reveal the copy-link anchor when hovering a property row. Property labels are
|
|
257
|
+
spans (not headings), so the shared heading hover rule in markdown.css does
|
|
258
|
+
not apply — mirror it here, scoped to the property container. */
|
|
259
|
+
[data-v-openapi-property]:hover .heading-anchor {
|
|
260
|
+
@apply vocs:opacity-100;
|
|
261
|
+
}
|
|
262
|
+
[data-v-openapi-property-meta] {
|
|
263
|
+
@apply vocs:flex vocs:flex-wrap vocs:items-center vocs:gap-x-2 vocs:gap-y-0.5 vocs:font-mono vocs:text-[12px];
|
|
264
|
+
}
|
|
265
|
+
[data-v-openapi-type] {
|
|
266
|
+
@apply vocs:!text-[12px];
|
|
267
|
+
}
|
|
268
|
+
[data-v-openapi-meta-label],
|
|
269
|
+
[data-v-openapi-meta-sep] {
|
|
270
|
+
@apply vocs:text-secondary;
|
|
271
|
+
}
|
|
272
|
+
[data-v-openapi-meta-value] {
|
|
273
|
+
@apply vocs:text-primary;
|
|
274
|
+
}
|
|
275
|
+
[data-v-openapi-property-description] {
|
|
276
|
+
@apply vocs:text-[13px] vocs:text-secondary;
|
|
277
|
+
}
|
|
278
|
+
[data-v-openapi-property-example] {
|
|
279
|
+
@apply vocs:flex vocs:flex-col vocs:text-[12px];
|
|
280
|
+
}
|
|
281
|
+
[data-v-openapi-property-example-label] {
|
|
282
|
+
@apply vocs:text-secondary;
|
|
283
|
+
}
|
|
284
|
+
[data-v-openapi-property-example-value] {
|
|
285
|
+
@apply vocs:font-mono vocs:text-primary vocs:break-all vocs:text-left;
|
|
286
|
+
}
|
|
287
|
+
/* When the sibling code sample renders a matching response example line, the
|
|
288
|
+
example value becomes a button that reveals/flashes that line on click. */
|
|
289
|
+
button[data-v-openapi-property-example-value] {
|
|
290
|
+
@apply vocs:cursor-pointer vocs:underline vocs:decoration-dotted vocs:underline-offset-2 vocs:transition-colors;
|
|
291
|
+
text-decoration-color: var(--vocs-text-color-secondary);
|
|
292
|
+
}
|
|
293
|
+
button[data-v-openapi-property-example-value]:hover {
|
|
294
|
+
text-decoration-color: var(--vocs-text-color-primary);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* Briefly highlight a property row when navigated to via an anchor link
|
|
298
|
+
(`:target`) or programmatically from a response example line / union reveal
|
|
299
|
+
(`data-v-openapi-flash`, toggled by `revealAnchor`). */
|
|
300
|
+
[data-v-openapi-property]:target,
|
|
301
|
+
[data-v-openapi-property][data-v-openapi-flash] {
|
|
302
|
+
@apply vocs:rounded-xs;
|
|
303
|
+
animation: vocs-openapi-target-flash 1.6s ease-out;
|
|
304
|
+
}
|
|
305
|
+
/* Shared "shimmer" color for anchor/example flashes: a prominent gray that
|
|
306
|
+
stands out against both the page (light) and code-block (dark) backgrounds. */
|
|
307
|
+
:root {
|
|
308
|
+
--vocs-openapi-flash-bg: light-dark(var(--vocs-color-gray10), var(--vocs-color-gray7));
|
|
309
|
+
}
|
|
310
|
+
/* The box-shadow spread bleeds the highlight a few pixels past the row so it
|
|
311
|
+
reads as a padded, rounded region rather than a flush background fill. */
|
|
312
|
+
@keyframes vocs-openapi-target-flash {
|
|
313
|
+
0%,
|
|
314
|
+
30% {
|
|
315
|
+
background-color: var(--vocs-openapi-flash-bg);
|
|
316
|
+
box-shadow: 0 0 0 8px var(--vocs-openapi-flash-bg);
|
|
317
|
+
}
|
|
318
|
+
100% {
|
|
319
|
+
background-color: transparent;
|
|
320
|
+
box-shadow: 0 0 0 8px transparent;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* #endregion */
|
|
325
|
+
|
|
326
|
+
/* #region Enum values */
|
|
327
|
+
|
|
328
|
+
[data-v-openapi-values] {
|
|
329
|
+
@apply vocs:flex vocs:flex-col;
|
|
330
|
+
}
|
|
331
|
+
[data-v-openapi-values-label] {
|
|
332
|
+
@apply vocs:text-[12px] vocs:text-secondary;
|
|
333
|
+
}
|
|
334
|
+
[data-v-openapi-values-list] {
|
|
335
|
+
@apply vocs:flex vocs:flex-col vocs:border-l vocs:border-primary vocs:pl-3;
|
|
336
|
+
}
|
|
337
|
+
[data-v-openapi-values-item] {
|
|
338
|
+
@apply vocs:font-mono vocs:!px-0 vocs:text-[12.5px] vocs:text-primary vocs:break-all;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* #endregion */
|
|
342
|
+
|
|
343
|
+
/* #region Disclosure & pill toggles */
|
|
344
|
+
|
|
345
|
+
[data-v-openapi-disclosure] {
|
|
346
|
+
@apply vocs:w-full;
|
|
347
|
+
}
|
|
348
|
+
[data-v-openapi-disclosure-header] {
|
|
349
|
+
@apply vocs:!m-0 vocs:!p-0;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/* The rounded "Show/Hide" pill: the EnumValues toggle button and the
|
|
353
|
+
CollapsibleChildren disclosure trigger share one look. */
|
|
354
|
+
[data-v-openapi-pill],
|
|
355
|
+
[data-v-openapi-collapse] [data-v-openapi-disclosure-header] [data-v-openapi-disclosure-trigger] {
|
|
356
|
+
@apply vocs:inline-flex vocs:items-center vocs:gap-1.5 vocs:w-fit vocs:rounded-md vocs:border vocs:border-primary vocs:px-2 vocs:py-0.5 vocs:text-[12px] vocs:font-medium vocs:text-secondary vocs:transition-colors;
|
|
357
|
+
}
|
|
358
|
+
[data-v-openapi-pill]:hover,
|
|
359
|
+
[data-v-openapi-collapse] [data-v-openapi-disclosure-trigger]:hover {
|
|
360
|
+
@apply vocs:text-primary vocs:bg-surfaceTint;
|
|
361
|
+
}
|
|
362
|
+
[data-v-openapi-values] [data-v-openapi-pill] {
|
|
363
|
+
@apply vocs:mt-2;
|
|
364
|
+
}
|
|
365
|
+
[data-v-openapi-pill-icon],
|
|
366
|
+
[data-v-openapi-collapse-icon-show],
|
|
367
|
+
[data-v-openapi-collapse-icon-hide] {
|
|
368
|
+
@apply vocs:size-3;
|
|
369
|
+
}
|
|
370
|
+
[data-v-openapi-collapse] [data-v-openapi-disclosure-panel] {
|
|
371
|
+
@apply vocs:mt-2;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* Show/Hide label + icon swap, driven by the trigger's open state. */
|
|
375
|
+
[data-v-openapi-collapse-icon-hide],
|
|
376
|
+
[data-v-openapi-collapse-label-hide] {
|
|
377
|
+
@apply vocs:hidden;
|
|
378
|
+
}
|
|
379
|
+
[data-v-openapi-disclosure-trigger][data-panel-open] [data-v-openapi-collapse-icon-show],
|
|
380
|
+
[data-v-openapi-disclosure-trigger][data-panel-open] [data-v-openapi-collapse-label-show] {
|
|
381
|
+
@apply vocs:hidden;
|
|
382
|
+
}
|
|
383
|
+
[data-v-openapi-disclosure-trigger][data-panel-open] [data-v-openapi-collapse-icon-hide],
|
|
384
|
+
[data-v-openapi-disclosure-trigger][data-panel-open] [data-v-openapi-collapse-label-hide] {
|
|
385
|
+
@apply vocs:inline;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/* #endregion */
|
|
389
|
+
|
|
390
|
+
/* #region Responses */
|
|
391
|
+
|
|
392
|
+
[data-v-openapi-response] {
|
|
393
|
+
@apply vocs:border-t vocs:border-primary;
|
|
394
|
+
}
|
|
395
|
+
[data-v-openapi-response]:first-child {
|
|
396
|
+
@apply vocs:border-t-0;
|
|
397
|
+
}
|
|
398
|
+
[data-v-openapi-response][data-static] {
|
|
399
|
+
@apply vocs:flex vocs:items-center vocs:gap-2 vocs:py-2;
|
|
400
|
+
}
|
|
401
|
+
[data-v-openapi-response] [data-v-openapi-disclosure-trigger] {
|
|
402
|
+
@apply vocs:flex vocs:items-center vocs:gap-2 vocs:w-full vocs:py-2 vocs:text-left vocs:cursor-pointer;
|
|
403
|
+
}
|
|
404
|
+
[data-v-openapi-response] [data-v-openapi-disclosure-panel] {
|
|
405
|
+
@apply vocs:pb-3;
|
|
406
|
+
}
|
|
407
|
+
[data-v-openapi-response-chevron] {
|
|
408
|
+
@apply vocs:size-4 vocs:shrink-0 vocs:text-secondary vocs:transition-transform;
|
|
409
|
+
}
|
|
410
|
+
[data-v-openapi-disclosure-trigger][data-panel-open] [data-v-openapi-response-chevron] {
|
|
411
|
+
@apply vocs:rotate-90;
|
|
412
|
+
}
|
|
413
|
+
[data-v-openapi-response-spacer] {
|
|
414
|
+
@apply vocs:size-4 vocs:shrink-0;
|
|
415
|
+
}
|
|
416
|
+
[data-v-openapi-response-status] {
|
|
417
|
+
@apply vocs:shrink-0;
|
|
418
|
+
}
|
|
419
|
+
[data-v-openapi-response-description] {
|
|
420
|
+
@apply vocs:text-[13px] vocs:text-secondary vocs:truncate vocs:min-w-0;
|
|
421
|
+
}
|
|
422
|
+
[data-v-openapi-response-content] {
|
|
423
|
+
@apply vocs:flex vocs:flex-col vocs:gap-3;
|
|
424
|
+
}
|
|
425
|
+
[data-v-openapi-example] {
|
|
426
|
+
@apply vocs:text-[12px] vocs:overflow-auto vocs:rounded-lg vocs:border vocs:border-primary vocs:p-3;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/* #endregion */
|
|
430
|
+
|
|
431
|
+
/* #region Code sample (sticky request/response panel) */
|
|
432
|
+
|
|
433
|
+
[data-v-openapi-sample] {
|
|
434
|
+
@apply vocs:flex vocs:flex-col vocs:min-h-0 vocs:max-h-full vocs:rounded-lg vocs:border vocs:border-primary vocs:overflow-hidden;
|
|
435
|
+
}
|
|
436
|
+
[data-v-openapi-sample-request] {
|
|
437
|
+
@apply vocs:flex vocs:flex-col vocs:shrink-0;
|
|
438
|
+
}
|
|
439
|
+
[data-v-openapi-sample-header] {
|
|
440
|
+
@apply vocs:flex vocs:items-center vocs:h-10 vocs:bg-surface vocs:px-3 vocs:border-b vocs:border-primary;
|
|
441
|
+
}
|
|
442
|
+
[data-v-openapi-sample-actions] {
|
|
443
|
+
@apply vocs:ml-auto vocs:flex vocs:items-center vocs:gap-1.5;
|
|
444
|
+
}
|
|
445
|
+
[data-v-openapi-sample-response] {
|
|
446
|
+
@apply vocs:flex vocs:flex-col vocs:min-h-0 vocs:flex-1 vocs:border-t vocs:border-primary;
|
|
447
|
+
}
|
|
448
|
+
[data-v-openapi-sample-tabs] {
|
|
449
|
+
@apply vocs:flex vocs:items-stretch vocs:flex-wrap vocs:shrink-0 vocs:bg-surface vocs:px-3 vocs:border-b vocs:border-primary;
|
|
450
|
+
}
|
|
451
|
+
[data-v-openapi-sample-response-body] {
|
|
452
|
+
@apply vocs:min-h-0 vocs:flex-1 vocs:overflow-y-auto;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* Make the OpenAPI request/response code samples match Vocs code blocks.
|
|
456
|
+
The Shiki `pre.shiki` emitted for these samples lacks the `data-v` marker
|
|
457
|
+
that markdown code blocks carry, so the shared `pre[data-v]` rules don't
|
|
458
|
+
apply — mirror the essentials here, scoped to the sample container. */
|
|
459
|
+
[data-v-openapi-sample] pre.shiki {
|
|
460
|
+
@apply vocs:bg-code-block vocs:py-4 vocs:overflow-x-auto;
|
|
461
|
+
}
|
|
462
|
+
[data-v-openapi-sample] pre.shiki > code {
|
|
463
|
+
@apply vocs:grid vocs:text-code-block;
|
|
464
|
+
}
|
|
465
|
+
[data-v-openapi-sample] pre.shiki > code > .line {
|
|
466
|
+
@apply vocs:leading-code vocs:px-code-block-px;
|
|
467
|
+
}
|
|
468
|
+
/* Synthesized placeholder values in a response example (no authored example)
|
|
469
|
+
are dimmed so real example values stand out. */
|
|
470
|
+
[data-v-openapi-sample] [data-v-openapi-placeholder] {
|
|
471
|
+
@apply vocs:opacity-45;
|
|
472
|
+
}
|
|
473
|
+
/* Response example lines that link to a schema row are clickable. */
|
|
474
|
+
[data-v-openapi-sample] pre.shiki > code > .line[data-anchor] {
|
|
475
|
+
@apply vocs:cursor-pointer;
|
|
476
|
+
}
|
|
477
|
+
[data-v-openapi-sample] pre.shiki > code > .line[data-anchor]:hover {
|
|
478
|
+
@apply vocs:bg-code-highlighted;
|
|
479
|
+
}
|
|
480
|
+
/* Flash a sample line/span when revealed from a left-hand "Example" click
|
|
481
|
+
(`data-v-openapi-flash`, toggled by `revealSampleLine`) — the reverse of the
|
|
482
|
+
left-row flash. Covers response example lines and request path-param spans. */
|
|
483
|
+
[data-v-openapi-sample] pre.shiki > code > .line[data-v-openapi-flash],
|
|
484
|
+
[data-v-openapi-sample] [data-v-openapi-anchor][data-v-openapi-flash] {
|
|
485
|
+
animation: vocs-openapi-line-flash 1.6s ease-out;
|
|
486
|
+
}
|
|
487
|
+
[data-v-openapi-sample] [data-v-openapi-anchor][data-v-openapi-flash] {
|
|
488
|
+
@apply vocs:rounded-xs;
|
|
489
|
+
}
|
|
490
|
+
@keyframes vocs-openapi-line-flash {
|
|
491
|
+
0%,
|
|
492
|
+
30% {
|
|
493
|
+
background-color: var(--vocs-openapi-flash-bg);
|
|
494
|
+
}
|
|
495
|
+
100% {
|
|
496
|
+
background-color: transparent;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
/* Recolor request-sample query/path parameter names and values so the URL reads
|
|
500
|
+
exactly like the JSON response example: names use the theme's JSON property-name
|
|
501
|
+
color, values its number color. The `light-dark()` values are captured from
|
|
502
|
+
the active Shiki theme at runtime (see CodeToHtml.client.tsx), so both color
|
|
503
|
+
schemes match the response example; the vocs tokens are only a fallback. */
|
|
504
|
+
[data-v-openapi-sample] [data-v-openapi-token="key"] {
|
|
505
|
+
color: var(--vocs-openapi-token-key, var(--vocs-color-green)) !important;
|
|
506
|
+
}
|
|
507
|
+
[data-v-openapi-sample] [data-v-openapi-token="value"] {
|
|
508
|
+
color: var(--vocs-openapi-token-value, var(--vocs-color-blue)) !important;
|
|
509
|
+
}
|
|
510
|
+
/* Path/query parameter spans in the request sample link to their schema row. */
|
|
511
|
+
[data-v-openapi-sample] [data-v-openapi-anchor] {
|
|
512
|
+
@apply vocs:cursor-pointer vocs:rounded-xs;
|
|
513
|
+
}
|
|
514
|
+
[data-v-openapi-sample] [data-v-openapi-anchor]:hover {
|
|
515
|
+
@apply vocs:bg-code-highlighted;
|
|
516
|
+
}
|
|
517
|
+
/* "Show more/less" toggle for the collapsed query parameters of a request. */
|
|
518
|
+
[data-v-openapi-sample-more] {
|
|
519
|
+
@apply vocs:flex vocs:items-center vocs:gap-1.5 vocs:w-full vocs:bg-code-block vocs:px-code-block-px vocs:-mt-2 vocs:pb-3 vocs:text-[12px] vocs:font-medium vocs:text-secondary vocs:cursor-pointer;
|
|
520
|
+
}
|
|
521
|
+
[data-v-openapi-sample-more]:hover {
|
|
522
|
+
@apply vocs:text-primary;
|
|
523
|
+
}
|
|
524
|
+
[data-v-openapi-sample-more-icon] {
|
|
525
|
+
@apply vocs:size-3.5;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
/* Request/response action buttons (Copy, Try). */
|
|
529
|
+
[data-v-openapi-action] {
|
|
530
|
+
@apply vocs:inline-flex vocs:items-center vocs:gap-1.5 vocs:rounded-md vocs:border vocs:border-primary vocs:px-2 vocs:py-0.5 vocs:text-[12px] vocs:font-medium vocs:cursor-pointer;
|
|
531
|
+
}
|
|
532
|
+
[data-v-openapi-action]:disabled {
|
|
533
|
+
@apply vocs:opacity-50 vocs:cursor-default;
|
|
534
|
+
}
|
|
535
|
+
[data-v-openapi-action-icon] {
|
|
536
|
+
@apply vocs:size-3 vocs:text-muted;
|
|
537
|
+
}
|
|
538
|
+
[data-v-openapi-action-icon][data-copied] {
|
|
539
|
+
@apply vocs:text-accent;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/* Response status tabs. */
|
|
543
|
+
[data-v-openapi-tab] {
|
|
544
|
+
@apply vocs:flex vocs:items-center vocs:h-10 vocs:text-[13px] vocs:font-medium vocs:tracking-tight vocs:px-3 vocs:-mb-[1.5px] vocs:border-b-[1.5px] vocs:border-b-transparent vocs:transition-colors vocs:cursor-pointer;
|
|
545
|
+
}
|
|
546
|
+
[data-v-openapi-tab]:not([data-active]) {
|
|
547
|
+
@apply vocs:text-secondary;
|
|
548
|
+
}
|
|
549
|
+
[data-v-openapi-tab]:not([data-active]):hover {
|
|
550
|
+
@apply vocs:text-heading;
|
|
551
|
+
}
|
|
552
|
+
[data-v-openapi-tab][data-active] {
|
|
553
|
+
@apply vocs:text-heading vocs:border-b-tab-active;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/* #endregion */
|
|
557
|
+
|
|
558
|
+
/* #region Dropdowns (language selector & union variant picker) */
|
|
559
|
+
|
|
560
|
+
[data-v-openapi-lang-label] {
|
|
561
|
+
@apply vocs:text-[13px] vocs:font-medium vocs:text-heading vocs:tracking-tight;
|
|
562
|
+
}
|
|
563
|
+
[data-v-openapi-lang] {
|
|
564
|
+
@apply vocs:relative;
|
|
565
|
+
}
|
|
566
|
+
[data-v-openapi-lang-trigger] {
|
|
567
|
+
@apply vocs:flex vocs:items-center vocs:gap-1 vocs:text-[13px] vocs:font-medium vocs:text-heading vocs:tracking-tight vocs:cursor-pointer;
|
|
568
|
+
}
|
|
569
|
+
[data-v-openapi-lang-chevron],
|
|
570
|
+
[data-v-openapi-union-chevron] {
|
|
571
|
+
@apply vocs:size-4 vocs:text-secondary;
|
|
572
|
+
}
|
|
573
|
+
[data-v-openapi-dropdown-backdrop] {
|
|
574
|
+
@apply vocs:fixed vocs:inset-0 vocs:z-10 vocs:cursor-default;
|
|
575
|
+
}
|
|
576
|
+
[data-v-openapi-lang-menu] {
|
|
577
|
+
@apply vocs:absolute vocs:left-0 vocs:top-full vocs:z-20 vocs:mt-1 vocs:min-w-36 vocs:overflow-auto vocs:rounded-md vocs:border vocs:border-primary vocs:bg-surface vocs:py-1 vocs:shadow-lg;
|
|
578
|
+
}
|
|
579
|
+
[data-v-openapi-lang-option],
|
|
580
|
+
[data-v-openapi-union-option] {
|
|
581
|
+
@apply vocs:flex vocs:w-full vocs:items-center vocs:gap-2 vocs:px-3 vocs:py-1.5 vocs:text-left vocs:text-[13px] vocs:cursor-pointer;
|
|
582
|
+
}
|
|
583
|
+
[data-v-openapi-lang-option]:hover,
|
|
584
|
+
[data-v-openapi-union-option]:hover {
|
|
585
|
+
@apply vocs:bg-surfaceTint;
|
|
586
|
+
}
|
|
587
|
+
[data-v-openapi-lang-option-check] {
|
|
588
|
+
@apply vocs:size-3.5 vocs:shrink-0 vocs:opacity-0;
|
|
589
|
+
}
|
|
590
|
+
[data-v-openapi-lang-option][data-selected] [data-v-openapi-lang-option-check] {
|
|
591
|
+
@apply vocs:text-accent vocs:opacity-100;
|
|
592
|
+
}
|
|
593
|
+
[data-v-openapi-lang-option-label],
|
|
594
|
+
[data-v-openapi-union-option-label] {
|
|
595
|
+
@apply vocs:text-secondary;
|
|
596
|
+
}
|
|
597
|
+
[data-v-openapi-lang-option][data-selected] [data-v-openapi-lang-option-label],
|
|
598
|
+
[data-v-openapi-union-option][data-selected] [data-v-openapi-union-option-label] {
|
|
599
|
+
@apply vocs:text-primary;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
[data-v-openapi-union] {
|
|
603
|
+
@apply vocs:flex vocs:flex-col vocs:rounded-md vocs:border vocs:border-primary;
|
|
604
|
+
}
|
|
605
|
+
[data-v-openapi-union-head] {
|
|
606
|
+
@apply vocs:relative;
|
|
607
|
+
}
|
|
608
|
+
[data-v-openapi-union-trigger] {
|
|
609
|
+
@apply vocs:flex vocs:w-full vocs:items-center vocs:gap-1.5 vocs:px-3 vocs:py-2 vocs:text-[13px] vocs:cursor-pointer;
|
|
610
|
+
}
|
|
611
|
+
[data-v-openapi-union-kind] {
|
|
612
|
+
@apply vocs:text-secondary;
|
|
613
|
+
}
|
|
614
|
+
[data-v-openapi-union-value] {
|
|
615
|
+
@apply vocs:font-medium vocs:text-primary;
|
|
616
|
+
}
|
|
617
|
+
[data-v-openapi-union-menu] {
|
|
618
|
+
@apply vocs:absolute vocs:left-0 vocs:top-full vocs:z-20 vocs:mt-1 vocs:max-h-80 vocs:w-full vocs:overflow-auto vocs:rounded-md vocs:border vocs:border-primary vocs:bg-surface vocs:py-1 vocs:shadow-lg;
|
|
619
|
+
}
|
|
620
|
+
[data-v-openapi-union-radio] {
|
|
621
|
+
@apply vocs:flex vocs:size-4 vocs:shrink-0 vocs:items-center vocs:justify-center vocs:rounded-full vocs:border vocs:border-primary;
|
|
622
|
+
}
|
|
623
|
+
[data-v-openapi-union-option][data-selected] [data-v-openapi-union-radio] {
|
|
624
|
+
@apply vocs:border-accent;
|
|
625
|
+
}
|
|
626
|
+
[data-v-openapi-union-radio-dot] {
|
|
627
|
+
@apply vocs:size-2 vocs:rounded-full vocs:bg-accent;
|
|
628
|
+
}
|
|
629
|
+
[data-v-openapi-union-panel][data-visible] {
|
|
630
|
+
@apply vocs:border-t vocs:border-primary vocs:px-3 vocs:py-2;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/* #endregion */
|
|
634
|
+
|
|
635
|
+
/* #region One-column page outline + footer */
|
|
636
|
+
|
|
637
|
+
/* The overview and guide pages are single-column: they keep the section's
|
|
638
|
+
full-bleed gutter (content sits flush after the sidebar) but, unlike the
|
|
639
|
+
two-column operation pages, render the normal right-gutter outline. Since
|
|
640
|
+
their content is capped to `max-w-content` and left-aligned, the default
|
|
641
|
+
`right-0` outline would be pinned to the far viewport edge, so dock it
|
|
642
|
+
immediately to the right of the content. The `!important` is required because
|
|
643
|
+
the outline's `right-0` utility sits in a later cascade layer. */
|
|
644
|
+
@media (width >= 1376px) {
|
|
645
|
+
[data-v-content-width="full"]:has([data-v-openapi-landing], [data-v-openapi-guide]) [data-v-gutter-right] {
|
|
646
|
+
right: auto !important;
|
|
647
|
+
left: calc(var(--vocs-spacing-sidebar) + var(--vocs-spacing-content-px) + var(--vocs-spacing-content) + 2rem);
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/* Cap the page footer to the content width so it lines up with the content
|
|
652
|
+
above it instead of spanning the full-bleed width. */
|
|
653
|
+
[data-v-content-width="full"]:has([data-v-openapi-landing], [data-v-openapi-guide]) [data-v-content-footer] {
|
|
654
|
+
@apply vocs:max-w-content;
|
|
655
|
+
}
|
|
656
|
+
[data-v-content-width="full"]:has([data-v-openapi-landing], [data-v-openapi-guide]) [data-v-footer] {
|
|
657
|
+
@apply vocs:max-w-content!;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/* #endregion */
|
package/src/vite.ts
CHANGED