@redocly/openapi-docs 3.13.0-next.5 → 3.13.0-next.6

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.
@@ -1,4 +1,4 @@
1
- import{jsx as e,Fragment as m,jsxs as s}from"react/jsx-runtime";import{memo as p,useCallback as f}from"react";import{DownloadIcon as x}from"@redocly/theme/icons/DownloadIcon/DownloadIcon";import{getPathPrefix as w,combineUrls as g}from"@redocly/theme/core/openapi";import{Button as b}from"@redocly/theme/components/Button/Button";import{DocumentIcon as h}from"@redocly/theme/icons/DocumentIcon/DocumentIcon";import{JsonIcon as u}from"@redocly/theme/icons/JsonIcon/JsonIcon";import{FileIcon as y}from"@redocly/theme/icons/FileIcon/FileIcon";import{useTelemetry as v}from"../../hooks/index.js";import{styled as r}from"../../styled-components.js";function k({downloadObjects:t}){const l=v(),n=w(),c=f(o=>{switch(o){case"yaml":return e(h,{});case"json":return e(u,{});default:return e(y,{})}},[]);return t?e(I,{children:(t||[]).map(({title:o,url:i,iconType:d})=>{const a=n?g(n,i):i;return s(_,{onClick:()=>l.send({type:"openapi_docs.download_definition.clicked"}),children:[s(j,{children:[c(d),e("a",{href:a,target:"_blank",download:!0,rel:"noreferrer",children:o})]}),e("a",{href:a,target:"_blank",download:!0,rel:"noreferrer",children:e(b,{variant:"text",size:"small",icon:e(x,{})})})]},o)})}):e(m,{})}const T=p(k),_=r.div`
1
+ import{jsx as e,Fragment as m,jsxs as s}from"react/jsx-runtime";import{memo as p,useCallback as f}from"react";import{DownloadIcon as x}from"@redocly/theme/icons/DownloadIcon/DownloadIcon";import{getPathPrefix as g,combineUrls as w}from"@redocly/theme/core/openapi";import{Button as u}from"@redocly/theme/components/Button/Button";import{DocumentIcon as b}from"@redocly/theme/icons/DocumentIcon/DocumentIcon";import{JsonIcon as h}from"@redocly/theme/icons/JsonIcon/JsonIcon";import{FileIcon as v}from"@redocly/theme/icons/FileIcon/FileIcon";import{useTelemetry as y}from"../../hooks/index.js";import{styled as r}from"../../styled-components.js";function k({downloadObjects:n}){const l=y(),t=g(),c=f(o=>{switch(o){case"yaml":return e(b,{});case"json":return e(h,{});default:return e(v,{})}},[]);return n?e(C,{children:(n||[]).map(({title:o,url:i,iconType:d})=>{const a=t?w(t,i):i;return s(D,{onClick:()=>{l.sendOpenapiDocsDownloadDefinitionClickedMessage(void 0)},children:[s(j,{children:[c(d),e("a",{href:a,target:"_blank",download:!0,rel:"noreferrer",children:o})]}),e("a",{href:a,target:"_blank",download:!0,rel:"noreferrer",children:e(u,{variant:"text",size:"small",icon:e(x,{})})})]},o)})}):e(m,{})}const N=p(k),D=r.div`
2
2
  display: flex;
3
3
  align-items: baseline;
4
4
  justify-content: space-between;
@@ -28,7 +28,7 @@ import{jsx as e,Fragment as m,jsxs as s}from"react/jsx-runtime";import{memo as p
28
28
  overflow: hidden;
29
29
  white-space: nowrap;
30
30
  }
31
- `,I=r.div`
31
+ `,C=r.div`
32
32
  display: flex;
33
33
  align-items: center;
34
34
  align-self: flex-start;
@@ -36,4 +36,4 @@ import{jsx as e,Fragment as m,jsxs as s}from"react/jsx-runtime";import{memo as p
36
36
  flex-direction: column;
37
37
  gap: var(--spacing-sm);
38
38
  font-size: var(--font-size-base);
39
- `;export{T as DownloadSpecification};
39
+ `;export{N as DownloadSpecification};
@@ -1,3 +1,3 @@
1
- import{jsx as n}from"react/jsx-runtime";import{useAtom as d}from"jotai";import{MaximizeIcon as m}from"@redocly/theme/icons/MaximizeIcon/MaximizeIcon";import{Button as c}from"@redocly/theme/components/Button/Button";import{operationStore as x}from"../../jotai/operation.js";import{useTelemetry as u,useTranslate as f}from"../../hooks/index.js";import{styled as A}from"../../styled-components.js";const j=({operationPointer:a,type:o,onPanelToggle:r})=>{const t=f(),[l,s]=d(x(a)),p=u(),i=()=>{const e=!l[o].expandedAll;p.send({type:"openapi_docs.expand_collapse_all.clicked",payload:{isExpanded:e}}),s({[o]:{expandedAll:e}}),r?.(e,o==="request"?"request":"responses")};return n(g,{icon:n(m,{}),iconPosition:"right",size:"small",variant:"ghost",onClick:i,children:l[o].expandedAll?t("openapi.collapseAll","Collapse all"):t("openapi.expandAll","Expand all")})},g=A(c)`
1
+ import{jsx as n}from"react/jsx-runtime";import{useAtom as m}from"jotai";import{MaximizeIcon as d}from"@redocly/theme/icons/MaximizeIcon/MaximizeIcon";import{Button as c}from"@redocly/theme/components/Button/Button";import{operationStore as x}from"../../jotai/operation.js";import{useTelemetry as u,useTranslate as f}from"../../hooks/index.js";import{styled as A}from"../../styled-components.js";const k=({operationPointer:a,type:e,onPanelToggle:s})=>{const t=f(),[l,r]=m(x(a)),i=u(),p=()=>{const o=!l[e].expandedAll;i.sendOpenapiDocsExpandCollapseAllClickedMessage({isExpanded:o}),r({[e]:{expandedAll:o}}),s?.(o,e==="request"?"request":"responses")};return n(g,{icon:n(d,{}),iconPosition:"right",size:"small",variant:"ghost",onClick:p,children:l[e].expandedAll?t("openapi.collapseAll","Collapse all"):t("openapi.expandAll","Expand all")})},g=A(c)`
2
2
  margin-left: auto;
3
- `;export{j as ExpandAllButton};
3
+ `;export{k as ExpandAllButton};
@@ -1 +1 @@
1
- import{jsx as a,jsxs as I}from"react/jsx-runtime";import{useLayoutEffect as T,useRef as A,useState as y,useCallback as _,memo as j,useMemo as E}from"react";import{useAtomValue as H,useSetAtom as S}from"jotai";import{Button as V}from"@redocly/theme/components/Button/Button";import{OverflowMenuVerticalIcon as W}from"@redocly/theme/icons/OverflowMenuVerticalIcon/OverflowMenuVerticalIcon";import{LanguageDropdown as v}from"./LanguageDropdown.js";import{languageAtom as D,layoutAtom as R}from"../../jotai/app.js";import{LanguageListContainer as M,LanguageListItem as O,Container as z}from"./styled.js";import{LanguageItem as G}from"./LanguageItem.js";import{DROPDOWN_TRIGGER_WIDTH as B,ITEM_WIDTH as L}from"./constants.js";import{LanguageListSkeleton as N}from"../common/Skeleton/LanguageListSkeleton.js";import{useTelemetry as P}from"../../hooks/index.js";function $({languages:o,activeLanguage:t}){const[n,i]=y([]),[s,l]=y([]),u=P(),d=A(null),f=H(R),h=S(D),p=e=>{u.send({type:"openapi_docs.select_language.clicked",payload:{language:e}})},k=e=>{h(e),p(e)},x=e=>{const m=s.findIndex(r=>r.key===e);if(m!==-1){const r=[...s],c=[...n];w(c,r,m),i(c),l(r),p(e),h(e)}},g=_(()=>{const e=d?.current?.offsetWidth;if(!e)return;const{newVisibleItems:m,newHiddenItems:r}=q(e,[...o]),c=r.findIndex(b=>b.key===t);c!==-1&&w(m,r,c),i(m),l(r)},[t,o]);T(()=>(g(),window.addEventListener("resize",g),()=>{window.removeEventListener("resize",g)}),[f,t]);const C=E(()=>n.length>=5||s.length?"space-between":"start",[s.length,n.length]);return I(z,{ref:d,children:[I(M,{$justifyContent:C,children:[!n.length&&a(N,{}),n.map(e=>a(O,{onClick:()=>k(e.key),active:t===e.key,children:a(G,{item:e,withIcon:!0})},e.key))]}),s.length?a(v,{activeTab:t,samples:s,onChange:x,trigger:a(V,{icon:a(W,{}),variant:"text",style:{height:"100%"}}),withArrow:!1,withCheckmark:!1,width:156}):null]})}const se=j($);function q(o,t){let n=0;const i=[],s=[];return t.forEach((l,u)=>{const f=u===t.length-1&&s.length===0?0:B;o&&n+L+f<=o?(i.push(l),n+=L):s.push(l)}),{newVisibleItems:i,newHiddenItems:s}}function w(o,t,n){const i=o[o.length-1];i&&(o[o.length-1]=t[n],t[n]=i)}export{se as LanguageList};
1
+ import{jsx as a,jsxs as I}from"react/jsx-runtime";import{useLayoutEffect as T,useRef as A,useState as L,useCallback as S,memo as j,useMemo as D}from"react";import{useAtomValue as E,useSetAtom as H}from"jotai";import{Button as V}from"@redocly/theme/components/Button/Button";import{OverflowMenuVerticalIcon as W}from"@redocly/theme/icons/OverflowMenuVerticalIcon/OverflowMenuVerticalIcon";import{LanguageDropdown as v}from"./LanguageDropdown.js";import{languageAtom as R,layoutAtom as _}from"../../jotai/app.js";import{LanguageListContainer as M,LanguageListItem as O,Container as z}from"./styled.js";import{LanguageItem as G}from"./LanguageItem.js";import{DROPDOWN_TRIGGER_WIDTH as B,ITEM_WIDTH as w}from"./constants.js";import{LanguageListSkeleton as N}from"../common/Skeleton/LanguageListSkeleton.js";import{useTelemetry as P}from"../../hooks/index.js";function $({languages:o,activeLanguage:t}){const[n,i]=L([]),[s,l]=L([]),u=P(),f=A(null),g=E(_),h=H(R),p=e=>{u.sendOpenapiDocsSelectLanguageClickedMessage({language:e})},k=e=>{h(e),p(e)},C=e=>{const m=s.findIndex(r=>r.key===e);if(m!==-1){const r=[...s],c=[...n];y(c,r,m),i(c),l(r),p(e),h(e)}},d=S(()=>{const e=f?.current?.offsetWidth;if(!e)return;const{newVisibleItems:m,newHiddenItems:r}=q(e,[...o]),c=r.findIndex(b=>b.key===t);c!==-1&&y(m,r,c),i(m),l(r)},[t,o]);T(()=>(d(),window.addEventListener("resize",d),()=>{window.removeEventListener("resize",d)}),[g,t]);const x=D(()=>n.length>=5||s.length?"space-between":"start",[s.length,n.length]);return I(z,{ref:f,children:[I(M,{$justifyContent:x,children:[!n.length&&a(N,{}),n.map(e=>a(O,{onClick:()=>k(e.key),active:t===e.key,children:a(G,{item:e,withIcon:!0})},e.key))]}),s.length?a(v,{activeTab:t,samples:s,onChange:C,trigger:a(V,{icon:a(W,{}),variant:"text",style:{height:"100%"}}),withArrow:!1,withCheckmark:!1,width:156}):null]})}const se=j($);function q(o,t){let n=0;const i=[],s=[];return t.forEach((l,u)=>{const g=u===t.length-1&&s.length===0?0:B;o&&n+w+g<=o?(i.push(l),n+=w):s.push(l)}),{newVisibleItems:i,newHiddenItems:s}}function y(o,t,n){const i=o[o.length-1];i&&(o[o.length-1]=t[n],t[n]=i)}export{se as LanguageList};
@@ -1 +1 @@
1
- import{jsx as d}from"react/jsx-runtime";import{memo as v,useCallback as b,useEffect as g,useMemo as y}from"react";import S from"@markdoc/markdoc";import{LayoutVariant as O}from"@redocly/config";import{createStore as E,Provider as A}from"jotai";import{html as N}from"@redocly/theme/markdoc/tags/html";import{Heading as D}from"@redocly/theme/markdoc/components/Heading/Heading";import{normalizeOptions as j,OpenAPIParser as k}from"../../services/index.js";import{SchemaDefinition as x}from"../SchemaDefinition/index.js";import{getMarkdownHeaderId as C}from"./utils.js";import{mergeInMockServer as P}from"../../models/operation.js";import{normalizeServers as M}from"../../utils/index.js";import{appStore as H,appStoreOverrideAtom as I,layoutAtom as p,environmentAtom as L,userClaimsAtom as R}from"../../jotai/app.js";import{mapObject as T}from"../../utils/object.js";import{getServerEnvName as V}from"../../utils/environments.js";import{globalStoreAtom as h}from"../../jotai/store.js";import{getDefaultOperationStore as z,operationStore as _}from"../../jotai/operation.js";const q={ignoreNamedSchemas:["java.io.ObjectStreamField"],maxDisplayedEnumValues:10,markdocOptions:{tags:{html:N.schema,schemaDefinition:{render:"SchemaDefinition",attributes:{schemaRef:{type:String},exampleRef:{type:String},showReadOnly:{type:Boolean},showWriteOnly:{type:Boolean},htmlWrap:{type:String,default:!1}}}},nodes:{heading:{children:["inline"],attributes:{id:{type:String},level:{type:Number,required:!0,default:1}},transform(n,i){const t=n.transformAttributes(i),m=n.transformChildren(i),e=typeof t.id=="string"?t.id:C(m);return new S.Tag("Heading",{...t,id:e,level:n.attributes.level},m)}}},components:{SchemaDefinition:x,Heading:D}}},ne=v(({children:n,options:i,definitionUrl:t,definition:m,withState:e})=>{const l=b(()=>{const r=j(i,q),o=new k(m,t,r);return{options:r,parser:o}},[m,t,i]),a=y(()=>{const r=E(),o=l();r.set(h,o);const f=M(o.parser.definitionUrl,P(o.parser.definition?.servers||[],o.options.mockServer));r.sub(H,()=>{}),r.set(p,o.options?.layout||O.THREE_PANEL);const u=Object.fromEntries(f.map(s=>[V(s),{server:s.url,...T(s.variables||{},c=>c.default||"")}]));if(r.set(L,{environments:u}),r.set(R,e?.userClaims||{}),e&&r.set(I,{activeMimeName:e.activeMimeName,userClaims:e.userClaims,environment:e.environment,environments:e.environments}),e?.operation){const s=z(e.operation.pointer,e.operation.state.requestValues,e.operation.state.activeExampleName);r.set(_(e.operation.pointer),s)}return r},[l,e]);return g(()=>{e?.layout&&a.set(p,e?.layout)},[a,e?.layout]),d(A,{store:a,children:n})});export{ne as StoreProvider};
1
+ import{jsx as d}from"react/jsx-runtime";import{memo as v,useCallback as b,useEffect as g,useMemo as y}from"react";import E from"@markdoc/markdoc";import{LayoutVariant as O}from"@redocly/config";import{createStore as S,Provider as A}from"jotai";import{html as N}from"@redocly/theme/markdoc/tags/html";import{Heading as D}from"@redocly/theme/markdoc/components/Heading/Heading";import{normalizeOptions as j,OpenAPIParser as k}from"../../services/index.js";import{SchemaDefinition as x}from"../SchemaDefinition/index.js";import{getMarkdownHeaderId as C}from"./utils.js";import{mergeInMockServer as P}from"../../models/operation.js";import{normalizeServers as M}from"../../utils/index.js";import{appStore as H,appStoreOverrideAtom as I,layoutAtom as p,allowedEnvironmentsAtom as L,environmentAtom as R,userClaimsAtom as T}from"../../jotai/app.js";import{mapObject as V}from"../../utils/object.js";import{getServerEnvName as z}from"../../utils/environments.js";import{globalStoreAtom as _}from"../../jotai/store.js";import{getDefaultOperationStore as h,operationStore as q}from"../../jotai/operation.js";const B={ignoreNamedSchemas:["java.io.ObjectStreamField"],maxDisplayedEnumValues:10,markdocOptions:{tags:{html:N.schema,schemaDefinition:{render:"SchemaDefinition",attributes:{schemaRef:{type:String},exampleRef:{type:String},showReadOnly:{type:Boolean},showWriteOnly:{type:Boolean},htmlWrap:{type:String,default:!1}}}},nodes:{heading:{children:["inline"],attributes:{id:{type:String},level:{type:Number,required:!0,default:1}},transform(n,m){const t=n.transformAttributes(m),i=n.transformChildren(m),e=typeof t.id=="string"?t.id:C(i);return new E.Tag("Heading",{...t,id:e,level:n.attributes.level},i)}}},components:{SchemaDefinition:x,Heading:D}}},me=v(({children:n,options:m,definitionUrl:t,definition:i,withState:e})=>{const l=b(()=>{const r=j(m,B),o=new k(i,t,r);return{options:r,parser:o}},[i,t,m]),a=y(()=>{const r=S(),o=l();r.set(_,o);const f=M(o.parser.definitionUrl,P(o.parser.definition?.servers||[],o.options.mockServer));r.sub(H,()=>{}),r.set(p,o.options?.layout||O.THREE_PANEL);const u=Object.fromEntries(f.map(s=>[z(s),{server:s.url,...V(s.variables||{},c=>c.default||"")}]));if(r.set(R,{environments:u}),r.set(T,e?.userClaims||{}),r.set(L,e?.allowedEnvironments),e&&r.set(I,{activeMimeName:e.activeMimeName,userClaims:e.userClaims,environment:e.environment,environments:e.environments}),e?.operation){const s=h(e.operation.pointer,e.operation.state.requestValues,e.operation.state.activeExampleName);r.set(q(e.operation.pointer),s)}return r},[l,e]);return g(()=>{e?.layout&&a.set(p,e?.layout)},[a,e?.layout]),d(A,{store:a,children:n})});export{me as StoreProvider};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as s,Fragment as E}from"react/jsx-runtime";import{memo as O,useRef as T}from"react";import{LayoutVariant as f}from"@redocly/config";import{useSetAtom as w}from"jotai";import{ThreePanelLayout as A}from"@redocly/theme/layouts/ThreePanelLayout";import{SidebarLogo as _}from"@redocly/theme/components/SidebarLogo/SidebarLogo";import{GlobalStyle as I,useMount as j}from"@redocly/theme/core/openapi";import{StoreProvider as N}from"./Providers.js";import{Overlay as v}from"../Overlay.js";import{RedocWrap as D}from"./styled.js";import{StickyResponsiveSidebar as k}from"../StickySidebar/index.js";import{SideMenu as B}from"../SideMenu/index.js";import{Content as K}from"../Content/index.js";import{useContentItems as M,useUppercase2LowercaseRedirect as V,useTelemetry as F,usePerformanceMetrics as H}from"../../hooks/index.js";import{withRouter as U}from"../../hoc/withRouter.js";import{withStore as Y}from"../../hoc/withStore.js";import{compose as G}from"../../utils/index.js";import{useLicense as W}from"../../hooks/useLicense.js";import{allOperationsAtom as q}from"../../jotai/replay.js";const z=G(U,Y,O)(({licenseKey:m,onLoaded:a,children:e,options:t,layout:i,collapsedSidebar:d,parser:c,withCommonStyles:h})=>{const b=T(null),{isValid:l,licenseInfo:R}=W(m),S=w(q),u=F();V();const{contentItems:y,flatItems:g}=M({parser:c,options:t});H({sendTelemetry:p=>{const r=Object.fromEntries(Object.entries(p).map(([x,C])=>[x.toLowerCase(),C]));u.send({type:"openapi_docs.performance_metrics",payload:{cls:r.cls,lcp:r.lcp,fcp:r.fcp,ttfb:r.ttfb}})}}),j(()=>{if(a?.(),u.send({type:"openapi_docs.viewed",payload:{layout:i}}),!t.hideReplay){const p=g.filter(r=>r.type==="operation");S(p)}});const{hideSidebar:L,scrollYOffset:P}=t||{},n=c.definition?.info?.["x-logo"];return s(E,{children:[h&&o(I,{}),s(D,{className:"redoc-wrap",ref:b,children:[!l&&o(v,{licenseInfo:R}),!L&&s(k,{scrollYOffset:P,className:"menu-content",collapsedSidebar:!d,children:[o(_,{imageUrl:n?.url,href:n?.href||c.definition?.info?.contact?.url,altText:n?.altText,backgroundColor:n?.backgroundColor}),o(B,{items:l?y:[]})]}),s(A,{className:"api-content",id:"api-content",layout:i===f.THREE_PANEL?f.THREE_PANEL:f.STACKED,collapsedSidebar:d,children:[o(K,{items:l?y:[],routingBasePath:t.routingBasePath}),e]})]})]})});function ue({onLoaded:m,children:a,store:e,withCommonStyles:t,router:i}){return e?.definition?o(N,{...e,children:o(z,{onLoaded:m,basePath:e.options?.routingBasePath,licenseKey:e.options?.licenseKey,disableRouter:e.options?.disableRouter,withCommonStyles:t,router:i,children:a})}):null}export{ue as RedoclyOpenAPIDocs};
1
+ import{jsx as o,jsxs as s,Fragment as C}from"react/jsx-runtime";import{memo as E,useRef as T}from"react";import{LayoutVariant as p}from"@redocly/config";import{useSetAtom as w}from"jotai";import{ThreePanelLayout as A}from"@redocly/theme/layouts/ThreePanelLayout";import{SidebarLogo as I}from"@redocly/theme/components/SidebarLogo/SidebarLogo";import{GlobalStyle as j,useMount as D}from"@redocly/theme/core/openapi";import{StoreProvider as M}from"./Providers.js";import{Overlay as N}from"../Overlay.js";import{RedocWrap as _}from"./styled.js";import{StickyResponsiveSidebar as V}from"../StickySidebar/index.js";import{SideMenu as k}from"../SideMenu/index.js";import{Content as v}from"../Content/index.js";import{useContentItems as B,useUppercase2LowercaseRedirect as K,useTelemetry as F,usePerformanceMetrics as H}from"../../hooks/index.js";import{withRouter as U}from"../../hoc/withRouter.js";import{withStore as Y}from"../../hoc/withStore.js";import{compose as G}from"../../utils/index.js";import{useLicense as W}from"../../hooks/useLicense.js";import{allOperationsAtom as q}from"../../jotai/replay.js";const z=G(U,Y,E)(({licenseKey:m,onLoaded:a,children:e,options:t,layout:i,collapsedSidebar:d,parser:c,withCommonStyles:y})=>{const b=T(null),{isValid:l,licenseInfo:g}=W(m),R=w(q),u=F();K();const{contentItems:h,flatItems:S}=B({parser:c,options:t});H({sendTelemetry:f=>{const r=Object.fromEntries(Object.entries(f).map(([O,x])=>[O.toLowerCase(),x]));u.sendOpenapiDocsPerformanceMetricsMessage({cls:r.cls,lcp:r.lcp,fcp:r.fcp,ttfb:r.ttfb})}}),D(()=>{if(a?.(),u.sendOpenapiDocsViewedMessage({layout:i}),!t.hideReplay){const f=S.filter(r=>r.type==="operation");R(f)}});const{hideSidebar:P,scrollYOffset:L}=t||{},n=c.definition?.info?.["x-logo"];return s(C,{children:[y&&o(j,{}),s(_,{className:"redoc-wrap",ref:b,children:[!l&&o(N,{licenseInfo:g}),!P&&s(V,{scrollYOffset:L,className:"menu-content",collapsedSidebar:!d,children:[o(I,{imageUrl:n?.url,href:n?.href||c.definition?.info?.contact?.url,altText:n?.altText,backgroundColor:n?.backgroundColor}),o(k,{items:l?h:[]})]}),s(A,{className:"api-content",id:"api-content",layout:i===p.THREE_PANEL?p.THREE_PANEL:p.STACKED,collapsedSidebar:d,children:[o(v,{items:l?h:[],routingBasePath:t.routingBasePath}),e]})]})]})});function ue({onLoaded:m,children:a,store:e,withCommonStyles:t,router:i}){return e?.definition?o(M,{...e,children:o(z,{onLoaded:m,basePath:e.options?.routingBasePath,licenseKey:e.options?.licenseKey,disableRouter:e.options?.disableRouter,withCommonStyles:t,router:i,children:a})}):null}export{ue as RedoclyOpenAPIDocs};
@@ -18,6 +18,7 @@ export interface StoreProviderProps {
18
18
  environment?: string;
19
19
  activeMimeName?: string;
20
20
  environments?: Record<string, Record<string, string>>;
21
+ allowedEnvironments?: string[] | null;
21
22
  layout?: LayoutVariant;
22
23
  userClaims?: UserClaims;
23
24
  operation?: {
@@ -1,10 +1,10 @@
1
- import{jsx as e}from"react/jsx-runtime";import{Suspense as b,lazy as h,memo as S,useEffect as x,useState as E}from"react";import{useAtomValue as o}from"jotai";import{globalOptionsAtom as O}from"../../jotai/store.js";import{operationStore as R}from"../../jotai/operation.js";import{appStore as C,environmentsAtom as L}from"../../jotai/app.js";import{useTranslate as T}from"../../hooks/index.js";import{convertOperationToReplayValue as V}from"./utils.js";import{getDefaultCollectorUrl as j}from"../../utils/telemetry.js";import{styled as i}from"../../styled-components.js";const A=h(async()=>import("@redocly/replay").then(r=>({default:r.EmbeddedReplay})));function k({activeOperationId:r,corsProxyUrl:d,fullOpenApi:l,pointer:t}){const n=T(),{mockServer:m}=o(O),s=o(R(t)),a=o(C),c=o(L),[f,u]=E(!1);return x(()=>{u(!0)},[]),e(U,{children:f?e(b,{fallback:e(p,{children:n("openapi.loading","Loading...")}),children:e(A,{activeOperationId:r,activeOperationPointer:t,api:l,settings:{environment:a.environment,predefinedEnvValues:c,corsProxyUrl:d,mockServer:m,disableCollectionsTab:!0,telemetry:{tracerName:"replay-openapi",collectorUrl:j()},convertOperationToReplayValue:(v,y,g)=>V(v,y,g,void 0,s,a)}})}):e(p,{children:n("openapi.loading","Loading...")})})}const F=S(k),p=i.div`
1
+ import{jsx as e}from"react/jsx-runtime";import{Suspense as E,lazy as h,memo as S,useEffect as x,useState as O}from"react";import{useAtomValue as o}from"jotai";import{globalOptionsAtom as R}from"../../jotai/store.js";import{operationStore as A}from"../../jotai/operation.js";import{appStore as C,allowedEnvironmentsAtom as L,environmentsAtom as T}from"../../jotai/app.js";import{useTranslate as V}from"../../hooks/index.js";import{convertOperationToReplayValue as j}from"./utils.js";import{getDefaultCollectorUrl as k}from"../../utils/telemetry.js";import{styled as i}from"../../styled-components.js";const w=h(async()=>import("@redocly/replay").then(t=>({default:t.EmbeddedReplay})));function U({activeOperationId:t,corsProxyUrl:p,fullOpenApi:d,pointer:r}){const a=V(),{mockServer:m}=o(R),s=o(A(r)),c=o(C),f=o(T),n=o(L),[u,v]=O(!1);return x(()=>{v(!0)},[]),e(W,{children:u?e(E,{fallback:e(l,{children:a("openapi.loading","Loading...")}),children:e(w,{activeOperationId:t,activeOperationPointer:r,api:d,settings:{predefinedEnvValues:f,corsProxyUrl:p,mockServer:m,disableCollectionsTab:!0,...n&&{allowedEnvironments:n},telemetry:{tracerName:"replay-openapi",collectorUrl:k()},convertOperationToReplayValue:(y,g,b)=>j(y,g,b,void 0,s,c)}})}):e(l,{children:a("openapi.loading","Loading...")})})}const H=S(U),l=i.div`
2
2
  display: flex;
3
3
  justify-content: center;
4
4
  align-items: center;
5
5
  min-height: 100px;
6
- `,U=i.div`
6
+ `,W=i.div`
7
7
  border: 1px solid var(--border-color-primary);
8
8
  border-radius: var(--border-radius-lg);
9
9
  padding: 0;
10
- `;export{F as EmbeddedReplay};
10
+ `;export{H as EmbeddedReplay};
@@ -1 +1 @@
1
- import{jsx as r,Fragment as U,jsxs as F}from"react/jsx-runtime";import{lazy as B,memo as z,Suspense as J,useCallback as u,useRef as K,useState as M}from"react";import{useAtom as f,useAtomValue as p}from"jotai";import w from"deepmerge";const H=B(async()=>import("@redocly/replay").then(t=>({default:t.ReplayOverlay})));import{Button as Q}from"@redocly/theme/components/Button/Button";import{useFocusTrap as W,useModalScrollLock as X}from"@redocly/theme/core/openapi";import{RocketIcon as Y}from"@redocly/theme/icons/RocketIcon/RocketIcon";import{CircleDashIcon as Z}from"@redocly/theme/icons/CircleDashIcon/CircleDashIcon";import{Portal as $}from"@redocly/theme/components/Portal/Portal";import{globalOptionsAtom as ee,globalStoreAtom as te}from"../../jotai/store.js";import{allOperationsAtom as oe,replayStateAtom as re}from"../../jotai/replay.js";import{allOperations as ne,getDefaultOperationStore as ae}from"../../jotai/operation.js";import{LOADING_STATE as a}from"../../constants.js";import{environmentAtom as se,userClaimsAtom as ie}from"../../jotai/app.js";import{convertOperationToReplayValueForRedoc as le}from"./utils.js";import{useTranslate as me,useTelemetry as pe}from"../../hooks/index.js";import{JsonPointer as ce}from"../../utils/index.js";import{getDefaultCollectorUrl as ue}from"../../utils/telemetry.js";import{createTryItOpenEvent as fe,createTryItSentEvent as de}from"../../events/index.js";function ye({operation:t,corsProxyUrl:D,fullOpenApi:d}){const y=me(),C=pe(),O=K(null),{mockServer:L,oAuth2RedirectURI:b,routingBasePath:c}=p(ee),I=p(oe),{parser:P,options:{events:s}}=p(te),N=p(ie),[l,E]=M(!1),[m,h]=f(re),[g,v]=f(ne),[[,V],A]=f(se);W(O),X(l);const _=u(({operations:e,environment:o,environments:i})=>{const j=e.reduce((S,n)=>{n.requestValues.body=n.requestValues.body instanceof URLSearchParams?Object.fromEntries(n.requestValues.body.entries()):n.requestValues.body;const{path:k,method:G}=n.apiPath,T=ce.compile(["paths",k,G]);return S[T]=w(ae(T),n),S},{});v({...g,...j}),A({environment:o,environments:i})},[g,v,A]),R=()=>{if(m!==a.LOADING){if(!l&&(C.send({type:"openapi_docs.try_it.opened"}),s?.tryItOpen&&t)){const e=fe({operation:t});s.tryItOpen(e)}E(!l)}m===a.NOT_LOADED&&h(a.LOADING)},q=u(e=>{if(s?.tryItSent&&t){const o=de({operation:t,isSuccess:e});s.tryItSent(o)}},[s,t]),x=u(e=>{if(!e)return;const o=I.find(i=>i.operationId===e);return c+o?.href},[I,c]);return d?F(U,{children:[r(Q,{onClick:R,variant:"primary",iconPosition:"left",icon:m===a.LOADING?r(Z,{}):r(Y,{}),children:m===a.LOADING?y("openapi.loading","Loading..."):y("openapi.tryIt","Try it")}),l&&r(J,{children:r($,{mountId:"api-content",children:r("div",{ref:O,children:r(H,{activeOperationId:t.operationId||t.pointer,api:d,onRequestChange:_,onClose:R,onLoad:()=>h(a.LOADED),settings:{corsProxyUrl:D,mockServer:L,environment:V,apiId:P?.definition.info?.["x-metadata"]?.apiId,oAuth2RedirectURI:b,disableCollectionsTab:!0,storageKey:c,telemetry:{tracerName:"try-it",collectorUrl:ue()},convertOperationToReplayValue:(e,o,i)=>le(N)(e,o,i),getOperationUrl:x},onRequestSent:q})})})})]}):null}const xe=z(ye);export{xe as Replay};
1
+ import{jsx as r,Fragment as _,jsxs as F}from"react/jsx-runtime";import{lazy as B,memo as M,Suspense as z,useCallback as u,useRef as J,useState as K}from"react";import{useAtom as f,useAtomValue as p}from"jotai";import w from"deepmerge";const H=B(async()=>import("@redocly/replay").then(t=>({default:t.ReplayOverlay})));import{Button as Q}from"@redocly/theme/components/Button/Button";import{useFocusTrap as W,useModalScrollLock as X}from"@redocly/theme/core/openapi";import{RocketIcon as Y}from"@redocly/theme/icons/RocketIcon/RocketIcon";import{CircleDashIcon as Z}from"@redocly/theme/icons/CircleDashIcon/CircleDashIcon";import{Portal as $}from"@redocly/theme/components/Portal/Portal";import{globalOptionsAtom as ee,globalStoreAtom as te}from"../../jotai/store.js";import{allOperationsAtom as oe,replayStateAtom as re}from"../../jotai/replay.js";import{allOperations as ne,getDefaultOperationStore as ae}from"../../jotai/operation.js";import{LOADING_STATE as a}from"../../constants.js";import{environmentAtom as se,userClaimsAtom as ie}from"../../jotai/app.js";import{convertOperationToReplayValueForRedoc as le}from"./utils.js";import{useTranslate as me,useTelemetry as pe}from"../../hooks/index.js";import{JsonPointer as ce}from"../../utils/index.js";import{getDefaultCollectorUrl as ue}from"../../utils/telemetry.js";import{createTryItOpenEvent as fe,createTryItSentEvent as de}from"../../events/index.js";function ye({operation:t,corsProxyUrl:D,fullOpenApi:d}){const y=me(),C=pe(),O=J(null),{mockServer:L,oAuth2RedirectURI:b,routingBasePath:c}=p(ee),I=p(oe),{parser:P,options:{events:s}}=p(te),N=p(ie),[l,E]=K(!1),[m,h]=f(re),[g,v]=f(ne),[[,V],A]=f(se);W(O),X(l);const q=u(({operations:e,environment:o,environments:i})=>{const k=e.reduce((S,n)=>{n.requestValues.body=n.requestValues.body instanceof URLSearchParams?Object.fromEntries(n.requestValues.body.entries()):n.requestValues.body;const{path:G,method:U}=n.apiPath,T=ce.compile(["paths",G,U]);return S[T]=w(ae(T),n),S},{});v({...g,...k}),A({environment:o,environments:i})},[g,v,A]),R=()=>{if(m!==a.LOADING){if(!l&&(C.sendOpenapiDocsTryItOpenedMessage(void 0),s?.tryItOpen&&t)){const e=fe({operation:t});s.tryItOpen(e)}E(!l)}m===a.NOT_LOADED&&h(a.LOADING)},x=u(e=>{if(s?.tryItSent&&t){const o=de({operation:t,isSuccess:e});s.tryItSent(o)}},[s,t]),j=u(e=>{if(!e)return;const o=I.find(i=>i.operationId===e);return c+o?.href},[I,c]);return d?F(_,{children:[r(Q,{onClick:R,variant:"primary",iconPosition:"left",icon:m===a.LOADING?r(Z,{}):r(Y,{}),children:m===a.LOADING?y("openapi.loading","Loading..."):y("openapi.tryIt","Try it")}),l&&r(z,{children:r($,{mountId:"api-content",children:r("div",{ref:O,children:r(H,{activeOperationId:t.operationId||t.pointer,api:d,onRequestChange:q,onClose:R,onLoad:()=>h(a.LOADED),settings:{corsProxyUrl:D,mockServer:L,environment:V,apiId:P?.definition.info?.["x-metadata"]?.apiId,oAuth2RedirectURI:b,disableCollectionsTab:!0,storageKey:c,telemetry:{tracerName:"try-it",collectorUrl:ue()},convertOperationToReplayValue:(e,o,i)=>le(N)(e,o,i),getOperationUrl:j},onRequestSent:x})})})})]}):null}const je=M(ye);export{je as Replay};
@@ -1 +1 @@
1
- import{isPrimitive as x}from"@redocly/theme/core/openapi";import{getOperation as h}from"../../models/index.js";import{normalizeOptions as v,OpenAPIParser as b}from"../../services/index.js";import{JsonPointer as E}from"../../utils/index.js";function O(t,a,n,r,e,c){if(!n)return;const i=new b(n),s=i.definition.paths?.[t],d=s?.[a],m=h(i,{...d,pathName:t,httpVerb:a,pathParameters:s.parameters||[],pathServers:s.servers||[]},void 0,v({}),"",{isCallback:!1},r);if(!m)return;const f=c?.activeMimeName||"application/json";return{id:m.id,name:m.name,method:m.httpVerb,operationId:m.operationId,parameters:N(m.parameters,e?.requestValues),body:w(m.requestBody,n,e?.requestValues?.body?{activeExampleName:e?.activeExampleName,[f]:e?.requestValues?.body}:e?.activeExampleName?{activeExampleName:e?.activeExampleName}:void 0),path:m.path,href:m.href,servers:m.servers,security:y(m.security),responses:Object.fromEntries(m.responses.map(u=>[u.code,{code:u.code,description:u.description,mediaTypes:u.content?.mediaTypes.reduce((l,o)=>(l[o.name]={name:o.name,schema:p(o.schema?.rawSchema,n)},l),{})}]))}}function P(t){return function(a,n,r){const e=O(a,n,r,t);if(e)return{...e,operationId:e.operationId||E.compile(["paths",e.path,e.method])}}}function N(t,a){const n=new Set,r=t.map(e=>(n.add(e.in+":"+e.name),{name:e.name,in:e.in,required:e.required,description:e.description,example:a?.[String(e.in)]?.[e.name]||e.example,schema:e.schema}));for(const[e,c]of Object.entries(a||{}))for(const[i,s]of Object.entries(c||{}))n.has(e+":"+i)||r.push({name:i,in:e,required:!1,description:"",example:String(s),schema:void 0});return r}function V({type:t,format:a,enum:n}){return t==="string"&&(a==="binary"||a==="base64")?"file":t==="object"?"multiline":n.length>0?"select":"text"}function g(t,a){const n=t[0]?.example||t[0]?.examples;if(n)return n;if(t.schema?.example)return t.schema.example;const r=a?.default?.value||a?.default?.rawValue;return r?.[t.name]?x(r?.[t.name])?String(r?.[t.name]):JSON.stringify(r?.[t.name]):""}function w(t,a,n){if(!t||!t.content?.mediaTypes){if(!n)return;const{activeExampleName:r,...e}=n;return{activeExampleName:r,mediaTypes:Object.fromEntries(Object.entries(e).map(([c,i])=>[c,{name:c,examples:{default:{value:i}},schema:{},parameters:[]}]))}}return{required:t.required,activeExampleName:n?.activeExampleName,mediaTypes:t.content.mediaTypes.reduce((r,e)=>{const c=e.schema,i=n?.[e.name]?{default:{value:n?.[e.name],rawValue:n?.[e.name],mime:e.name}}:e.examples||e.formExamples;return r[e.name]={name:e.name,examples:i,schema:p(e.schema?.rawSchema,a),parameters:c?.fields?.map(s=>({inputType:V(s.schema),name:s.name,example:g(s,i)}))},r},{})}}function p(t,a){if(!(!t||!a))return{...t,components:a?.components||{}}}function y(t){if(t)return t.map(({schemes:a})=>a.map(n=>{const r={id:n.id,type:n.type,in:n.in,openIdConnectUrl:n.openIdConnectUrl,scopes:n.scopes,scheme:n.scheme,name:n.name,flows:n.flows,"x-defaultAccessToken":n["x-defaultAccessToken"],"x-defaultTokenType":n["x-defaultTokenType"],"x-defaultClientId":n["x-defaultClientId"],"x-defaultClientSecret":n["x-defaultClientSecret"],"x-defaultUsername":n["x-defaultUsername"],"x-defaultPassword":n["x-defaultPassword"]};return Object.keys(r).forEach(e=>r[e]===void 0&&delete r[e]),r}))}export{O as convertOperationToReplayValue,P as convertOperationToReplayValueForRedoc,y as convertRequestSecurity};
1
+ import{isPrimitive as x}from"@redocly/theme/core/openapi";import{getOperation as h}from"../../models/index.js";import{normalizeOptions as v,OpenAPIParser as b}from"../../services/index.js";import{JsonPointer as E}from"../../utils/index.js";function y(t,a,n,r,e,c){if(!n)return;const i=new b(n),s=i.definition.paths?.[t],d=s?.[a],m=h(i,{...d,pathName:t,httpVerb:a,pathParameters:s.parameters||[],pathServers:s.servers||[]},void 0,v({}),"",{isCallback:!1},r);if(!m)return;const f=c?.activeMimeName||m.requestBody?.content?.mediaTypes[0]?.name||"application/json";return{id:m.id,name:m.name,method:m.httpVerb,operationId:m.operationId,parameters:O(m.parameters,e?.requestValues),body:g(m.requestBody,n,e?.requestValues?.body?{activeExampleName:e?.activeExampleName,[f]:e?.requestValues?.body}:e?.activeExampleName?{activeExampleName:e?.activeExampleName}:void 0),path:m.path,href:m.href,servers:m.servers,security:w(m.security),responses:Object.fromEntries(m.responses.map(u=>[u.code,{code:u.code,description:u.description,mediaTypes:u.content?.mediaTypes.reduce((l,o)=>(l[o.name]={name:o.name,schema:p(o.schema?.rawSchema,n)},l),{})}]))}}function P(t){return function(a,n,r){const e=y(a,n,r,t);if(e)return{...e,operationId:e.operationId||E.compile(["paths",e.path,e.method])}}}function O(t,a){const n=new Set,r=t.map(e=>(n.add(e.in+":"+e.name),{name:e.name,in:e.in,required:e.required,description:e.description,example:a?.[String(e.in)]?.[e.name]||e.example,schema:e.schema}));for(const[e,c]of Object.entries(a||{}))for(const[i,s]of Object.entries(c||{}))n.has(e+":"+i)||r.push({name:i,in:e,required:!1,description:"",example:String(s),schema:void 0});return r}function N({type:t,format:a,enum:n}){return t==="string"&&(a==="binary"||a==="base64")?"file":t==="object"?"multiline":n.length>0?"select":"text"}function V(t,a){const n=t[0]?.example||t[0]?.examples;if(n)return n;if(t.schema?.example)return t.schema.example;const r=a?.default?.value||a?.default?.rawValue;return r?.[t.name]?x(r?.[t.name])?String(r?.[t.name]):JSON.stringify(r?.[t.name]):""}function g(t,a,n){if(!t||!t.content?.mediaTypes){if(!n)return;const{activeExampleName:r,...e}=n;return{activeExampleName:r,mediaTypes:Object.fromEntries(Object.entries(e).map(([c,i])=>[c,{name:c,examples:{default:{value:i}},schema:{},parameters:[]}]))}}return{required:t.required,activeExampleName:n?.activeExampleName,mediaTypes:t.content.mediaTypes.reduce((r,e)=>{const c=e.schema,i=n?.[e.name]?{default:{value:n?.[e.name],rawValue:n?.[e.name],mime:e.name}}:e.examples||e.formExamples;return r[e.name]={name:e.name,examples:i,schema:p(e.schema?.rawSchema,a),parameters:c?.fields?.map(s=>({inputType:N(s.schema),name:s.name,example:V(s,i)}))},r},{})}}function p(t,a){if(!(!t||!a))return{...t,components:a?.components||{}}}function w(t){if(t)return t.map(({schemes:a})=>a.map(n=>{const r={id:n.id,type:n.type,in:n.in,openIdConnectUrl:n.openIdConnectUrl,scopes:n.scopes,scheme:n.scheme,name:n.name,flows:n.flows,"x-defaultAccessToken":n["x-defaultAccessToken"],"x-defaultTokenType":n["x-defaultTokenType"],"x-defaultClientId":n["x-defaultClientId"],"x-defaultClientSecret":n["x-defaultClientSecret"],"x-defaultUsername":n["x-defaultUsername"],"x-defaultPassword":n["x-defaultPassword"]};return Object.keys(r).forEach(e=>r[e]===void 0&&delete r[e]),r}))}export{y as convertOperationToReplayValue,P as convertOperationToReplayValueForRedoc,w as convertRequestSecurity};
@@ -1 +1 @@
1
- import{jsx as c,Fragment as f,jsxs as h}from"react/jsx-runtime";import{memo as u}from"react";import{useAtom as E}from"jotai";import{ExampleSwitch as g,useExampleKey as d}from"../Samples/index.js";import{useActivateExample as O,useTelemetry as j}from"../../hooks/index.js";import{operationStore as y}from"../../jotai/operation.js";function _({mediaType:o,mediaContent:p,renderSample:n}){const r=j(),m=o.operation.pointer,[l,x]=E(y(m)),a=o.examples||{},e=Object.keys(a),i=O(p),{exampleKey:s}=d(o.operation,a);return!e.length||e.length===1?n():h(f,{children:[c(g,{examples:a,exampleKey:s,onChange:t=>{r.send({type:"openapi_docs.examples_switcher.clicked",payload:{example:t,numberOfExamples:e.length}}),x({...l,activeExampleName:t,activeOneOf:{[m]:e.indexOf(t)},requestValues:{body:null}}),i(t)}}),n(s)]})}const N=u(_);export{N as Example};
1
+ import{jsx as c,Fragment as f,jsxs as h}from"react/jsx-runtime";import{memo as u}from"react";import{useAtom as E}from"jotai";import{ExampleSwitch as g,useExampleKey as O}from"../Samples/index.js";import{useActivateExample as j,useTelemetry as C}from"../../hooks/index.js";import{operationStore as d}from"../../jotai/operation.js";function v({mediaType:o,mediaContent:p,renderSample:n}){const r=C(),m=o.operation.pointer,[l,x]=E(d(m)),a=o.examples||{},e=Object.keys(a),i=j(p),{exampleKey:s}=O(o.operation,a);return!e.length||e.length===1?n():h(f,{children:[c(g,{examples:a,exampleKey:s,onChange:t=>{r.sendOpenapiDocsExamplesSwitcherClickedMessage({example:t,numberOfExamples:e.length}),x({...l,activeExampleName:t,activeOneOf:{[m]:e.indexOf(t)},requestValues:{body:null}}),i(t)}}),n(s)]})}const N=u(v);export{N as Example};
@@ -1,12 +1,12 @@
1
- import{jsx as o,jsxs as D}from"react/jsx-runtime";import{memo as T,useCallback as k,useMemo as A}from"react";import{useAtomValue as y,useAtom as M}from"jotai";import{PanelHeader as U}from"@redocly/theme/components/Panel/PanelHeader";import{PayloadSamples as W}from"../PayloadSamples/index.js";import{CodeSample as B}from"./CodeSample.js";import{useCodeSamples as F}from"./useCodeSamples.js";import{isPayloadSample as H}from"../../models/index.js";import{createCodeSampleCopyEvent as O,createLanguageSwitchEvent as V}from"../../events/index.js";import{globalStoreAtom as $}from"../../jotai/store.js";import{ServerListDropdown as z}from"../ServerListDropdown/index.js";import{LanguageDropdown as G}from"../Language/index.js";import{activeMimeNameAtom as J,languageAtom as K}from"../../jotai/app.js";import{Replay as L}from"../Replay/index.js";import{CodeBlockPanel as w}from"../common/index.js";import{useActiveWithFallback as Q,useTelemetry as X}from"../../hooks/index.js";import{operationStore as Y}from"../../jotai/operation.js";import{styled as v}from"../../styled-components.js";function Z({operation:a,disableFooter:P,onPanelToggle:S,...p}){const c=X(),[{activeLanguage:q,languages:m},R]=M(K),{samples:n}=F(a),{parser:d,options:{events:s,corsProxyUrl:g,hideReplay:_}}=y($),i=!P&&!a.isWebhook&&!_&&!a.hideReplay,t=!!m?.length,u=Q(n,q),E=e=>{R(e),c.send({type:"openapi_docs.select_language.clicked",payload:{language:e}});const r=m?.find(l=>l.key===e);if(s?.codeSamplesLanguageSwitch&&r){const l=V({operation:a,sample:{lang:r.lang,label:r.title}});s.codeSamplesLanguageSwitch(l)}},h=y(J),{activeExampleName:x}=y(Y(a.pointer)),f=k(({lang:e,title:r})=>()=>{const l=O({operation:a,label:r,lang:e,type:"request",activeMimeName:h,activeExampleName:x});c.send({type:"openapi_docs.copy_code_snippet.clicked",payload:{snippetType:"request",language:e}}),s?.codeSamplesCopy?.(l)},[a,c,s,h,x]),b=k(e=>{S?.(e,"request-samples")},[S]),C=()=>D(I,{isExpandable:!1,withReplay:!t&&i,children:[o(ee,{operation:a}),t&&o(G,{activeTab:u,samples:n,onChange:E}),!t&&i&&o(L,{operation:a,corsProxyUrl:g,fullOpenApi:d.definition})]}),j=A(()=>{if(i&&t)return o(ae,{children:o(L,{operation:a,corsProxyUrl:g,fullOpenApi:d.definition})})},[i,t,a,g,d.definition]),N=A(()=>n.map(e=>e.key===u?o("div",{children:H(e)?o(W,{content:e.requestBodyContent,onCopyClick:f(e),onPanelToggle:b,...p}):o(B,{lang:e.lang,source:e.source,externalSample:e,operation:a,onCopyClick:f(e),...p})},e.key+a.id):null),[u,f,b,a,p,n]);return m&&!n.length?o(w,{className:"panel-request-samples",header:C,isExpandable:!1,expanded:!1}):n.length?o(w,{className:"panel-request-samples",header:C,footer:j,isExpandable:!1,children:N}):null}const xe=T(Z),I=v(U)`
1
+ import{jsx as o,jsxs as N}from"react/jsx-runtime";import{memo as T,useCallback as L,useMemo as k}from"react";import{useAtomValue as y,useAtom as O}from"jotai";import{PanelHeader as U}from"@redocly/theme/components/Panel/PanelHeader";import{PayloadSamples as W}from"../PayloadSamples/index.js";import{CodeSample as B}from"./CodeSample.js";import{useCodeSamples as F}from"./useCodeSamples.js";import{isPayloadSample as H}from"../../models/index.js";import{createCodeSampleCopyEvent as _,createLanguageSwitchEvent as V}from"../../events/index.js";import{globalStoreAtom as $}from"../../jotai/store.js";import{ServerListDropdown as z}from"../ServerListDropdown/index.js";import{LanguageDropdown as G}from"../Language/index.js";import{activeMimeNameAtom as J,languageAtom as K}from"../../jotai/app.js";import{Replay as A}from"../Replay/index.js";import{CodeBlockPanel as w}from"../common/index.js";import{useActiveWithFallback as Q,useTelemetry as X}from"../../hooks/index.js";import{operationStore as Y}from"../../jotai/operation.js";import{styled as S}from"../../styled-components.js";function Z({operation:a,disableFooter:P,onPanelToggle:v,...p}){const m=X(),[{activeLanguage:q,languages:c},R]=O(K),{samples:n}=F(a),{parser:d,options:{events:l,corsProxyUrl:g,hideReplay:E}}=y($),i=!P&&!a.isWebhook&&!E&&!a.hideReplay,t=!!c?.length,u=Q(n,q),j=e=>{R(e),m.sendOpenapiDocsSelectLanguageClickedMessage({language:e});const r=c?.find(s=>s.key===e);if(l?.codeSamplesLanguageSwitch&&r){const s=V({operation:a,sample:{lang:r.lang,label:r.title}});l.codeSamplesLanguageSwitch(s)}},h=y(J),{activeExampleName:C}=y(Y(a.pointer)),f=L(({lang:e,title:r})=>()=>{const s=_({operation:a,label:r,lang:e,type:"request",activeMimeName:h,activeExampleName:C});m.sendCopyCodeSnippetClickedMessage({snippetType:"request",language:e}),l?.codeSamplesCopy?.(s)},[a,m,l,h,C]),x=L(e=>{v?.(e,"request-samples")},[v]),b=()=>N(I,{isExpandable:!1,withReplay:!t&&i,children:[o(ee,{operation:a}),t&&o(G,{activeTab:u,samples:n,onChange:j}),!t&&i&&o(A,{operation:a,corsProxyUrl:g,fullOpenApi:d.definition})]}),D=k(()=>{if(i&&t)return o(ae,{children:o(A,{operation:a,corsProxyUrl:g,fullOpenApi:d.definition})})},[i,t,a,g,d.definition]),M=k(()=>n.map(e=>e.key===u?o("div",{children:H(e)?o(W,{content:e.requestBodyContent,onCopyClick:f(e),onPanelToggle:x,...p}):o(B,{lang:e.lang,source:e.source,externalSample:e,operation:a,onCopyClick:f(e),...p})},e.key+a.id):null),[u,f,x,a,p,n]);return c&&!n.length?o(w,{className:"panel-request-samples",header:b,isExpandable:!1,expanded:!1}):n.length?o(w,{className:"panel-request-samples",header:b,footer:D,isExpandable:!1,children:M}):null}const Ce=T(Z),I=S(U)`
2
2
  flex-wrap: nowrap;
3
3
  ${({withReplay:a})=>a&&"padding: var(--spacing-xs) var(--spacing-sm);"}
4
- `,ee=v(z)`
4
+ `,ee=S(z)`
5
5
  padding-right: var(--spacing-base);
6
6
  min-width: 0;
7
- `,ae=v.div`
7
+ `,ae=S.div`
8
8
  display: flex;
9
9
  justify-content: flex-end;
10
10
  border-top: var(--panel-border);
11
11
  padding: var(--spacing-base) var(--spacing-md) var(--spacing-md);
12
- `;export{xe as RequestSamples};
12
+ `;export{Ce as RequestSamples};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{memo as b,useCallback as i}from"react";import{useAtomValue as n}from"jotai";import{PayloadSamples as h,StyledCodeBlock as v}from"../PayloadSamples/index.js";import{createCodeSampleCopyEvent as k}from"../../events/index.js";import{globalOptionsAtom as T}from"../../jotai/store.js";import{Summary as g}from"./Summary.js";import{Tabs as x}from"../Tabs/index.js";import{CodeBlockPanel as N}from"../common/index.js";import{useTelemetry as _,useTranslate as A}from"../../hooks/index.js";import{activeMimeNameAtom as E}from"../../jotai/app.js";import{operationStore as P}from"../../jotai/operation.js";function R({operation:o,activeResponseTab:d,onTabChange:y,onPanelToggle:a}){const m=_(),{events:p}=n(T),f=A(),u=o.responses.filter(e=>e.content?.hasSample??!1),s=o.responses.map(({code:e})=>({key:e,title:e})),r=s?.find(({key:e})=>e===d)||s?.[0],l=n(E),{activeExampleName:c}=n(P(o.pointer)),C=i(()=>{m.send({type:"openapi_docs.copy_code_snippet.clicked",payload:{snippetType:"response"}});const e=k({operation:o,type:"response",activeMimeName:l,activeExampleName:c});p?.codeSamplesCopy?.(e)},[m,o,p,l,c]),S=i(e=>{a?.(e,"response-samples")},[a]);return u.length?t(N,{className:"panel-response-samples",header:()=>t(g,{tabs:t(x,{tabs:s,activeTab:r,onChange:e=>y(e.key)})}),isExpandable:!1,children:o.responses.map(e=>e.code===r.key?t("div",{children:e?.content?.hasSample?t(h,{content:e.content,onCopyClick:C,onPanelToggle:S}):t(v,{source:f("openapi.noResponseContent","No content")})},e.code):null)}):null}const J=b(R);export{J as ResponseSamples};
1
+ import{jsx as t}from"react/jsx-runtime";import{memo as b,useCallback as i}from"react";import{useAtomValue as n}from"jotai";import{PayloadSamples as h,StyledCodeBlock as v}from"../PayloadSamples/index.js";import{createCodeSampleCopyEvent as k}from"../../events/index.js";import{globalOptionsAtom as T}from"../../jotai/store.js";import{Summary as g}from"./Summary.js";import{Tabs as x}from"../Tabs/index.js";import{CodeBlockPanel as N}from"../common/index.js";import{useTelemetry as A,useTranslate as E}from"../../hooks/index.js";import{activeMimeNameAtom as M}from"../../jotai/app.js";import{operationStore as P}from"../../jotai/operation.js";function R({operation:o,activeResponseTab:d,onTabChange:f,onPanelToggle:m}){const a=A(),{events:r}=n(T),y=E(),C=o.responses.filter(e=>e.content?.hasSample??!1),s=o.responses.map(({code:e})=>({key:e,title:e})),p=s?.find(({key:e})=>e===d)||s?.[0],l=n(M),{activeExampleName:c}=n(P(o.pointer)),u=i(()=>{a.sendCopyCodeSnippetClickedMessage({snippetType:"response"});const e=k({operation:o,type:"response",activeMimeName:l,activeExampleName:c});r?.codeSamplesCopy?.(e)},[a,o,r,l,c]),S=i(e=>{m?.(e,"response-samples")},[m]);return C.length?t(N,{className:"panel-response-samples",header:()=>t(g,{tabs:t(x,{tabs:s,activeTab:p,onChange:e=>f(e.key)})}),isExpandable:!1,children:o.responses.map(e=>e.code===p.key?t("div",{children:e?.content?.hasSample?t(h,{content:e.content,onCopyClick:u,onPanelToggle:S}):t(v,{source:y("openapi.noResponseContent","No content")})},e.code):null)}):null}const J=b(R);export{J as ResponseSamples};
@@ -1 +1 @@
1
- import{jsx as n}from"react/jsx-runtime";import{useState as f,useEffect as h}from"react";import{MimeLabel as x,Container as v,Select as b}from"../common/index.js";import{SelectOrLabel as y}from"../SelectOrLabel/index.js";import{normalizeText as S}from"../../utils/index.js";import{useTelemetry as g}from"../../hooks/index.js";const I=({exampleKey:a,examples:s,onChange:m,className:c})=>{const i=g(),t=Object.keys(s),o=a?t.indexOf(a):0,[p,l]=f(o>-1?o:0);h(()=>l(o>-1?o:0),[a,o]);const r=t.map((e,d)=>({value:S(s[e].summary)||e,idx:d})),u=({idx:e})=>{i.send({type:"openapi_docs.examples_switcher.clicked",payload:{example:t[e],numberOfExamples:t.length}}),l(e),m(t[e])};return r.length<2?null:n(v,{"data-testid":"example-switch",className:c,children:n(y,{Select:b,Label:x,variant:"dark",fullWidth:!0,options:r,value:r[p]?.value,onChange:u})})};export{I as ExampleSwitch};
1
+ import{jsx as n}from"react/jsx-runtime";import{useState as d,useEffect as h}from"react";import{MimeLabel as x,Container as v,Select as S}from"../common/index.js";import{SelectOrLabel as b}from"../SelectOrLabel/index.js";import{normalizeText as g}from"../../utils/index.js";import{useTelemetry as O}from"../../hooks/index.js";const I=({exampleKey:s,examples:o,onChange:m,className:i})=>{const c=O(),t=Object.keys(o),r=s?t.indexOf(s):0,[p,l]=d(r>-1?r:0);h(()=>l(r>-1?r:0),[s,r]);const a=t.map((e,f)=>({value:g(o[e].summary)||e,idx:f})),u=({idx:e})=>{c.sendOpenapiDocsExamplesSwitcherClickedMessage({example:t[e],numberOfExamples:t.length}),l(e),m(t[e])};return a.length<2?null:n(v,{"data-testid":"example-switch",className:i,children:n(b,{Select:S,Label:x,variant:"dark",fullWidth:!0,options:a,value:a[p]?.value,onChange:u})})};export{I as ExampleSwitch};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as v}from"react/jsx-runtime";import{useMemo as f,useCallback as l}from"react";import{useAtom as S,useAtomValue as w}from"jotai";import{DropdownMenu as y}from"@redocly/theme/components/Dropdown/DropdownMenu";import{Dropdown as g}from"@redocly/theme/components/Dropdown/Dropdown";import{HttpVerb as k}from"../common/index.js";import{PathWrapper as A,Path as b,StyledCopyButton as C,StyledDropdownMenuItem as P}from"./styled.js";import{PanelItem as j}from"../PanelItem/index.js";import{joinWithSeparator as x}from"../../services/index.js";import{replaceVariables as V}from"../../utils/index.js";import{environmentAtom as D}from"../../jotai/app.js";import{useActiveWithFallback as _,useTelemetry as E}from"../../hooks/index.js";import{getServerEnvName as p}from"../../utils/environments.js";import{createTargetServerSwitchEvent as M}from"../../events/index.js";import{globalStoreAtom as W}from"../../jotai/store.js";const R=({operation:r,className:h})=>{const m=E(),[[d],i]=S(D),{options:{events:n}}=w(W),s=_(r.servers.map(t=>({...t,key:t.url})),d.server),c=l(t=>{t.stopPropagation()},[]),a=l(t=>()=>{if(r.servers.length!==1&&(i({environment:p(t)}),m.send({type:"openapi_docs.switch_servers.clicked",payload:{server:p(t)}}),n?.targetServerSwitch&&t)){const o=M({operation:r,serverUrl:t.url});n.targetServerSwitch(o)}},[r,i,m,n]),u=f(()=>r.servers.map(t=>{const o=x(V(t),r.path);return e(P,{onAction:a(t),children:e(j,{header:t.description,title:o,actions:[e(C,{data:o,toasterPlacement:"left",onCopyClick:c},o)],active:t.url===s,withCheckmark:!0})},o)}),[r.servers,r.path,a,c,s]);return e(g,{className:h,trigger:v(A,{variant:"ghost",children:[e(k,{color:r.httpVerb,children:r.httpVerb}),e(b,{children:r.path})]}),withArrow:!0,children:e(y,{children:u})})};export{R as ServerListDropdown};
1
+ import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useMemo as f,useCallback as l}from"react";import{useAtom as S,useAtomValue as g}from"jotai";import{DropdownMenu as w}from"@redocly/theme/components/Dropdown/DropdownMenu";import{Dropdown as y}from"@redocly/theme/components/Dropdown/Dropdown";import{HttpVerb as k}from"../common/index.js";import{PathWrapper as A,Path as C,StyledCopyButton as b,StyledDropdownMenuItem as P}from"./styled.js";import{PanelItem as j}from"../PanelItem/index.js";import{joinWithSeparator as x}from"../../services/index.js";import{replaceVariables as D}from"../../utils/index.js";import{environmentAtom as V}from"../../jotai/app.js";import{useActiveWithFallback as M,useTelemetry as E}from"../../hooks/index.js";import{getServerEnvName as p}from"../../utils/environments.js";import{createTargetServerSwitchEvent as W}from"../../events/index.js";import{globalStoreAtom as I}from"../../jotai/store.js";const R=({operation:t,className:h})=>{const m=E(),[[u],i]=S(V),{options:{events:n}}=g(I),s=M(t.servers.map(r=>({...r,key:r.url})),u.server),c=l(r=>{r.stopPropagation()},[]),a=l(r=>()=>{if(t.servers.length!==1&&(i({environment:p(r)}),m.sendOpenapiDocsSwitchServersClickedMessage({server:p(r)}),n?.targetServerSwitch&&r)){const o=W({operation:t,serverUrl:r.url});n.targetServerSwitch(o)}},[t,i,m,n]),v=f(()=>t.servers.map(r=>{const o=x(D(r),t.path);return e(P,{onAction:a(r),children:e(j,{header:r.description,title:o,actions:[e(b,{data:o,toasterPlacement:"left",onCopyClick:c},o)],active:r.url===s,withCheckmark:!0})},o)}),[t.servers,t.path,a,c,s]);return e(y,{className:h,trigger:d(A,{variant:"ghost",children:[e(k,{color:t.httpVerb,children:t.httpVerb}),e(C,{children:t.path})]}),withArrow:!0,children:e(w,{children:v})})};export{R as ServerListDropdown};
@@ -17,6 +17,7 @@ export type AppStore = {
17
17
  environment: string;
18
18
  environments: Record<string, Record<string, string>>;
19
19
  userClaims: UserClaims;
20
+ allowedEnvironments: string[] | null;
20
21
  };
21
22
  type LanguageAtom = {
22
23
  languages?: (TabType & {
@@ -38,6 +39,7 @@ export declare const isSidebarOpenedAtom: import("jotai").WritableAtom<boolean,
38
39
  export declare const activeMimeNameAtom: import("jotai").WritableAtom<string, [string], void>;
39
40
  export declare const layoutAtom: import("jotai").WritableAtom<LayoutVariant, LayoutVariant[], void>;
40
41
  export declare const userClaimsAtom: import("jotai").WritableAtom<UserClaims, UserClaims[], void>;
42
+ export declare const allowedEnvironmentsAtom: import("jotai").WritableAtom<string[] | null, [string[] | null], void>;
41
43
  /**
42
44
  * appSessionStore saved to session storage
43
45
  */
package/lib/jotai/app.js CHANGED
@@ -1 +1 @@
1
- import{atom as a}from"jotai";import{atomWithStorage as v,createJSONStorage as d}from"jotai/utils";import{LayoutVariant as u}from"@redocly/config";import{getCookie as f,removeCookie as y,setCookie as A}from"../utils/cookies.js";import{globalOptionsAtom as k}from"./store.js";import{mergeEnvData as m}from"../utils/environments.js";import{fromSessionStorage as O,safeJsonParse as S,toSessionStorage as x}from"../utils/index.js";import{IS_BROWSER as C}from"../utils/dom.js";const l={isSidebarOpened:!0,activeMimeName:"",layout:u.THREE_PANEL,language:"",environment:"",environments:{},userClaims:{}},b={getItem:e=>{const t=S(f(e,globalThis.redoclyCookieStorage?.getStore?.())),o=S(O(e));return{...l,...o,...t}},setItem:(e,t)=>{const{environments:o,...n}=t,r={environments:o};A(e,JSON.stringify(n)),x(e,JSON.stringify(r))},removeItem:e=>{y(e),sessionStorage.removeItem(e)}},s=v("redoc.appStore",l,b),g=a({}),h=a(e=>{const t=e(s),o=e(g);return m(t.environments,o?.environments||{})}),D=a(e=>{const t=e(s),o=e(g),n=m(t.environments,o?.environments||{}),r=o?.environment||t.environment,i=n[r]?r:Object.keys(n)[0];return[n[i]||{},i||""]},(e,t,{environment:o,environments:n})=>{const r=e(s);t(s,{...r,environment:o||r.environment,environments:m(r.environments||{},n)})}),K=a(e=>e(s).isSidebarOpened,(e,t,o)=>{const n=e(s);t(s,{...n,isSidebarOpened:o})}),P=a(e=>e(s).activeMimeName,(e,t,o)=>{const n=e(s);t(s,{...n,activeMimeName:o})}),W=a(e=>e(s).layout,(e,t,o=u.STACKED)=>{const n=e(s);t(s,{...n,layout:o})}),_=a(e=>e(s).userClaims,(e,t,o)=>{const n=e(s);t(s,{...n,userClaims:o})}),c=v("redoc.appSessionStore",{collapsedSidebar:!1,unsupportedFeatureScreen:!1},C?d(()=>sessionStorage):void 0),j=a(e=>e(c).collapsedSidebar,(e,t,o)=>{const n=e(c);t(c,{...n,collapsedSidebar:o})});function N({lang:e,label:t}){return(t||e).toLowerCase()}const w=a(e=>{const{codeSamples:t}=e(k),o=t.languages.map(({lang:r,label:i},p)=>({key:N({lang:r,label:i}),lang:r,title:i||r,order:p})),n=e(s).language||o[0]?.key;return{languages:o,activeLanguage:o.find(({key:r})=>r===n)?.key||o[0]?.key}},(e,t,o)=>{const n=e(s);t(s,{...n,language:o})});export{P as activeMimeNameAtom,c as appSessionStore,s as appStore,g as appStoreOverrideAtom,j as collapsedSidebarAtom,D as environmentAtom,h as environmentsAtom,N as getLangKey,K as isSidebarOpenedAtom,w as languageAtom,W as layoutAtom,_ as userClaimsAtom};
1
+ import{atom as a}from"jotai";import{atomWithStorage as l,createJSONStorage as g}from"jotai/utils";import{LayoutVariant as v}from"@redocly/config";import{getCookie as f,removeCookie as A,setCookie as y}from"../utils/cookies.js";import{globalOptionsAtom as k}from"./store.js";import{mergeEnvData as m}from"../utils/environments.js";import{fromSessionStorage as x,safeJsonParse as u,toSessionStorage as E}from"../utils/index.js";import{IS_BROWSER as O}from"../utils/dom.js";const S={isSidebarOpened:!0,activeMimeName:"",layout:v.THREE_PANEL,language:"",environment:"",environments:{},userClaims:{},allowedEnvironments:null},C={getItem:e=>{const t=u(f(e,globalThis.redoclyCookieStorage?.getStore?.())),o=u(x(e));return{...S,...o,...t}},setItem:(e,t)=>{const{environments:o,...n}=t,r={environments:o};y(e,JSON.stringify(n)),E(e,JSON.stringify(r))},removeItem:e=>{A(e),sessionStorage.removeItem(e)}},s=l("redoc.appStore",S,C),d=a({}),T=a(e=>{const t=e(s),o=e(d);return m(t.environments,o?.environments||{})}),h=a(e=>{const t=e(s),o=e(d),n=m(t.environments,o?.environments||{}),r=o?.environment||t.environment,i=n[r]?r:Object.keys(n)[0];return[n[i]||{},i||""]},(e,t,{environment:o,environments:n})=>{const r=e(s);t(s,{...r,environment:o||r.environment,environments:m(r.environments||{},n)})}),D=a(e=>e(s).isSidebarOpened,(e,t,o)=>{const n=e(s);t(s,{...n,isSidebarOpened:o})}),K=a(e=>e(s).activeMimeName,(e,t,o)=>{const n=e(s);t(s,{...n,activeMimeName:o})}),P=a(e=>e(s).layout,(e,t,o=v.STACKED)=>{const n=e(s);t(s,{...n,layout:o})}),W=a(e=>e(s).userClaims,(e,t,o)=>{const n=e(s);t(s,{...n,userClaims:o})}),_=a(e=>e(s).allowedEnvironments,(e,t,o)=>{const n=e(s);t(s,{...n,allowedEnvironments:o})}),c=l("redoc.appSessionStore",{collapsedSidebar:!1,unsupportedFeatureScreen:!1},O?g(()=>sessionStorage):void 0),j=a(e=>e(c).collapsedSidebar,(e,t,o)=>{const n=e(c);t(c,{...n,collapsedSidebar:o})});function b({lang:e,label:t}){return(t||e).toLowerCase()}const B=a(e=>{const{codeSamples:t}=e(k),o=t.languages.map(({lang:r,label:i},p)=>({key:b({lang:r,label:i}),lang:r,title:i||r,order:p})),n=e(s).language||o[0]?.key;return{languages:o,activeLanguage:o.find(({key:r})=>r===n)?.key||o[0]?.key}},(e,t,o)=>{const n=e(s);t(s,{...n,language:o})});export{K as activeMimeNameAtom,_ as allowedEnvironmentsAtom,c as appSessionStore,s as appStore,d as appStoreOverrideAtom,j as collapsedSidebarAtom,h as environmentAtom,T as environmentsAtom,b as getLangKey,D as isSidebarOpenedAtom,B as languageAtom,P as layoutAtom,W as userClaimsAtom};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.13.0-next.5",
3
+ "version": "3.13.0-next.6",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@markdoc/markdoc": "0.5.2",
24
- "@redocly/openapi-core": "0.0.0-snapshot.1755009111",
24
+ "@redocly/openapi-core": "2.0.7",
25
25
  "deepmerge": "^4.2.2",
26
26
  "dompurify": "3.2.6",
27
27
  "fast-deep-equal": "^3.1.3",
@@ -37,7 +37,7 @@
37
37
  "util": "~0.12.5",
38
38
  "web-vitals": "3.3.1",
39
39
  "@redocly/config": "0.28.0",
40
- "@redocly/replay": "0.16.0-next.4"
40
+ "@redocly/replay": "0.16.0-next.5"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@jest/globals": "29.5.0",
@@ -75,7 +75,7 @@
75
75
  "typescript": "5.6.2",
76
76
  "url": "~0.11.0",
77
77
  "vite": "^6.3.5",
78
- "@redocly/theme": "0.57.0-next.3"
78
+ "@redocly/theme": "0.57.0-next.4"
79
79
  },
80
80
  "scripts": {
81
81
  "start": "npm run copy-highlight-hook && vite",