@redocly/openapi-docs 3.2.11 → 3.3.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.
Files changed (36) hide show
  1. package/dist/redocly-openapi-docs.min.js +728 -729
  2. package/lib/components/SideMenu/hooks/useMenuItems.js +1 -1
  3. package/lib/components/common/ExpandableExample/ExpandableExample.d.ts +1 -1
  4. package/lib/components/common/ExpandableExample/ExpandableExample.js +1 -1
  5. package/lib/constants.d.ts +1 -0
  6. package/lib/constants.js +1 -1
  7. package/lib/hooks/index.d.ts +0 -1
  8. package/lib/hooks/index.js +1 -1
  9. package/lib/services/menu/builder.js +1 -1
  10. package/lib/services/menu/tags.js +1 -1
  11. package/lib/utils/index.d.ts +0 -1
  12. package/lib/utils/index.js +1 -1
  13. package/lib-esm/components/SideMenu/hooks/useMenuItems.js +1 -1
  14. package/lib-esm/components/common/ExpandableExample/ExpandableExample.d.ts +1 -1
  15. package/lib-esm/components/common/ExpandableExample/ExpandableExample.js +1 -1
  16. package/lib-esm/constants.d.ts +1 -0
  17. package/lib-esm/constants.js +1 -1
  18. package/lib-esm/hooks/index.d.ts +0 -1
  19. package/lib-esm/hooks/index.js +1 -1
  20. package/lib-esm/services/menu/builder.js +1 -1
  21. package/lib-esm/services/menu/tags.js +1 -1
  22. package/lib-esm/utils/index.d.ts +0 -1
  23. package/lib-esm/utils/index.js +1 -1
  24. package/package.json +4 -4
  25. package/lib/hooks/_tests_/useExpandableField.test.d.ts +0 -1
  26. package/lib/hooks/_tests_/useExpandableField.test.js +0 -2
  27. package/lib/hooks/useExpandableField.d.ts +0 -12
  28. package/lib/hooks/useExpandableField.js +0 -2
  29. package/lib/utils/calculateAvgCharacterWidth.d.ts +0 -1
  30. package/lib/utils/calculateAvgCharacterWidth.js +0 -2
  31. package/lib-esm/hooks/_tests_/useExpandableField.test.d.ts +0 -1
  32. package/lib-esm/hooks/_tests_/useExpandableField.test.js +0 -2
  33. package/lib-esm/hooks/useExpandableField.d.ts +0 -12
  34. package/lib-esm/hooks/useExpandableField.js +0 -2
  35. package/lib-esm/utils/calculateAvgCharacterWidth.d.ts +0 -1
  36. package/lib-esm/utils/calculateAvgCharacterWidth.js +0 -2
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useMenuItems=void 0;const theme_1=require("@redocly/theme"),react_1=require("react"),react_router_dom_1=require("react-router-dom"),utils_1=require("../../../utils");function useMenuItems({items:e}){const t=(0,react_router_dom_1.useLocation)(),s=(0,theme_1.useActiveSectionId)(t,!1,!1);return(0,react_1.useMemo)((()=>mapAndSetActiveItems(e,s,t)),[s,e,t])}function mapAndSetActiveItems(e,t="",s){const i=[];return convertOpenAPIDocs2Sidebar({contentItems:e,sidebarItems:i,activeItemId:t,location:s}),i}function isItemActive(e,t="",s){return!!e.href&&(t?e.id===t:(0,utils_1.pathMatchedLink)(s,e.href))}function isSubItemActive(e,t="",s){return(e.items||[]).some((e=>isItemActive(e,t,s)||isSubItemActive(e,t,s)))}function convertOpenAPIDocs2Sidebar(e){const{contentItems:t,sidebarItems:s,activeItemId:i,location:c}=e;let n=!0;for(const a of t){const t=isItemActive(a,i,c),o=isSubItemActive(a,i,c);switch(a.type){case"group":s.push({type:"separator",label:a.name,active:t,hasActiveSubItem:o}),convertOpenAPIDocs2Sidebar(Object.assign(Object.assign({},e),{contentItems:a.items,sidebarItems:s}));break;case"tag":const r={type:"group",label:a.name,items:[],link:a.href,active:t,hasActiveSubItem:o,modified:!0};s.push(r),convertOpenAPIDocs2Sidebar({contentItems:a.items,sidebarItems:r.items||[],activeItemId:i,location:c});break;case"operation":case"schema":a.isWebhook&&n&&(s.push({type:"separator",label:"Webhooks",variant:"secondary"}),n=!1),s.push({type:"link",label:a.name,httpVerb:"schema"===a.type?"schema":a.httpVerb,link:a.href,badges:a.badges,active:t,hasActiveSubItem:o,modified:!0,deprecated:a.deprecated});break;case"section":if(-1===a.depth)continue;const m={type:a.items.length?"group":"link",label:a.name,link:a.href,items:[],active:t,hasActiveSubItem:o,modified:!0};s.push(m),a.items.length&&convertOpenAPIDocs2Sidebar({contentItems:a.items,sidebarItems:m.items,activeItemId:i,location:c})}}}exports.useMenuItems=useMenuItems;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useMenuItems=void 0;const theme_1=require("@redocly/theme"),react_1=require("react"),react_router_dom_1=require("react-router-dom"),utils_1=require("../../../utils"),constants_1=require("../../../constants");function useMenuItems({items:e}){const t=(0,react_router_dom_1.useLocation)(),s=(0,theme_1.useActiveSectionId)(t,!1,!1);return(0,react_1.useMemo)((()=>mapAndSetActiveItems(e,s,t)),[s,e,t])}function mapAndSetActiveItems(e,t="",s){const i=[];return convertOpenAPIDocs2Sidebar({contentItems:e,sidebarItems:i,activeItemId:t,location:s}),i}function isItemActive(e,t="",s){return!!e.href&&(t?e.id===t:(0,utils_1.pathMatchedLink)(s,e.href))}function isSubItemActive(e,t="",s){return(e.items||[]).some((e=>isItemActive(e,t,s)||isSubItemActive(e,t,s)))}function convertOpenAPIDocs2Sidebar(e){const{contentItems:t,sidebarItems:s,activeItemId:i,location:c}=e;let n=!0;for(const a of t){const t=isItemActive(a,i,c),o=isSubItemActive(a,i,c);switch(a.type){case"group":s.push({type:"separator",label:a.name,active:t,hasActiveSubItem:o}),convertOpenAPIDocs2Sidebar(Object.assign(Object.assign({},e),{contentItems:a.items,sidebarItems:s}));break;case"tag":const r={type:"group",label:a.name,items:[],link:a.href,active:t,hasActiveSubItem:o,modified:!0};s.push(r),convertOpenAPIDocs2Sidebar({contentItems:a.items,sidebarItems:r.items||[],activeItemId:i,location:c});break;case"operation":case"schema":a.isWebhook&&n&&a.parent.name!==constants_1.DEFAULT_WEBHOOKS_TAG_NAME&&(s.push({type:"separator",label:"Webhooks",variant:"secondary"}),n=!1),s.push({type:"link",label:a.name,httpVerb:"schema"===a.type?"schema":a.httpVerb,link:a.href,badges:a.badges,active:t,hasActiveSubItem:o,modified:!0,deprecated:a.deprecated});break;case"section":if(-1===a.depth)continue;const m={type:a.items.length?"group":"link",label:a.name,link:a.href,items:[],active:t,hasActiveSubItem:o,modified:!0};s.push(m),a.items.length&&convertOpenAPIDocs2Sidebar({contentItems:a.items,sidebarItems:m.items,activeItemId:i,location:c})}}}exports.useMenuItems=useMenuItems;
2
2
  //# sourceMappingURL=useMenuItems.js.map
@@ -2,4 +2,4 @@ import type { ReactElement } from 'react';
2
2
  export interface ExpandableExampleProps {
3
3
  value: string;
4
4
  }
5
- export declare function ExpandableExample({ value }: ExpandableExampleProps): ReactElement | null;
5
+ export declare function ExpandableExample({ value }: ExpandableExampleProps): ReactElement;
@@ -1,4 +1,4 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ExpandableExample=void 0;const jsx_runtime_1=require("react/jsx-runtime"),styled_components_1=__importDefault(require("styled-components")),theme_1=require("@redocly/theme"),Markdown_1=require("../../Markdown"),Fields_1=require("../Fields"),hooks_1=require("../../../hooks");function ExpandableExample({value:e}){const{displayText:n,containerRef:t,toggleExpand:r,expanded:a}=(0,hooks_1.useExpandableField)({value:e});return(0,jsx_runtime_1.jsxs)(Container,{ref:t,children:[(0,jsx_runtime_1.jsx)(Markdown_1.Markdown,{source:n}),(e!==n||a)&&(0,jsx_runtime_1.jsx)(ButtonWrap,{children:(0,jsx_runtime_1.jsx)(theme_1.Button,{variant:"link",size:"small",onClick:r,children:a?"Hide example":"Show example"})})]})}exports.ExpandableExample=ExpandableExample;const Container=(0,styled_components_1.default)(Fields_1.ExampleValue)`
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ExpandableExample=void 0;const jsx_runtime_1=require("react/jsx-runtime"),styled_components_1=__importDefault(require("styled-components")),theme_1=require("@redocly/theme"),react_1=require("react"),Markdown_1=require("../../Markdown"),Fields_1=require("../Fields"),MAX_EXAMPLE_LENGTH=150;function ExpandableExample({value:e}){const[t,r]=(0,react_1.useState)(!1),n=(0,react_1.useMemo)((()=>e.slice(0,MAX_EXAMPLE_LENGTH)),[e]);return(0,jsx_runtime_1.jsxs)(Container,{children:[(0,jsx_runtime_1.jsx)(Markdown_1.Markdown,{source:t?e:n}),(e!==n||t)&&(0,jsx_runtime_1.jsx)(ButtonWrap,{children:(0,jsx_runtime_1.jsx)(theme_1.Button,{variant:"link",size:"small",onClick:()=>{r(!t)},children:t?"Hide example":"Show example"})})]})}exports.ExpandableExample=ExpandableExample;const Container=(0,styled_components_1.default)(Fields_1.ExampleValue)`
2
2
  display: inline;
3
3
 
4
4
  & * {
@@ -17,6 +17,7 @@ export declare const LEGACY_REGEXP = "^ {0,3}<!-- ReDoc-Inject:\\s+?<({component
17
17
  export declare const MDX_COMPONENT_REGEXP: string;
18
18
  export declare const COMPONENT_REGEXP: string;
19
19
  export declare const DEFAULT_TAG_SLUG = "other";
20
+ export declare const DEFAULT_WEBHOOKS_TAG_NAME = "webhooks";
20
21
  export declare const LOADING_STATE: {
21
22
  NOT_LOADED: string;
22
23
  LOADING: string;
package/lib/constants.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var WindowReferenceOptions,MediaTypes;Object.defineProperty(exports,"__esModule",{value:!0}),exports.LOADING_STATE=exports.DEFAULT_TAG_SLUG=exports.COMPONENT_REGEXP=exports.MDX_COMPONENT_REGEXP=exports.LEGACY_REGEXP=exports.GROUP_DEPTH=exports.FIELD_ATTR=exports.SECTION_ATTR=exports.MediaTypes=exports.WindowReferenceOptions=void 0,function(e){e.ON_DEEP_LINK_CLICK="onDeepLinkClick",e.REQUEST_INTERCEPTOR="requestInterceptor",e.HOOKS="hooks"}(WindowReferenceOptions||(exports.WindowReferenceOptions=WindowReferenceOptions={})),function(e){e.OCTET_STREAM="application/octet-stream",e.MULTIPART="multipart/form-data",e.URL_ENCODED="application/x-www-form-urlencoded",e.JSON="application/json",e.XML="application/xml"}(MediaTypes||(exports.MediaTypes=MediaTypes={})),exports.SECTION_ATTR="data-section-id",exports.FIELD_ATTR="data-field-id",exports.GROUP_DEPTH=0,exports.LEGACY_REGEXP="^ {0,3}\x3c!-- ReDoc-Inject:\\s+?<({component}).*?/?>\\s+?--\x3e\\s*$",exports.MDX_COMPONENT_REGEXP="(?:^ {0,3}<({component})([\\s\\S]*?)>([\\s\\S]*?)</\\2>|^ {0,3}<({component})([\\s\\S]*?)(?:/>|\\n{2,}))",exports.COMPONENT_REGEXP="(?:"+exports.LEGACY_REGEXP+"|"+exports.MDX_COMPONENT_REGEXP+")",exports.DEFAULT_TAG_SLUG="other",exports.LOADING_STATE={NOT_LOADED:"NOT_LOADED",LOADING:"LOADING",LOADED:"LOADED"};
1
+ "use strict";var WindowReferenceOptions,MediaTypes;Object.defineProperty(exports,"__esModule",{value:!0}),exports.LOADING_STATE=exports.DEFAULT_WEBHOOKS_TAG_NAME=exports.DEFAULT_TAG_SLUG=exports.COMPONENT_REGEXP=exports.MDX_COMPONENT_REGEXP=exports.LEGACY_REGEXP=exports.GROUP_DEPTH=exports.FIELD_ATTR=exports.SECTION_ATTR=exports.MediaTypes=exports.WindowReferenceOptions=void 0,function(e){e.ON_DEEP_LINK_CLICK="onDeepLinkClick",e.REQUEST_INTERCEPTOR="requestInterceptor",e.HOOKS="hooks"}(WindowReferenceOptions||(exports.WindowReferenceOptions=WindowReferenceOptions={})),function(e){e.OCTET_STREAM="application/octet-stream",e.MULTIPART="multipart/form-data",e.URL_ENCODED="application/x-www-form-urlencoded",e.JSON="application/json",e.XML="application/xml"}(MediaTypes||(exports.MediaTypes=MediaTypes={})),exports.SECTION_ATTR="data-section-id",exports.FIELD_ATTR="data-field-id",exports.GROUP_DEPTH=0,exports.LEGACY_REGEXP="^ {0,3}\x3c!-- ReDoc-Inject:\\s+?<({component}).*?/?>\\s+?--\x3e\\s*$",exports.MDX_COMPONENT_REGEXP="(?:^ {0,3}<({component})([\\s\\S]*?)>([\\s\\S]*?)</\\2>|^ {0,3}<({component})([\\s\\S]*?)(?:/>|\\n{2,}))",exports.COMPONENT_REGEXP="(?:"+exports.LEGACY_REGEXP+"|"+exports.MDX_COMPONENT_REGEXP+")",exports.DEFAULT_TAG_SLUG="other",exports.DEFAULT_WEBHOOKS_TAG_NAME="webhooks",exports.LOADING_STATE={NOT_LOADED:"NOT_LOADED",LOADING:"LOADING",LOADED:"LOADED"};
2
2
  //# sourceMappingURL=constants.js.map
@@ -5,4 +5,3 @@ export { useRouter } from './useRouter';
5
5
  export { useContentItems } from './useContentItems';
6
6
  export { useActiveWithFallback } from './useActiveWithFallback';
7
7
  export { useUppercase2LowercaseRedirect } from './useUppercase2LowercaseRedirect';
8
- export { useExpandableField } from './useExpandableField';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useExpandableField=exports.useUppercase2LowercaseRedirect=exports.useActiveWithFallback=exports.useContentItems=exports.useRouter=exports.useActivateExample=exports.usePrevious=exports.useDimensions=void 0;var useDimensions_1=require("./useDimensions");Object.defineProperty(exports,"useDimensions",{enumerable:!0,get:function(){return useDimensions_1.useDimensions}});var usePrevious_1=require("./usePrevious");Object.defineProperty(exports,"usePrevious",{enumerable:!0,get:function(){return usePrevious_1.usePrevious}});var useActivateExample_1=require("./useActivateExample");Object.defineProperty(exports,"useActivateExample",{enumerable:!0,get:function(){return useActivateExample_1.useActivateExample}});var useRouter_1=require("./useRouter");Object.defineProperty(exports,"useRouter",{enumerable:!0,get:function(){return useRouter_1.useRouter}});var useContentItems_1=require("./useContentItems");Object.defineProperty(exports,"useContentItems",{enumerable:!0,get:function(){return useContentItems_1.useContentItems}});var useActiveWithFallback_1=require("./useActiveWithFallback");Object.defineProperty(exports,"useActiveWithFallback",{enumerable:!0,get:function(){return useActiveWithFallback_1.useActiveWithFallback}});var useUppercase2LowercaseRedirect_1=require("./useUppercase2LowercaseRedirect");Object.defineProperty(exports,"useUppercase2LowercaseRedirect",{enumerable:!0,get:function(){return useUppercase2LowercaseRedirect_1.useUppercase2LowercaseRedirect}});var useExpandableField_1=require("./useExpandableField");Object.defineProperty(exports,"useExpandableField",{enumerable:!0,get:function(){return useExpandableField_1.useExpandableField}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useUppercase2LowercaseRedirect=exports.useActiveWithFallback=exports.useContentItems=exports.useRouter=exports.useActivateExample=exports.usePrevious=exports.useDimensions=void 0;var useDimensions_1=require("./useDimensions");Object.defineProperty(exports,"useDimensions",{enumerable:!0,get:function(){return useDimensions_1.useDimensions}});var usePrevious_1=require("./usePrevious");Object.defineProperty(exports,"usePrevious",{enumerable:!0,get:function(){return usePrevious_1.usePrevious}});var useActivateExample_1=require("./useActivateExample");Object.defineProperty(exports,"useActivateExample",{enumerable:!0,get:function(){return useActivateExample_1.useActivateExample}});var useRouter_1=require("./useRouter");Object.defineProperty(exports,"useRouter",{enumerable:!0,get:function(){return useRouter_1.useRouter}});var useContentItems_1=require("./useContentItems");Object.defineProperty(exports,"useContentItems",{enumerable:!0,get:function(){return useContentItems_1.useContentItems}});var useActiveWithFallback_1=require("./useActiveWithFallback");Object.defineProperty(exports,"useActiveWithFallback",{enumerable:!0,get:function(){return useActiveWithFallback_1.useActiveWithFallback}});var useUppercase2LowercaseRedirect_1=require("./useUppercase2LowercaseRedirect");Object.defineProperty(exports,"useUppercase2LowercaseRedirect",{enumerable:!0,get:function(){return useUppercase2LowercaseRedirect_1.useUppercase2LowercaseRedirect}});
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildContentItems=exports.buildMenuStructure=void 0;const tags_1=require("./tags"),markdown_1=require("./markdown"),utils_1=require("../../utils");function buildMenuStructure(t,e){var i,n,o;const{definition:u}=t,{schemaDefinitionsTagName:s}=e,r=[{id:"",name:(null===(n=null===(i=null==u?void 0:u.info)||void 0===i?void 0:i["x-seo"])||void 0===n?void 0:n.title)||(null===(o=null==u?void 0:u.info)||void 0===o?void 0:o.title)||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:u.info,items:[]}],d=[...u.tags||[]];!d.find((t=>(null==t?void 0:t.name)===s))&&s&&d.push({name:s});const l=(0,tags_1.getTagsWithOperations)(t,d),a=u["x-tagGroups"];return r.push(...(0,markdown_1.addMarkdownItems)((0,utils_1.getValueFromMdParsedExtension)(u.info,"description")||"",void 0,1)),a&&a.length>0?r.push(...(0,tags_1.getTagGroupsItems)(t,void 0,a,l,e)):r.push(...(0,tags_1.getTagsItems)(t,l,void 0,void 0,e)),r}function buildContentItems(t,e){const i=buildMenuStructure(t,e);return{contentItems:i,flatItems:(0,utils_1.flattenByProp)(i||[],"items")}}exports.buildMenuStructure=buildMenuStructure,exports.buildContentItems=buildContentItems;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildContentItems=exports.buildMenuStructure=void 0;const tags_1=require("./tags"),markdown_1=require("./markdown"),utils_1=require("../../utils"),constants_1=require("../../constants");function buildMenuStructure(t,e){var n,i,s;const{definition:o}=t,{schemaDefinitionsTagName:u}=e,r=[{id:"",name:(null===(i=null===(n=null==o?void 0:o.info)||void 0===n?void 0:n["x-seo"])||void 0===i?void 0:i.title)||(null===(s=null==o?void 0:o.info)||void 0===s?void 0:s.title)||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:o.info,items:[]}],d=[...o.tags||[]];d.some((t=>t.name===constants_1.DEFAULT_WEBHOOKS_TAG_NAME))||d.push({name:constants_1.DEFAULT_WEBHOOKS_TAG_NAME});!d.find((t=>(null==t?void 0:t.name)===u))&&u&&d.push({name:u});const l=(0,tags_1.getTagsWithOperations)(t,d),a=o["x-tagGroups"];return r.push(...(0,markdown_1.addMarkdownItems)((0,utils_1.getValueFromMdParsedExtension)(o.info,"description")||"",void 0,1)),a&&a.length>0?r.push(...(0,tags_1.getTagGroupsItems)(t,void 0,a,l,e)):r.push(...(0,tags_1.getTagsItems)(t,l,void 0,void 0,e)),r}function buildContentItems(t,e){const n=buildMenuStructure(t,e);return{contentItems:n,flatItems:(0,utils_1.flattenByProp)(n||[],"items")}}exports.buildMenuStructure=buildMenuStructure,exports.buildContentItems=buildContentItems;
2
2
  //# sourceMappingURL=builder.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getTagsWithOperations=exports.getTagGroupsItems=exports.getTagsItems=void 0;const group_1=require("../../models/group"),constants_1=require("../../constants"),utils_1=require("../../utils"),operation_1=require("./operation"),markdown_1=require("./markdown");function getTagsItems(e,t,s,o,n){let a;if(a=void 0===o?Object.keys(t):o.tags,!Array.isArray(a))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const r=a.map((e=>t[e]?(t[e].used=!0,t[e]):(console.warn(`Non-existing tag "${e}" is added to the group "${null==o?void 0:o.name}"`),null))),i=[];for(const t of r){if(!t)continue;const o=(0,group_1.getTagOrGroup)("tag",t,s);if(o.depth=constants_1.GROUP_DEPTH+1,""===t.name){const e=[...(0,markdown_1.addMarkdownItems)((0,utils_1.getValueFromMdParsedExtension)(t,"description")||"",o,o.depth+1),...(0,operation_1.getOperationsItems)(void 0,t,o.depth+1)];i.push(...e);continue}const a=getTagRelatedSchema({definition:e.definition,tag:t,parent:o,schemaDefinitionsTagName:n.schemaDefinitionsTagName});o.items=[...a,...(0,markdown_1.addMarkdownItems)((0,utils_1.getValueFromMdParsedExtension)(t,"description")||"",o,o.depth+1),...(0,operation_1.getOperationsItems)(o,t,o.depth+1)],i.push(o)}return i}function getTagGroupsItems(e,t,s,o,n){const a=[];for(const r of s){const s=(0,group_1.getTagOrGroup)("group",r,t);s.depth=constants_1.GROUP_DEPTH,s.items=getTagsItems(e,o,s,r,n),a.push(s)}return a}function getTagRelatedSchema({definition:e,tag:t,parent:s,schemaDefinitionsTagName:o}){var n;const a=o?[o]:[];return Object.entries((null===(n=e.components)||void 0===n?void 0:n.schemas)||{}).map((([e,o])=>{if(!(o["x-tags"]||a).includes(t.name))return null;const n=(0,group_1.getTagOrGroup)("schema",{name:e,"x-displayName":`${o.title||e}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${e}" /%}`,isSchema:!0,level:2},s);return n.depth=s.depth+1,n})).filter(Boolean)}function getTagsWithOperations(e,t){const{definition:s}=e,o={},n=s["x-webhooks"]||s.webhooks;for(const e of t||[])o[e.name]=Object.assign(Object.assign({},e),{operations:[]});return s.paths&&getTags(e,s.paths,o),n&&getTags(e,n,o,!0),o}function getTags(e,t,s,o){for(const n of Object.keys(t||{})){const a=t[n],r=Object.keys(a).filter(utils_1.isOperationName);for(const t of r){const r=a[t];if(a.$ref){const{resolved:t}=e.deref(a);getTags(e,{[n]:t},s,o);continue}let i=null==r?void 0:r.tags;i&&i.length||(i=[""]);for(const e of i){let i=s[e];void 0===i&&(i={name:e,operations:[]},s[e]=i),i["x-traitTag"]||i.operations.push(Object.assign(Object.assign({},r),{pathName:n,pointer:utils_1.JsonPointer.compile(["paths",n,t]),httpVerb:t,pathParameters:a.parameters||[],pathServers:a.servers,isWebhook:!!o}))}}}}exports.getTagsItems=getTagsItems,exports.getTagGroupsItems=getTagGroupsItems,exports.getTagsWithOperations=getTagsWithOperations;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getTagsWithOperations=exports.getTagGroupsItems=exports.getTagsItems=void 0;const group_1=require("../../models/group"),constants_1=require("../../constants"),utils_1=require("../../utils"),operation_1=require("./operation"),markdown_1=require("./markdown");function getTagsItems(e,t,s,o,n){let a;if(a=void 0===o?Object.keys(t):o.tags,!Array.isArray(a))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const r=a.map((e=>t[e]?(t[e].used=!0,t[e]):(console.warn(`Non-existing tag "${e}" is added to the group "${null==o?void 0:o.name}"`),null))),i=[];for(const t of r){if(!t)continue;const o=(0,group_1.getTagOrGroup)("tag",t,s);if(o.depth=constants_1.GROUP_DEPTH+1,""===t.name){const e=[...(0,markdown_1.addMarkdownItems)((0,utils_1.getValueFromMdParsedExtension)(t,"description")||"",o,o.depth+1),...(0,operation_1.getOperationsItems)(void 0,t,o.depth+1)];i.push(...e);continue}const a=getTagRelatedSchema({definition:e.definition,tag:t,parent:o,schemaDefinitionsTagName:n.schemaDefinitionsTagName});o.items=[...a,...(0,markdown_1.addMarkdownItems)((0,utils_1.getValueFromMdParsedExtension)(t,"description")||"",o,o.depth+1),...(0,operation_1.getOperationsItems)(o,t,o.depth+1)],i.push(o)}return i.filter((({name:e,items:t})=>e!==constants_1.DEFAULT_WEBHOOKS_TAG_NAME||t.length>0))}function getTagGroupsItems(e,t,s,o,n){const a=[];for(const r of s){const s=(0,group_1.getTagOrGroup)("group",r,t);s.depth=constants_1.GROUP_DEPTH,s.items=getTagsItems(e,o,s,r,n),a.push(s)}return a}function getTagRelatedSchema({definition:e,tag:t,parent:s,schemaDefinitionsTagName:o}){var n;const a=o?[o]:[];return Object.entries((null===(n=e.components)||void 0===n?void 0:n.schemas)||{}).map((([e,o])=>{if(!(o["x-tags"]||a).includes(t.name))return null;const n=(0,group_1.getTagOrGroup)("schema",{name:e,"x-displayName":`${o.title||e}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${e}" /%}`,isSchema:!0,level:2},s);return n.depth=s.depth+1,n})).filter(Boolean)}function getTagsWithOperations(e,t){const{definition:s}=e,o={},n=s["x-webhooks"]||s.webhooks;for(const e of t||[])o[e.name]=Object.assign(Object.assign({},e),{operations:[]});return s.paths&&getTags(e,s.paths,o),n&&getTags(e,n,o,!0),o}function getTags(e,t,s,o){for(const n of Object.keys(t||{})){const a=t[n],r=Object.keys(a).filter(utils_1.isOperationName);for(const t of r){const r=a[t];if(a.$ref){const{resolved:t}=e.deref(a);getTags(e,{[n]:t},s,o);continue}let i=null==r?void 0:r.tags;i&&i.length||(i=o?[constants_1.DEFAULT_WEBHOOKS_TAG_NAME]:[""]);for(const e of i){let i=s[e];void 0===i&&(i={name:e,operations:[]},s[e]=i),i["x-traitTag"]||i.operations.push(Object.assign(Object.assign({},r),{pathName:n,pointer:utils_1.JsonPointer.compile(["paths",n,t]),httpVerb:t,pathParameters:a.parameters||[],pathServers:a.servers,isWebhook:!!o}))}}}}exports.getTagsItems=getTagsItems,exports.getTagGroupsItems=getTagGroupsItems,exports.getTagsWithOperations=getTagsWithOperations;
2
2
  //# sourceMappingURL=tags.js.map
@@ -21,4 +21,3 @@ export * from './queryString';
21
21
  export * from './isMobile';
22
22
  export * from './replaceVariables';
23
23
  export * from './areArraysEqual';
24
- export * from './calculateAvgCharacterWidth';
@@ -1,2 +1,2 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var p=Object.getOwnPropertyDescriptor(r,t);p&&!("get"in p?!r.__esModule:p.writable||p.configurable)||(p={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,p)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./JsonPointer"),exports),__exportStar(require("./openapi"),exports),__exportStar(require("./helpers"),exports),__exportStar(require("./highlight"),exports),__exportStar(require("./dom"),exports),__exportStar(require("./debug"),exports),__exportStar(require("./sort"),exports),__exportStar(require("./argValuesHelpers"),exports),__exportStar(require("./theme-helpers"),exports),__exportStar(require("./debounce"),exports),__exportStar(require("./security-details"),exports),__exportStar(require("./session-storage"),exports),__exportStar(require("./local-storage"),exports),__exportStar(require("./parameters"),exports),__exportStar(require("./string"),exports),__exportStar(require("./test-utils"),exports),__exportStar(require("./compose"),exports),__exportStar(require("./saveTextBeforeHeading"),exports),__exportStar(require("./path"),exports),__exportStar(require("./queryString"),exports),__exportStar(require("./isMobile"),exports),__exportStar(require("./replaceVariables"),exports),__exportStar(require("./areArraysEqual"),exports),__exportStar(require("./calculateAvgCharacterWidth"),exports);
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var p=Object.getOwnPropertyDescriptor(r,t);p&&!("get"in p?!r.__esModule:p.writable||p.configurable)||(p={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,p)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./JsonPointer"),exports),__exportStar(require("./openapi"),exports),__exportStar(require("./helpers"),exports),__exportStar(require("./highlight"),exports),__exportStar(require("./dom"),exports),__exportStar(require("./debug"),exports),__exportStar(require("./sort"),exports),__exportStar(require("./argValuesHelpers"),exports),__exportStar(require("./theme-helpers"),exports),__exportStar(require("./debounce"),exports),__exportStar(require("./security-details"),exports),__exportStar(require("./session-storage"),exports),__exportStar(require("./local-storage"),exports),__exportStar(require("./parameters"),exports),__exportStar(require("./string"),exports),__exportStar(require("./test-utils"),exports),__exportStar(require("./compose"),exports),__exportStar(require("./saveTextBeforeHeading"),exports),__exportStar(require("./path"),exports),__exportStar(require("./queryString"),exports),__exportStar(require("./isMobile"),exports),__exportStar(require("./replaceVariables"),exports),__exportStar(require("./areArraysEqual"),exports);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{useActiveSectionId}from"@redocly/theme";import{useMemo}from"react";import{useLocation}from"react-router-dom";import{pathMatchedLink}from"../../../utils";export function useMenuItems({items:e}){const t=useLocation(),i=useActiveSectionId(t,!1,!1);return useMemo((()=>mapAndSetActiveItems(e,i,t)),[i,e,t])}function mapAndSetActiveItems(e,t="",i){const s=[];return convertOpenAPIDocs2Sidebar({contentItems:e,sidebarItems:s,activeItemId:t,location:i}),s}function isItemActive(e,t="",i){return!!e.href&&(t?e.id===t:pathMatchedLink(i,e.href))}function isSubItemActive(e,t="",i){return(e.items||[]).some((e=>isItemActive(e,t,i)||isSubItemActive(e,t,i)))}function convertOpenAPIDocs2Sidebar(e){const{contentItems:t,sidebarItems:i,activeItemId:s,location:c}=e;let o=!0;for(const n of t){const t=isItemActive(n,s,c),a=isSubItemActive(n,s,c);switch(n.type){case"group":i.push({type:"separator",label:n.name,active:t,hasActiveSubItem:a}),convertOpenAPIDocs2Sidebar(Object.assign(Object.assign({},e),{contentItems:n.items,sidebarItems:i}));break;case"tag":const m={type:"group",label:n.name,items:[],link:n.href,active:t,hasActiveSubItem:a,modified:!0};i.push(m),convertOpenAPIDocs2Sidebar({contentItems:n.items,sidebarItems:m.items||[],activeItemId:s,location:c});break;case"operation":case"schema":n.isWebhook&&o&&(i.push({type:"separator",label:"Webhooks",variant:"secondary"}),o=!1),i.push({type:"link",label:n.name,httpVerb:"schema"===n.type?"schema":n.httpVerb,link:n.href,badges:n.badges,active:t,hasActiveSubItem:a,modified:!0,deprecated:n.deprecated});break;case"section":if(-1===n.depth)continue;const r={type:n.items.length?"group":"link",label:n.name,link:n.href,items:[],active:t,hasActiveSubItem:a,modified:!0};i.push(r),n.items.length&&convertOpenAPIDocs2Sidebar({contentItems:n.items,sidebarItems:r.items,activeItemId:s,location:c})}}}
1
+ import{useActiveSectionId}from"@redocly/theme";import{useMemo}from"react";import{useLocation}from"react-router-dom";import{pathMatchedLink}from"../../../utils";import{DEFAULT_WEBHOOKS_TAG_NAME}from"../../../constants";export function useMenuItems({items:e}){const t=useLocation(),i=useActiveSectionId(t,!1,!1);return useMemo((()=>mapAndSetActiveItems(e,i,t)),[i,e,t])}function mapAndSetActiveItems(e,t="",i){const s=[];return convertOpenAPIDocs2Sidebar({contentItems:e,sidebarItems:s,activeItemId:t,location:i}),s}function isItemActive(e,t="",i){return!!e.href&&(t?e.id===t:pathMatchedLink(i,e.href))}function isSubItemActive(e,t="",i){return(e.items||[]).some((e=>isItemActive(e,t,i)||isSubItemActive(e,t,i)))}function convertOpenAPIDocs2Sidebar(e){const{contentItems:t,sidebarItems:i,activeItemId:s,location:c}=e;let o=!0;for(const n of t){const t=isItemActive(n,s,c),a=isSubItemActive(n,s,c);switch(n.type){case"group":i.push({type:"separator",label:n.name,active:t,hasActiveSubItem:a}),convertOpenAPIDocs2Sidebar(Object.assign(Object.assign({},e),{contentItems:n.items,sidebarItems:i}));break;case"tag":const m={type:"group",label:n.name,items:[],link:n.href,active:t,hasActiveSubItem:a,modified:!0};i.push(m),convertOpenAPIDocs2Sidebar({contentItems:n.items,sidebarItems:m.items||[],activeItemId:s,location:c});break;case"operation":case"schema":n.isWebhook&&o&&n.parent.name!==DEFAULT_WEBHOOKS_TAG_NAME&&(i.push({type:"separator",label:"Webhooks",variant:"secondary"}),o=!1),i.push({type:"link",label:n.name,httpVerb:"schema"===n.type?"schema":n.httpVerb,link:n.href,badges:n.badges,active:t,hasActiveSubItem:a,modified:!0,deprecated:n.deprecated});break;case"section":if(-1===n.depth)continue;const r={type:n.items.length?"group":"link",label:n.name,link:n.href,items:[],active:t,hasActiveSubItem:a,modified:!0};i.push(r),n.items.length&&convertOpenAPIDocs2Sidebar({contentItems:n.items,sidebarItems:r.items,activeItemId:s,location:c})}}}
2
2
  //# sourceMappingURL=useMenuItems.js.map
@@ -2,4 +2,4 @@ import type { ReactElement } from 'react';
2
2
  export interface ExpandableExampleProps {
3
3
  value: string;
4
4
  }
5
- export declare function ExpandableExample({ value }: ExpandableExampleProps): ReactElement | null;
5
+ export declare function ExpandableExample({ value }: ExpandableExampleProps): ReactElement;
@@ -1,4 +1,4 @@
1
- import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import styled from"styled-components";import{Button}from"@redocly/theme";import{Markdown}from"../../Markdown";import{ExampleValue}from"../Fields";import{useExpandableField}from"../../../hooks";export function ExpandableExample({value:e}){const{displayText:n,containerRef:a,toggleExpand:o,expanded:l}=useExpandableField({value:e});return _jsxs(Container,{ref:a,children:[_jsx(Markdown,{source:n}),(e!==n||l)&&_jsx(ButtonWrap,{children:_jsx(Button,{variant:"link",size:"small",onClick:o,children:l?"Hide example":"Show example"})})]})}const Container=styled(ExampleValue)`
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import styled from"styled-components";import{Button}from"@redocly/theme";import{useMemo,useState}from"react";import{Markdown}from"../../Markdown";import{ExampleValue}from"../Fields";const MAX_EXAMPLE_LENGTH=150;export function ExpandableExample({value:e}){const[t,s]=useState(!1),n=useMemo((()=>e.slice(0,MAX_EXAMPLE_LENGTH)),[e]);return _jsxs(Container,{children:[_jsx(Markdown,{source:t?e:n}),(e!==n||t)&&_jsx(ButtonWrap,{children:_jsx(Button,{variant:"link",size:"small",onClick:()=>{s(!t)},children:t?"Hide example":"Show example"})})]})}const Container=styled(ExampleValue)`
2
2
  display: inline;
3
3
 
4
4
  & * {
@@ -17,6 +17,7 @@ export declare const LEGACY_REGEXP = "^ {0,3}<!-- ReDoc-Inject:\\s+?<({component
17
17
  export declare const MDX_COMPONENT_REGEXP: string;
18
18
  export declare const COMPONENT_REGEXP: string;
19
19
  export declare const DEFAULT_TAG_SLUG = "other";
20
+ export declare const DEFAULT_WEBHOOKS_TAG_NAME = "webhooks";
20
21
  export declare const LOADING_STATE: {
21
22
  NOT_LOADED: string;
22
23
  LOADING: string;
@@ -1,2 +1,2 @@
1
- export var WindowReferenceOptions;!function(o){o.ON_DEEP_LINK_CLICK="onDeepLinkClick",o.REQUEST_INTERCEPTOR="requestInterceptor",o.HOOKS="hooks"}(WindowReferenceOptions||(WindowReferenceOptions={}));export var MediaTypes;!function(o){o.OCTET_STREAM="application/octet-stream",o.MULTIPART="multipart/form-data",o.URL_ENCODED="application/x-www-form-urlencoded",o.JSON="application/json",o.XML="application/xml"}(MediaTypes||(MediaTypes={}));export const SECTION_ATTR="data-section-id";export const FIELD_ATTR="data-field-id";export const GROUP_DEPTH=0;export const LEGACY_REGEXP="^ {0,3}\x3c!-- ReDoc-Inject:\\s+?<({component}).*?/?>\\s+?--\x3e\\s*$";export const MDX_COMPONENT_REGEXP="(?:^ {0,3}<({component})([\\s\\S]*?)>([\\s\\S]*?)</\\2>|^ {0,3}<({component})([\\s\\S]*?)(?:/>|\\n{2,}))";export const COMPONENT_REGEXP="(?:"+LEGACY_REGEXP+"|"+MDX_COMPONENT_REGEXP+")";export const DEFAULT_TAG_SLUG="other";export const LOADING_STATE={NOT_LOADED:"NOT_LOADED",LOADING:"LOADING",LOADED:"LOADED"};
1
+ export var WindowReferenceOptions;!function(o){o.ON_DEEP_LINK_CLICK="onDeepLinkClick",o.REQUEST_INTERCEPTOR="requestInterceptor",o.HOOKS="hooks"}(WindowReferenceOptions||(WindowReferenceOptions={}));export var MediaTypes;!function(o){o.OCTET_STREAM="application/octet-stream",o.MULTIPART="multipart/form-data",o.URL_ENCODED="application/x-www-form-urlencoded",o.JSON="application/json",o.XML="application/xml"}(MediaTypes||(MediaTypes={}));export const SECTION_ATTR="data-section-id";export const FIELD_ATTR="data-field-id";export const GROUP_DEPTH=0;export const LEGACY_REGEXP="^ {0,3}\x3c!-- ReDoc-Inject:\\s+?<({component}).*?/?>\\s+?--\x3e\\s*$";export const MDX_COMPONENT_REGEXP="(?:^ {0,3}<({component})([\\s\\S]*?)>([\\s\\S]*?)</\\2>|^ {0,3}<({component})([\\s\\S]*?)(?:/>|\\n{2,}))";export const COMPONENT_REGEXP="(?:"+LEGACY_REGEXP+"|"+MDX_COMPONENT_REGEXP+")";export const DEFAULT_TAG_SLUG="other";export const DEFAULT_WEBHOOKS_TAG_NAME="webhooks";export const LOADING_STATE={NOT_LOADED:"NOT_LOADED",LOADING:"LOADING",LOADED:"LOADED"};
2
2
  //# sourceMappingURL=constants.js.map
@@ -5,4 +5,3 @@ export { useRouter } from './useRouter';
5
5
  export { useContentItems } from './useContentItems';
6
6
  export { useActiveWithFallback } from './useActiveWithFallback';
7
7
  export { useUppercase2LowercaseRedirect } from './useUppercase2LowercaseRedirect';
8
- export { useExpandableField } from './useExpandableField';
@@ -1,2 +1,2 @@
1
- export{useDimensions}from"./useDimensions";export{usePrevious}from"./usePrevious";export{useActivateExample}from"./useActivateExample";export{useRouter}from"./useRouter";export{useContentItems}from"./useContentItems";export{useActiveWithFallback}from"./useActiveWithFallback";export{useUppercase2LowercaseRedirect}from"./useUppercase2LowercaseRedirect";export{useExpandableField}from"./useExpandableField";
1
+ export{useDimensions}from"./useDimensions";export{usePrevious}from"./usePrevious";export{useActivateExample}from"./useActivateExample";export{useRouter}from"./useRouter";export{useContentItems}from"./useContentItems";export{useActiveWithFallback}from"./useActiveWithFallback";export{useUppercase2LowercaseRedirect}from"./useUppercase2LowercaseRedirect";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{getTagGroupsItems,getTagsItems,getTagsWithOperations}from"./tags";import{addMarkdownItems}from"./markdown";import{flattenByProp,getValueFromMdParsedExtension}from"../../utils";export function buildMenuStructure(t,e){var o,i,n;const{definition:s}=t,{schemaDefinitionsTagName:r}=e,d=[{id:"",name:(null===(i=null===(o=null==s?void 0:s.info)||void 0===o?void 0:o["x-seo"])||void 0===i?void 0:i.title)||(null===(n=null==s?void 0:s.info)||void 0===n?void 0:n.title)||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:s.info,items:[]}],a=[...s.tags||[]];!a.find((t=>(null==t?void 0:t.name)===r))&&r&&a.push({name:r});const u=getTagsWithOperations(t,a),l=s["x-tagGroups"];return d.push(...addMarkdownItems(getValueFromMdParsedExtension(s.info,"description")||"",void 0,1)),l&&l.length>0?d.push(...getTagGroupsItems(t,void 0,l,u,e)):d.push(...getTagsItems(t,u,void 0,void 0,e)),d}export function buildContentItems(t,e){const o=buildMenuStructure(t,e);return{contentItems:o,flatItems:flattenByProp(o||[],"items")}}
1
+ import{getTagGroupsItems,getTagsItems,getTagsWithOperations}from"./tags";import{addMarkdownItems}from"./markdown";import{flattenByProp,getValueFromMdParsedExtension}from"../../utils";import{DEFAULT_WEBHOOKS_TAG_NAME}from"../../constants";export function buildMenuStructure(t,e){var o,n,i;const{definition:s}=t,{schemaDefinitionsTagName:r}=e,a=[{id:"",name:(null===(n=null===(o=null==s?void 0:s.info)||void 0===o?void 0:o["x-seo"])||void 0===n?void 0:n.title)||(null===(i=null==s?void 0:s.info)||void 0===i?void 0:i.title)||"Overview",href:"/",depth:1,level:1,type:"section",infoDefinition:s.info,items:[]}],d=[...s.tags||[]];d.some((t=>t.name===DEFAULT_WEBHOOKS_TAG_NAME))||d.push({name:DEFAULT_WEBHOOKS_TAG_NAME});!d.find((t=>(null==t?void 0:t.name)===r))&&r&&d.push({name:r});const m=getTagsWithOperations(t,d),u=s["x-tagGroups"];return a.push(...addMarkdownItems(getValueFromMdParsedExtension(s.info,"description")||"",void 0,1)),u&&u.length>0?a.push(...getTagGroupsItems(t,void 0,u,m,e)):a.push(...getTagsItems(t,m,void 0,void 0,e)),a}export function buildContentItems(t,e){const o=buildMenuStructure(t,e);return{contentItems:o,flatItems:flattenByProp(o||[],"items")}}
2
2
  //# sourceMappingURL=builder.js.map
@@ -1,2 +1,2 @@
1
- import{getTagOrGroup}from"../../models/group";import{GROUP_DEPTH}from"../../constants";import{getValueFromMdParsedExtension,isOperationName,JsonPointer}from"../../utils";import{getOperationsItems}from"./operation";import{addMarkdownItems}from"./markdown";export function getTagsItems(e,t,o,n,s){let a;if(a=void 0===n?Object.keys(t):n.tags,!Array.isArray(a))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const r=a.map((e=>t[e]?(t[e].used=!0,t[e]):(console.warn(`Non-existing tag "${e}" is added to the group "${null==n?void 0:n.name}"`),null))),i=[];for(const t of r){if(!t)continue;const n=getTagOrGroup("tag",t,o);if(n.depth=GROUP_DEPTH+1,""===t.name){const e=[...addMarkdownItems(getValueFromMdParsedExtension(t,"description")||"",n,n.depth+1),...getOperationsItems(void 0,t,n.depth+1)];i.push(...e);continue}const a=getTagRelatedSchema({definition:e.definition,tag:t,parent:n,schemaDefinitionsTagName:s.schemaDefinitionsTagName});n.items=[...a,...addMarkdownItems(getValueFromMdParsedExtension(t,"description")||"",n,n.depth+1),...getOperationsItems(n,t,n.depth+1)],i.push(n)}return i}export function getTagGroupsItems(e,t,o,n,s){const a=[];for(const r of o){const o=getTagOrGroup("group",r,t);o.depth=GROUP_DEPTH,o.items=getTagsItems(e,n,o,r,s),a.push(o)}return a}function getTagRelatedSchema({definition:e,tag:t,parent:o,schemaDefinitionsTagName:n}){var s;const a=n?[n]:[];return Object.entries((null===(s=e.components)||void 0===s?void 0:s.schemas)||{}).map((([e,n])=>{if(!(n["x-tags"]||a).includes(t.name))return null;const s=getTagOrGroup("schema",{name:e,"x-displayName":`${n.title||e}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${e}" /%}`,isSchema:!0,level:2},o);return s.depth=o.depth+1,s})).filter(Boolean)}export function getTagsWithOperations(e,t){const{definition:o}=e,n={},s=o["x-webhooks"]||o.webhooks;for(const e of t||[])n[e.name]=Object.assign(Object.assign({},e),{operations:[]});return o.paths&&getTags(e,o.paths,n),s&&getTags(e,s,n,!0),n}function getTags(e,t,o,n){for(const s of Object.keys(t||{})){const a=t[s],r=Object.keys(a).filter(isOperationName);for(const t of r){const r=a[t];if(a.$ref){const{resolved:t}=e.deref(a);getTags(e,{[s]:t},o,n);continue}let i=null==r?void 0:r.tags;i&&i.length||(i=[""]);for(const e of i){let i=o[e];void 0===i&&(i={name:e,operations:[]},o[e]=i),i["x-traitTag"]||i.operations.push(Object.assign(Object.assign({},r),{pathName:s,pointer:JsonPointer.compile(["paths",s,t]),httpVerb:t,pathParameters:a.parameters||[],pathServers:a.servers,isWebhook:!!n}))}}}}
1
+ import{getTagOrGroup}from"../../models/group";import{DEFAULT_WEBHOOKS_TAG_NAME,GROUP_DEPTH}from"../../constants";import{getValueFromMdParsedExtension,isOperationName,JsonPointer}from"../../utils";import{getOperationsItems}from"./operation";import{addMarkdownItems}from"./markdown";export function getTagsItems(e,t,o,n,s){let a;if(a=void 0===n?Object.keys(t):n.tags,!Array.isArray(a))return console.warn("Unexpected values of tags. Check tags or x-tagGroups in your definition."),[];const i=a.map((e=>t[e]?(t[e].used=!0,t[e]):(console.warn(`Non-existing tag "${e}" is added to the group "${null==n?void 0:n.name}"`),null))),r=[];for(const t of i){if(!t)continue;const n=getTagOrGroup("tag",t,o);if(n.depth=GROUP_DEPTH+1,""===t.name){const e=[...addMarkdownItems(getValueFromMdParsedExtension(t,"description")||"",n,n.depth+1),...getOperationsItems(void 0,t,n.depth+1)];r.push(...e);continue}const a=getTagRelatedSchema({definition:e.definition,tag:t,parent:n,schemaDefinitionsTagName:s.schemaDefinitionsTagName});n.items=[...a,...addMarkdownItems(getValueFromMdParsedExtension(t,"description")||"",n,n.depth+1),...getOperationsItems(n,t,n.depth+1)],r.push(n)}return r.filter((({name:e,items:t})=>e!==DEFAULT_WEBHOOKS_TAG_NAME||t.length>0))}export function getTagGroupsItems(e,t,o,n,s){const a=[];for(const i of o){const o=getTagOrGroup("group",i,t);o.depth=GROUP_DEPTH,o.items=getTagsItems(e,n,o,i,s),a.push(o)}return a}function getTagRelatedSchema({definition:e,tag:t,parent:o,schemaDefinitionsTagName:n}){var s;const a=n?[n]:[];return Object.entries((null===(s=e.components)||void 0===s?void 0:s.schemas)||{}).map((([e,n])=>{if(!(n["x-tags"]||a).includes(t.name))return null;const s=getTagOrGroup("schema",{name:e,"x-displayName":`${n.title||e}`,description:`{% schemaDefinition showWriteOnly="true" schemaRef="#/components/schemas/${e}" /%}`,isSchema:!0,level:2},o);return s.depth=o.depth+1,s})).filter(Boolean)}export function getTagsWithOperations(e,t){const{definition:o}=e,n={},s=o["x-webhooks"]||o.webhooks;for(const e of t||[])n[e.name]=Object.assign(Object.assign({},e),{operations:[]});return o.paths&&getTags(e,o.paths,n),s&&getTags(e,s,n,!0),n}function getTags(e,t,o,n){for(const s of Object.keys(t||{})){const a=t[s],i=Object.keys(a).filter(isOperationName);for(const t of i){const i=a[t];if(a.$ref){const{resolved:t}=e.deref(a);getTags(e,{[s]:t},o,n);continue}let r=null==i?void 0:i.tags;r&&r.length||(r=n?[DEFAULT_WEBHOOKS_TAG_NAME]:[""]);for(const e of r){let r=o[e];void 0===r&&(r={name:e,operations:[]},o[e]=r),r["x-traitTag"]||r.operations.push(Object.assign(Object.assign({},i),{pathName:s,pointer:JsonPointer.compile(["paths",s,t]),httpVerb:t,pathParameters:a.parameters||[],pathServers:a.servers,isWebhook:!!n}))}}}}
2
2
  //# sourceMappingURL=tags.js.map
@@ -21,4 +21,3 @@ export * from './queryString';
21
21
  export * from './isMobile';
22
22
  export * from './replaceVariables';
23
23
  export * from './areArraysEqual';
24
- export * from './calculateAvgCharacterWidth';
@@ -1,2 +1,2 @@
1
- export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./dom";export*from"./debug";export*from"./sort";export*from"./argValuesHelpers";export*from"./theme-helpers";export*from"./debounce";export*from"./security-details";export*from"./session-storage";export*from"./local-storage";export*from"./parameters";export*from"./string";export*from"./test-utils";export*from"./compose";export*from"./saveTextBeforeHeading";export*from"./path";export*from"./queryString";export*from"./isMobile";export*from"./replaceVariables";export*from"./areArraysEqual";export*from"./calculateAvgCharacterWidth";
1
+ export*from"./JsonPointer";export*from"./openapi";export*from"./helpers";export*from"./highlight";export*from"./dom";export*from"./debug";export*from"./sort";export*from"./argValuesHelpers";export*from"./theme-helpers";export*from"./debounce";export*from"./security-details";export*from"./session-storage";export*from"./local-storage";export*from"./parameters";export*from"./string";export*from"./test-utils";export*from"./compose";export*from"./saveTextBeforeHeading";export*from"./path";export*from"./queryString";export*from"./isMobile";export*from"./replaceVariables";export*from"./areArraysEqual";
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/openapi-docs",
3
- "version": "3.2.11",
3
+ "version": "3.3.0",
4
4
  "description": "Redocly OpenAPI Docs",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -44,8 +44,8 @@
44
44
  "url": "~0.11.0",
45
45
  "url-template": "^2.0.8",
46
46
  "util": "~0.12.5",
47
- "@redocly/replay": "0.3.14",
48
- "@redocly/config": "0.8.1"
47
+ "@redocly/replay": "0.3.15",
48
+ "@redocly/config": "0.8.2"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@testing-library/jest-dom": "6.1.5",
@@ -92,7 +92,7 @@
92
92
  "webpack": "5.91.0",
93
93
  "webpack-cli": "5.1.4",
94
94
  "webpack-dev-server": "4.15.2",
95
- "@redocly/theme": "0.39.0"
95
+ "@redocly/theme": "0.39.1"
96
96
  },
97
97
  "scripts": {
98
98
  "start": "webpack serve --mode=development --hot",
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const react_hooks_1=require("@testing-library/react-hooks"),useExpandableField_1=require("../useExpandableField");jest.mock("../../utils",(()=>({calculateAvgCharacterWidth:jest.fn((()=>10))}))),describe("useExpandableField",(()=>{const e="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";it("should truncate text correctly when not expanded",(()=>{const{result:t}=(0,react_hooks_1.renderHook)((()=>(0,useExpandableField_1.useExpandableField)({value:e,lines:2})));t.current.containerRef.current={parentElement:{getBoundingClientRect:()=>({width:100})}},(0,react_hooks_1.act)((()=>{t.current.toggleExpand()})),(0,react_hooks_1.act)((()=>{t.current.toggleExpand()})),expect(t.current.displayText.length).toBeLessThanOrEqual(23)})),it("should show full text when expanded",(()=>{const{result:t}=(0,react_hooks_1.renderHook)((()=>(0,useExpandableField_1.useExpandableField)({value:e,lines:2})));t.current.containerRef.current={parentElement:{getBoundingClientRect:()=>({width:100})}},(0,react_hooks_1.act)((()=>{t.current.toggleExpand()})),expect(t.current.displayText).toEqual(e)})),it("should toggle expanded state correctly",(()=>{const{result:t}=(0,react_hooks_1.renderHook)((()=>(0,useExpandableField_1.useExpandableField)({value:e,lines:2})));expect(t.current.expanded).toBe(!1),(0,react_hooks_1.act)((()=>{t.current.toggleExpand()})),expect(t.current.expanded).toBe(!0),(0,react_hooks_1.act)((()=>{t.current.toggleExpand()})),expect(t.current.expanded).toBe(!1)}))}));
2
- //# sourceMappingURL=useExpandableField.test.js.map
@@ -1,12 +0,0 @@
1
- /// <reference types="react" />
2
- export interface UseExpandableFieldProps {
3
- value: string;
4
- lines?: number;
5
- }
6
- export interface UseExpandableFieldResult {
7
- expanded: boolean;
8
- displayText: string;
9
- containerRef: React.RefObject<HTMLDivElement>;
10
- toggleExpand: () => void;
11
- }
12
- export declare function useExpandableField({ value, lines, }: UseExpandableFieldProps): UseExpandableFieldResult;
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useExpandableField=void 0;const react_1=require("react"),utils_1=require("../utils");function useExpandableField({value:e,lines:t=2}){const[a,l]=(0,react_1.useState)(!1),n=(0,react_1.useRef)(null),[r,s]=(0,react_1.useState)(e);(0,react_1.useLayoutEffect)((()=>{var l;if(null===(l=n.current)||void 0===l?void 0:l.parentElement){const l=n.current.parentElement,r=l.getBoundingClientRect().width,i=(0,utils_1.calculateAvgCharacterWidth)(l),c=Math.floor(r/i);if(a)s(e);else{const a=u(e,c*t);s(a)}}}),[n,a,t,e]);const u=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...`;return{expanded:a,displayText:r,containerRef:n,toggleExpand:()=>{l((e=>!e))}}}exports.useExpandableField=useExpandableField;
2
- //# sourceMappingURL=useExpandableField.js.map
@@ -1 +0,0 @@
1
- export declare function calculateAvgCharacterWidth(parentElement: HTMLElement): number;
@@ -1,2 +0,0 @@
1
- "use strict";function calculateAvgCharacterWidth(t){const e=document.createElement("span");e.style.visibility="hidden",e.style.whiteSpace="nowrap",e.textContent="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t.appendChild(e);const a=e.getBoundingClientRect().width/e.textContent.length;return t.removeChild(e),a}Object.defineProperty(exports,"__esModule",{value:!0}),exports.calculateAvgCharacterWidth=void 0,exports.calculateAvgCharacterWidth=calculateAvgCharacterWidth;
2
- //# sourceMappingURL=calculateAvgCharacterWidth.js.map
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- import{renderHook,act}from"@testing-library/react-hooks";import{useExpandableField}from"../useExpandableField";jest.mock("../../utils",(()=>({calculateAvgCharacterWidth:jest.fn((()=>10))}))),describe("useExpandableField",(()=>{const e="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";it("should truncate text correctly when not expanded",(()=>{const{result:t}=renderHook((()=>useExpandableField({value:e,lines:2})));t.current.containerRef.current={parentElement:{getBoundingClientRect:()=>({width:100})}},act((()=>{t.current.toggleExpand()})),act((()=>{t.current.toggleExpand()})),expect(t.current.displayText.length).toBeLessThanOrEqual(23)})),it("should show full text when expanded",(()=>{const{result:t}=renderHook((()=>useExpandableField({value:e,lines:2})));t.current.containerRef.current={parentElement:{getBoundingClientRect:()=>({width:100})}},act((()=>{t.current.toggleExpand()})),expect(t.current.displayText).toEqual(e)})),it("should toggle expanded state correctly",(()=>{const{result:t}=renderHook((()=>useExpandableField({value:e,lines:2})));expect(t.current.expanded).toBe(!1),act((()=>{t.current.toggleExpand()})),expect(t.current.expanded).toBe(!0),act((()=>{t.current.toggleExpand()})),expect(t.current.expanded).toBe(!1)}))}));
2
- //# sourceMappingURL=useExpandableField.test.js.map
@@ -1,12 +0,0 @@
1
- /// <reference types="react" />
2
- export interface UseExpandableFieldProps {
3
- value: string;
4
- lines?: number;
5
- }
6
- export interface UseExpandableFieldResult {
7
- expanded: boolean;
8
- displayText: string;
9
- containerRef: React.RefObject<HTMLDivElement>;
10
- toggleExpand: () => void;
11
- }
12
- export declare function useExpandableField({ value, lines, }: UseExpandableFieldProps): UseExpandableFieldResult;
@@ -1,2 +0,0 @@
1
- import{useState,useRef,useLayoutEffect}from"react";import{calculateAvgCharacterWidth}from"../utils";export function useExpandableField({value:e,lines:t=2}){const[a,n]=useState(!1),l=useRef(null),[r,u]=useState(e);useLayoutEffect((()=>{var n;if(null===(n=l.current)||void 0===n?void 0:n.parentElement){const n=l.current.parentElement,r=n.getBoundingClientRect().width,o=calculateAvgCharacterWidth(n),i=Math.floor(r/o);if(a)u(e);else{const a=c(e,i*t);u(a)}}}),[l,a,t,e]);const c=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...`;return{expanded:a,displayText:r,containerRef:l,toggleExpand:()=>{n((e=>!e))}}}
2
- //# sourceMappingURL=useExpandableField.js.map
@@ -1 +0,0 @@
1
- export declare function calculateAvgCharacterWidth(parentElement: HTMLElement): number;
@@ -1,2 +0,0 @@
1
- export function calculateAvgCharacterWidth(t){const e=document.createElement("span");e.style.visibility="hidden",e.style.whiteSpace="nowrap",e.textContent="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t.appendChild(e);const n=e.getBoundingClientRect().width/e.textContent.length;return t.removeChild(e),n}
2
- //# sourceMappingURL=calculateAvgCharacterWidth.js.map