unleash-server 5.5.2 → 5.5.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.
Files changed (24) hide show
  1. package/frontend/build/index.html +1 -1
  2. package/frontend/build/static/{AdvancedPlayground-aa02fee7.js → AdvancedPlayground-abef6155.js} +1 -1
  3. package/frontend/build/static/{CreateProject-1e9f20af.js → CreateProject-6ee5e39c.js} +1 -1
  4. package/frontend/build/static/{Error-3e2dcc74.js → Error-96134128.js} +1 -1
  5. package/frontend/build/static/{FeatureArchiveDialog-1edc277b.js → FeatureArchiveDialog-c613a9be.js} +1 -1
  6. package/frontend/build/static/{FeatureMetricsChart-67045ba1.js → FeatureMetricsChart-a32146f8.js} +1 -1
  7. package/frontend/build/static/{FeatureViewLazyExport-578a84bd.js → FeatureViewLazyExport-d7e816f2.js} +2 -2
  8. package/frontend/build/static/{LazyAdminExport-98306920.js → LazyAdminExport-7486d382.js} +3 -3
  9. package/frontend/build/static/{LazyProjectExport-ebbfce17.js → LazyProjectExport-19d9c4f0.js} +1 -1
  10. package/frontend/build/static/{NetworkOverview-0a4063f9.js → NetworkOverview-7cdc3de8.js} +2 -2
  11. package/frontend/build/static/{NetworkTraffic-2b9ad0d8.js → NetworkTraffic-0e3adee3.js} +1 -1
  12. package/frontend/build/static/{ReactJSONEditor-95bd65b6.js → ReactJSONEditor-900afb5d.js} +1 -1
  13. package/frontend/build/static/{RoleCell-61b5602f.js → RoleCell-aa0d7a05.js} +1 -1
  14. package/frontend/build/static/{StrategyItemContainer-1bd0d884.js → StrategyItemContainer-4f546cf4.js} +1 -1
  15. package/frontend/build/static/{chartjs-adapter-date-fns.esm-d24144ba.js → chartjs-adapter-date-fns.esm-bb13a147.js} +1 -1
  16. package/frontend/build/static/{flowchart-elk-definition-170a3958-94e3633c.js → flowchart-elk-definition-170a3958-5593653b.js} +1 -1
  17. package/frontend/build/static/{index-5f6e673f.js → index-0165843e.js} +1 -1
  18. package/frontend/build/static/{index-fcc452e3.js → index-83ae2eb3.js} +3 -3
  19. package/frontend/build/static/{index-6d970dd2.js → index-b6e8c0c5.js} +1 -1
  20. package/frontend/build/static/{is_dark-bdb20af3.js → is_dark-e2b6fb2d.js} +1 -1
  21. package/frontend/build/static/{mindmap-definition-44684416-c90e3c48.js → mindmap-definition-44684416-32899bfd.js} +1 -1
  22. package/frontend/build/static/{timeline-definition-8e5a9bc6-03e7fdb4.js → timeline-definition-8e5a9bc6-717d2a5f.js} +1 -1
  23. package/frontend/build/static/{unknownify-e5651baf.js → unknownify-b7f23ad5.js} +1 -1
  24. package/package.json +1 -1
@@ -16,7 +16,7 @@
16
16
  href="https://fonts.googleapis.com/css2?family=Sen:wght@400;700;800&display=swap"
17
17
  rel="stylesheet"
18
18
  />
19
- <script type="module" crossorigin src="/static/index-fcc452e3.js"></script>
19
+ <script type="module" crossorigin src="/static/index-83ae2eb3.js"></script>
20
20
  <link rel="stylesheet" href="/static/style-97d3ef98.css">
21
21
  </head>
22
22
  <body>
@@ -1,4 +1,4 @@
1
- import{c as qi,j as m,u as Xu,r as E,_ as Zu,a as Yr,s as V,U as ef,b as me,d as D,B as q,C as j,e as tf,f as za,g as nf,h as Si,T as te,F as sf,I as rf,S as of,M as lf,i as Xr,p as No,k as Fo,l as Ci,A as ir,m as af,n as hf,o as cf,q as uf,D as ff,t as ti,P as df,v as $a,w as pf,x as Ai,y as Be,z as mf,E as Pi,G as Ui,H as gf,J as ja,K as yf,L as bf,N as nr,O as wn,Q as sr,R as xf,V as wf,W as vf,X as kf,Y as Zr,Z as as,$ as Sf,a0 as Me,a1 as hs,a2 as Cf,a3 as Af,a4 as Mf,a5 as Of,a6 as Tf,a7 as Df,a8 as Wo,a9 as qa,aa as eo,ab as to,ac as Ua,ad as io,ae as Ga,af as Ka,ag as Pf,ah as Qa,ai as Rf,aj as Vo,ak as Bf,al as Ef,am as Ms,an as Lf,ao as If,ap as Nf,aq as Ff,ar as Wf,as as Vf}from"./index-fcc452e3.js";import{E as Hf}from"./Error-3e2dcc74.js";import{S as zf}from"./StrategyItemContainer-1bd0d884.js";const cs=qi(m("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"}),"CancelOutlined"),$f=qi(m("path",{d:"M16.59 7.58 10 14.17l-3.59-3.58L5 12l5 5 8-8zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"CheckCircleOutline"),jf=qi(m("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm4.59-12.42L10 14.17l-2.59-2.58L6 13l4 4 8-8z"}),"CheckCircleOutlined"),qf=qi(m("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"}),"Help"),Uf=qi(m("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"WarningOutlined"),Gf=()=>{const{makeRequest:n,createRequest:e,errors:t,loading:i}=Xu({propagateErrors:!0}),s="api/admin/playground";return{evaluateAdvancedPlayground:async o=>{const l=`${s}/advanced`,a=e(l,{method:"POST",body:JSON.stringify(o)});try{return(await n(a.caller,a.id)).json()}catch(h){throw h}},errors:t,loading:i}};function rr(n,e,t){var i,s,r,o,l;e==null&&(e=100);function a(){var c=Date.now()-o;c<e&&c>=0?i=setTimeout(a,e-c):(i=null,t||(l=n.apply(r,s),r=s=null))}var h=function(){r=this,s=arguments,o=Date.now();var c=t&&!i;return i||(i=setTimeout(a,e)),c&&(l=n.apply(r,s),r=s=null),l};return h.clear=function(){i&&(clearTimeout(i),i=null)},h.flush=function(){i&&(l=n.apply(r,s),r=s=null,clearTimeout(i),i=null)},h}rr.debounce=rr;var Kf=rr;class U{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),tt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let i=[];return this.decompose(e,t,i,0),tt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Mi(this),r=new Mi(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Mi(this,e)}iterRange(e,t=this.length){return new Ja(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new _a(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?U.empty:e.length<=32?new ae(e):tt.from(ae.split(e,[]))}}class ae extends U{constructor(e,t=Qf(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Jf(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new ae(Ho(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=vn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new ae(l,o.length+r.length));else{let a=l.length>>1;i.push(new ae(l.slice(0,a)),new ae(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof ae))return super.replace(e,t,i);let s=vn(this.text,vn(i.text,Ho(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new ae(s,r):tt.from(ae.split(s,[]),r)}sliceString(e,t=this.length,i=`
1
+ import{c as qi,j as m,u as Xu,r as E,_ as Zu,a as Yr,s as V,U as ef,b as me,d as D,B as q,C as j,e as tf,f as za,g as nf,h as Si,T as te,F as sf,I as rf,S as of,M as lf,i as Xr,p as No,k as Fo,l as Ci,A as ir,m as af,n as hf,o as cf,q as uf,D as ff,t as ti,P as df,v as $a,w as pf,x as Ai,y as Be,z as mf,E as Pi,G as Ui,H as gf,J as ja,K as yf,L as bf,N as nr,O as wn,Q as sr,R as xf,V as wf,W as vf,X as kf,Y as Zr,Z as as,$ as Sf,a0 as Me,a1 as hs,a2 as Cf,a3 as Af,a4 as Mf,a5 as Of,a6 as Tf,a7 as Df,a8 as Wo,a9 as qa,aa as eo,ab as to,ac as Ua,ad as io,ae as Ga,af as Ka,ag as Pf,ah as Qa,ai as Rf,aj as Vo,ak as Bf,al as Ef,am as Ms,an as Lf,ao as If,ap as Nf,aq as Ff,ar as Wf,as as Vf}from"./index-83ae2eb3.js";import{E as Hf}from"./Error-96134128.js";import{S as zf}from"./StrategyItemContainer-4f546cf4.js";const cs=qi(m("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"}),"CancelOutlined"),$f=qi(m("path",{d:"M16.59 7.58 10 14.17l-3.59-3.58L5 12l5 5 8-8zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"CheckCircleOutline"),jf=qi(m("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm4.59-12.42L10 14.17l-2.59-2.58L6 13l4 4 8-8z"}),"CheckCircleOutlined"),qf=qi(m("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"}),"Help"),Uf=qi(m("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"WarningOutlined"),Gf=()=>{const{makeRequest:n,createRequest:e,errors:t,loading:i}=Xu({propagateErrors:!0}),s="api/admin/playground";return{evaluateAdvancedPlayground:async o=>{const l=`${s}/advanced`,a=e(l,{method:"POST",body:JSON.stringify(o)});try{return(await n(a.caller,a.id)).json()}catch(h){throw h}},errors:t,loading:i}};function rr(n,e,t){var i,s,r,o,l;e==null&&(e=100);function a(){var c=Date.now()-o;c<e&&c>=0?i=setTimeout(a,e-c):(i=null,t||(l=n.apply(r,s),r=s=null))}var h=function(){r=this,s=arguments,o=Date.now();var c=t&&!i;return i||(i=setTimeout(a,e)),c&&(l=n.apply(r,s),r=s=null),l};return h.clear=function(){i&&(clearTimeout(i),i=null)},h.flush=function(){i&&(l=n.apply(r,s),r=s=null,clearTimeout(i),i=null)},h}rr.debounce=rr;var Kf=rr;class U{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),tt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let i=[];return this.decompose(e,t,i,0),tt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Mi(this),r=new Mi(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Mi(this,e)}iterRange(e,t=this.length){return new Ja(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new _a(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?U.empty:e.length<=32?new ae(e):tt.from(ae.split(e,[]))}}class ae extends U{constructor(e,t=Qf(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Jf(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new ae(Ho(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=vn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new ae(l,o.length+r.length));else{let a=l.length>>1;i.push(new ae(l.slice(0,a)),new ae(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof ae))return super.replace(e,t,i);let s=vn(this.text,vn(i.text,Ho(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new ae(s,r):tt.from(ae.split(s,[]),r)}sliceString(e,t=this.length,i=`
2
2
  `){let s="";for(let r=0,o=0;r<=t&&o<this.text.length;o++){let l=this.text[o],a=r+l.length;r>e&&o&&(s+=i),e<a&&t>r&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new ae(i,s)),i=[],s=-1);return s>-1&&t.push(new ae(i,s)),t}}class tt extends U{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r<this.children.length;r++){let l=this.children[r],a=o+l.length;if(e<=a&&t>=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if(i.lines<this.lines)for(let s=0,r=0;s<this.children.length;s++){let o=this.children[s],l=r+o.length;if(e>=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines<h>>5-1&&a.lines>h>>5+1){let c=this.children.slice();return c[s]=a,new tt(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`
3
3
  `){let s="";for(let r=0,o=0;r<this.children.length&&o<=t;r++){let l=this.children[r],a=o+l.length;o>e&&r&&(s+=i),e<a&&t>o&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof tt))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ae(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function u(d){let p;if(d.lines>r&&d instanceof tt)for(let b of d.children)u(b);else d.lines>o&&(a>o||!a)?(f(),l.push(d)):d instanceof ae&&a&&(p=c[c.length-1])instanceof ae&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new ae(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&f(),a+=d.lines,h+=d.length+1,c.push(d))}function f(){a!=0&&(l.push(c.length==1?c[0]:tt.from(c,h)),h=-1,a=c.length=0)}for(let d of e)u(d);return f(),l.length==1?l[0]:new tt(l,t)}}U.empty=new ae([""],0);function Qf(n){let e=-1;for(let t of n)e+=t.length+1;return e}function vn(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r<n.length&&s<=i;r++){let l=n[r],a=s+l.length;a>=t&&(a>i&&(l=l.slice(0,i-s)),s<t&&(l=l.slice(t-s)),o?(e[e.length-1]+=l,o=!1):e.push(l)),s=a+1}return e}function Ho(n,e,t){return vn(n,[""],e,t)}class Mi{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[e],this.offsets=[t>0?1:(e instanceof ae?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ae?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`
4
4
  `,this;e--}else if(s instanceof ae){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ae?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Ja{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Mi(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class _a{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(U.prototype[Symbol.iterator]=function(){return this.iter()},Mi.prototype[Symbol.iterator]=Ja.prototype[Symbol.iterator]=_a.prototype[Symbol.iterator]=function(){return this});class Jf{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}let Jt="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(n=>n?parseInt(n,36):1);for(let n=1;n<Jt.length;n++)Jt[n]+=Jt[n-1];function _f(n){for(let e=1;e<Jt.length;e+=2)if(Jt[e]>n)return Jt[e-1]<=n;return!1}function zo(n){return n>=127462&&n<=127487}const $o=8205;function Oe(n,e,t=!0,i=!0){return(t?Ya:Yf)(n,e,i)}function Ya(n,e,t){if(e==n.length)return e;e&&Xa(n.charCodeAt(e))&&Za(n.charCodeAt(e-1))&&e--;let i=ye(n,e);for(e+=Ne(i);e<n.length;){let s=ye(n,e);if(i==$o||s==$o||t&&_f(s))e+=Ne(s),i=s;else if(zo(s)){let r=0,o=e-2;for(;o>=0&&zo(ye(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Yf(n,e,t){for(;e>0;){let i=Ya(n,e-2,t);if(i<e)return i;e--}return 0}function Xa(n){return n>=56320&&n<57344}function Za(n){return n>=55296&&n<56320}function ye(n,e){let t=n.charCodeAt(e);if(!Za(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Xa(i)?(t-55296<<10)+(i-56320)+65536:t}function no(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Ne(n){return n<65536?1:2}const or=/\r\n?|\n/;var Ae=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(Ae||(Ae={}));class st{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,s=0;t<this.sections.length;){let r=this.sections[t++],o=this.sections[t++];o<0?(e(i,s,r),s+=r):s+=o,i+=r}}iterChangedRanges(e,t=!1){lr(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];s<0?e.push(i,s):e.push(s,i)}return new st(e)}composeDesc(e){return this.empty?e:e.empty?this:eh(this,e)}mapDesc(e,t=!1){return e.empty?this:ar(this,e,t)}mapPos(e,t=-1,i=Ae.Simple){let s=0,r=0;for(let o=0;o<this.sections.length;){let l=this.sections[o++],a=this.sections[o++],h=s+l;if(a<0){if(h>e)return r+(e-s);r+=l}else{if(i!=Ae.Simple&&h>=e&&(i==Ae.TrackDel&&s<e&&h>e||i==Ae.TrackBefore&&s<e||i==Ae.TrackAfter&&h>e))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i<this.sections.length&&s<=t;){let r=this.sections[i++],o=this.sections[i++],l=s+r;if(o>=0&&s<=t&&l>=e)return s<e&&l>t?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];e+=(e?" ":"")+i+(s>=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new st(e)}static create(e){return new st(e)}}class fe extends st{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return lr(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return ar(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s<t.length;s+=2){let o=t[s],l=t[s+1];if(l>=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length<a;)i.push(U.empty);i.push(o?e.slice(r,r+o):U.empty)}r+=o}return new fe(t,i)}compose(e){return this.empty?e:e.empty?this:eh(this,e,!0)}map(e,t=!1){return e.empty?this:ar(this,e,t,!0)}iterChanges(e,t=!1){lr(this,e,t)}get desc(){return st.create(this.sections)}filter(e){let t=[],i=[],s=[],r=new Ri(this);e:for(let o=0,l=0;;){let a=o==e.length?1e9:e[o++];for(;l<a||l==a&&r.len==0;){if(r.done)break e;let c=Math.min(r.len,a-l);ve(s,c,-1);let u=r.ins==-1?-1:r.off==0?r.ins:0;ve(t,c,u),u>0&&xt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l<h;){if(r.done)break e;let c=Math.min(r.len,h-l);ve(t,c,-1),ve(s,c,r.ins==-1?-1:r.off==0?r.ins:0),r.forward(c),l+=c}}return{changes:new fe(t,i),filtered:st.create(s)}}toJSON(){let e=[];for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t],s=this.sections[t+1];s<0?e.push(i):s==0?e.push([i]):e.push([i].concat(this.inserted[t>>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;o<t&&ve(s,t-o,-1);let u=new fe(s,r);l=l?l.compose(u.map(l)):u,s=[],r=[],o=0}function h(c){if(Array.isArray(c))for(let u of c)h(u);else if(c instanceof fe){if(c.length!=t)throw new RangeError(`Mismatched change set length (got ${c.length}, expected ${t})`);a(),l=l?l.compose(c.map(l)):c}else{let{from:u,to:f=u,insert:d}=c;if(u>f||u<0||f>t)throw new RangeError(`Invalid change range ${u} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?U.of(d.split(i||or)):d:U.empty,b=p.length;if(u==f&&b==0)return;u<o&&a(),u>o&&ve(s,u-o,-1),ve(s,f-u,b),xt(r,s,p),o=f}}return h(e),a(!l),l}static empty(e){return new fe(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;s<e.length;s++){let r=e[s];if(typeof r=="number")t.push(r,-1);else{if(!Array.isArray(r)||typeof r[0]!="number"||r.some((o,l)=>l&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length<s;)i.push(U.empty);i[s]=U.of(r.slice(1)),t.push(r[0],i[s].length)}}}return new fe(t,i)}static createSet(e,t){return new fe(e,t)}}function ve(n,e,t,i=!1){if(e==0&&t<=0)return;let s=n.length-2;s>=0&&t<=0&&t==n[s+1]?n[s]+=e:e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function xt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i<n.length)n[n.length-1]=n[n.length-1].append(t);else{for(;n.length<i;)n.push(U.empty);n.push(t)}}function lr(n,e,t){let i=n.inserted;for(let s=0,r=0,o=0;o<n.sections.length;){let l=n.sections[o++],a=n.sections[o++];if(a<0)s+=l,r+=l;else{let h=s,c=r,u=U.empty;for(;h+=l,c+=a,a&&i&&(u=u.append(i[o-2>>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,u),s=h,r=c}}}function ar(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Ri(n),l=new Ri(e);for(let a=-1;;)if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ve(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len<o.len||l.len==o.len&&!t))){let h=l.len;for(ve(s,l.ins,-1);h;){let c=Math.min(o.len,h);o.ins>=0&&a<o.i&&o.len<=c&&(ve(s,0,o.ins),r&&xt(r,s,o.text),a=o.i),o.forward(c),h-=c}l.next()}else if(o.ins>=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let u=Math.min(c,l.len);h+=u,c-=u,l.forward(u)}else if(l.ins==0&&l.len<c)c-=l.len,l.next();else break;ve(s,h,a<o.i?o.ins:0),r&&a<o.i&&xt(r,s,o.text),a=o.i,o.forward(o.len-c)}else{if(o.done&&l.done)return r?fe.createSet(s,r):st.create(s);throw new Error("Mismatched change set lengths")}}function eh(n,e,t=!1){let i=[],s=t?[]:null,r=new Ri(n),o=new Ri(e);for(let l=!1;;){if(r.done&&o.done)return s?fe.createSet(i,s):st.create(i);if(r.ins==0)ve(i,r.len,0,l),r.next();else if(o.len==0&&!o.done)ve(i,0,o.ins,l),s&&xt(s,i,o.text),o.next();else{if(r.done||o.done)throw new Error("Mismatched change set lengths");{let a=Math.min(r.len2,o.len),h=i.length;if(r.ins==-1){let c=o.ins==-1?-1:o.off?0:o.ins;ve(i,a,c,l),s&&c&&xt(s,i,o.text)}else o.ins==-1?(ve(i,r.off?0:r.len,a,l),s&&xt(s,i,r.textBit(a))):(ve(i,r.off?0:r.len,o.off?0:o.ins,l),s&&!o.off&&xt(s,i,o.text));l=(r.ins>a||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}class Ri{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i<e.length?(this.len=e[this.i++],this.ins=e[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return this.ins==-2}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,t=this.i-2>>1;return t>=e.length?U.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?U.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class It{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&16?this.to:this.from}get head(){return this.flags&16?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&4?-1:this.flags&8?1:0}get bidiLevel(){let e=this.flags&3;return e==3?null:e}get goalColumn(){let e=this.flags>>5;return e==33554431?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new It(i,s,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return w.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return w.range(this.anchor,i)}eq(e){return this.anchor==e.anchor&&this.head==e.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return w.range(e.anchor,e.head)}static create(e,t,i){return new It(e,t,i)}}class w{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:w.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let t=0;t<this.ranges.length;t++)if(!this.ranges[t].eq(e.ranges[t]))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return this.ranges.length==1?this:new w([this.main],0)}addRange(e,t=!0){return w.create([e].concat(this.ranges),t?0:this.mainIndex+1)}replaceRange(e,t=this.mainIndex){let i=this.ranges.slice();return i[t]=e,w.create(i,this.mainIndex)}toJSON(){return{ranges:this.ranges.map(e=>e.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new w(e.ranges.map(t=>It.fromJSON(t)),e.main)}static single(e,t=e){return new w([w.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;s<e.length;s++){let r=e[s];if(r.empty?r.from<=i:r.from<i)return w.normalized(e.slice(),t);i=r.to}return new w(e,t)}static cursor(e,t=0,i,s){return It.create(e,e,(t==0?0:t<0?4:8)|(i==null?3:Math.min(2,i))|(s??33554431)<<5)}static range(e,t,i,s){let r=(i??33554431)<<5|(s==null?3:Math.min(2,s));return t<e?It.create(t,e,24|r):It.create(e,t,(t>e?4:0)|r)}static normalized(e,t=0){let i=e[t];e.sort((s,r)=>s.from-r.from),t=e.indexOf(i);for(let s=1;s<e.length;s++){let r=e[s],o=e[s-1];if(r.empty?r.from<=o.to:r.from<o.to){let l=o.from,a=Math.max(r.to,o.to);s<=t&&t--,e.splice(--s,2,r.anchor>r.head?w.range(a,l):w.range(l,a))}}return new w(e,t)}}function th(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let so=0;class B{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=so++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}static define(e={}){return new B(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:ro),!!e.static,e.enables)}of(e){return new kn([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new kn(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new kn(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function ro(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class kn{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=so++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let u of this.dependencies)u=="doc"?a=!0:u=="selection"?h=!0:((t=e[u.id])!==null&&t!==void 0?t:1)&1||c.push(e[u.id]);return{create(u){return u.values[o]=i(u),1},update(u,f){if(a&&f.docChanged||h&&(f.docChanged||f.selection)||hr(u,c)){let d=i(u);if(l?!jo(d,u.values[o],s):!s(d,u.values[o]))return u.values[o]=d,1}return 0},reconfigure:(u,f)=>{let d,p=f.config.address[r];if(p!=null){let b=Bn(f,p);if(this.dependencies.every(g=>g instanceof B?f.facet(g)===u.facet(g):g instanceof we?f.field(g,!1)==u.field(g,!1):!0)||(l?jo(d=i(u),b,s):s(d=i(u),b)))return u.values[o]=b,0}else d=i(u);return u.values[o]=d,1}}}}function jo(n,e,t){if(n.length!=e.length)return!1;for(let i=0;i<n.length;i++)if(!t(n[i],e[i]))return!1;return!0}function hr(n,e){let t=!1;for(let i of e)Oi(n,i)&1&&(t=!0);return t}function Xf(n,e,t){let i=t.map(a=>n[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;c<i.length;c++){let u=Bn(a,i[c]);if(s[c]==2)for(let f of u)h.push(f);else h.push(u)}return e.combine(h)}return{create(a){for(let h of i)Oi(a,h);return a.values[o]=l(a),1},update(a,h){if(!hr(a,r))return 0;let c=l(a);return e.compare(c,a.values[o])?0:(a.values[o]=c,1)},reconfigure(a,h){let c=hr(a,i),u=h.config.facets[e.id],f=h.facet(e);if(u&&!c&&ro(t,u))return a.values[o]=f,0;let d=l(a);return e.compare(d,f)?(a.values[o]=f,0):(a.values[o]=d,1)}}}const qo=B.define({static:!0});class we{constructor(e,t,i,s,r){this.id=e,this.createF=t,this.updateF=i,this.compareF=s,this.spec=r,this.provides=void 0}static define(e){let t=new we(so++,e.create,e.update,e.compare||((i,s)=>i===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(qo).find(i=>i.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}init(e){return[this,qo.of({field:this,create:e})]}get extension(){return this}}const Et={lowest:4,low:3,default:2,high:1,highest:0};function di(n){return e=>new ih(e,n)}const ci={highest:di(Et.highest),high:di(Et.high),default:di(Et.default),low:di(Et.low),lowest:di(Et.lowest)};class ih{constructor(e,t){this.inner=e,this.prec=t}}class us{of(e){return new cr(this,e)}reconfigure(e){return us.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class cr{constructor(e,t){this.compartment=e,this.inner=t}}class Rn{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length<i.length;)this.statusTemplate.push(0)}staticFacet(e){let t=this.address[e.id];return t==null?e.default:this.staticValues[t>>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let f of Zf(e,t,o))f instanceof we?s.push(f):(r[f.facet.id]||(r[f.facet.id]=[])).push(f);let l=Object.create(null),a=[],h=[];for(let f of s)l[f.id]=h.length<<1,h.push(d=>f.slot(d));let c=i==null?void 0:i.config.facets;for(let f in r){let d=r[f],p=d[0].facet,b=c&&c[f]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,ro(b,d))a.push(i.facet(p));else{let g=p.combine(d.map(x=>x.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(x=>g.dynamicSlot(x)));l[p.id]=h.length<<1,h.push(g=>Xf(g,p,d))}}let u=h.map(f=>f(l));return new Rn(e,o,u,l,a,r)}}function Zf(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof cr&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof cr){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof ih)r(o.inner,o.prec);else if(o instanceof we)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof kn)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,Et.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,Et.default),i.reduce((o,l)=>o.concat(l))}function Oi(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Bn(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const nh=B.define(),sh=B.define({combine:n=>n.some(e=>e),static:!0}),rh=B.define({combine:n=>n.length?n[0]:void 0,static:!0}),oh=B.define(),lh=B.define(),ah=B.define(),hh=B.define({combine:n=>n.length?n[0]:!1});class ft{constructor(e,t){this.type=e,this.value=t}static define(){return new ed}}class ed{of(e){return new ft(this,e)}}class td{constructor(e){this.map=e}of(e){return new W(this,e)}}class W{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new W(this.type,t)}is(e){return this.type==e}static define(e={}){return new td(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}W.reconfigure=W.define();W.appendConfig=W.define();class de{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&th(i,t.newLength),r.some(l=>l.type==de.time)||(this.annotations=r.concat(de.time.of(Date.now())))}static create(e,t,i,s,r,o){return new de(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(de.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}de.time=ft.define();de.userEvent=ft.define();de.addToHistory=ft.define();de.remote=ft.define();function id(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i<n.length&&(s==e.length||e[s]>=n[i]))r=n[i++],o=n[i++];else if(s<e.length)r=e[s++],o=e[s++];else return t;!t.length||t[t.length-1]<r?t.push(r,o):t[t.length-1]<o&&(t[t.length-1]=o)}}function ch(n,e,t){var i;let s,r,o;return t?(s=e.changes,r=fe.empty(e.changes.length),o=n.changes.compose(e.changes)):(s=e.changes.map(n.changes),r=n.changes.mapDesc(e.changes,!0),o=n.changes.compose(s)),{changes:o,selection:e.selection?e.selection.map(r):(i=n.selection)===null||i===void 0?void 0:i.map(s),effects:W.mapEffects(n.effects,s).concat(W.mapEffects(e.effects,r)),annotations:n.annotations.length?n.annotations.concat(e.annotations):e.annotations,scrollIntoView:n.scrollIntoView||e.scrollIntoView}}function ur(n,e,t){let i=e.selection,s=_t(e.annotations);return e.userEvent&&(s=s.concat(de.userEvent.of(e.userEvent))),{changes:e.changes instanceof fe?e.changes:fe.of(e.changes||[],t,n.facet(rh)),selection:i&&(i instanceof w?i:w.single(i.anchor,i.head)),effects:_t(e.effects),annotations:s,scrollIntoView:!!e.scrollIntoView}}function uh(n,e,t){let i=ur(n,e.length?e[0]:{},n.doc.length);e.length&&e[0].filter===!1&&(t=!1);for(let r=1;r<e.length;r++){e[r].filter===!1&&(t=!1);let o=!!e[r].sequential;i=ch(i,ur(n,e[r],o?i.changes.newLength:n.doc.length),o)}let s=de.create(n,i.changes,i.selection,i.effects,i.annotations,i.scrollIntoView);return sd(t?nd(s):s)}function nd(n){let e=n.startState,t=!0;for(let s of e.facet(oh)){let r=s(n);if(r===!1){t=!1;break}Array.isArray(r)&&(t=t===!0?r:id(t,r))}if(t!==!0){let s,r;if(t===!1)r=n.changes.invertedDesc,s=fe.empty(e.doc.length);else{let o=n.changes.filter(t);s=o.changes,r=o.filtered.mapDesc(o.changes).invertedDesc}n=de.create(e,s,n.selection&&n.selection.map(r),W.mapEffects(n.effects,r),n.annotations,n.scrollIntoView)}let i=e.facet(lh);for(let s=i.length-1;s>=0;s--){let r=i[s](n);r instanceof de?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof de?n=r[0]:n=uh(e,_t(r),!1)}return n}function sd(n){let e=n.startState,t=e.facet(ah),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=ch(i,ur(e,r,n.changes.newLength),!0))}return i==n?n:de.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const rd=[];function _t(n){return n==null?rd:Array.isArray(n)?n:[n]}var ie=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(ie||(ie={}));const od=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let fr;try{fr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function ld(n){if(fr)return fr.test(n);for(let e=0;e<n.length;e++){let t=n[e];if(/\w/.test(t)||t>"€"&&(t.toUpperCase()!=t.toLowerCase()||od.test(t)))return!0}return!1}function ad(n){return e=>{if(!/\S/.test(e))return ie.Space;if(ld(e))return ie.Word;for(let t=0;t<n.length;t++)if(e.indexOf(n[t])>-1)return ie.Word;return ie.Other}}class ${constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;l<this.config.dynamicSlots.length;l++)Oi(this,l<<1);this.computeSlot=null}field(e,t=!0){let i=this.config.address[e.id];if(i==null){if(t)throw new RangeError("Field is not present in this state");return}return Oi(this,i),Bn(this,i)}update(...e){return uh(this,e,!0)}applyTransaction(e){let t=this.config,{base:i,compartments:s}=t;for(let o of e.effects)o.is(us.reconfigure)?(t&&(s=new Map,t.compartments.forEach((l,a)=>s.set(a,l)),t=null),s.set(o.value.compartment,o.value.extension)):o.is(W.reconfigure)?(t=null,i=o.value):o.is(W.appendConfig)&&(t=null,i=_t(i).concat(o.value));let r;t?r=e.startState.values.slice():(t=Rn.resolve(i,s,this),r=new $(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,a)=>a.reconfigure(l,this),null).values),new $(t,e.newDoc,e.newSelection,r,(o,l)=>l.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:w.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=_t(i.effects);for(let l=1;l<t.ranges.length;l++){let a=e(t.ranges[l]),h=this.changes(a.changes),c=h.map(s);for(let f=0;f<l;f++)r[f]=r[f].map(c);let u=s.mapDesc(h,!0);r.push(a.range.map(u)),s=s.compose(c),o=W.mapEffects(o,c).concat(W.mapEffects(_t(a.effects),u))}return{changes:s,selection:w.create(r,t.mainIndex),effects:o}}changes(e=[]){return e instanceof fe?e:fe.of(e,this.doc.length,this.facet($.lineSeparator))}toText(e){return U.of(e.split(this.facet($.lineSeparator)||or))}sliceDoc(e=0,t=this.doc.length){return this.doc.sliceString(e,t,this.lineBreak)}facet(e){let t=this.config.address[e.id];return t==null?e.default:(Oi(this,t),Bn(this,t))}toJSON(e){let t={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(e)for(let i in e){let s=e[i];s instanceof we&&this.config.address[s.id]!=null&&(t[i]=s.spec.toJSON(this.field(e[i]),this))}return t}static fromJSON(e,t={},i){if(!e||typeof e.doc!="string")throw new RangeError("Invalid JSON representation for EditorState");let s=[];if(i){for(let r in i)if(Object.prototype.hasOwnProperty.call(e,r)){let o=i[r],l=e[r];s.push(o.init(a=>o.spec.fromJSON(l,a)))}}return $.create({doc:e.doc,selection:w.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=Rn.resolve(e.extensions||[],new Map),i=e.doc instanceof U?e.doc:U.of((e.doc||"").split(t.staticFacet($.lineSeparator)||or)),s=e.selection?e.selection instanceof w?e.selection:w.single(e.selection.anchor,e.selection.head):w.single(0);return th(s,i.length),t.staticFacet(sh)||(s=s.asSingle()),new $(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet($.tabSize)}get lineBreak(){return this.facet($.lineSeparator)||`
@@ -1,4 +1,4 @@
1
- import{s as O,i as U,f as J,at as b,au as K,av as $,ag as z,aw as M,ax as q,j as t,ay as G,d as Y,az as H,aA as Q,aB as V,aC as W,h as X,aD as Z}from"./index-fcc452e3.js";const ee="CREATE_PROJECT_BTN",te=O(U)(({theme:e})=>({marginLeft:e.spacing(3)})),ne=()=>{const{setToastData:e,setToastApiError:i}=J(),{refetchUser:d}=b(),{uiConfig:u}=K(),a=$(),{trackEvent:l}=z(),{projectId:o,projectName:m,projectMode:p,projectDesc:j,featureLimit:P,featureNamingPattern:g,featureNamingExample:C,featureNamingDescription:f,setFeatureNamingExample:h,setFeatureNamingPattern:E,setFeatureNamingDescription:T,setProjectId:N,setProjectName:A,setProjectDesc:y,getProjectPayload:s,clearErrors:r,validateProjectId:n,validateName:_,setProjectStickiness:S,setFeatureLimit:v,setProjectMode:k,projectStickiness:c,errors:I}=M(),{createProject:D,loading:F}=q();return t(G,{loading:F,title:"Create project",description:"Projects allows you to group feature toggles together in the management UI.",documentationLink:"https://docs.getunleash.io/reference/projects",documentationLinkLabel:"Projects documentation",formatApiCode:()=>`curl --location --request POST '${u.unleashUrl}/api/admin/projects' \\
1
+ import{s as O,i as U,f as J,at as b,au as K,av as $,ag as z,aw as M,ax as q,j as t,ay as G,d as Y,az as H,aA as Q,aB as V,aC as W,h as X,aD as Z}from"./index-83ae2eb3.js";const ee="CREATE_PROJECT_BTN",te=O(U)(({theme:e})=>({marginLeft:e.spacing(3)})),ne=()=>{const{setToastData:e,setToastApiError:i}=J(),{refetchUser:d}=b(),{uiConfig:u}=K(),a=$(),{trackEvent:l}=z(),{projectId:o,projectName:m,projectMode:p,projectDesc:j,featureLimit:P,featureNamingPattern:g,featureNamingExample:C,featureNamingDescription:f,setFeatureNamingExample:h,setFeatureNamingPattern:E,setFeatureNamingDescription:T,setProjectId:N,setProjectName:A,setProjectDesc:y,getProjectPayload:s,clearErrors:r,validateProjectId:n,validateName:_,setProjectStickiness:S,setFeatureLimit:v,setProjectMode:k,projectStickiness:c,errors:I}=M(),{createProject:D,loading:F}=q();return t(G,{loading:F,title:"Create project",description:"Projects allows you to group feature toggles together in the management UI.",documentationLink:"https://docs.getunleash.io/reference/projects",documentationLinkLabel:"Projects documentation",formatApiCode:()=>`curl --location --request POST '${u.unleashUrl}/api/admin/projects' \\
2
2
  --header 'Authorization: INSERT_API_KEY' \\
3
3
  --header 'Content-Type: application/json' \\
4
4
  --data-raw '${JSON.stringify(s(),void 0,2)}'`,children:Y(H,{errors:I,handleSubmit:async R=>{R.preventDefault(),r();const w=_(),x=await n();if(w&&x){const B=s();try{await D(B),d(),a(`/projects/${o}`),e({title:"Project created",text:"Now you can add toggles to this project",confetti:!0,type:"success"}),c!==W&&l("project_stickiness_set")}catch(L){i(X(L))}}},projectId:o,setProjectId:N,projectName:m,projectMode:p,projectStickiness:c,featureLimit:P,featureNamingExample:C,featureNamingPattern:g,setFeatureNamingPattern:E,featureNamingDescription:f,setFeatureNamingDescription:T,setFeatureNamingExample:h,setProjectStickiness:S,setFeatureLimit:v,setProjectMode:k,setProjectName:A,projectDesc:j,setProjectDesc:y,mode:"Create",clearErrors:r,validateProjectId:n,children:[t(Q,{name:"project",permission:V,"data-testid":ee}),t(te,{onClick:()=>{a(Z)},children:"Cancel"})]})})};export{ne as default};
@@ -1 +1 @@
1
- import{c as r,j as o}from"./index-fcc452e3.js";const a=r(o("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}),"Error");export{a as E};
1
+ import{c as r,j as o}from"./index-83ae2eb3.js";const a=r(o("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}),"Error");export{a as E};
@@ -1,4 +1,4 @@
1
- import{c as de,j as o,b as ge,aE as j,aW as J,d as T,b7 as z,C as q,E as he,T as $,c8 as xe,s as L,fO as ke,bd as Re,fP as se,av as K,au as I,fQ as Fe,fR as Pe,fS as De,fT as $e,fU as qe,bu as M,fV as Oe,i as Be,fW as _e,cj as Le,fX as ae,r as C,ax as fe,f as Y,fY as pe,ag as ye,fZ as me,ay as be,aX as Se,bn as Ve,f_ as Ye,h as _,dn as Ue,aY as je,aV as re,aF as ne,a_ as Q,f$ as ze,g0 as He,g1 as Ge,g2 as We,g3 as Me,g4 as Je,a$ as ve,b8 as Ke,g5 as Ie,y as X,aJ as ce,B as Qe,ae as Xe,bT as oe,g6 as Ne,es as Ze,g7 as et,g8 as tt,g9 as at,ga as nt,ba as st,bb as rt,bc as ot,A as Ce,l as Te,bN as it,m as ct,o as lt,L as ut,gb as dt,n as gt,u as ht,bR as ft,aQ as pt,aO as yt,aP as mt,aK as bt,gc as we}from"./index-fcc452e3.js";const St=de(o("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"}),"Cloud"),Qt=de(o("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"}),"WatchLater"),Xt=({enabled:e,className:a})=>{const t=ge(),s=e?"Environment enabled":"Environment disabled",n={backgroundColor:e?t.palette.primary.light:t.palette.neutral.border,borderRadius:"50%",width:"28px",height:"28px",minWidth:"28px",display:"flex",alignItems:"center",justifyContent:"center",marginRight:t.spacing(1)},r={fill:t.palette.common.white,width:"16px",height:"16px"};return o("div",{style:n,className:a,children:o(St,{style:r,titleAccess:s})})},vt=({isOpen:e,onConfirm:a,onClose:t,showBanner:s,environment:n,messageComponent:r})=>{const i=j("projectId"),{data:c}=J(i),{changeRequestInReviewOrApproved:p,alert:h}=xe(c),l=p(n||"");return T(z,{open:e,primaryButtonText:l?"Add to existing change request":"Add suggestion to draft",secondaryButtonText:"Cancel",onClick:a,onClose:t,title:"Request changes",fullWidth:!0,children:[o(q,{condition:l,show:h}),o(q,{condition:!!s,show:T(he,{severity:"info",sx:{mb:2},children:["Change requests feature is enabled for ",n,". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})}),o($,{variant:"body2",color:"text.secondary",children:"Your suggestion:"}),r]})},Ct=(e,a)=>{const t={};return a.parameters.forEach(s=>{t[s.name]=Tt(e,s)}),{name:a.name,constraints:[],parameters:t}},Tt=(e,a)=>a.name==="rollout"||a.name==="percentage"||a.type==="percentage"?"50":a.name==="stickiness"?"":a.name==="groupId"?e:a.type==="boolean"?"false":"",wt=L("form")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),le=L("hr")(({theme:e})=>({width:"100%",height:"1px",margin:e.spacing(2,0),border:"none",background:e.palette.background.elevation2})),Et=L("div")(({theme:e})=>({display:"flex",justifyContent:"end",gap:e.spacing(2),paddingBottom:e.spacing(10)})),At=({projectId:e,environmentId:a,permission:t,onSubmit:s,onCancel:n,loading:r,strategy:i,setStrategy:c,segments:p,setSegments:h,errors:l})=>{const y=ke(i.constraints),d=Re(t,e,a),{strategyDefinition:u}=se(i==null?void 0:i.name),w=K(),{uiConfig:f,error:g,loading:E}=I();if(g)throw g;if(E||!u)return null;const D=m=>u.parameters.find(S=>S.name===m),R=(m,S)=>{const F=D(m);if(m!=="groupId"){const k=_e(F,S);return k?(l.setFormError(m,k),!1):(l.removeFormError(m),!0)}return!0},x=()=>u.parameters.map(m=>m.name).map(m=>{var S;return R(m,(S=i.parameters)==null?void 0:S[m])}).every(Boolean),b=()=>{w(`/projects/${e}/settings/default-strategy`)};return T(wt,{onSubmit:async m=>{if(m.preventDefault(),x())s();else return},children:[o(Fe,{title:i.title||"",setTitle:m=>{c(S=>({...S,title:m}))}}),o(Pe,{segments:p,setSegments:h,projectId:e}),o(De,{projectId:e,environmentId:a,strategy:i,setStrategy:c}),o(le,{}),o($e,{strategy:i,strategyDefinition:u,setStrategy:c,validateParameter:R,errors:l,hasAccess:d}),o(q,{condition:i.parameters!=null&&"stickiness"in i.parameters,show:o(qe,{strategy:i,setStrategy:c,environment:a,projectId:e})}),o(le,{}),T(Et,{children:[o(M,{permission:t,projectId:e,environmentId:a,variant:"contained",color:"primary",type:"submit",disabled:r||!y||l.hasFormErrors(),"data-testid":Oe,children:"Save strategy"}),o(Be,{type:"button",color:"primary",onClick:n||b,disabled:r,children:"Cancel"})]})]})},Ee=(e,a)=>{var i;const{project:t,refetch:s}=Le(e),n={name:"flexibleRollout",constraints:[],parameters:{rollout:"100",stickiness:t.defaultStickiness||"default",groupId:""}},r=(i=t.environments.find(c=>c.environment===a))==null?void 0:i.defaultStrategy;return{defaultStrategyFallback:n,strategy:r,refetch:s}},Nt=()=>{const e=j("projectId"),a=ae("environmentId"),{defaultStrategyFallback:t,strategy:s,refetch:n}=Ee(e,a),[r,i]=C.useState(s||t),[c,p]=C.useState([]),{updateDefaultStrategy:h,loading:l}=fe(),{strategyDefinition:y}=se(r==null?void 0:r.name),{setToastData:d,setToastApiError:u}=Y(),w=pe(),{uiConfig:f}=I(),{unleashUrl:g}=f,E=K(),{trackEvent:D}=ye(),{segments:R,refetchSegments:x}=me();C.useEffect(()=>{if(R&&(s!=null&&s.segments)){const S=[];for(const F of s==null?void 0:s.segments)S.push(...R.filter(k=>k.id===F));p(S)}},[JSON.stringify(R),JSON.stringify(s==null?void 0:s.segments)]);const b=xt(r,c),O=async S=>{await h(e,a,S),D("default_strategy",{props:{action:"edit",hasTitle:!!S.title}}),await x(),d({title:"Default Strategy updated",type:"success",confetti:!0})},m=async()=>{const S=`/projects/${e}/settings/default-strategy`;try{await O(b),await n(),E(S)}catch(F){u(_(F))}};return!y||!r?null:o(be,{modal:!0,title:Se((r==null?void 0:r.name)??""),description:Rt,documentationLink:Ft,documentationLinkLabel:Pt,formatApiCode:()=>kt(e,a,b,y,g),children:o(At,{projectId:e,strategy:r,setStrategy:i,segments:c,setSegments:p,environmentId:a,onSubmit:m,loading:l,permission:Ve,errors:w,isChangeRequest:!1})})},xt=(e,a)=>({name:e.name,title:e.title,constraints:e.constraints??[],parameters:e.parameters??{},variants:e.variants??[],segments:a.map(t=>t.id),disabled:e.disabled??!1}),kt=(e,a,t,s,n)=>{if(!n)return"";const r={...t,parameters:Ye(t.parameters??{},s)},i=`${n}/api/admin/projects/${e}/environments/${a}/default-strategy}`,c=JSON.stringify(r,void 0,2);return`curl --location --request PUT '${i}' \\
1
+ import{c as de,j as o,b as ge,aE as j,aW as J,d as T,b7 as z,C as q,E as he,T as $,c8 as xe,s as L,fO as ke,bd as Re,fP as se,av as K,au as I,fQ as Fe,fR as Pe,fS as De,fT as $e,fU as qe,bu as M,fV as Oe,i as Be,fW as _e,cj as Le,fX as ae,r as C,ax as fe,f as Y,fY as pe,ag as ye,fZ as me,ay as be,aX as Se,bn as Ve,f_ as Ye,h as _,dn as Ue,aY as je,aV as re,aF as ne,a_ as Q,f$ as ze,g0 as He,g1 as Ge,g2 as We,g3 as Me,g4 as Je,a$ as ve,b8 as Ke,g5 as Ie,y as X,aJ as ce,B as Qe,ae as Xe,bT as oe,g6 as Ne,es as Ze,g7 as et,g8 as tt,g9 as at,ga as nt,ba as st,bb as rt,bc as ot,A as Ce,l as Te,bN as it,m as ct,o as lt,L as ut,gb as dt,n as gt,u as ht,bR as ft,aQ as pt,aO as yt,aP as mt,aK as bt,gc as we}from"./index-83ae2eb3.js";const St=de(o("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"}),"Cloud"),Qt=de(o("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"}),"WatchLater"),Xt=({enabled:e,className:a})=>{const t=ge(),s=e?"Environment enabled":"Environment disabled",n={backgroundColor:e?t.palette.primary.light:t.palette.neutral.border,borderRadius:"50%",width:"28px",height:"28px",minWidth:"28px",display:"flex",alignItems:"center",justifyContent:"center",marginRight:t.spacing(1)},r={fill:t.palette.common.white,width:"16px",height:"16px"};return o("div",{style:n,className:a,children:o(St,{style:r,titleAccess:s})})},vt=({isOpen:e,onConfirm:a,onClose:t,showBanner:s,environment:n,messageComponent:r})=>{const i=j("projectId"),{data:c}=J(i),{changeRequestInReviewOrApproved:p,alert:h}=xe(c),l=p(n||"");return T(z,{open:e,primaryButtonText:l?"Add to existing change request":"Add suggestion to draft",secondaryButtonText:"Cancel",onClick:a,onClose:t,title:"Request changes",fullWidth:!0,children:[o(q,{condition:l,show:h}),o(q,{condition:!!s,show:T(he,{severity:"info",sx:{mb:2},children:["Change requests feature is enabled for ",n,". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})}),o($,{variant:"body2",color:"text.secondary",children:"Your suggestion:"}),r]})},Ct=(e,a)=>{const t={};return a.parameters.forEach(s=>{t[s.name]=Tt(e,s)}),{name:a.name,constraints:[],parameters:t}},Tt=(e,a)=>a.name==="rollout"||a.name==="percentage"||a.type==="percentage"?"50":a.name==="stickiness"?"":a.name==="groupId"?e:a.type==="boolean"?"false":"",wt=L("form")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),le=L("hr")(({theme:e})=>({width:"100%",height:"1px",margin:e.spacing(2,0),border:"none",background:e.palette.background.elevation2})),Et=L("div")(({theme:e})=>({display:"flex",justifyContent:"end",gap:e.spacing(2),paddingBottom:e.spacing(10)})),At=({projectId:e,environmentId:a,permission:t,onSubmit:s,onCancel:n,loading:r,strategy:i,setStrategy:c,segments:p,setSegments:h,errors:l})=>{const y=ke(i.constraints),d=Re(t,e,a),{strategyDefinition:u}=se(i==null?void 0:i.name),w=K(),{uiConfig:f,error:g,loading:E}=I();if(g)throw g;if(E||!u)return null;const D=m=>u.parameters.find(S=>S.name===m),R=(m,S)=>{const F=D(m);if(m!=="groupId"){const k=_e(F,S);return k?(l.setFormError(m,k),!1):(l.removeFormError(m),!0)}return!0},x=()=>u.parameters.map(m=>m.name).map(m=>{var S;return R(m,(S=i.parameters)==null?void 0:S[m])}).every(Boolean),b=()=>{w(`/projects/${e}/settings/default-strategy`)};return T(wt,{onSubmit:async m=>{if(m.preventDefault(),x())s();else return},children:[o(Fe,{title:i.title||"",setTitle:m=>{c(S=>({...S,title:m}))}}),o(Pe,{segments:p,setSegments:h,projectId:e}),o(De,{projectId:e,environmentId:a,strategy:i,setStrategy:c}),o(le,{}),o($e,{strategy:i,strategyDefinition:u,setStrategy:c,validateParameter:R,errors:l,hasAccess:d}),o(q,{condition:i.parameters!=null&&"stickiness"in i.parameters,show:o(qe,{strategy:i,setStrategy:c,environment:a,projectId:e})}),o(le,{}),T(Et,{children:[o(M,{permission:t,projectId:e,environmentId:a,variant:"contained",color:"primary",type:"submit",disabled:r||!y||l.hasFormErrors(),"data-testid":Oe,children:"Save strategy"}),o(Be,{type:"button",color:"primary",onClick:n||b,disabled:r,children:"Cancel"})]})]})},Ee=(e,a)=>{var i;const{project:t,refetch:s}=Le(e),n={name:"flexibleRollout",constraints:[],parameters:{rollout:"100",stickiness:t.defaultStickiness||"default",groupId:""}},r=(i=t.environments.find(c=>c.environment===a))==null?void 0:i.defaultStrategy;return{defaultStrategyFallback:n,strategy:r,refetch:s}},Nt=()=>{const e=j("projectId"),a=ae("environmentId"),{defaultStrategyFallback:t,strategy:s,refetch:n}=Ee(e,a),[r,i]=C.useState(s||t),[c,p]=C.useState([]),{updateDefaultStrategy:h,loading:l}=fe(),{strategyDefinition:y}=se(r==null?void 0:r.name),{setToastData:d,setToastApiError:u}=Y(),w=pe(),{uiConfig:f}=I(),{unleashUrl:g}=f,E=K(),{trackEvent:D}=ye(),{segments:R,refetchSegments:x}=me();C.useEffect(()=>{if(R&&(s!=null&&s.segments)){const S=[];for(const F of s==null?void 0:s.segments)S.push(...R.filter(k=>k.id===F));p(S)}},[JSON.stringify(R),JSON.stringify(s==null?void 0:s.segments)]);const b=xt(r,c),O=async S=>{await h(e,a,S),D("default_strategy",{props:{action:"edit",hasTitle:!!S.title}}),await x(),d({title:"Default Strategy updated",type:"success",confetti:!0})},m=async()=>{const S=`/projects/${e}/settings/default-strategy`;try{await O(b),await n(),E(S)}catch(F){u(_(F))}};return!y||!r?null:o(be,{modal:!0,title:Se((r==null?void 0:r.name)??""),description:Rt,documentationLink:Ft,documentationLinkLabel:Pt,formatApiCode:()=>kt(e,a,b,y,g),children:o(At,{projectId:e,strategy:r,setStrategy:i,segments:c,setSegments:p,environmentId:a,onSubmit:m,loading:l,permission:Ve,errors:w,isChangeRequest:!1})})},xt=(e,a)=>({name:e.name,title:e.title,constraints:e.constraints??[],parameters:e.parameters??{},variants:e.variants??[],segments:a.map(t=>t.id),disabled:e.disabled??!1}),kt=(e,a,t,s,n)=>{if(!n)return"";const r={...t,parameters:Ye(t.parameters??{},s)},i=`${n}/api/admin/projects/${e}/environments/${a}/default-strategy}`,c=JSON.stringify(r,void 0,2);return`curl --location --request PUT '${i}' \\
2
2
  --header 'Authorization: INSERT_API_KEY' \\
3
3
  --header 'Content-Type: application/json' \\
4
4
  --data-raw '${c}'`},Rt=`
@@ -1,2 +1,2 @@
1
- import{gi as c,b as g,bI as m,r as d,j as u}from"./index-fcc452e3.js";import{d as b,L as x,C as f,a as C,b as v,P as S,c as h,T as q,p as k,e as M,f as L}from"./chartjs-adapter-date-fns.esm-d24144ba.js";import"./index-6d970dd2.js";import"./index-5f6e673f.js";const $=(e,s,n)=>{const a={label:"Total requests",borderColor:e.palette.primary.main,backgroundColor:e.palette.primary.main,data:p(s,n,o=>o.yes+o.no),elements:{point:{radius:6,pointStyle:"circle"},line:{borderDash:[8,4]}}},t={label:"Exposed",borderColor:e.palette.success.main,backgroundColor:e.palette.success.main,data:p(s,n,o=>o.yes),elements:{point:{radius:6,pointStyle:"triangle"}}},r={label:"Not exposed",borderColor:e.palette.error.main,backgroundColor:e.palette.error.main,data:p(s,n,o=>o.no),elements:{point:{radius:6,pointStyle:"triangle",pointRotation:180}}};return{datasets:[t,r,a]}},p=(e,s,n)=>e.map(a=>({x:a.timestamp,y:n(a),variants:a.variants})),E=(e,s)=>{if(s===0)return"";const[n,a]=e,t=Math.floor(Number(a)/s*100);return`${a} (${t}%) - ${n}`},P=(e,s,n,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,itemSort:(t,r)=>{const o=["Total requests","Exposed","Not exposed"],i=o.indexOf(t.dataset.label),l=o.indexOf(r.dataset.label);return i-l},callbacks:{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:o,...i}=r.variants;return Object.entries(i).map(l=>E(l,r.y)).join(`
1
+ import{gi as c,b as g,bI as m,r as d,j as u}from"./index-83ae2eb3.js";import{d as b,L as x,C as f,a as C,b as v,P as S,c as h,T as q,p as k,e as M,f as L}from"./chartjs-adapter-date-fns.esm-bb13a147.js";import"./index-b6e8c0c5.js";import"./index-0165843e.js";const $=(e,s,n)=>{const a={label:"Total requests",borderColor:e.palette.primary.main,backgroundColor:e.palette.primary.main,data:p(s,n,o=>o.yes+o.no),elements:{point:{radius:6,pointStyle:"circle"},line:{borderDash:[8,4]}}},t={label:"Exposed",borderColor:e.palette.success.main,backgroundColor:e.palette.success.main,data:p(s,n,o=>o.yes),elements:{point:{radius:6,pointStyle:"triangle"}}},r={label:"Not exposed",borderColor:e.palette.error.main,backgroundColor:e.palette.error.main,data:p(s,n,o=>o.no),elements:{point:{radius:6,pointStyle:"triangle",pointRotation:180}}};return{datasets:[t,r,a]}},p=(e,s,n)=>e.map(a=>({x:a.timestamp,y:n(a),variants:a.variants})),E=(e,s)=>{if(s===0)return"";const[n,a]=e,t=Math.floor(Number(a)/s*100);return`${a} (${t}%) - ${n}`},P=(e,s,n,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,itemSort:(t,r)=>{const o=["Total requests","Exposed","Not exposed"],i=o.indexOf(t.dataset.label),l=o.indexOf(r.dataset.label);return i-l},callbacks:{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:o,...i}=r.variants;return Object.entries(i).map(l=>E(l,r.y)).join(`
2
2
  `)},title:t=>`Time: ${c(t[0].parsed.x,a.locale)}`}},legend:{position:"top",align:"end",labels:{boxWidth:10,boxHeight:10,usePointStyle:!0}},title:{text:T(n),position:"top",align:"start",display:!0,font:{size:16,weight:"400"},color:e.palette.text.primary}},scales:{y:{type:"linear",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",time:{unit:"hour"},grid:{display:!1},ticks:{callback:(t,r,o)=>c(o[r].value,a.locale),color:e.palette.text.secondary}}}}),T=e=>e===1?"Requests in the last hour":`Requests in the last ${e} hours`;b.font={...b.font,family:"Sen",size:13,weight:"400"};const R=({metrics:e,hoursBack:s,statsSectionId:n})=>{const a=g(),{locationSettings:t}=m(),r=d.useMemo(()=>[...e].sort((l,y)=>l.timestamp.localeCompare(y.timestamp)),[e]),o=d.useMemo(()=>P(a,r,s,t),[a,r,s,t]),i=d.useMemo(()=>$(a,r,t),[a,r,t]);return u("div",{style:{height:400},children:u(x,{options:o,data:i,"aria-label":"A feature metrics line chart, with three lines: all requests, positive requests, and negative requests.","aria-describedby":n})})};f.register(C,v,S,h,q,k,M,L);export{R as FeatureMetricsChart,R as default};
@@ -1,7 +1,7 @@
1
- import{c as Wt,j as t,s as d,aE as D,aF as z,aG as Sn,d as i,aH as bn,C as x,aI as X,aJ as he,aK as K,aL as be,aM as Cn,aN as _e,r as f,aO as ye,aP as xe,aQ as rt,aR as vn,aS as Tn,aT as wn,aU as xn,f as G,aV as Ee,aW as ie,h as L,T as q,aX as Ae,aY as De,aZ as En,a_ as ae,a$ as fe,b0 as Q,t as it,b1 as An,b2 as Dn,b3 as Re,M as me,b4 as Oe,b5 as qt,b6 as Ce,b7 as ne,av as ce,E as le,b8 as Ht,b9 as Rn,ba as In,bb as Fn,bc as kn,bd as nt,be as $n,bf as Pn,y as M,B as Y,bg as Bn,bh as On,bi as Mn,bj as _n,bk as jn,bl as Ln,bm as Vn,bn as zn,bo as Nn,bp as Wn,G as qn,b as Ut,a9 as je,x as ve,bq as ct,i as de,N as lt,br as Gt,ag as Le,V as Hn,bs as dt,bt as ge,bu as re,bv as Un,Z as Gn,bw as Yn,bx as te,by as Kn,bz as Jn,R as Qn,bA as Xn,bB as Zn,bC as ea,bD as ta,bE as Yt,bF as na,bG as aa,u as oa,bH as Kt,bI as Jt,au as ut,bJ as sa,bK as ra,bL as Qt,bM as ia,bN as Xt,bO as ca,bP as la,bQ as pt,bR as da,bS as ua,bT as Ve,bU as pa,L as Zt,D as Te,bV as ga,bW as ha,bX as en,bY as tn,bZ as se,b_ as at,b$ as fa,c0 as nn,c1 as ma,c2 as ya,g as Sa,c3 as ba,c4 as We,c5 as ft,as as Ca,ay as va,c6 as pe,c7 as mt,c8 as Ta,c9 as wa,m as xa,aq as gt,ar as Ea,al as yt,ca as Aa,cb as Da,cc as Ra,cd as St,a8 as an,ce as Ia,a0 as qe,ac as Fa,a2 as ka,a3 as $a,a4 as Pa,a5 as Ba,a6 as Oa,a7 as Ma,cf as _a,cg as ja,ch as bt,ci as La,cj as on,ck as Va,q as za,cl as Ct,cm as Na,cn as Wa,co as qa,cp as Ha,cq as Ua,cr as Ga,ai as Ya,cs as Ka,ct as Ja,cu as Qa,cv as Xa,cw as Za,cx as eo}from"./index-fcc452e3.js";import{C as sn,f as rn,E as to,F as no,V as ao,a as oo,u as so,b as ro,T as io,c as co,d as lo,W as uo,e as po,g as go}from"./FeatureArchiveDialog-1edc277b.js";import{S as ho}from"./StrategyItemContainer-1bd0d884.js";const fo=Wt(t("path",{d:"m20.54 5.23-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5 6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z"}),"Archive"),mo=Wt(t("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"}),"Assessment"),yo=d("div")(({theme:e})=>({borderRadius:e.spacing(1.5),backgroundColor:e.palette.background.paper,padding:e.spacing(4)})),So=()=>{const e=D("projectId"),n=D("featureId"),{feature:a}=z(e,n);return a.name?t(yo,{children:t(Sn,{title:"Event log",feature:n,displayInline:!0})}):null},bo=d("div")(({theme:e})=>({borderRadius:e.shape.borderRadiusLarge,color:e.palette.primary.contrastText,backgroundColor:e.palette.background.alternative,display:"flex",flexDirection:"column",maxWidth:"350px",minWidth:"350px",marginRight:e.spacing(2),[e.breakpoints.down(1e3)]:{width:"100%",maxWidth:"none",minWidth:"auto"}})),Co=d("div")({padding:"1.5rem 1.5rem 0 1.5rem"}),vo=d("div")({display:"flex",alignItems:"center"}),To=d("h2")(({theme:e})=>({fontSize:e.fontSizes.bodySize,fontWeight:"normal",margin:0})),wo=d("div")(({theme:e})=>({margin:e.spacing(2,0),display:"flex",flexDirection:"column"})),vt=d("span")(({theme:e})=>({margin:e.spacing(1,0),fontSize:e.fontSizes.bodySize})),Tt=d("div")(({theme:e})=>({display:"flex",alignItems:"center",color:e.palette.primary.contrastText})),xo=()=>{const e=D("projectId"),n=D("featureId"),{feature:a}=z(e,n),{project:s,description:o,type:r}=a,c=Cn(r);return t(bo,{children:i(Co,{children:[i(vo,{"data-loading":!0,children:[t(c,{sx:l=>({marginRight:l.spacing(2),height:"40px",width:"40px",fill:l.palette.primary.contrastText})})," ",i(To,{children:[bn(r||"")," toggle"]})]}),i(wo,{children:[i(vt,{"data-loading":!0,children:["Project: ",s]}),t(x,{condition:!!o,show:i(vt,{"data-loading":!0,children:[t("div",{children:"Description:"}),i(Tt,{children:[t("p",{children:o}),t(X,{projectId:e,permission:he,component:K,to:`/projects/${e}/features/${n}/settings`,tooltipProps:{title:"Edit description"},children:t(be,{sx:l=>({color:l.palette.primary.contrastText})})})]})]}),elseShow:t("span",{"data-loading":!0,children:i(Tt,{children:["No description."," ",t(X,{projectId:e,permission:he,component:K,to:`/projects/${e}/features/${n}/settings`,tooltipProps:{title:"Edit description"},children:t(be,{sx:l=>({color:l.palette.primary.contrastText})})})]})})})]})]})})},wt={lastHourUsage:[],seenApplications:[]},Eo=(e,n,a={})=>{const s=async()=>{const g=ye(`api/admin/client-metrics/features/${n}`),h=await fetch(g,{method:"GET"}).then(xe("feature metrics"));return h.ok?h.json():wt},o=`${e}_${n}_metrics`,{data:r,error:c}=_e(o,s,{...a}),[l,u]=f.useState(!c&&!r),p=()=>{rt(o)};return f.useEffect(()=>{u(!c&&!r)},[r,c]),{metrics:r||wt,error:c,loading:l,refetch:p,FEATURE_METRICS_CACHE_KEY:o}},Ao=e=>({yes:0,no:0,environment:e,timestamp:""}),Do=(e,n)=>e.map(a=>n.lastHourUsage.find(o=>o.environment===a.name)||Ao(a.name)),Ro=e=>(n,a,s)=>(s.revalidateOnFocus=!1,s.revalidateIfStale=!1,s.revalidateOnReconnect=!1,e(n,a,s)),Io=vn(_e,Ro),cn=(e,n)=>{const{refetchFeature:a}=z(e,n),s=Tn(e,n),{data:o,error:r,mutate:c}=Io(["useFeatureImmutable",s],()=>wn(s)),l=f.useCallback(async()=>{await c(),await a()},[c,a]);return{feature:(o==null?void 0:o.body)||xn,refetchFeature:l,loading:!r&&!o,status:o==null?void 0:o.status,error:r}},ln=(e,n,a)=>{const{setToastData:s,setToastApiError:o}=G(),{addChange:r}=Ee(),{refetch:c}=ie(e),[l,u]=f.useState({isOpen:!1}),p=f.useCallback((S,E,y)=>{u({featureName:n,environment:S,fromEnvironment:y,strategy:E,isOpen:!0})},[]),g=f.useCallback((S,E,y)=>{u({featureName:n,environment:S,fromEnvironment:y,strategies:E,isOpen:!0})},[]),h=f.useCallback(()=>{u({isOpen:!1})},[]),m=f.useCallback(async()=>{try{await r(e,l.environment,{feature:l.featureName,action:a,payload:l.strategy}),c(),u({isOpen:!1}),s({type:"success",title:"Changes added to the draft!"})}catch(S){o(L(S)),u({isOpen:!1})}},[r]),b=f.useCallback(async()=>{try{await Promise.all(l.strategies.map(S=>r(e,l.environment,{feature:l.featureName,action:a,payload:S}))),c(),u({isOpen:!1}),s({type:"success",title:"Changes added to the draft!"})}catch(S){o(L(S)),u({isOpen:!1})}},[r]);return{onChangeRequestAddStrategy:p,onChangeRequestAddStrategies:g,onChangeRequestAddStrategyClose:h,onChangeRequestAddStrategyConfirm:m,onChangeRequestAddStrategiesConfirm:b,changeRequestDialogDetails:l}},Fo=({payload:e,fromEnvironment:n,environment:a})=>i(q,{children:[i("strong",{children:["Copy ",Ae((e==null?void 0:e.name)||"")," strategy"," "]})," ","from ",n," to ",a]}),ko=({environmentId:e,environments:n,strategy:a})=>{const s=D("projectId"),o=D("featureId"),[r,c]=f.useState(null),l=!!r,{addStrategyToFeature:u}=De(),{setToastData:p,setToastApiError:g}=G(),{refetchFeature:h}=z(s,o),{refetchFeature:m}=cn(s,o),b=()=>{c(null)},S=En(s),{isChangeRequestConfigured:E}=ae(s),{changeRequestDialogDetails:y,onChangeRequestAddStrategyClose:C,onChangeRequestAddStrategy:k,onChangeRequestAddStrategyConfirm:B}=ln(s,o,"addStrategy"),_=async v=>{const{id:R,...$}={...a,targetEnvironment:v};if(E(v)){await k(v,{id:R,...$},e);return}try{await u(s,o,v,a),h(),m(),p({title:"Strategy created",text:`Successfully copied a strategy to ${v}`,type:"success"})}catch(H){g(L(H))}b()},V=n.some(v=>S(fe,v));return i("div",{children:[t(sn,{isOpen:y.isOpen,onClose:C,environment:y==null?void 0:y.environment,onConfirm:B,messageComponent:t(Fo,{fromEnvironment:y.fromEnvironment,payload:y.strategy})}),t(Q,{title:`Copy to another environment${V?"":" (Access denied)"}`,children:t("div",{children:t(it,{size:"large",id:`copy-strategy-icon-menu-${a.id}`,"aria-controls":l?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":l?"true":void 0,onClick:v=>{c(v.currentTarget)},"data-testid":An,disabled:!V,children:t(Dn,{})})})}),t(Re,{id:"basic-menu",anchorEl:r,open:l,onClose:b,MenuListProps:{"aria-labelledby":`copy-strategy-icon-menu-${a.id}`},children:n.map(v=>{const R=S(fe,v);return t(Q,{title:R?"":"You don't have access to add a strategy to this environment",children:t("div",{children:i(me,{onClick:()=>_(v),disabled:!R,children:[t(x,{condition:!R,show:t(Oe,{children:t(qt,{fontSize:"small"})})}),i(Ce,{children:["Copy to ",v]})]})})},v)})})]})},dn=()=>t(le,{severity:"error",children:"Removing the strategy will change which users receive access to the feature."}),$o=({onRemove:e,onClose:n,isOpen:a})=>t(ne,{title:"Are you sure you want to delete this strategy?",open:a,primaryButtonText:"Remove strategy",secondaryButtonText:"Cancel",onClick:e,onClose:n,children:t(dn,{})}),Po=d("div")(({theme:e})=>({marginTop:e.spacing(3),marginBottom:e.spacing(1)})),Bo=({onRemove:e,onClose:n,isOpen:a})=>i(ne,{title:"Suggest changes",open:a,primaryButtonText:"Add suggestion to draft",secondaryButtonText:"Cancel",onClick:e,onClose:n,children:[t(dn,{}),t(Po,{children:t(q,{variant:"body2",color:"text.secondary",children:"Your suggestion:"})}),t(q,{fontWeight:"bold",children:"Remove strategy"})]}),Oo=({projectId:e,featureId:n,environmentId:a,strategyId:s})=>{const{deleteStrategyFromFeature:o}=De(),{setToastData:r,setToastApiError:c}=G(),l=ce(),{refetchFeature:u}=z(e,n);return async g=>{try{g.preventDefault(),await o(e,n,a,s),r({title:"Strategy deleted",type:"success"}),u(),l(Ht(e,n))}catch(h){c(L(h))}}},Mo=({projectId:e,featureId:n,environmentId:a,strategyId:s})=>{const{addChange:o}=Ee(),{refetch:r}=ie(e),{setToastData:c,setToastApiError:l}=G();return async p=>{try{p.preventDefault(),await o(e,a,{action:"deleteStrategy",feature:n,payload:{id:s}}),c({title:"Changes added to the draft!",type:"success"}),await r()}catch(g){l(L(g))}}},_o=({projectId:e,featureId:n,environmentId:a,strategyId:s,text:o,isOpen:r,onClose:c})=>{const{isChangeRequestConfigured:l}=ae(e),u=Oo({featureId:n,projectId:e,strategyId:s,environmentId:a}),p=Mo({featureId:n,projectId:e,strategyId:s,environmentId:a});return l(a)?t(Bo,{isOpen:r,onClose:()=>c(),onRemove:async g=>{await p(g),c()}}):t($o,{isOpen:r,onClose:()=>c(),onRemove:u})},jo=({projectId:e,environmentId:n,featureId:a,strategy:s})=>{const{refetchFeature:o}=z(e,a),{setStrategyDisabledState:r}=De(),{setToastData:c,setToastApiError:l}=G(),u=p=>async()=>{try{await r(e,a,n,s.id,!p),c({title:`Strategy ${p?"enabled":"disabled"}`,type:"success"}),o()}catch(g){l(L(g))}};return{onDisable:u(!1),onEnable:u(!0)}},Lo=({projectId:e,environmentId:n,featureId:a,strategy:s})=>{const{addChange:o}=Ee(),{refetch:r}=ie(e),{setToastData:c,setToastApiError:l}=G(),u=p=>async()=>{try{await o(e,n,{action:"updateStrategy",feature:a,payload:{...s,disabled:!p}}),c({title:"Changes added to the draft!",type:"success"}),await r()}catch(g){l(L(g))}};return{onSuggestDisable:u(!1),onSuggestEnable:u(!0)}},Vo=({isOpen:e,onClose:n,...a})=>{var b;const{projectId:s,environmentId:o}=a,{isChangeRequestConfigured:r}=ae(s),c=r(o),{onSuggestEnable:l,onSuggestDisable:u}=Lo({...a}),{onEnable:p,onDisable:g}=jo({...a}),h=!!((b=a.strategy)!=null&&b.disabled);return t(ne,{title:c?`Add ${h?"enable":"disable"} strategy to change request?`:`Are you sure you want to ${h?"enable":"disable"} this strategy?`,open:e,primaryButtonText:c?"Add to draft":`${h?"Enable":"Disable"} strategy`,secondaryButtonText:"Cancel",onClick:S=>{S.preventDefault(),c?h?l():u():h?p():g(),n()},onClose:()=>n(),children:t(x,{condition:c,show:t(Rn,{environment:o}),elseShow:i(le,{severity:"error",children:[h?"Enabling":"Disabling"," the strategy will change which users receive access to the feature."]})})})};var ht={},zo=Fn;Object.defineProperty(ht,"__esModule",{value:!0});var un=ht.default=void 0,No=zo(In()),Wo=kn,qo=(0,No.default)((0,Wo.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");un=ht.default=qo;const Ho=({projectId:e,strategy:n,featureId:a,environmentId:s})=>{const[o,r]=f.useState(null),[c,l]=f.useState(!1),[u,p]=f.useState(!1),g=!!o,h=E=>{r(E.currentTarget)},m=E=>{r(null),E.stopPropagation()},b=nt($n,e,s),S=nt(Pn,e,s);return i(M,{children:[t(Y,{sx:{display:"flex",alignItems:"center",textAlign:"center"},children:t(Q,{title:"More actions",children:t(it,{onClick:h,size:"small","aria-controls":g?"actions-menu":void 0,"aria-haspopup":"true","aria-expanded":g?"true":void 0,"data-testid":Bn,children:t(On,{sx:{width:32,height:32}})})})}),i(Re,{anchorEl:o,id:"actions-menu",open:g,onClose:m,onClick:m,transformOrigin:{horizontal:"right",vertical:"top"},anchorOrigin:{horizontal:"right",vertical:"bottom"},"data-testid":Mn,children:[t(Q,{title:n.disabled?"Enable strategy":"Disable strategy",arrow:!0,placement:"left",children:i(me,{disabled:!b,onClick:()=>l(!0),children:[t(Oe,{children:n.disabled?t(_n,{}):t(jn,{})}),t(Ce,{children:n.disabled?"Enable":"Disable"})]})}),t(Q,{title:"Remove strategy",arrow:!0,placement:"left",children:i(me,{disabled:!S,onClick:()=>p(!0),"data-testid":Ln,children:[t(Oe,{children:t(un,{})}),t(Ce,{children:"Remove"})]})})]}),t(Vo,{isOpen:c,onClose:()=>l(!1),projectId:e,featureId:a,environmentId:s,strategy:n}),t(_o,{isOpen:u,onClose:()=>p(!1),projectId:e,featureId:a,environmentId:s,strategyId:n.id})]})},Uo=({environmentId:e,strategy:n,onDragStart:a,onDragEnd:s,otherEnvironments:o,orderNumber:r,headerChildren:c})=>{const l=D("projectId"),u=D("featureId"),p=Vn(l,u,e,n.id);return i(ho,{strategy:n,onDragStart:a,onDragEnd:s,orderNumber:r,actions:i(M,{children:[c,t(x,{condition:!!(o&&(o==null?void 0:o.length)>0),show:()=>t(ko,{environmentId:e,environments:o,strategy:n})}),t(X,{permission:zn,environmentId:e,projectId:l,component:K,to:p,tooltipProps:{title:"Edit strategy"},"data-testid":`STRATEGY_EDIT-${n.name}`,children:t(be,{})}),t(Ho,{projectId:l,featureId:u,environmentId:e,strategy:n})]}),children:[t(Nn,{strategy:n}),n.variants?t(Wn,{variants:n.variants}):null]})},Go=(e,n,a,s)=>{const{data:o}=ie(e),r=o==null?void 0:o.find(u=>u.environment===a),c=r==null?void 0:r.features.find(u=>u.name===n);return c==null?void 0:c.changes.find(u=>u.action==="updateStrategy"||u.action==="deleteStrategy"?u.payload.id===s:!1)},Yo=({strategy:e,index:n,environmentName:a,otherEnvironments:s,isDragging:o,onDragStartRef:r,onDragOver:c,onDragEnd:l})=>{const u=D("projectId"),p=D("featureId"),g=f.useRef(null),h=Go(u,p,a,e.id);return i(Y,{ref:g,onDragOver:c(g,n),sx:{opacity:o?"0.5":"1"},children:[t(x,{condition:n>0,show:t(qn,{text:"OR"})}),t(Uo,{strategy:e,environmentId:a,otherEnvironments:s,onDragStart:r(g,n),onDragEnd:l,orderNumber:n+1,headerChildren:t(Ko,{change:h})})]},e.id)},Ko=({change:e})=>{const n=Ut();return je(n.breakpoints.down("sm"))?null:i(Y,{sx:{mr:1.5},children:[t(x,{condition:(e==null?void 0:e.action)==="updateStrategy",show:t(ve,{color:"warning",children:"Modified in draft"})}),t(x,{condition:(e==null?void 0:e.action)==="deleteStrategy",show:t(ve,{color:"error",children:"Deleted in draft"})})]})},Jo=({environmentId:e,environments:n,onClick:a})=>{const s=D("projectId"),[o,r]=f.useState(null),c=!!o,{hasAccess:l}=f.useContext(ct),u=n.some(p=>l(fe,s,p));return i("div",{children:[t(Q,{title:u?"":"(Access denied)",children:t("div",{children:t(de,{id:`copy-all-strategies-${e}`,"aria-controls":c?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":c?"true":void 0,onClick:p=>{r(p.currentTarget)},disabled:!u,variant:"outlined",children:"Copy from another environment"})})}),t(Re,{id:"basic-menu",anchorEl:o,open:c,onClose:()=>{r(null)},MenuListProps:{"aria-labelledby":`copy-all-strategies-${e}`},children:n.map(p=>{const g=l(fe,s,p);return t(Q,{title:g?"":"You don't have access to add a strategy to this environment",children:t("div",{children:i(me,{onClick:()=>a(p),disabled:!g,children:[t(x,{condition:!g,show:t(Oe,{children:t(qt,{fontSize:"small"})})}),i(Ce,{children:["Copy from ",p]})]})})},p)})})]})},Qo=d("div")(({theme:e})=>({"&>*:nth-child(n)":{margin:e.spacing(1,0)}})),Xo=({payload:e,fromEnvironment:n,environment:a})=>i(Qo,{children:[t(q,{children:t("strong",{children:"Copy: "})}),e==null?void 0:e.map(s=>i(q,{children:[i("strong",{children:[Ae((s==null?void 0:s.name)||"")," strategy"," "]})," "]})),i(q,{children:["from ",n," to ",a]})]}),Zo=d("div")(({theme:e})=>({width:e.spacing(4),height:"auto","& > svg":{fill:e.palette.primary.main},"& > div":{height:e.spacing(2),marginLeft:"-.75rem",color:e.palette.primary.main}})),es=d("div")(({theme:e})=>({fontSize:e.fontSizes.smallBody})),ts=d(lt)(({theme:e})=>({fontWeight:e.fontWeight.bold})),ns=d(K)(({theme:e})=>({display:"grid",gridTemplateColumns:"3rem 1fr",width:"20rem",padding:e.spacing(2),color:"inherit",textDecoration:"inherit",lineHeight:1.25,borderWidth:"1px",borderStyle:"solid",borderColor:e.palette.divider,borderRadius:e.spacing(1),"&:hover, &:focus":{borderColor:e.palette.primary.main}})),He=({projectId:e,featureId:n,environmentId:a,strategy:s,defaultStrategy:o})=>{const r=Gt(s.name),c=Ae(s.name),{trackEvent:l}=Le(),u=rn(e,n,a,s.name,o);return i(ns,{to:u,onClick:()=>{l("strategy-add",{props:{buttonTitle:s.displayName||c}})},children:[t(Zo,{children:t(r,{})}),i("div",{children:[t(ts,{text:s.displayName||c,maxWidth:"200",maxLength:25}),t(es,{children:s.description})]})]})},Ue=d(q)(({theme:e})=>({fontSize:e.fontSizes.smallBody,padding:e.spacing(1,2)})),as=({projectId:e,featureId:n,environmentId:a})=>{const{strategies:s}=Hn(),o=s.filter(l=>!l.deprecated&&!l.editable),r=s.filter(l=>!l.deprecated&&l.editable),c={name:"flexibleRollout",displayName:"Default strategy",description:"This is the default strategy defined for this environment in the project"};return i(dt,{dense:!0,children:[i(M,{children:[i(Ue,{color:"textSecondary",children:[a," environment default strategy"]}),t(ge,{children:t(He,{projectId:e,featureId:n,environmentId:a,strategy:c,defaultStrategy:!0})},c.name)]}),t(Ue,{color:"textSecondary",children:"Predefined strategy types"}),o.map(l=>t(ge,{children:t(He,{projectId:e,featureId:n,environmentId:a,strategy:l})},l.name)),t(x,{condition:r.length>0,show:i(M,{children:[t(Ue,{color:"textSecondary",children:"Custom strategies"}),r.map(l=>t(ge,{children:t(He,{projectId:e,featureId:n,environmentId:a,strategy:l})},l.name))]})})]})},os=d("div")({flexShrink:0}),ss=d(re)(({theme:e})=>({minWidth:0,width:e.spacing(4.5),alignItems:"center",justifyContent:"center",align:"center",flexDirection:"column",marginLeft:e.spacing(1)})),ot=({label:e,projectId:n,featureId:a,environmentId:s,variant:o,size:r,matchWidth:c})=>{const[l,u]=f.useState(),p=ce(),{trackEvent:g}=Le(),h=!!l,m=h?"FeatureStrategyMenuPopover":void 0,b=()=>{u(void 0)},S=C=>{g("strategy-add",{props:{buttonTitle:e}}),p(y)},E=C=>{u(C.currentTarget)},y=rn(n,a,s,"flexibleRollout",!0);return i(os,{onClick:C=>C.stopPropagation(),children:[t(re,{permission:fe,projectId:n,environmentId:s,onClick:S,"aria-labelledby":m,variant:o,size:r,sx:{minWidth:c?"282px":"auto"},children:e}),t(ss,{permission:fe,projectId:n,environmentId:s,onClick:E,"aria-labelledby":m,variant:"outlined",size:r,hideLockIcon:!0,tooltipProps:{title:"More strategies"},children:t(Un,{sx:C=>({margin:C.spacing(.25,0)})})}),t(Gn,{id:m,open:h,anchorEl:l,onClose:b,onClick:b,PaperProps:{sx:C=>({paddingBottom:C.spacing(1)})},children:t(as,{projectId:n,featureId:a,environmentId:s})})]})},rs=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",paddingTop:e.spacing(2)})),is=d("div")(({theme:e})=>({fontSize:e.fontSizes.bodySize,textAlign:"center",color:e.palette.text.primary,marginBottom:e.spacing(1)})),cs=d("p")(({theme:e})=>({color:e.palette.text.secondary,fontSize:e.fontSizes.smallBody,textAlign:"center",marginBottom:e.spacing(3),a:{color:e.palette.links}})),ls=({projectId:e,featureId:n,environmentId:a})=>{const{addStrategyToFeature:s}=De(),{setToastData:o,setToastApiError:r}=G(),{refetchFeature:c}=z(e,n),{refetchFeature:l}=cn(e,n),{feature:u}=z(e,n),p=u==null?void 0:u.environments.filter(k=>k.name!==a&&k.strategies&&k.strategies.length>0),{isChangeRequestConfigured:g}=ae(e),{changeRequestDialogDetails:h,onChangeRequestAddStrategies:m,onChangeRequestAddStrategiesConfirm:b,onChangeRequestAddStrategyClose:S}=ln(e,n,"addStrategy"),E=(k=!1)=>{c(),l(),o({title:k?"Strategies created":"Strategy created",text:k?"Successfully copied from another environment":"Successfully created strategy",type:"success"})},y=async k=>{var _;const B=((_=p==null?void 0:p.find(V=>V.name===k))==null?void 0:_.strategies)||[];if(g(a)){await m(a,B,k);return}try{await Promise.all(B.map(V=>{const{id:v,...R}={...V,environment:a};return s(e,n,a,R)})),E(!0)}catch(V){r(L(V))}},C=p&&p.length>0;return i(M,{children:[t(sn,{isOpen:h.isOpen,onClose:S,environment:h==null?void 0:h.environment,onConfirm:b,messageComponent:t(Xo,{fromEnvironment:h.fromEnvironment,payload:h.strategies})}),i(rs,{children:[t(is,{children:"You have not defined any strategies yet."}),i(cs,{children:["Strategies added in this environment will only be executed if the SDK is using an"," ",t(K,{to:"/admin/api",children:"API key configured"})," for this environment."]}),i(Y,{sx:{w:"100%",display:"flex",flexWrap:"wrap",gap:2,alignItems:"center",justifyContent:"center"},children:[t(ot,{label:"Add your first strategy",projectId:e,featureId:n,environmentId:a,matchWidth:C}),t(x,{condition:C,show:t(Jo,{environmentId:a,environments:p.map(k=>k.name),onClick:y})})]})]})]})},ds=d("div")(({theme:e})=>({width:"100%",position:"relative",paddingBottom:e.spacing(2)})),us=d("div")(({theme:e})=>({[e.breakpoints.down(400)]:{padding:e.spacing(1)}})),ps=({featureEnvironment:e,isDisabled:n,otherEnvironments:a})=>{const s=D("projectId"),o=D("featureId"),{setStrategiesSortOrder:r}=De(),{addChange:c}=Ee(),{isChangeRequestConfigured:l}=ae(s),{refetch:u}=ie(s),{setToastData:p,setToastApiError:g}=G(),{refetchFeature:h}=z(s,o),[m,b]=f.useState((e==null?void 0:e.strategies)||[]),[S,E]=f.useState(null);if(f.useEffect(()=>{b((e==null?void 0:e.strategies)||[])},[e==null?void 0:e.strategies]),!e)return null;const y=async v=>{try{await r(s,o,e.name,v),h(),p({title:"Order of strategies updated",type:"success"})}catch(R){g(L(R))}},C=async v=>{await c(s,e.name,{action:"reorderStrategy",feature:o,payload:v}),p({title:"Strategy execution order added to draft",type:"success",confetti:!0}),u()},k=async v=>{try{l(e.name)?await C(v):await y(v)}catch(R){g(L(R))}},B=(v,R)=>$=>{var H;E({id:m[R].id,index:R,height:((H=v.current)==null?void 0:H.offsetHeight)||0}),v!=null&&v.current&&($.dataTransfer.effectAllowed="move",$.dataTransfer.setData("text/html",v.current.outerHTML),$.dataTransfer.setDragImage(v.current,20,20))},_=v=>(R,$)=>H=>{if(S===null||R.current===null||S.index===$||v===S.id)return;const{top:Z,bottom:oe}=R.current.getBoundingClientRect(),ee=H.clientY-Z<S.height,w=oe-H.clientY<S.height,P=S.index>$;if(ee&&P||w&&!P){const F=[...m],T=F.splice(S.index,1)[0];F.splice($,0,T),b(F),E({...S,index:$})}},V=()=>{E(null),k(m.map((v,R)=>({id:v.id,sortOrder:R})))};return t(ds,{children:i(us,{children:[t(x,{condition:m.length>0&&n,show:()=>t(le,{severity:"warning",sx:{mb:2},children:"This environment is disabled, which means that none of your strategies are executing."})}),t(x,{condition:m.length>0,show:t(M,{children:m.map((v,R)=>t(Yo,{strategy:v,index:R,environmentName:e.name,otherEnvironments:a,isDragging:(S==null?void 0:S.id)===v.id,onDragStartRef:B,onDragOver:_(v.id),onDragEnd:V},v.id))}),elseShow:t(ls,{projectId:s,featureId:o,environmentId:e.name})})]})})},pn=(e,n)=>e===0?0:Math.round(n/e*100);var ze={},Ne={};Object.defineProperty(Ne,"__esModule",{value:!0});Ne.defaultOptions=void 0;Ne.defaultOptions={lowercase:!1,precision:1,space:!1,units:["","K","M","B","T","P","E"]};var J={};Object.defineProperty(J,"__esModule",{value:!0});J.getLocales=J.getFractionDigits=J.roundTo=J.parseValue=void 0;function gs(e){const n=parseFloat(e==null?void 0:e.toString());if(isNaN(n))throw new Error("Input value is not a number");if(n>Number.MAX_SAFE_INTEGER||n<Number.MIN_SAFE_INTEGER)throw new RangeError("Input value is outside of safe integer range");return n}J.parseValue=gs;function hs(e,n){if(!Number.isFinite(e))throw new Error("Input value is not a finite number");if(!Number.isInteger(n)||n<0)throw new Error("Precision is not a positive integer");return Number.isInteger(e)?e:parseFloat(e.toFixed(n))}J.roundTo=hs;function fs(e){var n;if(Number.isInteger(e))return 0;const a=e.toString().split(".")[1];return(n=a==null?void 0:a.length)!==null&&n!==void 0?n:0}J.getFractionDigits=fs;function ms(){var e;return typeof navigator>"u"?[]:Array.from((e=navigator.languages)!==null&&e!==void 0?e:[])}J.getLocales=ms;Object.defineProperty(ze,"__esModule",{value:!0});ze.millify=void 0;const xt=Ne,$e=J,Et=1e3;function*At(e){let n=Et;for(;;){const a=e/n;if(a<1)return;yield a,n*=Et}}function gn(e,n){var a,s;const o=n?{...xt.defaultOptions,...n}:xt.defaultOptions;if(!Array.isArray(o.units)||!o.units.length)throw new Error("Option `units` must be a non-empty array");let r;try{r=$e.parseValue(e)}catch(S){return S instanceof Error&&console.warn(`WARN: ${S.message} (millify)`),String(e)}const c=r<0?"-":"";r=Math.abs(r);let l=0;for(const S of At(r))r=S,l+=1;if(l>=o.units.length)return e.toString();let p=$e.roundTo(r,o.precision);for(const S of At(p))p=S,l+=1;const g=(a=o.units[l])!==null&&a!==void 0?a:"",h=o.lowercase?g.toLowerCase():g,m=o.space?" ":"",b=p.toLocaleString((s=o.locales)!==null&&s!==void 0?s:$e.getLocales(),{minimumFractionDigits:$e.getFractionDigits(p)});return`${c}${b}${m}${h}`}ze.millify=gn;var ys=ze.default=gn;const Me=({value:e,threshold:n=1e6,precision:a=2})=>{let s,o=!1;e<n?s=e.toLocaleString():(s=ys(e,{precision:a}),o=!0);const r=t("span",{"data-testid":Yn,children:s});return t(x,{condition:o,show:t(Q,{title:e.toLocaleString(),arrow:!0,children:r}),elseShow:r})},Ge=d("article")(({theme:e})=>({padding:e.spacing(2),background:"transparent",borderRadius:e.spacing(2),textAlign:"center",[e.breakpoints.up("md")]:{padding:e.spacing(4)}})),Ye=d("h3")(({theme:e})=>({margin:0,fontSize:e.fontSizes.bodySize,fontWeight:e.fontWeight.thin})),Ke=d("p")(({theme:e})=>({fontSize:"2.25rem",fontWeight:e.fontWeight.bold,color:e.palette.primary.main})),Je=d("p")(({theme:e})=>({margin:e.spacing(1,0,0,0),padding:e.spacing(2,0,0,0),borderTopWidth:"1px",borderTopStyle:"solid",borderTopColor:e.palette.divider,fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),hn=({totalYes:e,totalNo:n,hoursBack:a,statsSectionId:s,tableSectionId:o})=>{const r=a===1?"in the last hour":`in the last ${a} hours`;return i(te,{container:!0,spacing:2,id:s,"aria-describedby":o,"aria-label":"Feature metrics summary",component:"section",children:[t(te,{item:!0,xs:12,sm:4,children:i(Ge,{children:[t(Ye,{children:"Exposure"}),t(Ke,{children:t(Me,{value:e})}),i(Je,{children:["Total exposure of the feature in the environment"," ",r,"."]})]})}),t(te,{item:!0,xs:12,sm:4,children:i(Ge,{children:[t(Ye,{children:"Exposure %"}),i(Ke,{children:[pn(e+n,e),"%"]}),i(Je,{children:["% total exposure of the feature in the environment"," ",r,"."]})]})}),t(te,{item:!0,xs:12,sm:4,children:i(Ge,{children:[t(Ye,{children:"Requests"}),t(Ke,{children:t(Me,{value:e+n})}),i(Je,{children:["Total requests for the feature in the environment"," ",r,"."]})]})})]})},Ss=d("div")(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"center",margin:"1rem 0",position:"relative","&:before":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",height:2,width:"100%",backgroundColor:e.palette.divider}})),bs=d("span")(({theme:e})=>({fontSize:e.fontSizes.bodySize,textAlign:"center",padding:"0 1rem",background:e.palette.envAccordion.expanded,position:"relative",maxWidth:"80%",color:e.palette.text.primary})),Cs=({children:e})=>t(Ss,{children:t(bs,{children:e})}),vs=({environmentMetric:e})=>e?i(M,{children:[t(Cs,{children:"Feature toggle exposure"}),t("div",{children:t(hn,{totalYes:e.yes,totalNo:e.no,hoursBack:1})})]}):null,Dt=d("div")({marginLeft:"auto",display:"flex",alignItems:"center"}),Rt=d("div")(({theme:e})=>({marginRight:e.spacing(1),display:"flex",flexDirection:"column"})),It=d("p")(({theme:e})=>({color:e.palette.primary.main,textAlign:"right",fontSize:e.fontSizes.bodySize})),Ft=d("p")(({theme:e})=>({maxWidth:"270px",marginTop:e.spacing(.5),fontSize:e.fontSizes.smallBody,textAlign:"right",[e.breakpoints.down(700)]:{display:"none"}})),Ts=d(Kn)(({theme:e})=>({fill:e.palette.background.elevation2,height:"75px",width:"75px",[e.breakpoints.down(500)]:{display:"none"}})),ws=d("div")(({theme:e})=>({margin:e.spacing(0,2),[e.breakpoints.down(500)]:{display:"none"}})),xs=({environmentMetric:e,disabled:n=!1})=>{const a=Jn();if(!e)return null;const s=e.yes+e.no,o=pn(s,e==null?void 0:e.yes);return!e||e.yes===0&&e.no===0?i(Dt,{children:[i(Rt,{children:[i(It,{style:{color:n?a.palette.text.secondary:void 0},"data-loading":!0,children:[o,"%"]}),i(Ft,{style:{color:n?a.palette.text.secondary:a.palette.text.primary},"data-loading":!0,children:["The feature has been requested ",t("b",{children:"0 times"})," and exposed",t("b",{children:" 0 times"})," in the last hour"]})]}),t(Ts,{style:{transform:"scale(1.1)"},"data-loading":!0})]}):i(Dt,{children:[i(Rt,{children:[i(It,{children:[o,"%"]}),i(Ft,{children:["The feature has been requested"," ",i("b",{children:[t(Me,{value:s})," times"]})," ","and exposed"," ",i("b",{children:[t(Me,{value:e.yes})," ","times"]})," ","in the last hour"]})]}),t(ws,{"data-loading":!0,children:t(Qn,{percentage:o,size:"3rem"})})]})},Qe=({strategy:e})=>{const n=Gt(e.name);return t(Q,{title:Ae(e.name)+(e.title?` - ${e.title}`:""),arrow:!0,children:t(Es,{children:t(n,{})})})},Es=d("div")(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"center",color:e.palette.action.disabled,"& svg":{width:e.spacing(2.5),height:e.spacing(2.5)}})),kt=d("ul")(()=>({all:"unset",display:"flex",alignItems:"center",alignContent:"center"})),Xe=d("li")(()=>({all:"unset",minWidth:30,textAlign:"center"})),As=d("div")(({theme:e})=>({display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(1)})),Pe=5,Ds=({strategies:e})=>e!=null&&e.length?e.length>Pe+1?i(kt,{"aria-label":"Feature strategies",children:[e.slice(0,Pe).map(n=>t(Xe,{children:t(Qe,{strategy:n})},n.id)),i(Xn,{tooltip:e.slice(Pe).map(n=>t(Xe,{children:i(As,{children:[t(Qe,{strategy:n})," ",Ae(n.name)+(n.title?` - ${n.title}`:"")]})},n.id)),children:["(+",e.length-Pe,")"]})]}):t(kt,{"aria-label":"Feature strategies",children:e.map(n=>t(Xe,{children:t(Qe,{strategy:n})},n.id))}):null,Rs=d("div",{shouldForwardProp:e=>e!=="enabled"})(({theme:e,enabled:n})=>({borderRadius:e.shape.borderRadiusLarge,marginBottom:e.spacing(2),backgroundColor:n?e.palette.background.paper:e.palette.envAccordion.disabled})),Is=d(Zn)({boxShadow:"none",background:"none"}),Fs=d(ea)(({theme:e})=>({boxShadow:"none",padding:e.spacing(2,4),[e.breakpoints.down(400)]:{padding:e.spacing(1,2)}})),ks=d(ta,{shouldForwardProp:e=>e!=="enabled"})(({theme:e})=>({padding:e.spacing(3),background:e.palette.envAccordion.expanded,borderBottomLeftRadius:e.shape.borderRadiusLarge,borderBottomRightRadius:e.shape.borderRadiusLarge,boxShadow:"inset 0px 2px 4px rgba(32, 32, 33, 0.05)",[e.breakpoints.down("md")]:{padding:e.spacing(2,1)}})),$s=d(ps)(({theme:e})=>({width:"100%",position:"relative",paddingBottom:e.spacing(2)})),Ps=d("div",{shouldForwardProp:e=>e!=="enabled"})(({theme:e,enabled:n})=>({display:"flex",justifyContent:"center",flexDirection:"column",color:n?e.palette.text.primary:e.palette.text.secondary})),Bs=d("div")(({theme:e})=>({display:"flex",alignItems:"center",[e.breakpoints.down(560)]:{flexDirection:"column",textAlign:"center"}})),Os=d(to)(({theme:e})=>({[e.breakpoints.down(560)]:{marginBottom:"0.5rem"}})),Ms=d(lt)(({theme:e})=>({fontSize:e.fontSizes.bodySize,fontWeight:e.typography.fontWeightMedium,[e.breakpoints.down(560)]:{textAlign:"center"}})),_s=d("div")(({theme:e})=>({display:"flex",alignItems:"center",marginTop:e.spacing(2),gap:e.spacing(2),flexWrap:"wrap",[e.breakpoints.down(560)]:{flexDirection:"column"}})),js=({env:e})=>{var p;const n=D("projectId"),a=D("featureId"),{metrics:s}=Eo(n,a),{feature:o}=z(n,a),{value:r}=Yt(),l=Do(o==null?void 0:o.environments,s).find(g=>g.environment===e.name),u=o==null?void 0:o.environments.find(g=>g.name===e.name);return t(x,{condition:!new Set(r.hiddenEnvironments).has(e.name),show:t(Rs,{enabled:e.enabled,children:i(Is,{TransitionProps:{mountOnEnter:!0},"data-testid":`${na}_${e.name}`,className:`environment-accordion ${e.enabled?"":"accordion-disabled"}`,children:[i(Fs,{expandIcon:t(aa,{titleAccess:"Toggle"}),children:[i(Ps,{"data-loading":!0,enabled:e.enabled,children:[i(Bs,{children:[t(Os,{enabled:e.enabled}),t("div",{children:t(Ms,{text:e.name,maxWidth:"100",maxLength:15})}),t(x,{condition:!e.enabled,show:t(ve,{color:"neutral",sx:{ml:1},children:"Disabled"})})]}),i(_s,{children:[t(ot,{label:"Add strategy",projectId:n,featureId:a,environmentId:e.name,variant:"outlined",size:"small"}),t(Ds,{strategies:u==null?void 0:u.strategies})]})]}),t(xs,{environmentMetric:l,disabled:!e.enabled})]}),i(ks,{enabled:e.enabled,children:[t($s,{featureEnvironment:u,isDisabled:!e.enabled,otherEnvironments:o==null?void 0:o.environments.map(({name:g})=>g).filter(g=>g!==e.name)}),t(x,{condition:(((p=u==null?void 0:u.strategies)==null?void 0:p.length)||0)>0,show:i(M,{children:[t(Y,{sx:{display:"flex",justifyContent:"center",py:1},children:t(ot,{label:"Add strategy",projectId:n,featureId:a,environmentId:e.name})}),t(vs,{environmentMetric:l})]})})]})]})})})},Ls=()=>{const e=D("projectId"),n=D("featureId"),{feature:a}=z(e,n);if(!a)return null;const{environments:s}=a;return t(M,{children:s==null?void 0:s.map(o=>t(js,{env:o},o.name))})},Vs=e=>{const{makeRequest:n,createRequest:a,errors:s,loading:o}=oa({propagateErrors:!0}),{setToastData:r,setToastApiError:c}=G(),l=async(h,m)=>{const b=a(`/api/admin/projects/${e}/features/${h}/dependencies`,{method:"POST",body:JSON.stringify(m)});try{await n(b.caller,b.id),r({title:"Dependency added",type:"success"})}catch(S){c(L(S))}},u=async(h,m)=>{const b=a(`/api/admin/projects/${e}/features/${h}/dependencies/${m}`,{method:"DELETE"});try{await n(b.caller,b.id),r({title:"Dependency removed",type:"success"})}catch(S){c(L(S))}},p=async h=>{const m=a(`/api/admin/projects/${e}/features/${h}/dependencies`,{method:"DELETE"});try{await n(m.caller,m.id),r({title:"Dependencies removed",type:"success"})}catch(b){c(L(b))}},g=[a,n,r,L];return{addDependency:f.useCallback(l,g),removeDependency:f.useCallback(u,g),removeDependencies:f.useCallback(p,g),errors:s,loading:o}},zs=(e,n,a={})=>{const s=ye(`/api/admin/projects/${e}/features/${n}/parents`),{data:o,error:r,mutate:c}=_e(s,Ns,a);return{parentOptions:o,error:r,loading:!r&&!o}},Ns=async e=>await(await fetch(e).then(xe("Parent Options"))).json(),Ws=d(Kt)(({theme:e})=>({marginTop:e.spacing(2),marginBottom:e.spacing(1.5)})),Se={key:"none (remove dependency)",label:"none (remove dependency)"},qs=({project:e,featureId:n,showDependencyDialogue:a,onClose:s})=>{const[o,r]=f.useState(Se.key),{addDependency:c,removeDependencies:l}=Vs(e),{parentOptions:u,loading:p}=zs(e,n),g=u?[Se,...u.map(h=>({key:h,label:h}))]:[Se];return t(ne,{open:a,title:"Add parent feature dependency",onClose:s,onClick:async()=>{o===Se.key?await l(n):await c(n,{feature:o}),s()},primaryButtonText:o===Se.key?"Remove":"Add",secondaryButtonText:"Cancel",disabledPrimaryButton:p,children:i(Y,{children:["You feature will be evaluated only when the selected parent feature is enabled in the same environment.",t("br",{}),t("br",{}),t(q,{children:"What feature do you want to depend on?"}),t(Ws,{fullWidth:!0,options:g,value:o,onChange:r})]})})},Hs=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",justifyItems:"center",padding:e.spacing(3),fontSize:e.fontSizes.smallBody})),$t=d("span")(({theme:e})=>({color:e.palette.text.secondary,marginRight:e.spacing(1)})),Pt=d("div")({display:"flex",flexDirection:"row",justifyContent:"space-between"}),Bt=d("div")(({theme:e})=>({justifyContent:"center",paddingTop:e.spacing(.75)})),Us=({feature:e,header:n})=>{const{locationSettings:a}=Jt(),{uiConfig:s}=ut(),o=sa("dependentFeatures"),r=!!s.flags.lastSeenByEnvironment,[c,l]=f.useState(!1);return i(Hs,{children:[n,i(Pt,{children:[i(Bt,{children:[t($t,{children:"Created at:"}),t("span",{children:ra(Qt(e.createdAt),a.locale)})]}),r&&t(ia,{featureLastSeen:e.lastSeenAt,environments:e.environments,sx:{pt:0}})]}),t(x,{condition:o&&!!e.project,show:t(Pt,{children:i(Bt,{children:[t($t,{children:"Dependency:"}),t(de,{startIcon:t(Xt,{}),onClick:()=>{l(!0)},children:"Add parent feature"})]})})}),t(x,{condition:o&&!!e.project,show:t(qs,{project:e.project,featureId:e.name,onClose:()=>l(!1),showDependencyDialogue:o&&c})})]})},Gs=d(it,{shouldForwardProp:e=>e!=="visibilityOff"})(({theme:e,visibilityOff:n})=>({marginLeft:"auto",marginRight:e.spacing(-1),color:n?e.palette.action.active:e.palette.action.focus,"&:hover":{color:e.palette.action.active}})),Ys=({environment:e,hiddenEnvironments:n,setHiddenEnvironments:a})=>t(Gs,{onClick:()=>{a(e.name)},visibilityOff:n.has(e.name),children:t(x,{condition:n.has(e.name),show:t(ca,{}),elseShow:t(la,{})})}),Ks=d("div")(({theme:e})=>({marginLeft:e.spacing(-1.5),"&:not(:last-of-type)":{marginBottom:e.spacing(2)},display:"flex",alignItems:"center"})),Js=d("label")(()=>({display:"inline-flex",alignItems:"center",cursor:"pointer"})),Qs=({environment:e,callback:n,showInfoBox:a,children:s,hiddenEnvironments:o,setHiddenEnvironments:r})=>{const{name:c,enabled:l}=e,u=D("projectId"),p=D("featureId"),{feature:g,refetchFeature:h}=z(u,p),m=i(M,{children:[" ",i("span",{"data-loading":!0,children:[l?"enabled":"disabled"," in"]})," ",t(lt,{text:c,maxWidth:"120",maxLength:15})]}),b=()=>{h(),n&&n()};return i(Ks,{children:[i(Js,{children:[t(no,{featureId:g.name,projectId:u,environmentName:e.name,onToggle:b,onError:a,value:l}),s??m]}),t(Ys,{environment:e,hiddenEnvironments:o,setHiddenEnvironments:r})]})},Xs=d("div")(({theme:e})=>({padding:e.spacing(3)})),Zs=d("div")(()=>({display:"flex",flexDirection:"column"})),er=d("p")(({theme:e})=>({fontSize:e.fontSizes.bodySize})),tr=d("p")(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary,display:"flex",alignItems:"center"})),Ot=d("span")(({theme:e})=>({padding:e.spacing(0,.5),"::after":{content:'"-"'}})),nr=d(pt)(()=>({"&:hover, &:focus":{textDecoration:"underline"}})),ar=({feature:e,header:n,hiddenEnvironments:a,setHiddenEnvironments:s})=>{const[o,r]=f.useState(!1),[c,l]=f.useState(""),u=e.environments.some(p=>{var g;return p.enabled&&((g=p.variants)==null?void 0:g.length)});return i(Xs,{"data-testid":"feature-toggle-status",children:[n,e.environments.map(p=>{const g=p.strategies.length===1?"1 strategy":`${p.strategies.length} strategies`,h=p.variants??[],m=h.length>0&&i(M,{children:[t(Ot,{}),t(Q,{title:"View variants",arrow:!0,describeChild:!0,children:t(nr,{component:K,to:`/projects/${e.project}/features/${e.name}/variants`,underline:"hover",children:h.length===1?"1 variant":`${h.length} variants`})})]}),b=p.enabled&&h.length===0&&u;return t(Qs,{environment:p,hiddenEnvironments:a,setHiddenEnvironments:s,showInfoBox:()=>{l(p.name),r(!0)},children:i(Zs,{children:[t(er,{children:p.name}),i(tr,{children:[g,m,t(x,{condition:b,show:i(M,{children:[t(Ot,{}),t(ao,{})]})})]})]})},p.name)}),t(oo,{open:o,onClose:()=>r(!1),projectId:e.project,featureId:e.name,environmentName:c})]})},fn=(e,n={})=>{const a=async()=>{const p=ye(`api/admin/features/${e}/tags`);return(await fetch(p,{method:"GET"}).then(xe("Tags"))).json()},s=`api/admin/features/${e}/tags`,{data:o,error:r}=da(!!e,{tags:[]},s,a,n),[c,l]=f.useState(!r&&!o),u=()=>{rt(s)};return f.useEffect(()=>{l(!r&&!o)},[o,r]),{tags:(o==null?void 0:o.tags)||[],error:r,loading:c,refetch:u}},or=d("section")(({theme:e})=>({"& > *":{margin:e.spacing(1,0)}})),Ze=e=>e.map(n=>({title:n.value})),Mt=(e,n)=>e.map(a=>({value:a.title,type:n})),mn=({open:e,setOpen:n})=>{const{tagTypes:a}=ua(),s=D("featureId"),{createTag:o}=so(),{updateFeatureTags:r,loading:c}=Ve(),{tags:l,refetch:u,loading:p}=fn(s),{setToastData:g}=G(),h=a&&a.length>0?a[0]:{name:"simple",description:"Simple tag to get you started",icon:""},[m,b]=f.useState(h),S=c||p,[E,y]=f.useState(0),{trackEvent:C}=Le(),[k,B]=f.useState(Ze(l.filter(T=>T.type===m.name))),{tags:_,refetch:V}=ro(m.name),v=f.useMemo(()=>Ze(_),[_]);f.useEffect(()=>{l&&m&&B(Ze(l.filter(T=>T.type===m.name)))},[JSON.stringify(l),m]);const R=()=>{n(!1),B([])};function $(T,I){const O=T.filter(j=>j.type===m.name).filter(j=>!I.find(N=>j.value===N.value&&j.type===N.type)),W=I.filter(j=>j.type===m.name).filter(j=>!T.find(N=>j.value===N.value&&j.type===N.type));return y(O.length+W.length),{added:O,removed:W}}const H=T=>T.filter(I=>!I.title.startsWith("Create")),Z=async(T,I)=>{try{await r(s,{addedTags:T,removedTags:I}),await u()}catch(O){const W=L(O);g({type:"error",title:"Failed to add tag",text:W,confetti:!1})}},oe=(T,I)=>{let O="We successfully";return T>0&&(O=O.concat(` added ${T} new tag${T>1?"s":""}`)),T>0&&I>0&&(O=O.concat(" and ")),I>0&&(O=O.concat(` removed ${I} tag${I>1?"s":""}`)),O},ee=async T=>{T.preventDefault();const I=Mt(H(k),m.name),{added:O,removed:W}=$(I,l);E>0&&(await Z(O,W),E>1&&C("suggest_tags",{props:{eventType:"multiple_tags_added"}}),E>0&&g({type:"success",title:`Updated tag${O.length>1?"s":""} to toggle`,text:oe(O.length,W.length),confetti:!0})),y(0),B([]),n(!1)},w=(T,I)=>{I!=null&&typeof I!="string"&&(T.preventDefault(),b(I),B([]),y(0))},P=(T,I,O)=>{const W=pa(I);O==="selectOption"&&I.forEach((N,Ie)=>{if(typeof N!="string"&&N.inputValue&&N.inputValue!==""){const Fe={value:N.inputValue,type:m.name};o(Fe).then(()=>{C("suggest_tags",{props:{eventType:"tag_created"}}),V()}),N.title=N.inputValue,N.inputValue="",W[Ie]=N}});const j=Mt(H(W),m.name);$(j,l),B(W)},F="add-tag-form";return t(ne,{open:e,secondaryButtonText:"Cancel",primaryButtonText:"Save tags",title:"Update tags to feature toggle",onClick:ee,disabledPrimaryButton:S||E===0,onClose:R,formId:F,children:i(M,{children:[t(q,{paragraph:!0,sx:{marginBottom:T=>T.spacing(2.5)},children:"Tags allow you to group features together"}),t("form",{id:F,onSubmit:ee,children:i(or,{children:[t(io,{options:a,value:m,onChange:w}),t(co,{options:v,existingTags:l,tagType:m,selectedOptions:k,onChange:P})]})})]})})},sr=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",padding:e.spacing(3)})),rr=d("div")(({theme:e})=>({display:"flex",gap:e.spacing(1),flexWrap:"wrap"})),ir=d(Zt)(({theme:e})=>({fontSize:e.fontSizes.smallBody})),cr=d(Te)(({theme:e})=>({margin:e.spacing(3),borderStyle:"dashed"})),lr=d(de)(({theme:e})=>({maxWidth:e.spacing(20),alignSelf:"center"})),dr=({feature:e,header:n})=>{const{tags:a,refetch:s}=fn(e.name),{deleteTagFromFeature:o}=Ve(),[r,c]=f.useState(!1),[l,u]=f.useState(!1),[p,g]=f.useState(),{setToastData:h,setToastApiError:m}=G(),{hasAccess:b}=f.useContext(ct),S=b(he,e.project),E=async()=>{if(p)try{await o(e.name,p.type,p.value),s(),h({type:"success",title:"Tag deleted",text:"Successfully deleted tag"})}catch(y){m(L(y))}};return i(sr,{children:[n,t(rr,{children:a.map(y=>{const C=`${y.type}:${y.value}`;return t(ir,{label:C,deleteIcon:t(ga,{titleAccess:"Remove"}),onDelete:S?()=>{u(!0),g(y)}:void 0},C)})}),t(x,{condition:S,show:i(M,{children:[t(x,{condition:a.length>0,show:t(cr,{})}),t(lr,{"data-loading":!0,variant:"outlined",startIcon:t(Xt,{}),onClick:()=>c(!0),children:"Add new tag"})]})}),t(mn,{open:r,setOpen:c}),i(ne,{open:l,primaryButtonText:"Delete tag",secondaryButtonText:"Cancel",onClose:()=>{u(!1),g(void 0)},onClick:()=>{u(!1),E(),g(void 0)},title:"Delete tag?",children:["You are about to delete tag:"," ",i("strong",{children:[p==null?void 0:p.type,":",p==null?void 0:p.value]})]})]})},ur=d("div")(({theme:e})=>({position:"sticky",top:e.spacing(2),borderRadius:e.shape.borderRadiusLarge,backgroundColor:e.palette.background.paper,display:"flex",flexDirection:"column",maxWidth:"350px",minWidth:"350px",marginRight:"1rem",marginTop:"1rem",[e.breakpoints.down(1e3)]:{marginBottom:"1rem",width:"100%",maxWidth:"none",minWidth:"auto"}})),et=d("h3")(({theme:e})=>({display:"flex",gap:e.spacing(1),alignItems:"center",fontSize:e.fontSizes.bodySize,margin:0,marginBottom:e.spacing(3),"& > :last-child":{position:"relative",top:1}})),pr=({hiddenEnvironments:e,setHiddenEnvironments:n})=>{const a=D("projectId"),s=D("featureId"),{feature:o}=z(a,s);return i(ur,{children:[t(ar,{header:i(et,{"data-loading":!0,children:["Enabled in environments (",o.environments.filter(({enabled:r})=>r).length,")",t(ha,{tooltip:"When a feature is switched off in an environment, it will always return false. When switched on, it will return true or false depending on its strategies.",placement:"top"})]}),feature:o,hiddenEnvironments:e,setHiddenEnvironments:n}),t(Te,{}),t(Us,{header:t(et,{"data-loading":!0,children:"Feature toggle details"}),feature:o}),t(Te,{}),t(dr,{header:t(et,{"data-loading":!0,children:"Tags for this feature toggle"}),feature:o})]})},gr=()=>{const{trackEvent:e}=Le(),{value:n,setValue:a}=Yt(),[s,o]=f.useState(new Set(n.hiddenEnvironments));return{hiddenEnvironments:s,setHiddenEnvironments:c=>{a(l=>{const u=new Set(l.hiddenEnvironments);return u.has(c)?(u.delete(c),e("hidden_environment",{props:{eventType:"environment unhidden"}})):(u.add(c),e("hidden_environment",{props:{eventType:"environment hidden"}})),o(u),{...n,hiddenEnvironments:u}})}}},hr=d("div")(({theme:e})=>({display:"flex",width:"100%",[e.breakpoints.down(1e3)]:{flexDirection:"column"}})),fr=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",width:"calc(100% - (350px + 1rem))",[e.breakpoints.down(1e3)]:{width:"100%"}})),mr=()=>{const e=ce(),n=D("projectId"),a=D("featureId"),s=Ht(n,a),{hiddenEnvironments:o,setHiddenEnvironments:r}=gr(),c=()=>e(s);return en(a),i(hr,{children:[i("div",{children:[t(xo,{}),t(pr,{hiddenEnvironments:o,setHiddenEnvironments:r})]}),t(fr,{children:t(Ls,{})}),i(tn,{children:[t(se,{path:"strategies/create",element:t(at,{label:"Create feature strategy",onClose:c,open:!0,children:t(lo,{})})}),t(se,{path:"strategies/edit",element:t(at,{label:"Edit feature strategy",onClose:c,open:!0,children:t(fa,{})})})]})]})},yr=d("div")(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between","& > div":{display:"flex",alignItems:"center"},marginTop:e.spacing(-3.5),marginBottom:e.spacing(2),backgroundColor:e.palette.background.default,paddingTop:e.spacing(2),paddingBottom:e.spacing(2),position:"sticky",top:0,zIndex:2})),Sr=d(nn,{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.neutral.border:e.palette.primary.main})),br=d("span",{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.text.secondary:e.palette.text.primary,marginLeft:e.spacing(1.25),fontSize:e.fontSizes.mainHeader,fontWeight:e.fontWeight.bold})),Cr=d("form")(()=>({display:"flex",flexDirection:"column",height:"100%"})),vr=d(le)(({theme:e})=>({marginBottom:e.spacing(2)})),Tr=d(le)(({theme:e})=>({marginTop:e.spacing(4)})),wr=d("div")({display:"flex",flexDirection:"column"}),xr=d("div")(({theme:e})=>({display:"flex",alignItems:"center",gap:e.spacing(1.5),marginBottom:e.spacing(.5)})),_t=d("p")(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary,marginBottom:e.spacing(1.5)})),Er=d(Te)(({theme:e})=>({margin:e.spacing(4,0)})),Ar=d(ma)(({theme:e})=>({minWidth:e.spacing(20),width:"100%"})),Dr=d("div")(({theme:e})=>({marginTop:"auto",paddingTop:e.spacing(4),display:"flex",justifyContent:"flex-end"})),Rr=d(de)(({theme:e})=>({marginLeft:e.spacing(3)})),Ir=f.memo(ya),Fr=({environment:e,open:n,setOpen:a,getApiPayload:s,getCrPayload:o,onConfirm:r})=>{const c=D("projectId"),l=D("featureId"),{uiConfig:u}=ut(),{context:p}=Sa(),{defaultStickiness:g,loading:h}=ba(c),{isChangeRequestConfigured:m}=ae(c),{data:b}=ie(c),{changeRequestInReviewOrApproved:S,alert:E}=Ta(b),y=(e==null?void 0:e.variants)||[],[C,k]=f.useState([]),[B,_]=f.useState();f.useEffect(()=>{h||k(y.length?y.map(A=>({...A,isValid:!0,new:!1,id:We()})):[{name:"",weightType:ft.VARIABLE,weight:0,overrides:[],stickiness:(C==null?void 0:C.length)>0?C[0].stickiness:g,new:!0,isValid:!1,id:We()}])},[n,h]);const V=(A,U)=>{k(ue=>mt(ue.map(ke=>ke.id===U?A:ke),1e3))},v=()=>{const A=We();k(U=>[...U,{name:"",weightType:ft.VARIABLE,weight:0,overrides:[],stickiness:(U==null?void 0:U.length)>0?U[0].stickiness:g,new:!0,isValid:!1,id:A}]),_(A)};f.useEffect(()=>{if(B){const A=document.getElementById(`variant-name-input-${B}`);A==null||A.scrollIntoView({behavior:"smooth",block:"center"}),A==null||A.focus({preventScroll:!0}),_(void 0)}},[B]);const R=C.map(({new:A,isValid:U,id:ue,...ke})=>ke),$=s(y,R),H=o(R),Z=async A=>{A.preventDefault(),r(R)},oe=()=>F?`curl --location --request POST '${u.unleashUrl}/api/admin/projects/${c}/environments/${e==null?void 0:e.name}/change-requests' \\
1
+ import{c as Wt,j as t,s as d,aE as D,aF as z,aG as Sn,d as i,aH as bn,C as x,aI as X,aJ as he,aK as K,aL as be,aM as Cn,aN as _e,r as f,aO as ye,aP as xe,aQ as rt,aR as vn,aS as Tn,aT as wn,aU as xn,f as G,aV as Ee,aW as ie,h as L,T as q,aX as Ae,aY as De,aZ as En,a_ as ae,a$ as fe,b0 as Q,t as it,b1 as An,b2 as Dn,b3 as Re,M as me,b4 as Oe,b5 as qt,b6 as Ce,b7 as ne,av as ce,E as le,b8 as Ht,b9 as Rn,ba as In,bb as Fn,bc as kn,bd as nt,be as $n,bf as Pn,y as M,B as Y,bg as Bn,bh as On,bi as Mn,bj as _n,bk as jn,bl as Ln,bm as Vn,bn as zn,bo as Nn,bp as Wn,G as qn,b as Ut,a9 as je,x as ve,bq as ct,i as de,N as lt,br as Gt,ag as Le,V as Hn,bs as dt,bt as ge,bu as re,bv as Un,Z as Gn,bw as Yn,bx as te,by as Kn,bz as Jn,R as Qn,bA as Xn,bB as Zn,bC as ea,bD as ta,bE as Yt,bF as na,bG as aa,u as oa,bH as Kt,bI as Jt,au as ut,bJ as sa,bK as ra,bL as Qt,bM as ia,bN as Xt,bO as ca,bP as la,bQ as pt,bR as da,bS as ua,bT as Ve,bU as pa,L as Zt,D as Te,bV as ga,bW as ha,bX as en,bY as tn,bZ as se,b_ as at,b$ as fa,c0 as nn,c1 as ma,c2 as ya,g as Sa,c3 as ba,c4 as We,c5 as ft,as as Ca,ay as va,c6 as pe,c7 as mt,c8 as Ta,c9 as wa,m as xa,aq as gt,ar as Ea,al as yt,ca as Aa,cb as Da,cc as Ra,cd as St,a8 as an,ce as Ia,a0 as qe,ac as Fa,a2 as ka,a3 as $a,a4 as Pa,a5 as Ba,a6 as Oa,a7 as Ma,cf as _a,cg as ja,ch as bt,ci as La,cj as on,ck as Va,q as za,cl as Ct,cm as Na,cn as Wa,co as qa,cp as Ha,cq as Ua,cr as Ga,ai as Ya,cs as Ka,ct as Ja,cu as Qa,cv as Xa,cw as Za,cx as eo}from"./index-83ae2eb3.js";import{C as sn,f as rn,E as to,F as no,V as ao,a as oo,u as so,b as ro,T as io,c as co,d as lo,W as uo,e as po,g as go}from"./FeatureArchiveDialog-c613a9be.js";import{S as ho}from"./StrategyItemContainer-4f546cf4.js";const fo=Wt(t("path",{d:"m20.54 5.23-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5 6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z"}),"Archive"),mo=Wt(t("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"}),"Assessment"),yo=d("div")(({theme:e})=>({borderRadius:e.spacing(1.5),backgroundColor:e.palette.background.paper,padding:e.spacing(4)})),So=()=>{const e=D("projectId"),n=D("featureId"),{feature:a}=z(e,n);return a.name?t(yo,{children:t(Sn,{title:"Event log",feature:n,displayInline:!0})}):null},bo=d("div")(({theme:e})=>({borderRadius:e.shape.borderRadiusLarge,color:e.palette.primary.contrastText,backgroundColor:e.palette.background.alternative,display:"flex",flexDirection:"column",maxWidth:"350px",minWidth:"350px",marginRight:e.spacing(2),[e.breakpoints.down(1e3)]:{width:"100%",maxWidth:"none",minWidth:"auto"}})),Co=d("div")({padding:"1.5rem 1.5rem 0 1.5rem"}),vo=d("div")({display:"flex",alignItems:"center"}),To=d("h2")(({theme:e})=>({fontSize:e.fontSizes.bodySize,fontWeight:"normal",margin:0})),wo=d("div")(({theme:e})=>({margin:e.spacing(2,0),display:"flex",flexDirection:"column"})),vt=d("span")(({theme:e})=>({margin:e.spacing(1,0),fontSize:e.fontSizes.bodySize})),Tt=d("div")(({theme:e})=>({display:"flex",alignItems:"center",color:e.palette.primary.contrastText})),xo=()=>{const e=D("projectId"),n=D("featureId"),{feature:a}=z(e,n),{project:s,description:o,type:r}=a,c=Cn(r);return t(bo,{children:i(Co,{children:[i(vo,{"data-loading":!0,children:[t(c,{sx:l=>({marginRight:l.spacing(2),height:"40px",width:"40px",fill:l.palette.primary.contrastText})})," ",i(To,{children:[bn(r||"")," toggle"]})]}),i(wo,{children:[i(vt,{"data-loading":!0,children:["Project: ",s]}),t(x,{condition:!!o,show:i(vt,{"data-loading":!0,children:[t("div",{children:"Description:"}),i(Tt,{children:[t("p",{children:o}),t(X,{projectId:e,permission:he,component:K,to:`/projects/${e}/features/${n}/settings`,tooltipProps:{title:"Edit description"},children:t(be,{sx:l=>({color:l.palette.primary.contrastText})})})]})]}),elseShow:t("span",{"data-loading":!0,children:i(Tt,{children:["No description."," ",t(X,{projectId:e,permission:he,component:K,to:`/projects/${e}/features/${n}/settings`,tooltipProps:{title:"Edit description"},children:t(be,{sx:l=>({color:l.palette.primary.contrastText})})})]})})})]})]})})},wt={lastHourUsage:[],seenApplications:[]},Eo=(e,n,a={})=>{const s=async()=>{const g=ye(`api/admin/client-metrics/features/${n}`),h=await fetch(g,{method:"GET"}).then(xe("feature metrics"));return h.ok?h.json():wt},o=`${e}_${n}_metrics`,{data:r,error:c}=_e(o,s,{...a}),[l,u]=f.useState(!c&&!r),p=()=>{rt(o)};return f.useEffect(()=>{u(!c&&!r)},[r,c]),{metrics:r||wt,error:c,loading:l,refetch:p,FEATURE_METRICS_CACHE_KEY:o}},Ao=e=>({yes:0,no:0,environment:e,timestamp:""}),Do=(e,n)=>e.map(a=>n.lastHourUsage.find(o=>o.environment===a.name)||Ao(a.name)),Ro=e=>(n,a,s)=>(s.revalidateOnFocus=!1,s.revalidateIfStale=!1,s.revalidateOnReconnect=!1,e(n,a,s)),Io=vn(_e,Ro),cn=(e,n)=>{const{refetchFeature:a}=z(e,n),s=Tn(e,n),{data:o,error:r,mutate:c}=Io(["useFeatureImmutable",s],()=>wn(s)),l=f.useCallback(async()=>{await c(),await a()},[c,a]);return{feature:(o==null?void 0:o.body)||xn,refetchFeature:l,loading:!r&&!o,status:o==null?void 0:o.status,error:r}},ln=(e,n,a)=>{const{setToastData:s,setToastApiError:o}=G(),{addChange:r}=Ee(),{refetch:c}=ie(e),[l,u]=f.useState({isOpen:!1}),p=f.useCallback((S,E,y)=>{u({featureName:n,environment:S,fromEnvironment:y,strategy:E,isOpen:!0})},[]),g=f.useCallback((S,E,y)=>{u({featureName:n,environment:S,fromEnvironment:y,strategies:E,isOpen:!0})},[]),h=f.useCallback(()=>{u({isOpen:!1})},[]),m=f.useCallback(async()=>{try{await r(e,l.environment,{feature:l.featureName,action:a,payload:l.strategy}),c(),u({isOpen:!1}),s({type:"success",title:"Changes added to the draft!"})}catch(S){o(L(S)),u({isOpen:!1})}},[r]),b=f.useCallback(async()=>{try{await Promise.all(l.strategies.map(S=>r(e,l.environment,{feature:l.featureName,action:a,payload:S}))),c(),u({isOpen:!1}),s({type:"success",title:"Changes added to the draft!"})}catch(S){o(L(S)),u({isOpen:!1})}},[r]);return{onChangeRequestAddStrategy:p,onChangeRequestAddStrategies:g,onChangeRequestAddStrategyClose:h,onChangeRequestAddStrategyConfirm:m,onChangeRequestAddStrategiesConfirm:b,changeRequestDialogDetails:l}},Fo=({payload:e,fromEnvironment:n,environment:a})=>i(q,{children:[i("strong",{children:["Copy ",Ae((e==null?void 0:e.name)||"")," strategy"," "]})," ","from ",n," to ",a]}),ko=({environmentId:e,environments:n,strategy:a})=>{const s=D("projectId"),o=D("featureId"),[r,c]=f.useState(null),l=!!r,{addStrategyToFeature:u}=De(),{setToastData:p,setToastApiError:g}=G(),{refetchFeature:h}=z(s,o),{refetchFeature:m}=cn(s,o),b=()=>{c(null)},S=En(s),{isChangeRequestConfigured:E}=ae(s),{changeRequestDialogDetails:y,onChangeRequestAddStrategyClose:C,onChangeRequestAddStrategy:k,onChangeRequestAddStrategyConfirm:B}=ln(s,o,"addStrategy"),_=async v=>{const{id:R,...$}={...a,targetEnvironment:v};if(E(v)){await k(v,{id:R,...$},e);return}try{await u(s,o,v,a),h(),m(),p({title:"Strategy created",text:`Successfully copied a strategy to ${v}`,type:"success"})}catch(H){g(L(H))}b()},V=n.some(v=>S(fe,v));return i("div",{children:[t(sn,{isOpen:y.isOpen,onClose:C,environment:y==null?void 0:y.environment,onConfirm:B,messageComponent:t(Fo,{fromEnvironment:y.fromEnvironment,payload:y.strategy})}),t(Q,{title:`Copy to another environment${V?"":" (Access denied)"}`,children:t("div",{children:t(it,{size:"large",id:`copy-strategy-icon-menu-${a.id}`,"aria-controls":l?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":l?"true":void 0,onClick:v=>{c(v.currentTarget)},"data-testid":An,disabled:!V,children:t(Dn,{})})})}),t(Re,{id:"basic-menu",anchorEl:r,open:l,onClose:b,MenuListProps:{"aria-labelledby":`copy-strategy-icon-menu-${a.id}`},children:n.map(v=>{const R=S(fe,v);return t(Q,{title:R?"":"You don't have access to add a strategy to this environment",children:t("div",{children:i(me,{onClick:()=>_(v),disabled:!R,children:[t(x,{condition:!R,show:t(Oe,{children:t(qt,{fontSize:"small"})})}),i(Ce,{children:["Copy to ",v]})]})})},v)})})]})},dn=()=>t(le,{severity:"error",children:"Removing the strategy will change which users receive access to the feature."}),$o=({onRemove:e,onClose:n,isOpen:a})=>t(ne,{title:"Are you sure you want to delete this strategy?",open:a,primaryButtonText:"Remove strategy",secondaryButtonText:"Cancel",onClick:e,onClose:n,children:t(dn,{})}),Po=d("div")(({theme:e})=>({marginTop:e.spacing(3),marginBottom:e.spacing(1)})),Bo=({onRemove:e,onClose:n,isOpen:a})=>i(ne,{title:"Suggest changes",open:a,primaryButtonText:"Add suggestion to draft",secondaryButtonText:"Cancel",onClick:e,onClose:n,children:[t(dn,{}),t(Po,{children:t(q,{variant:"body2",color:"text.secondary",children:"Your suggestion:"})}),t(q,{fontWeight:"bold",children:"Remove strategy"})]}),Oo=({projectId:e,featureId:n,environmentId:a,strategyId:s})=>{const{deleteStrategyFromFeature:o}=De(),{setToastData:r,setToastApiError:c}=G(),l=ce(),{refetchFeature:u}=z(e,n);return async g=>{try{g.preventDefault(),await o(e,n,a,s),r({title:"Strategy deleted",type:"success"}),u(),l(Ht(e,n))}catch(h){c(L(h))}}},Mo=({projectId:e,featureId:n,environmentId:a,strategyId:s})=>{const{addChange:o}=Ee(),{refetch:r}=ie(e),{setToastData:c,setToastApiError:l}=G();return async p=>{try{p.preventDefault(),await o(e,a,{action:"deleteStrategy",feature:n,payload:{id:s}}),c({title:"Changes added to the draft!",type:"success"}),await r()}catch(g){l(L(g))}}},_o=({projectId:e,featureId:n,environmentId:a,strategyId:s,text:o,isOpen:r,onClose:c})=>{const{isChangeRequestConfigured:l}=ae(e),u=Oo({featureId:n,projectId:e,strategyId:s,environmentId:a}),p=Mo({featureId:n,projectId:e,strategyId:s,environmentId:a});return l(a)?t(Bo,{isOpen:r,onClose:()=>c(),onRemove:async g=>{await p(g),c()}}):t($o,{isOpen:r,onClose:()=>c(),onRemove:u})},jo=({projectId:e,environmentId:n,featureId:a,strategy:s})=>{const{refetchFeature:o}=z(e,a),{setStrategyDisabledState:r}=De(),{setToastData:c,setToastApiError:l}=G(),u=p=>async()=>{try{await r(e,a,n,s.id,!p),c({title:`Strategy ${p?"enabled":"disabled"}`,type:"success"}),o()}catch(g){l(L(g))}};return{onDisable:u(!1),onEnable:u(!0)}},Lo=({projectId:e,environmentId:n,featureId:a,strategy:s})=>{const{addChange:o}=Ee(),{refetch:r}=ie(e),{setToastData:c,setToastApiError:l}=G(),u=p=>async()=>{try{await o(e,n,{action:"updateStrategy",feature:a,payload:{...s,disabled:!p}}),c({title:"Changes added to the draft!",type:"success"}),await r()}catch(g){l(L(g))}};return{onSuggestDisable:u(!1),onSuggestEnable:u(!0)}},Vo=({isOpen:e,onClose:n,...a})=>{var b;const{projectId:s,environmentId:o}=a,{isChangeRequestConfigured:r}=ae(s),c=r(o),{onSuggestEnable:l,onSuggestDisable:u}=Lo({...a}),{onEnable:p,onDisable:g}=jo({...a}),h=!!((b=a.strategy)!=null&&b.disabled);return t(ne,{title:c?`Add ${h?"enable":"disable"} strategy to change request?`:`Are you sure you want to ${h?"enable":"disable"} this strategy?`,open:e,primaryButtonText:c?"Add to draft":`${h?"Enable":"Disable"} strategy`,secondaryButtonText:"Cancel",onClick:S=>{S.preventDefault(),c?h?l():u():h?p():g(),n()},onClose:()=>n(),children:t(x,{condition:c,show:t(Rn,{environment:o}),elseShow:i(le,{severity:"error",children:[h?"Enabling":"Disabling"," the strategy will change which users receive access to the feature."]})})})};var ht={},zo=Fn;Object.defineProperty(ht,"__esModule",{value:!0});var un=ht.default=void 0,No=zo(In()),Wo=kn,qo=(0,No.default)((0,Wo.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");un=ht.default=qo;const Ho=({projectId:e,strategy:n,featureId:a,environmentId:s})=>{const[o,r]=f.useState(null),[c,l]=f.useState(!1),[u,p]=f.useState(!1),g=!!o,h=E=>{r(E.currentTarget)},m=E=>{r(null),E.stopPropagation()},b=nt($n,e,s),S=nt(Pn,e,s);return i(M,{children:[t(Y,{sx:{display:"flex",alignItems:"center",textAlign:"center"},children:t(Q,{title:"More actions",children:t(it,{onClick:h,size:"small","aria-controls":g?"actions-menu":void 0,"aria-haspopup":"true","aria-expanded":g?"true":void 0,"data-testid":Bn,children:t(On,{sx:{width:32,height:32}})})})}),i(Re,{anchorEl:o,id:"actions-menu",open:g,onClose:m,onClick:m,transformOrigin:{horizontal:"right",vertical:"top"},anchorOrigin:{horizontal:"right",vertical:"bottom"},"data-testid":Mn,children:[t(Q,{title:n.disabled?"Enable strategy":"Disable strategy",arrow:!0,placement:"left",children:i(me,{disabled:!b,onClick:()=>l(!0),children:[t(Oe,{children:n.disabled?t(_n,{}):t(jn,{})}),t(Ce,{children:n.disabled?"Enable":"Disable"})]})}),t(Q,{title:"Remove strategy",arrow:!0,placement:"left",children:i(me,{disabled:!S,onClick:()=>p(!0),"data-testid":Ln,children:[t(Oe,{children:t(un,{})}),t(Ce,{children:"Remove"})]})})]}),t(Vo,{isOpen:c,onClose:()=>l(!1),projectId:e,featureId:a,environmentId:s,strategy:n}),t(_o,{isOpen:u,onClose:()=>p(!1),projectId:e,featureId:a,environmentId:s,strategyId:n.id})]})},Uo=({environmentId:e,strategy:n,onDragStart:a,onDragEnd:s,otherEnvironments:o,orderNumber:r,headerChildren:c})=>{const l=D("projectId"),u=D("featureId"),p=Vn(l,u,e,n.id);return i(ho,{strategy:n,onDragStart:a,onDragEnd:s,orderNumber:r,actions:i(M,{children:[c,t(x,{condition:!!(o&&(o==null?void 0:o.length)>0),show:()=>t(ko,{environmentId:e,environments:o,strategy:n})}),t(X,{permission:zn,environmentId:e,projectId:l,component:K,to:p,tooltipProps:{title:"Edit strategy"},"data-testid":`STRATEGY_EDIT-${n.name}`,children:t(be,{})}),t(Ho,{projectId:l,featureId:u,environmentId:e,strategy:n})]}),children:[t(Nn,{strategy:n}),n.variants?t(Wn,{variants:n.variants}):null]})},Go=(e,n,a,s)=>{const{data:o}=ie(e),r=o==null?void 0:o.find(u=>u.environment===a),c=r==null?void 0:r.features.find(u=>u.name===n);return c==null?void 0:c.changes.find(u=>u.action==="updateStrategy"||u.action==="deleteStrategy"?u.payload.id===s:!1)},Yo=({strategy:e,index:n,environmentName:a,otherEnvironments:s,isDragging:o,onDragStartRef:r,onDragOver:c,onDragEnd:l})=>{const u=D("projectId"),p=D("featureId"),g=f.useRef(null),h=Go(u,p,a,e.id);return i(Y,{ref:g,onDragOver:c(g,n),sx:{opacity:o?"0.5":"1"},children:[t(x,{condition:n>0,show:t(qn,{text:"OR"})}),t(Uo,{strategy:e,environmentId:a,otherEnvironments:s,onDragStart:r(g,n),onDragEnd:l,orderNumber:n+1,headerChildren:t(Ko,{change:h})})]},e.id)},Ko=({change:e})=>{const n=Ut();return je(n.breakpoints.down("sm"))?null:i(Y,{sx:{mr:1.5},children:[t(x,{condition:(e==null?void 0:e.action)==="updateStrategy",show:t(ve,{color:"warning",children:"Modified in draft"})}),t(x,{condition:(e==null?void 0:e.action)==="deleteStrategy",show:t(ve,{color:"error",children:"Deleted in draft"})})]})},Jo=({environmentId:e,environments:n,onClick:a})=>{const s=D("projectId"),[o,r]=f.useState(null),c=!!o,{hasAccess:l}=f.useContext(ct),u=n.some(p=>l(fe,s,p));return i("div",{children:[t(Q,{title:u?"":"(Access denied)",children:t("div",{children:t(de,{id:`copy-all-strategies-${e}`,"aria-controls":c?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":c?"true":void 0,onClick:p=>{r(p.currentTarget)},disabled:!u,variant:"outlined",children:"Copy from another environment"})})}),t(Re,{id:"basic-menu",anchorEl:o,open:c,onClose:()=>{r(null)},MenuListProps:{"aria-labelledby":`copy-all-strategies-${e}`},children:n.map(p=>{const g=l(fe,s,p);return t(Q,{title:g?"":"You don't have access to add a strategy to this environment",children:t("div",{children:i(me,{onClick:()=>a(p),disabled:!g,children:[t(x,{condition:!g,show:t(Oe,{children:t(qt,{fontSize:"small"})})}),i(Ce,{children:["Copy from ",p]})]})})},p)})})]})},Qo=d("div")(({theme:e})=>({"&>*:nth-child(n)":{margin:e.spacing(1,0)}})),Xo=({payload:e,fromEnvironment:n,environment:a})=>i(Qo,{children:[t(q,{children:t("strong",{children:"Copy: "})}),e==null?void 0:e.map(s=>i(q,{children:[i("strong",{children:[Ae((s==null?void 0:s.name)||"")," strategy"," "]})," "]})),i(q,{children:["from ",n," to ",a]})]}),Zo=d("div")(({theme:e})=>({width:e.spacing(4),height:"auto","& > svg":{fill:e.palette.primary.main},"& > div":{height:e.spacing(2),marginLeft:"-.75rem",color:e.palette.primary.main}})),es=d("div")(({theme:e})=>({fontSize:e.fontSizes.smallBody})),ts=d(lt)(({theme:e})=>({fontWeight:e.fontWeight.bold})),ns=d(K)(({theme:e})=>({display:"grid",gridTemplateColumns:"3rem 1fr",width:"20rem",padding:e.spacing(2),color:"inherit",textDecoration:"inherit",lineHeight:1.25,borderWidth:"1px",borderStyle:"solid",borderColor:e.palette.divider,borderRadius:e.spacing(1),"&:hover, &:focus":{borderColor:e.palette.primary.main}})),He=({projectId:e,featureId:n,environmentId:a,strategy:s,defaultStrategy:o})=>{const r=Gt(s.name),c=Ae(s.name),{trackEvent:l}=Le(),u=rn(e,n,a,s.name,o);return i(ns,{to:u,onClick:()=>{l("strategy-add",{props:{buttonTitle:s.displayName||c}})},children:[t(Zo,{children:t(r,{})}),i("div",{children:[t(ts,{text:s.displayName||c,maxWidth:"200",maxLength:25}),t(es,{children:s.description})]})]})},Ue=d(q)(({theme:e})=>({fontSize:e.fontSizes.smallBody,padding:e.spacing(1,2)})),as=({projectId:e,featureId:n,environmentId:a})=>{const{strategies:s}=Hn(),o=s.filter(l=>!l.deprecated&&!l.editable),r=s.filter(l=>!l.deprecated&&l.editable),c={name:"flexibleRollout",displayName:"Default strategy",description:"This is the default strategy defined for this environment in the project"};return i(dt,{dense:!0,children:[i(M,{children:[i(Ue,{color:"textSecondary",children:[a," environment default strategy"]}),t(ge,{children:t(He,{projectId:e,featureId:n,environmentId:a,strategy:c,defaultStrategy:!0})},c.name)]}),t(Ue,{color:"textSecondary",children:"Predefined strategy types"}),o.map(l=>t(ge,{children:t(He,{projectId:e,featureId:n,environmentId:a,strategy:l})},l.name)),t(x,{condition:r.length>0,show:i(M,{children:[t(Ue,{color:"textSecondary",children:"Custom strategies"}),r.map(l=>t(ge,{children:t(He,{projectId:e,featureId:n,environmentId:a,strategy:l})},l.name))]})})]})},os=d("div")({flexShrink:0}),ss=d(re)(({theme:e})=>({minWidth:0,width:e.spacing(4.5),alignItems:"center",justifyContent:"center",align:"center",flexDirection:"column",marginLeft:e.spacing(1)})),ot=({label:e,projectId:n,featureId:a,environmentId:s,variant:o,size:r,matchWidth:c})=>{const[l,u]=f.useState(),p=ce(),{trackEvent:g}=Le(),h=!!l,m=h?"FeatureStrategyMenuPopover":void 0,b=()=>{u(void 0)},S=C=>{g("strategy-add",{props:{buttonTitle:e}}),p(y)},E=C=>{u(C.currentTarget)},y=rn(n,a,s,"flexibleRollout",!0);return i(os,{onClick:C=>C.stopPropagation(),children:[t(re,{permission:fe,projectId:n,environmentId:s,onClick:S,"aria-labelledby":m,variant:o,size:r,sx:{minWidth:c?"282px":"auto"},children:e}),t(ss,{permission:fe,projectId:n,environmentId:s,onClick:E,"aria-labelledby":m,variant:"outlined",size:r,hideLockIcon:!0,tooltipProps:{title:"More strategies"},children:t(Un,{sx:C=>({margin:C.spacing(.25,0)})})}),t(Gn,{id:m,open:h,anchorEl:l,onClose:b,onClick:b,PaperProps:{sx:C=>({paddingBottom:C.spacing(1)})},children:t(as,{projectId:n,featureId:a,environmentId:s})})]})},rs=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",paddingTop:e.spacing(2)})),is=d("div")(({theme:e})=>({fontSize:e.fontSizes.bodySize,textAlign:"center",color:e.palette.text.primary,marginBottom:e.spacing(1)})),cs=d("p")(({theme:e})=>({color:e.palette.text.secondary,fontSize:e.fontSizes.smallBody,textAlign:"center",marginBottom:e.spacing(3),a:{color:e.palette.links}})),ls=({projectId:e,featureId:n,environmentId:a})=>{const{addStrategyToFeature:s}=De(),{setToastData:o,setToastApiError:r}=G(),{refetchFeature:c}=z(e,n),{refetchFeature:l}=cn(e,n),{feature:u}=z(e,n),p=u==null?void 0:u.environments.filter(k=>k.name!==a&&k.strategies&&k.strategies.length>0),{isChangeRequestConfigured:g}=ae(e),{changeRequestDialogDetails:h,onChangeRequestAddStrategies:m,onChangeRequestAddStrategiesConfirm:b,onChangeRequestAddStrategyClose:S}=ln(e,n,"addStrategy"),E=(k=!1)=>{c(),l(),o({title:k?"Strategies created":"Strategy created",text:k?"Successfully copied from another environment":"Successfully created strategy",type:"success"})},y=async k=>{var _;const B=((_=p==null?void 0:p.find(V=>V.name===k))==null?void 0:_.strategies)||[];if(g(a)){await m(a,B,k);return}try{await Promise.all(B.map(V=>{const{id:v,...R}={...V,environment:a};return s(e,n,a,R)})),E(!0)}catch(V){r(L(V))}},C=p&&p.length>0;return i(M,{children:[t(sn,{isOpen:h.isOpen,onClose:S,environment:h==null?void 0:h.environment,onConfirm:b,messageComponent:t(Xo,{fromEnvironment:h.fromEnvironment,payload:h.strategies})}),i(rs,{children:[t(is,{children:"You have not defined any strategies yet."}),i(cs,{children:["Strategies added in this environment will only be executed if the SDK is using an"," ",t(K,{to:"/admin/api",children:"API key configured"})," for this environment."]}),i(Y,{sx:{w:"100%",display:"flex",flexWrap:"wrap",gap:2,alignItems:"center",justifyContent:"center"},children:[t(ot,{label:"Add your first strategy",projectId:e,featureId:n,environmentId:a,matchWidth:C}),t(x,{condition:C,show:t(Jo,{environmentId:a,environments:p.map(k=>k.name),onClick:y})})]})]})]})},ds=d("div")(({theme:e})=>({width:"100%",position:"relative",paddingBottom:e.spacing(2)})),us=d("div")(({theme:e})=>({[e.breakpoints.down(400)]:{padding:e.spacing(1)}})),ps=({featureEnvironment:e,isDisabled:n,otherEnvironments:a})=>{const s=D("projectId"),o=D("featureId"),{setStrategiesSortOrder:r}=De(),{addChange:c}=Ee(),{isChangeRequestConfigured:l}=ae(s),{refetch:u}=ie(s),{setToastData:p,setToastApiError:g}=G(),{refetchFeature:h}=z(s,o),[m,b]=f.useState((e==null?void 0:e.strategies)||[]),[S,E]=f.useState(null);if(f.useEffect(()=>{b((e==null?void 0:e.strategies)||[])},[e==null?void 0:e.strategies]),!e)return null;const y=async v=>{try{await r(s,o,e.name,v),h(),p({title:"Order of strategies updated",type:"success"})}catch(R){g(L(R))}},C=async v=>{await c(s,e.name,{action:"reorderStrategy",feature:o,payload:v}),p({title:"Strategy execution order added to draft",type:"success",confetti:!0}),u()},k=async v=>{try{l(e.name)?await C(v):await y(v)}catch(R){g(L(R))}},B=(v,R)=>$=>{var H;E({id:m[R].id,index:R,height:((H=v.current)==null?void 0:H.offsetHeight)||0}),v!=null&&v.current&&($.dataTransfer.effectAllowed="move",$.dataTransfer.setData("text/html",v.current.outerHTML),$.dataTransfer.setDragImage(v.current,20,20))},_=v=>(R,$)=>H=>{if(S===null||R.current===null||S.index===$||v===S.id)return;const{top:Z,bottom:oe}=R.current.getBoundingClientRect(),ee=H.clientY-Z<S.height,w=oe-H.clientY<S.height,P=S.index>$;if(ee&&P||w&&!P){const F=[...m],T=F.splice(S.index,1)[0];F.splice($,0,T),b(F),E({...S,index:$})}},V=()=>{E(null),k(m.map((v,R)=>({id:v.id,sortOrder:R})))};return t(ds,{children:i(us,{children:[t(x,{condition:m.length>0&&n,show:()=>t(le,{severity:"warning",sx:{mb:2},children:"This environment is disabled, which means that none of your strategies are executing."})}),t(x,{condition:m.length>0,show:t(M,{children:m.map((v,R)=>t(Yo,{strategy:v,index:R,environmentName:e.name,otherEnvironments:a,isDragging:(S==null?void 0:S.id)===v.id,onDragStartRef:B,onDragOver:_(v.id),onDragEnd:V},v.id))}),elseShow:t(ls,{projectId:s,featureId:o,environmentId:e.name})})]})})},pn=(e,n)=>e===0?0:Math.round(n/e*100);var ze={},Ne={};Object.defineProperty(Ne,"__esModule",{value:!0});Ne.defaultOptions=void 0;Ne.defaultOptions={lowercase:!1,precision:1,space:!1,units:["","K","M","B","T","P","E"]};var J={};Object.defineProperty(J,"__esModule",{value:!0});J.getLocales=J.getFractionDigits=J.roundTo=J.parseValue=void 0;function gs(e){const n=parseFloat(e==null?void 0:e.toString());if(isNaN(n))throw new Error("Input value is not a number");if(n>Number.MAX_SAFE_INTEGER||n<Number.MIN_SAFE_INTEGER)throw new RangeError("Input value is outside of safe integer range");return n}J.parseValue=gs;function hs(e,n){if(!Number.isFinite(e))throw new Error("Input value is not a finite number");if(!Number.isInteger(n)||n<0)throw new Error("Precision is not a positive integer");return Number.isInteger(e)?e:parseFloat(e.toFixed(n))}J.roundTo=hs;function fs(e){var n;if(Number.isInteger(e))return 0;const a=e.toString().split(".")[1];return(n=a==null?void 0:a.length)!==null&&n!==void 0?n:0}J.getFractionDigits=fs;function ms(){var e;return typeof navigator>"u"?[]:Array.from((e=navigator.languages)!==null&&e!==void 0?e:[])}J.getLocales=ms;Object.defineProperty(ze,"__esModule",{value:!0});ze.millify=void 0;const xt=Ne,$e=J,Et=1e3;function*At(e){let n=Et;for(;;){const a=e/n;if(a<1)return;yield a,n*=Et}}function gn(e,n){var a,s;const o=n?{...xt.defaultOptions,...n}:xt.defaultOptions;if(!Array.isArray(o.units)||!o.units.length)throw new Error("Option `units` must be a non-empty array");let r;try{r=$e.parseValue(e)}catch(S){return S instanceof Error&&console.warn(`WARN: ${S.message} (millify)`),String(e)}const c=r<0?"-":"";r=Math.abs(r);let l=0;for(const S of At(r))r=S,l+=1;if(l>=o.units.length)return e.toString();let p=$e.roundTo(r,o.precision);for(const S of At(p))p=S,l+=1;const g=(a=o.units[l])!==null&&a!==void 0?a:"",h=o.lowercase?g.toLowerCase():g,m=o.space?" ":"",b=p.toLocaleString((s=o.locales)!==null&&s!==void 0?s:$e.getLocales(),{minimumFractionDigits:$e.getFractionDigits(p)});return`${c}${b}${m}${h}`}ze.millify=gn;var ys=ze.default=gn;const Me=({value:e,threshold:n=1e6,precision:a=2})=>{let s,o=!1;e<n?s=e.toLocaleString():(s=ys(e,{precision:a}),o=!0);const r=t("span",{"data-testid":Yn,children:s});return t(x,{condition:o,show:t(Q,{title:e.toLocaleString(),arrow:!0,children:r}),elseShow:r})},Ge=d("article")(({theme:e})=>({padding:e.spacing(2),background:"transparent",borderRadius:e.spacing(2),textAlign:"center",[e.breakpoints.up("md")]:{padding:e.spacing(4)}})),Ye=d("h3")(({theme:e})=>({margin:0,fontSize:e.fontSizes.bodySize,fontWeight:e.fontWeight.thin})),Ke=d("p")(({theme:e})=>({fontSize:"2.25rem",fontWeight:e.fontWeight.bold,color:e.palette.primary.main})),Je=d("p")(({theme:e})=>({margin:e.spacing(1,0,0,0),padding:e.spacing(2,0,0,0),borderTopWidth:"1px",borderTopStyle:"solid",borderTopColor:e.palette.divider,fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),hn=({totalYes:e,totalNo:n,hoursBack:a,statsSectionId:s,tableSectionId:o})=>{const r=a===1?"in the last hour":`in the last ${a} hours`;return i(te,{container:!0,spacing:2,id:s,"aria-describedby":o,"aria-label":"Feature metrics summary",component:"section",children:[t(te,{item:!0,xs:12,sm:4,children:i(Ge,{children:[t(Ye,{children:"Exposure"}),t(Ke,{children:t(Me,{value:e})}),i(Je,{children:["Total exposure of the feature in the environment"," ",r,"."]})]})}),t(te,{item:!0,xs:12,sm:4,children:i(Ge,{children:[t(Ye,{children:"Exposure %"}),i(Ke,{children:[pn(e+n,e),"%"]}),i(Je,{children:["% total exposure of the feature in the environment"," ",r,"."]})]})}),t(te,{item:!0,xs:12,sm:4,children:i(Ge,{children:[t(Ye,{children:"Requests"}),t(Ke,{children:t(Me,{value:e+n})}),i(Je,{children:["Total requests for the feature in the environment"," ",r,"."]})]})})]})},Ss=d("div")(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"center",margin:"1rem 0",position:"relative","&:before":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",height:2,width:"100%",backgroundColor:e.palette.divider}})),bs=d("span")(({theme:e})=>({fontSize:e.fontSizes.bodySize,textAlign:"center",padding:"0 1rem",background:e.palette.envAccordion.expanded,position:"relative",maxWidth:"80%",color:e.palette.text.primary})),Cs=({children:e})=>t(Ss,{children:t(bs,{children:e})}),vs=({environmentMetric:e})=>e?i(M,{children:[t(Cs,{children:"Feature toggle exposure"}),t("div",{children:t(hn,{totalYes:e.yes,totalNo:e.no,hoursBack:1})})]}):null,Dt=d("div")({marginLeft:"auto",display:"flex",alignItems:"center"}),Rt=d("div")(({theme:e})=>({marginRight:e.spacing(1),display:"flex",flexDirection:"column"})),It=d("p")(({theme:e})=>({color:e.palette.primary.main,textAlign:"right",fontSize:e.fontSizes.bodySize})),Ft=d("p")(({theme:e})=>({maxWidth:"270px",marginTop:e.spacing(.5),fontSize:e.fontSizes.smallBody,textAlign:"right",[e.breakpoints.down(700)]:{display:"none"}})),Ts=d(Kn)(({theme:e})=>({fill:e.palette.background.elevation2,height:"75px",width:"75px",[e.breakpoints.down(500)]:{display:"none"}})),ws=d("div")(({theme:e})=>({margin:e.spacing(0,2),[e.breakpoints.down(500)]:{display:"none"}})),xs=({environmentMetric:e,disabled:n=!1})=>{const a=Jn();if(!e)return null;const s=e.yes+e.no,o=pn(s,e==null?void 0:e.yes);return!e||e.yes===0&&e.no===0?i(Dt,{children:[i(Rt,{children:[i(It,{style:{color:n?a.palette.text.secondary:void 0},"data-loading":!0,children:[o,"%"]}),i(Ft,{style:{color:n?a.palette.text.secondary:a.palette.text.primary},"data-loading":!0,children:["The feature has been requested ",t("b",{children:"0 times"})," and exposed",t("b",{children:" 0 times"})," in the last hour"]})]}),t(Ts,{style:{transform:"scale(1.1)"},"data-loading":!0})]}):i(Dt,{children:[i(Rt,{children:[i(It,{children:[o,"%"]}),i(Ft,{children:["The feature has been requested"," ",i("b",{children:[t(Me,{value:s})," times"]})," ","and exposed"," ",i("b",{children:[t(Me,{value:e.yes})," ","times"]})," ","in the last hour"]})]}),t(ws,{"data-loading":!0,children:t(Qn,{percentage:o,size:"3rem"})})]})},Qe=({strategy:e})=>{const n=Gt(e.name);return t(Q,{title:Ae(e.name)+(e.title?` - ${e.title}`:""),arrow:!0,children:t(Es,{children:t(n,{})})})},Es=d("div")(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"center",color:e.palette.action.disabled,"& svg":{width:e.spacing(2.5),height:e.spacing(2.5)}})),kt=d("ul")(()=>({all:"unset",display:"flex",alignItems:"center",alignContent:"center"})),Xe=d("li")(()=>({all:"unset",minWidth:30,textAlign:"center"})),As=d("div")(({theme:e})=>({display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(1)})),Pe=5,Ds=({strategies:e})=>e!=null&&e.length?e.length>Pe+1?i(kt,{"aria-label":"Feature strategies",children:[e.slice(0,Pe).map(n=>t(Xe,{children:t(Qe,{strategy:n})},n.id)),i(Xn,{tooltip:e.slice(Pe).map(n=>t(Xe,{children:i(As,{children:[t(Qe,{strategy:n})," ",Ae(n.name)+(n.title?` - ${n.title}`:"")]})},n.id)),children:["(+",e.length-Pe,")"]})]}):t(kt,{"aria-label":"Feature strategies",children:e.map(n=>t(Xe,{children:t(Qe,{strategy:n})},n.id))}):null,Rs=d("div",{shouldForwardProp:e=>e!=="enabled"})(({theme:e,enabled:n})=>({borderRadius:e.shape.borderRadiusLarge,marginBottom:e.spacing(2),backgroundColor:n?e.palette.background.paper:e.palette.envAccordion.disabled})),Is=d(Zn)({boxShadow:"none",background:"none"}),Fs=d(ea)(({theme:e})=>({boxShadow:"none",padding:e.spacing(2,4),[e.breakpoints.down(400)]:{padding:e.spacing(1,2)}})),ks=d(ta,{shouldForwardProp:e=>e!=="enabled"})(({theme:e})=>({padding:e.spacing(3),background:e.palette.envAccordion.expanded,borderBottomLeftRadius:e.shape.borderRadiusLarge,borderBottomRightRadius:e.shape.borderRadiusLarge,boxShadow:"inset 0px 2px 4px rgba(32, 32, 33, 0.05)",[e.breakpoints.down("md")]:{padding:e.spacing(2,1)}})),$s=d(ps)(({theme:e})=>({width:"100%",position:"relative",paddingBottom:e.spacing(2)})),Ps=d("div",{shouldForwardProp:e=>e!=="enabled"})(({theme:e,enabled:n})=>({display:"flex",justifyContent:"center",flexDirection:"column",color:n?e.palette.text.primary:e.palette.text.secondary})),Bs=d("div")(({theme:e})=>({display:"flex",alignItems:"center",[e.breakpoints.down(560)]:{flexDirection:"column",textAlign:"center"}})),Os=d(to)(({theme:e})=>({[e.breakpoints.down(560)]:{marginBottom:"0.5rem"}})),Ms=d(lt)(({theme:e})=>({fontSize:e.fontSizes.bodySize,fontWeight:e.typography.fontWeightMedium,[e.breakpoints.down(560)]:{textAlign:"center"}})),_s=d("div")(({theme:e})=>({display:"flex",alignItems:"center",marginTop:e.spacing(2),gap:e.spacing(2),flexWrap:"wrap",[e.breakpoints.down(560)]:{flexDirection:"column"}})),js=({env:e})=>{var p;const n=D("projectId"),a=D("featureId"),{metrics:s}=Eo(n,a),{feature:o}=z(n,a),{value:r}=Yt(),l=Do(o==null?void 0:o.environments,s).find(g=>g.environment===e.name),u=o==null?void 0:o.environments.find(g=>g.name===e.name);return t(x,{condition:!new Set(r.hiddenEnvironments).has(e.name),show:t(Rs,{enabled:e.enabled,children:i(Is,{TransitionProps:{mountOnEnter:!0},"data-testid":`${na}_${e.name}`,className:`environment-accordion ${e.enabled?"":"accordion-disabled"}`,children:[i(Fs,{expandIcon:t(aa,{titleAccess:"Toggle"}),children:[i(Ps,{"data-loading":!0,enabled:e.enabled,children:[i(Bs,{children:[t(Os,{enabled:e.enabled}),t("div",{children:t(Ms,{text:e.name,maxWidth:"100",maxLength:15})}),t(x,{condition:!e.enabled,show:t(ve,{color:"neutral",sx:{ml:1},children:"Disabled"})})]}),i(_s,{children:[t(ot,{label:"Add strategy",projectId:n,featureId:a,environmentId:e.name,variant:"outlined",size:"small"}),t(Ds,{strategies:u==null?void 0:u.strategies})]})]}),t(xs,{environmentMetric:l,disabled:!e.enabled})]}),i(ks,{enabled:e.enabled,children:[t($s,{featureEnvironment:u,isDisabled:!e.enabled,otherEnvironments:o==null?void 0:o.environments.map(({name:g})=>g).filter(g=>g!==e.name)}),t(x,{condition:(((p=u==null?void 0:u.strategies)==null?void 0:p.length)||0)>0,show:i(M,{children:[t(Y,{sx:{display:"flex",justifyContent:"center",py:1},children:t(ot,{label:"Add strategy",projectId:n,featureId:a,environmentId:e.name})}),t(vs,{environmentMetric:l})]})})]})]})})})},Ls=()=>{const e=D("projectId"),n=D("featureId"),{feature:a}=z(e,n);if(!a)return null;const{environments:s}=a;return t(M,{children:s==null?void 0:s.map(o=>t(js,{env:o},o.name))})},Vs=e=>{const{makeRequest:n,createRequest:a,errors:s,loading:o}=oa({propagateErrors:!0}),{setToastData:r,setToastApiError:c}=G(),l=async(h,m)=>{const b=a(`/api/admin/projects/${e}/features/${h}/dependencies`,{method:"POST",body:JSON.stringify(m)});try{await n(b.caller,b.id),r({title:"Dependency added",type:"success"})}catch(S){c(L(S))}},u=async(h,m)=>{const b=a(`/api/admin/projects/${e}/features/${h}/dependencies/${m}`,{method:"DELETE"});try{await n(b.caller,b.id),r({title:"Dependency removed",type:"success"})}catch(S){c(L(S))}},p=async h=>{const m=a(`/api/admin/projects/${e}/features/${h}/dependencies`,{method:"DELETE"});try{await n(m.caller,m.id),r({title:"Dependencies removed",type:"success"})}catch(b){c(L(b))}},g=[a,n,r,L];return{addDependency:f.useCallback(l,g),removeDependency:f.useCallback(u,g),removeDependencies:f.useCallback(p,g),errors:s,loading:o}},zs=(e,n,a={})=>{const s=ye(`/api/admin/projects/${e}/features/${n}/parents`),{data:o,error:r,mutate:c}=_e(s,Ns,a);return{parentOptions:o,error:r,loading:!r&&!o}},Ns=async e=>await(await fetch(e).then(xe("Parent Options"))).json(),Ws=d(Kt)(({theme:e})=>({marginTop:e.spacing(2),marginBottom:e.spacing(1.5)})),Se={key:"none (remove dependency)",label:"none (remove dependency)"},qs=({project:e,featureId:n,showDependencyDialogue:a,onClose:s})=>{const[o,r]=f.useState(Se.key),{addDependency:c,removeDependencies:l}=Vs(e),{parentOptions:u,loading:p}=zs(e,n),g=u?[Se,...u.map(h=>({key:h,label:h}))]:[Se];return t(ne,{open:a,title:"Add parent feature dependency",onClose:s,onClick:async()=>{o===Se.key?await l(n):await c(n,{feature:o}),s()},primaryButtonText:o===Se.key?"Remove":"Add",secondaryButtonText:"Cancel",disabledPrimaryButton:p,children:i(Y,{children:["You feature will be evaluated only when the selected parent feature is enabled in the same environment.",t("br",{}),t("br",{}),t(q,{children:"What feature do you want to depend on?"}),t(Ws,{fullWidth:!0,options:g,value:o,onChange:r})]})})},Hs=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",justifyItems:"center",padding:e.spacing(3),fontSize:e.fontSizes.smallBody})),$t=d("span")(({theme:e})=>({color:e.palette.text.secondary,marginRight:e.spacing(1)})),Pt=d("div")({display:"flex",flexDirection:"row",justifyContent:"space-between"}),Bt=d("div")(({theme:e})=>({justifyContent:"center",paddingTop:e.spacing(.75)})),Us=({feature:e,header:n})=>{const{locationSettings:a}=Jt(),{uiConfig:s}=ut(),o=sa("dependentFeatures"),r=!!s.flags.lastSeenByEnvironment,[c,l]=f.useState(!1);return i(Hs,{children:[n,i(Pt,{children:[i(Bt,{children:[t($t,{children:"Created at:"}),t("span",{children:ra(Qt(e.createdAt),a.locale)})]}),r&&t(ia,{featureLastSeen:e.lastSeenAt,environments:e.environments,sx:{pt:0}})]}),t(x,{condition:o&&!!e.project,show:t(Pt,{children:i(Bt,{children:[t($t,{children:"Dependency:"}),t(de,{startIcon:t(Xt,{}),onClick:()=>{l(!0)},children:"Add parent feature"})]})})}),t(x,{condition:o&&!!e.project,show:t(qs,{project:e.project,featureId:e.name,onClose:()=>l(!1),showDependencyDialogue:o&&c})})]})},Gs=d(it,{shouldForwardProp:e=>e!=="visibilityOff"})(({theme:e,visibilityOff:n})=>({marginLeft:"auto",marginRight:e.spacing(-1),color:n?e.palette.action.active:e.palette.action.focus,"&:hover":{color:e.palette.action.active}})),Ys=({environment:e,hiddenEnvironments:n,setHiddenEnvironments:a})=>t(Gs,{onClick:()=>{a(e.name)},visibilityOff:n.has(e.name),children:t(x,{condition:n.has(e.name),show:t(ca,{}),elseShow:t(la,{})})}),Ks=d("div")(({theme:e})=>({marginLeft:e.spacing(-1.5),"&:not(:last-of-type)":{marginBottom:e.spacing(2)},display:"flex",alignItems:"center"})),Js=d("label")(()=>({display:"inline-flex",alignItems:"center",cursor:"pointer"})),Qs=({environment:e,callback:n,showInfoBox:a,children:s,hiddenEnvironments:o,setHiddenEnvironments:r})=>{const{name:c,enabled:l}=e,u=D("projectId"),p=D("featureId"),{feature:g,refetchFeature:h}=z(u,p),m=i(M,{children:[" ",i("span",{"data-loading":!0,children:[l?"enabled":"disabled"," in"]})," ",t(lt,{text:c,maxWidth:"120",maxLength:15})]}),b=()=>{h(),n&&n()};return i(Ks,{children:[i(Js,{children:[t(no,{featureId:g.name,projectId:u,environmentName:e.name,onToggle:b,onError:a,value:l}),s??m]}),t(Ys,{environment:e,hiddenEnvironments:o,setHiddenEnvironments:r})]})},Xs=d("div")(({theme:e})=>({padding:e.spacing(3)})),Zs=d("div")(()=>({display:"flex",flexDirection:"column"})),er=d("p")(({theme:e})=>({fontSize:e.fontSizes.bodySize})),tr=d("p")(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary,display:"flex",alignItems:"center"})),Ot=d("span")(({theme:e})=>({padding:e.spacing(0,.5),"::after":{content:'"-"'}})),nr=d(pt)(()=>({"&:hover, &:focus":{textDecoration:"underline"}})),ar=({feature:e,header:n,hiddenEnvironments:a,setHiddenEnvironments:s})=>{const[o,r]=f.useState(!1),[c,l]=f.useState(""),u=e.environments.some(p=>{var g;return p.enabled&&((g=p.variants)==null?void 0:g.length)});return i(Xs,{"data-testid":"feature-toggle-status",children:[n,e.environments.map(p=>{const g=p.strategies.length===1?"1 strategy":`${p.strategies.length} strategies`,h=p.variants??[],m=h.length>0&&i(M,{children:[t(Ot,{}),t(Q,{title:"View variants",arrow:!0,describeChild:!0,children:t(nr,{component:K,to:`/projects/${e.project}/features/${e.name}/variants`,underline:"hover",children:h.length===1?"1 variant":`${h.length} variants`})})]}),b=p.enabled&&h.length===0&&u;return t(Qs,{environment:p,hiddenEnvironments:a,setHiddenEnvironments:s,showInfoBox:()=>{l(p.name),r(!0)},children:i(Zs,{children:[t(er,{children:p.name}),i(tr,{children:[g,m,t(x,{condition:b,show:i(M,{children:[t(Ot,{}),t(ao,{})]})})]})]})},p.name)}),t(oo,{open:o,onClose:()=>r(!1),projectId:e.project,featureId:e.name,environmentName:c})]})},fn=(e,n={})=>{const a=async()=>{const p=ye(`api/admin/features/${e}/tags`);return(await fetch(p,{method:"GET"}).then(xe("Tags"))).json()},s=`api/admin/features/${e}/tags`,{data:o,error:r}=da(!!e,{tags:[]},s,a,n),[c,l]=f.useState(!r&&!o),u=()=>{rt(s)};return f.useEffect(()=>{l(!r&&!o)},[o,r]),{tags:(o==null?void 0:o.tags)||[],error:r,loading:c,refetch:u}},or=d("section")(({theme:e})=>({"& > *":{margin:e.spacing(1,0)}})),Ze=e=>e.map(n=>({title:n.value})),Mt=(e,n)=>e.map(a=>({value:a.title,type:n})),mn=({open:e,setOpen:n})=>{const{tagTypes:a}=ua(),s=D("featureId"),{createTag:o}=so(),{updateFeatureTags:r,loading:c}=Ve(),{tags:l,refetch:u,loading:p}=fn(s),{setToastData:g}=G(),h=a&&a.length>0?a[0]:{name:"simple",description:"Simple tag to get you started",icon:""},[m,b]=f.useState(h),S=c||p,[E,y]=f.useState(0),{trackEvent:C}=Le(),[k,B]=f.useState(Ze(l.filter(T=>T.type===m.name))),{tags:_,refetch:V}=ro(m.name),v=f.useMemo(()=>Ze(_),[_]);f.useEffect(()=>{l&&m&&B(Ze(l.filter(T=>T.type===m.name)))},[JSON.stringify(l),m]);const R=()=>{n(!1),B([])};function $(T,I){const O=T.filter(j=>j.type===m.name).filter(j=>!I.find(N=>j.value===N.value&&j.type===N.type)),W=I.filter(j=>j.type===m.name).filter(j=>!T.find(N=>j.value===N.value&&j.type===N.type));return y(O.length+W.length),{added:O,removed:W}}const H=T=>T.filter(I=>!I.title.startsWith("Create")),Z=async(T,I)=>{try{await r(s,{addedTags:T,removedTags:I}),await u()}catch(O){const W=L(O);g({type:"error",title:"Failed to add tag",text:W,confetti:!1})}},oe=(T,I)=>{let O="We successfully";return T>0&&(O=O.concat(` added ${T} new tag${T>1?"s":""}`)),T>0&&I>0&&(O=O.concat(" and ")),I>0&&(O=O.concat(` removed ${I} tag${I>1?"s":""}`)),O},ee=async T=>{T.preventDefault();const I=Mt(H(k),m.name),{added:O,removed:W}=$(I,l);E>0&&(await Z(O,W),E>1&&C("suggest_tags",{props:{eventType:"multiple_tags_added"}}),E>0&&g({type:"success",title:`Updated tag${O.length>1?"s":""} to toggle`,text:oe(O.length,W.length),confetti:!0})),y(0),B([]),n(!1)},w=(T,I)=>{I!=null&&typeof I!="string"&&(T.preventDefault(),b(I),B([]),y(0))},P=(T,I,O)=>{const W=pa(I);O==="selectOption"&&I.forEach((N,Ie)=>{if(typeof N!="string"&&N.inputValue&&N.inputValue!==""){const Fe={value:N.inputValue,type:m.name};o(Fe).then(()=>{C("suggest_tags",{props:{eventType:"tag_created"}}),V()}),N.title=N.inputValue,N.inputValue="",W[Ie]=N}});const j=Mt(H(W),m.name);$(j,l),B(W)},F="add-tag-form";return t(ne,{open:e,secondaryButtonText:"Cancel",primaryButtonText:"Save tags",title:"Update tags to feature toggle",onClick:ee,disabledPrimaryButton:S||E===0,onClose:R,formId:F,children:i(M,{children:[t(q,{paragraph:!0,sx:{marginBottom:T=>T.spacing(2.5)},children:"Tags allow you to group features together"}),t("form",{id:F,onSubmit:ee,children:i(or,{children:[t(io,{options:a,value:m,onChange:w}),t(co,{options:v,existingTags:l,tagType:m,selectedOptions:k,onChange:P})]})})]})})},sr=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",padding:e.spacing(3)})),rr=d("div")(({theme:e})=>({display:"flex",gap:e.spacing(1),flexWrap:"wrap"})),ir=d(Zt)(({theme:e})=>({fontSize:e.fontSizes.smallBody})),cr=d(Te)(({theme:e})=>({margin:e.spacing(3),borderStyle:"dashed"})),lr=d(de)(({theme:e})=>({maxWidth:e.spacing(20),alignSelf:"center"})),dr=({feature:e,header:n})=>{const{tags:a,refetch:s}=fn(e.name),{deleteTagFromFeature:o}=Ve(),[r,c]=f.useState(!1),[l,u]=f.useState(!1),[p,g]=f.useState(),{setToastData:h,setToastApiError:m}=G(),{hasAccess:b}=f.useContext(ct),S=b(he,e.project),E=async()=>{if(p)try{await o(e.name,p.type,p.value),s(),h({type:"success",title:"Tag deleted",text:"Successfully deleted tag"})}catch(y){m(L(y))}};return i(sr,{children:[n,t(rr,{children:a.map(y=>{const C=`${y.type}:${y.value}`;return t(ir,{label:C,deleteIcon:t(ga,{titleAccess:"Remove"}),onDelete:S?()=>{u(!0),g(y)}:void 0},C)})}),t(x,{condition:S,show:i(M,{children:[t(x,{condition:a.length>0,show:t(cr,{})}),t(lr,{"data-loading":!0,variant:"outlined",startIcon:t(Xt,{}),onClick:()=>c(!0),children:"Add new tag"})]})}),t(mn,{open:r,setOpen:c}),i(ne,{open:l,primaryButtonText:"Delete tag",secondaryButtonText:"Cancel",onClose:()=>{u(!1),g(void 0)},onClick:()=>{u(!1),E(),g(void 0)},title:"Delete tag?",children:["You are about to delete tag:"," ",i("strong",{children:[p==null?void 0:p.type,":",p==null?void 0:p.value]})]})]})},ur=d("div")(({theme:e})=>({position:"sticky",top:e.spacing(2),borderRadius:e.shape.borderRadiusLarge,backgroundColor:e.palette.background.paper,display:"flex",flexDirection:"column",maxWidth:"350px",minWidth:"350px",marginRight:"1rem",marginTop:"1rem",[e.breakpoints.down(1e3)]:{marginBottom:"1rem",width:"100%",maxWidth:"none",minWidth:"auto"}})),et=d("h3")(({theme:e})=>({display:"flex",gap:e.spacing(1),alignItems:"center",fontSize:e.fontSizes.bodySize,margin:0,marginBottom:e.spacing(3),"& > :last-child":{position:"relative",top:1}})),pr=({hiddenEnvironments:e,setHiddenEnvironments:n})=>{const a=D("projectId"),s=D("featureId"),{feature:o}=z(a,s);return i(ur,{children:[t(ar,{header:i(et,{"data-loading":!0,children:["Enabled in environments (",o.environments.filter(({enabled:r})=>r).length,")",t(ha,{tooltip:"When a feature is switched off in an environment, it will always return false. When switched on, it will return true or false depending on its strategies.",placement:"top"})]}),feature:o,hiddenEnvironments:e,setHiddenEnvironments:n}),t(Te,{}),t(Us,{header:t(et,{"data-loading":!0,children:"Feature toggle details"}),feature:o}),t(Te,{}),t(dr,{header:t(et,{"data-loading":!0,children:"Tags for this feature toggle"}),feature:o})]})},gr=()=>{const{trackEvent:e}=Le(),{value:n,setValue:a}=Yt(),[s,o]=f.useState(new Set(n.hiddenEnvironments));return{hiddenEnvironments:s,setHiddenEnvironments:c=>{a(l=>{const u=new Set(l.hiddenEnvironments);return u.has(c)?(u.delete(c),e("hidden_environment",{props:{eventType:"environment unhidden"}})):(u.add(c),e("hidden_environment",{props:{eventType:"environment hidden"}})),o(u),{...n,hiddenEnvironments:u}})}}},hr=d("div")(({theme:e})=>({display:"flex",width:"100%",[e.breakpoints.down(1e3)]:{flexDirection:"column"}})),fr=d("div")(({theme:e})=>({display:"flex",flexDirection:"column",width:"calc(100% - (350px + 1rem))",[e.breakpoints.down(1e3)]:{width:"100%"}})),mr=()=>{const e=ce(),n=D("projectId"),a=D("featureId"),s=Ht(n,a),{hiddenEnvironments:o,setHiddenEnvironments:r}=gr(),c=()=>e(s);return en(a),i(hr,{children:[i("div",{children:[t(xo,{}),t(pr,{hiddenEnvironments:o,setHiddenEnvironments:r})]}),t(fr,{children:t(Ls,{})}),i(tn,{children:[t(se,{path:"strategies/create",element:t(at,{label:"Create feature strategy",onClose:c,open:!0,children:t(lo,{})})}),t(se,{path:"strategies/edit",element:t(at,{label:"Edit feature strategy",onClose:c,open:!0,children:t(fa,{})})})]})]})},yr=d("div")(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between","& > div":{display:"flex",alignItems:"center"},marginTop:e.spacing(-3.5),marginBottom:e.spacing(2),backgroundColor:e.palette.background.default,paddingTop:e.spacing(2),paddingBottom:e.spacing(2),position:"sticky",top:0,zIndex:2})),Sr=d(nn,{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.neutral.border:e.palette.primary.main})),br=d("span",{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.text.secondary:e.palette.text.primary,marginLeft:e.spacing(1.25),fontSize:e.fontSizes.mainHeader,fontWeight:e.fontWeight.bold})),Cr=d("form")(()=>({display:"flex",flexDirection:"column",height:"100%"})),vr=d(le)(({theme:e})=>({marginBottom:e.spacing(2)})),Tr=d(le)(({theme:e})=>({marginTop:e.spacing(4)})),wr=d("div")({display:"flex",flexDirection:"column"}),xr=d("div")(({theme:e})=>({display:"flex",alignItems:"center",gap:e.spacing(1.5),marginBottom:e.spacing(.5)})),_t=d("p")(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary,marginBottom:e.spacing(1.5)})),Er=d(Te)(({theme:e})=>({margin:e.spacing(4,0)})),Ar=d(ma)(({theme:e})=>({minWidth:e.spacing(20),width:"100%"})),Dr=d("div")(({theme:e})=>({marginTop:"auto",paddingTop:e.spacing(4),display:"flex",justifyContent:"flex-end"})),Rr=d(de)(({theme:e})=>({marginLeft:e.spacing(3)})),Ir=f.memo(ya),Fr=({environment:e,open:n,setOpen:a,getApiPayload:s,getCrPayload:o,onConfirm:r})=>{const c=D("projectId"),l=D("featureId"),{uiConfig:u}=ut(),{context:p}=Sa(),{defaultStickiness:g,loading:h}=ba(c),{isChangeRequestConfigured:m}=ae(c),{data:b}=ie(c),{changeRequestInReviewOrApproved:S,alert:E}=Ta(b),y=(e==null?void 0:e.variants)||[],[C,k]=f.useState([]),[B,_]=f.useState();f.useEffect(()=>{h||k(y.length?y.map(A=>({...A,isValid:!0,new:!1,id:We()})):[{name:"",weightType:ft.VARIABLE,weight:0,overrides:[],stickiness:(C==null?void 0:C.length)>0?C[0].stickiness:g,new:!0,isValid:!1,id:We()}])},[n,h]);const V=(A,U)=>{k(ue=>mt(ue.map(ke=>ke.id===U?A:ke),1e3))},v=()=>{const A=We();k(U=>[...U,{name:"",weightType:ft.VARIABLE,weight:0,overrides:[],stickiness:(U==null?void 0:U.length)>0?U[0].stickiness:g,new:!0,isValid:!1,id:A}]),_(A)};f.useEffect(()=>{if(B){const A=document.getElementById(`variant-name-input-${B}`);A==null||A.scrollIntoView({behavior:"smooth",block:"center"}),A==null||A.focus({preventScroll:!0}),_(void 0)}},[B]);const R=C.map(({new:A,isValid:U,id:ue,...ke})=>ke),$=s(y,R),H=o(R),Z=async A=>{A.preventDefault(),r(R)},oe=()=>F?`curl --location --request POST '${u.unleashUrl}/api/admin/projects/${c}/environments/${e==null?void 0:e.name}/change-requests' \\
2
2
  --header 'Authorization: INSERT_API_KEY' \\
3
3
  --header 'Content-Type: application/json' \\
4
4
  --data-raw '${JSON.stringify(H,void 0,2)}'`:`curl --location --request PATCH '${u.unleashUrl}/api/admin/projects/${c}/features/${l}/environments/${e==null?void 0:e.name}/variants' \\
5
5
  --header 'Authorization: INSERT_API_KEY' \\
6
6
  --header 'Content-Type: application/json' \\
7
- --data-raw '${JSON.stringify($.patch,void 0,2)}'`,ee=C.every(({isValid:A})=>A),w=S((e==null?void 0:e.name)||""),P=w?"Add to existing change request":"Add change to draft",F=m((e==null?void 0:e.name)||""),T=f.useMemo(()=>{var A;return h?"":((A=R[0])==null?void 0:A.stickiness)||g},[h,g,JSON.stringify(R[0]??{})]),I=f.useMemo(()=>["default",...p.filter(A=>A.stickiness).map(A=>A.name)],[p]),O=I.map(A=>({key:A,label:A}));I.includes(T)||O.push({key:T,label:T});const W=async A=>{k(U=>U.map(ue=>({...ue,stickiness:A})))},j=A=>{W(A)},[N,Ie]=f.useState();f.useEffect(()=>{Ie(void 0),$.error&&Ie($.error)},[$.error]);const Fe=()=>{W(g),a(!1)};return h||T===""?t(Ca,{}):t(at,{open:n,onClose:Fe,label:"",children:i(va,{modal:!0,title:"",description:"Variants allow you to return a variant object if the feature toggle is considered enabled for the current request.",documentationLink:"https://docs.getunleash.io/reference/feature-toggle-variants",documentationLinkLabel:"Feature toggle variants documentation",formatApiCode:oe,loading:!n,children:[i(yr,{children:[i("div",{children:[t(Sr,{deprecated:!(e!=null&&e.enabled)}),t(br,{deprecated:!(e!=null&&e.enabled),children:e==null?void 0:e.name})]}),t(re,{"data-testid":"MODAL_ADD_VARIANT_BUTTON",onClick:v,variant:"outlined",permission:pe,projectId:c,environmentId:e==null?void 0:e.name,children:"Add variant"})]}),i(Cr,{onSubmit:Z,children:[t(x,{condition:w,show:E,elseShow:t(x,{condition:!!F,show:i(vr,{severity:"info",children:[t("strong",{children:"Change requests"})," are enabled",e?` for ${e.name}`:"",". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})})}),t(wr,{children:C.map(A=>t(Ir,{variant:A,variants:C,updateVariant:U=>V(U,A.id),removeVariant:()=>k(U=>mt(U.filter(ue=>ue.id!==A.id),1e3)),error:$.error},A.id))}),t(re,{onClick:v,variant:"outlined",permission:pe,projectId:c,environmentId:e==null?void 0:e.name,children:"Add variant"}),t(Er,{}),t(x,{condition:C.length>0,show:i(M,{children:[t(xr,{children:t("p",{children:"Stickiness"})}),i(_t,{children:["By overriding the stickiness you can control which parameter is used to ensure consistent traffic allocation across variants."," ",t(pt,{href:"https://docs.getunleash.io/reference/feature-toggle-variants",target:"_blank",rel:"noreferrer",children:"Read more"})]}),t("div",{children:t(Ar,{value:T,label:"",editable:!0,onChange:A=>j(A.target.value)})})]}),elseShow:t(_t,{children:"This environment has no variants. Get started by adding a variant."})}),i(Tr,{severity:"error",hidden:!N,children:[t("strong",{children:"Error: "}),N]}),i(Dr,{children:[t(de,{"data-testid":"DIALOGUE_CONFIRM_ID",type:"submit",variant:"contained",color:"primary",disabled:!ee,children:F?P:"Save variants"}),t(Rr,{onClick:Fe,children:"Cancel"})]})]})]})})},kr=d("div")(({theme:e})=>({padding:e.spacing(3),borderRadius:e.shape.borderRadiusLarge,border:`1px solid ${e.palette.divider}`,"&:not(:last-child)":{marginBottom:e.spacing(3)}})),$r=d("div")({display:"flex",alignItems:"center",justifyContent:"space-between","& > div":{display:"flex",alignItems:"center"}}),Pr=d(nn,{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.neutral.border:e.palette.primary.main})),Br=d("span",{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.text.secondary:e.palette.text.primary,marginLeft:e.spacing(1.25),fontWeight:e.fontWeight.bold})),Or=d("p")(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary,marginBottom:e.spacing(1.5)})),Mr=d("div")(({theme:e})=>({margin:e.spacing(3,0)})),_r=d("div")(({theme:e})=>({display:"flex",alignItems:"center",gap:e.spacing(1.5),marginBottom:e.spacing(.5)})),jr=({environment:e,searchValue:n,children:a})=>{var r;const s=e.variants??[],o=((r=s[0])==null?void 0:r.stickiness)||"default";return i(kr,{children:[i($r,{children:[i("div",{children:[t(Pr,{deprecated:!e.enabled}),t(Br,{deprecated:!e.enabled,children:e.name})]}),a]}),t(x,{condition:s.length>0,show:i(M,{children:[t(Mr,{children:t(wa,{variants:s,searchValue:n})}),t(x,{condition:s.length>1,show:i(M,{children:[i(_r,{children:[t("p",{children:"Stickiness:"}),t(ve,{children:o})]}),i(Or,{children:["By overriding the stickiness you can control which parameter is used to ensure consistent traffic allocation across variants."," ",t(pt,{href:"https://docs.getunleash.io/reference/feature-toggle-variants",target:"_blank",rel:"noreferrer",children:"Read more"})]})]})})]})})]})},Lr=d(Ce)(({theme:e})=>({"& span":{fontSize:e.fontSizes.smallBody}})),Vr=({environment:e,permission:n,projectId:a,environmentId:s,onCopyVariantsFrom:o,otherEnvsWithVariants:r})=>{const[c,l]=f.useState(null),u=!!c,p=e.variants??[];return t(x,{condition:r.length>0&&p.length===0,show:i(M,{children:[t(re,{onClick:g=>{l(g.currentTarget)},id:`copy-from-menu-${e.name}`,"aria-controls":u?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":u?"true":void 0,variant:"outlined",permission:n,projectId:a,environmentId:s,children:"Copy variants from"}),t(Re,{anchorEl:c,open:u,onClose:()=>l(null),MenuListProps:{"aria-labelledby":`copy-from-menu-${e.name}`},children:r.map(g=>t(me,{onClick:()=>o(g,e),children:t(Lr,{children:`Copy from ${g.name}`})},g.name))})]})})},zr=({permission:e,projectId:n,environment:a,checked:s,onClick:o,...r})=>{const c=nt(e,n,a);return i(me,{disabled:!c,onClick:o,...r,children:[t(xa,{checked:s}),a]})},Nr=d(Re)(({theme:e})=>({"& > div > ul":{display:"flex",flexDirection:"column",justifyContent:"center","& > li":{padding:e.spacing(0,1)}}})),Wr=d("div")(({theme:e})=>({margin:e.spacing(1,2)})),qr=d(de)(({theme:e})=>({marginTop:e.spacing(2)})),Hr=({current:e,environments:n,permission:a,projectId:s,onSubmit:o})=>{var E;const[r,c]=f.useState(null),l=!!r,[u,p]=f.useState([]),g=y=>{p(C=>[...C,y])},h=y=>{p(C=>C.filter(({name:k})=>k!==y.name))},m=y=>{u.includes(y)?h(y):g(y)},b=()=>{p([]),c(null)},S=((E=n.find(y=>y.name===e))==null?void 0:E.variants)??[];return t(x,{condition:S.length>0&&n.length>1,show:i(M,{children:[t(de,{onClick:y=>{c(y.currentTarget)},id:`push-to-menu-${e}`,"aria-controls":l?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":l?"true":void 0,variant:"outlined",children:"Copy to environment"}),i(Nr,{anchorEl:r,open:l,onClose:()=>c(null),MenuListProps:{"aria-labelledby":`push-to-menu-${e}`},children:[n.filter(y=>y.name!==e).map(y=>t(zr,{projectId:s,permission:a,environment:y.name,checked:u.includes(y),onClick:()=>m(y)},y.name)),i(Wr,{children:[t(Te,{}),i(qr,{variant:"outlined",onClick:()=>{o(u),b()},disabled:u.length===0,children:["Push to selected (",u.length,")"]})]})]})]})})},Ur=d(le)(({theme:e})=>({marginBottom:e.spacing(2),"& code":{fontWeight:e.fontWeight.bold}})),Gr=({mode:e})=>i(Ur,{severity:"info",children:["Variant allows you to return a variant object if the"," ",e==="feature"?"feature toggle is considered enabled ":"this strategy is active ","for the current request. When using variants you should use the"," ",t("code",{children:"getVariant()"})," method in the Client SDK."]}),Yr=d("div")(({theme:e})=>({display:"flex",gap:e.spacing(1.5)})),Kr=()=>{const{setToastData:e,setToastApiError:n}=G(),a=Ut(),s=je(a.breakpoints.down("md")),o=D("projectId"),r=D("featureId"),{feature:c,refetchFeature:l,loading:u}=z(o,r),{patchFeatureEnvironmentVariants:p,overrideVariantsInEnvironments:g}=Ve(),{refetch:h}=ie(o),{addChange:m}=Ee(),{isChangeRequestConfigured:b}=ae(o),[S,E]=f.useState(""),[y,C]=f.useState(),[k,B]=f.useState(!1),_=f.useMemo(()=>{var w;return((w=c==null?void 0:c.environments)==null?void 0:w.map(P=>({...P,crEnabled:b(P.name)})))||[]},[c.environments]),V=(w,P)=>Ra(w,P),v=(w,P)=>{try{const F=Da(P,1e3);return{patch:V(w,F)}}catch(F){return{patch:[],error:L(F)}}},R=w=>({feature:r,action:"patchVariant",payload:{variants:w}}),$=async(w,P)=>{if(w.crEnabled)await m(o,w.name,R(P)),h();else{const F=w.variants??[],{patch:T,error:I}=v(F,P);if(T.length===0)return;if(I){e({type:"error",title:I});return}await p(o,r,w.name,T)}l()},H=async(w,P)=>{try{const F=P.filter(({crEnabled:j})=>j),T=P.filter(({crEnabled:j})=>!j);F.length&&await Promise.all(F.map(j=>m(o,j.name,R(w)))),T.length&&await g(o,r,w,T.map(({name:j})=>j)),h(),l();const I=T.length?`Variants pushed to ${T.length===1?T[0].name:`${T.length} environments`}`:"",O=F.length?`Variants push added to ${F.length===1?`${F[0].name} draft`:`${F.length} drafts`}`:"",W=`${I}${I&&O?". ":""}${O}`;e({title:W,type:"success"})}catch(F){n(L(F))}},Z=w=>{C(w),B(!0)},oe=async w=>{if(y)try{await $(y,w),B(!1),e({title:y.crEnabled?"Variant changes added to draft":"Variants updated successfully",type:"success"})}catch(P){n(L(P))}},ee=async(w,P)=>{try{const F=w.variants??[];await $(P,F),e({title:P.crEnabled?"Variants copy added to draft":"Variants copied successfully",type:"success"})}catch(F){n(L(F))}};return i(gt,{isLoading:u,header:t(Ea,{title:"Variants",actions:t(x,{condition:!s,show:t(M,{children:t(yt,{initialValue:S,onChange:E})})}),children:t(x,{condition:s,show:t(yt,{initialValue:S,onChange:E})})}),children:[t(Gr,{mode:"feature"}),t(Aa,{}),_.map(w=>{var F;const P=_.filter(({name:T,variants:I})=>T!==w.name&&(I==null?void 0:I.length));return t(jr,{environment:w,searchValue:S,children:i(Yr,{children:[t(Hr,{current:w.name,environments:_,permission:pe,projectId:o,onSubmit:T=>H(w.variants??[],T)}),t(Vr,{environment:w,permission:pe,projectId:o,environmentId:w.name,onCopyVariantsFrom:ee,otherEnvsWithVariants:P}),t(x,{condition:!!((F=w.variants)!=null&&F.length),show:t(X,{"data-testid":"EDIT_VARIANTS_BUTTON",onClick:()=>Z(w),permission:pe,projectId:o,environmentId:w.name,tooltipProps:{title:"Edit variants"},children:t(be,{})}),elseShow:t(re,{"data-testid":"ADD_VARIANT_BUTTON",onClick:()=>Z(w),variant:"outlined",permission:pe,projectId:o,environmentId:w.name,children:"Add variant"})})]})},w.name)}),t(Fr,{environment:y,open:k,setOpen:B,getApiPayload:v,getCrPayload:R,onConfirm:oe})]})},Jr=ye("api/admin/client-metrics/features"),yn=(e,n)=>{const a=ye(`api/admin/client-metrics/features/${e}/raw?hoursBack=${n}`),{data:s,error:o}=_e(a,()=>Qr(a)),r=f.useCallback(()=>{rt(Jr).catch(console.warn)},[]);return{featureMetrics:s==null?void 0:s.data,loading:!o&&!s,refetchFeatureMetrics:r,error:o}},Qr=e=>fetch(e).then(xe("Features")).then(n=>n.json()).then(),Xr=d("h2")(({theme:e})=>({margin:0,marginBottom:e.spacing(1),fontSize:e.fontSizes.smallBody,fontWeight:e.fontWeight.thin,color:e.palette.text.secondary})),we=48,Zr=({hoursBack:e,setHoursBack:n})=>{const a=s=>{n(ei(s))};return i("div",{children:[t(Xr,{children:"Period"}),t(Kt,{name:"feature-metrics-period",id:"feature-metrics-period",options:ti,value:String(e),onChange:a,fullWidth:!0})]})},ei=e=>{switch(e){case"1":return 1;case"24":return 24;default:return we}},ti=[{key:"1",label:"Last hour"},{key:"24",label:"Last 24 hours"},{key:`${we}`,label:`Last ${we} hours`}],ni=({value:e})=>{const{locationSettings:n}=Jt(),a=e?e instanceof Date?St(e,n.locale):St(Qt(e),n.locale):void 0;return t(an,{lineClamp:1,children:a})},ai=({metrics:e,tableSectionId:n})=>{const a=je(Ia.breakpoints.down("md")),s=f.useMemo(()=>({sortBy:[{id:"timestamp"}]}),[]),{getTableProps:o,getTableBodyProps:r,headerGroups:c,rows:l,prepareRow:u,setHiddenColumns:p}=qe.useTable({initialState:s,columns:jt,data:e,autoResetHiddenColumns:!1,disableSortRemove:!0,defaultColumn:{Cell:an}},qe.useGlobalFilter,qe.useSortBy);return Fa([{condition:a,columns:["appName","environment"]}],p,jt),e.length===0?null:i(ka,{...o(),rowHeight:"standard",id:n,children:[t($a,{headerGroups:c}),t(Pa,{...r(),children:l.map(g=>(u(g),t(Ba,{hover:!0,...g.getRowProps(),children:g.cells.map(h=>t(Oa,{...h.getCellProps(),children:h.render("Cell")}))})))})]})},jt=[{id:"Icon",width:"1%",disableSortBy:!0,Cell:()=>t(Ma,{icon:t(mo,{color:"disabled"})})},{Header:"Time",accessor:"timestamp",Cell:e=>t(ni,{value:e.row.original.timestamp})},{Header:"Application",accessor:"appName"},{Header:"Environment",accessor:"environment"},{id:"requested",Header:"Requested",accessor:e=>e.yes+e.no},{Header:"Exposed",accessor:"yes"}],oi=({metrics:e,...n})=>{const a=f.useMemo(()=>e.reduce((o,r)=>o+r.yes,0),[e]),s=f.useMemo(()=>e.reduce((o,r)=>o+r.no,0),[e]);return t(hn,{...n,totalYes:a,totalNo:s})},si=({metrics:e,hoursBack:n})=>{const a=bt(),s=bt();return e.length===0?i(Y,{mt:6,children:[t(q,{variant:"body1",paragraph:!0,children:"We have yet to receive any metrics for this feature toggle in the selected time period."}),t(q,{variant:"body1",paragraph:!0,children:"Please note that, since the SDKs send metrics on an interval, it might take some time before metrics appear."})]}):i(f.Suspense,{fallback:null,children:[t(Y,{borderTop:1,pt:2,mt:3,borderColor:"divider",children:t(ri,{metrics:e,hoursBack:n,statsSectionId:a})}),t(Y,{mt:4,children:t(oi,{metrics:e,hoursBack:n,statsSectionId:a,tableSectionId:s})}),t(Y,{mt:4,children:t(ai,{metrics:e,tableSectionId:s})})]})},ri=_a.lazy(()=>ja(()=>import("./FeatureMetricsChart-67045ba1.js"),[])),st=e=>{const{search:n}=window.location,a=ce(),s=f.useMemo(()=>new URLSearchParams(n),[n]),o=f.useCallback(r=>{const c=new URLSearchParams(n);c.set(e,r),a({search:c.toString()},{replace:!0})},[e,n,a]);return[s.get(e)||void 0,o]},ii=e=>{const[n,a]=st(e),s=f.useCallback(o=>a(String(o)),[a]);return[Number.isFinite(Number(n))?Number(n):void 0,s]},ci=d("h2")(({theme:e})=>({margin:0,marginBottom:e.spacing(1.5),fontSize:e.fontSizes.smallBody,fontWeight:e.fontWeight.thin,color:e.palette.text.secondary})),li=d("ul")(({theme:e})=>({display:"flex",flexWrap:"wrap",gap:e.spacing(1),listStyleType:"none",padding:0,minHeight:"100%"})),di=d("li")(({theme:e})=>({"& > [aria-pressed=true]":{backgroundColor:e.palette.background.alternative,color:e.palette.primary.contrastText},"& > [aria-pressed=true]:hover":{backgroundColor:e.palette.primary.light}})),Lt=({title:e,values:n,value:a,setValue:s})=>{const o=c=>()=>{n.has(c)&&s(c)},r=f.useMemo(()=>Array.from(n).sort((c,l)=>c.localeCompare(l)),[n]);return i("div",{children:[t(ci,{children:e}),t(li,{children:r.map(c=>t(di,{children:t(Zt,{label:c,onClick:o(c),"aria-pressed":c===a,sx:La})},c))})]})},ui=()=>{const e=D("projectId"),n=D("featureId"),a=pi(e,n),s=gi(n);en("Metrics");const[o=we,r]=ii("hoursBack"),{featureMetrics:c}=yn(n,o),[l,u]=f.useState(c);f.useEffect(()=>{c&&u(c)},[c]);const p=Array.from(a)[0],g=Array.from(s)[0],[h=p,m]=st("environment"),[b=g,S]=st("application"),E=f.useMemo(()=>l==null?void 0:l.filter(y=>y.environment===h).filter(y=>y.appName===b),[l,h,b]);return E?i(gt,{children:[i(te,{container:!0,component:"header",spacing:2,children:[t(te,{item:!0,xs:12,md:5,children:t(x,{condition:a.size>0,show:t(Lt,{title:"Environments",values:a,value:h,setValue:m})})}),t(te,{item:!0,xs:12,md:5,children:t(x,{condition:s.size>0,show:t(Lt,{title:"Applications",values:s,value:b,setValue:S})})}),t(te,{item:!0,xs:12,md:2,children:t(Zr,{hoursBack:o,setHoursBack:r})})]}),t(si,{metrics:E,hoursBack:o})]}):null},pi=(e,n)=>{const{feature:a}=z(e,n),s=a.environments.map(o=>o.name);return new Set(s)},gi=e=>{const{featureMetrics:n=[]}=yn(e,we),a=n.map(s=>s.appName);return new Set(a)},hi=(e,n)=>{const a=new Set(e),s=new Set(n);return a.size!==s.size?!1:[...a].every(o=>s.has(o))},Vt=d("div")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),zt=d(le)(({theme:e})=>({marginBottom:e.spacing(1)})),fi=d(dt)({padding:0}),mi=({projectId:e,open:n,onClose:a,onClick:s,feature:o,changeRequests:r})=>{const c=D("projectId"),{project:l}=on(e),{isChangeRequestConfiguredInAnyEnv:u}=ae(e),p=u(),g=f.useMemo(()=>hi(o.environments.map(m=>m.name),l.environments.map(m=>m.environment)),[o,l]),h=r?r.length>0:!1;return t(x,{condition:g&&!h&&!p,show:t(ne,{open:n,onClose:a,onClick:s,title:"Confirm change project",primaryButtonText:"Change project",secondaryButtonText:"Cancel",children:i(Vt,{children:[t(zt,{severity:"success",children:"This feature toggle is compatible with the new project."}),t("p",{children:"Are you sure you want to change the project for this toggle?"})]})}),elseShow:t(ne,{open:n,onClick:a,title:"Confirm change project",primaryButtonText:"Close",children:i(Vt,{children:[t(zt,{severity:"warning",children:"Cannot proceed with the move"}),t(x,{condition:!g,show:t("p",{children:"In order to move a feature toggle between two projects, both projects must have the exact same environments enabled."})}),t(x,{condition:h,show:i(M,{children:[t("p",{children:"The feature toggle must not have any pending change requests. This feature toggle is currently referenced in the following change requests:"}),t(fi,{children:r==null?void 0:r.map(m=>t(ge,{children:i(K,{to:`/projects/${c}/change-requests/${m.id}`,children:["View change request"," ",m.id]})},m.id))})]})}),t(x,{condition:p,show:i("p",{children:["You're not allowed to move the feature to project"," ",t(K,{to:`/projects/${e}/settings/change-requests`,children:e}),". This project has change requests enabled."]})})]})})})},yi=e=>fetch(e).then(xe("ChangeRequest")).then(n=>n.json()),Si=(e,n)=>{const{data:a,error:s,mutate:o}=Va([],ye(`api/admin/projects/${e}/change-requests/pending/${n}`),yi);return{changeRequests:a,loading:!s&&!a,refetch:o,error:s}},bi=()=>{const{hasAccess:e}=f.useContext(ct),n=D("projectId"),a=D("featureId"),{feature:s,refetchFeature:o}=z(n,a),[r,c]=f.useState(!1),{changeFeatureProject:l}=Ve(),{setToastData:u,setToastApiError:p}=G(),[g,h]=f.useState(n),{projects:m}=za(),b=ce(),{changeRequests:S}=Si(n,a),E=async()=>{try{g&&(await l(n,a,g),o(),u({title:"Project changed",type:"success"}),c(!1),b(`/projects/${g}/features/${a}/settings`,{replace:!0}))}catch(C){p(L(C))}},y=f.useMemo(()=>m.map(C=>C.id).filter(C=>e(Ct,C)),[m,e]);return y.length===0?null:i(M,{children:[t(Na,{value:g,onChange:h,label:"Project",filter:C=>y.includes(C),enabled:!0}),t(re,{permission:Ct,onClick:()=>c(!0),disabled:g===n,projectId:n,children:"Save"}),t(mi,{changeRequests:S,projectId:g,open:r,feature:s,onClose:()=>c(!1),onClick:E})]})},Ci=d("div")({display:"flex",alignItems:"center"}),vi=d(q)(({theme:e})=>({fontSize:e.fontSizes.mainHeader})),Ti=({projectId:e,featureId:n})=>{var r;const{feature:a}=z(e,n),s=ce();return i(M,{children:[i(Ci,{children:[t(vi,{children:"Feature information"}),t(X,{permission:he,projectId:e,"data-loading":!0,onClick:()=>{s(`/projects/${e}/features/${n}/edit`)},tooltipProps:{title:"Edit"},children:t(be,{})})]}),i(q,{children:["Name: ",t("strong",{children:a.name})]}),i(q,{children:["Description:"," ",t("strong",{children:(r=a.description)!=null&&r.length?a.description:"no description"})]}),i(q,{children:["Type: ",t("strong",{children:a.type})]}),i(q,{children:["Impression Data:"," ",t("strong",{children:a.impressionData?"enabled":"disabled"})]})]})},Be="metadata",tt="project",wi=d("div")(({theme:e})=>({width:"20%",borderRight:`1px solid ${e.palette.divider}`,padding:e.spacing(2,0),[e.breakpoints.down("md")]:{width:"35%"}})),xi=d("div")(({theme:e})=>({padding:e.spacing(4),display:"flex",flexDirection:"column",width:400,"& > *":{margin:e.spacing(1,0)}})),Ei=()=>{const e=D("projectId"),n=D("featureId"),[a,s]=f.useState(Be),{uiConfig:o}=ut();return t(gt,{header:"Settings",sx:{padding:0},children:i(Y,{sx:{display:"flex"},children:[t(wi,{children:i(dt,{children:[t(ge,{sx:{padding:"0.75rem 2rem"},button:!0,onClick:()=>s(Be),selected:a===Be,children:"Metadata"},0),t(ge,{sx:{padding:"0.75rem 2rem"},button:!0,onClick:()=>s(tt),selected:a===tt,hidden:!o.flags.P,children:"Project"},1)]})}),i(xi,{children:[t(x,{condition:a===Be,show:t(Ti,{projectId:e,featureId:n})}),t(x,{condition:a===tt&&o.flags.P,show:t(bi,{})})]})]})})},Ai=({stale:e,showActive:n=!0})=>!e&&!n?null:t("div",{"data-loading":!0,style:{marginLeft:"8px"},children:t(ve,{color:e?"error":"success",title:e?"Feature toggle is deprecated.":"Feature toggle is active.",children:e?"Stale":"Active"})}),Nt=d("strong")({wordBreak:"break-all"}),Di=()=>{const e=D("projectId"),n=D("featureId"),{archivedFeatures:a}=Wa(),s=qa(e,{name:n});return a?a.some(r=>r.name===n)?i("p",{children:["The feature ",t(Nt,{children:n})," has been archived. You can find it on the"," ",t(K,{to:`/projects/${e}/archive`,children:"project archive page"}),"."]}):i("p",{children:["The feature ",t(Nt,{children:n})," does not exist. Would you like to"," ",t(K,{to:s,children:"create it"}),"?"]}):null},Ri=d("div")(({theme:e})=>({backgroundColor:e.palette.background.paper,borderRadius:e.shape.borderRadiusLarge,marginBottom:e.spacing(2)})),Ii=d("div")(({theme:e})=>({padding:e.spacing(2,4,2,2),display:"flex",justifyContent:"space-between",alignItems:"center",[e.breakpoints.down(500)]:{flexDirection:"column"}})),Fi=d("div")({display:"flex",alignItems:"center"}),ki=d("h1")(({theme:e})=>({fontSize:e.fontSizes.mainHeader,fontWeight:"normal",display:"flex",alignItems:"center",wordBreak:"break-all"})),$i=d("div")({flexShrink:0,display:"flex"}),Pi=d("div")(({theme:e})=>({width:"100%",backgroundColor:e.palette.divider,height:"1px"})),Bi=d("div")(({theme:e})=>({padding:e.spacing(0,4)})),Oi=d(Ha)(({theme:e})=>({textTransform:"none",width:"auto",fontSize:e.fontSizes.bodySize,padding:"0 !important",[e.breakpoints.up("md")]:{minWidth:160}})),Li=()=>{const e=D("projectId"),n=D("featureId"),{refetch:a}=on(e),{favorite:s,unfavorite:o}=Ua(),{refetchFeature:r}=z(e,n),[c,l]=f.useState(!1),[u,p]=f.useState(!1),[g,h]=f.useState(!1),m=je("(max-width:500px)"),{feature:b,loading:S,error:E,status:y}=z(e,n),C=ce(),{pathname:k}=Ga(),B=Ya(S),_=`/projects/${e}/features/${n}`,V=[{title:"Overview",path:`${_}`,name:"overview"},{title:"Metrics",path:`${_}/metrics`,name:"Metrics"},{title:"Variants",path:`${_}/variants`,name:"Variants"},{title:"Settings",path:`${_}/settings`,name:"Settings"},{title:"Event log",path:`${_}/logs`,name:"Event log"}],v=V.find($=>$.path===k)??V[0],R=async()=>{b!=null&&b.favorite?await o(e,b.name):await s(e,b.name),r()};return y===404?t(Di,{}):E!==void 0?t("div",{ref:B}):i("div",{ref:B,children:[i(Ri,{children:[i(Ii,{children:[i(Fi,{children:[t(Ka,{onClick:R,isFavorite:b==null?void 0:b.favorite}),i(ki,{"data-loading":!0,children:[b.name," "]}),t(x,{condition:!m,show:t(Ai,{stale:b==null?void 0:b.stale})})]}),i($i,{children:[t(X,{permission:Ja,projectId:e,"data-loading":!0,component:K,to:`/projects/${e}/features/${n}/strategies/copy`,tooltipProps:{title:"Copy feature toggle"},children:t(Qa,{})}),t(X,{permission:Xa,projectId:e,tooltipProps:{title:"Archive feature toggle"},"data-loading":!0,onClick:()=>p(!0),children:t(fo,{})}),t(X,{onClick:()=>h(!0),permission:he,projectId:e,tooltipProps:{title:"Toggle stale state"},"data-loading":!0,children:t(uo,{})}),t(X,{onClick:()=>l(!0),permission:he,projectId:e,tooltipProps:{title:"Add tag"},"data-loading":!0,children:t(Za,{})})]})]}),t(Pi,{}),t(Bi,{children:t(eo,{value:v.path,indicatorColor:"primary",textColor:"primary",children:V.map($=>t(Oi,{label:$.title,value:$.path,onClick:()=>C($.path),"data-testid":`TAB-${$.title}`},$.title))})})]}),i(tn,{children:[t(se,{path:"metrics",element:t(ui,{})}),t(se,{path:"logs",element:t(So,{})}),t(se,{path:"variants",element:t(Kr,{})}),t(se,{path:"settings",element:t(Ei,{})}),t(se,{path:"*",element:t(mr,{})})]}),t(po,{isOpen:u,onConfirm:()=>{a(),C(`/projects/${e}`)},onClose:()=>p(!1),projectId:e,featureIds:[n]}),t(go,{isStale:b.stale,isOpen:g,onClose:()=>{h(!1),r()},featureId:n,projectId:e}),t(mn,{open:c,setOpen:l})]})};export{Li as default};
7
+ --data-raw '${JSON.stringify($.patch,void 0,2)}'`,ee=C.every(({isValid:A})=>A),w=S((e==null?void 0:e.name)||""),P=w?"Add to existing change request":"Add change to draft",F=m((e==null?void 0:e.name)||""),T=f.useMemo(()=>{var A;return h?"":((A=R[0])==null?void 0:A.stickiness)||g},[h,g,JSON.stringify(R[0]??{})]),I=f.useMemo(()=>["default",...p.filter(A=>A.stickiness).map(A=>A.name)],[p]),O=I.map(A=>({key:A,label:A}));I.includes(T)||O.push({key:T,label:T});const W=async A=>{k(U=>U.map(ue=>({...ue,stickiness:A})))},j=A=>{W(A)},[N,Ie]=f.useState();f.useEffect(()=>{Ie(void 0),$.error&&Ie($.error)},[$.error]);const Fe=()=>{W(g),a(!1)};return h||T===""?t(Ca,{}):t(at,{open:n,onClose:Fe,label:"",children:i(va,{modal:!0,title:"",description:"Variants allow you to return a variant object if the feature toggle is considered enabled for the current request.",documentationLink:"https://docs.getunleash.io/reference/feature-toggle-variants",documentationLinkLabel:"Feature toggle variants documentation",formatApiCode:oe,loading:!n,children:[i(yr,{children:[i("div",{children:[t(Sr,{deprecated:!(e!=null&&e.enabled)}),t(br,{deprecated:!(e!=null&&e.enabled),children:e==null?void 0:e.name})]}),t(re,{"data-testid":"MODAL_ADD_VARIANT_BUTTON",onClick:v,variant:"outlined",permission:pe,projectId:c,environmentId:e==null?void 0:e.name,children:"Add variant"})]}),i(Cr,{onSubmit:Z,children:[t(x,{condition:w,show:E,elseShow:t(x,{condition:!!F,show:i(vr,{severity:"info",children:[t("strong",{children:"Change requests"})," are enabled",e?` for ${e.name}`:"",". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})})}),t(wr,{children:C.map(A=>t(Ir,{variant:A,variants:C,updateVariant:U=>V(U,A.id),removeVariant:()=>k(U=>mt(U.filter(ue=>ue.id!==A.id),1e3)),error:$.error},A.id))}),t(re,{onClick:v,variant:"outlined",permission:pe,projectId:c,environmentId:e==null?void 0:e.name,children:"Add variant"}),t(Er,{}),t(x,{condition:C.length>0,show:i(M,{children:[t(xr,{children:t("p",{children:"Stickiness"})}),i(_t,{children:["By overriding the stickiness you can control which parameter is used to ensure consistent traffic allocation across variants."," ",t(pt,{href:"https://docs.getunleash.io/reference/feature-toggle-variants",target:"_blank",rel:"noreferrer",children:"Read more"})]}),t("div",{children:t(Ar,{value:T,label:"",editable:!0,onChange:A=>j(A.target.value)})})]}),elseShow:t(_t,{children:"This environment has no variants. Get started by adding a variant."})}),i(Tr,{severity:"error",hidden:!N,children:[t("strong",{children:"Error: "}),N]}),i(Dr,{children:[t(de,{"data-testid":"DIALOGUE_CONFIRM_ID",type:"submit",variant:"contained",color:"primary",disabled:!ee,children:F?P:"Save variants"}),t(Rr,{onClick:Fe,children:"Cancel"})]})]})]})})},kr=d("div")(({theme:e})=>({padding:e.spacing(3),borderRadius:e.shape.borderRadiusLarge,border:`1px solid ${e.palette.divider}`,"&:not(:last-child)":{marginBottom:e.spacing(3)}})),$r=d("div")({display:"flex",alignItems:"center",justifyContent:"space-between","& > div":{display:"flex",alignItems:"center"}}),Pr=d(nn,{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.neutral.border:e.palette.primary.main})),Br=d("span",{shouldForwardProp:e=>e!=="deprecated"})(({theme:e,deprecated:n})=>({color:n?e.palette.text.secondary:e.palette.text.primary,marginLeft:e.spacing(1.25),fontWeight:e.fontWeight.bold})),Or=d("p")(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary,marginBottom:e.spacing(1.5)})),Mr=d("div")(({theme:e})=>({margin:e.spacing(3,0)})),_r=d("div")(({theme:e})=>({display:"flex",alignItems:"center",gap:e.spacing(1.5),marginBottom:e.spacing(.5)})),jr=({environment:e,searchValue:n,children:a})=>{var r;const s=e.variants??[],o=((r=s[0])==null?void 0:r.stickiness)||"default";return i(kr,{children:[i($r,{children:[i("div",{children:[t(Pr,{deprecated:!e.enabled}),t(Br,{deprecated:!e.enabled,children:e.name})]}),a]}),t(x,{condition:s.length>0,show:i(M,{children:[t(Mr,{children:t(wa,{variants:s,searchValue:n})}),t(x,{condition:s.length>1,show:i(M,{children:[i(_r,{children:[t("p",{children:"Stickiness:"}),t(ve,{children:o})]}),i(Or,{children:["By overriding the stickiness you can control which parameter is used to ensure consistent traffic allocation across variants."," ",t(pt,{href:"https://docs.getunleash.io/reference/feature-toggle-variants",target:"_blank",rel:"noreferrer",children:"Read more"})]})]})})]})})]})},Lr=d(Ce)(({theme:e})=>({"& span":{fontSize:e.fontSizes.smallBody}})),Vr=({environment:e,permission:n,projectId:a,environmentId:s,onCopyVariantsFrom:o,otherEnvsWithVariants:r})=>{const[c,l]=f.useState(null),u=!!c,p=e.variants??[];return t(x,{condition:r.length>0&&p.length===0,show:i(M,{children:[t(re,{onClick:g=>{l(g.currentTarget)},id:`copy-from-menu-${e.name}`,"aria-controls":u?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":u?"true":void 0,variant:"outlined",permission:n,projectId:a,environmentId:s,children:"Copy variants from"}),t(Re,{anchorEl:c,open:u,onClose:()=>l(null),MenuListProps:{"aria-labelledby":`copy-from-menu-${e.name}`},children:r.map(g=>t(me,{onClick:()=>o(g,e),children:t(Lr,{children:`Copy from ${g.name}`})},g.name))})]})})},zr=({permission:e,projectId:n,environment:a,checked:s,onClick:o,...r})=>{const c=nt(e,n,a);return i(me,{disabled:!c,onClick:o,...r,children:[t(xa,{checked:s}),a]})},Nr=d(Re)(({theme:e})=>({"& > div > ul":{display:"flex",flexDirection:"column",justifyContent:"center","& > li":{padding:e.spacing(0,1)}}})),Wr=d("div")(({theme:e})=>({margin:e.spacing(1,2)})),qr=d(de)(({theme:e})=>({marginTop:e.spacing(2)})),Hr=({current:e,environments:n,permission:a,projectId:s,onSubmit:o})=>{var E;const[r,c]=f.useState(null),l=!!r,[u,p]=f.useState([]),g=y=>{p(C=>[...C,y])},h=y=>{p(C=>C.filter(({name:k})=>k!==y.name))},m=y=>{u.includes(y)?h(y):g(y)},b=()=>{p([]),c(null)},S=((E=n.find(y=>y.name===e))==null?void 0:E.variants)??[];return t(x,{condition:S.length>0&&n.length>1,show:i(M,{children:[t(de,{onClick:y=>{c(y.currentTarget)},id:`push-to-menu-${e}`,"aria-controls":l?"basic-menu":void 0,"aria-haspopup":"true","aria-expanded":l?"true":void 0,variant:"outlined",children:"Copy to environment"}),i(Nr,{anchorEl:r,open:l,onClose:()=>c(null),MenuListProps:{"aria-labelledby":`push-to-menu-${e}`},children:[n.filter(y=>y.name!==e).map(y=>t(zr,{projectId:s,permission:a,environment:y.name,checked:u.includes(y),onClick:()=>m(y)},y.name)),i(Wr,{children:[t(Te,{}),i(qr,{variant:"outlined",onClick:()=>{o(u),b()},disabled:u.length===0,children:["Push to selected (",u.length,")"]})]})]})]})})},Ur=d(le)(({theme:e})=>({marginBottom:e.spacing(2),"& code":{fontWeight:e.fontWeight.bold}})),Gr=({mode:e})=>i(Ur,{severity:"info",children:["Variant allows you to return a variant object if the"," ",e==="feature"?"feature toggle is considered enabled ":"this strategy is active ","for the current request. When using variants you should use the"," ",t("code",{children:"getVariant()"})," method in the Client SDK."]}),Yr=d("div")(({theme:e})=>({display:"flex",gap:e.spacing(1.5)})),Kr=()=>{const{setToastData:e,setToastApiError:n}=G(),a=Ut(),s=je(a.breakpoints.down("md")),o=D("projectId"),r=D("featureId"),{feature:c,refetchFeature:l,loading:u}=z(o,r),{patchFeatureEnvironmentVariants:p,overrideVariantsInEnvironments:g}=Ve(),{refetch:h}=ie(o),{addChange:m}=Ee(),{isChangeRequestConfigured:b}=ae(o),[S,E]=f.useState(""),[y,C]=f.useState(),[k,B]=f.useState(!1),_=f.useMemo(()=>{var w;return((w=c==null?void 0:c.environments)==null?void 0:w.map(P=>({...P,crEnabled:b(P.name)})))||[]},[c.environments]),V=(w,P)=>Ra(w,P),v=(w,P)=>{try{const F=Da(P,1e3);return{patch:V(w,F)}}catch(F){return{patch:[],error:L(F)}}},R=w=>({feature:r,action:"patchVariant",payload:{variants:w}}),$=async(w,P)=>{if(w.crEnabled)await m(o,w.name,R(P)),h();else{const F=w.variants??[],{patch:T,error:I}=v(F,P);if(T.length===0)return;if(I){e({type:"error",title:I});return}await p(o,r,w.name,T)}l()},H=async(w,P)=>{try{const F=P.filter(({crEnabled:j})=>j),T=P.filter(({crEnabled:j})=>!j);F.length&&await Promise.all(F.map(j=>m(o,j.name,R(w)))),T.length&&await g(o,r,w,T.map(({name:j})=>j)),h(),l();const I=T.length?`Variants pushed to ${T.length===1?T[0].name:`${T.length} environments`}`:"",O=F.length?`Variants push added to ${F.length===1?`${F[0].name} draft`:`${F.length} drafts`}`:"",W=`${I}${I&&O?". ":""}${O}`;e({title:W,type:"success"})}catch(F){n(L(F))}},Z=w=>{C(w),B(!0)},oe=async w=>{if(y)try{await $(y,w),B(!1),e({title:y.crEnabled?"Variant changes added to draft":"Variants updated successfully",type:"success"})}catch(P){n(L(P))}},ee=async(w,P)=>{try{const F=w.variants??[];await $(P,F),e({title:P.crEnabled?"Variants copy added to draft":"Variants copied successfully",type:"success"})}catch(F){n(L(F))}};return i(gt,{isLoading:u,header:t(Ea,{title:"Variants",actions:t(x,{condition:!s,show:t(M,{children:t(yt,{initialValue:S,onChange:E})})}),children:t(x,{condition:s,show:t(yt,{initialValue:S,onChange:E})})}),children:[t(Gr,{mode:"feature"}),t(Aa,{}),_.map(w=>{var F;const P=_.filter(({name:T,variants:I})=>T!==w.name&&(I==null?void 0:I.length));return t(jr,{environment:w,searchValue:S,children:i(Yr,{children:[t(Hr,{current:w.name,environments:_,permission:pe,projectId:o,onSubmit:T=>H(w.variants??[],T)}),t(Vr,{environment:w,permission:pe,projectId:o,environmentId:w.name,onCopyVariantsFrom:ee,otherEnvsWithVariants:P}),t(x,{condition:!!((F=w.variants)!=null&&F.length),show:t(X,{"data-testid":"EDIT_VARIANTS_BUTTON",onClick:()=>Z(w),permission:pe,projectId:o,environmentId:w.name,tooltipProps:{title:"Edit variants"},children:t(be,{})}),elseShow:t(re,{"data-testid":"ADD_VARIANT_BUTTON",onClick:()=>Z(w),variant:"outlined",permission:pe,projectId:o,environmentId:w.name,children:"Add variant"})})]})},w.name)}),t(Fr,{environment:y,open:k,setOpen:B,getApiPayload:v,getCrPayload:R,onConfirm:oe})]})},Jr=ye("api/admin/client-metrics/features"),yn=(e,n)=>{const a=ye(`api/admin/client-metrics/features/${e}/raw?hoursBack=${n}`),{data:s,error:o}=_e(a,()=>Qr(a)),r=f.useCallback(()=>{rt(Jr).catch(console.warn)},[]);return{featureMetrics:s==null?void 0:s.data,loading:!o&&!s,refetchFeatureMetrics:r,error:o}},Qr=e=>fetch(e).then(xe("Features")).then(n=>n.json()).then(),Xr=d("h2")(({theme:e})=>({margin:0,marginBottom:e.spacing(1),fontSize:e.fontSizes.smallBody,fontWeight:e.fontWeight.thin,color:e.palette.text.secondary})),we=48,Zr=({hoursBack:e,setHoursBack:n})=>{const a=s=>{n(ei(s))};return i("div",{children:[t(Xr,{children:"Period"}),t(Kt,{name:"feature-metrics-period",id:"feature-metrics-period",options:ti,value:String(e),onChange:a,fullWidth:!0})]})},ei=e=>{switch(e){case"1":return 1;case"24":return 24;default:return we}},ti=[{key:"1",label:"Last hour"},{key:"24",label:"Last 24 hours"},{key:`${we}`,label:`Last ${we} hours`}],ni=({value:e})=>{const{locationSettings:n}=Jt(),a=e?e instanceof Date?St(e,n.locale):St(Qt(e),n.locale):void 0;return t(an,{lineClamp:1,children:a})},ai=({metrics:e,tableSectionId:n})=>{const a=je(Ia.breakpoints.down("md")),s=f.useMemo(()=>({sortBy:[{id:"timestamp"}]}),[]),{getTableProps:o,getTableBodyProps:r,headerGroups:c,rows:l,prepareRow:u,setHiddenColumns:p}=qe.useTable({initialState:s,columns:jt,data:e,autoResetHiddenColumns:!1,disableSortRemove:!0,defaultColumn:{Cell:an}},qe.useGlobalFilter,qe.useSortBy);return Fa([{condition:a,columns:["appName","environment"]}],p,jt),e.length===0?null:i(ka,{...o(),rowHeight:"standard",id:n,children:[t($a,{headerGroups:c}),t(Pa,{...r(),children:l.map(g=>(u(g),t(Ba,{hover:!0,...g.getRowProps(),children:g.cells.map(h=>t(Oa,{...h.getCellProps(),children:h.render("Cell")}))})))})]})},jt=[{id:"Icon",width:"1%",disableSortBy:!0,Cell:()=>t(Ma,{icon:t(mo,{color:"disabled"})})},{Header:"Time",accessor:"timestamp",Cell:e=>t(ni,{value:e.row.original.timestamp})},{Header:"Application",accessor:"appName"},{Header:"Environment",accessor:"environment"},{id:"requested",Header:"Requested",accessor:e=>e.yes+e.no},{Header:"Exposed",accessor:"yes"}],oi=({metrics:e,...n})=>{const a=f.useMemo(()=>e.reduce((o,r)=>o+r.yes,0),[e]),s=f.useMemo(()=>e.reduce((o,r)=>o+r.no,0),[e]);return t(hn,{...n,totalYes:a,totalNo:s})},si=({metrics:e,hoursBack:n})=>{const a=bt(),s=bt();return e.length===0?i(Y,{mt:6,children:[t(q,{variant:"body1",paragraph:!0,children:"We have yet to receive any metrics for this feature toggle in the selected time period."}),t(q,{variant:"body1",paragraph:!0,children:"Please note that, since the SDKs send metrics on an interval, it might take some time before metrics appear."})]}):i(f.Suspense,{fallback:null,children:[t(Y,{borderTop:1,pt:2,mt:3,borderColor:"divider",children:t(ri,{metrics:e,hoursBack:n,statsSectionId:a})}),t(Y,{mt:4,children:t(oi,{metrics:e,hoursBack:n,statsSectionId:a,tableSectionId:s})}),t(Y,{mt:4,children:t(ai,{metrics:e,tableSectionId:s})})]})},ri=_a.lazy(()=>ja(()=>import("./FeatureMetricsChart-a32146f8.js"),[])),st=e=>{const{search:n}=window.location,a=ce(),s=f.useMemo(()=>new URLSearchParams(n),[n]),o=f.useCallback(r=>{const c=new URLSearchParams(n);c.set(e,r),a({search:c.toString()},{replace:!0})},[e,n,a]);return[s.get(e)||void 0,o]},ii=e=>{const[n,a]=st(e),s=f.useCallback(o=>a(String(o)),[a]);return[Number.isFinite(Number(n))?Number(n):void 0,s]},ci=d("h2")(({theme:e})=>({margin:0,marginBottom:e.spacing(1.5),fontSize:e.fontSizes.smallBody,fontWeight:e.fontWeight.thin,color:e.palette.text.secondary})),li=d("ul")(({theme:e})=>({display:"flex",flexWrap:"wrap",gap:e.spacing(1),listStyleType:"none",padding:0,minHeight:"100%"})),di=d("li")(({theme:e})=>({"& > [aria-pressed=true]":{backgroundColor:e.palette.background.alternative,color:e.palette.primary.contrastText},"& > [aria-pressed=true]:hover":{backgroundColor:e.palette.primary.light}})),Lt=({title:e,values:n,value:a,setValue:s})=>{const o=c=>()=>{n.has(c)&&s(c)},r=f.useMemo(()=>Array.from(n).sort((c,l)=>c.localeCompare(l)),[n]);return i("div",{children:[t(ci,{children:e}),t(li,{children:r.map(c=>t(di,{children:t(Zt,{label:c,onClick:o(c),"aria-pressed":c===a,sx:La})},c))})]})},ui=()=>{const e=D("projectId"),n=D("featureId"),a=pi(e,n),s=gi(n);en("Metrics");const[o=we,r]=ii("hoursBack"),{featureMetrics:c}=yn(n,o),[l,u]=f.useState(c);f.useEffect(()=>{c&&u(c)},[c]);const p=Array.from(a)[0],g=Array.from(s)[0],[h=p,m]=st("environment"),[b=g,S]=st("application"),E=f.useMemo(()=>l==null?void 0:l.filter(y=>y.environment===h).filter(y=>y.appName===b),[l,h,b]);return E?i(gt,{children:[i(te,{container:!0,component:"header",spacing:2,children:[t(te,{item:!0,xs:12,md:5,children:t(x,{condition:a.size>0,show:t(Lt,{title:"Environments",values:a,value:h,setValue:m})})}),t(te,{item:!0,xs:12,md:5,children:t(x,{condition:s.size>0,show:t(Lt,{title:"Applications",values:s,value:b,setValue:S})})}),t(te,{item:!0,xs:12,md:2,children:t(Zr,{hoursBack:o,setHoursBack:r})})]}),t(si,{metrics:E,hoursBack:o})]}):null},pi=(e,n)=>{const{feature:a}=z(e,n),s=a.environments.map(o=>o.name);return new Set(s)},gi=e=>{const{featureMetrics:n=[]}=yn(e,we),a=n.map(s=>s.appName);return new Set(a)},hi=(e,n)=>{const a=new Set(e),s=new Set(n);return a.size!==s.size?!1:[...a].every(o=>s.has(o))},Vt=d("div")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),zt=d(le)(({theme:e})=>({marginBottom:e.spacing(1)})),fi=d(dt)({padding:0}),mi=({projectId:e,open:n,onClose:a,onClick:s,feature:o,changeRequests:r})=>{const c=D("projectId"),{project:l}=on(e),{isChangeRequestConfiguredInAnyEnv:u}=ae(e),p=u(),g=f.useMemo(()=>hi(o.environments.map(m=>m.name),l.environments.map(m=>m.environment)),[o,l]),h=r?r.length>0:!1;return t(x,{condition:g&&!h&&!p,show:t(ne,{open:n,onClose:a,onClick:s,title:"Confirm change project",primaryButtonText:"Change project",secondaryButtonText:"Cancel",children:i(Vt,{children:[t(zt,{severity:"success",children:"This feature toggle is compatible with the new project."}),t("p",{children:"Are you sure you want to change the project for this toggle?"})]})}),elseShow:t(ne,{open:n,onClick:a,title:"Confirm change project",primaryButtonText:"Close",children:i(Vt,{children:[t(zt,{severity:"warning",children:"Cannot proceed with the move"}),t(x,{condition:!g,show:t("p",{children:"In order to move a feature toggle between two projects, both projects must have the exact same environments enabled."})}),t(x,{condition:h,show:i(M,{children:[t("p",{children:"The feature toggle must not have any pending change requests. This feature toggle is currently referenced in the following change requests:"}),t(fi,{children:r==null?void 0:r.map(m=>t(ge,{children:i(K,{to:`/projects/${c}/change-requests/${m.id}`,children:["View change request"," ",m.id]})},m.id))})]})}),t(x,{condition:p,show:i("p",{children:["You're not allowed to move the feature to project"," ",t(K,{to:`/projects/${e}/settings/change-requests`,children:e}),". This project has change requests enabled."]})})]})})})},yi=e=>fetch(e).then(xe("ChangeRequest")).then(n=>n.json()),Si=(e,n)=>{const{data:a,error:s,mutate:o}=Va([],ye(`api/admin/projects/${e}/change-requests/pending/${n}`),yi);return{changeRequests:a,loading:!s&&!a,refetch:o,error:s}},bi=()=>{const{hasAccess:e}=f.useContext(ct),n=D("projectId"),a=D("featureId"),{feature:s,refetchFeature:o}=z(n,a),[r,c]=f.useState(!1),{changeFeatureProject:l}=Ve(),{setToastData:u,setToastApiError:p}=G(),[g,h]=f.useState(n),{projects:m}=za(),b=ce(),{changeRequests:S}=Si(n,a),E=async()=>{try{g&&(await l(n,a,g),o(),u({title:"Project changed",type:"success"}),c(!1),b(`/projects/${g}/features/${a}/settings`,{replace:!0}))}catch(C){p(L(C))}},y=f.useMemo(()=>m.map(C=>C.id).filter(C=>e(Ct,C)),[m,e]);return y.length===0?null:i(M,{children:[t(Na,{value:g,onChange:h,label:"Project",filter:C=>y.includes(C),enabled:!0}),t(re,{permission:Ct,onClick:()=>c(!0),disabled:g===n,projectId:n,children:"Save"}),t(mi,{changeRequests:S,projectId:g,open:r,feature:s,onClose:()=>c(!1),onClick:E})]})},Ci=d("div")({display:"flex",alignItems:"center"}),vi=d(q)(({theme:e})=>({fontSize:e.fontSizes.mainHeader})),Ti=({projectId:e,featureId:n})=>{var r;const{feature:a}=z(e,n),s=ce();return i(M,{children:[i(Ci,{children:[t(vi,{children:"Feature information"}),t(X,{permission:he,projectId:e,"data-loading":!0,onClick:()=>{s(`/projects/${e}/features/${n}/edit`)},tooltipProps:{title:"Edit"},children:t(be,{})})]}),i(q,{children:["Name: ",t("strong",{children:a.name})]}),i(q,{children:["Description:"," ",t("strong",{children:(r=a.description)!=null&&r.length?a.description:"no description"})]}),i(q,{children:["Type: ",t("strong",{children:a.type})]}),i(q,{children:["Impression Data:"," ",t("strong",{children:a.impressionData?"enabled":"disabled"})]})]})},Be="metadata",tt="project",wi=d("div")(({theme:e})=>({width:"20%",borderRight:`1px solid ${e.palette.divider}`,padding:e.spacing(2,0),[e.breakpoints.down("md")]:{width:"35%"}})),xi=d("div")(({theme:e})=>({padding:e.spacing(4),display:"flex",flexDirection:"column",width:400,"& > *":{margin:e.spacing(1,0)}})),Ei=()=>{const e=D("projectId"),n=D("featureId"),[a,s]=f.useState(Be),{uiConfig:o}=ut();return t(gt,{header:"Settings",sx:{padding:0},children:i(Y,{sx:{display:"flex"},children:[t(wi,{children:i(dt,{children:[t(ge,{sx:{padding:"0.75rem 2rem"},button:!0,onClick:()=>s(Be),selected:a===Be,children:"Metadata"},0),t(ge,{sx:{padding:"0.75rem 2rem"},button:!0,onClick:()=>s(tt),selected:a===tt,hidden:!o.flags.P,children:"Project"},1)]})}),i(xi,{children:[t(x,{condition:a===Be,show:t(Ti,{projectId:e,featureId:n})}),t(x,{condition:a===tt&&o.flags.P,show:t(bi,{})})]})]})})},Ai=({stale:e,showActive:n=!0})=>!e&&!n?null:t("div",{"data-loading":!0,style:{marginLeft:"8px"},children:t(ve,{color:e?"error":"success",title:e?"Feature toggle is deprecated.":"Feature toggle is active.",children:e?"Stale":"Active"})}),Nt=d("strong")({wordBreak:"break-all"}),Di=()=>{const e=D("projectId"),n=D("featureId"),{archivedFeatures:a}=Wa(),s=qa(e,{name:n});return a?a.some(r=>r.name===n)?i("p",{children:["The feature ",t(Nt,{children:n})," has been archived. You can find it on the"," ",t(K,{to:`/projects/${e}/archive`,children:"project archive page"}),"."]}):i("p",{children:["The feature ",t(Nt,{children:n})," does not exist. Would you like to"," ",t(K,{to:s,children:"create it"}),"?"]}):null},Ri=d("div")(({theme:e})=>({backgroundColor:e.palette.background.paper,borderRadius:e.shape.borderRadiusLarge,marginBottom:e.spacing(2)})),Ii=d("div")(({theme:e})=>({padding:e.spacing(2,4,2,2),display:"flex",justifyContent:"space-between",alignItems:"center",[e.breakpoints.down(500)]:{flexDirection:"column"}})),Fi=d("div")({display:"flex",alignItems:"center"}),ki=d("h1")(({theme:e})=>({fontSize:e.fontSizes.mainHeader,fontWeight:"normal",display:"flex",alignItems:"center",wordBreak:"break-all"})),$i=d("div")({flexShrink:0,display:"flex"}),Pi=d("div")(({theme:e})=>({width:"100%",backgroundColor:e.palette.divider,height:"1px"})),Bi=d("div")(({theme:e})=>({padding:e.spacing(0,4)})),Oi=d(Ha)(({theme:e})=>({textTransform:"none",width:"auto",fontSize:e.fontSizes.bodySize,padding:"0 !important",[e.breakpoints.up("md")]:{minWidth:160}})),Li=()=>{const e=D("projectId"),n=D("featureId"),{refetch:a}=on(e),{favorite:s,unfavorite:o}=Ua(),{refetchFeature:r}=z(e,n),[c,l]=f.useState(!1),[u,p]=f.useState(!1),[g,h]=f.useState(!1),m=je("(max-width:500px)"),{feature:b,loading:S,error:E,status:y}=z(e,n),C=ce(),{pathname:k}=Ga(),B=Ya(S),_=`/projects/${e}/features/${n}`,V=[{title:"Overview",path:`${_}`,name:"overview"},{title:"Metrics",path:`${_}/metrics`,name:"Metrics"},{title:"Variants",path:`${_}/variants`,name:"Variants"},{title:"Settings",path:`${_}/settings`,name:"Settings"},{title:"Event log",path:`${_}/logs`,name:"Event log"}],v=V.find($=>$.path===k)??V[0],R=async()=>{b!=null&&b.favorite?await o(e,b.name):await s(e,b.name),r()};return y===404?t(Di,{}):E!==void 0?t("div",{ref:B}):i("div",{ref:B,children:[i(Ri,{children:[i(Ii,{children:[i(Fi,{children:[t(Ka,{onClick:R,isFavorite:b==null?void 0:b.favorite}),i(ki,{"data-loading":!0,children:[b.name," "]}),t(x,{condition:!m,show:t(Ai,{stale:b==null?void 0:b.stale})})]}),i($i,{children:[t(X,{permission:Ja,projectId:e,"data-loading":!0,component:K,to:`/projects/${e}/features/${n}/strategies/copy`,tooltipProps:{title:"Copy feature toggle"},children:t(Qa,{})}),t(X,{permission:Xa,projectId:e,tooltipProps:{title:"Archive feature toggle"},"data-loading":!0,onClick:()=>p(!0),children:t(fo,{})}),t(X,{onClick:()=>h(!0),permission:he,projectId:e,tooltipProps:{title:"Toggle stale state"},"data-loading":!0,children:t(uo,{})}),t(X,{onClick:()=>l(!0),permission:he,projectId:e,tooltipProps:{title:"Add tag"},"data-loading":!0,children:t(Za,{})})]})]}),t(Pi,{}),t(Bi,{children:t(eo,{value:v.path,indicatorColor:"primary",textColor:"primary",children:V.map($=>t(Oi,{label:$.title,value:$.path,onClick:()=>C($.path),"data-testid":`TAB-${$.title}`},$.title))})})]}),i(tn,{children:[t(se,{path:"metrics",element:t(ui,{})}),t(se,{path:"logs",element:t(So,{})}),t(se,{path:"variants",element:t(Kr,{})}),t(se,{path:"settings",element:t(Ei,{})}),t(se,{path:"*",element:t(mr,{})})]}),t(po,{isOpen:u,onConfirm:()=>{a(),C(`/projects/${e}`)},onClose:()=>p(!1),projectId:e,featureIds:[n]}),t(go,{isStale:b.stale,isOpen:g,onClose:()=>{h(!1),r()},featureId:n,projectId:e}),t(mn,{open:c,setOpen:l})]})};export{Li as default};