@redocly/openapi-docs 3.12.0 → 3.13.0-next.0

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.
@@ -6,7 +6,8 @@ export interface DropdownProps<T> {
6
6
  className?: string;
7
7
  triggerVariant?: 'ghost' | 'outlined';
8
8
  triggerSize?: string;
9
+ withSearch?: boolean;
9
10
  }
10
- declare function DropdownComponent<T>({ options, value, onChange, className, triggerVariant, triggerSize, }: DropdownProps<T>): import("react/jsx-runtime").JSX.Element;
11
+ declare function DropdownComponent<T>({ options, value, onChange, className, triggerVariant, triggerSize, withSearch, }: DropdownProps<T>): import("react/jsx-runtime").JSX.Element;
11
12
  export declare const Dropdown: typeof DropdownComponent;
12
13
  export {};
@@ -1,8 +1,8 @@
1
- import{jsx as n}from"react/jsx-runtime";import{Dropdown as d}from"@redocly/theme/components/Dropdown/Dropdown";import{CheckmarkIcon as c}from"@redocly/theme/icons/CheckmarkIcon/CheckmarkIcon";import{DropdownMenu as p}from"@redocly/theme/components/Dropdown/DropdownMenu";import{DropdownMenuItem as f}from"@redocly/theme/components/Dropdown/DropdownMenuItem";import{Button as g}from"@redocly/theme/components/Button/Button";import{typedMemo as h}from"@redocly/theme/core/openapi";import{styled as o}from"../../../styled-components.js";function u({options:r,value:t,onChange:a,className:l,triggerVariant:m="outlined",triggerSize:s="small"}){const i=r.find(e=>e.value===t)?.label;return r.length===1?n(b,{children:i}):n(d,{className:l,trigger:n(g,{variant:m,size:s,type:"button",children:i}),withArrow:!0,children:n(p,{children:r.map(e=>n(w,{active:e.value===t,onAction:()=>a(e),suffix:e.value===t&&n(v,{}),children:e.label},e.label))})})}const C=h(u),v=o(c)`
1
+ import{jsx as r,Fragment as p,jsxs as w}from"react/jsx-runtime";import{useMemo as y,useState as S}from"react";import{Dropdown as k}from"@redocly/theme/components/Dropdown/Dropdown";import{CheckmarkIcon as C}from"@redocly/theme/icons/CheckmarkIcon/CheckmarkIcon";import{DropdownMenu as D}from"@redocly/theme/components/Dropdown/DropdownMenu";import{DropdownMenuItem as I}from"@redocly/theme/components/Dropdown/DropdownMenuItem";import{Button as j}from"@redocly/theme/components/Button/Button";import{SearchIcon as z}from"@redocly/theme/icons/SearchIcon/SearchIcon";import{typedMemo as M}from"@redocly/theme/core/openapi";import{styled as n}from"../../../styled-components.js";import{useTranslate as N}from"../../../hooks/index.js";function A({options:o,value:t,onChange:l,className:f,triggerVariant:g="outlined",triggerSize:u="small",withSearch:v=!1}){const[i,s]=S(""),c=N(),d=o.find(e=>e.value===t)?.label,h=y(()=>o.filter(e=>e.label?.toLowerCase().includes(i.toLowerCase())??!1),[o,i]);if(o.length===1)return r(R,{children:d});const x=e=>{s(e.target.value)},b=()=>v?w(p,{children:[r(L,{prefix:r(_,{children:r(z,{color:"var(--icon-color-additional)",onClick:e=>e.stopPropagation()})}),content:r(F,{placeholder:c("openapi.discriminator.searchPlaceholder","Search items"),onClick:e=>e.stopPropagation(),onChange:x,value:i})}),r(T,{children:h.length?h.map(e=>r(a,{active:e.value===t,onAction:()=>l(e),suffix:e.value===t&&r(m,{}),children:e.label},e.label)):r(P,{content:c("openapi.discriminator.searchNoResults","No items found")})})]}):r(p,{children:o.map(e=>r(a,{active:e.value===t,onAction:()=>l(e),suffix:e.value===t&&r(m,{}),children:e.label},e.label))});return r(k,{className:f,trigger:r(j,{variant:g,size:u,type:"button",children:d}),withArrow:!0,onClose:()=>s(""),children:r(D,{children:b()})})}const U=M(A),m=n(C)`
2
2
  width: 16px;
3
3
  height: 16px;
4
4
  margin-left: auto;
5
- `,w=o(f)`
5
+ `,a=n(I)`
6
6
  --dropdown-menu-item-justify-content: space-between;
7
7
 
8
8
  width: 100%;
@@ -12,7 +12,46 @@ import{jsx as n}from"react/jsx-runtime";import{Dropdown as d}from"@redocly/theme
12
12
  padding: var(--spacing-xxs) var(--spacing-sm);
13
13
  font-size: var(--font-size-base);
14
14
  line-height: var(--line-height-base);
15
- `,b=o.span`
15
+ `,L=n(a)`
16
+ gap: 0;
17
+ padding: var(--spacing-xxs) var(--spacing-xs);
18
+ &:hover {
19
+ background-color: transparent;
20
+ }
21
+ `,P=n(a)`
22
+ height: 66px;
23
+ justify-content: center;
24
+ &:hover,
25
+ &:focus-visible {
26
+ background-color: transparent;
27
+ }
28
+ `,T=n.div`
29
+ overflow-y: auto;
30
+ max-height: 300px;
31
+ `,_=n.div`
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ width: 24px;
36
+ height: 24px;
37
+ cursor: pointer;
38
+ flex-shrink: 0;
39
+ `,F=n.input`
40
+ width: 100%;
41
+ border: none;
42
+ outline: none;
43
+ background: transparent;
44
+ color: var(--text-color-primary);
45
+ font-size: var(--font-size-base);
46
+ line-height: var(--line-height-base);
47
+ font-family: var(--font-family-base);
48
+ padding: 0;
49
+ margin-left: var(--spacing-xxs);
50
+
51
+ &::placeholder {
52
+ color: var(--search-trigger-color);
53
+ }
54
+ `,R=n.span`
16
55
  margin-right: var(--spacing-unit);
17
56
  cursor: default;
18
57
  background: none;
@@ -23,4 +62,4 @@ import{jsx as n}from"react/jsx-runtime";import{Dropdown as d}from"@redocly/theme
23
62
  line-height: var(--line-height-lg);
24
63
  font-family: var(--font-family-base);
25
64
  font-weight: var(--font-weight-regular);
26
- `;export{C as Dropdown};
65
+ `;export{U as Dropdown};
@@ -1 +1 @@
1
- import{jsx as m}from"react/jsx-runtime";import{useCallback as E,useEffect as I,useRef as T,useState as g}from"react";import{useAtom as h}from"jotai";import{Segmented as w}from"@redocly/theme/components/Segmented/Segmented";import{isUndefined as x}from"@redocly/theme/core/openapi";import{Dropdown as y}from"../Dropdown/index.js";import{operationStore as A}from"../../../jotai/operation.js";const b=5;function z({options:t,onChange:r,pointer:u,schema:n,defaultOneOfIdx:d}){const[p,c]=h(A(u)),S=p.activeOneOf[n.pointer]??d,o=t[S]?.value,[i,O]=g(!1),s=T(null);I(()=>{if(!s.current)return;const e=()=>{const v=s.current?.querySelectorAll('button[role="tab"]'),a=Array.from(v||[]).some(l=>l.offsetWidth<l.scrollWidth);a!==i&&O(a)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[i,t]);const f=E(({value:e})=>{e!==void 0&&(r?r(e):c({activeExampleName:n.oneOf?.[e]?.title,activeOneOf:{[n.pointer]:e},requestValues:{body:null}}))},[r,n.oneOf,n.pointer,c]);return x(o)?null:t.length>b||i?m(y,{options:t,value:o,onChange:f}):m(w,{ref:s,value:o,onChange:f,options:t,size:"small","data-testid":"segmented-schema"})}const D=z;export{D as SchemaSelection};
1
+ import{jsx as m}from"react/jsx-runtime";import{useCallback as h,useEffect as v,useRef as A,useState as T}from"react";import{useAtom as g}from"jotai";import{Segmented as w}from"@redocly/theme/components/Segmented/Segmented";import{isUndefined as I}from"@redocly/theme/core/openapi";import{Dropdown as x}from"../Dropdown/index.js";import{operationStore as y}from"../../../jotai/operation.js";const L=5,R=7;function _({options:t,onChange:r,pointer:u,schema:n,defaultOneOfIdx:d}){const[S,c]=g(y(u)),p=S.activeOneOf[n.pointer]??d,o=t[p]?.value,[i,E]=T(!1),s=A(null);v(()=>{if(!s.current)return;const e=()=>{const O=s.current?.querySelectorAll('button[role="tab"]'),a=Array.from(O||[]).some(l=>l.offsetWidth<l.scrollWidth);a!==i&&E(a)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[i,t]);const f=h(({value:e})=>{e!==void 0&&(r?r(e):c({activeExampleName:n.oneOf?.[e]?.title,activeOneOf:{[n.pointer]:e},requestValues:{body:null}}))},[r,n.oneOf,n.pointer,c]);return I(o)?null:t.length>L||i?m(x,{options:t,value:o,withSearch:t.length>=R,onChange:f}):m(w,{ref:s,value:o,onChange:f,options:t,size:"small","data-testid":"segmented-schema"})}const k=_;export{k as SchemaSelection};
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as y}from"@redocly/config";import{removeLeadingSlash as b}from"@redocly/theme/core/openapi";import{configure as v}from"@redocly/theme/ext/configure";import{extractExtensions as x,getOperationId as R,getOperationName as q,getStatusCodeType as P,getValueFromMdParsedExtension as B,isStatusCode as E,JsonPointer as C,mergeParams as k,normalizeServers as o,sortByDeprecated as V,sortByRequired as I,updateOperationWithRequestValues as O,updateParametersWithUserValues as N}from"../utils/index.js";import{getCallback as W}from"./callback.js";import{getField as w}from"./field.js";import{getRequestBody as A}from"./request.js";import{getSecurity as S}from"./security.js";import{getResponse as F}from"./response.js";import{getHref as M}from"../services/menu/operation.js";function Z(s){return s.lang==="Payload"&&"requestBodyContent"in s}function $(s,e,t,a,m,d,c){const h=e.isWebhook,r={operationDefinition:e,parent:t,pointer:e.pointer,description:B(e,"description"),externalDocs:e.externalDocs,deprecated:!!e.deprecated,httpVerb:e.httpVerb,operationId:e.operationId,path:e.pathName,isWebhook:h,isCallback:!!d?.isCallback,isEvent:d?.isCallback||h,name:q(e),defaultExampleName:e.defaultSampleName,[y]:e[y]||t?.[y],type:"operation",callbackId:d?.id,href:m,get callbacks(){return Object.keys(e.callbacks||[]).map(u=>W(s,u,e.callbacks?.[u],r.pointer,a,m,t,c))},get responses(){let u=!1;return Object.keys(e.responses||[]).filter(l=>l==="default"?!0:(P(l)==="success"&&(u=!0),E(l))).map(l=>F({parser:s,code:l,defaultAsError:u,infoOrRef:e.responses[l],options:a,isEvent:r.isEvent,operation:r}))},get parameters(){return j(s,e,r,a,g)}};if(d?.isCallback)r.security=S(e.security,s),r.servers=o("",e.servers||e.pathServers||[]),r.id=b(m);else{r.id=R(e,t),r.href=r.href||M(r),r.security=S(e.security||s.definition.security,s);const u=e.servers||(e.pathServers?.length?e.pathServers:null)||s.definition.servers||[];r.servers=o(s.definitionUrl,L(u,a.mockServer))}a.showExtensions&&(r.extensions=x(e,a.showExtensions)),r.requestBody=e.requestBody?A({parser:s,infoOrRef:e.requestBody,options:a,operation:r,isEvent:r.isEvent}):void 0;const p=r.requestBody?.content;r.payload={lang:"Payload",source:"",requestBodyContent:p?.hasSample?p:void 0},r.definitionSamples=e["x-codeSamples"]||[],r.badges=e["x-badges"]?.map(({name:u,color:l,position:n})=>({name:u,color:l||"var(--color-info-base)",position:n||"after"}))||[],r.hasSamples=p?.hasSample||r.definitionSamples.length>0,r.hideReplay=e["x-hideReplay"]===!0;const f={userClaims:c,operation:{operationId:r.operationId,name:r.name,path:r.path,href:r.href,method:r.httpVerb},servers:r.servers},g=(v(f)||{}).requestValues||{};return O(r,g),r}function j(s,e,t,a,m){let d=k(s,e.pathParameters,e.parameters,{pathPointer:C.dirName(t.pointer),operationPointer:t.pointer}).map(({paramOrRef:c,pointer:h})=>{const r=w(s,c,h,a,{operation:t,type:"request"});return N(r,m),r});return a.sortRequiredPropsFirst&&(d=I(d)),V(d)}function L(s,e){if(!e)return s;const t={url:e.url,description:e.description};switch(e.position){case"first":return[t,...s];case"last":return[...s,t];case"replace":return[t];default:return s}}export{$ as getOperation,Z as isPayloadSample,L as mergeInMockServer};
1
+ import{REDOCLY_TEAMS_RBAC as y}from"@redocly/config";import{removeLeadingSlash as b}from"@redocly/theme/core/openapi";import{configure as v}from"@redocly/theme/ext/configure";import{extractExtensions as x,getOperationId as R,getOperationName as q,getStatusCodeType as P,getValueFromMdParsedExtension as B,isStatusCode as E,JsonPointer as C,mergeParams as k,normalizeServers as o,sortByDeprecated as V,sortByRequired as I,updateOperationWithRequestValues as O,updateParametersWithUserValues as N}from"../utils/index.js";import{getCallback as W}from"./callback.js";import{getField as w}from"./field.js";import{getRequestBody as A}from"./request.js";import{getSecurity as f}from"./security.js";import{getResponse as F}from"./response.js";import{getHref as M}from"../services/menu/operation.js";function Z(s){return s.lang==="Payload"&&"requestBodyContent"in s}function $(s,e,t,a,m,d,c){const h=e.isWebhook,r={operationDefinition:e,parent:t,pointer:e.pointer,description:B(e,"description"),externalDocs:e.externalDocs,deprecated:!!e.deprecated,httpVerb:e.httpVerb,operationId:e.operationId,path:e.pathName,isWebhook:h,isCallback:!!d?.isCallback,isEvent:d?.isCallback||h,name:q(e),defaultExampleName:e.defaultSampleName,[y]:e[y]||t?.[y],type:"operation",callbackId:d?.id,href:m,get callbacks(){return Object.keys(e.callbacks||[]).map(u=>W(s,u,e.callbacks?.[u],r.pointer,a,m,t,c))},get responses(){let u=!1;return Object.keys(e.responses||[]).filter(l=>l==="default"?!0:(P(l)==="success"&&(u=!0),E(l))).map(l=>F({parser:s,code:l,defaultAsError:u,infoOrRef:e.responses[l],options:a,isEvent:r.isEvent,operation:r}))},get parameters(){return j(s,e,r,a,g)}};if(d?.isCallback)r.security=f(e.security,s),r.servers=o("",e.servers||e.pathServers||[]),r.id=b(m);else{r.id=R(e,t),r.href=r.href||M(r),r.security=f(e.security||s.definition.security,s);const u=e.servers||(e.pathServers?.length?e.pathServers:null)||s.definition.servers||[];r.servers=o(s.definitionUrl,L(u,a.mockServer))}a.showExtensions&&(r.extensions=x(e,a.showExtensions)),r.requestBody=e.requestBody?A({parser:s,infoOrRef:e.requestBody,options:a,operation:r,isEvent:r.isEvent}):void 0;const p=r.requestBody?.content;r.payload={lang:"Payload",source:"",requestBodyContent:p?.hasSample?p:void 0},r.definitionSamples=e["x-codeSamples"]||[],r.badges=e["x-badges"]?.map(({name:u,color:l,position:S})=>({name:u,color:l||"var(--color-info-base)",position:S||"after"}))||[],r.hasSamples=p?.hasSample||r.definitionSamples.length>0,r.hideReplay=e["x-hideReplay"]===!0;const n={userClaims:c,info:s.definition.info||{},operation:{operationId:r.operationId,name:r.name,path:r.path,href:r.href,method:r.httpVerb},servers:r.servers},g=(v(n)||{}).requestValues||{};return O(r,g),r}function j(s,e,t,a,m){let d=k(s,e.pathParameters,e.parameters,{pathPointer:C.dirName(t.pointer),operationPointer:t.pointer}).map(({paramOrRef:c,pointer:h})=>{const r=w(s,c,h,a,{operation:t,type:"request"});return N(r,m),r});return a.sortRequiredPropsFirst&&(d=I(d)),V(d)}function L(s,e){if(!e)return s;const t={url:e.url,description:e.description};switch(e.position){case"first":return[t,...s];case"last":return[...s,t];case"replace":return[t];default:return s}}export{$ as getOperation,Z as isPayloadSample,L as mergeInMockServer};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.12.0",
3
+ "version": "3.13.0-next.0",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -14,7 +14,7 @@
14
14
  "npm": ">=10.0.0"
15
15
  },
16
16
  "peerDependencies": {
17
- "@redocly/theme": ">=0.56.0-next.0",
17
+ "@redocly/theme": ">=0.57.0-next.0",
18
18
  "react": "^19.1.0",
19
19
  "react-dom": "^19.1.0",
20
20
  "styled-components": "^4.1.1 || ^5.3.11 || ^6.0.0"
@@ -36,8 +36,8 @@
36
36
  "url-template": "^2.0.8",
37
37
  "util": "~0.12.5",
38
38
  "web-vitals": "3.3.1",
39
- "@redocly/replay": "0.15.0",
40
- "@redocly/config": "0.28.0"
39
+ "@redocly/config": "0.28.0",
40
+ "@redocly/replay": "0.16.0-next.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@jest/globals": "29.5.0",
@@ -74,7 +74,7 @@
74
74
  "typescript": "5.6.2",
75
75
  "url": "~0.11.0",
76
76
  "vite": "^6.3.5",
77
- "@redocly/theme": "0.56.0"
77
+ "@redocly/theme": "0.57.0-next.0"
78
78
  },
79
79
  "scripts": {
80
80
  "start": "npm run copy-highlight-hook && vite",