@redocly/realm 0.130.0-custom.1 → 0.130.0-custom.3

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.
@@ -9,8 +9,9 @@ export type PossibleRowData = (Data | RuleProblem | TeamStats | Problem | Catalo
9
9
  export type GridProps = {
10
10
  data: PossibleRowData[];
11
11
  columns: ColumnDef<PossibleRowData>[];
12
+ gridTemplateColumns?: string;
12
13
  };
13
- export declare const Grid: ({ data, columns, sortBy, empty, subRowKey, slug, groupHeaderTitle, virtualized, }: GridProps & {
14
+ export declare const Grid: ({ data, columns, gridTemplateColumns: gridTemplateColumnsOverride, sortBy, empty, subRowKey, slug, groupHeaderTitle, virtualized, }: GridProps & {
14
15
  sortBy?: SortingState;
15
16
  empty?: ReactElement | string;
16
17
  subRowKey?: string;
@@ -1,8 +1,8 @@
1
- import t,{useMemo as c,useState as z,useEffect as G}from"react";import{useReactTable as $,getCoreRowModel as k,getSortedRowModel as A,getExpandedRowModel as I}from"@tanstack/react-table";import g from"styled-components";import{useWindowVirtualizer as H}from"@tanstack/react-virtual";import{SpinnerLoader as L}from"@redocly/theme/components/Loaders/SpinnerLoader";import{GridRow as p}from"./GridRow";import{GridHeader as V}from"./GridHeader";const P=({data:i,columns:n,sortBy:l,empty:w,subRowKey:s="subrows",slug:f,groupHeaderTitle:E,virtualized:R=!0})=>{const h=c(()=>l||[],[l]),v=$({columns:n,data:i,getCoreRowModel:k(),getSortedRowModel:A(),getExpandedRowModel:I(),getSubRows:e=>{const o=e?.[s];return Array.isArray(o)?o:[]},...l?{initialState:{sorting:h}}:{},autoResetExpanded:!1}),{getHeaderGroups:y,getRowModel:x}=v,C=y(),{rows:M}=x(),r=M.filter(e=>e.depth===0),[d,S]=z(!1);G(()=>{S(!0)},[]);const m=H({count:r.length,estimateSize:()=>54,overscan:R?15:9999,getItemKey(e){return`vi-row-${r[e].id}-${r.length}`}}),T=d?m.getVirtualItems():[],b=r.slice(0,50),a=c(()=>i.some(o=>{const u=o[s];return Array.isArray(u)&&u.length>0})?`50px repeat(${n.length-1}, 1fr)`:`25% repeat(${n.length-1}, 1fr)`,[n.length,i,s]);return t.createElement("div",{role:"table"},t.createElement(V,{headerGroups:C,gridTemplateColumns:a,groupHeaderTitle:E}),t.createElement(j,{style:{height:d?m.getTotalSize():"auto"},role:"rowgroup"},r.length>0?d?T.map(e=>{const o=r[e.index];return t.createElement(p,{key:e.key,variant:"virtualized",row:o,slug:f,virtualRow:e,virtualizer:m,gridTemplateColumns:a})}):t.createElement(t.Fragment,null,b.map(e=>t.createElement(p,{key:`ssr-row-${e.id}`,variant:"ssr",row:e,gridTemplateColumns:a})),t.createElement(D,null,t.createElement(L,{color:"var(--link-color-primary)",size:"20px"}))):t.createElement(p,{variant:"noData",empty:w,gridTemplateColumns:a})))},j=g.div`
1
+ import t,{useMemo as g,useState as T,useEffect as $}from"react";import{useReactTable as k,getCoreRowModel as A,getSortedRowModel as I,getExpandedRowModel as H}from"@tanstack/react-table";import w from"styled-components";import{useWindowVirtualizer as L}from"@tanstack/react-virtual";import{SpinnerLoader as V}from"@redocly/theme/components/Loaders/SpinnerLoader";import{GridRow as c}from"./GridRow";import{GridHeader as j}from"./GridHeader";const U=({data:i,columns:n,gridTemplateColumns:l,sortBy:s,empty:f,subRowKey:m="subrows",slug:E,groupHeaderTitle:R,virtualized:h=!0})=>{const y=g(()=>s||[],[s]),v=k({columns:n,data:i,getCoreRowModel:A(),getSortedRowModel:I(),getExpandedRowModel:H(),getSubRows:e=>{const o=e?.[m];return Array.isArray(o)?o:[]},...s?{initialState:{sorting:y}}:{},autoResetExpanded:!1}),{getHeaderGroups:x,getRowModel:C}=v,M=x(),{rows:S}=C(),r=S.filter(e=>e.depth===0),[d,b]=T(!1);$(()=>{b(!0)},[]);const u=L({count:r.length,estimateSize:()=>54,overscan:h?15:9999,getItemKey(e){return`vi-row-${r[e].id}-${r.length}`}}),z=d?u.getVirtualItems():[],G=r.slice(0,50),a=g(()=>l||(i.some(o=>{const p=o[m];return Array.isArray(p)&&p.length>0})?`50px repeat(${n.length-1}, 1fr)`:`25% repeat(${n.length-1}, 1fr)`),[n.length,i,m,l]);return t.createElement("div",{role:"table"},t.createElement(j,{headerGroups:M,gridTemplateColumns:a,groupHeaderTitle:R}),t.createElement(D,{style:{height:d?u.getTotalSize():"auto"},role:"rowgroup"},r.length>0?d?z.map(e=>{const o=r[e.index];return t.createElement(c,{key:e.key,variant:"virtualized",row:o,slug:E,virtualRow:e,virtualizer:u,gridTemplateColumns:a})}):t.createElement(t.Fragment,null,G.map(e=>t.createElement(c,{key:`ssr-row-${e.id}`,variant:"ssr",row:e,gridTemplateColumns:a})),t.createElement(F,null,t.createElement(V,{color:"var(--link-color-primary)",size:"20px"}))):t.createElement(c,{variant:"noData",empty:f,gridTemplateColumns:a})))},D=w.div`
2
2
  position: relative;
3
- `,D=g.div`
3
+ `,F=w.div`
4
4
  display: flex;
5
5
  justify-content: center;
6
6
  align-items: center;
7
7
  margin: 10px;
8
- `;export{P as Grid};
8
+ `;export{U as Grid};
@@ -1,17 +1,21 @@
1
- import o from"react";import l from"styled-components";import{flexRender as a}from"@tanstack/react-table";const C=({headerGroups:e,gridTemplateColumns:t,groupHeaderTitle:n})=>o.createElement(s,null,n&&o.createElement(g,{gridTemplateColumns:t,role:"row"},o.createElement(d,{gridColumn:"1",role:"cell"}),o.createElement(d,{gridColumn:"2 / -1",role:"cell"},o.createElement("span",null,n))),e.map((i,c)=>o.createElement(p,{key:`header-group-${c}`,gridTemplateColumns:t,role:"row"},i.headers.map((r,m)=>o.createElement(u,{key:r.id,gridColumn:m+1,onClick:r.column.getToggleSortingHandler(),role:"cell"},a(r.column.columnDef.header,r.getContext()),r.column.getCanSort()?o.createElement(x,null,r.column.getIsSorted()?r.column.getIsSorted()==="desc"?"\u25BE":"\u25B4":"\u21D5"):null))))),s=l.div`
1
+ import e from"react";import l from"styled-components";import{flexRender as m}from"@tanstack/react-table";const y=({headerGroups:o,gridTemplateColumns:t,groupHeaderTitle:n})=>e.createElement(s,null,n&&e.createElement(g,{gridTemplateColumns:t,role:"row"},e.createElement(i,{gridColumn:"1",role:"cell"}),e.createElement(i,{gridColumn:"2 / -1",role:"cell"},e.createElement("span",null,n))),o.map((d,c)=>e.createElement(p,{key:`header-group-${c}`,gridTemplateColumns:t,role:"row"},d.headers.map((r,a)=>e.createElement(u,{key:r.id,gridColumn:a+1,onClick:r.column.getToggleSortingHandler(),role:"cell"},m(r.column.columnDef.header,r.getContext()),r.column.getCanSort()?e.createElement(x,null,r.column.getIsSorted()?r.column.getIsSorted()==="desc"?"\u25BE":"\u25B4":"\u21D5"):null))))),s=l.div`
2
2
  border: 1px solid var(--border-color-primary);
3
3
  min-width: 775px;
4
+ position: sticky;
5
+ top: var(--navbar-height);
6
+ z-index: 1;
7
+ background-color: var(--color-white);
4
8
  `,g=l.div`
5
9
  display: grid;
6
- grid-template-columns: ${e=>e.gridTemplateColumns};
10
+ grid-template-columns: ${o=>o.gridTemplateColumns};
7
11
  width: 100%;
8
12
  min-width: 775px;
9
- `,d=l.div`
10
- padding: 5px 15px;
13
+ `,i=l.div`
14
+ padding: 5px;
11
15
  background-color: var(--bg-color-raised);
12
16
  font-weight: bold;
13
17
  color: var(--text-color-secondary);
14
- grid-column: ${e=>e.gridColumn};
18
+ grid-column: ${o=>o.gridColumn};
15
19
  display: flex;
16
20
  justify-content: center;
17
21
  align-items: center;
@@ -23,20 +27,22 @@ import o from"react";import l from"styled-components";import{flexRender as a}fro
23
27
  }
24
28
  `,p=l.div`
25
29
  display: grid;
26
- grid-template-columns: ${e=>e.gridTemplateColumns};
30
+ grid-template-columns: ${o=>o.gridTemplateColumns};
27
31
  width: 100%;
28
32
  `,u=l.div`
29
- padding: 5px 15px;
33
+ padding: 5px;
30
34
  background-color: var(--bg-color-raised);
31
35
  font-weight: bold;
32
36
  color: var(--text-color-secondary);
33
37
  cursor: pointer;
34
- grid-column: ${e=>e.gridColumn};
38
+ grid-column: ${o=>o.gridColumn};
35
39
  box-sizing: border-box;
40
+ overflow: hidden;
41
+ text-overflow: ellipsis;
36
42
 
37
43
  &:first-child {
38
44
  justify-content: flex-start;
39
45
  }
40
46
  `,x=l.span`
41
47
  font-family: monospace;
42
- `;export{C as GridHeader};
48
+ `;export{y as GridHeader};
@@ -22,7 +22,7 @@ import i from"react";import{flexRender as m}from"@tanstack/react-table";import l
22
22
  grid-template-columns: ${e=>e.gridTemplateColumns};
23
23
  align-items: center;
24
24
  `,p=l.div`
25
- padding: 5px 15px;
25
+ padding: 5px;
26
26
  text-align: left;
27
27
  grid-column: ${e=>e.gridColumn};
28
28
 
@@ -1,8 +1,8 @@
1
- import*as r from"react";import a from"styled-components";import{CloseFilledIcon as s}from"@redocly/theme/icons/CloseFilledIcon/CloseFilledIcon";import{WarningAltFilled as m}from"@redocly/theme/icons/WarningAltFilled/WarningAltFilled";import{CheckboxFilledIcon as d}from"@redocly/theme/icons/CheckboxFilledIcon/CheckboxFilledIcon";const o={Pass:{background:"--color-green-1",icon:"--color-green-6"},Warn:{background:"--color-carrot-1",icon:"--color-carrot-6"},Error:{background:"--color-raspberry-1",icon:"--color-raspberry-6"}},b=({uniqueErrors:e,uniqueWarnings:l,customDisplay:i,id:n})=>{const c=[];return e===0&&c.push(r.createElement(t,{key:`${n}-pass`,color:`var(${o.Pass.background})`},r.createElement(d,{size:"13px",color:`var(${o.Pass.icon})`}))),e>0&&c.push(r.createElement(t,{key:`${n}-error`,color:`var(${o.Error.background})`},r.createElement(s,{size:"12px",color:`var(${o.Error.icon})`}),r.createElement(p,{color:`var(${o.Error.icon})`},i||e))),l>0&&c.push(r.createElement(t,{key:`${n}-warning`,color:`var(${o.Warn.background})`},r.createElement(m,{size:"12px",color:`var(${o.Warn.icon})`}),r.createElement(p,{color:`var(${o.Warn.icon})`},i||l))),r.createElement(g,null,c)},g=a.div`
1
+ import*as r from"react";import t from"styled-components";import{CloseFilledIcon as s}from"@redocly/theme/icons/CloseFilledIcon/CloseFilledIcon";import{WarningAltFilled as m}from"@redocly/theme/icons/WarningAltFilled/WarningAltFilled";import{CheckboxFilledIcon as d}from"@redocly/theme/icons/CheckboxFilledIcon/CheckboxFilledIcon";const o={Pass:{background:"--color-green-1",icon:"--color-green-6"},Warn:{background:"--color-carrot-1",icon:"--color-carrot-6"},Error:{background:"--color-raspberry-1",icon:"--color-raspberry-6"}},v=({uniqueErrors:e,uniqueWarnings:p,customDisplay:c,id:a})=>{const n=[];return e===0&&n.push(r.createElement(l,{key:`${a}-pass`,color:`var(${o.Pass.background})`},r.createElement(d,{size:"13px",color:`var(${o.Pass.icon})`}),c&&r.createElement(i,{color:`var(${o.Error.icon})`},c))),e>0&&n.push(r.createElement(l,{key:`${a}-error`,color:`var(${o.Error.background})`},r.createElement(s,{size:"12px",color:`var(${o.Error.icon})`}),r.createElement(i,{color:`var(${o.Error.icon})`},c||e))),p>0&&n.push(r.createElement(l,{key:`${a}-warning`,color:`var(${o.Warn.background})`},r.createElement(m,{size:"12px",color:`var(${o.Warn.icon})`}),r.createElement(i,{color:`var(${o.Warn.icon})`},c||p))),r.createElement(g,null,n)},g=t.div`
2
2
  display: flex;
3
3
  align-items: center;
4
4
  gap: 4px;
5
- `,t=a.div`
5
+ `,l=t.div`
6
6
  background-color: ${({color:e})=>e};
7
7
  display: flex;
8
8
  align-items: center;
@@ -10,8 +10,8 @@ import*as r from"react";import a from"styled-components";import{CloseFilledIcon
10
10
  padding: 4px;
11
11
  border-radius: 4px;
12
12
  height: 20px;
13
- `,p=a.span`
13
+ `,i=t.span`
14
14
  color: ${({color:e})=>e};
15
15
  font-size: 12px;
16
16
  margin-left: 4px;
17
- `;export{b as LevelIndicator,o as SEVERITY_TO_COLOR_ICON};
17
+ `;export{v as LevelIndicator,o as SEVERITY_TO_COLOR_ICON};
@@ -38,11 +38,11 @@ import r from"styled-components";import{Popup as e}from"reactjs-popup";import{Bu
38
38
  `,a=r.span`
39
39
  vertical-align: middle;
40
40
  display: inline-block;
41
- `,f=r(a)`
41
+ `,g=r(a)`
42
42
  margin-right: 0;
43
43
  text-align: right;
44
44
  width: 65px;
45
- `,g=r.div`
45
+ `,f=r.div`
46
46
  display: flex;
47
47
  flex-wrap: wrap;
48
48
  gap: 20px;
@@ -78,7 +78,7 @@ import r from"styled-components";import{Popup as e}from"reactjs-popup";import{Bu
78
78
  }
79
79
 
80
80
  thead th {
81
- padding: 5px 15px;
81
+ padding: 5px;
82
82
  background-color: var(--bg-color-raised);
83
83
 
84
84
  &:first-child {
@@ -96,7 +96,7 @@ import r from"styled-components";import{Popup as e}from"reactjs-popup";import{Bu
96
96
 
97
97
  th,
98
98
  td {
99
- padding: 5px 15px;
99
+ padding: 5px;
100
100
  text-align: left;
101
101
  flex: 1;
102
102
  }
@@ -208,7 +208,6 @@ import r from"styled-components";import{Popup as e}from"reactjs-popup";import{Bu
208
208
  border-bottom: ${({isActive:o})=>o?"1px solid var(--text-color-secondary);":"1px solid transparent"};
209
209
  `,C=r.div`
210
210
  max-width: 100%;
211
- overflow: auto;
212
211
  visibility: ${({isActive:o})=>o?"visible":"hidden"};
213
212
  height: ${({isActive:o})=>o?"auto":"0"};
214
213
  opacity: ${({isActive:o})=>o?"1":"0"};
@@ -291,4 +290,4 @@ import r from"styled-components";import{Popup as e}from"reactjs-popup";import{Bu
291
290
  'Noto Color Emoji',
292
291
  'EmojiOne Color';
293
292
  vertical-align: middle;
294
- `;export{k as AppPageWrapper,b as CardRow,a as CardValue,g as CardsWrapper,v as CatalogDescription,n as CatalogPageWrapper,T as Code,M as ContentWithDotWrap,m as Dot,D as EmojiWrap,I as FilePreview,f as GaugeNumber,E as GroupTh,P as InstanceControlsWrap,z as InstanceMessage,W as InstanceReference,j as InstanceWrap,B as LevelComplianceCardTitle,w as ModeSwitcherTab,y as ModeSwitcherTabs,x as ProblemsByStatusCardBody,s as ScoreCardStatusCardBody,c as ScorecardCard,i as ScorecardCardTitle,$ as SortIcon,u as StyledInput,S as StyledPopup,h as StyledTable,C as TableWrap};
293
+ `;export{k as AppPageWrapper,b as CardRow,a as CardValue,f as CardsWrapper,v as CatalogDescription,n as CatalogPageWrapper,T as Code,M as ContentWithDotWrap,m as Dot,D as EmojiWrap,I as FilePreview,g as GaugeNumber,E as GroupTh,P as InstanceControlsWrap,z as InstanceMessage,W as InstanceReference,j as InstanceWrap,B as LevelComplianceCardTitle,w as ModeSwitcherTab,y as ModeSwitcherTabs,x as ProblemsByStatusCardBody,s as ScoreCardStatusCardBody,c as ScorecardCard,i as ScorecardCardTitle,$ as SortIcon,u as StyledInput,S as StyledPopup,h as StyledTable,C as TableWrap};
@@ -1 +1 @@
1
- import*as e from"react";import{useCallback as _,useMemo as b,useState as U,useEffect as Z}from"react";import{useLocation as K}from"react-router-dom";import{Flex as J}from"@redocly/portal-legacy-ui";import{Button as w}from"@redocly/theme/components/Button/Button";import{AddIcon as V}from"@redocly/theme/icons/AddIcon/AddIcon";import{SubtractIcon as O}from"@redocly/theme/icons/SubtractIcon/SubtractIcon";import{ArrowLeftIcon as R}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{useProcessScorecard as N}from"@redocly/theme/ext/process-scorecard";import{getScorecardColorVariable as z,withoutPathPrefix as I}from"@redocly/theme/core/utils";import{Link as T}from"../../../../client/app/Link";import Q from"../../../../client/app/CircularProgress";import{isDefined as W}from"../../../../utils/guards/is-defined.js";import{removeLeadingSlash as X}from"../../../../utils/url/remove-leading-slash.js";import{StatusByLevelWidget as Y}from"./StatusByLevelWidget";import{OTHER_TEAMS_LABEL as ee,NON_CONFORMANT as te}from"./utils";import{LevelIndicator as re}from"./LevelIndicator";import{AppPageWrapper as j,CardValue as S,CardsWrapper as B,CatalogDescription as ne,ModeSwitcherTab as ae,ModeSwitcherTabs as le,CardRow as F,ProblemsByStatusCardBody as q,ScoreCardStatusCardBody as M,TableWrap as se,LevelComplianceCardTitle as ce,ContentWithDotWrap as A,ScorecardCard as x,ScorecardCardTitle as L}from"./index.styles";import{ApiLevel as $,InstanceStatus as D,LevelStatus as H,RuleStatus as G}from"./components";import{Grid as P}from"./Grid/Grid";import{useDetailedScorecard as oe}from"./useDetailedScorecard";import{Gauge as ie,GaugeValue as ue}from"./Gauge";function Oe(g){const u=K(),{data:m,levelNames:i,hasPublishedAt:r,hasTeam:s,teamLabel:p}=g,y=_((t,a,d)=>{const o=t.getValue(d)?new Date(t.getValue(d)).getTime():0,f=a.getValue(d)?new Date(a.getValue(d)).getTime():0;return o>f?1:-1},[]),E=b(()=>[{id:"title",header:"API",accessorKey:"api.title",size:200,cell:({getValue:t,row:a})=>e.createElement(T,{to:I(u.pathname)+"/apis/"+encodeURIComponent(X(a.original.api.link))},t()," ",a.original.api.version)},r?{header:"Published at",accessorKey:"api.publishedAt",sortingFn:y,cell:({getValue:t})=>{const a=t();return a?new Date(a).toLocaleDateString():"-"}}:void 0,s?{header:p,accessorKey:"api.team"}:void 0,{id:"level",header:"Level",accessorKey:"scorecard.scorecardLevel",cell:({getValue:t,row:a})=>e.createElement($,{level:t(),colorVariable:z(a.original?.scorecard.scorecardLevelIdx,i.length+1)})},...i.map(t=>({id:t,header:`${t}`,accessorKey:"scorecard.levels",sortingFn:(a,d,o)=>{const f=a.getValue(o)[o].uniqueErrors,v=d.getValue(o)[o].uniqueErrors,n=a.getValue(o)[o].uniqueWarnings,h=d.getValue(o)[o].uniqueWarnings;return f===v?n-h:f-v},cell:({getValue:a,row:{original:d}})=>{const o=a(),f=d.api.link;return o?.[t]?e.createElement(re,{key:f,uniqueErrors:o[t].uniqueErrors,uniqueWarnings:o[t].uniqueWarnings,customDisplay:o[t].customDisplay,id:f}):null}}))].filter(W),[y,i,u.pathname,r,s,p]);return e.createElement(P,{columns:E,data:m,sortBy:[{id:"title",desc:!1}]})}function Re(g){const u=K(),{data:m}=g,i=b(()=>[{header:"Rules",accessorKey:"ruleId",cell:({getValue:r})=>e.createElement(T,{to:I(u.pathname)+"/rules/"+encodeURIComponent(r())},r())},{id:"status",header:"Status",accessorKey:"status",size:200,cell:({row:r})=>e.createElement(G,{errors:r.original.errorApisCount,warnings:r.original.warningApisCount})},{header:"Problem APIs",width:200,accessorKey:"apisCount",cell:({getValue:r})=>r(),sortDescFirst:!0},{header:"Problem count",size:200,accessorKey:"count",sortDescFirst:!0}],[u.pathname]);return e.createElement(P,{columns:i,data:m,virtualized:!1,sortBy:[{id:"status",desc:!0}]})}function ze(g){const{data:u,levelNames:m,filters:i,setActiveTab:r,teamLabel:s,teamProperty:p}=g,y=b(()=>[{id:"team",header:`API ${s}`,accessorKey:"team",size:200,cell:({getValue:E})=>e.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),r("apis"),i.find(a=>a.property===p)?.selectOption(E())}},E())},...[te,...m].map(E=>({id:E,header:`${E}`,accessorFn:t=>t.levels[E]?.apis}))],[i,m,r,s,p]);return e.createElement(P,{columns:y,data:u,sortBy:[{id:"team",desc:!1}],groupHeaderTitle:"APIs by level"})}function me(g){const{data:u,title:m}=g,i=b(()=>[{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:r})=>r.getCanExpand()?e.createElement(w,{onClick:r.getToggleExpandedHandler(),variant:"text",size:"medium",icon:r.getIsExpanded()?e.createElement(O,null):e.createElement(V,null)}):null},{header:"Rules",accessorKey:"ruleId",cell:({getValue:r,row:s})=>s.getCanExpand()?e.createElement("span",{onClick:s.getToggleExpandedHandler()},r()):null},{header:"Status",accessorKey:"status",size:200,cell:({getValue:r})=>{const s=r();return e.createElement(G,{errors:s?.errorsCount,warnings:s?.warningsCount})},enableSorting:!1},{header:"Problem count",accessorKey:"problemsCount",size:200,sortDescFirst:!0}],[]);return e.createElement(P,{columns:i,data:u,sortBy:[{id:"ruleId",desc:!1}],empty:e.createElement(e.Fragment,null,"\u2705 This API is compliant with ",e.createElement("strong",null,m)," level rules"),subRowKey:"problems"})}function Ie(g){const{catalogSlug:u,slug:m,data:i,hasTeam:r,hasPublishedAt:s,teamLabel:p}=g,{apis:y,apisCount:E,warningApisCount:t,errorApisCount:a,levels:d,count:o}=i,f=b(()=>Object.values(y),[y]),v=f.length===0,n=v?void 0:{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:l})=>l.getCanExpand()?e.createElement(w,{onClick:l.getToggleExpandedHandler(),variant:"text",size:"medium",icon:l.getIsExpanded()?e.createElement(O,null):e.createElement(V,null)}):null},h=b(()=>[n,{header:"API",accessorKey:"title"},s?{header:"Published at",accessorKey:"publishedAt",cell:({getValue:l})=>{const c=l();return c?new Date(c).toLocaleDateString():"-"}}:void 0,r?{header:p,accessorKey:"team",cell:({getValue:l})=>l()||ee}:void 0,{header:"Problem count",size:200,accessorKey:"count",cell:({getValue:l})=>l()||0,sortDescFirst:!0}].filter(W),[r,s,p,v]),k=b(()=>Object.entries(i.teams).sort((l,c)=>c[1]-l[1]),[i.teams]);return e.createElement(j,null,e.createElement(w,{icon:e.createElement(R,null),iconPosition:"left",variant:"ghost",size:"large",to:`${u}scorecard`},"Back to dashboard"),e.createElement("h1",null,"Rule ",m),e.createElement(B,null,e.createElement(x,null,e.createElement(L,null,"Rule status"),e.createElement(M,null,e.createElement("div",null,e.createElement(S,null,E),e.createElement("br",null),"APIs"),e.createElement("div",null,e.createElement(A,null,e.createElement(S,{style:{textAlign:"right"}},E-t-a),e.createElement(D,{severity:"Pass"})),e.createElement(A,null,e.createElement(S,{style:{textAlign:"right"}},t),e.createElement(D,{severity:"Warn"})),e.createElement(A,null,e.createElement(S,{style:{textAlign:"right"}},a),e.createElement(D,{severity:"Error"}))))),e.createElement(x,null,e.createElement(L,null,"Problems by level"),e.createElement(q,null,Object.entries(d).map(([l,c])=>e.createElement(F,{key:l},e.createElement("span",null,l),e.createElement(ie,{chunks:[{share:c.errors/o*100,colorVariable:"--scorecard-color-error"},{share:c.warnings/o*100,colorVariable:"--scorecard-color-warning"}]}),e.createElement(ue,null,c.errors+c.warnings))))),e.createElement(x,null,e.createElement(L,null,`Problems by ${p}`),e.createElement(q,null,k.slice(0,4).map(([l,c])=>e.createElement(F,{key:l},e.createElement("span",{style:{flex:1,textAlign:"left"}},l),e.createElement(S,null,c)))))),e.createElement(P,{columns:h,data:f,sortBy:[{id:"title",desc:!1}],subRowKey:"problems",slug:m}))}function We(g){const{slug:u,api:m,teamLabel:i,catalogSlug:r}=g,{api:s}=m||{},{scorecard:p,isLoading:y}=oe(`/${u}`),{processScorecard:E}=N(),t=p&&E(p,m.api),a=t?.levels||{},[d,o]=U(Object.keys(a)[0]),f=b(()=>s?.publishedAt instanceof Date?s?.publishedAt.toLocaleDateString():s?.publishedAt,[s]);Z(()=>{if(t){const n=t.levels||{};o(Object.keys(n)[0])}},[p]);const v=b(()=>{if(!t?.levels)return{};const n={};for(const h of Object.keys(t.levels)){const k=t.levels[h].problems.reduce((l,c)=>(l[c.ruleId]||(l[c.ruleId]=[]),l[c.ruleId].push(c),l),{});n[h]=Object.entries(k).map(([l,c])=>({ruleId:l,problems:[...c.filter(C=>C.severity==="error"),...c.filter(C=>C.severity==="warn")],problemsCount:c.length,status:{errorsCount:c.filter(C=>C.severity==="error").length,warningsCount:c.filter(C=>C.severity==="warn").length}}))}return n},[t?.levels]);return y?e.createElement(J,{justifyContent:"center",mt:"2em"},e.createElement(Q,null)):t?e.createElement(j,null,e.createElement(w,{icon:e.createElement(R,null),iconPosition:"left",variant:"ghost",size:"large",to:`${r}scorecard`},"Back to dashboard"),e.createElement("h1",null,s?.title||u),e.createElement(ne,null,f&&e.createElement(e.Fragment,null,"Published at: ",new Date().toLocaleString(void 0,{timeZoneName:"short"}),e.createElement("br",null)),e.createElement(T,{to:s?.link,external:!0},"Documentation")),e.createElement(B,null,e.createElement(x,null,e.createElement(ce,null,e.createElement("span",null,"Scorecard level"),e.createElement($,{level:t.scorecardLevel,colorVariable:z(t.scorecardLevelIdx,Object.keys(a).length)})),e.createElement(M,null,e.createElement("div",null,"Compliance by level"),e.createElement("div",null,Object.entries(t.levels).map(([n,h])=>e.createElement(A,{key:n},e.createElement(S,{style:{width:"100px",textAlign:"right"}},n),e.createElement(H,{errors:h.errors,warnings:h.warnings})))))),e.createElement(Y,{title:"Rules compliance",levels:Object.entries(t.levels).map(([n,h])=>({errors:h.uniqueErrors,warnings:h.uniqueWarnings,total:g.rulesPerLevel[n].length,name:n}))}),e.createElement(x,null,e.createElement(L,null,i),e.createElement(S,{style:{fontWeight:"normal"}},s?.team))),e.createElement(le,{style:{justifyContent:"flex-start"},"data-component-name":"Scorecard/ModeSwitcherTabs"},Object.keys(t.levels).map(n=>e.createElement(ae,{"data-component-name":"Scorecard/ModeSwitcherTab",key:n,isActive:d===n,onClick:()=>o(n)},e.createElement(A,null,e.createElement("span",null,n)," ",e.createElement(H,{errors:t.levels[n].errors,warnings:t.levels[n].warnings}))))),Object.keys(a).map(n=>e.createElement(se,{key:n,isActive:d===n},e.createElement(me,{title:n,data:v[n]})))):e.createElement("div",null,"Scorecard not found")}export{Oe as ApiListView,We as ApiPage,me as ApiView,Ie as RuleView,Re as RulesView,ze as TeamsView};
1
+ import*as e from"react";import{useCallback as le,useMemo as E,useState as se,useEffect as ie}from"react";import{useLocation as H}from"react-router-dom";import{Flex as oe}from"@redocly/portal-legacy-ui";import{Button as R}from"@redocly/theme/components/Button/Button";import{AddIcon as G}from"@redocly/theme/icons/AddIcon/AddIcon";import{SubtractIcon as _}from"@redocly/theme/icons/SubtractIcon/SubtractIcon";import{ArrowLeftIcon as U}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{useProcessScorecard as Z}from"@redocly/theme/ext/process-scorecard";import{getScorecardColorVariable as J,withoutPathPrefix as Q}from"@redocly/theme/core/utils";import{Link as W}from"../../../../client/app/Link";import ce from"../../../../client/app/CircularProgress";import{isDefined as B}from"../../../../utils/guards/is-defined.js";import{removeLeadingSlash as ue}from"../../../../utils/url/remove-leading-slash.js";import{StatusByLevelWidget as me}from"./StatusByLevelWidget";import{OTHER_TEAMS_LABEL as de,NON_CONFORMANT as pe}from"./utils";import{LevelIndicator as ge}from"./LevelIndicator";import{AppPageWrapper as X,CardValue as P,CardsWrapper as Y,CatalogDescription as fe,ModeSwitcherTab as O,ModeSwitcherTabs as Ee,CardRow as ee,ProblemsByStatusCardBody as te,ScoreCardStatusCardBody as re,TableWrap as j,LevelComplianceCardTitle as he,ContentWithDotWrap as k,ScorecardCard as V,ScorecardCardTitle as F}from"./index.styles";import{ApiLevel as ne,InstanceStatus as q,LevelStatus as N,RuleStatus as ae}from"./components";import{Grid as z}from"./Grid/Grid";import{useDetailedScorecard as ye}from"./useDetailedScorecard";import{Gauge as ve,GaugeValue as be}from"./Gauge";function Se(d,c,p){if(d===c)return 0;if(d==null||d==="")return 1;if(c==null||c==="")return-1;if(p==="number"){const u=Number(d),a=Number(c),l=Number.isNaN(u),g=Number.isNaN(a);return l&&g?0:l?1:g?-1:u-a}if(p==="date"){const u=new Date(String(d)).getTime(),a=new Date(String(c)).getTime(),l=Number.isNaN(u),g=Number.isNaN(a);return l&&g?0:l?1:g?-1:u-a}return String(d).localeCompare(String(c))}function $e(d){const c=H(),{data:p,levelNames:u,hasPublishedAt:a,hasTeam:l,teamLabel:g}=d,{getApiTableColumns:L}=Z(),h=le((y,S,x)=>{const w=y.getValue(x)?new Date(y.getValue(x)).getTime():0,r=S.getValue(x)?new Date(S.getValue(x)).getTime():0;return w>r?1:-1},[]),b=E(()=>{const y=L?.()??[],S=y.filter(r=>r.placement==="beforeLevels"),x=y.filter(r=>r.placement!=="beforeLevels"),w=r=>({id:r.id,header:String(r.header),accessorFn:s=>r.getValue?.(s),enableSorting:!!(r.sortingFn||r.sortRule),...r.sortingFn||r.sortRule?{sortingFn:(s,f,n)=>r.sortingFn?r.sortingFn({rowA:s.original,rowB:f.original,valueA:s.getValue(n),valueB:f.getValue(n)}):Se(r.getSortValue?.(s.original)??s.getValue(n),r.getSortValue?.(f.original)??f.getValue(n),r.sortRule||"string")}:{},...r.sortDescFirst!==void 0?{sortDescFirst:r.sortDescFirst}:{},cell:({getValue:s,row:f})=>{const n=s(),i=f.original;return r.render?r.render({row:i,value:n}):n==null||n===""?"-":String(n)},...r.size!==void 0?{size:r.size}:{},...r.minSize!==void 0?{minSize:r.minSize}:{},...r.maxSize!==void 0?{maxSize:r.maxSize}:{}});return[{id:"title",header:"API",accessorKey:"api.title",size:200,cell:({getValue:r,row:s})=>e.createElement(W,{to:Q(c.pathname)+"/apis/"+encodeURIComponent(ue(s.original.api.link))},r()," ",s.original.api.version)},a?{header:"Published at",accessorKey:"api.publishedAt",sortingFn:h,cell:({getValue:r})=>{const s=r();return s?new Date(s).toLocaleDateString():"-"}}:void 0,l?{header:g,accessorKey:"api.team"}:void 0,{id:"level",header:"Level",accessorKey:"scorecard.scorecardLevel",cell:({getValue:r,row:s})=>e.createElement(ne,{level:r(),colorVariable:J(s.original?.scorecard.scorecardLevelIdx,u.length+1)})},...S.map(w),...u.map(r=>({id:r,header:`${r}`,accessorKey:"scorecard.levels",sortingFn:(s,f,n)=>{const i=s.getValue(n)[n].uniqueErrors,D=f.getValue(n)[n].uniqueErrors,t=s.getValue(n)[n].uniqueWarnings,o=f.getValue(n)[n].uniqueWarnings;return i===D?t-o:i-D},cell:({getValue:s,row:{original:f}})=>{const n=s(),i=f.api.link;return n?.[r]?e.createElement(ge,{key:i,uniqueErrors:n[r].uniqueErrors,uniqueWarnings:n[r].uniqueWarnings,customDisplay:n[r].customDisplay,id:i}):null}})),...x.map(w)].filter(B)},[h,u,c.pathname,a,l,g,L]),m=E(()=>{const y=Math.max(b.length-3,0);return`25% max(140px, 15%) max(140px, 10%)${y>0?` repeat(${y}, 1fr)`:""}`},[b.length]);return e.createElement(z,{columns:b,data:p,sortBy:[{id:"title",desc:!1}],gridTemplateColumns:m})}function He(d){const c=H(),{data:p}=d,u=E(()=>[{header:"Rules",accessorKey:"ruleId",cell:({getValue:a})=>e.createElement(W,{to:Q(c.pathname)+"/rules/"+encodeURIComponent(a())},a())},{id:"status",header:"Status",accessorKey:"status",size:200,cell:({row:a})=>e.createElement(ae,{errors:a.original.errorApisCount,warnings:a.original.warningApisCount})},{header:"Problem APIs",width:200,accessorKey:"apisCount",cell:({getValue:a})=>a(),sortDescFirst:!0},{header:"Problem count",size:200,accessorKey:"count",sortDescFirst:!0}],[c.pathname]);return e.createElement(z,{columns:u,data:p,virtualized:!1,sortBy:[{id:"status",desc:!0}]})}function Ge(d){const{data:c,levelNames:p,filters:u,setActiveTab:a,teamLabel:l,teamProperty:g}=d,L=E(()=>[{id:"team",header:`API ${l}`,accessorKey:"team",size:200,cell:({getValue:h})=>e.createElement("a",{href:"#",onClick:b=>{b.preventDefault(),a("apis"),u.find(m=>m.property===g)?.selectOption(h())}},h())},...[pe,...p].map(h=>({id:h,header:`${h}`,accessorFn:b=>b.levels[h]?.apis}))],[u,p,a,l,g]);return e.createElement(z,{columns:L,data:c,sortBy:[{id:"team",desc:!1}],groupHeaderTitle:"APIs by level"})}function Ce(d){const{data:c,title:p}=d,u=E(()=>[{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:a})=>a.getCanExpand()?e.createElement(R,{onClick:a.getToggleExpandedHandler(),variant:"text",size:"medium",icon:a.getIsExpanded()?e.createElement(_,null):e.createElement(G,null)}):null},{header:"Rules",accessorKey:"ruleId",cell:({getValue:a,row:l})=>l.getCanExpand()?e.createElement("span",{onClick:l.getToggleExpandedHandler()},a()):null},{header:"Status",accessorKey:"status",size:200,cell:({getValue:a})=>{const l=a();return e.createElement(ae,{errors:l?.errorsCount,warnings:l?.warningsCount})},enableSorting:!1},{header:"Problem count",accessorKey:"problemsCount",size:200,sortDescFirst:!0}],[]);return e.createElement(z,{columns:u,data:c,sortBy:[{id:"ruleId",desc:!1}],empty:e.createElement(e.Fragment,null,"\u2705 This API is compliant with ",e.createElement("strong",null,p)," level rules"),subRowKey:"problems"})}function _e(d){const{catalogSlug:c,slug:p,data:u,hasTeam:a,hasPublishedAt:l,teamLabel:g}=d,{apis:L,apisCount:h,warningApisCount:b,errorApisCount:m,levels:y,count:S}=u,x=E(()=>Object.values(L),[L]),w=x.length===0,r=w?void 0:{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:n})=>n.getCanExpand()?e.createElement(R,{onClick:n.getToggleExpandedHandler(),variant:"text",size:"medium",icon:n.getIsExpanded()?e.createElement(_,null):e.createElement(G,null)}):null},s=E(()=>[r,{header:"API",accessorKey:"title"},l?{header:"Published at",accessorKey:"publishedAt",cell:({getValue:n})=>{const i=n();return i?new Date(i).toLocaleDateString():"-"}}:void 0,a?{header:g,accessorKey:"team",cell:({getValue:n})=>n()||de}:void 0,{header:"Problem count",size:200,accessorKey:"count",cell:({getValue:n})=>n()||0,sortDescFirst:!0}].filter(B),[a,l,g,w]),f=E(()=>Object.entries(u.teams).sort((n,i)=>i[1]-n[1]),[u.teams]);return e.createElement(X,null,e.createElement(R,{icon:e.createElement(U,null),iconPosition:"left",variant:"ghost",size:"large",to:`${c}scorecard`},"Back to dashboard"),e.createElement("h1",null,"Rule ",p),e.createElement(Y,null,e.createElement(V,null,e.createElement(F,null,"Rule status"),e.createElement(re,null,e.createElement("div",null,e.createElement(P,null,h),e.createElement("br",null),"APIs"),e.createElement("div",null,e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},h-b-m),e.createElement(q,{severity:"Pass"})),e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},b),e.createElement(q,{severity:"Warn"})),e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},m),e.createElement(q,{severity:"Error"}))))),e.createElement(V,null,e.createElement(F,null,"Problems by level"),e.createElement(te,null,Object.entries(y).map(([n,i])=>e.createElement(ee,{key:n},e.createElement("span",null,n),e.createElement(ve,{chunks:[{share:i.errors/S*100,colorVariable:"--scorecard-color-error"},{share:i.warnings/S*100,colorVariable:"--scorecard-color-warning"}]}),e.createElement(be,null,i.errors+i.warnings))))),e.createElement(V,null,e.createElement(F,null,`Problems by ${g}`),e.createElement(te,null,f.slice(0,4).map(([n,i])=>e.createElement(ee,{key:n},e.createElement("span",{style:{flex:1,textAlign:"left"}},n),e.createElement(P,null,i)))))),e.createElement(z,{columns:s,data:x,sortBy:[{id:"title",desc:!1}],subRowKey:"problems",slug:p}))}function Ue(d){const{slug:c,api:p,teamLabel:u,catalogSlug:a}=d,{api:l}=p||{},{scorecard:g,isLoading:L}=ye(`/${c}`),{processScorecard:h,getApiTableColumns:b}=Z(),m=g&&h(g,p.api),y=m?.levels||{},S=E(()=>Object.keys(y),[y]),x=E(()=>l?.publishedAt instanceof Date?l?.publishedAt.toLocaleDateString():l?.publishedAt,[l]),w=E(()=>{if(!m?.levels)return{};const t={};for(const o of Object.keys(m.levels)){const A=m.levels[o].problems.reduce((T,C)=>(T[C.ruleId]||(T[C.ruleId]=[]),T[C.ruleId].push(C),T),{});t[o]=Object.entries(A).map(([T,C])=>({ruleId:T,problems:[...C.filter(v=>v.severity==="error"),...C.filter(v=>v.severity==="warn")],problemsCount:C.length,status:{errorsCount:C.filter(v=>v.severity==="error").length,warningsCount:C.filter(v=>v.severity==="warn").length}}))}return t},[m?.levels]),r=E(()=>{if(!m)return[];const t={api:p.api,scorecard:m};return(b?.()??[]).filter(o=>!o.details?.hidden).map(o=>{const A=o.getValue?.(t),T=o.details?.description,C=typeof T=="function"?T(t):T;let v;if(o.details?.render){if(v=o.details.render({row:t,value:A}),v===null)return}else if(o.render){if(v=o.render({row:t,value:A}),v===null)return}else v=A==null||A===""?"-":String(A);const K=o.details?.status,I=typeof K=="function"?K({row:t,value:A}):K,M=o.details?.statusRule,$={errors:I?.errors??(M==="problem-if-truthy"&&A?1:0),warnings:I?.warnings??0};return!I&&M==="problem-if-falsy"&&!A&&($.errors=1),{id:`custom-${o.id}`,label:o.details?.tabLabel||o.header,description:C,content:v,placement:o.placement==="beforeLevels"?"beforeLevels":"afterLevels",status:$}}).filter(B)},[p.api,b,m]),s=E(()=>r.filter(t=>t.placement==="beforeLevels"),[r]),f=E(()=>r.filter(t=>t.placement==="afterLevels"),[r]),n=E(()=>[...s.map(t=>t.id),...S,...f.map(t=>t.id)],[f,s,S]),[i,D]=se(n[0]||"");return ie(()=>{n.length&&D(t=>n.includes(t)?t:n[0])},[n]),L?e.createElement(oe,{justifyContent:"center",mt:"2em"},e.createElement(ce,null)):m?e.createElement(X,null,e.createElement(R,{icon:e.createElement(U,null),iconPosition:"left",variant:"ghost",size:"large",to:`${a}scorecard`},"Back to dashboard"),e.createElement("h1",null,l?.title||c),e.createElement(fe,null,x&&e.createElement(e.Fragment,null,"Published at: ",new Date().toLocaleString(void 0,{timeZoneName:"short"}),e.createElement("br",null)),e.createElement(W,{to:l?.link,external:!0},"Documentation")),e.createElement(Y,null,e.createElement(V,null,e.createElement(he,null,e.createElement("span",null,"Scorecard level"),e.createElement(ne,{level:m.scorecardLevel,colorVariable:J(m.scorecardLevelIdx,Object.keys(y).length)})),e.createElement(re,null,e.createElement("div",null,"Compliance by level"),e.createElement("div",null,Object.entries(m.levels).map(([t,o])=>e.createElement(k,{key:t},e.createElement(P,{style:{width:"100px",textAlign:"right"}},t),e.createElement(N,{errors:o.errors,warnings:o.warnings})))))),e.createElement(me,{title:"Rules compliance",levels:Object.entries(m.levels).map(([t,o])=>({errors:o.uniqueErrors,warnings:o.uniqueWarnings,total:d.rulesPerLevel[t].length,name:t}))}),e.createElement(V,null,e.createElement(F,null,u),e.createElement(P,{style:{fontWeight:"normal"}},l?.team))),e.createElement(Ee,{style:{justifyContent:"flex-start"},"data-component-name":"Scorecard/ModeSwitcherTabs"},s.map(t=>e.createElement(O,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t.id,isActive:i===t.id,onClick:()=>D(t.id)},e.createElement(k,null,e.createElement("span",null,t.label),e.createElement(N,{errors:t.status.errors,warnings:t.status.warnings})))),S.map(t=>e.createElement(O,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t,isActive:i===t,onClick:()=>D(t)},e.createElement(k,null,e.createElement("span",null,t)," ",e.createElement(N,{errors:m.levels[t].errors,warnings:m.levels[t].warnings})))),f.map(t=>e.createElement(O,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t.id,isActive:i===t.id,onClick:()=>D(t.id)},e.createElement(k,null,e.createElement("span",null,t.label),e.createElement(N,{errors:t.status.errors,warnings:t.status.warnings}))))),s.map(t=>e.createElement(j,{key:t.id,isActive:i===t.id},e.createElement(V,null,t.description?e.createElement("p",{style:{marginTop:0,marginBottom:12,color:"var(--text-color-secondary)"}},t.description):null,e.createElement("div",null,t.content)))),S.map(t=>e.createElement(j,{key:t,isActive:i===t},e.createElement(Ce,{title:t,data:w[t]}))),f.map(t=>e.createElement(j,{key:t.id,isActive:i===t.id},e.createElement(V,null,t.description?e.createElement("p",{style:{marginTop:0,marginBottom:12,color:"var(--text-color-secondary)"}},t.description):null,e.createElement("div",null,t.content))))):e.createElement("div",null,"Scorecard not found")}export{$e as ApiListView,Ue as ApiPage,Ce as ApiView,_e as RuleView,He as RulesView,Ge as TeamsView};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/realm",
3
- "version": "0.130.0-custom.1",
3
+ "version": "0.130.0-custom.3",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -91,14 +91,14 @@
91
91
  "xpath": "0.0.34",
92
92
  "yaml-ast-parser": "0.0.43",
93
93
  "zod": "^3.25.76",
94
+ "@redocly/graphql-docs": "1.7.0-custom.0",
94
95
  "@redocly/asyncapi-docs": "1.7.0-custom.0",
95
- "@redocly/realm-asyncapi-sdk": "0.9.0-next.0",
96
- "@redocly/portal-legacy-ui": "0.14.0-next.0",
96
+ "@redocly/openapi-docs": "3.18.0-custom.0",
97
97
  "@redocly/theme": "0.62.0-custom.0",
98
- "@redocly/portal-plugin-mock-server": "0.16.0-next.0",
99
98
  "@redocly/config": "0.43.0-custom.0",
100
- "@redocly/graphql-docs": "1.7.0-custom.0",
101
- "@redocly/openapi-docs": "3.18.0-custom.0"
99
+ "@redocly/portal-plugin-mock-server": "0.16.0-next.0",
100
+ "@redocly/realm-asyncapi-sdk": "0.9.0-next.0",
101
+ "@redocly/portal-legacy-ui": "0.14.0-next.0"
102
102
  },
103
103
  "peerDependencies": {
104
104
  "react": "^19.2.4",