@digi-frontend/dgate-api-documentation 1.4.7 → 1.4.91

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 (76) hide show
  1. package/dist/_virtual/index4.js +1 -1
  2. package/dist/_virtual/index5.js +1 -1
  3. package/dist/_virtual/index6.js +1 -1
  4. package/dist/_virtual/index7.js +1 -1
  5. package/dist/node_modules/toposort/index.js +1 -1
  6. package/dist/node_modules/yup/index.esm.js +1 -1
  7. package/dist/src/components/InfoForm/InfoForm.js +1 -1
  8. package/dist/src/components/InfoForm/InfoForm.js.map +1 -1
  9. package/dist/src/components/InfoForm/InfoForm.module.scss.js +1 -1
  10. package/dist/src/components/JsonInput/JsonInput.js +1 -1
  11. package/dist/src/components/JsonInput/JsonInput.js.map +1 -1
  12. package/dist/src/components/JsonInput/style.module.scss.js +1 -1
  13. package/dist/src/components/LivePreview/LivePreview.js +1 -1
  14. package/dist/src/components/LivePreview/LivePreview.js.map +1 -1
  15. package/dist/src/components/LivePreview/LivePreview.module.scss.js +1 -1
  16. package/dist/src/components/MethodAccordion/MethodAccordion.js +1 -1
  17. package/dist/src/components/MethodAccordion/MethodAccordion.js.map +1 -1
  18. package/dist/src/components/MethodAccordion/MethodAccordion.module.scss.js +1 -1
  19. package/dist/src/components/SVGLoader/SVGLoader.js +1 -1
  20. package/dist/src/components/SVGLoader/SVGLoader.js.map +1 -1
  21. package/dist/src/components/SectionHead/SectionHead.js +1 -1
  22. package/dist/src/components/SectionHead/SectionHead.js.map +1 -1
  23. package/dist/src/components/SimpleLabelValue/SimpleLabelValue.js +1 -1
  24. package/dist/src/components/SimpleLabelValue/SimpleLabelValue.js.map +1 -1
  25. package/dist/src/components/Tooltip/Tooltip.js +1 -1
  26. package/dist/src/components/Tooltip/Tooltip.js.map +1 -1
  27. package/dist/src/components/dialog/index.js +1 -1
  28. package/dist/src/components/dialog/index.js.map +1 -1
  29. package/dist/src/components/table/table.js +1 -1
  30. package/dist/src/components/table/table.js.map +1 -1
  31. package/dist/src/components/table/tags-table.js +1 -1
  32. package/dist/src/components/table/tags-table.js.map +1 -1
  33. package/dist/src/context/SectionToggleContext.js +1 -1
  34. package/dist/src/context/SectionToggleContext.js.map +1 -1
  35. package/dist/src/layout/docsComponents/Codebox/Codebox.js +1 -1
  36. package/dist/src/layout/docsComponents/Codebox/Codebox.js.map +1 -1
  37. package/dist/src/layout/docsComponents/Codebox/style.module.scss.js +1 -1
  38. package/dist/src/layout/docsComponents/DocsAside/DocsAside.js +1 -1
  39. package/dist/src/layout/docsComponents/DocsAside/DocsAside.js.map +1 -1
  40. package/dist/src/layout/docsComponents/DocsAside/style.module.scss.js +1 -1
  41. package/dist/src/layout/docsComponents/DocsContent/DocsContent.js +1 -1
  42. package/dist/src/layout/docsComponents/DocsContent/DocsContent.js.map +1 -1
  43. package/dist/src/layout/docsComponents/DocsContent/EndpointPage/index.js +1 -1
  44. package/dist/src/layout/docsComponents/DocsContent/EndpointPage/index.js.map +1 -1
  45. package/dist/src/layout/docsComponents/DocsContent/OverviewPage/index.js +1 -1
  46. package/dist/src/layout/docsComponents/DocsContent/OverviewPage/index.js.map +1 -1
  47. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.js +1 -1
  48. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.js.map +1 -1
  49. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.module.scss.js +1 -1
  50. package/dist/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.js +1 -1
  51. package/dist/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.js.map +1 -1
  52. package/dist/src/layout/docsComponents/index.js +1 -1
  53. package/dist/src/layout/docsComponents/index.js.map +1 -1
  54. package/dist/src/layout/docsLayout.js +1 -1
  55. package/dist/src/layout/docsLayout.js.map +1 -1
  56. package/dist/src/layout/layout.js +1 -1
  57. package/dist/src/layout/layout.js.map +1 -1
  58. package/dist/types/components/Chips/Chips.d.ts +2 -1
  59. package/dist/types/components/InfoForm/InfoForm.d.ts +1 -1
  60. package/dist/types/components/JsonInput/JsonInput.d.ts +2 -1
  61. package/dist/types/components/MethodAccordion/MethodAccordion.d.ts +1 -1
  62. package/dist/types/components/dialog/index.d.ts +2 -1
  63. package/dist/types/components/table/table.d.ts +2 -1
  64. package/dist/types/components/table/tags-table.d.ts +1 -1
  65. package/dist/types/context/SectionToggleContext.d.ts +2 -2
  66. package/dist/types/index.d.ts +2 -27
  67. package/dist/types/layout/docsComponents/Codebox/Codebox.d.ts +2 -1
  68. package/dist/types/layout/docsComponents/DocsAside/DocsAside.d.ts +2 -1
  69. package/dist/types/layout/docsComponents/DocsContent/DocsContent.d.ts +1 -1
  70. package/dist/types/layout/docsComponents/DocsContent/EndpointPage/index.d.ts +1 -1
  71. package/dist/types/layout/docsComponents/DocsContent/OverviewPage/index.d.ts +1 -1
  72. package/dist/types/layout/docsComponents/DocsHeader/DocsHeader.d.ts +2 -1
  73. package/dist/types/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.d.ts +1 -1
  74. package/package.json +6 -2
  75. package/rollup.config.js +39 -4
  76. package/tsconfig.json +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DocsHeader.js","sources":["../../../../../src/layout/docsComponents/DocsHeader/DocsHeader.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react'\nimport { Button, Size, Input } from 'digitinary-ui'\nimport SVGLoader from '../../../components/SVGLoader/SVGLoader'\nimport {\n FilterIcon,\n BookIcon,\n ApiIcon,\n SearchIcon,\n UpArrowIcon,\n DownArrowIcon,\n} from '../../../assets/icons'\nimport Tooltip from '../../../components/Tooltip/Tooltip'\nimport CommonDialog from '../../../components/dialog/index'\nimport { METHOD_OPTIONS } from '../../../constants/methods.constant'\nimport styles from './DocsHeader.module.scss'\nimport { OverviewData } from '../../../../src/layout/docsLayout'\n\nconst DocsHeader = ({\n transformedOpenApis,\n updateFilteredData,\n}: {\n transformedOpenApis: OverviewData[]\n updateFilteredData: (filteredItems: OverviewData[], isReset?: boolean) => void\n}) => {\n const [showSearchFilter, setShowSearchFilter] = useState<boolean>(false)\n const [apiName, setApiName] = useState<string>('')\n const [selectedMethods, setSelectedMethods] = useState<any[]>([])\n const [isMethodDropdownOpen, setIsMethodDropdownOpen] = useState<boolean>(false)\n\n const handleOpenSearchFilter = (): void => {\n setShowSearchFilter(true)\n }\n\n const handleCloseSearchFilter = (): void => {\n setShowSearchFilter(false)\n setIsMethodDropdownOpen(false)\n }\n\n const handleApplyFilters = (): void => {\n // Reset: no filters applied\n if (!apiName?.trim() && (!selectedMethods || selectedMethods.length === 0)) {\n updateFilteredData(transformedOpenApis, true)\n setShowSearchFilter(false)\n return\n }\n\n let filteredItems = [...transformedOpenApis]\n\n // Filter by API name\n if (apiName?.trim()) {\n const lowerApiName = apiName.toLowerCase()\n filteredItems = filteredItems.filter((api) => api.title.toLowerCase().includes(lowerApiName))\n }\n\n // Filter by selected HTTP methods\n if (selectedMethods?.length) {\n filteredItems = filteredItems.filter((api) => {\n const allMethods = Object.values(api.tags || {})\n .flat()\n .map((endpoint: any) => endpoint.method?.toLowerCase())\n\n return selectedMethods.some((method) => allMethods.includes(method.toLowerCase()))\n })\n }\n\n updateFilteredData(filteredItems)\n setShowSearchFilter(false)\n }\n\n const handleCheckMethod = (e, method: (typeof METHOD_OPTIONS)[0]) => {\n const {\n target: { checked },\n } = e\n if (checked) {\n setSelectedMethods((prev) => [...prev, method.value])\n } else {\n if (selectedMethods.includes(method.value)) {\n setSelectedMethods((prev) => prev.filter((_m) => _m != method.value))\n }\n }\n }\n\n return (\n <>\n <header className={styles.api_docs_header}>\n <div className={styles.header_content}>\n <Button\n variant=\"outlined\"\n size=\"small\"\n className={styles.search_filter_btn}\n onClick={handleOpenSearchFilter}\n >\n Search & Filter\n <SVGLoader src={FilterIcon} />\n </Button>\n <div className={styles.nav_buttons}>\n <Tooltip\n placement=\"bottom\"\n offset={[10, 5]}\n delay={[0, 0]}\n className=\"guide-tooltip\"\n content={<div>Coming Soon</div>}\n >\n <Button variant=\"outlined\" size=\"small\" className=\"guide-btn\" disabled={true}>\n <SVGLoader src={BookIcon} />\n GUIDES\n </Button>\n </Tooltip>\n <Button variant=\"outlined\" size=\"small\" className={styles.api_btn}>\n <SVGLoader src={ApiIcon} /> &nbsp; API reference\n </Button>\n </div>\n </div>\n </header>\n <CommonDialog\n size=\"sm\"\n open={showSearchFilter}\n onClose={handleCloseSearchFilter}\n icon={false}\n withClose={false}\n noActions\n content={\n <div className={`search-filter-form ${isMethodDropdownOpen ? 'expanded' : ''}`}>\n <div className=\"search-filter-form__header\">\n <p className=\"search-filter-form__header__title\">Search & Filter</p>\n </div>\n <Input\n className=\"name-input\"\n placeholder=\"Search by API name\"\n value={apiName}\n onChange={(value) => setApiName(value as string)}\n size={Size.Medium}\n clearable\n endAdornment={<SVGLoader src={SearchIcon} />}\n />\n <div className=\"method-container\">\n <label>Method</label>\n {/* <SelectGroup\n isMultiple={true}\n size={Size.Medium}\n placeholder=\"Select Method\"\n value={selectedMethods}\n onChange={(value) => setSelectedMethods(value || [])}\n options={[\n \n ]}\n withSearch={false}\n className=\"method-select custom-select-border\"\n /> */}\n <div className=\"typeDdl\" onClick={() => setIsMethodDropdownOpen((prev) => !prev)}>\n <span>Select Method</span>\n <SVGLoader src={!isMethodDropdownOpen ? DownArrowIcon : UpArrowIcon} />\n </div>\n {isMethodDropdownOpen && (\n <div className=\"methodList\">\n {METHOD_OPTIONS.map((_m) => (\n <div className=\"method-item\">\n <input\n type=\"checkbox\"\n className=\"agreement-checkbox\"\n checked={selectedMethods.includes(_m.value)}\n onChange={(e) => handleCheckMethod(e, _m)}\n />\n <span style={{ color: _m.color }}>{_m.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n <div className=\"button-container\">\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n onClick={handleApplyFilters}\n className=\"dialog-submit-btn\"\n >\n Apply\n </Button>\n </div>\n </div>\n }\n />\n </>\n )\n}\n\nexport default DocsHeader\n"],"names":["DocsHeader","transformedOpenApis","updateFilteredData","showSearchFilter","setShowSearchFilter","useState","apiName","setApiName","selectedMethods","setSelectedMethods","isMethodDropdownOpen","setIsMethodDropdownOpen","_jsxs","_jsx","jsx","className","styles","api_docs_header","children","header_content","Button","variant","size","search_filter_btn","onClick","SVGLoader","src","FilterIcon","nav_buttons","Tooltip","placement","offset","delay","content","jsxs","disabled","BookIcon","api_btn","ApiIcon","CommonDialog","open","onClose","icon","withClose","noActions","Input","placeholder","value","onChange","Size","Medium","clearable","endAdornment","SearchIcon","prev","UpArrowIcon","DownArrowIcon","METHOD_OPTIONS","map","_m","type","checked","includes","e","method","target","filter","handleCheckMethod","style","color","label","trim","length","filteredItems","lowerApiName","toLowerCase","api","title","allMethods","Object","values","tags","flat","endpoint","_a","some"],"mappings":"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"}
1
+ {"version":3,"file":"DocsHeader.js","sources":["../../../../../src/layout/docsComponents/DocsHeader/DocsHeader.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react'\nimport { Button, Size, Input } from 'digitinary-ui'\nimport SVGLoader from '../../../components/SVGLoader/SVGLoader'\nimport {\n FilterIcon,\n BookIcon,\n ApiIcon,\n SearchIcon,\n UpArrowIcon,\n DownArrowIcon,\n} from '../../../assets/icons'\nimport Tooltip from '../../../components/Tooltip/Tooltip'\nimport CommonDialog from '../../../components/dialog/index'\nimport { METHOD_OPTIONS } from '../../../constants/methods.constant'\nimport styles from './DocsHeader.module.scss'\nimport { OverviewData } from '../../../../src/layout/docsLayout'\n\nconst DocsHeader = ({\n transformedOpenApis,\n updateFilteredData,\n}: {\n transformedOpenApis: OverviewData[]\n updateFilteredData: (filteredItems: OverviewData[], isReset?: boolean) => void\n}) => {\n const [showSearchFilter, setShowSearchFilter] = useState<boolean>(false)\n const [apiName, setApiName] = useState<string>('')\n const [selectedMethods, setSelectedMethods] = useState<any[]>([])\n const [isMethodDropdownOpen, setIsMethodDropdownOpen] = useState<boolean>(false)\n\n const handleOpenSearchFilter = (): void => {\n setShowSearchFilter(true)\n }\n\n const handleCloseSearchFilter = (): void => {\n setShowSearchFilter(false)\n setIsMethodDropdownOpen(false)\n }\n\n const handleApplyFilters = (): void => {\n // Reset: no filters applied\n if (!apiName?.trim() && (!selectedMethods || selectedMethods.length === 0)) {\n updateFilteredData(transformedOpenApis, true)\n setShowSearchFilter(false)\n return\n }\n\n let filteredItems = [...transformedOpenApis]\n\n // Filter by API name\n if (apiName?.trim()) {\n const lowerApiName = apiName.toLowerCase()\n filteredItems = filteredItems.filter((api) => api.title.toLowerCase().includes(lowerApiName))\n }\n\n // Filter by selected HTTP methods\n if (selectedMethods?.length) {\n filteredItems = filteredItems.filter((api) => {\n const allMethods = Object.values(api.tags || {})\n .flat()\n .map((endpoint: any) => endpoint.method?.toLowerCase())\n\n return selectedMethods.some((method) => allMethods.includes(method.toLowerCase()))\n })\n }\n\n updateFilteredData(filteredItems)\n setShowSearchFilter(false)\n }\n\n const handleCheckMethod = (e, method: (typeof METHOD_OPTIONS)[0]) => {\n const {\n target: { checked },\n } = e\n if (checked) {\n setSelectedMethods((prev) => [...prev, method.value])\n } else {\n if (selectedMethods.includes(method.value)) {\n setSelectedMethods((prev) => prev.filter((_m) => _m != method.value))\n }\n }\n }\n\n return (\n <>\n <header className={styles.api_docs_header}>\n <div className={styles.header_content}>\n <Button\n variant=\"outlined\"\n size=\"small\"\n className={styles.search_filter_btn}\n onClick={handleOpenSearchFilter}\n >\n Search & Filter\n <SVGLoader src={FilterIcon} />\n </Button>\n <div className={styles.nav_buttons}>\n <Tooltip\n placement=\"bottom\"\n offset={[10, 5]}\n delay={[0, 0]}\n className=\"guide-tooltip\"\n content={<div>Coming Soon</div>}\n >\n <Button variant=\"outlined\" size=\"small\" className=\"guide-btn\" disabled={true}>\n <SVGLoader src={BookIcon} />\n GUIDES\n </Button>\n </Tooltip>\n <Button variant=\"outlined\" size=\"small\" className={styles.api_btn}>\n <SVGLoader src={ApiIcon} /> &nbsp; API reference\n </Button>\n </div>\n </div>\n </header>\n <CommonDialog\n size=\"sm\"\n open={showSearchFilter}\n onClose={handleCloseSearchFilter}\n icon={false}\n withClose={false}\n noActions\n content={\n <div className={`search-filter-form ${isMethodDropdownOpen ? 'expanded' : ''}`}>\n <div className=\"search-filter-form__header\">\n <p className=\"search-filter-form__header__title\">Search & Filter</p>\n </div>\n <Input\n className=\"name-input\"\n placeholder=\"Search by API name\"\n value={apiName}\n onChange={(value) => setApiName(value as string)}\n size={Size.Medium}\n clearable\n endAdornment={<SVGLoader src={SearchIcon} />}\n />\n <div className=\"method-container\">\n <label>Method</label>\n {/* <SelectGroup\n isMultiple={true}\n size={Size.Medium}\n placeholder=\"Select Method\"\n value={selectedMethods}\n onChange={(value) => setSelectedMethods(value || [])}\n options={[\n \n ]}\n withSearch={false}\n className=\"method-select custom-select-border\"\n /> */}\n <div className=\"typeDdl\" onClick={() => setIsMethodDropdownOpen((prev) => !prev)}>\n <span>Select Method</span>\n <SVGLoader src={!isMethodDropdownOpen ? DownArrowIcon : UpArrowIcon} />\n </div>\n {isMethodDropdownOpen && (\n <div className=\"methodList\">\n {METHOD_OPTIONS.map((_m) => (\n <div className=\"method-item\">\n <input\n type=\"checkbox\"\n className=\"agreement-checkbox\"\n checked={selectedMethods.includes(_m.value)}\n onChange={(e) => handleCheckMethod(e, _m)}\n />\n <span style={{ color: _m.color }}>{_m.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n <div className=\"button-container\">\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n onClick={handleApplyFilters}\n className=\"dialog-submit-btn\"\n >\n Apply\n </Button>\n </div>\n </div>\n }\n />\n </>\n )\n}\n\nexport default DocsHeader\n"],"names":["DocsHeader","transformedOpenApis","updateFilteredData","showSearchFilter","setShowSearchFilter","useState","apiName","setApiName","selectedMethods","setSelectedMethods","isMethodDropdownOpen","setIsMethodDropdownOpen","React","createElement","Fragment","className","styles","api_docs_header","header_content","Button","variant","size","search_filter_btn","onClick","SVGLoader","src","FilterIcon","nav_buttons","Tooltip","placement","offset","delay","content","disabled","BookIcon","api_btn","ApiIcon","CommonDialog","open","onClose","icon","withClose","noActions","Input","placeholder","value","onChange","Size","Medium","clearable","endAdornment","SearchIcon","prev","UpArrowIcon","DownArrowIcon","METHOD_OPTIONS","map","_m","type","checked","includes","e","method","target","filter","handleCheckMethod","style","color","label","trim","length","filteredItems","lowerApiName","toLowerCase","api","title","allMethods","Object","values","tags","flat","endpoint","_a","some"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const t="";export{t as default};
1
+ var e={api_docs_header:"DocsHeader-module_api_docs_header__kSGRD",header_content:"DocsHeader-module_header_content__QfeWl",nav_buttons:"DocsHeader-module_nav_buttons__4pTzx",search_filter_btn:"DocsHeader-module_search_filter_btn__q7XLi",btnContentWrapper:"DocsHeader-module_btnContentWrapper__4JaLW",btnContent:"DocsHeader-module_btnContent__sc7mF",api_btn:"DocsHeader-module_api_btn__f667d"};export{e as default};
2
2
  //# sourceMappingURL=DocsHeader.module.scss.js.map
@@ -1,2 +1,2 @@
1
- import{j as e}from"../../../../_virtual/jsx-runtime.js";import{useRef as s,useEffect as i}from"react";import t from"../../../components/SVGLoader/SVGLoader.js";import a from"../../../assets/icons/arrowDownGray.svg.js";import c from"../../../assets/icons/arrowRightGray.svg.js";import p from"../../../assets/icons/document.svg.js";import n from"../../../assets/icons/eye.svg.js";import{useSectionToggle as o,SectionEnum as r}from"../../../context/SectionToggleContext.js";const d=({apis:d,setActiveItemData:l,isFirstApiExpanded:I,setIsFirstApiExpanded:m,setActiveType:_,canSelectFirstApi:S,canFocusSection:E,setCanFocusSection:j,activeApiId:x,setCanSelectFirstApi:h})=>{const{expandedSections:v,toggleSection:O,generateSectionKey:N}=o(),u=s({});i(()=>{if(S||!(null==d?void 0:d.length)||!I)return;const e=d[0];O(null==e?void 0:e.apiSpecId,[{type:r.API_SECTION,setTo:!0},{type:r.OVERVIEW,setTo:!0}]),l(e),_("OVERVIEW"),m(!1)},[d,I]),i(()=>{const e=null==d?void 0:d.find(e=>e.apiSpecId===x);x&&d.length>0&&e&&(O(e.apiSpecId,[{type:r.API_SECTION,setTo:!0},{type:r.OVERVIEW,setTo:!0}]),l(e),_("OVERVIEW"),m(!1),h(!0),j(!0))},[x,d]);const C=(s,i)=>s.map((s,t)=>{const a=N({apiId:i.apiSpecId,type:r.RESOURCE,id:s.id}),c=v[a];return e.jsxs("div",{className:`api-docs-api-tree__endpoint api-docs-api-tree__endpoint--${s.method.toLowerCase()}`,onClick:()=>{c||(l(Object.assign(Object.assign({},s),{api:i})),_("ENDPOINT"),O(i.apiSpecId,[{type:r.RESOURCE,id:s.id}],{resetOthers:!0,filterKeys:[r.RESOURCE,r.OVERVIEW]}))},"data-active":c,children:[e.jsx("span",{className:"api-docs-api-tree__endpoint-method",children:s.method}),e.jsx("span",{className:"api-docs-api-tree__endpoint-name",children:s.path})]},t)}),y=s=>{const i=N({apiId:s.apiSpecId,type:r.API_SECTION}),o=N({apiId:s.apiSpecId,type:r.ENDPOINTS_SECTION}),d=N({apiId:s.apiSpecId,type:r.OVERVIEW}),I=v[i],m=v[o],S=v[d];if(E){const e=u.current[s.apiSpecId];null==e||e.scrollIntoView({behavior:"smooth",block:"start"}),j(!1)}return e.jsxs("div",{className:"api-docs-api-tree__section","data-active":m||S,ref:e=>{u.current[s.apiSpecId]=e},children:[e.jsxs("div",{className:"api-docs-api-tree__section-header",onClick:()=>O(s.apiSpecId,[{type:r.API_SECTION}]),children:[I?e.jsx(t,{src:a}):e.jsx(t,{src:c}),e.jsx(t,{src:p}),e.jsx("span",{className:"api-docs-api-tree__section-title",children:s.title})]}),I&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"api-docs-api-tree__section__overview",onClick:()=>{S||(O(s.apiSpecId,[{type:r.OVERVIEW}],{resetOthers:!0,filterKeys:[r.RESOURCE]}),l(s),_("OVERVIEW"))},"data-active":S,children:[e.jsx(t,{src:n}),e.jsx("span",{children:"Overview"})]}),e.jsxs("div",{className:"api-docs-api-tree__section__endpoints",onClick:()=>O(s.apiSpecId,[{type:r.ENDPOINTS_SECTION}]),"data-active":m&&!S,children:[v[o]?e.jsx(t,{src:a}):e.jsx(t,{src:c}),e.jsx("span",{children:"Endpoints"})]}),v[o]&&e.jsx("div",{className:"api-docs-api-tree__subsections",children:Object.entries(s.tags).filter(([,e])=>e.length>0).sort(([e],[s])=>"default"===e?1:"default"===s?-1:e.localeCompare(s)).map(([i,p],n)=>((s,i,p,n)=>{const o=N({apiId:p.apiSpecId,type:r.TAG_SECTION,index:n}),d=v[o];return e.jsxs("div",{className:"api-docs-api-tree__subsection",children:[e.jsxs("div",{className:"api-docs-api-tree__subsection-header",onClick:()=>O(p.apiSpecId,[{type:r.TAG_SECTION,index:n}]),children:[d?e.jsx(t,{src:a}):e.jsx(t,{src:c}),e.jsx("span",{className:"api-docs-api-tree__subsection-title",children:s})]}),d&&e.jsx("div",{className:"api-docs-api-tree__endpoints",children:C(i,p)})]},o)})(i,p,s,n))})]})]},s.apiSpecId)};return e.jsx("aside",{className:"api-docs-api-tree",children:d.map(e=>y(e))})};export{d as default};
1
+ import e,{useRef as t,useEffect as a}from"react";import s from"../../../components/SVGLoader/SVGLoader.js";import i from"../../../assets/icons/arrowDownGray.svg.js";import c from"../../../assets/icons/arrowRightGray.svg.js";import p from"../../../assets/icons/document.svg.js";import n from"../../../assets/icons/eye.svg.js";import{useSectionToggle as r,SectionEnum as o}from"../../../context/SectionToggleContext.js";const d=({apis:d,setActiveItemData:l,isFirstApiExpanded:m,setIsFirstApiExpanded:E,setActiveType:I,canSelectFirstApi:S,canFocusSection:_,setCanFocusSection:O,activeApiId:v,setCanSelectFirstApi:N})=>{const{expandedSections:u,toggleSection:y,generateSectionKey:C}=r(),T=t({});a(()=>{if(S||!(null==d?void 0:d.length)||!m)return;const e=d[0];y(null==e?void 0:e.apiSpecId,[{type:o.API_SECTION,setTo:!0},{type:o.OVERVIEW,setTo:!0}]),l(e),I("OVERVIEW"),E(!1)},[d,m]),a(()=>{const e=null==d?void 0:d.find(e=>e.apiSpecId===v);v&&d.length>0&&e&&(y(e.apiSpecId,[{type:o.API_SECTION,setTo:!0},{type:o.OVERVIEW,setTo:!0}]),l(e),I("OVERVIEW"),E(!1),N(!0),O(!0))},[v,d]);const V=(t,a,p,n)=>{const r=C({apiId:p.apiSpecId,type:o.TAG_SECTION,index:n}),d=u[r];return e.createElement("div",{key:r,className:"api-docs-api-tree__subsection"},e.createElement("div",{className:"api-docs-api-tree__subsection-header",onClick:()=>y(p.apiSpecId,[{type:o.TAG_SECTION,index:n}])},d?e.createElement(s,{src:i}):e.createElement(s,{src:c}),e.createElement("span",{className:"api-docs-api-tree__subsection-title"},t)),d&&e.createElement("div",{className:"api-docs-api-tree__endpoints"},((t,a)=>t.map((t,s)=>{const i=C({apiId:a.apiSpecId,type:o.RESOURCE,id:t.id}),c=u[i];return e.createElement("div",{key:s,className:`api-docs-api-tree__endpoint api-docs-api-tree__endpoint--${t.method.toLowerCase()}`,onClick:()=>{c||(l(Object.assign(Object.assign({},t),{api:a})),I("ENDPOINT"),y(a.apiSpecId,[{type:o.RESOURCE,id:t.id}],{resetOthers:!0,filterKeys:[o.RESOURCE,o.OVERVIEW]}))},"data-active":c},e.createElement("span",{className:"api-docs-api-tree__endpoint-method"},t.method),e.createElement("span",{className:"api-docs-api-tree__endpoint-name"},t.path))}))(a,p)))};return e.createElement("aside",{className:"api-docs-api-tree"},d.map(t=>(t=>{const a=C({apiId:t.apiSpecId,type:o.API_SECTION}),r=C({apiId:t.apiSpecId,type:o.ENDPOINTS_SECTION}),d=C({apiId:t.apiSpecId,type:o.OVERVIEW}),m=u[a],E=u[r],S=u[d];if(_){const e=T.current[t.apiSpecId];null==e||e.scrollIntoView({behavior:"smooth",block:"start"}),O(!1)}return e.createElement("div",{key:t.apiSpecId,className:"api-docs-api-tree__section","data-active":E||S,ref:e=>{T.current[t.apiSpecId]=e}},e.createElement("div",{className:"api-docs-api-tree__section-header",onClick:()=>y(t.apiSpecId,[{type:o.API_SECTION}])},m?e.createElement(s,{src:i}):e.createElement(s,{src:c}),e.createElement(s,{src:p}),e.createElement("span",{className:"api-docs-api-tree__section-title"},t.title)),m&&e.createElement(e.Fragment,null,e.createElement("div",{className:"api-docs-api-tree__section__overview",onClick:()=>{S||(y(t.apiSpecId,[{type:o.OVERVIEW}],{resetOthers:!0,filterKeys:[o.RESOURCE]}),l(t),I("OVERVIEW"))},"data-active":S},e.createElement(s,{src:n}),e.createElement("span",null,"Overview")),e.createElement("div",{className:"api-docs-api-tree__section__endpoints",onClick:()=>y(t.apiSpecId,[{type:o.ENDPOINTS_SECTION}]),"data-active":E&&!S},u[r]?e.createElement(s,{src:i}):e.createElement(s,{src:c}),e.createElement("span",null,"Endpoints")),u[r]&&e.createElement("div",{className:"api-docs-api-tree__subsections"},Object.entries(t.tags).filter(([,e])=>e.length>0).sort(([e],[t])=>"default"===e?1:"default"===t?-1:e.localeCompare(t)).map(([e,a],s)=>V(e,a,t,s)))))})(t)))};export{d as default};
2
2
  //# sourceMappingURL=DocsSideMenuTree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocsSideMenuTree.js","sources":["../../../../../src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.tsx"],"sourcesContent":["import './style.scss'\nimport React, { useEffect, useRef } from 'react'\nimport SVGLoader from '../../../components/SVGLoader/SVGLoader'\nimport { arrowDownGray, arrowRightGray, document, eye } from '../../../assets/icons'\nimport { EndpointData, OverviewData } from 'src/layout/docsLayout'\nimport { SectionEnum, useSectionToggle } from '../../../../src/context/SectionToggleContext'\n\nconst DocsSideMenuTree = ({\n apis,\n setActiveItemData,\n isFirstApiExpanded,\n setIsFirstApiExpanded,\n setActiveType,\n canSelectFirstApi,\n canFocusSection,\n setCanFocusSection,\n activeApiId,\n setCanSelectFirstApi,\n}: {\n apis: OverviewData[]\n setActiveItemData: React.Dispatch<React.SetStateAction<OverviewData | EndpointData>>\n activeItemData: OverviewData | EndpointData\n isFirstApiExpanded: boolean\n setIsFirstApiExpanded: React.Dispatch<React.SetStateAction<boolean>>\n setActiveType: React.Dispatch<React.SetStateAction<'OVERVIEW' | 'ENDPOINT'>>\n activeType: 'OVERVIEW' | 'ENDPOINT'\n canSelectFirstApi?: boolean\n canFocusSection: boolean\n setCanFocusSection: React.Dispatch<React.SetStateAction<boolean>>\n activeApiId: string\n setCanSelectFirstApi: React.Dispatch<React.SetStateAction<boolean>>\n}) => {\n const { expandedSections, toggleSection, generateSectionKey } = useSectionToggle()\n const sectionRefs = useRef<Record<string, HTMLDivElement | null>>({})\n\n // Auto-expand first API only once\n useEffect(() => {\n if (canSelectFirstApi || !apis?.length || !isFirstApiExpanded) return\n\n const firstApi = apis[0]\n toggleSection(firstApi?.apiSpecId, [\n { type: SectionEnum.API_SECTION, setTo: true },\n { type: SectionEnum.OVERVIEW, setTo: true },\n ])\n\n setActiveItemData(firstApi)\n setActiveType('OVERVIEW')\n setIsFirstApiExpanded(false)\n }, [apis, isFirstApiExpanded])\n\n useEffect(() => {\n const activeApi = apis?.find((api) => api.apiSpecId === activeApiId)\n if (activeApiId && apis.length > 0 && !!activeApi) {\n toggleSection(activeApi.apiSpecId, [\n { type: SectionEnum.API_SECTION, setTo: true },\n { type: SectionEnum.OVERVIEW, setTo: true },\n ])\n\n setActiveItemData(activeApi)\n setActiveType('OVERVIEW')\n setIsFirstApiExpanded(false)\n setCanSelectFirstApi(true)\n setCanFocusSection(true)\n }\n }, [activeApiId, apis])\n\n const renderEndpoints = (endpoints: EndpointData[], api: OverviewData) =>\n endpoints.map((endpoint, index) => {\n const key = generateSectionKey({\n apiId: api.apiSpecId,\n type: SectionEnum.RESOURCE,\n id: endpoint.id,\n })\n const isExpanded = expandedSections[key]\n\n return (\n <div\n key={index}\n className={`api-docs-api-tree__endpoint api-docs-api-tree__endpoint--${endpoint.method.toLowerCase()}`}\n onClick={() => {\n if (!isExpanded) {\n setActiveItemData({\n ...endpoint,\n api,\n })\n setActiveType('ENDPOINT')\n toggleSection(api.apiSpecId, [{ type: SectionEnum.RESOURCE, id: endpoint.id }], {\n resetOthers: true,\n filterKeys: [SectionEnum.RESOURCE, SectionEnum.OVERVIEW],\n })\n }\n }}\n data-active={isExpanded}\n >\n <span className=\"api-docs-api-tree__endpoint-method\">{endpoint.method}</span>\n <span className=\"api-docs-api-tree__endpoint-name\">{endpoint.path}</span>\n </div>\n )\n })\n\n const renderSubSection = (\n tagName: string,\n data: EndpointData[],\n api: OverviewData,\n sectionIndex: number\n ) => {\n const sectionKey = generateSectionKey({\n apiId: api.apiSpecId,\n type: SectionEnum.TAG_SECTION,\n index: sectionIndex,\n })\n const isSectionExpanded = expandedSections[sectionKey]\n\n return (\n <div key={sectionKey} className=\"api-docs-api-tree__subsection\">\n <div\n className=\"api-docs-api-tree__subsection-header\"\n onClick={() =>\n toggleSection(api.apiSpecId, [{ type: SectionEnum.TAG_SECTION, index: sectionIndex }])\n }\n >\n {isSectionExpanded ? (\n <SVGLoader src={arrowDownGray} />\n ) : (\n <SVGLoader src={arrowRightGray} />\n )}\n <span className=\"api-docs-api-tree__subsection-title\">{tagName}</span>\n </div>\n\n {isSectionExpanded && (\n <div className=\"api-docs-api-tree__endpoints\">{renderEndpoints(data, api)}</div>\n )}\n </div>\n )\n }\n\n const renderApiSection = (api: OverviewData) => {\n const sectionKey = generateSectionKey({ apiId: api.apiSpecId, type: SectionEnum.API_SECTION })\n const endpointsKey = generateSectionKey({\n apiId: api.apiSpecId,\n type: SectionEnum.ENDPOINTS_SECTION,\n })\n const overviewKey = generateSectionKey({ apiId: api.apiSpecId, type: SectionEnum.OVERVIEW })\n\n const isApiExpanded = expandedSections[sectionKey]\n const isEndpointActive = expandedSections[endpointsKey]\n const isOverviewExpanded = expandedSections[overviewKey]\n // Scroll to the section if it's expanded\n if (canFocusSection) {\n const sectionEl = sectionRefs.current[api.apiSpecId]\n sectionEl?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n setCanFocusSection(false)\n }\n\n return (\n <div\n key={api.apiSpecId}\n className=\"api-docs-api-tree__section\"\n data-active={isEndpointActive || isOverviewExpanded}\n ref={(el) => {\n sectionRefs.current[api.apiSpecId] = el\n }}\n >\n <div\n className=\"api-docs-api-tree__section-header\"\n onClick={() => toggleSection(api.apiSpecId, [{ type: SectionEnum.API_SECTION }])}\n >\n {isApiExpanded ? <SVGLoader src={arrowDownGray} /> : <SVGLoader src={arrowRightGray} />}\n <SVGLoader src={document} />\n <span className=\"api-docs-api-tree__section-title\">{api.title}</span>\n </div>\n\n {isApiExpanded && (\n <>\n <div\n className=\"api-docs-api-tree__section__overview\"\n onClick={() => {\n if (!isOverviewExpanded) {\n toggleSection(api.apiSpecId, [{ type: SectionEnum.OVERVIEW }], {\n resetOthers: true,\n filterKeys: [SectionEnum.RESOURCE],\n })\n setActiveItemData(api)\n setActiveType('OVERVIEW')\n }\n }}\n data-active={isOverviewExpanded}\n >\n <SVGLoader src={eye} />\n <span>Overview</span>\n </div>\n\n <div\n className=\"api-docs-api-tree__section__endpoints\"\n onClick={() =>\n toggleSection(api.apiSpecId, [{ type: SectionEnum.ENDPOINTS_SECTION }])\n }\n data-active={isEndpointActive && !isOverviewExpanded}\n >\n {expandedSections[endpointsKey] ? (\n <SVGLoader src={arrowDownGray} />\n ) : (\n <SVGLoader src={arrowRightGray} />\n )}\n <span>Endpoints</span>\n </div>\n\n {expandedSections[endpointsKey] && (\n <div className=\"api-docs-api-tree__subsections\">\n {Object.entries(api.tags)\n .filter(([, endpoints]) => endpoints.length > 0)\n .sort(([a], [b]) =>\n a === 'default' ? 1 : b === 'default' ? -1 : a.localeCompare(b)\n )\n .map(([tagName, data], i) =>\n renderSubSection(tagName, data as EndpointData[], api, i)\n )}\n </div>\n )}\n </>\n )}\n </div>\n )\n }\n\n return <aside className=\"api-docs-api-tree\">{apis.map((api) => renderApiSection(api))}</aside>\n}\n\nexport default DocsSideMenuTree\n"],"names":["DocsSideMenuTree","apis","setActiveItemData","isFirstApiExpanded","setIsFirstApiExpanded","setActiveType","canSelectFirstApi","canFocusSection","setCanFocusSection","activeApiId","setCanSelectFirstApi","expandedSections","toggleSection","generateSectionKey","useSectionToggle","sectionRefs","useRef","useEffect","length","firstApi","apiSpecId","type","SectionEnum","API_SECTION","setTo","OVERVIEW","activeApi","find","api","renderEndpoints","endpoints","map","endpoint","index","key","apiId","RESOURCE","id","isExpanded","_jsxs","className","method","toLowerCase","onClick","Object","assign","resetOthers","filterKeys","children","_jsx","jsx","path","renderApiSection","sectionKey","endpointsKey","ENDPOINTS_SECTION","overviewKey","isApiExpanded","isEndpointActive","isOverviewExpanded","sectionEl","current","scrollIntoView","behavior","block","ref","el","SVGLoader","src","arrowDownGray","arrowRightGray","document","title","jsxs","_Fragment","Fragment","eye","entries","tags","filter","sort","a","b","localeCompare","tagName","data","i","sectionIndex","TAG_SECTION","isSectionExpanded","renderSubSection"],"mappings":"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"}
1
+ {"version":3,"file":"DocsSideMenuTree.js","sources":["../../../../../src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.tsx"],"sourcesContent":["import './style.scss'\nimport React, { useEffect, useRef } from 'react'\nimport SVGLoader from '../../../components/SVGLoader/SVGLoader'\nimport { arrowDownGray, arrowRightGray, document, eye } from '../../../assets/icons'\nimport { EndpointData, OverviewData } from 'src/layout/docsLayout'\nimport { SectionEnum, useSectionToggle } from '../../../../src/context/SectionToggleContext'\n\nconst DocsSideMenuTree = ({\n apis,\n setActiveItemData,\n isFirstApiExpanded,\n setIsFirstApiExpanded,\n setActiveType,\n canSelectFirstApi,\n canFocusSection,\n setCanFocusSection,\n activeApiId,\n setCanSelectFirstApi,\n}: {\n apis: OverviewData[]\n setActiveItemData: React.Dispatch<React.SetStateAction<OverviewData | EndpointData>>\n activeItemData: OverviewData | EndpointData\n isFirstApiExpanded: boolean\n setIsFirstApiExpanded: React.Dispatch<React.SetStateAction<boolean>>\n setActiveType: React.Dispatch<React.SetStateAction<'OVERVIEW' | 'ENDPOINT'>>\n activeType: 'OVERVIEW' | 'ENDPOINT'\n canSelectFirstApi?: boolean\n canFocusSection: boolean\n setCanFocusSection: React.Dispatch<React.SetStateAction<boolean>>\n activeApiId: string\n setCanSelectFirstApi: React.Dispatch<React.SetStateAction<boolean>>\n}) => {\n const { expandedSections, toggleSection, generateSectionKey } = useSectionToggle()\n const sectionRefs = useRef<Record<string, HTMLDivElement | null>>({})\n\n // Auto-expand first API only once\n useEffect(() => {\n if (canSelectFirstApi || !apis?.length || !isFirstApiExpanded) return\n\n const firstApi = apis[0]\n toggleSection(firstApi?.apiSpecId, [\n { type: SectionEnum.API_SECTION, setTo: true },\n { type: SectionEnum.OVERVIEW, setTo: true },\n ])\n\n setActiveItemData(firstApi)\n setActiveType('OVERVIEW')\n setIsFirstApiExpanded(false)\n }, [apis, isFirstApiExpanded])\n\n useEffect(() => {\n const activeApi = apis?.find((api) => api.apiSpecId === activeApiId)\n if (activeApiId && apis.length > 0 && !!activeApi) {\n toggleSection(activeApi.apiSpecId, [\n { type: SectionEnum.API_SECTION, setTo: true },\n { type: SectionEnum.OVERVIEW, setTo: true },\n ])\n\n setActiveItemData(activeApi)\n setActiveType('OVERVIEW')\n setIsFirstApiExpanded(false)\n setCanSelectFirstApi(true)\n setCanFocusSection(true)\n }\n }, [activeApiId, apis])\n\n const renderEndpoints = (endpoints: EndpointData[], api: OverviewData) =>\n endpoints.map((endpoint, index) => {\n const key = generateSectionKey({\n apiId: api.apiSpecId,\n type: SectionEnum.RESOURCE,\n id: endpoint.id,\n })\n const isExpanded = expandedSections[key]\n\n return (\n <div\n key={index}\n className={`api-docs-api-tree__endpoint api-docs-api-tree__endpoint--${endpoint.method.toLowerCase()}`}\n onClick={() => {\n if (!isExpanded) {\n setActiveItemData({\n ...endpoint,\n api,\n })\n setActiveType('ENDPOINT')\n toggleSection(api.apiSpecId, [{ type: SectionEnum.RESOURCE, id: endpoint.id }], {\n resetOthers: true,\n filterKeys: [SectionEnum.RESOURCE, SectionEnum.OVERVIEW],\n })\n }\n }}\n data-active={isExpanded}\n >\n <span className=\"api-docs-api-tree__endpoint-method\">{endpoint.method}</span>\n <span className=\"api-docs-api-tree__endpoint-name\">{endpoint.path}</span>\n </div>\n )\n })\n\n const renderSubSection = (\n tagName: string,\n data: EndpointData[],\n api: OverviewData,\n sectionIndex: number\n ) => {\n const sectionKey = generateSectionKey({\n apiId: api.apiSpecId,\n type: SectionEnum.TAG_SECTION,\n index: sectionIndex,\n })\n const isSectionExpanded = expandedSections[sectionKey]\n\n return (\n <div key={sectionKey} className=\"api-docs-api-tree__subsection\">\n <div\n className=\"api-docs-api-tree__subsection-header\"\n onClick={() =>\n toggleSection(api.apiSpecId, [{ type: SectionEnum.TAG_SECTION, index: sectionIndex }])\n }\n >\n {isSectionExpanded ? (\n <SVGLoader src={arrowDownGray} />\n ) : (\n <SVGLoader src={arrowRightGray} />\n )}\n <span className=\"api-docs-api-tree__subsection-title\">{tagName}</span>\n </div>\n\n {isSectionExpanded && (\n <div className=\"api-docs-api-tree__endpoints\">{renderEndpoints(data, api)}</div>\n )}\n </div>\n )\n }\n\n const renderApiSection = (api: OverviewData) => {\n const sectionKey = generateSectionKey({ apiId: api.apiSpecId, type: SectionEnum.API_SECTION })\n const endpointsKey = generateSectionKey({\n apiId: api.apiSpecId,\n type: SectionEnum.ENDPOINTS_SECTION,\n })\n const overviewKey = generateSectionKey({ apiId: api.apiSpecId, type: SectionEnum.OVERVIEW })\n\n const isApiExpanded = expandedSections[sectionKey]\n const isEndpointActive = expandedSections[endpointsKey]\n const isOverviewExpanded = expandedSections[overviewKey]\n // Scroll to the section if it's expanded\n if (canFocusSection) {\n const sectionEl = sectionRefs.current[api.apiSpecId]\n sectionEl?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n setCanFocusSection(false)\n }\n\n return (\n <div\n key={api.apiSpecId}\n className=\"api-docs-api-tree__section\"\n data-active={isEndpointActive || isOverviewExpanded}\n ref={(el) => {\n sectionRefs.current[api.apiSpecId] = el\n }}\n >\n <div\n className=\"api-docs-api-tree__section-header\"\n onClick={() => toggleSection(api.apiSpecId, [{ type: SectionEnum.API_SECTION }])}\n >\n {isApiExpanded ? <SVGLoader src={arrowDownGray} /> : <SVGLoader src={arrowRightGray} />}\n <SVGLoader src={document} />\n <span className=\"api-docs-api-tree__section-title\">{api.title}</span>\n </div>\n\n {isApiExpanded && (\n <>\n <div\n className=\"api-docs-api-tree__section__overview\"\n onClick={() => {\n if (!isOverviewExpanded) {\n toggleSection(api.apiSpecId, [{ type: SectionEnum.OVERVIEW }], {\n resetOthers: true,\n filterKeys: [SectionEnum.RESOURCE],\n })\n setActiveItemData(api)\n setActiveType('OVERVIEW')\n }\n }}\n data-active={isOverviewExpanded}\n >\n <SVGLoader src={eye} />\n <span>Overview</span>\n </div>\n\n <div\n className=\"api-docs-api-tree__section__endpoints\"\n onClick={() =>\n toggleSection(api.apiSpecId, [{ type: SectionEnum.ENDPOINTS_SECTION }])\n }\n data-active={isEndpointActive && !isOverviewExpanded}\n >\n {expandedSections[endpointsKey] ? (\n <SVGLoader src={arrowDownGray} />\n ) : (\n <SVGLoader src={arrowRightGray} />\n )}\n <span>Endpoints</span>\n </div>\n\n {expandedSections[endpointsKey] && (\n <div className=\"api-docs-api-tree__subsections\">\n {Object.entries(api.tags)\n .filter(([, endpoints]) => endpoints.length > 0)\n .sort(([a], [b]) =>\n a === 'default' ? 1 : b === 'default' ? -1 : a.localeCompare(b)\n )\n .map(([tagName, data], i) =>\n renderSubSection(tagName, data as EndpointData[], api, i)\n )}\n </div>\n )}\n </>\n )}\n </div>\n )\n }\n\n return <aside className=\"api-docs-api-tree\">{apis.map((api) => renderApiSection(api))}</aside>\n}\n\nexport default DocsSideMenuTree\n"],"names":["DocsSideMenuTree","apis","setActiveItemData","isFirstApiExpanded","setIsFirstApiExpanded","setActiveType","canSelectFirstApi","canFocusSection","setCanFocusSection","activeApiId","setCanSelectFirstApi","expandedSections","toggleSection","generateSectionKey","useSectionToggle","sectionRefs","useRef","useEffect","length","firstApi","apiSpecId","type","SectionEnum","API_SECTION","setTo","OVERVIEW","activeApi","find","api","renderSubSection","tagName","data","sectionIndex","sectionKey","apiId","TAG_SECTION","index","isSectionExpanded","React","key","className","createElement","onClick","SVGLoader","src","arrowDownGray","arrowRightGray","endpoints","map","endpoint","RESOURCE","id","isExpanded","method","toLowerCase","Object","assign","resetOthers","filterKeys","path","renderEndpoints","endpointsKey","ENDPOINTS_SECTION","overviewKey","isApiExpanded","isEndpointActive","isOverviewExpanded","sectionEl","current","scrollIntoView","behavior","block","ref","el","document","title","Fragment","eye","entries","tags","filter","sort","a","b","localeCompare","i","renderApiSection"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"../../../_virtual/jsx-runtime.js";import o from"./DocsHeader/DocsHeader.js";import s from"./DocsSideMenuTree/DocsSideMenuTree.js";import r from"./DocsContent/DocsContent.js";import c from"./DocsAside/DocsAside.js";const i=({children:o})=>e.jsx("div",{className:"api-docs-layout",children:o});i.DocsHeader=o,i.DocsSideMenuTree=s,i.DocsContent=r,i.DocsAside=c;export{i as default};
1
+ import e from"react";import o from"./DocsHeader/DocsHeader.js";import s from"./DocsSideMenuTree/DocsSideMenuTree.js";import r from"./DocsContent/DocsContent.js";import c from"./DocsAside/DocsAside.js";const t=({children:o})=>e.createElement("div",{className:"api-docs-layout"},o);t.DocsHeader=o,t.DocsSideMenuTree=s,t.DocsContent=r,t.DocsAside=c;export{t as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/layout/docsComponents/index.tsx"],"sourcesContent":["import React from 'react'\nimport DocsHeader from './DocsHeader/DocsHeader'\nimport DocsSideMenuTree from './DocsSideMenuTree/DocsSideMenuTree'\nimport DocsContent from './DocsContent/DocsContent'\nimport DocsAside from './DocsAside/DocsAside'\nimport './index.scss'\n\ntype LayoutProps = {\n children: React.ReactNode\n}\n\ntype CompoundLayout = React.FC<LayoutProps> & {\n DocsHeader: typeof DocsHeader\n DocsSideMenuTree: typeof DocsSideMenuTree\n DocsContent: typeof DocsContent\n DocsAside: typeof DocsAside\n}\n\nconst Layout = (({ children }: LayoutProps) => {\n return <div className=\"api-docs-layout\">{children}</div>\n}) as CompoundLayout\n\nLayout.DocsHeader = DocsHeader\nLayout.DocsSideMenuTree = DocsSideMenuTree\nLayout.DocsContent = DocsContent\nLayout.DocsAside = DocsAside\n\nexport default Layout\n"],"names":["Layout","children","_jsx","className","DocsHeader","DocsSideMenuTree","DocsContent","DocsAside"],"mappings":"yOAkBM,MAAAA,EAAU,EAAGC,cACVC,EAAAA,WAAKC,UAAU,kBAAmBF,SAAAA,IAG3CD,EAAOI,WAAaA,EACpBJ,EAAOK,iBAAmBA,EAC1BL,EAAOM,YAAcA,EACrBN,EAAOO,UAAYA"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/layout/docsComponents/index.tsx"],"sourcesContent":["import React from 'react'\nimport DocsHeader from './DocsHeader/DocsHeader'\nimport DocsSideMenuTree from './DocsSideMenuTree/DocsSideMenuTree'\nimport DocsContent from './DocsContent/DocsContent'\nimport DocsAside from './DocsAside/DocsAside'\nimport './index.scss'\n\ntype LayoutProps = {\n children: React.ReactNode\n}\n\ntype CompoundLayout = React.FC<LayoutProps> & {\n DocsHeader: typeof DocsHeader\n DocsSideMenuTree: typeof DocsSideMenuTree\n DocsContent: typeof DocsContent\n DocsAside: typeof DocsAside\n}\n\nconst Layout = (({ children }: LayoutProps) => {\n return <div className=\"api-docs-layout\">{children}</div>\n}) as CompoundLayout\n\nLayout.DocsHeader = DocsHeader\nLayout.DocsSideMenuTree = DocsSideMenuTree\nLayout.DocsContent = DocsContent\nLayout.DocsAside = DocsAside\n\nexport default Layout\n"],"names":["Layout","children","React","className","DocsHeader","DocsSideMenuTree","DocsContent","DocsAside"],"mappings":"yMAkBM,MAAAA,EAAU,EAAGC,cACVC,uBAAKC,UAAU,mBAAmBF,GAG3CD,EAAOI,WAAaA,EACpBJ,EAAOK,iBAAmBA,EAC1BL,EAAOM,YAAcA,EACrBN,EAAOO,UAAYA"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"../../_virtual/jsx-runtime.js";import t,{useState as i,useRef as s,useEffect as o}from"react";import a from"./docsComponents/index.js";import{transformOpenApiToDocs as r}from"../helpers/docs.helper.js";import n from"../../_virtual/index3.js";import{SectionToggleProvider as c}from"../context/SectionToggleContext.js";import{ToastContainer as p}from"../../node_modules/react-toastify/dist/index.mjs.js";var d=t.memo(({apis:t,activeApiId:n,onProductNavigate:d})=>{const[l,m]=i([]),[v,u]=i(!0),[j,x]=i({}),[A,f]=i("OVERVIEW"),C=s([]),[I,D]=i(!0),[T,g]=i(!1),[h,F]=i(!1);o(()=>{var e;if(0===l.length){g(!!n);const i=null===(e=structuredClone(t))||void 0===e?void 0:e.map(e=>r(e)).sort((e,t)=>e.title.toLowerCase().localeCompare(t.title.toLowerCase()));m(i),C.current=i,i.length>0&&D(!1)}},[t]);return e.jsxs(a,{children:[e.jsxs(c,{children:[e.jsx(a.DocsHeader,{transformedOpenApis:l,updateFilteredData:(e,t=!1)=>{m(t?C.current:e)}}),!I&&e.jsx(a.DocsSideMenuTree,{apis:l,setActiveItemData:x,activeItemData:j,isFirstApiExpanded:v,activeType:A,setIsFirstApiExpanded:u,setActiveType:f,canSelectFirstApi:T,canFocusSection:h,setCanFocusSection:F,activeApiId:n,setCanSelectFirstApi:g}),!I&&Object.keys(j).length>0&&e.jsx(a.DocsContent,{data:j,activeType:A,setActiveItemData:x,setActiveType:f,onProductNavigate:d,apis:l}),"ENDPOINT"===A&&e.jsx(a.DocsAside,{data:j})]}),e.jsx(p,{})]})},function(e,t){var i,s;return n(null!==(i=e.apis)&&void 0!==i?i:[])===n(null!==(s=t.apis)&&void 0!==s?s:[])&&e.activeApiId===t.activeApiId});export{d as default};
1
+ import e,{useState as t,useRef as a,useEffect as i}from"react";import o from"./docsComponents/index.js";import{transformOpenApiToDocs as r}from"../helpers/docs.helper.js";import n from"../../_virtual/index3.js";import{SectionToggleProvider as s}from"../context/SectionToggleContext.js";import{ToastContainer as c}from"../../node_modules/react-toastify/dist/index.mjs.js";var l=e.memo(({apis:n,activeApiId:l,onProductNavigate:p})=>{const[d,m]=t([]),[u,v]=t(!0),[A,E]=t({}),[f,C]=t("OVERVIEW"),I=a([]),[D,x]=t(!0),[T,g]=t(!1),[j,F]=t(!1);i(()=>{var e;if(0===d.length){g(!!l);const t=null===(e=structuredClone(n))||void 0===e?void 0:e.map(e=>r(e)).sort((e,t)=>e.title.toLowerCase().localeCompare(t.title.toLowerCase()));m(t),I.current=t,t.length>0&&x(!1)}},[n]);return e.createElement(o,null,e.createElement(s,null,e.createElement(o.DocsHeader,{transformedOpenApis:d,updateFilteredData:(e,t=!1)=>{m(t?I.current:e)}}),!D&&e.createElement(o.DocsSideMenuTree,{apis:d,setActiveItemData:E,activeItemData:A,isFirstApiExpanded:u,activeType:f,setIsFirstApiExpanded:v,setActiveType:C,canSelectFirstApi:T,canFocusSection:j,setCanFocusSection:F,activeApiId:l,setCanSelectFirstApi:g}),!D&&Object.keys(A).length>0&&e.createElement(o.DocsContent,{data:A,activeType:f,setActiveItemData:E,setActiveType:C,onProductNavigate:p,apis:d}),"ENDPOINT"===f&&e.createElement(o.DocsAside,{data:A})),e.createElement(c,null))},function(e,t){var a,i;return n(null!==(a=e.apis)&&void 0!==a?a:[])===n(null!==(i=t.apis)&&void 0!==i?i:[])&&e.activeApiId===t.activeApiId});export{l as default};
2
2
  //# sourceMappingURL=docsLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docsLayout.js","sources":["../../../src/layout/docsLayout.tsx"],"sourcesContent":["'use client'\nimport React, { JSX, useEffect, useRef, useState } from 'react'\nimport Layout from './docsComponents'\nimport { HTTPMethod, OpenAPIFile, Parameter, RequestBody, Responses } from '@entities/openApi'\nimport { transformOpenApiToDocs } from '../helpers/docs.helper'\nimport { ApiSpecModel } from '@entities/index'\nimport stableStringify from 'fast-json-stable-stringify'\nimport { SectionToggleProvider } from '../../src/context/SectionToggleContext'\nimport { ToastContainer } from 'react-toastify'\n\ninterface ILayoutProps {\n apis?: ApiSpecModel[]\n activeApiId?: string\n onProductNavigate?: (productId: number) => void\n}\n\nexport interface TagData {\n id: string\n method: HTTPMethod\n path: string\n tags: string[]\n responses: Responses\n summary?: string\n description: string\n parameters?: Parameter[]\n requestBody?: RequestBody\n}\n\nexport interface EndpointData extends TagData {\n api: OverviewData\n}\n\nexport interface OverviewData extends Omit<ApiSpecModel, 'metaData'> {\n description: string\n title: string\n version: string\n tags: Record<string, TagData[]>\n servers: OpenAPIFile['servers']\n}\n\nfunction areEqual(prev: ILayoutProps, next: ILayoutProps): boolean {\n return (\n stableStringify(prev.apis ?? []) === stableStringify(next.apis ?? []) &&\n prev.activeApiId === next.activeApiId\n )\n}\n\nconst DocsLayout = ({ apis, activeApiId, onProductNavigate }: ILayoutProps): JSX.Element => {\n const [transformedOpenApis, setTransformedOpenApis] = useState<OverviewData[]>([])\n const [isFirstApiExpanded, setIsFirstApiExpanded] = useState(true)\n const [activeItemData, setActiveItemData] = useState<\n OverviewData | EndpointData | Record<string, never>\n >({})\n const [activeType, setActiveType] = useState<'OVERVIEW' | 'ENDPOINT'>('OVERVIEW')\n const allData = useRef([])\n const [pending, setPending] = useState(true)\n const [canSelectFirstApi, setCanSelectFirstApi] = useState(false)\n const [canFocusSection, setCanFocusSection] = useState(false)\n\n useEffect(() => {\n if (transformedOpenApis.length === 0) {\n setCanSelectFirstApi(!!activeApiId)\n const t = structuredClone(apis)\n ?.map((o3) => transformOpenApiToDocs(o3))\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n setTransformedOpenApis(t)\n allData.current = t\n if (t.length > 0) {\n setPending(false)\n }\n }\n }, [apis])\n\n const updateFilteredData = (filteredItems: OverviewData[], isReset = false) => {\n if (isReset) {\n setTransformedOpenApis(allData.current)\n return\n }\n setTransformedOpenApis(filteredItems)\n }\n\n return (\n <Layout>\n <SectionToggleProvider>\n <Layout.DocsHeader\n transformedOpenApis={transformedOpenApis}\n updateFilteredData={updateFilteredData}\n />\n {!pending && (\n <Layout.DocsSideMenuTree\n apis={transformedOpenApis}\n setActiveItemData={setActiveItemData}\n activeItemData={activeItemData as OverviewData | EndpointData}\n isFirstApiExpanded={isFirstApiExpanded}\n activeType={activeType}\n setIsFirstApiExpanded={setIsFirstApiExpanded}\n setActiveType={setActiveType}\n canSelectFirstApi={canSelectFirstApi}\n canFocusSection={canFocusSection}\n setCanFocusSection={setCanFocusSection}\n activeApiId={activeApiId}\n setCanSelectFirstApi={setCanSelectFirstApi}\n />\n )}\n\n {!pending && Object.keys(activeItemData).length > 0 && (\n <Layout.DocsContent\n data={activeItemData as OverviewData | EndpointData}\n activeType={activeType}\n setActiveItemData={setActiveItemData}\n setActiveType={setActiveType}\n onProductNavigate={onProductNavigate}\n apis={transformedOpenApis}\n />\n )}\n {activeType === 'ENDPOINT' && <Layout.DocsAside data={activeItemData as EndpointData} />}\n </SectionToggleProvider>\n\n <ToastContainer />\n </Layout>\n )\n}\n\nexport default React.memo(DocsLayout, areEqual)\n"],"names":["docsLayout","React","memo","apis","activeApiId","onProductNavigate","transformedOpenApis","setTransformedOpenApis","useState","isFirstApiExpanded","setIsFirstApiExpanded","activeItemData","setActiveItemData","activeType","setActiveType","allData","useRef","pending","setPending","canSelectFirstApi","setCanSelectFirstApi","canFocusSection","setCanFocusSection","useEffect","length","t","_a","structuredClone","map","o3","transformOpenApiToDocs","sort","a","b","title","toLowerCase","localeCompare","current","_jsxs","jsxs","Layout","children","SectionToggleProvider","_jsx","DocsHeader","updateFilteredData","filteredItems","isReset","jsx","DocsSideMenuTree","Object","keys","DocsContent","data","DocsAside","ToastContainer","prev","next","stableStringify","_b"],"mappings":"qaA2HA,IAAAA,EAAeC,EAAMC,KA5EF,EAAGC,OAAMC,cAAaC,wBACvC,MAAOC,EAAqBC,GAA0BC,EAAyB,KACxEC,EAAoBC,GAAyBF,GAAS,IACtDG,EAAgBC,GAAqBJ,EAE1C,CAAE,IACGK,EAAYC,GAAiBN,EAAkC,YAChEO,EAAUC,EAAO,KAChBC,EAASC,GAAcV,GAAS,IAChCW,EAAmBC,GAAwBZ,GAAS,IACpDa,EAAiBC,GAAsBd,GAAS,GAEvDe,EAAU,WACR,GAAmC,IAA/BjB,EAAoBkB,OAAc,CACpCJ,IAAuBhB,GACvB,MAAMqB,UAAIC,EAAAC,gBAAgBxB,yBACtByB,IAAKC,GAAOC,EAAuBD,IACpCE,KAAK,CAACC,EAAGC,IAAMD,EAAEE,MAAMC,cAAcC,cAAcH,EAAEC,MAAMC,gBAC9D5B,EAAuBkB,GACvBV,EAAQsB,QAAUZ,EACdA,EAAED,OAAS,GACbN,GAAW,EAEd,GACA,CAACf,IAUJ,OACEmC,EAAAC,KAACC,EAAM,CAAAC,SAAA,CACLH,OAACI,EAAqB,CAAAD,SAAA,CACpBE,MAACH,EAAOI,WACN,CAAAtC,oBAAqBA,EACrBuC,mBAbmB,CAACC,EAA+BC,GAAU,KAEjExC,EADEwC,EACqBhC,EAAQsB,QAGVS,OAUjB7B,GACA0B,EAACK,IAAAR,EAAOS,iBAAgB,CACtB9C,KAAMG,EACNM,kBAAmBA,EACnBD,eAAgBA,EAChBF,mBAAoBA,EACpBI,WAAYA,EACZH,sBAAuBA,EACvBI,cAAeA,EACfK,kBAAmBA,EACnBE,gBAAiBA,EACjBC,mBAAoBA,EACpBlB,YAAaA,EACbgB,qBAAsBA,KAIxBH,GAAWiC,OAAOC,KAAKxC,GAAgBa,OAAS,GAChDmB,EAAAA,IAACH,EAAOY,YAAW,CACjBC,KAAM1C,EACNE,WAAYA,EACZD,kBAAmBA,EACnBE,cAAeA,EACfT,kBAAmBA,EACnBF,KAAMG,IAGM,aAAfO,GAA6B8B,EAAAK,IAACR,EAAOc,UAAS,CAACD,KAAM1C,OAGxDgC,EAACK,IAAAO,EAAiB,CAAA,OA9ExB,SAAkBC,EAAoBC,WACpC,OACEC,EAA6B,UAAbF,EAAKrD,YAAQ,IAAAuB,EAAAA,EAAA,MAAQgC,EAAyB,QAATC,EAAAF,EAAKtD,YAAI,IAAAwD,EAAAA,EAAI,KAClEH,EAAKpD,cAAgBqD,EAAKrD,WAE9B"}
1
+ {"version":3,"file":"docsLayout.js","sources":["../../../src/layout/docsLayout.tsx"],"sourcesContent":["'use client'\nimport React, { JSX, useEffect, useRef, useState } from 'react'\nimport Layout from './docsComponents'\nimport { HTTPMethod, OpenAPIFile, Parameter, RequestBody, Responses } from '@entities/openApi'\nimport { transformOpenApiToDocs } from '../helpers/docs.helper'\nimport { ApiSpecModel } from '@entities/index'\nimport stableStringify from 'fast-json-stable-stringify'\nimport { SectionToggleProvider } from '../../src/context/SectionToggleContext'\nimport { ToastContainer } from 'react-toastify'\n\ninterface ILayoutProps {\n apis?: ApiSpecModel[]\n activeApiId?: string\n onProductNavigate?: (productId: number) => void\n}\n\nexport interface TagData {\n id: string\n method: HTTPMethod\n path: string\n tags: string[]\n responses: Responses\n summary?: string\n description: string\n parameters?: Parameter[]\n requestBody?: RequestBody\n}\n\nexport interface EndpointData extends TagData {\n api: OverviewData\n}\n\nexport interface OverviewData extends Omit<ApiSpecModel, 'metaData'> {\n description: string\n title: string\n version: string\n tags: Record<string, TagData[]>\n servers: OpenAPIFile['servers']\n}\n\nfunction areEqual(prev: ILayoutProps, next: ILayoutProps): boolean {\n return (\n stableStringify(prev.apis ?? []) === stableStringify(next.apis ?? []) &&\n prev.activeApiId === next.activeApiId\n )\n}\n\nconst DocsLayout = ({ apis, activeApiId, onProductNavigate }: ILayoutProps): JSX.Element => {\n const [transformedOpenApis, setTransformedOpenApis] = useState<OverviewData[]>([])\n const [isFirstApiExpanded, setIsFirstApiExpanded] = useState(true)\n const [activeItemData, setActiveItemData] = useState<\n OverviewData | EndpointData | Record<string, never>\n >({})\n const [activeType, setActiveType] = useState<'OVERVIEW' | 'ENDPOINT'>('OVERVIEW')\n const allData = useRef([])\n const [pending, setPending] = useState(true)\n const [canSelectFirstApi, setCanSelectFirstApi] = useState(false)\n const [canFocusSection, setCanFocusSection] = useState(false)\n\n useEffect(() => {\n if (transformedOpenApis.length === 0) {\n setCanSelectFirstApi(!!activeApiId)\n const t = structuredClone(apis)\n ?.map((o3) => transformOpenApiToDocs(o3))\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n setTransformedOpenApis(t)\n allData.current = t\n if (t.length > 0) {\n setPending(false)\n }\n }\n }, [apis])\n\n const updateFilteredData = (filteredItems: OverviewData[], isReset = false) => {\n if (isReset) {\n setTransformedOpenApis(allData.current)\n return\n }\n setTransformedOpenApis(filteredItems)\n }\n\n return (\n <Layout>\n <SectionToggleProvider>\n <Layout.DocsHeader\n transformedOpenApis={transformedOpenApis}\n updateFilteredData={updateFilteredData}\n />\n {!pending && (\n <Layout.DocsSideMenuTree\n apis={transformedOpenApis}\n setActiveItemData={setActiveItemData}\n activeItemData={activeItemData as OverviewData | EndpointData}\n isFirstApiExpanded={isFirstApiExpanded}\n activeType={activeType}\n setIsFirstApiExpanded={setIsFirstApiExpanded}\n setActiveType={setActiveType}\n canSelectFirstApi={canSelectFirstApi}\n canFocusSection={canFocusSection}\n setCanFocusSection={setCanFocusSection}\n activeApiId={activeApiId}\n setCanSelectFirstApi={setCanSelectFirstApi}\n />\n )}\n\n {!pending && Object.keys(activeItemData).length > 0 && (\n <Layout.DocsContent\n data={activeItemData as OverviewData | EndpointData}\n activeType={activeType}\n setActiveItemData={setActiveItemData}\n setActiveType={setActiveType}\n onProductNavigate={onProductNavigate}\n apis={transformedOpenApis}\n />\n )}\n {activeType === 'ENDPOINT' && <Layout.DocsAside data={activeItemData as EndpointData} />}\n </SectionToggleProvider>\n\n <ToastContainer />\n </Layout>\n )\n}\n\nexport default React.memo(DocsLayout, areEqual)\n"],"names":["docsLayout","React","memo","apis","activeApiId","onProductNavigate","transformedOpenApis","setTransformedOpenApis","useState","isFirstApiExpanded","setIsFirstApiExpanded","activeItemData","setActiveItemData","activeType","setActiveType","allData","useRef","pending","setPending","canSelectFirstApi","setCanSelectFirstApi","canFocusSection","setCanFocusSection","useEffect","length","t","_a","structuredClone","map","o3","transformOpenApiToDocs","sort","a","b","title","toLowerCase","localeCompare","current","Layout","createElement","SectionToggleProvider","DocsHeader","updateFilteredData","filteredItems","isReset","DocsSideMenuTree","Object","keys","DocsContent","data","DocsAside","ToastContainer","prev","next","stableStringify","_b"],"mappings":"mXA2HA,IAAAA,EAAeC,EAAMC,KA5EF,EAAGC,OAAMC,cAAaC,wBACvC,MAAOC,EAAqBC,GAA0BC,EAAyB,KACxEC,EAAoBC,GAAyBF,GAAS,IACtDG,EAAgBC,GAAqBJ,EAE1C,CAAE,IACGK,EAAYC,GAAiBN,EAAkC,YAChEO,EAAUC,EAAO,KAChBC,EAASC,GAAcV,GAAS,IAChCW,EAAmBC,GAAwBZ,GAAS,IACpDa,EAAiBC,GAAsBd,GAAS,GAEvDe,EAAU,WACR,GAAmC,IAA/BjB,EAAoBkB,OAAc,CACpCJ,IAAuBhB,GACvB,MAAMqB,UAAIC,EAAAC,gBAAgBxB,yBACtByB,IAAKC,GAAOC,EAAuBD,IACpCE,KAAK,CAACC,EAAGC,IAAMD,EAAEE,MAAMC,cAAcC,cAAcH,EAAEC,MAAMC,gBAC9D5B,EAAuBkB,GACvBV,EAAQsB,QAAUZ,EACdA,EAAED,OAAS,GACbN,GAAW,EAEd,GACA,CAACf,IAUJ,OACEF,gBAACqC,EAAM,KACLrC,EAAAsC,cAACC,EAAqB,KACpBvC,EAACsC,cAAAD,EAAOG,WACN,CAAAnC,oBAAqBA,EACrBoC,mBAbmB,CAACC,EAA+BC,GAAU,KAEjErC,EADEqC,EACqB7B,EAAQsB,QAGVM,OAUjB1B,GACAhB,EAACsC,cAAAD,EAAOO,iBACN,CAAA1C,KAAMG,EACNM,kBAAmBA,EACnBD,eAAgBA,EAChBF,mBAAoBA,EACpBI,WAAYA,EACZH,sBAAuBA,EACvBI,cAAeA,EACfK,kBAAmBA,EACnBE,gBAAiBA,EACjBC,mBAAoBA,EACpBlB,YAAaA,EACbgB,qBAAsBA,KAIxBH,GAAW6B,OAAOC,KAAKpC,GAAgBa,OAAS,GAChDvB,EAAAsC,cAACD,EAAOU,aACNC,KAAMtC,EACNE,WAAYA,EACZD,kBAAmBA,EACnBE,cAAeA,EACfT,kBAAmBA,EACnBF,KAAMG,IAGM,aAAfO,GAA6BZ,EAAAsC,cAACD,EAAOY,UAAS,CAACD,KAAMtC,KAGxDV,EAAAsC,cAACY,EAAc,QA9ErB,SAAkBC,EAAoBC,WACpC,OACEC,EAA6B,UAAbF,EAAKjD,YAAQ,IAAAuB,EAAAA,EAAA,MAAQ4B,EAAyB,QAATC,EAAAF,EAAKlD,YAAI,IAAAoD,EAAAA,EAAI,KAClEH,EAAKhD,cAAgBiD,EAAKjD,WAE9B"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"../../_virtual/jsx-runtime.js";import{useState as t,useEffect as o}from"react";import{d as i}from"../../_virtual/index.js";import r from"../components/MethodAccordion/MethodAccordion.js";import s from"./layout.module.css.js";import n from"../components/InfoForm/InfoForm.js";import a from"../components/SectionHead/SectionHead.js";import{transformOpenApiObject as l,transformOpenApiObjectToOrigin as d}from"../helpers/layout.helper.js";import m from"../components/LivePreview/LivePreview.js";import{useFormik as c,FormikProvider as u}from"../../node_modules/formik/dist/formik.esm.js";import{schemaValidation as h}from"../validator/form.scheme.js";import{methodColorMapping as p}from"../constants/index.js";import v from"../components/dialog/index.js";const j=({openApiJson:j,handleSave:x,setIsFormDirty:f,openApiErrors:g})=>{const S=structuredClone(j),y=l(S),A=c({initialValues:structuredClone(y),validationSchema:h,validateOnMount:!0,onSubmit:(e,{validateForm:t,resetForm:o,setSubmitting:i})=>{try{const i=d(e);x(i),o({values:e}),t(e)}catch(e){i(!1)}}}),{dirty:b,isValid:F,isSubmitting:$,values:C,setFieldValue:N,handleSubmit:w,errors:H}=A,[I,P]=t(!1),[_,D]=t(null);return o(()=>{f&&f(b)},[b]),e.jsxs("div",{className:s.docsLayout,children:[b&&e.jsx(i.Alert,{className:s.apiDocAlert,color:"warning",severity:"warning",children:"There are changes you made may not be saved"}),e.jsxs("div",{className:s.layoutContainer,children:[e.jsxs("div",{className:`${s.editorSide} ${s.docSide}`,children:[e.jsx(a,{className:s.editorSectionHead_title,text:e.jsxs("div",{className:s.editorSectionHead_content,children:["API Documentation",e.jsx(i.Button,{className:s.methodForm_submitBtn,size:"medium",fullWidth:!1,type:"submit",variant:"contained",color:"primary",onClick:()=>P(!0),disabled:!F||$||!b,children:"Save"})]})}),e.jsx(u,{value:A,children:e.jsx(n,{})}),e.jsx(a,{className:s.editorSectionHead,text:"Endpoints"}),e.jsx(u,{value:A,children:C.paths.map((t,o)=>e.jsx(e.Fragment,{children:t.methods.sort((e,t)=>p[e.type].order-p[t.type].order).map((i,s)=>{var n,a,l;return e.jsx(r,{tags:C.tags,method:i,path:t.path,setFieldValue:(e,t)=>{N(`paths[${o}].methods[${s}].${e}`,t)},isOpen:_===parseInt(`${o}${s}`),setIsOpen:e=>D(e?parseInt(`${o}${s}`):null),errors:null===(l=null===(a=null===(n=A.errors.paths)||void 0===n?void 0:n[o])||void 0===a?void 0:a.methods)||void 0===l?void 0:l[s]})})}))})]}),e.jsx("div",{className:`${s.livePreviewSide} ${s.docSide}`,children:y&&e.jsx(u,{value:A,children:e.jsx(m,{transformedData:y,openApiErrors:g})})})]}),e.jsx(v,{status:"warning",content:e.jsxs(e.Fragment,{children:[e.jsx("h5",{style:{fontWeight:600,fontSize:"1.5rem",lineHeight:"1.875rem",color:"#FAAD14",textAlign:"center",margin:0},children:"Publish Changes"}),e.jsx("p",{style:{textAlign:"center",fontWeight:400,fontSize:"1rem",lineHeight:"1.4375rem"},children:"Are you sure to Publish the changes?"})]}),onSubmit:{onClick:()=>{w(),P(!1)},text:"Publish",color:"warning",fullWidth:!0},onCancel:{text:"Cancel",color:"action",fullWidth:!0,variant:"outlined"},onClose:()=>P(!1),open:I})]})};export{j as default};
1
+ import{useState as e,useEffect as t}from"react";import{d as a}from"../../_virtual/index.js";import o from"../components/MethodAccordion/MethodAccordion.js";import r from"./layout.module.css.js";import n from"../components/InfoForm/InfoForm.js";import i from"../components/SectionHead/SectionHead.js";import{transformOpenApiObject as l,transformOpenApiObjectToOrigin as s}from"../helpers/layout.helper.js";import m from"../components/LivePreview/LivePreview.js";import{useFormik as c,FormikProvider as d}from"../../node_modules/formik/dist/formik.esm.js";import{schemaValidation as u}from"../validator/form.scheme.js";import{methodColorMapping as p}from"../constants/index.js";import h from"../components/dialog/index.js";const v=({openApiJson:v,handleSave:f,setIsFormDirty:E,openApiErrors:R})=>{const g=structuredClone(v),S=l(g),y=c({initialValues:structuredClone(S),validationSchema:u,validateOnMount:!0,onSubmit:(e,{validateForm:t,resetForm:a,setSubmitting:o})=>{try{const o=s(e);f(o),a({values:e}),t(e)}catch(e){o(!1)}}}),{dirty:A,isValid:b,isSubmitting:j,values:F,setFieldValue:$,handleSubmit:x,errors:C}=y,[N,w]=e(!1),[H,I]=e(null);return t(()=>{E&&E(A)},[A]),React.createElement("div",{className:r.docsLayout},A&&React.createElement(a.Alert,{className:r.apiDocAlert,color:"warning",severity:"warning"},"There are changes you made may not be saved"),React.createElement("div",{className:r.layoutContainer},React.createElement("div",{className:`${r.editorSide} ${r.docSide}`},React.createElement(i,{className:r.editorSectionHead_title,text:React.createElement("div",{className:r.editorSectionHead_content},"API Documentation",React.createElement(a.Button,{className:r.methodForm_submitBtn,size:"medium",fullWidth:!1,type:"submit",variant:"contained",color:"primary",onClick:()=>w(!0),disabled:!b||j||!A},"Save"))}),React.createElement(d,{value:y},React.createElement(n,null)),React.createElement(i,{className:r.editorSectionHead,text:"Endpoints"}),React.createElement(d,{value:y},F.paths.map((e,t)=>React.createElement(React.Fragment,null,e.methods.sort((e,t)=>p[e.type].order-p[t.type].order).map((a,r)=>{var n,i,l;return React.createElement(o,{tags:F.tags,method:a,path:e.path,setFieldValue:(e,a)=>{$(`paths[${t}].methods[${r}].${e}`,a)},isOpen:H===parseInt(`${t}${r}`),setIsOpen:e=>I(e?parseInt(`${t}${r}`):null),errors:null===(l=null===(i=null===(n=y.errors.paths)||void 0===n?void 0:n[t])||void 0===i?void 0:i.methods)||void 0===l?void 0:l[r]})}))))),React.createElement("div",{className:`${r.livePreviewSide} ${r.docSide}`},S&&React.createElement(d,{value:y},React.createElement(m,{transformedData:S,openApiErrors:R})))),React.createElement(h,{status:"warning",content:React.createElement(React.Fragment,null,React.createElement("h5",{style:{fontWeight:600,fontSize:"1.5rem",lineHeight:"1.875rem",color:"#FAAD14",textAlign:"center",margin:0}},"Publish Changes"),React.createElement("p",{style:{textAlign:"center",fontWeight:400,fontSize:"1rem",lineHeight:"1.4375rem"}},"Are you sure to Publish the changes?")),onSubmit:{onClick:()=>{x(),w(!1)},text:"Publish",color:"warning",fullWidth:!0},onCancel:{text:"Cancel",color:"action",fullWidth:!0,variant:"outlined"},onClose:()=>w(!1),open:N}))};export{v as default};
2
2
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sources":["../../../src/layout/layout.tsx"],"sourcesContent":["'use client'\nimport { JSX, useEffect, useState } from 'react'\nimport { Alert, Button } from 'digitinary-ui'\nimport MethodsAccordion from '../components/MethodAccordion/MethodAccordion'\nimport styles from './layout.module.css'\nimport InfoForm from '../components/InfoForm/InfoForm'\nimport SectionHead from '../components/SectionHead/SectionHead'\nimport { transformOpenApiObject, transformOpenApiObjectToOrigin } from '../helpers/layout.helper'\nimport { OpenAPIFile } from '../types/openApi'\nimport LivePreview from '../components/LivePreview/LivePreview'\nimport { FormikProvider, useFormik } from 'formik'\nimport { schemaValidation } from '../validator/form.scheme'\nimport { TransformedOpenApi } from '@entities/transformedOpenApi'\nimport { methodColorMapping } from '../constants/index'\nimport CommonDialog from '../components/dialog'\n\ninterface ILayoutProps {\n openApiJson?: OpenAPIFile\n handleSave?: (values: unknown) => unknown\n setIsFormDirty?: any\n openApiErrors?: any\n}\n\nconst Layout = ({\n openApiJson,\n handleSave,\n setIsFormDirty,\n openApiErrors,\n}: ILayoutProps): JSX.Element => {\n const clonedOpenApiJson = structuredClone(openApiJson)\n const transformedOpenApi = transformOpenApiObject(clonedOpenApiJson)\n const formik = useFormik<TransformedOpenApi>({\n initialValues: structuredClone(transformedOpenApi),\n validationSchema: schemaValidation,\n validateOnMount: true,\n onSubmit: (values, { validateForm, resetForm, setSubmitting }) => {\n // Handle save logic\n try {\n const originalOpenApiForm = transformOpenApiObjectToOrigin(values)\n handleSave(originalOpenApiForm)\n resetForm({\n values: values, // You can reset it to the same values if you want\n })\n\n validateForm(values)\n } catch (err) {\n setSubmitting(false)\n }\n },\n })\n const { dirty, isValid, isSubmitting, values, setFieldValue, handleSubmit, errors } = formik\n const [isPublishDialogOpen, setIsPublishDialogOpen] = useState(false)\n\n const [openMethodIndex, setOpenMethodIndex] = useState<number | null>(null)\n\n useEffect(() => {\n if (setIsFormDirty) {\n setIsFormDirty(dirty)\n }\n }, [dirty])\n\n return (\n <div className={styles.docsLayout}>\n {dirty && (\n <Alert className={styles.apiDocAlert} color=\"warning\" severity=\"warning\">\n There are changes you made may not be saved\n </Alert>\n )}\n <div className={styles.layoutContainer}>\n <div className={`${styles.editorSide} ${styles.docSide}`}>\n <SectionHead\n className={styles.editorSectionHead_title}\n text={\n <div className={styles.editorSectionHead_content}>\n API Documentation\n <Button\n className={styles.methodForm_submitBtn}\n size=\"medium\"\n fullWidth={false}\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setIsPublishDialogOpen(true)}\n disabled={!isValid || isSubmitting || !dirty}\n >\n Save\n </Button>\n </div>\n }\n />\n <FormikProvider value={formik}>\n <InfoForm />\n </FormikProvider>\n <SectionHead className={styles.editorSectionHead} text=\"Endpoints\" />\n <FormikProvider value={formik}>\n {values.paths.map((path, pathIndex) => (\n <>\n {path.methods\n .sort(\n (a, b) => methodColorMapping[a.type].order - methodColorMapping[b.type].order\n )\n .map((method, methodIndex) => (\n <MethodsAccordion\n tags={values.tags}\n method={method}\n path={path.path}\n setFieldValue={(key, value) => {\n const h = `paths[${pathIndex}].methods[${methodIndex}].${key}`\n setFieldValue(h, value)\n }}\n isOpen={openMethodIndex === parseInt(`${pathIndex}${methodIndex}`)}\n setIsOpen={(open) =>\n setOpenMethodIndex(open ? parseInt(`${pathIndex}${methodIndex}`) : null)\n }\n errors={(formik.errors.paths?.[pathIndex] as any)?.methods?.[methodIndex]}\n />\n ))}\n </>\n ))}\n </FormikProvider>\n </div>\n <div className={`${styles.livePreviewSide} ${styles.docSide}`}>\n {transformedOpenApi && (\n <FormikProvider value={formik}>\n <LivePreview transformedData={transformedOpenApi} openApiErrors={openApiErrors} />\n </FormikProvider>\n )}\n </div>\n </div>\n <CommonDialog\n status=\"warning\"\n content={\n <>\n <h5\n style={{\n fontWeight: 600,\n fontSize: '1.5rem',\n lineHeight: '1.875rem',\n color: '#FAAD14',\n textAlign: 'center',\n margin: 0,\n }}\n >\n Publish Changes\n </h5>\n <p\n style={{\n textAlign: 'center',\n fontWeight: 400,\n fontSize: '1rem',\n lineHeight: '1.4375rem',\n }}\n >\n Are you sure to Publish the changes?\n </p>\n </>\n }\n onSubmit={{\n onClick: () => {\n handleSubmit()\n setIsPublishDialogOpen(false)\n },\n text: 'Publish',\n color: 'warning',\n fullWidth: true,\n }}\n onCancel={{\n text: 'Cancel',\n color: 'action',\n fullWidth: true,\n variant: 'outlined',\n }}\n onClose={() => setIsPublishDialogOpen(false)}\n open={isPublishDialogOpen}\n />\n </div>\n )\n}\n\nexport default Layout\n"],"names":["Layout","openApiJson","handleSave","setIsFormDirty","openApiErrors","clonedOpenApiJson","structuredClone","transformedOpenApi","transformOpenApiObject","formik","useFormik","initialValues","validationSchema","schemaValidation","validateOnMount","onSubmit","values","validateForm","resetForm","setSubmitting","originalOpenApiForm","transformOpenApiObjectToOrigin","err","dirty","isValid","isSubmitting","setFieldValue","handleSubmit","errors","isPublishDialogOpen","setIsPublishDialogOpen","useState","openMethodIndex","setOpenMethodIndex","useEffect","_jsxs","jsxs","className","styles","docsLayout","children","_jsx","Alert","apiDocAlert","color","severity","layoutContainer","editorSide","docSide","SectionHead","editorSectionHead_title","text","editorSectionHead_content","Button","methodForm_submitBtn","size","fullWidth","type","variant","onClick","disabled","FormikProvider","value","InfoForm","jsx","editorSectionHead","paths","map","path","pathIndex","_Fragment","methods","sort","a","b","methodColorMapping","order","method","methodIndex","MethodsAccordion","tags","key","isOpen","parseInt","setIsOpen","open","_c","_b","_a","livePreviewSide","LivePreview","transformedData","CommonDialog","status","content","style","fontWeight","fontSize","lineHeight","textAlign","margin","onCancel","onClose"],"mappings":"mwBAuBA,MAAMA,EAAS,EACbC,cACAC,aACAC,iBACAC,oBAEA,MAAMC,EAAoBC,gBAAgBL,GACpCM,EAAqBC,EAAuBH,GAC5CI,EAASC,EAA8B,CAC3CC,cAAeL,gBAAgBC,GAC/BK,iBAAkBC,EAClBC,iBAAiB,EACjBC,SAAU,CAACC,GAAUC,eAAcC,YAAWC,oBAE5C,IACE,MAAMC,EAAsBC,EAA+BL,GAC3Dd,EAAWkB,GACXF,EAAU,CACRF,OAAQA,IAGVC,EAAaD,EACd,CAAC,MAAOM,GACPH,GAAc,EACf,MAGCI,MAAEA,EAAKC,QAAEA,EAAOC,aAAEA,EAAYT,OAAEA,EAAMU,cAAEA,EAAaC,aAAEA,EAAYC,OAAEA,GAAWnB,GAC/EoB,EAAqBC,GAA0BC,GAAS,IAExDC,EAAiBC,GAAsBF,EAAwB,MAQtE,OANAG,EAAU,KACJ/B,GACFA,EAAeoB,IAEhB,CAACA,IAGFY,EAAKC,KAAA,MAAA,CAAAC,UAAWC,EAAOC,WAAUC,SAAA,CAC9BjB,GACCkB,EAAAA,IAACC,EAAAA,OAAML,UAAWC,EAAOK,YAAaC,MAAM,UAAUC,SAAS,mEAIjEV,OAAK,MAAA,CAAAE,UAAWC,EAAOQ,gBACrBN,SAAA,CAAAL,EAAAA,KAAA,MAAA,CAAKE,UAAW,GAAGC,EAAOS,cAAcT,EAAOU,oBAC7CP,EAAAA,IAACQ,EACC,CAAAZ,UAAWC,EAAOY,wBAClBC,KACEhB,EAAAA,KAAK,MAAA,CAAAE,UAAWC,EAAOc,0BAAyBZ,SAAA,CAAA,oBAE9CC,EAAAA,IAACY,EAAAA,OAAM,CACLhB,UAAWC,EAAOgB,qBAClBC,KAAK,SACLC,WAAW,EACXC,KAAK,SACLC,QAAQ,YACRd,MAAM,UACNe,QAAS,IAAM7B,GAAuB,GACtC8B,UAAWpC,GAAWC,IAAiBF,EAAKiB,SAAA,cAOpDC,EAAAA,IAACoB,GAAeC,MAAOrD,EACrB+B,SAAAC,EAAAA,IAACsB,EAAQ,CAAA,KAEXtB,EAAAuB,IAACf,EAAY,CAAAZ,UAAWC,EAAO2B,kBAAmBd,KAAK,cACvDV,EAAAuB,IAACH,EAAe,CAAAC,MAAOrD,WACpBO,EAAOkD,MAAMC,IAAI,CAACC,EAAMC,IACvB5B,EAAAA,IACG6B,EAAAA,SAAA,CAAA9B,SAAA4B,EAAKG,QACHC,KACC,CAACC,EAAGC,IAAMC,EAAmBF,EAAEhB,MAAMmB,MAAQD,EAAmBD,EAAEjB,MAAMmB,OAEzET,IAAI,CAACU,EAAQC,eAAgB,OAC5BrC,EAAAA,IAACsC,EACC,CAAAC,KAAMhE,EAAOgE,KACbH,OAAQA,EACRT,KAAMA,EAAKA,KACX1C,cAAe,CAACuD,EAAKnB,KAEnBpC,EADU,SAAS2C,cAAsBS,MAAgBG,IACxCnB,IAEnBoB,OAAQlD,IAAoBmD,SAAS,GAAGd,IAAYS,KACpDM,UAAYC,GACVpD,EAAmBoD,EAAOF,SAAS,GAAGd,IAAYS,KAAiB,MAErElD,OAA6D,QAArD0D,EAA2C,QAA1CC,EAAmB,QAAnBC,EAAA/E,EAAOmB,OAAOsC,aAAK,IAAAsB,OAAA,EAAAA,EAAGnB,UAAoB,IAAAkB,OAAA,EAAAA,EAAAhB,eAAU,IAAAe,OAAA,EAAAA,EAAAR,eAO3ErC,EAAAuB,IAAA,MAAA,CAAK3B,UAAW,GAAGC,EAAOmD,mBAAmBnD,EAAOU,UACjDR,SAAAjC,GACCkC,EAAAA,IAACoB,EAAe,CAAAC,MAAOrD,WACrBgC,MAACiD,EAAY,CAAAC,gBAAiBpF,EAAoBH,cAAeA,WAKzEqC,EAACuB,IAAA4B,EACC,CAAAC,OAAO,UACPC,QACE3D,OAAAmC,EAAAA,SAAA,CAAA9B,SAAA,CACEC,EAAAA,IACE,KAAA,CAAAsD,MAAO,CACLC,WAAY,IACZC,SAAU,SACVC,WAAY,WACZtD,MAAO,UACPuD,UAAW,SACXC,OAAQ,GAIP5D,SAAA,oBACLC,EAAAA,IACE,IAAA,CAAAsD,MAAO,CACLI,UAAW,SACXH,WAAY,IACZC,SAAU,OACVC,WAAY,aAIZ1D,SAAA,4CAGRzB,SAAU,CACR4C,QAAS,KACPhC,IACAG,GAAuB,IAEzBqB,KAAM,UACNP,MAAO,UACPY,WAAW,GAEb6C,SAAU,CACRlD,KAAM,SACNP,MAAO,SACPY,WAAW,EACXE,QAAS,YAEX4C,QAAS,IAAMxE,GAAuB,GACtCuD,KAAMxD"}
1
+ {"version":3,"file":"layout.js","sources":["../../../src/layout/layout.tsx"],"sourcesContent":["'use client'\nimport { JSX, useEffect, useState } from 'react'\nimport { Alert, Button } from 'digitinary-ui'\nimport MethodsAccordion from '../components/MethodAccordion/MethodAccordion'\nimport styles from './layout.module.css'\nimport InfoForm from '../components/InfoForm/InfoForm'\nimport SectionHead from '../components/SectionHead/SectionHead'\nimport { transformOpenApiObject, transformOpenApiObjectToOrigin } from '../helpers/layout.helper'\nimport { OpenAPIFile } from '../types/openApi'\nimport LivePreview from '../components/LivePreview/LivePreview'\nimport { FormikProvider, useFormik } from 'formik'\nimport { schemaValidation } from '../validator/form.scheme'\nimport { TransformedOpenApi } from '@entities/transformedOpenApi'\nimport { methodColorMapping } from '../constants/index'\nimport CommonDialog from '../components/dialog'\n\ninterface ILayoutProps {\n openApiJson?: OpenAPIFile\n handleSave?: (values: unknown) => unknown\n setIsFormDirty?: any\n openApiErrors?: any\n}\n\nconst Layout = ({\n openApiJson,\n handleSave,\n setIsFormDirty,\n openApiErrors,\n}: ILayoutProps): JSX.Element => {\n const clonedOpenApiJson = structuredClone(openApiJson)\n const transformedOpenApi = transformOpenApiObject(clonedOpenApiJson)\n const formik = useFormik<TransformedOpenApi>({\n initialValues: structuredClone(transformedOpenApi),\n validationSchema: schemaValidation,\n validateOnMount: true,\n onSubmit: (values, { validateForm, resetForm, setSubmitting }) => {\n // Handle save logic\n try {\n const originalOpenApiForm = transformOpenApiObjectToOrigin(values)\n handleSave(originalOpenApiForm)\n resetForm({\n values: values, // You can reset it to the same values if you want\n })\n\n validateForm(values)\n } catch (err) {\n setSubmitting(false)\n }\n },\n })\n const { dirty, isValid, isSubmitting, values, setFieldValue, handleSubmit, errors } = formik\n const [isPublishDialogOpen, setIsPublishDialogOpen] = useState(false)\n\n const [openMethodIndex, setOpenMethodIndex] = useState<number | null>(null)\n\n useEffect(() => {\n if (setIsFormDirty) {\n setIsFormDirty(dirty)\n }\n }, [dirty])\n\n return (\n <div className={styles.docsLayout}>\n {dirty && (\n <Alert className={styles.apiDocAlert} color=\"warning\" severity=\"warning\">\n There are changes you made may not be saved\n </Alert>\n )}\n <div className={styles.layoutContainer}>\n <div className={`${styles.editorSide} ${styles.docSide}`}>\n <SectionHead\n className={styles.editorSectionHead_title}\n text={\n <div className={styles.editorSectionHead_content}>\n API Documentation\n <Button\n className={styles.methodForm_submitBtn}\n size=\"medium\"\n fullWidth={false}\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setIsPublishDialogOpen(true)}\n disabled={!isValid || isSubmitting || !dirty}\n >\n Save\n </Button>\n </div>\n }\n />\n <FormikProvider value={formik}>\n <InfoForm />\n </FormikProvider>\n <SectionHead className={styles.editorSectionHead} text=\"Endpoints\" />\n <FormikProvider value={formik}>\n {values.paths.map((path, pathIndex) => (\n <>\n {path.methods\n .sort(\n (a, b) => methodColorMapping[a.type].order - methodColorMapping[b.type].order\n )\n .map((method, methodIndex) => (\n <MethodsAccordion\n tags={values.tags}\n method={method}\n path={path.path}\n setFieldValue={(key, value) => {\n const h = `paths[${pathIndex}].methods[${methodIndex}].${key}`\n setFieldValue(h, value)\n }}\n isOpen={openMethodIndex === parseInt(`${pathIndex}${methodIndex}`)}\n setIsOpen={(open) =>\n setOpenMethodIndex(open ? parseInt(`${pathIndex}${methodIndex}`) : null)\n }\n errors={(formik.errors.paths?.[pathIndex] as any)?.methods?.[methodIndex]}\n />\n ))}\n </>\n ))}\n </FormikProvider>\n </div>\n <div className={`${styles.livePreviewSide} ${styles.docSide}`}>\n {transformedOpenApi && (\n <FormikProvider value={formik}>\n <LivePreview transformedData={transformedOpenApi} openApiErrors={openApiErrors} />\n </FormikProvider>\n )}\n </div>\n </div>\n <CommonDialog\n status=\"warning\"\n content={\n <>\n <h5\n style={{\n fontWeight: 600,\n fontSize: '1.5rem',\n lineHeight: '1.875rem',\n color: '#FAAD14',\n textAlign: 'center',\n margin: 0,\n }}\n >\n Publish Changes\n </h5>\n <p\n style={{\n textAlign: 'center',\n fontWeight: 400,\n fontSize: '1rem',\n lineHeight: '1.4375rem',\n }}\n >\n Are you sure to Publish the changes?\n </p>\n </>\n }\n onSubmit={{\n onClick: () => {\n handleSubmit()\n setIsPublishDialogOpen(false)\n },\n text: 'Publish',\n color: 'warning',\n fullWidth: true,\n }}\n onCancel={{\n text: 'Cancel',\n color: 'action',\n fullWidth: true,\n variant: 'outlined',\n }}\n onClose={() => setIsPublishDialogOpen(false)}\n open={isPublishDialogOpen}\n />\n </div>\n )\n}\n\nexport default Layout\n"],"names":["Layout","openApiJson","handleSave","setIsFormDirty","openApiErrors","clonedOpenApiJson","structuredClone","transformedOpenApi","transformOpenApiObject","formik","useFormik","initialValues","validationSchema","schemaValidation","validateOnMount","onSubmit","values","validateForm","resetForm","setSubmitting","originalOpenApiForm","transformOpenApiObjectToOrigin","err","dirty","isValid","isSubmitting","setFieldValue","handleSubmit","errors","isPublishDialogOpen","setIsPublishDialogOpen","useState","openMethodIndex","setOpenMethodIndex","useEffect","React","createElement","className","styles","docsLayout","Alert","apiDocAlert","color","severity","layoutContainer","editorSide","docSide","SectionHead","editorSectionHead_title","text","editorSectionHead_content","Button","methodForm_submitBtn","size","fullWidth","type","variant","onClick","disabled","FormikProvider","value","InfoForm","editorSectionHead","paths","map","path","pathIndex","Fragment","methods","sort","a","b","methodColorMapping","order","method","methodIndex","MethodsAccordion","tags","key","isOpen","parseInt","setIsOpen","open","_c","_b","_a","livePreviewSide","LivePreview","transformedData","CommonDialog","status","content","style","fontWeight","fontSize","lineHeight","textAlign","margin","onCancel","onClose"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import './style.scss';
2
3
  type ChipItemType = {
3
4
  id: number | string;
@@ -12,5 +13,5 @@ export type CustomChipsType = {
12
13
  onDelete?: (items: ChipItemType[]) => void;
13
14
  onClick?: (item: ChipItemType) => void;
14
15
  };
15
- declare const Chips: ({ className, items, onDelete, onClick }: CustomChipsType) => import("react/jsx-runtime").JSX.Element;
16
+ declare const Chips: ({ className, items, onDelete, onClick }: CustomChipsType) => React.JSX.Element;
16
17
  export default Chips;
@@ -1,4 +1,4 @@
1
1
  declare const InfoForm: ({ readOnly }: {
2
2
  readOnly?: boolean;
3
- }) => import("react/jsx-runtime").JSX.Element;
3
+ }) => import("react").JSX.Element;
4
4
  export default InfoForm;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  declare const JsonInput: ({ placeholder, label, value, onValidation, onChange, dataId, className, errorMessage, acceptType, fieldIsDisabled, withFooter, }: {
2
3
  placeholder: any;
3
4
  label: any;
@@ -10,5 +11,5 @@ declare const JsonInput: ({ placeholder, label, value, onValidation, onChange, d
10
11
  acceptType?: string;
11
12
  fieldIsDisabled: any;
12
13
  withFooter?: boolean;
13
- }) => import("react/jsx-runtime").JSX.Element;
14
+ }) => React.JSX.Element;
14
15
  export default JsonInput;
@@ -9,5 +9,5 @@ declare const MethodsAccordion: ({ method, path, setFieldValue, readOnly, tags,
9
9
  isOpen: boolean;
10
10
  setIsOpen: (open: boolean) => void;
11
11
  errors?: string;
12
- }) => import("react/jsx-runtime").JSX.Element;
12
+ }) => import("react").JSX.Element;
13
13
  export default MethodsAccordion;
@@ -1,4 +1,5 @@
1
+ import React from 'react';
1
2
  import './style.scss';
2
3
  import { CommonDialogProps } from './dialog';
3
- declare const CommonDialog: ({ status, content, onSubmit, onCancel, onClose, open, size, icon, noActions, closeIcon, }: CommonDialogProps) => import("react/jsx-runtime").JSX.Element;
4
+ declare const CommonDialog: ({ status, content, onSubmit, onCancel, onClose, open, size, icon, noActions, closeIcon, }: CommonDialogProps) => React.JSX.Element;
4
5
  export default CommonDialog;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import './style.scss';
2
3
  declare const ParamterTable: ({ id, headCells, data, isFormOpen, setIsFormOpen, saveNewRow, readOnly, isRequest, }: {
3
4
  id: any;
@@ -8,5 +9,5 @@ declare const ParamterTable: ({ id, headCells, data, isFormOpen, setIsFormOpen,
8
9
  saveNewRow: any;
9
10
  readOnly: any;
10
11
  isRequest?: boolean;
11
- }) => import("react/jsx-runtime").JSX.Element;
12
+ }) => React.JSX.Element;
12
13
  export default ParamterTable;
@@ -7,5 +7,5 @@ declare const TagsTable: ({ id, headCells, data, isFormOpen, setIsFormOpen, save
7
7
  setIsFormOpen: any;
8
8
  saveNewRow: any;
9
9
  readOnly: any;
10
- }) => import("react/jsx-runtime").JSX.Element;
10
+ }) => import("react").JSX.Element;
11
11
  export default TagsTable;
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  export declare enum SectionEnum {
3
3
  OVERVIEW = "overview",
4
4
  RESOURCE = "resource",
@@ -33,5 +33,5 @@ interface GenerateSectionKeyParams {
33
33
  id?: string | number;
34
34
  }
35
35
  export declare const useSectionToggle: () => SectionToggleContextType;
36
- export declare const SectionToggleProvider: ({ children }: SectionToggleProviderProps) => import("react/jsx-runtime").JSX.Element;
36
+ export declare const SectionToggleProvider: ({ children }: SectionToggleProviderProps) => React.JSX.Element;
37
37
  export {};
@@ -1,27 +1,2 @@
1
- import { OpenAPIFile } from './openApi';
2
- export interface ApiSpecModel {
3
- apiSpecId: string;
4
- contextPath: string;
5
- apiVersions: {
6
- addVersionToContextPath: boolean;
7
- apiSpecId: string;
8
- name: string;
9
- metaData: {
10
- version: string;
11
- };
12
- }[];
13
- associatedProduct: {
14
- availableOnDevPortal: boolean;
15
- name: string;
16
- premium: boolean;
17
- productId: number;
18
- };
19
- metaData: {
20
- version: string;
21
- apiVersionOf: string;
22
- openApiJson: OpenAPIFile;
23
- tags: string[];
24
- createdDateTime: string;
25
- lastUpdatedDateTime: string;
26
- };
27
- }
1
+ export { default as Layout } from './layout/layout';
2
+ export { default as DocsLayout } from './layout/docsLayout';
@@ -1,4 +1,5 @@
1
+ import React from 'react';
1
2
  declare const Codebox: ({ code }: {
2
3
  code: string;
3
- }) => import("react/jsx-runtime").JSX.Element;
4
+ }) => React.JSX.Element;
4
5
  export default Codebox;
@@ -1,5 +1,6 @@
1
+ import React from 'react';
1
2
  import { EndpointData } from 'src/layout/docsLayout';
2
3
  declare const DocsAside: ({ data }: {
3
4
  data: EndpointData;
4
- }) => import("react/jsx-runtime").JSX.Element;
5
+ }) => React.JSX.Element;
5
6
  export default DocsAside;
@@ -8,5 +8,5 @@ declare const DocsContent: ({ data, activeType, setActiveItemData, setActiveType
8
8
  setActiveType: React.Dispatch<React.SetStateAction<"OVERVIEW" | "ENDPOINT">>;
9
9
  onProductNavigate?: (productId: number) => void;
10
10
  apis: OverviewData[];
11
- }) => import("react/jsx-runtime").JSX.Element;
11
+ }) => React.JSX.Element;
12
12
  export default DocsContent;
@@ -4,4 +4,4 @@ export declare const EndpointPage: ({ data, setActiveType, setActiveItemData, }:
4
4
  data: EndpointData;
5
5
  setActiveType: React.Dispatch<React.SetStateAction<"OVERVIEW" | "ENDPOINT">>;
6
6
  setActiveItemData: React.Dispatch<React.SetStateAction<OverviewData | EndpointData>>;
7
- }) => import("react/jsx-runtime").JSX.Element;
7
+ }) => import("react").JSX.Element;
@@ -7,4 +7,4 @@ export declare const OverviewPage: ({ data, setActiveItemData, setActiveType, on
7
7
  setActiveType: React.Dispatch<React.SetStateAction<"OVERVIEW" | "ENDPOINT">>;
8
8
  onProductNavigate?: (productId: number) => void;
9
9
  apis: OverviewData[];
10
- }) => import("react/jsx-runtime").JSX.Element;
10
+ }) => React.JSX.Element;
@@ -1,6 +1,7 @@
1
+ import React from 'react';
1
2
  import { OverviewData } from '../../../../src/layout/docsLayout';
2
3
  declare const DocsHeader: ({ transformedOpenApis, updateFilteredData, }: {
3
4
  transformedOpenApis: OverviewData[];
4
5
  updateFilteredData: (filteredItems: OverviewData[], isReset?: boolean) => void;
5
- }) => import("react/jsx-runtime").JSX.Element;
6
+ }) => React.JSX.Element;
6
7
  export default DocsHeader;
@@ -14,5 +14,5 @@ declare const DocsSideMenuTree: ({ apis, setActiveItemData, isFirstApiExpanded,
14
14
  setCanFocusSection: React.Dispatch<React.SetStateAction<boolean>>;
15
15
  activeApiId: string;
16
16
  setCanSelectFirstApi: React.Dispatch<React.SetStateAction<boolean>>;
17
- }) => import("react/jsx-runtime").JSX.Element;
17
+ }) => React.JSX.Element;
18
18
  export default DocsSideMenuTree;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digi-frontend/dgate-api-documentation",
3
- "version": "1.4.7",
3
+ "version": "1.4.91",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,7 +10,11 @@
10
10
  "build": "tsc --noEmit --skipLibCheck || true && rollup -c || true"
11
11
  },
12
12
  "exports": {
13
- ".": "./src/index.ts"
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.js"
16
+ },
17
+ "./style.css": "./dist/style.css"
14
18
  },
15
19
  "keywords": [],
16
20
  "author": "Dgate",
package/rollup.config.js CHANGED
@@ -4,18 +4,52 @@ import typescript from '@rollup/plugin-typescript'
4
4
  import postcss from 'rollup-plugin-postcss'
5
5
  import { terser } from 'rollup-plugin-terser'
6
6
  import url from '@rollup/plugin-url'
7
- import sass from 'rollup-plugin-sass'
8
7
  import json from '@rollup/plugin-json'
8
+ import fs from 'fs'
9
+ import path from 'path'
10
+
11
+ // Helper to rename .module.scss → .scss in dist
12
+ function renameModuleScss() {
13
+ return {
14
+ name: 'rename-module-scss',
15
+ generateBundle() {
16
+ const distFolder = path.resolve(__dirname, 'dist')
17
+ function walk(dir) {
18
+ fs.readdirSync(dir).forEach((file) => {
19
+ const fullPath = path.join(dir, file)
20
+ if (fs.statSync(fullPath).isDirectory()) walk(fullPath)
21
+ else if (file.endsWith('.module.scss')) {
22
+ const newPath = fullPath.replace('.module.scss', '.scss')
23
+ fs.renameSync(fullPath, newPath)
24
+ }
25
+ })
26
+ }
27
+ walk(distFolder)
28
+ },
29
+ }
30
+ }
9
31
 
10
32
  export default {
11
33
  input: 'src/index.ts',
12
- output: [{ dir: 'dist', format: 'esm', sourcemap: true }],
34
+ output: [
35
+ {
36
+ dir: 'dist',
37
+ format: 'esm',
38
+ sourcemap: true,
39
+ preserveModules: true, // keeps your folder structure
40
+ },
41
+ ],
13
42
  plugins: [
14
43
  resolve(),
15
44
  commonjs(),
16
- typescript({ tsconfig: './tsconfig.json', declaration: true, declarationMap: false }),
45
+ typescript({
46
+ tsconfig: './tsconfig.json',
47
+ declaration: true,
48
+ declarationMap: false,
49
+ declarationDir: 'dist/types',
50
+ }),
17
51
  postcss({
18
- modules: false,
52
+ modules: false, // no CSS modules in dist
19
53
  extract: 'style.css',
20
54
  use: ['sass'],
21
55
  minimize: true,
@@ -23,6 +57,7 @@ export default {
23
57
  terser(),
24
58
  url({ limit: 0 }),
25
59
  json(),
60
+ renameModuleScss(),
26
61
  ],
27
62
  external: ['react', 'react-dom'],
28
63
  }
package/tsconfig.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "outDir": "dist",
4
3
  "module": "ESNext",
5
4
  "target": "es6",
6
5
  "lib": ["DOM", "DOM.Iterable", "ESNext"],