unleash-server 7.6.1 → 7.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.d.ts.map +1 -1
  2. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.js +29 -17
  3. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.js.map +1 -1
  4. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.js +99 -0
  5. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.js.map +1 -1
  6. package/dist/lib/features/feature-search/feature.search.e2e.test.js +1 -1
  7. package/dist/lib/features/feature-search/feature.search.e2e.test.js.map +1 -1
  8. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts +1 -1
  9. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts.map +1 -1
  10. package/dist/lib/openapi/spec/feature-search-query-parameters.js.map +1 -1
  11. package/dist/lib/routes/logout.d.ts +0 -1
  12. package/dist/lib/routes/logout.d.ts.map +1 -1
  13. package/dist/lib/routes/logout.js +1 -5
  14. package/dist/lib/routes/logout.js.map +1 -1
  15. package/dist/lib/routes/logout.test.js +4 -4
  16. package/dist/lib/routes/logout.test.js.map +1 -1
  17. package/dist/lib/services/user-service.d.ts.map +1 -1
  18. package/dist/lib/services/user-service.js +0 -4
  19. package/dist/lib/services/user-service.js.map +1 -1
  20. package/dist/lib/types/experimental.d.ts +1 -1
  21. package/dist/lib/types/experimental.d.ts.map +1 -1
  22. package/dist/lib/types/experimental.js +2 -4
  23. package/dist/lib/types/experimental.js.map +1 -1
  24. package/dist/server-dev.js +1 -1
  25. package/dist/server-dev.js.map +1 -1
  26. package/frontend/build/index.html +1 -1
  27. package/frontend/build/static/{AdvancedPlayground-CJ7eG--B.js → AdvancedPlayground-BTPrG6RW.js} +1 -1
  28. package/frontend/build/static/{BackendConnections-C9C9tzVe.js → BackendConnections-CRh8Vxoe.js} +1 -1
  29. package/frontend/build/static/{CreateProject-C2o4HAPI.js → CreateProject-DEMalH1j.js} +1 -1
  30. package/frontend/build/static/{EnterpriseEdge-wEksSFXY.js → EnterpriseEdge-Cp-pGMa0.js} +1 -1
  31. package/frontend/build/static/{FeatureMetricsChart-Dg3LuBck.js → FeatureMetricsChart-DQOE71LA.js} +2 -2
  32. package/frontend/build/static/FeatureStaleDialog-B6BfnDiQ.js +689 -0
  33. package/frontend/build/static/{FeatureViewLazyExport-0rEqFrgo.js → FeatureViewLazyExport-BkNTNFqK.js} +3 -3
  34. package/frontend/build/static/{FlagMetricsChart-DbKM-kaT.js → FlagMetricsChart-zYDF9bet.js} +1 -1
  35. package/frontend/build/static/FrontendNetworkTrafficUsage-CbxdFXH7.js +1 -0
  36. package/frontend/build/static/GridLayoutWrapper-Cq6Bzm36.js +3 -0
  37. package/frontend/build/static/{ImpactMetricsPage-BDLs7Gss.js → ImpactMetricsPage-CFYXYXPb.js} +1 -1
  38. package/frontend/build/static/LazyAdminExport-ByTh4iFa.js +38 -0
  39. package/frontend/build/static/{LazyProjectExport-B5ifELrF.js → LazyProjectExport-K12Xy3w9.js} +19 -701
  40. package/frontend/build/static/{LifecycleChartComponent-CJWEy-Ub.js → LifecycleChartComponent-DHvlFNd2.js} +1 -1
  41. package/frontend/build/static/LineChartComponent-BlhKm3cw.js +1 -0
  42. package/frontend/build/static/{MarkCompletedDialogue-C86IfCH-.js → MarkCompletedDialogue-apmlFjVY.js} +1 -1
  43. package/frontend/build/static/{NetworkOverview-Cjz8v1WC.js → NetworkOverview-BiLOuQ4c.js} +1 -1
  44. package/frontend/build/static/{NetworkPrometheusAPIWarning-qXY7ao0F.js → NetworkPrometheusAPIWarning-CYo3j2Tj.js} +1 -1
  45. package/frontend/build/static/{NetworkTraffic-BBEsgALR.js → NetworkTraffic-DONL5oIx.js} +1 -1
  46. package/frontend/build/static/{NetworkTrafficUsage-a6syIscc.js → NetworkTrafficUsage-DjQiYq0S.js} +1 -1
  47. package/frontend/build/static/{PercentageDonut-CC9h07JZ.js → PercentageDonut-CA9hYg3v.js} +1 -1
  48. package/frontend/build/static/{ReactJSONEditor-B-T6_DlA.js → ReactJSONEditor-9cJL1vJY.js} +1 -1
  49. package/frontend/build/static/{RoleCell-4trKLU2Y.js → RoleCell-ZzU5Oqy8.js} +1 -1
  50. package/frontend/build/static/Safeguard-DY1N4aPz.js +1 -0
  51. package/frontend/build/static/{aggregateFeatureMetrics-CAg4DbsF.js → aggregateFeatureMetrics-D6bHft_C.js} +1 -1
  52. package/frontend/build/static/{formatTickValue-BxmGFWwJ.js → formatTickValue-BcLsqREh.js} +1 -1
  53. package/frontend/build/static/{index-Cikp5fMR.js → index-CoLhlfXP.js} +131 -135
  54. package/frontend/build/static/{networkTrafficUsageHighlightPlugin-mvUd1fv5.js → networkTrafficUsageHighlightPlugin-CqEM-cK_.js} +1 -1
  55. package/frontend/build/static/{useApiTokens-BHKIbW5c.js → useApiTokens-ClWvohC9.js} +1 -1
  56. package/frontend/package.json +2 -2
  57. package/package.json +3 -3
  58. package/frontend/build/static/FeatureStaleDialog-DmUpnOZe.js +0 -7
  59. package/frontend/build/static/FrontendNetworkTrafficUsage-DkvZ1uov.js +0 -1
  60. package/frontend/build/static/GridLayoutWrapper-Dwn6EwoE.js +0 -3
  61. package/frontend/build/static/LazyAdminExport-CE3juyvl.js +0 -38
  62. package/frontend/build/static/LineChartComponent-tPwau2Yw.js +0 -1
  63. package/frontend/build/static/Safeguard-DArPoSLG.js +0 -1
@@ -1,4 +1,4 @@
1
- import{cp as D,b6 as R,r as i,b8 as z,E as U,j as t,F as W,c5 as u,s as d,bp as k,b4 as _,j7 as y,w,K as v,cg as P,bm as B,cn as $,cd as F,co as N,b as H,i3 as f,lt as V,lu as O,lv as G,T as h,aM as Z,i as q,L as Y,d as J,cy as Q,az as X}from"./index-Cikp5fMR.js";import{u as K}from"./unknownify-B7hmSXnj.js";import{S as ee}from"./LazyAdminExport-CE3juyvl.js";import"./RoleCell-4trKLU2Y.js";import"./useApiTokens-BHKIbW5c.js";import"./PercentageDonut-CC9h07JZ.js";const te={connectedEdges:[],revisionIds:[]},ne=e=>{const{data:n,error:r,mutate:o}=D(R("api/admin/metrics/edges"),re,e);return i.useMemo(()=>{const s=!r&&!n;return(n==null?void 0:n.connectedEdges)!==void 0?{edgeObservability:n,loading:s,refetch:()=>o(),error:r}:Array.isArray(n)?{edgeObservability:{connectedEdges:n,revisionIds:[]},loading:s,refetch:()=>o(),error:r}:{edgeObservability:te,loading:s,refetch:()=>o(),error:r}},[n,r,o])},re=e=>fetch(e).then(z("Connected Edges")).then(n=>n.json());var E={},se=W;Object.defineProperty(E,"__esModule",{value:!0});var A=E.default=void 0,oe=se(U()),ie=t,ae=(0,oe.default)((0,ie.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2z"}),"Circle");A=E.default=ae;const ce=d("table")(({theme:e})=>({width:"100%",borderCollapse:"collapse",fontSize:e.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${e.palette.text.primary}`},"& tr":{textAlign:"right","& > th:first-of-type, td:first-of-type":{textAlign:"left"}}})),S=d("tr")(({theme:e})=>({fontWeight:e.fontWeight.bold,"&&& > td":{paddingTop:e.spacing(1),"& > div":{display:"flex",alignItems:"center"}}})),de=({instance:e})=>t.jsxs(ce,{children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Latency (ms)"}),t.jsx("th",{children:"Avg"}),t.jsx("th",{children:"p99"})]})}),t.jsxs("tbody",{children:[t.jsx(S,{children:t.jsx("td",{colSpan:3,children:t.jsxs("div",{children:["Upstream"," ",t.jsx(u,{tooltip:"Latency measured for requests sent from this Edge instance to the configured upstream, i.e. Unleash or another Edge instance.",size:"16px"})]})})}),t.jsxs("tr",{children:[t.jsx("td",{children:"Client Features"}),t.jsx("td",{children:e.upstreamFeaturesAverageLatencyMs}),t.jsx("td",{children:e.upstreamFeaturesP99LatencyMs})]}),t.jsxs("tr",{children:[t.jsx("td",{children:"Metrics"}),t.jsx("td",{children:e.upstreamMetricsAverageLatencyMs}),t.jsx("td",{children:e.upstreamMetricsP99LatencyMs})]}),t.jsxs("tr",{children:[t.jsx("td",{children:"Edge"}),t.jsx("td",{children:e.upstreamEdgeAverageLatencyMs}),t.jsx("td",{children:e.upstreamEdgeP99LatencyMs})]}),t.jsx(S,{children:t.jsx("td",{colSpan:3,children:t.jsxs("div",{children:["Downstream"," ",t.jsx(u,{tooltip:"Latency measured when serving requests from clients, i.e. SDKs or other Edge instances.",size:"16px"})]})})}),t.jsxs("tr",{children:[t.jsx("td",{children:"Client Features"}),t.jsx("td",{children:e.clientFeaturesAverageLatencyMs}),t.jsx("td",{children:e.clientFeaturesP99LatencyMs})]}),t.jsxs("tr",{children:[t.jsx("td",{children:"Frontend"}),t.jsx("td",{children:e.frontendApiAverageLatencyMs}),t.jsx("td",{children:e.frontendApiP99LatencyMs})]})]})]}),le=d("table")(({theme:e})=>({width:"100%",borderCollapse:"collapse",fontSize:e.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${e.palette.text.primary}`},"& tr":{textAlign:"right","& > th:first-of-type, td:first-of-type":{textAlign:"left"},paddingTop:e.spacing(1)}})),C=d("td")(({theme:e})=>({paddingTop:e.spacing(1),maxWidth:"80px","& > div":{display:"flex",alignItems:"center",justifyContent:"end"}})),pe=d(v)(({theme:e})=>({padding:e.spacing(0,1)})),he=e=>e.length===1?e[0]:"[]",ge=e=>`${he(e.projects)}:${e.environment}.***`,xe=e=>e.length<=1||e.includes("*")?"":`
1
+ import{cp as D,b6 as R,r as i,b8 as z,E as U,j as t,F as W,c5 as u,s as d,bp as k,b4 as _,iS as y,w,K as v,cg as P,bm as B,cn as $,cd as F,co as N,b as H,ky as f,lt as V,lu as O,lv as G,T as h,aM as Z,i as q,L as Y,d as J,cz as Q,az as X}from"./index-CoLhlfXP.js";import{u as K}from"./unknownify-B7hmSXnj.js";import{S as ee}from"./LazyAdminExport-ByTh4iFa.js";import"./RoleCell-ZzU5Oqy8.js";import"./useApiTokens-ClWvohC9.js";import"./PercentageDonut-CA9hYg3v.js";const te={connectedEdges:[],revisionIds:[]},ne=e=>{const{data:n,error:r,mutate:o}=D(R("api/admin/metrics/edges"),re,e);return i.useMemo(()=>{const s=!r&&!n;return(n==null?void 0:n.connectedEdges)!==void 0?{edgeObservability:n,loading:s,refetch:()=>o(),error:r}:Array.isArray(n)?{edgeObservability:{connectedEdges:n,revisionIds:[]},loading:s,refetch:()=>o(),error:r}:{edgeObservability:te,loading:s,refetch:()=>o(),error:r}},[n,r,o])},re=e=>fetch(e).then(z("Connected Edges")).then(n=>n.json());var E={},se=W;Object.defineProperty(E,"__esModule",{value:!0});var A=E.default=void 0,oe=se(U()),ie=t,ae=(0,oe.default)((0,ie.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2z"}),"Circle");A=E.default=ae;const ce=d("table")(({theme:e})=>({width:"100%",borderCollapse:"collapse",fontSize:e.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${e.palette.text.primary}`},"& tr":{textAlign:"right","& > th:first-of-type, td:first-of-type":{textAlign:"left"}}})),S=d("tr")(({theme:e})=>({fontWeight:e.fontWeight.bold,"&&& > td":{paddingTop:e.spacing(1),"& > div":{display:"flex",alignItems:"center"}}})),de=({instance:e})=>t.jsxs(ce,{children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Latency (ms)"}),t.jsx("th",{children:"Avg"}),t.jsx("th",{children:"p99"})]})}),t.jsxs("tbody",{children:[t.jsx(S,{children:t.jsx("td",{colSpan:3,children:t.jsxs("div",{children:["Upstream"," ",t.jsx(u,{tooltip:"Latency measured for requests sent from this Edge instance to the configured upstream, i.e. Unleash or another Edge instance.",size:"16px"})]})})}),t.jsxs("tr",{children:[t.jsx("td",{children:"Client Features"}),t.jsx("td",{children:e.upstreamFeaturesAverageLatencyMs}),t.jsx("td",{children:e.upstreamFeaturesP99LatencyMs})]}),t.jsxs("tr",{children:[t.jsx("td",{children:"Metrics"}),t.jsx("td",{children:e.upstreamMetricsAverageLatencyMs}),t.jsx("td",{children:e.upstreamMetricsP99LatencyMs})]}),t.jsxs("tr",{children:[t.jsx("td",{children:"Edge"}),t.jsx("td",{children:e.upstreamEdgeAverageLatencyMs}),t.jsx("td",{children:e.upstreamEdgeP99LatencyMs})]}),t.jsx(S,{children:t.jsx("td",{colSpan:3,children:t.jsxs("div",{children:["Downstream"," ",t.jsx(u,{tooltip:"Latency measured when serving requests from clients, i.e. SDKs or other Edge instances.",size:"16px"})]})})}),t.jsxs("tr",{children:[t.jsx("td",{children:"Client Features"}),t.jsx("td",{children:e.clientFeaturesAverageLatencyMs}),t.jsx("td",{children:e.clientFeaturesP99LatencyMs})]}),t.jsxs("tr",{children:[t.jsx("td",{children:"Frontend"}),t.jsx("td",{children:e.frontendApiAverageLatencyMs}),t.jsx("td",{children:e.frontendApiP99LatencyMs})]})]})]}),le=d("table")(({theme:e})=>({width:"100%",borderCollapse:"collapse",fontSize:e.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${e.palette.text.primary}`},"& tr":{textAlign:"right","& > th:first-of-type, td:first-of-type":{textAlign:"left"},paddingTop:e.spacing(1)}})),C=d("td")(({theme:e})=>({paddingTop:e.spacing(1),maxWidth:"80px","& > div":{display:"flex",alignItems:"center",justifyContent:"end"}})),pe=d(v)(({theme:e})=>({padding:e.spacing(0,1)})),he=e=>e.length===1?e[0]:"[]",ge=e=>`${he(e.projects)}:${e.environment}.***`,xe=e=>e.length<=1||e.includes("*")?"":`
2
2
  Projects: ${e.join(", ")}
3
3
  `,ue=e=>`[${e.projects.join(",")}]:${e.environment}`,me=(e,n)=>{const r=new Set(e||[]),o=new Set(n);if(r.size!==o.size)return!1;for(const s of r)if(!o.has(s))return!1;return!0},je=(e,n)=>(e||[]).every(o=>n.has(o)),fe=e=>{var n;return((n=e.find(r=>!r.projects||r.projects.length===0))==null?void 0:n.revisionId)??0},ye=(e,n)=>{if(e.length===0)return;if(n.projects.includes("*"))return Math.max(...e.map(a=>a.revisionId));const r=e.find(a=>me(a.projects,n.projects));if(r)return r.revisionId;const o=new Set(n.projects),s=e.filter(a=>je(a.projects,o));if(s.length!==0)return Math.max(...s.map(a=>a.revisionId))},ve=(e,n)=>{const r=e.filter(c=>c.environment===n.environment),o=fe(r),s=r.filter(c=>!!(c.projects&&c.projects.length>0)),a=ye(s,n);return Math.max(a??0,o)},Ee=e=>e<=0?"success":e<5?"warning":"error",Se=({edgeRevisionId:e,upstreamRevisionId:n})=>{const r=n-e,s=r<=0?"Edge feature configuration is up to date":`Edge is ${r} revisions behind expected upstream revision for this token`;return t.jsx(w,{title:s,children:t.jsx(pe,{color:Ee(r),children:e})})},Ce=({apiKeys:e,revisionIds:n})=>{const{locationSettings:r}=k();return!e||e.length===0?null:t.jsxs(le,{children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Token"}),t.jsx("th",{children:"Revision"})]})}),t.jsx("tbody",{children:e==null?void 0:e.map(o=>{const s=ge(o);return t.jsxs("tr",{children:[t.jsx(C,{children:t.jsx(_,{title:s,children:s})}),t.jsx(C,{children:t.jsxs("div",{children:[t.jsx(Se,{edgeRevisionId:o.revisionId,upstreamRevisionId:ve(n,o)}),t.jsx(u,{tooltip:`
4
4
  Edge last updated this token: ${y(o.lastUpdated,r.locale)}
@@ -1,2 +1,2 @@
1
- import{bs as f,k$ as p,db as y,lg as c,b as g,bp as m,r as d,j as u,l1 as C,dr as M,ds as v,dt as h,l2 as k,lk as $,l5 as E,l4 as S,l3 as j}from"./index-Cikp5fMR.js";import{d as D}from"./FeatureViewLazyExport-0rEqFrgo.js";import"./MarkCompletedDialogue-C86IfCH-.js";import"./aggregateFeatureMetrics-CAg4DbsF.js";import"./FeatureStaleDialog-DmUpnOZe.js";import"./PercentageDonut-CC9h07JZ.js";import"./GridLayoutWrapper-Dwn6EwoE.js";const T=(e,s,o)=>{const a={label:"Exposed",borderColor:e.palette.charts.flagMetrics.exposed,backgroundColor:e.palette.charts.flagMetrics.exposed,data:b(s,o,r=>r.yes)},t={label:"Not exposed",borderColor:e.palette.charts.flagMetrics.notExposed,backgroundColor:e.palette.charts.flagMetrics.notExposed,data:b(s,o,r=>r.no)};return{datasets:[a,t]}},b=(e,s,o)=>e.map(a=>({x:a.timestamp,y:o(a),variants:a.variants||{}})),_=(e,s)=>{if(s===0)return"";const[o,a]=e,t=Math.floor(Number(a)/s*100);return`${a} (${t}%) - ${o}`},q=(e,s,o,a)=>({locale:a.locale,responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},color:e.palette.text.secondary,plugins:{tooltip:{backgroundColor:e.palette.background.paper,bodyColor:e.palette.text.primary,titleColor:e.palette.text.secondary,borderColor:e.palette.primary.main,borderWidth:1,padding:10,boxPadding:5,usePointStyle:!0,position:"nearest",itemSort:(t,r)=>{const l=["Exposed","Not exposed"],n=l.indexOf(t.dataset.label),i=l.indexOf(r.dataset.label);return n-i},callbacks:{beforeBody:t=>`${t.reduce((l,n)=>l+n.parsed.y,0).toLocaleString(a.locale)} - Total requests`,label:t=>`${t.formattedValue} - ${t.dataset.label}`,afterLabel:t=>{const r=t.dataset.data[t.dataIndex];if(t.dataset.label!=="Exposed"||r.variants===void 0)return"";const{disabled:l,...n}=r.variants;return Object.entries(n).map(i=>_(i,r.y)).join(`
2
- `)},title:t=>`Time: ${o>48?y(t[0].parsed.x,a.locale,"UTC"):p(t[0].parsed.x,a.locale)}`}},legend:{position:"top",align:"end",labels:{boxWidth:10,boxHeight:10,usePointStyle:!0}},title:{text:L(o),position:"top",align:"start",display:!0,font:{size:16,weight:"400"},color:e.palette.text.primary}},scales:{y:{type:"linear",stacked:!0,title:{display:!0,text:"Number of requests",color:e.palette.text.secondary},suggestedMin:0,ticks:{precision:0,color:e.palette.text.secondary},grid:{color:e.palette.divider,borderColor:e.palette.divider}},x:{type:"time",stacked:!0,time:{unit:o>48?"day":"hour"},grid:{display:!1},ticks:{callback:(t,r,l)=>o>48?f(l[r].value,a.locale,"UTC"):p(l[r].value,a.locale),color:e.palette.text.secondary}}}}),L=e=>e===1?"Requests in the last hour":`Requests in the last ${D(e)}`;c.font={...c.font,family:"Sen",size:13,weight:"400"};const V=({metrics:e,hoursBack:s,statsSectionId:o})=>{const a=g(),{locationSettings:t}=m(),r=d.useMemo(()=>[...e].sort((i,x)=>i.timestamp.localeCompare(x.timestamp)),[e]),l=d.useMemo(()=>q(a,r,s,t),[a,r,s,t]),n=d.useMemo(()=>T(a,r,t),[a,r,t]);return u.jsx("div",{style:{height:400},children:u.jsx(C,{data:n,options:l,"aria-label":"A stacked bar chart showing feature flag exposure metrics: exposed and not exposed requests.","aria-describedby":o})})};M.register(v,h,k,$,E,S,j);export{V as FeatureMetricsChart,V as default};
1
+ import{bs as f,k$ as c,dc as y,lg as p,b as g,bp as m,r as d,j as u,l1 as C,ds as M,dt as v,du as h,l2 as k,lk as $,l5 as E,l4 as S,l3 as j}from"./index-CoLhlfXP.js";import{d as D}from"./FeatureViewLazyExport-BkNTNFqK.js";import"./MarkCompletedDialogue-apmlFjVY.js";import"./aggregateFeatureMetrics-D6bHft_C.js";import"./FeatureStaleDialog-B6BfnDiQ.js";import"./PercentageDonut-CA9hYg3v.js";import"./GridLayoutWrapper-Cq6Bzm36.js";const T=(e,s,o)=>{const a={label:"Exposed",borderColor:e.palette.charts.flagMetrics.exposed,backgroundColor:e.palette.charts.flagMetrics.exposed,data:x(s,o,r=>r.yes)},t={label:"Not exposed",borderColor:e.palette.charts.flagMetrics.notExposed,backgroundColor:e.palette.charts.flagMetrics.notExposed,data:x(s,o,r=>r.no)};return{datasets:[a,t]}},x=(e,s,o)=>e.map(a=>({x:a.timestamp,y:o(a),variants:a.variants||{}})),_=(e,s)=>{if(s===0)return"";const[o,a]=e,t=Math.floor(Number(a)/s*100);return`${a} (${t}%) - ${o}`},q=(e,s,o,a)=>({locale:a.locale,responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},color:e.palette.text.secondary,plugins:{tooltip:{backgroundColor:e.palette.background.paper,bodyColor:e.palette.text.primary,titleColor:e.palette.text.secondary,borderColor:e.palette.primary.main,borderWidth:1,padding:10,boxPadding:5,usePointStyle:!0,position:"nearest",itemSort:(t,r)=>{const l=["Exposed","Not exposed"],n=l.indexOf(t.dataset.label),i=l.indexOf(r.dataset.label);return n-i},callbacks:{beforeBody:t=>`${t.reduce((l,n)=>l+n.parsed.y,0).toLocaleString(a.locale)} - Total requests`,label:t=>`${t.formattedValue} - ${t.dataset.label}`,afterLabel:t=>{const r=t.dataset.data[t.dataIndex];if(t.dataset.label!=="Exposed"||r.variants===void 0)return"";const{disabled:l,...n}=r.variants;return Object.entries(n).map(i=>_(i,r.y)).join(`
2
+ `)},title:t=>`Time: ${o>48?y(t[0].parsed.x,a.locale,"UTC"):c(t[0].parsed.x,a.locale)}`}},legend:{position:"top",align:"end",labels:{boxWidth:10,boxHeight:10,usePointStyle:!0}},title:{text:L(o),position:"top",align:"start",display:!0,font:{size:16,weight:"400"},color:e.palette.text.primary}},scales:{y:{type:"linear",stacked:!0,title:{display:!0,text:"Number of requests",color:e.palette.text.secondary},suggestedMin:0,ticks:{precision:0,color:e.palette.text.secondary},grid:{color:e.palette.divider,borderColor:e.palette.divider}},x:{type:"time",stacked:!0,time:{unit:o>48?"day":"hour"},grid:{display:!1},ticks:{callback:(t,r,l)=>o>48?f(l[r].value,a.locale,"UTC"):c(l[r].value,a.locale),color:e.palette.text.secondary}}}}),L=e=>e===1?"Requests in the last hour":`Requests in the last ${D(e)}`;p.font={...p.font,family:"Sen",size:13,weight:"400"};const V=({metrics:e,hoursBack:s,statsSectionId:o})=>{const a=g(),{locationSettings:t}=m(),r=d.useMemo(()=>[...e].sort((i,b)=>i.timestamp.localeCompare(b.timestamp)),[e]),l=d.useMemo(()=>q(a,r,s,t),[a,r,s,t]),n=d.useMemo(()=>T(a,r,t),[a,r,t]);return u.jsx("div",{style:{height:400},children:u.jsx(C,{data:n,options:l,"aria-label":"A stacked bar chart showing feature flag exposure metrics: exposed and not exposed requests.","aria-describedby":o})})};M.register(v,h,k,$,E,S,j);export{V as FeatureMetricsChart,V as default};