@redocly/openapi-docs 3.11.0-next.1 → 3.11.0-next.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.
Files changed (60) hide show
  1. package/dist/redocly-openapi-docs.min.js +563 -563
  2. package/lib/components/ExpandAllButton/ExpandAllButton.d.ts +3 -1
  3. package/lib/components/ExpandAllButton/ExpandAllButton.js +1 -1
  4. package/lib/components/OperationItem/OperationItem.js +1 -1
  5. package/lib/components/PayloadSamples/Example.d.ts +1 -1
  6. package/lib/components/PayloadSamples/Example.js +1 -1
  7. package/lib/components/PayloadSamples/ExampleValue.d.ts +1 -1
  8. package/lib/components/PayloadSamples/ExampleValue.js +1 -1
  9. package/lib/components/PayloadSamples/MediaTypeSamples.js +1 -1
  10. package/lib/components/PayloadSamples/types.d.ts +5 -3
  11. package/lib/components/Replay/Replay.js +1 -1
  12. package/lib/components/Request/RequestDetails.js +1 -1
  13. package/lib/components/Request/types.d.ts +2 -0
  14. package/lib/components/RequestSamples/RequestSamples.d.ts +2 -0
  15. package/lib/components/RequestSamples/RequestSamples.js +1 -1
  16. package/lib/components/ResponseSamples/ResponseSamples.d.ts +3 -1
  17. package/lib/components/ResponseSamples/ResponseSamples.js +1 -1
  18. package/lib/components/Responses/OperationResponseList.d.ts +2 -0
  19. package/lib/components/Responses/OperationResponseList.js +1 -1
  20. package/lib/components/ServerListDropdown/ServerListDropdown.js +1 -1
  21. package/lib/events/index.d.ts +3 -0
  22. package/lib/events/index.js +1 -1
  23. package/lib/events/serverSwitch.d.ts +2 -0
  24. package/lib/events/serverSwitch.js +2 -0
  25. package/lib/events/tryItOpen.d.ts +2 -0
  26. package/lib/events/tryItOpen.js +2 -0
  27. package/lib/events/tryItSent.d.ts +2 -0
  28. package/lib/events/tryItSent.js +2 -0
  29. package/lib/events/types.d.ts +18 -3
  30. package/lib/events/types.js +1 -1
  31. package/lib-esm/components/ExpandAllButton/ExpandAllButton.d.ts +3 -1
  32. package/lib-esm/components/ExpandAllButton/ExpandAllButton.js +1 -1
  33. package/lib-esm/components/OperationItem/OperationItem.js +1 -1
  34. package/lib-esm/components/PayloadSamples/Example.d.ts +1 -1
  35. package/lib-esm/components/PayloadSamples/Example.js +1 -1
  36. package/lib-esm/components/PayloadSamples/ExampleValue.d.ts +1 -1
  37. package/lib-esm/components/PayloadSamples/ExampleValue.js +1 -1
  38. package/lib-esm/components/PayloadSamples/MediaTypeSamples.js +1 -1
  39. package/lib-esm/components/PayloadSamples/types.d.ts +5 -3
  40. package/lib-esm/components/Replay/Replay.js +1 -1
  41. package/lib-esm/components/Request/RequestDetails.js +1 -1
  42. package/lib-esm/components/Request/types.d.ts +2 -0
  43. package/lib-esm/components/RequestSamples/RequestSamples.d.ts +2 -0
  44. package/lib-esm/components/RequestSamples/RequestSamples.js +1 -1
  45. package/lib-esm/components/ResponseSamples/ResponseSamples.d.ts +3 -1
  46. package/lib-esm/components/ResponseSamples/ResponseSamples.js +1 -1
  47. package/lib-esm/components/Responses/OperationResponseList.d.ts +2 -0
  48. package/lib-esm/components/Responses/OperationResponseList.js +1 -1
  49. package/lib-esm/components/ServerListDropdown/ServerListDropdown.js +1 -1
  50. package/lib-esm/events/index.d.ts +3 -0
  51. package/lib-esm/events/index.js +1 -1
  52. package/lib-esm/events/serverSwitch.d.ts +2 -0
  53. package/lib-esm/events/serverSwitch.js +2 -0
  54. package/lib-esm/events/tryItOpen.d.ts +2 -0
  55. package/lib-esm/events/tryItOpen.js +2 -0
  56. package/lib-esm/events/tryItSent.d.ts +2 -0
  57. package/lib-esm/events/tryItSent.js +2 -0
  58. package/lib-esm/events/types.d.ts +18 -3
  59. package/lib-esm/events/types.js +1 -1
  60. package/package.json +3 -3
@@ -1,8 +1,10 @@
1
1
  import type { TFunction } from '@redocly/theme';
2
2
  import type { ReactNode } from 'react';
3
3
  import type { OperationModel } from '../../models';
4
+ import type { PanelType } from '../../events/types';
4
5
  export interface RequestProps {
5
6
  operation: Pick<OperationModel, 'security' | 'pointer' | 'description' | 'externalDocs' | 'extensions' | 'parameters' | 'requestBody' | 'id' | 'callbackId'>;
6
7
  title?: string | ReactNode;
7
8
  translate?: TFunction;
9
+ onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
8
10
  }
@@ -1,8 +1,10 @@
1
1
  import type { OperationModel } from '../../models';
2
+ import type { PanelType } from '../../events/types';
2
3
  interface RequestSamplesProps {
3
4
  operation: OperationModel;
4
5
  defaultLanguage?: string;
5
6
  disableFooter?: boolean;
7
+ onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
6
8
  }
7
9
  export declare const RequestSamples: import("react").NamedExoticComponent<RequestSamplesProps>;
8
10
  export {};
@@ -1,4 +1,4 @@
1
- var __rest=this&&this.__rest||function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(t=Object.getOwnPropertySymbols(e);r<t.length;r++)o.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(a[t[r]]=e[t[r]])}return a};import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{memo,useCallback,useMemo}from"react";import{useAtomValue,useAtom}from"jotai";import{PanelHeader}from"@redocly/theme";import styled from"styled-components";import{PayloadSamples}from"../PayloadSamples";import{CodeSample}from"./CodeSample";import{useCodeSamples}from"./useCodeSamples";import{isPayloadSample}from"../../models";import{createCodeSampleCopyEvent}from"../../events";import{globalStoreAtom}from"../../jotai/store";import{ServerListDropdown}from"../ServerListDropdown";import{LanguageDropdown}from"../Language";import{activeMimeNameAtom,languageAtom}from"../../jotai/app";import{Replay}from"../Replay";import{CodeBlockPanel}from"../common";import{useActiveWithFallback,useTelemetry}from"../../hooks";import{operationStore}from"../../jotai/operation";function RequestSamplesComponent(e){var{operation:o,disableFooter:a}=e,t=__rest(e,["operation","disableFooter"]);const r=useTelemetry(),[{activeLanguage:l,languages:p},s]=useAtom(languageAtom),{samples:n}=useCodeSamples(o),{parser:i,options:{events:m,corsProxyUrl:d,hideReplay:c}}=useAtomValue(globalStoreAtom),u=!(a||o.isWebhook||c||o.hideReplay),y=!!(null==p?void 0:p.length),g=useActiveWithFallback(n,l),f=e=>{s(e),r.send({type:"openapi_docs.select_language.clicked",payload:{language:e}})},v=useAtomValue(activeMimeNameAtom),{activeExampleName:x}=useAtomValue(operationStore(o.pointer)),S=useCallback((({lang:e,title:a})=>()=>{var t;const l=createCodeSampleCopyEvent({operation:o,label:a,lang:e,type:"request",activeMimeName:v,activeExampleName:x});r.send({type:"openapi_docs.copy_code_snippet.clicked",payload:{snippet_type:"request",language:e}}),null===(t=null==m?void 0:m.codeSamplesCopy)||void 0===t||t.call(m,l)}),[o,r,m,v,x]),b=()=>_jsxs(StyledPanelHeader,{isExpandable:!1,withReplay:!y&&u,children:[_jsx(StyledServerListDropdown,{operation:o}),y&&_jsx(LanguageDropdown,{activeTab:g,samples:n,onChange:f}),!y&&u&&_jsx(Replay,{operation:o,corsProxyUrl:d,fullOpenApi:i.definition})]}),j=useMemo((()=>{if(u&&y)return _jsx(ReplayWrapper,{children:_jsx(Replay,{operation:o,corsProxyUrl:d,fullOpenApi:i.definition})})}),[u,y,o,d,i.definition]),h=useMemo((()=>n.map((e=>e.key===g?_jsx("div",{children:isPayloadSample(e)?_jsx(PayloadSamples,Object.assign({content:e.requestBodyContent,onCopyClick:S(e)},t)):_jsx(CodeSample,Object.assign({lang:e.lang,source:e.source,externalSample:e,operation:o,onCopyClick:S(e)},t))},e.key+o.id):null))),[g,S,o,t,n]);return p&&!n.length?_jsx(CodeBlockPanel,{className:"panel-request-samples",header:b,isExpandable:!1,expanded:!1}):n.length?_jsx(CodeBlockPanel,{className:"panel-request-samples",header:b,footer:j,isExpandable:!1,children:h}):null}export const RequestSamples=memo(RequestSamplesComponent);const StyledPanelHeader=styled(PanelHeader)`
1
+ var __rest=this&&this.__rest||function(e,a){var o={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&a.indexOf(t)<0&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(t=Object.getOwnPropertySymbols(e);l<t.length;l++)a.indexOf(t[l])<0&&Object.prototype.propertyIsEnumerable.call(e,t[l])&&(o[t[l]]=e[t[l]])}return o};import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{memo,useCallback,useMemo}from"react";import{useAtomValue,useAtom}from"jotai";import{PanelHeader}from"@redocly/theme";import styled from"styled-components";import{PayloadSamples}from"../PayloadSamples";import{CodeSample}from"./CodeSample";import{useCodeSamples}from"./useCodeSamples";import{isPayloadSample}from"../../models";import{createCodeSampleCopyEvent,createLanguageSwitchEvent}from"../../events";import{globalStoreAtom}from"../../jotai/store";import{ServerListDropdown}from"../ServerListDropdown";import{LanguageDropdown}from"../Language";import{activeMimeNameAtom,languageAtom}from"../../jotai/app";import{Replay}from"../Replay";import{CodeBlockPanel}from"../common";import{useActiveWithFallback,useTelemetry}from"../../hooks";import{operationStore}from"../../jotai/operation";function RequestSamplesComponent(e){var{operation:a,disableFooter:o,onPanelToggle:t}=e,l=__rest(e,["operation","disableFooter","onPanelToggle"]);const r=useTelemetry(),[{activeLanguage:n,languages:s},p]=useAtom(languageAtom),{samples:i}=useCodeSamples(a),{parser:m,options:{events:d,corsProxyUrl:c,hideReplay:u}}=useAtomValue(globalStoreAtom),g=!(o||a.isWebhook||u||a.hideReplay),y=!!(null==s?void 0:s.length),f=useActiveWithFallback(i,n),v=e=>{p(e),r.send({type:"openapi_docs.select_language.clicked",payload:{language:e}});const o=null==s?void 0:s.find((a=>a.key===e));if((null==d?void 0:d.codeSamplesLanguageSwitch)&&o){const e=createLanguageSwitchEvent({operation:a,sample:{lang:o.lang,label:o.title}});d.codeSamplesLanguageSwitch(e)}},S=useAtomValue(activeMimeNameAtom),{activeExampleName:x}=useAtomValue(operationStore(a.pointer)),b=useCallback((({lang:e,title:o})=>()=>{var t;const l=createCodeSampleCopyEvent({operation:a,label:o,lang:e,type:"request",activeMimeName:S,activeExampleName:x});r.send({type:"openapi_docs.copy_code_snippet.clicked",payload:{snippet_type:"request",language:e}}),null===(t=null==d?void 0:d.codeSamplesCopy)||void 0===t||t.call(d,l)}),[a,r,d,S,x]),h=useCallback((e=>{null==t||t(e,"request-samples")}),[t]),j=()=>_jsxs(StyledPanelHeader,{isExpandable:!1,withReplay:!y&&g,children:[_jsx(StyledServerListDropdown,{operation:a}),y&&_jsx(LanguageDropdown,{activeTab:f,samples:i,onChange:v}),!y&&g&&_jsx(Replay,{operation:a,corsProxyUrl:c,fullOpenApi:m.definition})]}),C=useMemo((()=>{if(g&&y)return _jsx(ReplayWrapper,{children:_jsx(Replay,{operation:a,corsProxyUrl:c,fullOpenApi:m.definition})})}),[g,y,a,c,m.definition]),_=useMemo((()=>i.map((e=>e.key===f?_jsx("div",{children:isPayloadSample(e)?_jsx(PayloadSamples,Object.assign({content:e.requestBodyContent,onCopyClick:b(e),onPanelToggle:h},l)):_jsx(CodeSample,Object.assign({lang:e.lang,source:e.source,externalSample:e,operation:a,onCopyClick:b(e)},l))},e.key+a.id):null))),[f,b,h,a,l,i]);return s&&!i.length?_jsx(CodeBlockPanel,{className:"panel-request-samples",header:j,isExpandable:!1,expanded:!1}):i.length?_jsx(CodeBlockPanel,{className:"panel-request-samples",header:j,footer:C,isExpandable:!1,children:_}):null}export const RequestSamples=memo(RequestSamplesComponent);const StyledPanelHeader=styled(PanelHeader)`
2
2
  flex-wrap: nowrap;
3
3
  ${({withReplay:e})=>e&&"padding: var(--spacing-xs) var(--spacing-sm);"}
4
4
  `,StyledServerListDropdown=styled(ServerListDropdown)`
@@ -1,10 +1,12 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import type { OperationModel } from '../../models';
3
+ import type { PanelType } from '../../events/types';
3
4
  export interface ResponseSamplesProps {
4
5
  operation: OperationModel;
5
6
  activeResponseTab?: string;
6
7
  onTabChange: (tab: string) => void;
8
+ onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
7
9
  }
8
- declare function ResponseSamplesComponent({ operation, activeResponseTab, onTabChange, }: ResponseSamplesProps): ReactElement | null;
10
+ declare function ResponseSamplesComponent({ operation, activeResponseTab, onTabChange, onPanelToggle, }: ResponseSamplesProps): ReactElement | null;
9
11
  export declare const ResponseSamples: import("react").MemoExoticComponent<typeof ResponseSamplesComponent>;
10
12
  export {};
@@ -1,2 +1,2 @@
1
- import{jsx as _jsx}from"react/jsx-runtime";import{memo,useCallback}from"react";import{useAtomValue}from"jotai";import{PayloadSamples,StyledCodeBlock}from"../PayloadSamples";import{createCodeSampleCopyEvent}from"../../events";import{globalOptionsAtom}from"../../jotai/store";import{Summary}from"./Summary";import{Tabs}from"../Tabs";import{CodeBlockPanel}from"../common";import{useTelemetry,useTranslate}from"../../hooks";import{activeMimeNameAtom}from"../../jotai/app";import{operationStore}from"../../jotai/operation";function ResponseSamplesComponent({operation:e,activeResponseTab:o,onTabChange:a}){const t=useTelemetry(),{events:n}=useAtomValue(globalOptionsAtom),s=useTranslate(),l=e.responses.filter((e=>{var o,a;return null!==(a=null===(o=e.content)||void 0===o?void 0:o.hasSample)&&void 0!==a&&a})),m=e.responses.map((({code:e})=>({key:e,title:e}))),p=(null==m?void 0:m.find((({key:e})=>e===o)))||(null==m?void 0:m[0]),r=useAtomValue(activeMimeNameAtom),{activeExampleName:i}=useAtomValue(operationStore(e.pointer)),c=useCallback((()=>{var o;t.send({type:"openapi_docs.copy_code_snippet.clicked",payload:{snippet_type:"response"}});const a=createCodeSampleCopyEvent({operation:e,type:"response",activeMimeName:r,activeExampleName:i});null===(o=null==n?void 0:n.codeSamplesCopy)||void 0===o||o.call(n,a)}),[t,e,n,r,i]);if(!l.length)return null;return _jsx(CodeBlockPanel,{className:"panel-response-samples",header:()=>_jsx(Summary,{tabs:_jsx(Tabs,{tabs:m,activeTab:p,onChange:e=>a(e.key)})}),isExpandable:!1,children:e.responses.map((e=>{var o;return e.code===p.key?_jsx("div",{children:(null===(o=null==e?void 0:e.content)||void 0===o?void 0:o.hasSample)?_jsx(PayloadSamples,{content:e.content,onCopyClick:c}):_jsx(StyledCodeBlock,{source:s("openapi.noResponseContent","No content")})},e.code):null}))})}export const ResponseSamples=memo(ResponseSamplesComponent);
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{memo,useCallback}from"react";import{useAtomValue}from"jotai";import{PayloadSamples,StyledCodeBlock}from"../PayloadSamples";import{createCodeSampleCopyEvent}from"../../events";import{globalOptionsAtom}from"../../jotai/store";import{Summary}from"./Summary";import{Tabs}from"../Tabs";import{CodeBlockPanel}from"../common";import{useTelemetry,useTranslate}from"../../hooks";import{activeMimeNameAtom}from"../../jotai/app";import{operationStore}from"../../jotai/operation";function ResponseSamplesComponent({operation:e,activeResponseTab:o,onTabChange:a,onPanelToggle:t}){const n=useTelemetry(),{events:s}=useAtomValue(globalOptionsAtom),l=useTranslate(),m=e.responses.filter((e=>{var o,a;return null!==(a=null===(o=e.content)||void 0===o?void 0:o.hasSample)&&void 0!==a&&a})),p=e.responses.map((({code:e})=>({key:e,title:e}))),r=(null==p?void 0:p.find((({key:e})=>e===o)))||(null==p?void 0:p[0]),i=useAtomValue(activeMimeNameAtom),{activeExampleName:c}=useAtomValue(operationStore(e.pointer)),d=useCallback((()=>{var o;n.send({type:"openapi_docs.copy_code_snippet.clicked",payload:{snippet_type:"response"}});const a=createCodeSampleCopyEvent({operation:e,type:"response",activeMimeName:i,activeExampleName:c});null===(o=null==s?void 0:s.codeSamplesCopy)||void 0===o||o.call(s,a)}),[n,e,s,i,c]),u=useCallback((e=>{null==t||t(e,"response-samples")}),[t]);if(!m.length)return null;return _jsx(CodeBlockPanel,{className:"panel-response-samples",header:()=>_jsx(Summary,{tabs:_jsx(Tabs,{tabs:p,activeTab:r,onChange:e=>a(e.key)})}),isExpandable:!1,children:e.responses.map((e=>{var o;return e.code===r.key?_jsx("div",{children:(null===(o=null==e?void 0:e.content)||void 0===o?void 0:o.hasSample)?_jsx(PayloadSamples,{content:e.content,onCopyClick:d,onPanelToggle:u}):_jsx(StyledCodeBlock,{source:l("openapi.noResponseContent","No content")})},e.code):null}))})}export const ResponseSamples=memo(ResponseSamplesComponent);
2
2
  //# sourceMappingURL=ResponseSamples.js.map
@@ -1,6 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { ResponseModel } from '../../models';
3
3
  import type { TabType } from '../../models/tab';
4
+ import type { PanelType } from '../../events/types';
4
5
  interface IOperationResponseList {
5
6
  responses: ResponseModel[];
6
7
  operationId: string;
@@ -9,6 +10,7 @@ interface IOperationResponseList {
9
10
  renderTitle?: (tab: TabType) => ReactNode;
10
11
  activeResponseTab?: string;
11
12
  onTabChange?: (key: string) => void;
13
+ onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
12
14
  }
13
15
  export declare const OperationResponseList: import("react").NamedExoticComponent<IOperationResponseList>;
14
16
  export {};
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{memo,useMemo}from"react";import{useLocation}from"react-router-dom";import styled from"styled-components";import{useAtomValue}from"jotai";import{Tabs,useTabsState}from"../Tabs";import{ResponseDetails}from"./ResponseDetails";import{makeDeepLink}from"../../services";import{Row,StyledTitle}from"./styled";import{LinkToField}from"../common/LinkToField";import{pathIncludesLink}from"../../utils";import{ExpandAllButton}from"../ExpandAllButton";import{useTranslate}from"../../hooks";import{getActiveMediaType}from"../../models";import{activeMimeNameAtom}from"../../jotai/app";export const OperationResponseList=memo((({responses:e,renderTitle:o,operationId:t,operationPointer:s,activeResponseTab:i,onTabChange:n,callbackId:a})=>{const r=useLocation(),l=useTranslate(),m=useAtomValue(activeMimeNameAtom),p=e.map((({code:e})=>({key:e,title:e}))),d=p.find((({key:e})=>e===i||pathIncludesLink(r,t)&&pathIncludesLink(r,`c=${e}`))),{activeTab:c,handleTabChange:u}=useTabsState({tabs:p,defaultTab:null==d?void 0:d.key,onChange:n}),T=p.find((e=>e.key===(i||c))),f=e.find((e=>e.code===(null==T?void 0:T.key))),v=useMemo((()=>{var e;if(!(null==f?void 0:f.content))return!1;const{schema:o}=getActiveMediaType(null==f?void 0:f.content,m)||{};return null===(e=null==o?void 0:o.fields)||void 0===e?void 0:e.some((({schema:e})=>!e.isPrimitive&&!e.isCircular))}),[m,null==f?void 0:f.content]);return T?_jsxs(_Fragment,{children:[_jsxs(TitleWrap,{children:[(null==o?void 0:o(T))||_jsxs(StyledTitle,{children:[_jsx(LinkToField,{to:makeDeepLink(t,`response&c=${T.key}`)}),l("openapi.responses","Responses")]}),_jsx(Tabs,{tabs:p,activeTab:T,onChange:u}),v&&_jsx(ExpandAllButton,{type:"response",operationPointer:s})]}),f?_jsx("div",{children:_jsx(ResponseDetails,{response:f,operationId:t,callbackId:a})},f.code):null]}):null}));const TitleWrap=styled(Row)`
1
+ import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{memo,useMemo}from"react";import{useLocation}from"react-router-dom";import styled from"styled-components";import{useAtomValue}from"jotai";import{Tabs,useTabsState}from"../Tabs";import{ResponseDetails}from"./ResponseDetails";import{makeDeepLink}from"../../services";import{Row,StyledTitle}from"./styled";import{LinkToField}from"../common/LinkToField";import{pathIncludesLink}from"../../utils";import{ExpandAllButton}from"../ExpandAllButton";import{useTranslate}from"../../hooks";import{getActiveMediaType}from"../../models";import{activeMimeNameAtom}from"../../jotai/app";export const OperationResponseList=memo((({responses:e,renderTitle:o,operationId:t,operationPointer:s,activeResponseTab:n,onTabChange:i,callbackId:a,onPanelToggle:r})=>{const l=useLocation(),m=useTranslate(),p=useAtomValue(activeMimeNameAtom),d=e.map((({code:e})=>({key:e,title:e}))),c=d.find((({key:e})=>e===n||pathIncludesLink(l,t)&&pathIncludesLink(l,`c=${e}`))),{activeTab:u,handleTabChange:T}=useTabsState({tabs:d,defaultTab:null==c?void 0:c.key,onChange:i}),f=d.find((e=>e.key===(n||u))),v=e.find((e=>e.code===(null==f?void 0:f.key))),k=useMemo((()=>{var e;if(!(null==v?void 0:v.content))return!1;const{schema:o}=getActiveMediaType(null==v?void 0:v.content,p)||{};return null===(e=null==o?void 0:o.fields)||void 0===e?void 0:e.some((({schema:e})=>!e.isPrimitive&&!e.isCircular))}),[p,null==v?void 0:v.content]);return f?_jsxs(_Fragment,{children:[_jsxs(TitleWrap,{children:[(null==o?void 0:o(f))||_jsxs(StyledTitle,{children:[_jsx(LinkToField,{to:makeDeepLink(t,`response&c=${f.key}`)}),m("openapi.responses","Responses")]}),_jsx(Tabs,{tabs:d,activeTab:f,onChange:T}),k&&_jsx(ExpandAllButton,{type:"response",operationPointer:s,onPanelToggle:r})]}),v?_jsx("div",{children:_jsx(ResponseDetails,{response:v,operationId:t,callbackId:a})},v.code):null]}):null}));const TitleWrap=styled(Row)`
2
2
  flex-wrap: wrap;
3
3
  gap: var(--spacing-unit);
4
4
  `;
@@ -1,2 +1,2 @@
1
- import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useMemo,useCallback}from"react";import{Dropdown,DropdownMenu}from"@redocly/theme";import{useAtom}from"jotai";import{HttpVerb}from"../common";import{PathWrapper,Path,StyledCopyButton,StyledDropdownMenuItem}from"./styled";import{PanelItem}from"../PanelItem";import{joinWithSeparator}from"../../services";import{replaceVariables}from"../../utils";import{environmentAtom}from"../../jotai/app";import{useActiveWithFallback,useTelemetry}from"../../hooks";import{getServerEnvName}from"../../utils/environments";export const ServerListDropdown=({operation:e,className:r})=>{const t=useTelemetry(),[[o],s]=useAtom(environmentAtom),a=useActiveWithFallback(e.servers.map((e=>Object.assign(Object.assign({},e),{key:e.url}))),o.server),n=useCallback((e=>{e.stopPropagation()}),[]),i=useCallback((r=>()=>{1!==e.servers.length&&(s({environment:getServerEnvName(r)}),t.send({type:"openapi_docs.switch_servers.clicked",payload:{server:getServerEnvName(r)}}))}),[e.servers.length,s,t]),m=useMemo((()=>e.servers.map((r=>{const t=joinWithSeparator(replaceVariables(r),e.path);return _jsx(StyledDropdownMenuItem,{onAction:i(r),children:_jsx(PanelItem,{header:r.description,title:t,actions:[_jsx(StyledCopyButton,{data:t,toasterPlacement:"left",onCopyClick:n},t)],active:r.url===a,withCheckmark:!0})},t)}))),[e.servers,e.path,i,n,a]);return _jsx(Dropdown,{className:r,trigger:_jsxs(PathWrapper,{variant:"ghost",children:[_jsx(HttpVerb,{color:e.httpVerb,children:e.httpVerb}),_jsx(Path,{children:e.path})]}),withArrow:!0,children:_jsx(DropdownMenu,{children:m})})};
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useMemo,useCallback}from"react";import{Dropdown,DropdownMenu}from"@redocly/theme";import{useAtom,useAtomValue}from"jotai";import{HttpVerb}from"../common";import{PathWrapper,Path,StyledCopyButton,StyledDropdownMenuItem}from"./styled";import{PanelItem}from"../PanelItem";import{joinWithSeparator}from"../../services";import{replaceVariables}from"../../utils";import{environmentAtom}from"../../jotai/app";import{globalStoreAtom}from"../../jotai/store";import{useActiveWithFallback,useTelemetry}from"../../hooks";import{getServerEnvName}from"../../utils/environments";import{createTargetServerSwitchEvent}from"../../events";export const ServerListDropdown=({operation:e,className:r})=>{const t=useTelemetry(),[[o],a]=useAtom(environmentAtom),{options:{events:s}}=useAtomValue(globalStoreAtom),i=useActiveWithFallback(e.servers.map((e=>Object.assign(Object.assign({},e),{key:e.url}))),o.server),n=useCallback((e=>{e.stopPropagation()}),[]),m=useCallback((r=>()=>{if(1!==e.servers.length&&(a({environment:getServerEnvName(r)}),t.send({type:"openapi_docs.switch_servers.clicked",payload:{server:getServerEnvName(r)}}),(null==s?void 0:s.targetServerSwitch)&&r)){const t=createTargetServerSwitchEvent({operation:e,serverUrl:r.url});s.targetServerSwitch(t)}}),[e,a,t,s]),l=useMemo((()=>e.servers.map((r=>{const t=joinWithSeparator(replaceVariables(r),e.path);return _jsx(StyledDropdownMenuItem,{onAction:m(r),children:_jsx(PanelItem,{header:r.description,title:t,actions:[_jsx(StyledCopyButton,{data:t,toasterPlacement:"left",onCopyClick:n},t)],active:r.url===i,withCheckmark:!0})},t)}))),[e.servers,e.path,m,n,i]);return _jsx(Dropdown,{className:r,trigger:_jsxs(PathWrapper,{variant:"ghost",children:[_jsx(HttpVerb,{color:e.httpVerb,children:e.httpVerb}),_jsx(Path,{children:e.path})]}),withArrow:!0,children:_jsx(DropdownMenu,{children:l})})};
2
2
  //# sourceMappingURL=ServerListDropdown.js.map
@@ -3,3 +3,6 @@ export { AnalyticsEventType } from './types';
3
3
  export { createLanguageSwitchEvent } from './languageSwitch';
4
4
  export { createPanelToggleEvent } from './panelToggle';
5
5
  export { createCodeSampleCopyEvent } from './codeSampleCopy';
6
+ export { createTargetServerSwitchEvent } from './serverSwitch';
7
+ export { createTryItOpenEvent } from './tryItOpen';
8
+ export { createTryItSentEvent } from './tryItSent';
@@ -1,2 +1,2 @@
1
- export{AnalyticsEventType}from"./types";export{createLanguageSwitchEvent}from"./languageSwitch";export{createPanelToggleEvent}from"./panelToggle";export{createCodeSampleCopyEvent}from"./codeSampleCopy";
1
+ export{AnalyticsEventType}from"./types";export{createLanguageSwitchEvent}from"./languageSwitch";export{createPanelToggleEvent}from"./panelToggle";export{createCodeSampleCopyEvent}from"./codeSampleCopy";export{createTargetServerSwitchEvent}from"./serverSwitch";export{createTryItOpenEvent}from"./tryItOpen";export{createTryItSentEvent}from"./tryItSent";
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ import type { TargetServerSwitchedEvent, TargetServerSwitchProps } from './types';
2
+ export declare const createTargetServerSwitchEvent: ({ operation, serverUrl, }: TargetServerSwitchProps) => TargetServerSwitchedEvent;
@@ -0,0 +1,2 @@
1
+ import{createTrackingEvent}from"./creator";import{AnalyticsEventType}from"./types";const targetServerSwitchEvent=createTrackingEvent(AnalyticsEventType.TargetServerSwitched);export const createTargetServerSwitchEvent=({operation:e,serverUrl:r})=>targetServerSwitchEvent({resource:"Redocly_CodeSample",action:"TargetServerSwitched",operationId:e.id,operationPath:e.path,operationHttpVerb:e.httpVerb,operationSummary:e.name,serverUrl:r});
2
+ //# sourceMappingURL=serverSwitch.js.map
@@ -0,0 +1,2 @@
1
+ import type { TryItOpenedEvent, TryItOpenProps } from './types';
2
+ export declare const createTryItOpenEvent: ({ operation }: TryItOpenProps) => TryItOpenedEvent;
@@ -0,0 +1,2 @@
1
+ import{createTrackingEvent}from"./creator";import{AnalyticsEventType}from"./types";const tryItOpenEvent=createTrackingEvent(AnalyticsEventType.TryItOpen);export const createTryItOpenEvent=({operation:t})=>tryItOpenEvent({resource:"Redocly_OperationTryIt",action:"Opened",operationId:t.id,operationPath:t.path,operationHttpVerb:t.httpVerb,operationSummary:t.name});
2
+ //# sourceMappingURL=tryItOpen.js.map
@@ -0,0 +1,2 @@
1
+ import type { TryItSentEvent, TryItSentProps } from './types';
2
+ export declare const createTryItSentEvent: ({ operation, isSuccess }: TryItSentProps) => TryItSentEvent;
@@ -0,0 +1,2 @@
1
+ import{createTrackingEvent}from"./creator";import{AnalyticsEventType}from"./types";const tryItSentEvent=createTrackingEvent(AnalyticsEventType.TryItSent);export const createTryItSentEvent=({operation:t,isSuccess:e})=>tryItSentEvent({resource:"Redocly_OperationTryIt",action:e?"Sent":"ValidationFailed",operationId:t.id,operationPath:t.path,operationHttpVerb:t.httpVerb,operationSummary:t.name});
2
+ //# sourceMappingURL=tryItSent.js.map
@@ -21,16 +21,25 @@ export interface TargetServerSwitchProps {
21
21
  operation: OperationModel;
22
22
  serverUrl: string;
23
23
  }
24
+ export interface TryItOpenProps {
25
+ operation: OperationModel;
26
+ }
27
+ export interface TryItSentProps {
28
+ operation: OperationModel;
29
+ isSuccess: boolean;
30
+ }
24
31
  export declare enum AnalyticsEventType {
25
32
  CodeSampleLanguageSwitched = "CodeSampleLanguageSwitched",
26
33
  CodeSampleCopied = "CodeSampleCopied",
27
34
  OperationServerExpanded = "OperationServerExpanded",
28
35
  PanelToggle = "PanelToggle",
29
- TargetServerSwitched = "TargetServerSwitched"
36
+ TargetServerSwitched = "TargetServerSwitched",
37
+ TryItOpen = "TryItOpen",
38
+ TryItSent = "TryItSent"
30
39
  }
31
40
  export interface AnalyticsEvent {
32
41
  eventType: AnalyticsEventType;
33
- resource: 'Redocly_CodeSample' | 'Redocly_Operation';
42
+ resource: 'Redocly_CodeSample' | 'Redocly_Operation' | 'Redocly_OperationTryIt';
34
43
  action: 'LanguageSwitched' | 'PanelToggled' | 'Opened' | 'Closed' | 'NavigatedOverrideLink' | 'Sent' | 'ValidationFailed' | 'CodeSampleCopied' | 'TargetServerSwitched';
35
44
  operationId?: string;
36
45
  operationPath: string;
@@ -49,8 +58,9 @@ export interface CodeSamplesCopiedEvent extends AnalyticsEvent {
49
58
  exampleId?: string;
50
59
  exampleMimeType?: string;
51
60
  }
61
+ export type PanelType = 'request' | 'responses' | 'request-samples' | 'response-samples';
52
62
  export interface PanelToggleEvent extends AnalyticsEvent {
53
- panelType: 'request' | 'responses' | 'request-samples' | 'response-samples';
63
+ panelType: PanelType;
54
64
  state: 'expanded' | 'collapsed';
55
65
  operationId: string;
56
66
  operationPath: string;
@@ -60,9 +70,14 @@ export interface PanelToggleEvent extends AnalyticsEvent {
60
70
  export interface TargetServerSwitchedEvent extends AnalyticsEvent {
61
71
  serverUrl: string;
62
72
  }
73
+ export type TryItOpenedEvent = AnalyticsEvent;
74
+ export type TryItSentEvent = AnalyticsEvent;
75
+ export type EventType = CodeSamplesLanguageSwitchedEvent | CodeSamplesCopiedEvent | TryItOpenedEvent | TryItSentEvent | PanelToggleEvent | TargetServerSwitchedEvent;
63
76
  export type Events = {
64
77
  codeSamplesLanguageSwitch?: (event: CodeSamplesLanguageSwitchedEvent) => void;
65
78
  codeSamplesCopy?: (event: CodeSamplesCopiedEvent) => void;
79
+ tryItOpen?: (event: TryItOpenedEvent) => void;
80
+ tryItSent?: (event: TryItSentEvent) => void;
66
81
  panelToggle?: (event: PanelToggleEvent) => void;
67
82
  targetServerSwitch?: (event: TargetServerSwitchedEvent) => void;
68
83
  };
@@ -1,2 +1,2 @@
1
- export var AnalyticsEventType;!function(e){e.CodeSampleLanguageSwitched="CodeSampleLanguageSwitched",e.CodeSampleCopied="CodeSampleCopied",e.OperationServerExpanded="OperationServerExpanded",e.PanelToggle="PanelToggle",e.TargetServerSwitched="TargetServerSwitched"}(AnalyticsEventType||(AnalyticsEventType={}));
1
+ export var AnalyticsEventType;!function(e){e.CodeSampleLanguageSwitched="CodeSampleLanguageSwitched",e.CodeSampleCopied="CodeSampleCopied",e.OperationServerExpanded="OperationServerExpanded",e.PanelToggle="PanelToggle",e.TargetServerSwitched="TargetServerSwitched",e.TryItOpen="TryItOpen",e.TryItSent="TryItSent"}(AnalyticsEventType||(AnalyticsEventType={}));
2
2
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.11.0-next.1",
3
+ "version": "3.11.0-next.2",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -46,7 +46,7 @@
46
46
  "util": "~0.12.5",
47
47
  "web-vitals": "3.3.1",
48
48
  "@redocly/config": "0.26.1",
49
- "@redocly/replay": "0.14.0-next.1"
49
+ "@redocly/replay": "0.14.0-next.2"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@shikijs/transformers": "1.24.0",
@@ -92,7 +92,7 @@
92
92
  "webpack": "5.94.0",
93
93
  "webpack-cli": "5.1.4",
94
94
  "webpack-dev-server": "5.2.1",
95
- "@redocly/theme": "0.55.0-next.1"
95
+ "@redocly/theme": "0.55.0-next.2"
96
96
  },
97
97
  "scripts": {
98
98
  "start": "npm run copy-highlight-hook && webpack serve --mode=development --hot",