2025-12-17 13:07:35 +00:00
<!DOCTYPE html>
< html style = 'scrollbar-gutter: stable both-edges;' >
< head >
< meta charset = 'UTF-8' >
< meta name = 'color-scheme' content = 'dark light' >
< meta name = 'viewport' content = 'width=device-width, initial-scale=1.0' >
< title > Playwright Test Report< / title >
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
< script type = "module" > v a r N A = O b j e c t . d e f i n e P r o p e r t y ; v a r B A = ( l , u , c ) = > u i n l ? N A ( l , u , { e n u m e r a b l e : ! 0 , c o n f i g u r a b l e : ! 0 , w r i t a b l e : ! 0 , v a l u e : c } ) : l [ u ] = c ; v a r y n = ( l , u , c ) = > B A ( l , t y p e o f u ! = " s y m b o l " ? u + " " : u , c ) ; ( f u n c t i o n ( ) { c o n s t u = d o c u m e n t . c r e a t e E l e m e n t ( " l i n k " ) . r e l L i s t ; i f ( u & & u . s u p p o r t s & & u . s u p p o r t s ( " m o d u l e p r e l o a d " ) ) r e t u r n ; f o r ( c o n s t r o f d o c u m e n t . q u e r y S e l e c t o r A l l ( ' l i n k [ r e l = " m o d u l e p r e l o a d " ] ' ) ) f ( r ) ; n e w M u t a t i o n O b s e r v e r ( r = > { f o r ( c o n s t o o f r ) i f ( o . t y p e = = = " c h i l d L i s t " ) f o r ( c o n s t h o f o . a d d e d N o d e s ) h . t a g N a m e = = = " L I N K " & & h . r e l = = = " m o d u l e p r e l o a d " & & f ( h ) } ) . o b s e r v e ( d o c u m e n t , { c h i l d L i s t : ! 0 , s u b t r e e : ! 0 } ) ; f u n c t i o n c ( r ) { c o n s t o = { } ; r e t u r n r . i n t e g r i t y & & ( o . i n t e g r i t y = r . i n t e g r i t y ) , r . r e f e r r e r P o l i c y & & ( o . r e f e r r e r P o l i c y = r . r e f e r r e r P o l i c y ) , r . c r o s s O r i g i n = = = " u s e - c r e d e n t i a l s " ? o . c r e d e n t i a l s = " i n c l u d e " : r . c r o s s O r i g i n = = = " a n o n y m o u s " ? o . c r e d e n t i a l s = " o m i t " : o . c r e d e n t i a l s = " s a m e - o r i g i n " , o } f u n c t i o n f ( r ) { i f ( r . e p ) r e t u r n ; r . e p = ! 0 ; c o n s t o = c ( r ) ; f e t c h ( r . h r e f , o ) } } ) ( ) ; f u n c t i o n U A ( l ) { r e t u r n l & & l . _ _ e s M o d u l e & & O b j e c t . p r o t o t y p e . h a s O w n P r o p e r t y . c a l l ( l , " d e f a u l t " ) ? l . d e f a u l t : l } v a r M f = { e x p o r t s : { } } , E i = { } ; / * *
2025-12-17 13:07:35 +00:00
* @license React
* react-jsx-runtime.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var D1;function QA(){if(D1)return Ei;D1=1;var l=Symbol.for("react.transitional.element"),u=Symbol.for("react.fragment");function c(f,r,o){var h=null;if(o!==void 0& & (h=""+o),r.key!==void 0& & (h=""+r.key),"key"in r){o={};for(var v in r)v!=="key"& & (o[v]=r[v])}else o=r;return r=o.ref,{$$typeof:l,type:f,key:h,ref:r!==void 0?r:null,props:o}}return Ei.Fragment=u,Ei.jsx=c,Ei.jsxs=c,Ei}var M1;function zA(){return M1||(M1=1,Mf.exports=QA()),Mf.exports}var m=zA();const YA=15,xt=0,bn=1,LA=2,ye=-2,Ut=-3,j1=-4,xn=-5,Me=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],L2=1440,GA=0,XA=4,VA=9,ZA=5,qA=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,
2025-12-17 13:07:35 +00:00
* @license React
* react.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var T2;function B5(){if(T2)return dt;T2=1;var l=Symbol.for("react.transitional.element"),u=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),h=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),y=Symbol.for("react.suspense"),A=Symbol.for("react.memo"),E=Symbol.for("react.lazy"),S=Symbol.for("react.activity"),O=Symbol.iterator;function X(C){return C===null||typeof C!="object"?null:(C=O& & C[O]||C["@@iterator"],typeof C=="function"?C:null)}var B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,p={};function x(C,L,W){this.props=C,this.context=L,this.refs=p,this.updater=W||B}x.prototype.isReactComponent={},x.prototype.setState=function(C,L){if(typeof C!="object"& & typeof C!="function"& & C!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,C,L,"setState")},x.prototype.forceUpdate=function(C){this.updater.enqueueForceUpdate(this,C,"forceUpdate")};function R(){}R.prototype=x.prototype;function U(C,L,W){this.props=C,this.context=L,this.refs=p,this.updater=W||B}var Z=U.prototype=new R;Z.constructor=U,b(Z,x.prototype),Z.isPureReactComponent=!0;var F=Array.isArray;function j(){}var D={H:null,A:null,T:null,S:null},N=Object.prototype.hasOwnProperty;function K(C,L,W){var et=W.ref;return{$$typeof:l,type:C,key:L,ref:et!==void 0?et:null,props:W}}function J(C,L){return K(C.type,L,C.props)}function k(C){return typeof C=="object"& & C!==null& & C.$$typeof===l}function nt(C){var L={"=":"=0",":":"=2"};return"$"+C.replace(/[=:]/g,function(W){return L[W]})}var P=/\/+/g;function st(C,L){return typeof C=="object"& & C!==null& & C.key!=null?nt(""+C.key):L.toString(36)}function it(C){switch(C.status){case"fulfilled":return C.value;case"rejected":throw C.reason;default:switch(typeof C.status=="string"?C.then(j,j):(C.status="pending",C.then(function(L){C.status==="pending"& & (C.status="fulfilled",C.value=L)},function(L){C.status==="pending"& & (C.status="rejected",C.reason=L)})),C.status){case"fulfilled":return C.value;case"rejected":throw C.reason}}throw C}function H(C,L,W,et,rt){var ot=typeof C;(ot==="undefined"||ot==="boolean")&&(C=null); var gt=!1;if(C===null)gt=!0;else switch(ot){case"bigint":case"string":case"number":gt=!0;break;case"object":switch(C.$$typeof){case l:case u:gt=!0;break;case E:return gt=C._init,H(gt(C._payload),L,W,et,rt)}}if(gt)return rt=rt(C),gt=et===""?"."+st(C,0):et,F(rt)?(W="",gt!=null& & (W=gt.replace(P,"$& /")+"/"),H(rt,L,W,"",function(On){return On})):rt!=null&&(k(rt)&&(rt=J(rt,W+(rt.key==null||C&&C.key===rt.key?"":(""+rt.key).replace(P,"$&/")+"/")+gt)),L.push(rt)),1; gt=0;var Ft=et===""?".":et+":";if(F(C))for(var Qt=0;Qt< C.length ; Qt + + ) et = C[Qt],ot=Ft+st(et,Qt),gt+=H(et,L,W,ot,rt);else if ( Qt = X(C),typeof Qt = ="function")for(C=Qt.call(C),Qt=0;!(et=C.next()).done;)et=et.value,ot=Ft+st(et,Qt++),gt+=H(et,L,W,ot,rt);else if ( ot = =="object"){if(typeof C . then = ="function")return H ( it ( C ) , L , W , et , rt ) ; throw L = String(C),Error("Objects are not valid as a React child ( found: " + ( L = =="[object Object ] " ? " object with keys { " + Object . keys ( C ) . join ( " , " ) + " } " :L ) + " ) . If you meant to render a collection of children , use an array instead . " ) } return gt } function _ ( C , L , W ) { if ( C = =null)return C ; var et = [],rt=0;return H ( C , et , " " , " " , function ( ot ) { return L . call ( W , ot , rt + + ) } ) , et } function $ ( C ) { if ( C . _status = ==-1){var L = C._result;L=L(),L.then(function(W){(C._status===0||C._status===-1)&&(C._status=1,C._result=W)},function(W){(C._status===0||C._status===-1)&&(C._status=2,C._result=W)}),C._status===-1&&(C._status=0,C._result=L)}if(C._status===1)return C . _result . default ; throw C . _result } var ht = typeof reportError = ="function"?reportError:function(C){if(typeof window = ="object"&&typeof window . ErrorEvent = ="function"){var L = new window . ErrorEvent ( " error " , { bubbles: ! 0 , cancelable: ! 0 , message:typeof C = ="object"&&C!==null&&typeof C . message = ="string"?String(C.message):String(C),error:C});if(!wi
2025-12-17 13:07:35 +00:00
* @license React
* scheduler.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var O2;function U5(){return O2||(O2=1,(function(l){function u(H,_){var $=H.length;H.push(_);t:for(;0< $;){var ht=$-1>>>1,tt=H[ht];if(0< r ( tt , _ ) ) H [ ht ] = _ , H [ $ ] = tt , $ = ht ; else break t } } function c ( H ) { return H . length = ==0?null:H[0]}function f ( H ) { if ( H . length = ==0)return null ; var _ = H[0],$=H.pop();if($!==_){H[0]=$;t:for(var ht = 0,tt=H.length,C=tt > >>1;ht< C ; ) { var L = 2*(ht+1)-1,W=H[L],et=L+1,rt=H[et];if(0 > r(W,$))et< tt & & 0 > r(rt,W)?(H[ht]=rt,H[et]=$,ht=et):(H[ht]=W,H[L]=$,ht=L);else if(et< tt & & 0 > r(rt,$))H[ht]=rt,H[et]=$,ht=et;else break t}}return _}function r(H,_){var $=H.sortIndex-_.sortIndex;return $!==0?$:H.id-_.id}if(l.unstable_now=void 0,typeof performance=="object"& & typeof performance.now=="function"){var o=performance;l.unstable_now=function(){return o.now()}}else{var h=Date,v=h.now();l.unstable_now=function(){return h.now()-v}}var y=[],A=[],E=1,S=null,O=3,X=!1,B=!1,b=!1,p=!1,x=typeof setTimeout=="function"?setTimeout:null,R=typeof clearTimeout=="function"?clearTimeout:null,U=typeof setImmediate< "u"?setImmediate:null;function Z(H){for(var _=c(A);_!==null;){if(_.callback===null)f(A);else if(_.startTime< =H)f(A),_.sortIndex=_.expirationTime,u(y,_);else break;_=c(A)}}function F(H){if(b=!1,Z(H),!B)if(c(y)!==null)B=!0,j||(j=!0,nt());else{var _=c(A);_!==null& & it(F,_.startTime-H)}}var j=!1,D=-1,N=5,K=-1;function J(){return p?!0:!(l.unstable_now()-K< N ) } function k ( ) { if ( p = !1,j){var H = l.unstable_now();K=H;var _ = !0;try{t:{B=!1,b&&(b=!1,R(D),D=-1),X=!0;var $ = O ; try { e: { for ( Z ( H ) , S = c(y);S!==null&&!(S.expirationTime > H&&J()); ){var ht=S.callback;if(typeof ht=="function"){S.callback=null,O=S.priorityLevel;var tt=ht(S.expirationTime< =H);if(H=l.unstable_now(),typeof tt=="function"){S.callback=tt,Z(H),_=!0;break e}S===c(y)& & f(y),Z(H)}else f(y);S=c(y)}if(S!==null)_=!0;else{var C=c(A);C!==null& & it(F,C.startTime-H),_=!1}}break t}finally{S=null,O=$,X=!1}_=void 0}}finally{_?nt():j=!1}}}var nt;if(typeof U=="function")nt=function(){U(k)};else if(typeof MessageChannel< "u"){var P=new MessageChannel,st=P.port2;P.port1.onmessage=k,nt=function(){st.postMessage(null)}}else nt=function(){x(k,0)};function it(H,_){D=x(function(){H(l.unstable_now())},_)}l.unstable_IdlePriority=5,l.unstable_ImmediatePriority=1,l.unstable_LowPriority=4,l.unstable_NormalPriority=3,l.unstable_Profiling=null,l.unstable_UserBlockingPriority=2,l.unstable_cancelCallback=function(H){H.callback=null},l.unstable_forceFrameRate=function(H){0>H||125< H ? console . error ( " forceFrameRate takes a positive int between 0 and 125 , forcing frame rates higher than 125 fps is not supported " ) :N = 0<H?Math.floor(1e3/H):5},l.unstable_getCurrentPriorityLevel=function(){return O } , l . unstable_next = function(H){switch(O){case 1:case 2:case 3:var _ = 3;break;default:_=O}var $ = O ; O = _;try{return H ( ) } finally { O = $}},l.unstable_requestPaint=function(){p=!0},l.unstable_runWithPriority=function(H,_){switch(H){case 1:case 2:case 3:case 4:case 5:break ; default:H = 3}var $ = O ; O = H;try{return _ ( ) } finally { O = $}},l.unstable_scheduleCallback=function(H,_,$){var ht = l.unstable_now();switch(typeof $ = = " object " & & $ ! = = null ? ( $ = $ . delay , $ = typeof $ = = " number " & & 0 < $ ? ht + $ :ht ) : $ = ht , H ) { case 1:var tt = -1;break;case 2:tt = 250;break;case 5:tt = 1073741823;break;case 4:tt = 1e4;break;default:tt=5e3}return tt = $+tt,H={id:E++,callback:_,priorityLevel:H,startTime:$,expirationTime:tt,sortIndex:-1},$ > ht?(H.sortIndex=$,u(A,H),c(y)===null& & H===c(A)& & (b?(R(D),D=-1):b=!0,it(F,$-ht))):(H.sortIndex=tt,u(y,H),B||X||(B=!0,j||(j=!0,nt()))),H},l.unstable_shouldYield=J,l.unstable_wrapCallback=function(H){var _=O;return function(){var $=O;O=_;try{return H.apply(this,arguments)}finally{O=$}}}})(qf)),qf}var w2;function Q5(){return w2||(w2=1,Zf.exports=U5()),Zf.exports}var If={exports:{}},ce={};/**
2025-12-17 13:07:35 +00:00
* @license React
* react-dom.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var R2;function z5(){if(R2)return ce;R2=1;var l=xr();function u(y){var A="https://react.dev/errors/"+y;if(1< arguments.length ) { A + = " ? args [ ] = " + encodeURIComponent ( arguments [ 1 ] ) ; for ( var E = 2;E<arguments.length;E++)A+="&args[]="+encodeURIComponent(arguments[E])}return"Minified React error # " + y + " ; visit " + A + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings . " } function c ( ) { } var f = {d:{f:c,r:function(){throw Error ( u ( 522 ) ) } , D:c , C:c , L:c , m:c , X:c , S:c , M:c } , p:0 , findDOMNode:null } , r = Symbol.for("react.portal");function o ( y , A , E ) { var S = 3<arguments.length&&arguments[3]!==void 0 ? arguments [ 3 ] :null ; return { $ $ typeof:r , key:S = =null?null:""+S,children:y,containerInfo:A,implementation:E}}var h = l.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function v ( y , A ) { if ( y = =="font")return"";if(typeof A = ="string")return A = =="use-credentials"?A:""}return ce . __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = f,ce.createPortal=function(y,A){var E = 2<arguments.length&&arguments[2]!==void 0 ? arguments [ 2 ] :null ; if ( ! A | | A . nodeType ! = = 1 & & A . nodeType ! = = 9 & & A . nodeType ! = = 11 ) throw Error ( u ( 299 ) ) ; return o ( y , A , null , E ) } , ce . flushSync = function(y){var A = h.T,E=f.p;try{if(h.T=null,f.p=2,y)return y ( ) } finally { h . T = A,f.p=E,f.d.f()}},ce.preconnect=function(y,A){typeof y = ="string"&&(A?(A=A.crossOrigin,A=typeof A = ="string"?A==="use-credentials"?A:"":void 0 ) :A = null,f.d.C(y,A))},ce.prefetchDNS=function(y){typeof y = ="string"&&f.d.D(y)},ce.preinit=function(y,A){if(typeof y = ="string"&&A&&typeof A . as = ="string"){var E = A.as,S=v(E,A.crossOrigin),O=typeof A . integrity = ="string"?A.integrity:void 0 , X = typeof A . fetchPriority = ="string"?A.fetchPriority:void 0 ; E = =="style"?f.d.S(y,typeof A . precedence = ="string"?A.precedence:void 0 , { crossOrigin:S , integrity:O , fetchPriority:X } ) :E = =="script"&&f.d.X(y,{crossOrigin:S,integrity:O,fetchPriority:X,nonce:typeof A . nonce = ="string"?A.nonce:void 0 } ) } } , ce . preinitModule = function(y,A){if(typeof y = ="string")if(typeof A = ="object"&&A!==null){if(A.as==null||A.as==="script"){var E = v(A.as,A.crossOrigin);f.d.M(y,{crossOrigin:E,integrity:typeof A . integrity = ="string"?A.integrity:void 0 , nonce:typeof A . nonce = ="string"?A.nonce:void 0 } ) } } else A = =null&&f.d.M(y)},ce.preload=function(y,A){if(typeof y = ="string"&&typeof A = ="object"&&A!==null&&typeof A . as = ="string"){var E = A.as,S=v(E,A.crossOrigin);f.d.L(y,E,{crossOrigin:S,integrity:typeof A . integrity = ="string"?A.integrity:void 0 , nonce:typeof A . nonce = ="string"?A.nonce:void 0 , type:typeof A . type = ="string"?A.type:void 0 , fetchPriority:typeof A . fetchPriority = ="string"?A.fetchPriority:void 0 , referrerPolicy:typeof A . referrerPolicy = ="string"?A.referrerPolicy:void 0 , imageSrcSet:typeof A . imageSrcSet = ="string"?A.imageSrcSet:void 0 , imageSizes:typeof A . imageSizes = ="string"?A.imageSizes:void 0 , media:typeof A . media = ="string"?A.media:void 0 } ) } } , ce . preloadModule = function(y,A){if(typeof y = ="string")if(A){var E = v(A.as,A.crossOrigin);f.d.m(y,{as:typeof A . as = ="string"&&A.as!=="script"?A.as:void 0 , crossOrigin:E , integrity:typeof A . integrity = ="string"?A.integrity:void 0 } ) } else f . d . m ( y ) } , ce . requestFormReset = function(y){f.d.r(y)},ce.unstable_batchedUpdates=function(y,A){return y ( A ) } , ce . useFormState = function(y,A,E){return h . H . useFormState ( y , A , E ) } , ce . useFormStatus = function(){return h . H . useHostTransitionStatus ( ) } , ce . version = "19.2.1" , ce } var D2 ; function Y5 ( ) { if ( D2 ) return If . exports ; D2 = 1;function l ( ) { if ( ! ( typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > "u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l)}catch(u){console.error(u)}}return l(),If.exports=z5(),If.exports}/**
2025-12-17 13:07:35 +00:00
* @license React
* react-dom-client.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var M2;function L5(){if(M2)return xi;M2=1;var l=Q5(),u=xr(),c=Y5();function f(t){var e="https://react.dev/errors/"+t;if(1< arguments.length ) { e + = " ? args [ ] = " + encodeURIComponent ( arguments [ 1 ] ) ; for ( var n = 2;n<arguments.length;n++)e+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error # " + t + " ; visit " + e + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings . " } function r ( t ) { return ! ( ! t | | t . nodeType ! = = 1 & & t . nodeType ! = = 9 & & t . nodeType ! = = 11 ) } function o ( t ) { var e = t,n=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e = t,(e.flags&4098)!==0&&(n=e.return),t=e.return;while(t)}return e . tag = ==3?n:null}function h ( t ) { if ( t . tag = ==13){var e = t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e . dehydrated } return null } function v ( t ) { if ( t . tag = ==31){var e = t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e . dehydrated } return null } function y ( t ) { if ( o ( t ) ! = = t ) throw Error ( f ( 188 ) ) } function A ( t ) { var e = t.alternate;if(!e){if(e=o(t),e===null)throw Error ( f ( 188 ) ) ; return e ! = = t ? null:t } for ( var n = t,a=e;;){var i = n.return;if(i===null)break;var s = i.alternate;if(s===null){if(a=i.return,a!==null){n=a;continue}break}if(i.child===s.child){for(s=i.child;s;){if(s===n)return y ( i ) , t ; if ( s = ==a)return y ( i ) , e ; s = s.sibling}throw Error ( f ( 188 ) ) } if ( n . return ! = = a . return ) n = i,a=s;else{for(var d = !1,g=i.child;g;){if(g===n){d=!0,n=i,a=s;break}if(g===a){d=!0,a=i,n=s;break}g=g.sibling}if(!d){for(g=s.child;g;){if(g===n){d=!0,n=s,a=i;break}if(g===a){d=!0,a=s,n=i;break}g=g.sibling}if(!d)throw Error ( f ( 189 ) ) } } if ( n . alternate ! = = a ) throw Error ( f ( 190 ) ) } if ( n . tag ! = = 3 ) throw Error ( f ( 188 ) ) ; return n . stateNode . current = ==n?t:e}function E ( t ) { var e = t.tag;if(e===5||e===26||e===27||e===6)return t ; for ( t = t.child;t!==null;){if(e=E(t),e!==null)return e ; t = t.sibling}return null } var S = Object.assign,O=Symbol.for("react.element"),X=Symbol.for("react.transitional.element"),B=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),p=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),R=Symbol.for("react.consumer"),U=Symbol.for("react.context"),Z=Symbol.for("react.forward_ref"),F=Symbol.for("react.suspense"),j=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),K=Symbol.for("react.activity"),J=Symbol.for("react.memo_cache_sentinel"),k=Symbol.iterator;function nt ( t ) { return t = ==null||typeof t ! = " object " ? null: ( t = k&&t[k]||t["@@iterator"],typeof t = ="function"?t:null)}var P = Symbol.for("react.client.reference");function st ( t ) { if ( t = =null)return null ; if ( typeof t = ="function")return t . $ $ typeof = ==P?null:t.displayName||t.name||null;if(typeof t = ="string")return t ; switch ( t ) { case b:return " Fragment " ; case x:return " Profiler " ; case p:return " StrictMode " ; case F:return " Suspense " ; case j:return " SuspenseList " ; case K:return " Activity " } if ( typeof t = ="object")switch(t.$$typeof){case B:return " Portal " ; case U:return t . displayName | | " Context " ; case R:return ( t . _context . displayName | | " Context " ) + " . Consumer " ; case Z:var e = t.render;return t = t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case D:return e = t.displayName||null,e!==null?e:st(t.type)||"Memo";case N:e = t._payload,t=t._init;try{return st ( t ( e ) ) } catch { } } return null } var it = Array.isArray,H=u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,_=c.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,$={pending:!1,data:null,method:null,action:null},ht=[],tt=-1;function C ( t ) { return { current:t } } function L ( t ) { 0 > tt||(t.current=ht[tt],ht[tt]=null,tt--)}function W(t,e){tt++,ht[tt]=t.current,t.current=e}var et=C(null),rt=C(null),ot=C(null),gt=C(null);function Ft(t,e){switch(W(ot,e),W(rt,t),W(et,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?Pd(t):0; break;default:if(t=e.tagName,e=e.namespaceURI)e=Pd(e),t=$d(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}L(et),W(et,t)}function Qt(){L(et),L(rt),L(ot)}function On(t){t.memoizedState!==null&&W(gt,t); var e=et.current,n=$d(e,t.type);e!==n& & (W(rt,t),W(et,n))}function
2025-12-17 13:07:35 +00:00
at`)?" (< anonymous > )":-1< n.stack.indexOf ( " @ " ) ? " @ unknown:0:0 " : " " } return `
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
`+wn+t+Ba}var Ua=!1;function Rn(t,e){if(!t||Ua)return"";Ua=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var a={DetermineComponentFrameRoot:function(){try{if(e){var I=function(){throw Error()};if(Object.defineProperty(I.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"& & Reflect.construct){try{Reflect.construct(I,[])}catch(G){var Y=G}Reflect.construct(t,[],I)}else{try{I.call()}catch(G){Y=G}t.call(I.prototype)}}else{try{throw Error()}catch(G){Y=G}(I=t())& & typeof I.catch=="function"& & I.catch(function(){})}}catch(G){if(G& & Y& & typeof G.stack=="string")return[G.stack,Y.stack]}return[null,null]}};a.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var i=Object.getOwnPropertyDescriptor(a.DetermineComponentFrameRoot,"name");i&&i.configurable&&Object.defineProperty(a.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"}); var s=a.DetermineComponentFrameRoot(),d=s[0],g=s[1];if(d& & g){var T=d.split(`
`),z=g.split(`
`);for(i=a=0;a< T.length & & ! T [ a ] . includes ( " DetermineComponentFrameRoot " ) ; ) a + + ; for ( ; i < z . length & & ! z [ i ] . includes ( " DetermineComponentFrameRoot " ) ; ) i + + ; if ( a = ==T.length||i===z.length)for(a=T.length-1,i=z.length-1;1<=a&&0<=i&&T[a]!==z[i];)i--;for(;1<=a&&0<=i;a--,i--)if(T[a]!==z[i]){if(a!==1||i!==1)do if ( a-- , i-- , 0 > i||T[a]!==z[i]){var V=`
`+T[a].replace(" at new "," at ");return t.displayName&&V.includes("<anonymous>")&&(V=V.replace("<anonymous>",t.displayName)),V}while(1<=a&&0<=i); break}}}finally{Ua=!1,Error.prepareStackTrace=n}return(n=t?t.displayName||t.name:"")?Ee(n):""}function Qa(t,e){switch(t.tag){case 26:case 27:case 5:return Ee(t.type);case 16:return Ee("Lazy");case 13:return t.child!==e& & e!==null?Ee("Suspense Fallback"):Ee("Suspense");case 19:return Ee("SuspenseList");case 0:case 15:return Rn(t.type,!1);case 11:return Rn(t.type.render,!1);case 1:return Rn(t.type,!0);case 31:return Ee("Activity");default:return""}}function Bi(t){try{var e="",n=null;do e+=Qa(t,n),n=t,t=t.return;while(t);return e}catch(a){return`
Error generating stack: `+a.message+`
`+a.stack}}var mc=Object.prototype.hasOwnProperty,gc=l.unstable_scheduleCallback,Ac=l.unstable_cancelCallback,om=l.unstable_shouldYield,dm=l.unstable_requestPaint,pe=l.unstable_now,hm=l.unstable_getCurrentPriorityLevel,Dr=l.unstable_ImmediatePriority,Mr=l.unstable_UserBlockingPriority,Ui=l.unstable_NormalPriority,mm=l.unstable_LowPriority,jr=l.unstable_IdlePriority,gm=l.log,Am=l.unstable_setDisableYieldValue,wl=null,be=null;function Dn(t){if(typeof gm=="function"& & Am(t),be& & typeof be.setStrictMode=="function")try{be.setStrictMode(wl,t)}catch{}}var xe=Math.clz32?Math.clz32:Em,vm=Math.log,ym=Math.LN2;function Em(t){return t>>>=0,t===0?32:31-(vm(t)/ym|0)|0}var Qi=256,zi=262144,Yi=4194304;function oa(t){var e=t&42; if(e!==0)return e;switch(t& -t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888; case 262144:case 524288:case 1048576:case 2097152:return t&3932160; case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560; case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Li(t,e,n){var a=t.pendingLanes;if(a===0)return 0;var i=0,s=t.suspendedLanes,d=t.pingedLanes;t=t.warmLanes;var g=a&134217727; return g!==0?(a=g& ~s,a!==0?i=oa(a):(d& =g,d!==0?i=oa(d):n||(n=g& ~t,n!==0& & (i=oa(n))))):(g=a& ~s,g!==0?i=oa(g):d!==0?i=oa(d):n||(n=a& ~t,n!==0& & (i=oa(n)))),i===0?0:e!==0& & e!==i& & (e& s)===0& & (s=i& -i,n=e& -e,s>=n||s===32& & (n& 4194048)!==0)?e:i}function Rl(t,e){return(t.pendingLanes& ~(t.suspendedLanes& ~t.pingedLanes)& e)===0}function pm(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Hr(){var t=Yi;return Yi< < =1,(Yi& 62914560)===0& & (Yi=4194304),t}function vc(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function Dl(t,e){t.pendingLanes|=e,e!==268435456& & (t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function bm(t,e,n,a,i,s){var d=t.pendingLanes;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=n,t.entangledLanes&=n,t.errorRecoveryDisabledLanes&=n,t.shellSuspendCounter=0; var g=t.entanglements,T=t.expirationTimes,z=t.hiddenUpdates;for(n=d&~n; 0< n ; ) { var V = 31-xe(n),I=1<<V;g[V]=0,T[V]=-1;var Y = z[V];if(Y!==null)for(z[V]=null,V=0;V<Y.length;V++){var G = Y[V];G!==null&&(G.lane&=-536870913)}n&=~I}a!==0&&Nr(t,a,0),s!==0&&i===0&&t.tag!==0&&(t.suspendedLanes|=s&~(d&~e))}function Nr ( t , e , n ) { t . pendingLanes | = e , t . suspendedLanes & = ~ e ; var a = 31-xe(e);t.entangledLanes|=e,t.entanglements[a]=t.entanglements[a]|1073741824|n&261930}function Br ( t , e ) { var n = t.entangledLanes|=e;for(t=t.entanglements;n;){var a = 31-xe(n),i=1<<a;i&e|t[a]&e&&(t[a]|=e),n&=~i}}function Ur ( t , e ) { var n = e&-e;return n = (n&42)!==0?1:yc(n),(n&(t.suspendedLanes|e))!==0?0:n}function yc ( t ) { switch ( t ) { case 2:t = 1;break;case 8:t = 4;break;case 32:t = 16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:t = 128;break;case 268435456:t = 134217728;break;default:t=0}return t } function Ec ( t ) { return t & = -t , 2 < t ? 8 < t ? ( t & 134217727 ) ! = = 0 ? 32:268435456:8:2 } function Qr ( ) { var t = _.p;return t ! = = 0 ? t: ( t = window.event,t===void 0 ? 32:x1 ( t . type ) ) } function zr ( t , e ) { var n = _.p;try{return _ . p = t,e()}finally{_.p=n}}var Mn = Math.random().toString(36).slice(2),te="__reactFiber$"+Mn,oe="__reactProps$"+Mn,za="__reactContainer$"+Mn,pc="__reactEvents$"+Mn,xm="__reactListeners$"+Mn,Sm="__reactHandles$"+Mn,Yr="__reactResources$"+Mn,Ml="__reactMarker$"+Mn;function
`).replace(eA,"")}function Wd(t,e){return e=Fd(e),Fd(t)===e}function Dt(t,e,n,a,i,s){switch(n){case"children":typeof a=="string"?e==="body"||e==="textarea"& & a===""||Za(t,a):(typeof a=="number"||typeof a=="bigint")&&e!=="body"&&Za(t,""+a); break;case"className":Xi(t,"class",a);break;case"tabIndex":Xi(t,"tabindex",a);break;case"dir":case"role":case"viewBox":case"width":case"height":Xi(t,n,a);break;case"style":Fr(t,a,s);break;case"data":if(e!=="object"){Xi(t,"data",a);break}case"src":case"href":if(a===""&&(e!=="a"||n!=="href")){t.removeAttribute(n); break}if(a==null||typeof a=="function"||typeof a=="symbol"||typeof a=="boolean"){t.removeAttribute(n);break}a=Zi(""+a),t.setAttribute(n,a);break;case"action":case"formAction":if(typeof a=="function"){t.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof s=="function"&&(n==="formAction"?(e!=="input"&&Dt(t,e,"name",i.name,i,null),Dt(t,e,"formEncType",i.formEncType,i,null),Dt(t,e,"formMethod",i.formMethod,i,null),Dt(t,e,"formTarget",i.formTarget,i,null)):(Dt(t,e,"encType",i.encType,i,null),Dt(t,e,"method",i.method,i,null),Dt(t,e,"target",i.target,i,null))); if(a==null||typeof a=="symbol"||typeof a=="boolean"){t.removeAttribute(n);break}a=Zi(""+a),t.setAttribute(n,a);break;case"onClick":a!=null&&(t.onclick=tn); break;case"onScroll":a!=null&&yt("scroll",t); break;case"onScrollEnd":a!=null&&yt("scrollend",t); break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(f(61));if(n=a.__html,n!=null){if(i.children!=null)throw Error(f(60));t.innerHTML=n}}break;case"multiple":t.multiple=a& & typeof a!="function"& & typeof a!="symbol";break;case"muted":t.muted=a& & typeof a!="function"& & typeof a!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(a==null||typeof a=="function"||typeof a=="boolean"||typeof a=="symbol"){t.removeAttribute("xlink:href");break}n=Zi(""+a),t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":a!=null& & typeof a!="function"& & typeof a!="symbol"?t.setAttribute(n,""+a):t.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":a& & typeof a!="function"& & typeof a!="symbol"?t.setAttribute(n,""):t.removeAttribute(n);break;case"capture":case"download":a===!0?t.setAttribute(n,""):a!==!1& & a!=null& & typeof a!="function"& & typeof a!="symbol"?t.setAttribute(n,a):t.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":a!=null& & typeof a!="function"& & typeof a!="symbol"&&!isNaN(a)&&1<=a?t.setAttribute(n,a):t.removeAttribute(n); break;case"rowSpan":case"start":a==null||typeof a=="function"||typeof a=="symbol"||isNaN(a)?t.removeAttribute(n):t.setAttribute(n,a);break;case"popover":yt("beforetoggle",t),yt("toggle",t),Gi(t,"popover",a);break;case"xlinkActuate":$e(t,"http://www.w3.org/1999/xlink","xlink:actuate",a);break;case"xlinkArcrole":$e(t,"http://www.w3.org/1999/xlink","xlink:arcrole",a);break;case"xlinkRole":$e(t,"http://www.w3.org/1999/xlink","xlink:role",a);break;case"xlinkShow":$e(t,"http://www.w3.org/1999/xlink","xlink:show",a);break;case"xlinkTitle":$e(t,"http://www.w3.org/1999/xlink","xlink:title",a);break;case"xlinkType":$e(t,"http://www.w3.org/1999/xlink","xlink:type",a);break;case"xmlBase":$e(t,"http://www.w3.org/XML/1998/namespace","xml:ba
2025-12-17 13:07:35 +00:00
linear-gradient(-45deg, #80808020 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, #80808020 75%),
linear-gradient(-45deg, transparent 75%, #80808020 75%)`,backgroundSize:"20px 20px",backgroundPosition:"0 0, 0 10px, 10px -10px, -10px 0px",boxShadow:`rgb(0 0 0 / 10%) 0px 1.8px 1.9px,
rgb(0 0 0 / 15%) 0px 6.1px 6.3px,
rgb(0 0 0 / 10%) 0px -2px 4px,
rgb(0 0 0 / 15%) 0px -6.1px 12px,
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
rgb(0 0 0 / 25%) 0px 6px 12px`},um=({diff:l,noTargetBlank:u,hideDetails:c})=>{const[f,r]=ct.useState(l.diff?"diff":"actual"),[o,h]=ct.useState(!1),[v,y]=ct.useState(null),[A,E]=ct.useState("Expected"),[S,O]=ct.useState(null),[X,B]=ct.useState(null),[b,p]=Wh();ct.useEffect(()=>{(async()=>{var K,J,k,nt;y(await kf((K=l.expected)==null?void 0:K.attachment.path)),E(((J=l.expected)==null?void 0:J.title)||"Expected"),O(await kf((k=l.actual)==null?void 0:k.attachment.path)),B(await kf((nt=l.diff)==null?void 0:nt.attachment.path))})()},[l]);const x=v& & S& & X,R=x?Math.max(v.naturalWidth,S.naturalWidth,200):500,U=x?Math.max(v.naturalHeight,S.naturalHeight,200):500,Z=Math.min(1,(b.width-30)/R),F=Math.min(1,(b.width-50)/R/2),j=R*Z,D=U*Z,N={flex:"none",margin:"0 10px",cursor:"pointer",userSelect:"none"};return m.jsx("div",{"data-testid":"test-result-image-mismatch",style:{display:"flex",flexDirection:"column",alignItems:"center",flex:"auto"},ref:p,children:x& & m.jsxs(m.Fragment,{children:[m.jsxs("div",{"data-testid":"test-result-image-mismatch-tabs",style:{display:"flex",margin:"10px 0 20px"},children:[l.diff& & m.jsx("div",{style:{...N,fontWeight:f==="diff"?600:"initial"},onClick:()=>r("diff"),children:"Diff"}),m.jsx("div",{style:{...N,fontWeight:f==="actual"?600:"initial"},onClick:()=>r("actual"),children:"Actual"}),m.jsx("div",{style:{...N,fontWeight:f==="expected"?600:"initial"},onClick:()=>r("expected"),children:A}),m.jsx("div",{style:{...N,fontWeight:f==="sxs"?600:"initial"},onClick:()=>r("sxs"),children:"Side by side"}),m.jsx("div",{style:{...N,fontWeight:f==="slider"?600:"initial"},onClick:()=>r("slider"),children:"Slider"})]}),m.jsxs("div",{style:{display:"flex",justifyContent:"center",flex:"auto",minHeight:D+60},children:[l.diff& & f==="diff"& & m.jsx(En,{image:X,alt:"Diff",hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),l.diff& & f==="actual"& & m.jsx(En,{image:S,alt:"Actual",hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),l.diff& & f==="expected"& & m.jsx(En,{image:v,alt:A,hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),l.diff& & f==="slider"& & m.jsx(Dv,{expectedImage:v,actualImage:S,hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z,expectedTitle:A}),l.diff& & f==="sxs"& & m.jsxs("div",{style:{display:"flex"},children:[m.jsx(En,{image:v,title:A,hideSize:c,canvasWidth:F*R,canvasHeight:F*U,scale:F}),m.jsx(En,{image:o?X:S,title:o?"Diff":"Actual",onClick:()=>h(!o),hideSize:c,canvasWidth:F*R,canvasHeight:F*U,scale:F})]}),!l.diff& & f==="actual"& & m.jsx(En,{image:S,title:"Actual",hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),!l.diff& & f==="expected"& & m.jsx(En,{image:v,title:A,hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),!l.diff& & f==="sxs"& & m.jsxs("div",{style:{display:"flex"},children:[m.jsx(En,{image:v,title:A,canvasWidth:F*R,canvasHeight:F*U,scale:F}),m.jsx(En,{image:S,title:"Actual",canvasWidth:F*R,canvasHeight:F*U,scale:F})]})]}),!c& & m.jsxs("div",{style:{alignSelf:"start",lineHeight:"18px",marginLeft:"15px"},children:[m.jsx("div",{children:l.diff& & m.jsx("a",{target:"_blank",href:l.diff.attachment.path,rel:"noreferrer",children:l.diff.attachment.name})}),m.jsx("div",{children:m.jsx("a",{target:u?"":"_blank",href:l.actual.attachment.path,rel:"noreferrer",children:l.actual.attachment.name})}),m.jsx("div",{children:m.jsx("a",{target:u?"":"_blank",href:l.expected.attachment.path,rel:"noreferrer",children:l.expected.attachment.name})})]})]})})},Dv=({expectedImage:l,actualImage:u,canvasWidth:c,canvasHeight:f,scale:r,expectedTitle:o,hideSize:h})=>{const v={position:"absolute",top:0,left:0},[y,A]=ct.useState(c/2),E=l.naturalWidth===u.naturalWidth&&l.naturalHeight===u.naturalHeight; return m.jsxs("div",{style:{flex:"none",display:"flex",alignItems:"center",flexDirection:"column",userSelect:"none"},children:[!h& & m.jsxs("div",{style:{margin:5},children:[!E& & m.jsx("span",{style:{flex:"none",margin:"0 5px"},children:"Expected "}),m.jsx("span",{children:l.naturalWidth}),m.jsx("span",{style:{flex:"none",margin:"0 5px"},children:"x"}),m.jsx("span",{children:l.naturalHeight}),!E& & m.jsx("span",{style:{flex:"none",margin:"0 5px 0 15px"},children
2025-12-17 13:07:35 +00:00
# Instructions
- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
`.trimStart();async function zv({testInfo:l,metadata:u,errorContext:c,errors:f,buildCodeFrame:r,stdout:o,stderr:h}){var S;const v=new Set(f.filter(O=>O.message& & !O.message.includes(`
`)).map(O=>O.message));for(const O of f)for(const X of v.keys())(S=O.message)!=null&&S.includes(X)&&v.delete(X); const y=f.filter(O=>!(!O.message||!O.message.includes(`
`)&&!v.has(O.message))); if(!y.length)return;const A=[Qv,"# Test info","",l];o& & A.push("","# Stdout","","```",Jf(o),"```"),h& & A.push("","# Stderr","","```",Jf(h),"```"),A.push("","# Error details");for(const O of y)A.push("","```",Jf(O.message||""),"```");c&&A.push(c); const E=await r(y[y.length-1]);return E& & A.push("","# Test source","","```ts",E,"```"),u!=null& & u.gitDiff& & A.push("","# Local changes","","```diff",u.gitDiff,"```"),A.join(`
`)}const Yv=new RegExp("([\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:; \\d{0,4})*)?[\\dA-PR-TZcf-ntqry=>< ~])))","g");function Jf(l){return l.replace(Yv,"")}function Lv(l,u){var f;const c=new Map;for(const r of l){const o=r.name.match(/^(.*)-(expected|actual|diff|previous)(\.[^.]+)?$/);if(!o)continue;const[,h,v,y=""]=o,A=h+y;let E=c.get(A);E||(E={name:A,anchors:[`attachment-${h}`]},c.set(A,E)),E.anchors.push(`attachment-${u.attachments.indexOf(r)}`),v==="actual"& & (E.actual={attachment:r}),v==="expected"& & (E.expected={attachment:r,title:"Expected"}),v==="previous"& & (E.expected={attachment:r,title:"Previous"}),v==="diff"& & (E.diff={attachment:r})}for(const[r,o]of c)!o.actual||!o.expected?c.delete(r):(l.delete(o.actual.attachment),l.delete(o.expected.attachment),l.delete((f=o.diff)==null?void 0:f.attachment));return[...c.values()]}const Gv=({test:l,result:u,testRunMetadata:c,options:f})=>{const{screenshots:r,videos:o,traces:h,otherAttachments:v,diffs:y,errors:A,otherAttachmentAnchors:E,screenshotAnchors:S,errorContext:O}=ct.useMemo(()=>{const B=u.attachments.filter(N=>!N.name.startsWith("_")),b=new Set(B.filter(N=>N.contentType.startsWith("image/"))),p=[...b].map(N=>`attachment-${B.indexOf(N)}`),x=B.filter(N=>N.contentType.startsWith("video/")),R=B.filter(N=>N.name==="trace"),U=B.find(N=>N.name==="error-context"),Z=new Set(B);[...b,...x,...R].forEach(N=>Z.delete(N));const F=[...Z].map(N=>`attachment-${B.indexOf(N)}`),j=Lv(b,u),D=u.errors.map(N=>N.message);return{screenshots:[...b],videos:x,traces:R,otherAttachments:Z,diffs:j,errors:D,otherAttachmentAnchors:F,screenshotAnchors:p,errorContext:U}},[u]),X=P5(async()=>{if(f!=null&&f.noCopyPrompt)return; const B=u.attachments.find(R=>R.name==="stdout"),b=u.attachments.find(R=>R.name==="stderr"),p=B!=null& & B.body& & B.contentType==="text/plain"?B.body:void 0,x=b!=null& & b.body& & b.contentType==="text/plain"?b.body:void 0;return await zv({testInfo:[`- Name: ${l.path.join(" >> ")} >> ${l.title}`,`- Location: ${l.location.file}:${l.location.line}:${l.location.column}`].join(`
`),metadata:c,errorContext:O!=null& & O.path?await fetch(O.path).then(R=>R.text()):O==null?void 0:O.body,errors:u.errors,buildCodeFrame:async R=>R.codeframe,stdout:p,stderr:x})},[l,O,c,u],void 0);return m.jsxs("div",{className:"test-result",children:[!!A.length& & m.jsxs(ke,{header:"Errors",children:[X& & m.jsx("div",{style:{position:"absolute",right:"16px",padding:"10px",zIndex:1},children:m.jsx(Nv,{prompt:X})}),A.map((B,b)=>{const p=Xv(B,y);return m.jsxs(m.Fragment,{children:[m.jsx(wr,{code:B},"test-result-error-message-"+b),p& & m.jsx(Bv,{diff:p})]})})]}),!!u.steps.length& & m.jsx(ke,{header:"Test Steps",children:u.steps.map((B,b)=>m.jsx(cm,{step:B,result:u,test:l,depth:0},`step-${b}`))}),y.map((B,b)=>m.jsx(Si,{id:B.anchors,children:m.jsx(ke,{dataTestId:"test-results-image-diff",header:`Image mismatch: ${B.name}`,revealOnAnchorId:B.anchors,children:m.jsx(um,{diff:B})})},`diff-${b}`)),!!r.length&&m.jsx(ke,{header:"Screenshots",revealOnAnchorId:S,children:r.map((B,b)=>m.jsxs(Si,{id:`attachment-${u.attachments.indexOf(B)}`,children:[m.jsx("a",{href:Ve(B.path),children:m.jsx("img",{className:"screenshot",src:Ve(B.path)})}),m.jsx(nc,{attachment:B,result:u})]},`screenshot-${b}`))}),!!h.length&&m.jsx(Si,{id:"attachment-trace",children:m.jsx(ke,{header:"Traces",revealOnAnchorId:"attachment-trace",children:m.jsxs("div",{children:[m.jsx("a",{href:Ve(nm(h)),children:m.jsx("img",{className:"screenshot",src:Cv,style:{width:192,height:117,marginLeft:20}})}),h.map((B,b)=>m.jsx(nc,{attachment:B,result:u,linkName:h.length===1?"trace":`trace-${b+1}`},`trace-${b}`))]})})}),!!o.length&&m.jsx(Si,{id:"attachment-video",children:m.jsx(ke,{header:"Videos",revealOnAnchorId:"attachment-video",children:o.map(B=>m.jsxs("div",{children:[m.jsx("video",{controls:!0,children:m.jsx("source",{src:Ve(B.path),type:B.contentType})}),m.jsx(nc,{attachment:B,result:u})]},B.path))})}),!!v.size&&m.jsx(ke,{header:"Attachments",revealOnAnchorId:E,dataTestId:"attachments",children:[...v].map((B,b)=>m.jsx(Si,{id:`attachment-${u.attachments.indexOf(B)}`,children:m.jsx(nc,{attachment:B,result:u,openInNewTab:B.contentType.startsWith("text/html")})},`attachment-link-${b}`))})]})}; function Xv(l,u){const c=l.split(`
`)[0];if(!(!c.includes("toHaveScreenshot")& & !c.includes("toMatchSnapshot")))return u.find(f=>l.includes(f.name))}const cm=({test:l,step:u,result:c,depth:f})=>{const r=se();return m.jsx(Tv,{title:m.jsxs("div",{"aria-label":u.title,className:"step-title-container",children:[hc(u.error||u.duration===-1?"failed":u.skipped?"skipped":"passed"),m.jsxs("span",{className:"step-title-text",children:[m.jsx("span",{children:u.title}),u.count>1& & m.jsxs(m.Fragment,{children:[" ✕ ",m.jsx("span",{className:"test-result-counter",children:u.count})]}),u.location& & m.jsxs("span",{className:"test-result-path",children:["— ",u.location.file,":",u.location.line]})]}),m.jsx("span",{className:"step-spacer"}),u.attachments.length>0& & m.jsx("a",{className:"step-attachment-link",title:"reveal attachment",href:Ve(Cn({test:l,result:c,anchor:`attachment-${u.attachments[0]}`},r)),onClick:o=>{o.stopPropagation()},children:Ih()}),m.jsx("span",{className:"step-duration",children:Ol(u.duration)})]}),loadChildren:u.steps.length||u.snippet?()=>{const o=u.snippet?[m.jsx(wr,{testId:"test-snippet",code:u.snippet},"line")]:[],h=u.steps.map((v,y)=>m.jsx(cm,{step:v,depth:f+1,result:c,test:l},y));return o.concat(h)}:void 0,depth:f})},Vv=({projectNames:l,test:u,testRunMetadata:c,run:f,next:r,prev:o,options:h})=>{const[v,y]=ct.useState(f),A=se(),E=u.annotations.filter(S=>!S.type.startsWith("_"))??[];return m.jsxs(m.Fragment,{children:[m.jsx(Or,{title:u.title,leftSuperHeader:m.jsx("div",{className:"test-case-path",children:u.path.join(" › ")}),rightSuperHeader:m.jsxs(m.Fragment,{children:[m.jsx("div",{className:Ze(!o& & "hidden"),children:m.jsx(Tn,{href:Cn({test:o},A),children:"« previous"})}),m.jsx("div",{style:{width:10}}),m.jsx("div",{className:Ze(!r& & "hidden"),children:m.jsx(Tn,{href:Cn({test:r},A),children:"next »"})})]})}),m.jsxs("div",{className:"hbox",style:{lineHeight:"24px"},children:[m.jsx("div",{className:"test-case-location",children:m.jsxs(Sr,{value:`${u.location.file}:${u.location.line}`,children:[u.location.file,":",u.location.line]})}),m.jsx("div",{style:{flex:"auto"}}),m.jsx(tm,{test:u,trailingSeparator:!0}),m.jsx("div",{className:"test-case-duration",children:Ol(u.duration)})]}),m.jsx($h,{style:{marginLeft:"6px"},projectNames:l,activeProjectName:u.projectName,otherLabels:u.tags}),u.results.length===0& & E.length!==0& & m.jsx(ke,{header:"Annotations",dataTestId:"test-case-annotations",children:E.map((S,O)=>m.jsx(z2,{annotation:S},O))}),m.jsx(Sv,{tabs:u.results.map((S,O)=>({id:String(O),title:m.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[hc(S.status)," ",Zv(O),u.results.length>1& & m.jsx("span",{className:"test-case-run-duration",children:Ol(S.duration)})]}),render:()=>{const X=S.annotations.filter(B=>!B.type.startsWith("_"));return m.jsxs(m.Fragment,{children:[!!X.length&&m.jsx(ke,{header:"Annotations",dataTestId:"test-case-annotations",children:X.map((B,b)=>m.jsx(z2,{annotation:B},b))}),m.jsx(Gv,{test:u,result:S,testRunMetadata:c,options:h})]})}}))||[],selectedTab:String(v),setSelectedTab:S=>y(+S)})]})}; function z2({annotation:{type:l,description:u}}){return m.jsxs("div",{className:"test-case-annotation",children:[m.jsx("span",{style:{fontWeight:"bold"},children:l}),u& & m.jsxs(Sr,{value:u,children:[": ",Di(u)]})]})}function Zv(l){return l?`Retry #${l}`:"Run"}const sm=({file:l,projectNames:u,isFileExpanded:c,setFileExpanded:f,footer:r})=>{const o=se();return m.jsx(im,{expanded:c?c(l.fileId):void 0,noInsets:!0,setExpanded:f?(h=>f(l.fileId,h)):void 0,header:m.jsx("span",{className:"chip-header-allow-selection",children:l.fileName}),footer:r,children:l.tests.map(h=>m.jsxs("div",{className:Ze("test-file-test","test-file-test-outcome-"+h.outcome),children:[m.jsxs("div",{className:"hbox",style:{alignItems:"flex-start"},children:[m.jsxs("div",{className:"hbox",children:[m.jsx("span",{className:"test-file-test-status-icon",children:hc(h.outcome)}),m.jsxs("span",{children:[m.jsx(Tn,{href:Cn({test:h},o),title:[...h.path,h.title].join(" › "),children:m.jsx("span",{className:"test-file-title",children:[...h.path,h.title].join(" › ")})}),m
2025-12-17 13:07:35 +00:00
< / script >
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
< style type = 'text/css' > : r o o t { - - c o l o r - c a n v a s - d e f a u l t - t r a n s p a r e n t : r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , 0 ) ; - - c o l o r - m a r k e t i n g - i c o n - p r i m a r y : # 2 1 8 b f f ; - - c o l o r - m a r k e t i n g - i c o n - s e c o n d a r y : # 5 4 a e f f ; - - c o l o r - d i f f - b l o b - a d d i t i o n - n u m - t e x t : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - a d d i t i o n - f g : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - a d d i t i o n - n u m - b g : # C C F F D 8 ; - - c o l o r - d i f f - b l o b - a d d i t i o n - l i n e - b g : # E 6 F F E C ; - - c o l o r - d i f f - b l o b - a d d i t i o n - w o r d - b g : # A B F 2 B C ; - - c o l o r - d i f f - b l o b - d e l e t i o n - n u m - t e x t : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - d e l e t i o n - f g : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - d e l e t i o n - n u m - b g : # F F D 7 D 5 ; - - c o l o r - d i f f - b l o b - d e l e t i o n - l i n e - b g : # F F E B E 9 ; - - c o l o r - d i f f - b l o b - d e l e t i o n - w o r d - b g : r g b a ( 2 5 5 , 1 2 9 , 1 3 0 , . 4 ) ; - - c o l o r - d i f f - b l o b - h u n k - n u m - b g : r g b a ( 8 4 , 1 7 4 , 2 5 5 , . 4 ) ; - - c o l o r - d i f f - b l o b - e x p a n d e r - i c o n : # 5 7 6 0 6 a ; - - c o l o r - d i f f - b l o b - s e l e c t e d - l i n e - h i g h l i g h t - m i x - b l e n d - m o d e : m u l t i p l y ; - - c o l o r - d i f f s t a t - d e l e t i o n - b o r d e r : r g b a ( 2 7 , 3 1 , 3 6 , . 1 5 ) ; - - c o l o r - d i f f s t a t - a d d i t i o n - b o r d e r : r g b a ( 2 7 , 3 1 , 3 6 , . 1 5 ) ; - - c o l o r - d i f f s t a t - a d d i t i o n - b g : # 2 d a 4 4 e ; - - c o l o r - s e a r c h - k e y w o r d - h l : # f f f 8 c 5 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c o m m e n t : # 6 e 7 7 8 1 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c o n s t a n t : # 0 5 5 0 a e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - e n t i t y : # 8 2 5 0 d f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s t o r a g e - m o d i f i e r - i m p o r t : # 2 4 2 9 2 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - e n t i t y - t a g : # 1 1 6 3 2 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - k e y w o r d : # c f 2 2 2 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s t r i n g : # 0 a 3 0 6 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - v a r i a b l e : # 9 5 3 8 0 0 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - b r a c k e t h i g h l i g h t e r - u n m a t c h e d : # 8 2 0 7 1 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - i n v a l i d - i l l e g a l - t e x t : # f 6 f 8 f a ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - i n v a l i d - i l l e g a l - b g : # 8 2 0 7 1 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c a r r i a g e - r e t u r n - t e x t : # f 6 f 8 f a ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c a r r i a g e - r e t u r n - b g : # c f 2 2 2 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s t r i n g - r e g e x p : # 1 1 6 3 2 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - l i s t : # 3 b 2 3 0 0 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - h e a d i n g : # 0 5 5 0 a e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i t a l i c : # 2 4 2 9 2 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - b o l d : # 2 4 2 9 2 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - d e l e t e d - t e x t : # 8 2 0 7 1 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - d e l e t e d - b g : # F F E B E 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i n s e r t e d - t e x t : # 1 1 6 3 2 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i n s e r t e d - b g : # d a f b e 1 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - c h a n g e d - t e x t : # 9 5 3 8 0 0 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - c h a n g e d - b g : # f f d 8 b 5 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i g n o r e d - t e x t : # e a e e f 2 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i g n o r e d - b g : # 0 5 5 0 a e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m e t a - d i f f - r a n g e : # 8 2 5 0 d f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - b r a c k e t h i g h l i g h t e r - a n g l e : # 5 7 6 0 6 a ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s u b l i m e l i n t e r - g u t t e r - m a r k : # 8 c 9 5 9 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c o n s t a n t - o t h e r - r e f e r e n c e - l i n k : # 0 a 3 0 6 9 ; - - c o l o r - c o d e m i r r o r - t e x t : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - b g : # f f f f f f ; - - c o l o r - c o d e m i r r o r - g u t t e r s - b g : # f f f f f f ; - - c o l o r - c o d e m i r r o r - g u t t e r m a r k e r - t e x t : # f f f f f f ; - - c o l o r - c o d e m i r r o r - g u t t e r m a r k e r - s u b t l e - t e x t : # 6 e 7 7 8 1 ; - - c o l o r - c o d e m i r r o r - l i n e n u m b e r - t e x t : # 5 7 6 0 6 a ; - - c o l o r - c o d e m i r r o r - c u r s o r : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - s e l e c t i o n - b g : r g b a ( 8 4 , 1 7 4 , 2 5 5 , . 4 ) ; - - c o l o r - c o d e m i r r o r - a c t i v e l i n e - b g : r g b a ( 2 3 4 , 2 3 8 , 2 4 2 , . 5 ) ; - - c o l o r - c o d e m i r r o r - m a t c h i n g b r a c k e t - t e x t : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - l i n e s - b g : # f f f f f f ; - - c o l o r - c o d e m i r r o r - s y n t a x - c o m m e n t : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - s y n t a x - c o n s t a n t : # 0 5 5 0 a e ; - - c o l o r - c o d e m i r r o r - s y n t a x - e n t i t y : # 8 2 5 0 d f ; - - c o l o r - c o d e m i r r o r - s y n t a x - k e y w o r d : # c f 2 2 2 e ; - - c o l o r - c o d e m i r r o r - s y n t a x - s t o r a g e : # c f 2 2 2 e ; - - c o l o r - c o d e m i r r o r - s y n t a x - s t r i n g : # 0 a 3 0 6 9 ; - - c o l o r - c o d e m i r r o r - s y n t a x - s u p p o r t : # 0 5 5 0 a e ; - - c o l o r - c o d e m i r r o r - s y n t a x - v a r i a b l e : # 9 5 3 8 0 0 ; - - c o l o r - c h e c k s - b g : # 2 4 2 9 2 f ; - - c o l o r - c h e c k s - r u n - b o r d e r - w i d t h : 0 p x ; - - c o l o r - c h e c k s - c o n t a i n e r - b o r d e r - w i d t h : 0 p x ; - - c o l o r - c h e c k s - t e x t - p r i m a r y : # f 6 f 8 f a ; - - c o l o r - c h e c k s - t e x t - s e c o n d a r y : # 8 c 9 5 9 f ; - - c o l o r - c h e c k s - t e x t - l i n k : # 5 4 a e f f ; - - c o l o r - c h e c k s - b t n - i c o n : # a f b 8 c 1 ; - - c o l o r - c h e c k s - b t n - h o v e r - i c o n : # f 6 f 8 f a ; - - c o l o r - c h e c k s - b t n - h o v e r - b g : r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , . 1 2 5 ) ; - - c o l o r - c h e c k s - i n p u t - t e x t : # e a e e f 2 ; - - c o l o r - c h e c k s - i n p u t - p l a c e h o l d e r - t e x t : # 8 c 9 5 9 f ; - - c o l o r - c h e c k s - i n p u t - f o c u s - t e x t : # 8 c 9 5 9 f ; - - c o l o r - c h e c k s - i n p u t - b g : # 3 2 3 8 3 f ; - - c o l o r - c h e c k s - i n p u t - s h a d o w : n o n e ; - - c o l o r - c h e c k s - d o n u t - e r r o r : # f a 4 5 4 9 ; - - c o l o r - c h e c k s - d o n u t - p e n d i n g : # b f 8 7 0 0 ; - - c o l o r - c h e c k s - d o n u t - s u c c e s s : # 2 d a 4 4 e ; - - c o l o r - c h e c k s - d o n u t - n e u t r a l : # a f b 8 c 1 ; - - c o l o r - c h e c k s - d r o p d o w n
2025-12-17 13:07:35 +00:00
< / style >
< / head >
< body >
< div id = 'root' > < / div >
< / body >
< / html >
2026-03-18 10:35:26 +00:00
< script id = "playwrightReportBase64" type = "application/zip" > d a t a : a p p l i c a t i o n / z i p ; b a s e 6 4 , U E s D B B Q A A A g I A C F 4 b 1 y 5 7 h H + / g Q A A E 8 w A A A Z A A A A Z D c 0 O G F j N D A w Z D A 4 Y j g 1 O T M 1 Z W Y u a n N v b t 2 a T Y / b N h C G / 4 q g s x v w a / i x t 1 w C 9 N I / E O Q w n B m u 1 c i W I c n d F E H + e y H v p m i 7 a j f y K q i V m w V D I v W A Q z 4 v x c 9 1 a V r 5 m e u 7 m o O L S E 4 p V j F H S B a k 1 L v L / 7 / g Q e q 7 G s / j / s 1 w E n o z D v W u H m U Y h / r u / e f L r 3 9 9 x k 9 S W D t w K d t Q Q k D 0 K v n p 9 m Z s p 6 c O + + 7 c c t V 2 9 8 2 x G s 5 E M g z l 3 L a / V w / N u K 9 + w 7 b h i n p h O Y 4 N t l P L p 7 7 7 V W h 8 6 h b t + + 7 Q n A / 1 r m 4 7 w r H p j v X d 5 0 v H n 3 e 6 b Y 5 S 3 z m 9 q 6 l r z 4 d j f W e / 7 G o + 9 0 / 3 q V 2 N x 2 M 3 X i 6 n t / u w q 0 e 8 f / r V n U f q L o 0 O H 5 v T S X j q D I 7 7 + u 5 9 / f Y 8 7 q c u P v a g e t d 2 D / W H X d 3 L c G 7 H r / d / r O 8 K t o N 8 2 b 1 E z Z o C P i d g 8 Z n J Y k o A z 6 k N + + 6 h k r 7 v + k d a z f G 7 8 N L q 9 o G h D 2 g x s x Y S C a K 0 Q / c c G H W H U y u j P I 2 3 C z T z 7 m 1 F H c s q p I y / e V K k S y h Z + W J D S A X E F 5 4 Z W r 3 c N 8 M o f Y X V U R 6 q 8 y D 9 3 8 p z F V o Q b p 4 W W A Y d X X Z B 5 e w t S i H 7 3 4 W 4 l + O f 9 J r j / e M g k 0 / N M E 5 X c s C m X Q O e A b h 5 e K R I P B G F H E S Z k J x w n p 3 7 u / O 4 + u i y W t 0 8 I M d G s r a I y h l E l Q 0 7 P V e L 3 P R C Y z V 2 X y e u a Z D h h d c 0 q E 5 9 N w q N w l X f n U e 5 D L k J 6 c R l F Z T h 9 g u 1 Z J U c K e + o e P I 2 E 1 1 a + w f K k / R D M z y S + U v j W K a p 7 o T 3 U v V S e h n W w Z b c z W M L F g W s s C s c F C I q R e Y 5 t o t W 4 J / r Z u n 6 Q 1 U a a X k d H 4 P b r 1 Q d H d i U U h D w q F P W m t T L 6 8 A J h + G h 6 3 m o u K u O 3 V g d c K R 9 x e f L y v C 4 S j y 9 6 h o c U 7 x 9 j o 6 V u M I l 5 m C J Y w w o a 8 a B 0 v R S u k 8 / V h p g 4 5 U D k 4 I O W J J Y A B X X S Q P L c W 0 h D E B E M T Y g A U r Q K Q W r Z q R t U R i 4 A t Q G s o A Y 8 F 4 X s N Y H s I K S / U w 1 L s 4 C V 8 D a Q B S I A s a y d i l E 0 S 5 q V O 6 F K r w m C i x n t 4 U k 4 J x W 5 E x w k A M 6 j o n n K v J b k s B y P p s I A t Y k w l C s R D K 6 h A B 2 Z v t i 3 S B w B c k N 5 I B A E j R L R O u t d 5 Q 8 x V V z w B X U N h A D U j H a G W + 8 I X a R B Y t L r 4 o B V 3 j Y B l K A z c o Y J Z a N m F B A 2 x C + b w q 4 A u M G Q k A S D d G a A N 4 A e 4 n a G V w z B D x I / t i M P 1 Y G c E Z p B J s x x 0 I U p Y R Q 1 s k A i 2 l t I Q J w R l F O s d M x q 0 i s Z 3 e 5 F 0 W A 5 Z y 2 k A C 0 K I e O v S 3 K x 2 m 7 d m 5 Y L U 4 A y 1 l t I A B I y g K o C k I x P p Y U d Z 7 Z K 3 t t A F i M b g v + r 4 u K u Z T E J e n E J k a U + a / A L / r / Y j x b 0 H + j C 1 s m N i 4 y Z s h R 2 + / + H W A 5 y A 3 Y f / a g C h q P 1 r B B Z Q P C j F l c b / / L o W 1 A / k E k m m h s y D 6 b E q I W n A n n C + R / u X 9 t w P 0 d K U G T D W g X C S h 5 Y 2 f 2 y l Z 0 / + U U N 6 D + P o D B h E Y C K i D W O q m Z N f R 6 9 T 8 M w v f y Y 6 k / J E p U o l U G A Z M 3 y S R a R / 0 X 0 9 q C + g t b a 3 S I M Z V o Q F A Z P + M a i 9 R / O a c N q H 9 M n B R 6 7 6 O f J n 0 C g Z n T G Y v V f z m r D a i / 8 w K m M P m U M I I i 7 e c O a r x W / R e j 2 4 L 6 W y 6 B v Z O E G R F A k N 3 M n t m 3 q P 9 i P F t Q f 3 L Z h 1 z Y l O k w H q i Y 5 o / j r a n + y 0 F u Q P 1 N F N E k S i K 4 B A 6 R / U y J X q / + y 6 F t Q P 2 n o 2 f R F i 4 U r Y f A 0 e r X 7 f s v 9 6 8 N q H / x 0 U Q A 6 5 y 1 Q l E y 0 s w 3 p R X V f z n F / 1 / 9 P 3 z 5 A 1 B L A w Q U A A A I C A A h e G 9 c b C 0 4 f x 0 C A A B O D g A A G Q A A A D Z k Y W M 1 M T R k N W Q 4 M z d j Y T M 3 Y j l l L m p z b 2 7 d l M F q 3 D A Q h l / F 6 O w G S y N L l q + F Q i 6 9 l N J D y G G s G W X d 9 V r L S u 6 2 h L x 7 s U l z a L Y U s w l Z c h t j R v r 9 8 X + + F 6 E f + J p E K w y h r 6 W m m h q w H s F 2 j k W 5 v P + M O x a t 8 B v M V 2 n P / i o n U Y r M K S f R 3 t w v 0 z / P + G C 1 Z 6 s U G O + B A r s m S J z X + z z M p 6 Z N n A Y q h o h U z D c U e 7 z j A k c q 0 i Y e i 6 / X o h T 7 Q / z O P j / l O M R d P + 1 E K Y b o M f d x F O 3 9 k v R 5 y q E f W b Q K S u H j M O 1 G 0 c J D K W g 6 P O 5 V p c B x j H l 5 n D / n t h Q Z 7 x 6 n O G U f l 0 v T t t / v m e Y w m D e i v R E f 5 7 C f h n g U t 6 U 4 c J q G / G d r K 9 q A Q + K H 8 n 9 w A i l n K T A Z R K 6 r x k s J z + E s J K h P P o 4 j + 8 x U p I y Z i + O G x + I b d 1 + i 3 3 I u p h F / Y D 9 g N / B L Q K v N h U K T F W g P h o L S F X j L V h p 7 A h q P t P S I + r Q f 8 F e x 4 5 T m b v 1 F 7 Q n q S z B r 9 I U y a 2 o y D S F o J Q O g 0 V a T P M v C 0 B 8 4 x J / v Q U L P 0 h s E A O W w I 6 6 B z e t I u J 7 Z x T p o t T M h E H i v l E a C C u B E n 8 5 3 c D 2 y i 1 X Q W d I M 6 J G N B 9 P I 4 O h E z V Y o e O R u 2 + f 3 Y K A K A e u O o N K y 6 T y g U 7 p 6 F Q N X I 7 t Y A d k p N N z U w F U t O 6 b O o H 4 N A V c T u 1 j / p O y U s c F U R j b o X N B O q b P 8 2 y W m O 3 4 P / n X a U + e s C j V U V n F T 1 + 5 U m c 7 3 b z W y i / X P O j + P 4 A 1 Q F y y B N a d + W W f 7 t 5 r Y W / l 3 + / A b U E s D B B Q A A A g I A C F 4 b 1 x n 3 L M n 5 w U A A C Z A A A A Z A A A A O T g 4 Z T V h Y j d h O T I y Z D M 0 N T g x Z T c u a n N v b u W b y 4 7 c t h J A f 0 X Q N p 2 E 7 8 f s c p 0 E c R Z B E C P I I v C i W F W c U a y W G p L a E 8 P w v w c 9 H u M u R j M 3 F n s a l / B O 3 Q J I 1 g F F 1 i l R 7 9 v c 9 f y S 2 q s 2 h s A W k o e o F G l j g 2 T f 7 u 7 u / w J 7 b q 9 a n M Z 5 / j p N 4 + 3 M 0 z f z g f G b Z W 5 3 7 c L z M r d X f 7 6 / u 3 q 0 s a 8 B t V S A O Y S k 0 E B 0 Q Z 9 6 W L q l P z U / 3 4 z H n p p + v O 6 G Z j 4 i 8 j z n Y 9 + / a 8 a h g b 5 v 7 n s + d X m Y x r 8 Y l 0 8 D u 5 n G f X f c t 7 u 2 H x G W b h z a q / d 3 Q 3 9 i 2 H 0 3 c H u l 7 K 7 F s T / u h / b K f t i 1 d J z u G x C 7 F o Z h X O 5 + n u J 7 v W s X u L 6 / G o 8 L j n e 9 z 2 + 6 w 4 H p N C p Y b t q r P 9 s X d z 3 + 5 2 O P z Y t x f 4 C l S 1 3 f L e / a X f v d c b n h Y e n u B / p 6 1 0 4 8 H / v l U 8 N v 2 q s M / c w f d v 8 L a J L M E C y K L F J g C g q c e Q i U u v n Q w 7 t 7 s H m c 9 g 2 O 0 8 S 4 P D N a q + p F G 4 M l I 7 y E r D G x k y Q M P U Q 7 w N v u G h Z u E i + 3 z E N z g G u e n x W q v z j U X z 4 G W Q j U J 8 c B J N l I k l J w X g T x E O g N D N T z J 3 J N A n z z b R 6 n W 5 i o S c d l O Q V 2 T p o h 1 k m T T A I f K Y N 3 U k R L M s r 4 k O b E A 5 0 o f g R 3 o a d e y o v P 0 N 9 f 3 v 0 1 D j w s c x F W B M G W j d P o v Q Y Z U O R H s Z 5 W 0 o t B 1 R f f p s 4 G l V M I M b A R I V v w X q E X + i H U + X g 4 j N P S / P D K f d V k h u U 4 P f N K K q 2 5 N N O f 4 S 2 8 w q k 7 L M 2 P 9 y G W k M 2 k k k s G X S A 0 B C C T x M f J / s G p + e 7 X l 8 8 M N e r K o b L R W a D m G L J F D S Z 4 D o 9 D 3 Y / E 0 9 C 8 e P X q M p N W S X d p v q f Y z g E 2 S k 8 + W P Q y K B N Z g t Y r K V X i Z u L 5 M A 5 z 9 5 a f F 6 W 5 + F T 9 7 b + R f c 9 z d 1 2 U A 7 A N T k c N h i 0 T k 4 6 e 1 a M Z F U / T O M 3 N 9 Q T I F 5 A q L y 6 N 9 o d T g M 1 P p 2 i 7 4 b o s t 8 o Z i J Q 3 Z C I 7 o 4 V f y V T 7 E e g + 3 b / t l p t u a A C R D w u k n p u l 2 z / z 3 A 3 + 0 o B / 5 e m U 8 c C A X E L X o J O Q D a u g g 2 K l v R X p L E W A 3 E 2 c x 7 + / t B q A I s l Z k W c b N A p g r 8 y 5 a w A F Z G s u A W Q m T 1 l 6 Z 1 z 2 3 m Q y e s W x N p Y A C p j W W g F w C W J W B E q A 1 Q Y i Q r D n q Q A U w K y 2 A K C 0 1 j p k n 4 J C 4 0 i o N a n a X A A o I F q 1 / 1 u j n U x W k v T o g 1 N g V 7 b + j f 5 f w r R i / d c W t U w 5 c z C o n V E E e m W D 2 q b / J U i r t 3 8 t W Q Y r n U y R t W J W G Z 8 A + 6 / t v 4 R p 9 f I f s t I p e Y p J R A U A S T 9 V q 9 o i / y V p a r 3 u 7 3 W M A Z 1 2 G I C 8 V d o Y W e r + J S Q r V 3 + X V I z W 6 + w S p I A c k 3 8 8 l f p 8 9 S 8 h W 7 P 5 e y s N p i S D J B f Q e 9 B y p U J V b v 4 l f K s V f y u Z 0 Z s c A o e E z s u 0 t r R u E P 9 b T m + 6 5 U v z / m g s