@ytsaurus/ui 1.103.0 → 1.103.1
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.
- package/dist/public/build/assets-manifest.json +40 -40
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css +2 -0
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css.map +1 -0
- package/dist/public/build/css/{main.d1987746.css → main.23e8d0fd.css} +2 -2
- package/dist/public/build/css/main.23e8d0fd.css.map +1 -0
- package/dist/public/build/js/6157.6786c942.chunk.js +2 -0
- package/dist/public/build/js/6157.6786c942.chunk.js.map +1 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js +2 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js.map +1 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js +2 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.aaa21eca.chunk.js → accounts.f328f823.chunk.js} +2 -2
- package/dist/public/build/js/accounts.f328f823.chunk.js.map +1 -0
- package/dist/public/build/js/acl.556f2525.chunk.js +2 -0
- package/dist/public/build/js/acl.556f2525.chunk.js.map +1 -0
- package/dist/public/build/js/{bundles.b851f32c.chunk.js → bundles.0ab2d6f4.chunk.js} +2 -2
- package/dist/public/build/js/{bundles.b851f32c.chunk.js.map → bundles.0ab2d6f4.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-page-wrapper.a5c05070.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.45436df6.chunk.js.map → cluster-page-wrapper.a5c05070.chunk.js.map} +1 -1
- package/dist/public/build/js/dashboard.efdd63a2.chunk.js +3 -0
- package/dist/public/build/js/{dashboard.234b8062.chunk.js.map → dashboard.efdd63a2.chunk.js.map} +1 -1
- package/dist/public/build/js/main.a89bac74.js +3 -0
- package/dist/public/build/js/main.a89bac74.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js → navigation-flow.1d83e216.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js.map → navigation-flow.1d83e216.chunk.js.map} +1 -1
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js → navigation.0aff5a3a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js.map → navigation.0aff5a3a.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js → query-tracker.b7334a6f.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js.map → query-tracker.b7334a6f.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.8a460b23.js → runtime.d583e98e.js} +2 -2
- package/dist/public/build/js/{runtime.8a460b23.js.map → runtime.d583e98e.js.map} +1 -1
- package/dist/public/build/js/users.aec1e380.chunk.js +2 -0
- package/dist/public/build/js/users.aec1e380.chunk.js.map +1 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js +3 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +34 -34
- package/package.json +4 -3
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css +0 -2
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css.map +0 -1
- package/dist/public/build/css/main.d1987746.css.map +0 -1
- package/dist/public/build/js/2009.8121a60e.chunk.js +0 -2
- package/dist/public/build/js/2009.8121a60e.chunk.js.map +0 -1
- package/dist/public/build/js/6157.92170346.chunk.js +0 -2
- package/dist/public/build/js/6157.92170346.chunk.js.map +0 -1
- package/dist/public/build/js/6960.8b7e01c6.chunk.js +0 -2
- package/dist/public/build/js/6960.8b7e01c6.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.aaa21eca.chunk.js.map +0 -1
- package/dist/public/build/js/acl.1ad3d494.chunk.js +0 -2
- package/dist/public/build/js/acl.1ad3d494.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.45436df6.chunk.js +0 -2
- package/dist/public/build/js/dashboard.234b8062.chunk.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js.map +0 -1
- package/dist/public/build/js/users.a0dc610f.chunk.js +0 -2
- package/dist/public/build/js/users.a0dc610f.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js +0 -3
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js.map +0 -1
- /package/dist/public/build/js/{dashboard.234b8062.chunk.js.LICENSE.txt → dashboard.efdd63a2.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.aa6a17d8.js.LICENSE.txt → main.a89bac74.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{yt-df-dialog.acab4eb0.chunk.js.LICENSE.txt → yt-df-dialog.1d05b0a5.chunk.js.LICENSE.txt} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_ytsaurus_ui=self.webpackChunk_ytsaurus_ui||[]).push([[8809],{5800:(e,t,r)=>{r.d(t,{A:()=>h});var n=r(40319),a=r(18801),s=(r(77810),r(15647)),o=r(97536),i=r(57614),l=r(92611);const u=JSON.parse('{"tooltip-content":"Show attributes"}'),c=JSON.parse('{"tooltip-content":"Показать аттрибуты"}'),d=(0,l.Kc)("yt:attributes-button",{en:u,ru:c});var m=r(64922),p=["title","getPathProps","path","exactPath","attribute","attributes","openAttributesModal","withTooltip","tooltipProps"];const h=(0,s.Ng)(null,{openAttributesModal:i.V6})((function(e){var t=e.title,r=e.getPathProps,s=void 0===r?function(){return{}}:r,i=e.path,l=e.exactPath,u=e.attribute,c=e.attributes,h=e.openAttributesModal,f=e.withTooltip,v=void 0===f||f,A=e.tooltipProps,g=void 0===A?{placement:"bottom-end",content:d("tooltip-content")}:A,w=(0,a.A)(e,p);return(0,m.jsx)(o.A,(0,n.A)((0,n.A)({},w),{},{tooltipProps:g,withTooltip:v,onClick:function(){var e=(0,n.A)({path:i,exactPath:l},s());h((0,n.A)((0,n.A)({title:t},e),{},{attribute:u,attributes:c}))}}))}))},10559:(e,t,r)=>{r.d(t,{A:()=>s});var n=r(40319),a=r(64922);const s=function(e){return(0,a.jsx)("svg",(0,n.A)((0,n.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,a.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M1 3.25a.75.75 0 0 1 .75-.75h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 3.25M1 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 8m.75 4a.75.75 0 0 0 0 1.5h2.5a.75.75 0 0 0 0-1.5z",clipRule:"evenodd"})}))}},15801:(e,t,r)=>{r.d(t,{m:()=>l,s:()=>o});var n=r(53775),a=r(13322),s=r(28407);function o(e){return i.apply(this,arguments)}function i(){return(i=(0,s.A)((0,n.A)().mark((function e(t){var r;return(0,n.A)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t));case 2:return r=e.sent,e.abrupt("return",(0,a.A)(new Uint8Array(r)).map((function(e){return("00"+e.toString(16)).slice(-2)})).join(""));case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var l=function(){var e;return Boolean(null===(e=crypto)||void 0===e||null===(e=e.subtle)||void 0===e?void 0:e.digest)}},22228:(e,t,r)=>{r.d(t,{A:()=>x});var n=r(40319),a=r(18801),s=r(77810),o=r(15647),i=r(53144),l=r.n(i),u=r(49214),c=r.n(u),d=r(27528),m=r.n(d),p=r(76872),h=r(20361),f=r(52797),v=r(67270),A=r(64922),g=["items","width","multiple","onChange","placeholder","className","showTags","value","disablePortal"],w=(0,p.A)("group-suggest");function b(e){var t=e.items,r=e.width,o=e.multiple,i=e.onChange,u=e.placeholder,d=e.className,p=e.showTags,f=e.value,b=e.disablePortal,x=void 0===b||b,y=(0,a.A)(e,g),_=m()(t,(function(e){return{value:e,text:e}})),C=!(null!=f&&f.length),N=s.useMemo((function(){return m()(l()([],f),(function(e){return{title:e}}))}),[f]),j=s.useCallback((function(e){var t=c()(e,(function(e){return!e.removed})).map((function(e){return e.title}));i(t)}),[f,i]);return(0,A.jsxs)("div",{className:w({empty:C},d),children:[(0,A.jsx)(v.A,(0,n.A)((0,n.A)({},y),{},{items:_,onUpdate:i,placeholder:u,value:e.value,multiple:o,width:null!=r?r:"max",filterable:!0,disablePortal:x})),o&&p&&(0,A.jsx)(h.Vm,{onChange:j,value:N})]})}b.isEmpty=function(e){return!(null!=e&&e.length)},b.getDefaultValue=function(){return[]};const x=(0,o.Ng)((function(e,t){return{items:t.idmOnly?(0,f.yP)(e):(0,f.Gd)(e)}}))(b)},33190:(e,t,r)=>{r.d(t,{d:()=>a});var n=r(29081),a=function(e,t){var r=t&&(0,n.Gq)();return e?"ldap":r?"idm":"-"}},52237:(e,t,r)=>{r.r(t),r.d(t,{UsersPage:()=>Ke});var n=r(77810),a=r(76872),s=r(5675),o=r(29121),i=r(12937),l=r(66134),u=r(10785),c=r(15647),d=r(28325),m=r(99800),p=r(9736),h=r(18801),f=r(40843),v=r.n(f),A=r(39760),g=r.n(A),w=r(27528),b=r.n(w),x=r(91414),y=r(52797),_=r(88681),C=r(53332),N=r(48971),j=r(27859),k=r(7787),S=r(15801),U=r(33190),q=["comment"],T=["name","banned","ban_message","member_of","member_of_closure","read_request_rate_limit","request_queue_size_limit","write_request_rate_limit","upravlyator_managed","ldap"];function P(e){var t=e.$attributes,r=t.member_of,n=t.member_of_closure,a=t.upravlyator_managed,s=t.ldap;r.sort(),n.sort();var o=C.Mv.get(a||!1);return e.$attributes.idm=o,e.$attributes.externalSystem=(0,U.d)(s,o),e.$attributes.transitiveGroups=v()(n,r),e.$attributes}function F(){return function(e){return e({type:x.Oi.REQUEST}),(0,_.Q1)(j.Vu.usersData,{attributes:T}).then((function(t){var r=[];g()(t,(function(e){r.push(P(e))})),e({type:x.Oi.SUCCESS,data:{users:r}})})).catch((function(t){e({type:x.Oi.FAILURE,data:t})}))}}function E(e){return function(t){if(e){t({type:x.aD.REQUEST});var r="//sys/users/".concat(e);return j.Qq.get(j.Vu.usersEditData,{path:r,attributes:T}).then((function(r){t({type:x.aD.SUCCESS,data:{data:P(r)}}),t({type:x.Zc,data:{showModal:!0,username:e}})})).catch((function(e){return t({type:x.aD.FAILURE,data:e})}))}t({type:x.Zc,data:{showModal:!0}})}}function M(e,t,r){return Promise.all(b()(r,(function(r){return k.Ay.getAclApi().removeUserFromGroup({cluster:e,username:t,groupname:r})})))}function R(e,t,r,n){return Promise.all(b()(r,(function(r){return k.Ay.getAclApi().addUserToGroup({cluster:e,username:t,groupname:r,comment:n})})))}function I(e){var t=e.username,r=e.password;return r?(0,S.s)(r).then((function(e){return j.$S.setUserPassword(j.Vu.setUserPassword,{parameters:{user:t,new_password_sha256:e}})})):Promise.resolve()}var z=r(22228),D=r(33023),G=r(13322),B=r(49214),V=r.n(B),O=r(99564),H=r.n(O),$=r(18472),Q=r(44458),W=r(6184),L=function(e){return e.users.table.nameFilter},Z=function(e){return e.users.table.groupFilter},K=function(e){return e.users.table.bannedFilter},J=(0,$.Mz)([function(e){return e.users.table.users},L,Z,K],(function(e,t,r,n){var a=[t&&function(e){return-1!==e.name.indexOf(t)},r&&function(e){var t=e.member_of,n=e.transitiveGroups;return-1!==H()(t,r)||-1!==H()(n,r)},n&&function(e){return e.banned}].filter(Boolean);return 0===a.length?e:V()(e,W.concatByAnd.apply(void 0,(0,G.A)(a)))})),Y=(0,$.Mz)([function(e){return e.users.table.sort},J],(function(e,t){return(0,Q.gn)(t,e)})),X=function(e){return e.users.editUser},ee=r(59578),te=r(58299),re=r(64922),ne=function(){var e=(0,c.wA)(),t=(0,n.useCallback)((function(){e(E())}),[]);return(0,c.d4)(y.A7)?(0,re.jsx)(te.A,{view:"action",onClick:t,children:"Create new"}):null},ae=(0,a.A)("users-page-filters"),se=function(e){function t(){var e;(0,o.A)(this,t);for(var r=arguments.length,n=new Array(r),a=0;a<r;a++)n[a]=arguments[a];return(e=(0,l.A)(this,t,[].concat(n))).toggleBannedFilter=function(){var t=e.props,r=t.bannedFilter;(0,t.setUsersBannedFilter)(!r)},e}return(0,u.A)(t,e),(0,i.A)(t,[{key:"render",value:function(){var e=this,t=this.props,r=t.className,n=t.nameFilter,a=t.groupFilter,s=t.bannedFilter;return(0,re.jsx)(D.M,{className:ae(null,r),itemsToWrap:[{name:"name",node:(0,re.jsx)(m.A,{className:ae("username-filter"),hasClear:!0,size:"m",type:"text",value:n,placeholder:"User name filter...",onChange:this.props.setUsersNameFilter}),shrinkable:!0,growable:!0,wrapperClassName:ae("item")},{name:"group",node:(0,re.jsx)(ee.Qw,{children:(0,re.jsx)(z.A,{className:ae("group-suggest"),value:a?[a]:void 0,placeholder:"Group name filter...",onChange:function(t){return e.props.setUsersGroupFilter(t[0])},disablePortal:!1})}),shrinkable:!0,growable:!0,wrapperClassName:ae("item")},{name:"banned",node:(0,re.jsx)(d.S,{size:"l",checked:s,content:"Banned",onChange:this.toggleBannedFilter})}],children:(0,re.jsx)(ne,{})})}}])}(n.Component),oe={setUsersBannedFilter:function(e){return{type:x.Nx,data:{bannedFilter:e}}},setUsersNameFilter:function(e){return{type:x.Nx,data:{nameFilter:e}}},setUsersGroupFilter:function(e){return{type:x.Nx,data:{groupFilter:e||""}}}};const ie=(0,c.Ng)((function(e){return{bannedFilter:K(e),nameFilter:L(e),groupFilter:Z(e)}}),oe)(se);var le=r(40319),ue=r(66944),ce=r(56747),de=r(96104),me=r(2735),pe=r(19410),he=r(63588),fe=r(95664),ve=r(53775),Ae=r(28407),ge=r(20361),we=r(31470),be=r.n(we),xe=r(75414),ye=r.n(xe),_e=r(29081),Ce=r(84092),Ne=r.n(Ce),je=r(88034),ke=function(e){var t=e.username;return Ne().v3.create({parameters:{type:"user",attributes:{name:t}}})},Se=["idm","groups","newGroups","password"],Ue=(0,a.A)("users-page-editor"),qe=function(e){function t(){var e;(0,o.A)(this,t);for(var r=arguments.length,n=new Array(r),a=0;a<r;a++)n[a]=arguments[a];return(e=(0,l.A)(this,t,[].concat(n))).state={},e.onAdd=function(){var t=(0,Ae.A)((0,ve.A)().mark((function t(r){var n,a,s,o,i,l,u,c,d,m,f,v,A,g,w,x,y;return(0,ve.A)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=r.getState(),a=n.values,s=a.general,o=a.groups,i=a.ban,l=a.password,(u=(0,le.A)((0,le.A)({idm:s.idm,read_request_rate_limit:s.read_request_rate_limit.value,request_queue_size_limit:s.request_queue_size_limit.value,write_request_rate_limit:s.write_request_rate_limit.value,password:l.password},o),i)).idm,c=u.groups,d=u.newGroups,m=u.password,f=(0,h.A)(u,Se),v=(0,p.A)(c,1),A=v[0],g=b()(V()(null==A?void 0:A.data,"removed"),"title"),(w=ye()(f,(function(t,r,n){return be()(r,e.props[n])||(t[n]=r),t}),{})).ban_message||e.props.ban_message||delete w.ban_message,!e.isNewUser()){t.next=21;break}return x=s.name,y=x,t.prev=10,t.next=13,ke({username:x});case 13:t.next=19;break;case 15:return t.prev=15,t.t0=t.catch(10),e.setState({error:t.t0}),t.abrupt("return",Promise.reject(t.t0));case 19:t.next=23;break;case 21:x=e.props.username,y=s.name;case 23:return t.abrupt("return",e.props.saveUserData({username:x,newName:y,attributes:w,groupsToAdd:d,groupsToRemove:g,password:m}).then((function(){(0,_.zl)(),e.props.fetchUsers()})).catch((function(t){return e.setState({error:t}),Promise.reject(t)})));case 24:case"end":return t.stop()}}),t,null,[[10,15]])})));return function(e){return t.apply(this,arguments)}}(),e.onClose=function(){e.props.closeUserEditorModal()},e}return(0,u.A)(t,e),(0,i.A)(t,[{key:"isNewUser",value:function(){return!this.props.username}},{key:"render",value:function(){var e=this.props,r=e.className,a=e.showModal,s=e.username,o=e.idm,i=e.banned,l=e.ban_message,u=e.member_of,c=e.read_request_rate_limit,d=e.request_queue_size_limit,m=e.write_request_rate_limit,p=e.groupAttributesMap,h=e.isUserManagementEnabled,f=(0,ge.Y)([this.state.error]);return(0,re.jsxs)(n.Fragment,{children:[(0,re.jsx)(ee.Qw,{}),(0,re.jsx)(ge.yZ,{className:Ue(null,r),headerProps:{title:this.isNewUser()?"Create user":"User ".concat(s)},size:"l",initialValues:{general:{idm:void 0===o?"":String(o),name:s,read_request_rate_limit:{value:c||1},request_queue_size_limit:{value:d||1},write_request_rate_limit:{value:m||1}},groups:{newGroups:[],groups:t.prepareCurrent(u,p),comment:""},ban:{banned:i||!1,ban_message:l},password:{password:"",passwordConfirm:""}},onAdd:this.onAdd,visible:Boolean(a),onClose:this.onClose,fields:[{type:"tab-vertical",name:"general",title:"General",fields:[].concat((0,G.A)((0,_e.Gq)()?[{type:"plain",name:"idm",caption:"IDM"}]:[]),(0,G.A)(h?[{name:"name",type:"text",required:!0,caption:"Name"}]:[]),[{type:"number",name:"request_queue_size_limit",caption:"Request queue size limit",extras:{min:1,hidePrettyValue:!0}},{type:"number",name:"read_request_rate_limit",caption:"Read request rate limit",extras:{min:1,hidePrettyValue:!0}},{type:"number",name:"write_request_rate_limit",caption:"Write request rate limit",extras:{min:1,hidePrettyValue:!0}}],(0,G.A)(f))}].concat((0,G.A)((0,_e.Gq)()?[{type:"tab-vertical",name:"groups",title:"Groups",fields:[{type:"yt-group",name:"newGroups",caption:"Groups",extras:{multiple:!0,showTags:!0,disabled:!(0,_e.Gq)(),maxVisibleValues:3,placeholder:"Enter group name"}},{name:"groups",type:"multi-editable-lists",caption:"",extras:{titleClassName:Ue("list-title")}},{name:"comment",caption:"Comment for IDM",type:"textarea",extras:{disabled:!(0,_e.Gq)()}}].concat((0,G.A)(f))}]:[]),[{type:"tab-vertical",name:"ban",title:"Ban",fields:[{type:"tumbler",name:"banned",caption:"Ban user"},{type:"textarea",name:"ban_message",caption:"Ban message"}].concat((0,G.A)(f))}],(0,G.A)(h?[{type:"tab-vertical",name:"password",title:"Password",fields:[{name:"password",type:"text",caption:"New password",extras:function(){return{type:"password"}}},{name:"passwordConfirm",type:"text",caption:"Confirm password",extras:function(){return{type:"password"}}}].concat((0,G.A)(f))}]:[])),validate:function(e){var t=e.password,r={};return t.password!==t.passwordConfirm&&(r.password="New and confirm password must be equal"),{password:r}}})]})}}],[{key:"prepareGroups",value:function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((function(t){var r=e[t];return{title:t,frozen:!C.Mv.get(null==r?void 0:r.upravlyator_managed)}}))}},{key:"prepareCurrent",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return[{title:"Current",data:t.prepareGroups(e,r)}].filter((function(e){return e.data.length}))}}])}(n.Component),Te={closeUserEditorModal:function(){return{type:x.Zc,data:{showModal:!1,username:""}}},saveUserData:function(e){var t=e.username,r=e.newName,n=e.attributes,a=e.groupsToAdd,s=e.groupsToRemove,o=e.password;return function(e,i){e({type:x.aD.REQUEST});var l="//sys/users/".concat(t),u=[],c=n.comment,d=(0,h.A)(n,q);g()(d,(function(e,t){u.push({command:"set",parameters:{path:"".concat(l,"/@").concat(t)},input:e})})),r!==t&&u.push({command:"set",parameters:{path:"".concat(l,"/@name")},input:r});var m=i(),f=(0,y.dB)(m);return Promise.all([R(f,t,a,c),M(f,t,s),I({username:t,password:o}),u.length&&j.Qq.executeBatch(j.Vu.usersSaveData,{requests:u})].filter(Boolean)).then((function(t){var r=(0,p.A)(t,4),n=(r[0],r[1],r[2],r[3]),a=(0,N.$7)(n,"Failed to save user's data");if(a)throw a;e({type:x.aD.SUCCESS,data:{}}),e(F())})).catch((function(t){var r,n=(null==t||null===(r=t.response)||void 0===r?void 0:r.data)||t;return e({type:x.aD.FAILURE,data:n}),Promise.reject(n)}))}},fetchUsers:F};const Pe=(0,c.Ng)((function(e){var t=X(e),r=t.showModal,n=t.username,a=t.data,s=a&&n===a.name?a:{};return(0,le.A)((0,le.A)({showModal:r,username:n},s),{},{groupAttributesMap:(0,y.CS)(e),isUserManagementEnabled:(0,y.A7)(e)})}),Te)(qe);var Fe=r(89648),Ee=function(){var e=(0,c.wA)(),t=n.useState(void 0),r=(0,p.A)(t,2),a=r[0],s=r[1],o=(0,c.d4)((function(e){return e.users.deleteUser.usernameToDelete})),i=(0,n.useCallback)((function(){e((function(e){e(je.u.actions.setModalState({usernameToDelete:""}))}))}),[e]),l=(0,n.useCallback)((0,Ae.A)((0,ve.A)().mark((function t(){return(0,ve.A)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,s(void 0),t.next=4,void 0,r=o,Ne().v3.remove({parameters:{path:"//sys/users/".concat(r)}});case 4:i(),(0,_.zl)(),e(F()),t.next=12;break;case 9:t.prev=9,t.t0=t.catch(0),s(t.t0);case 12:case"end":return t.stop()}var r}),t,null,[[0,9]])}))),[e,o,i]);return(0,re.jsx)(ge.yZ,{visible:Boolean(o),headerProps:{title:"Delete user ".concat(o)},pristineSubmittable:!0,onClose:i,onAdd:l,fields:[{name:"username",type:"block",extras:{children:(0,re.jsxs)(Fe.E,{children:['Are you sure you want to delete "',o,'"?']})}}].concat((0,G.A)((0,ge.Y)([a])))})},Me=r(5800),Re=r(62561),Ie=r(76426),ze=r(88787),De=(0,a.A)("yt-user-actions"),Ge=function(e){var t,r=e.className,a=e.cluster,s=e.username,o=(0,c.wA)(),i=(0,n.useCallback)((function(){o(E(s))}),[s,o]),l=(0,n.useCallback)((function(){var e;o((e=s,function(t){t(je.u.actions.setModalState({usernameToDelete:e}))}))}),[s,o]);return t=(0,c.d4)(y.A7)?(0,re.jsx)(te.A,{view:"flat-secondary",size:"m",onClick:l,children:(0,re.jsx)(ze.A,{awesome:"trash-bin"})}):null,(0,re.jsxs)("div",{className:De(null,r),children:[(0,re.jsx)(Re.A,{url:k.Ay.makeUrlForUserDashboard(a,s)}),(0,re.jsx)(Ie.A,{routed:!0,url:Be(a,s),children:"</>"}),(0,re.jsx)(Me.A,{title:s,path:"//sys/users/".concat(s)}),(0,re.jsx)(te.A,{view:"flat-secondary",size:"m",onClick:i,children:(0,re.jsx)(ze.A,{awesome:"pencil-alt"})}),t]})};function Be(e,t){return"/".concat(e,"/operations?mode=list&user=").concat(t,"&state=all")}var Ve=(0,a.A)("users-page-table"),Oe={displayIndices:!1,stickyHead:ue.Ay.MOVING,stickyTop:s.kB,syncHeadOnResize:!0,dynamicRender:!0},He={name:"Name",banned:"Banned",member_of:"Groups",transitiveGroups:"Transitive groups",request_queue_size_limit:"Request queue",read_request_rate_limit:"Read request rate",write_request_rate_limit:"Write request rate",externalSystem:"External system",actions:""},$e={banned:"B",request_queue_size_limit:"RQ",read_request_rate_limit:"RRR",write_request_rate_limit:"WRR"},Qe=function(e){function t(){var e;(0,o.A)(this,t);for(var r=arguments.length,n=new Array(r),a=0;a<r;a++)n[a]=arguments[a];return(e=(0,l.A)(this,t,[].concat(n))).renderColumnHeader=function(t,r){var n=e.props.sort,a=n.column,s=n.order,o=t===a,i=He[t];return(0,re.jsx)(ce.A,{className:Ve("header-cell",{col:t,sortable:r},"data-table__head-cell"),column:t,title:i,shortTitle:$e[t]||i,order:o?s:"",onSort:e.onColumnSort,withUndefined:!0})},e.onColumnSort=function(t,r){(0,e.props.setUsersPageSorting)({column:t,order:r})},e.renderNumberCell=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row[e];return(0,re.jsx)("div",{className:Ve("content",{col:e}),children:(0,re.jsx)("span",{children:t})})},e.renderExternalSystemCell=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row.externalSystem;return(0,re.jsx)("div",{className:Ve("content",{col:e}),children:(0,re.jsx)("div",{className:Ve(e),children:t})})},e.renderActionsCell=function(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).row.name;return(0,re.jsx)(Ge,{className:Ve("content",{col:e}),username:r,cluster:t})},e}return(0,u.A)(t,e),(0,i.A)(t,[{key:"componentDidMount",value:function(){(0,this.props.fetchUsers)()}},{key:"renderNameCell",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row,r=t.name,n=t.upravlyator_managed;return(0,re.jsx)("div",{className:Ve("content",{col:e}),children:(0,re.jsx)(fe.R,{name:r,internal:!n})})}},{key:"renderBannedCell",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row,r=t.banned,n=t.ban_message;return(0,re.jsx)(pe.m,{content:n,children:(0,re.jsx)("div",{className:Ve("content",{col:e}),children:r&&(0,re.jsx)("span",{className:Ve(e),children:"B"})})})}},{key:"renderGroupsCell",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row[e];return(0,re.jsx)("div",{className:Ve("content",{col:e}),children:(0,re.jsx)(de.A,{className:Ve("groups"),items:t})})}},{key:"renderTable",value:function(){var e=this,t=this.props,r=t.cluster,n=t.users,a=t.loaded,s=t.loading,o=function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{name:t,align:ue.Ay.LEFT,sortable:!1,className:Ve("td",{col:t.toLowerCase()}),header:e.renderColumnHeader(t,!r)}},i=!0,l=[(0,le.A)((0,le.A)({},o("name")),{},{render:this.renderNameCell.bind(this,"name")}),(0,le.A)((0,le.A)({},o("banned")),{},{render:this.renderBannedCell.bind(this,"banned"),align:ue.Ay.CENTER}),(0,le.A)((0,le.A)({},o("externalSystem",i)),{},{render:this.renderExternalSystemCell.bind(this,"externalSystem")}),(0,le.A)((0,le.A)({},o("member_of",i)),{},{render:this.renderGroupsCell.bind(this,"member_of")}),(0,le.A)((0,le.A)({},o("transitiveGroups",i)),{},{render:this.renderGroupsCell.bind(this,"transitiveGroups")}),(0,le.A)((0,le.A)({},o("request_queue_size_limit")),{},{render:this.renderNumberCell.bind(this,"request_queue_size_limit"),align:"right"}),(0,le.A)((0,le.A)({},o("read_request_rate_limit")),{},{render:this.renderNumberCell.bind(this,"read_request_rate_limit"),align:"right"}),(0,le.A)((0,le.A)({},o("write_request_rate_limit")),{},{render:this.renderNumberCell.bind(this,"write_request_rate_limit"),align:"right"}),(0,le.A)((0,le.A)({},o("actions")),{},{header:"",render:this.renderActionsCell.bind(this,"actions",r)})];return(0,re.jsx)(me.Ay,{loaded:a,loading:s,className:Ve("table"),data:n,columns:l,settings:Oe,theme:"yt-internal"})}},{key:"render",value:function(){var e=this.props,t=e.className,r=e.error,n=e.showModal;return(0,re.jsx)("div",{className:Ve(null,t),children:(0,re.jsxs)(he.A,{loaded:!0,error:Boolean(r),errorData:r||null,children:[this.renderTable(),n&&(0,re.jsx)(Pe,{}),(0,re.jsx)(Ee,{})]})})}}])}(n.Component),We={fetchUsers:F,setUsersPageSorting:function(e){var t=e.column,r=e.order,n={column:t,order:r};return r||(n.column=""),{type:x.Nx,data:{sort:n}}}};const Le=(0,c.Ng)((function(e){var t=function(e){return e.users.table}(e),r=t.loaded,n=t.loading,a=t.error,s=t.sort,o=X(e).showModal;return{loaded:r,loading:n,error:a,users:Y(e),sort:s,cluster:(0,y.dB)(e),showModal:o}}),We)(Qe);var Ze=(0,a.A)("users-page");function Ke(){return(0,re.jsx)("div",{className:Ze(null,"elements-main-section"),children:(0,re.jsx)(s.Ay,{hideToolbarShadow:!0,className:"elements-section",toolbar:(0,re.jsx)(ie,{}),content:(0,re.jsx)(Le,{})})})}},56747:(e,t,r)=>{r.d(t,{A:()=>_});var n=r(40319),a=r(77810),s=r(76872),o=r(88314),i=r.n(o),l=r(10559),u=r(89648),c=r(80999),d=r(6542),m=r(32235),p=r(57486),h=r(44458),f=r(64922),v=(0,s.A)("yt-page-counter");function A(e){var t=e.pageIndex,r=e.pageCount,n=e.className;return void 0===t||void 0===r?null:r>1?(0,f.jsxs)("span",{className:v(null,n),children:["Page: ",(t||0)+1," / ",r]}):null}const g=a.memo(A);var w=r(84549),b=r(12680),x=(0,s.A)("column-header");function y(e){var t=e.column,r=e.title,n=e.shortTitle,a=null!=r?r:i()(t);return{nameContent:n||a,titleContent:a}}function _(e){var t=e.className,r=e.align,s=e.order,o=e.onSort,i=e.multisortIndex,l=e.loading,c=e.pageIndex,d=e.pageCount,m=function(e){if(void 0===e.options){var t=e.column,r=e.allowUnordered,a=e.withUndefined,s=e.title,o=e.shortTitle,i=e.allowedOrderTypes;return(0,n.A)({column:t,allowUnordered:r,withUndefined:a,allowedOrderTypes:i},y({column:t,title:s,shortTitle:o}))}var l=e.column,u=e.options,c=e.title,d=e.shortTitle,m=u.find((function(e){var t=e.column;return l===t}));return m||(0,b.N1)({message:"Unexpected behavior: missing value in ColumnHeader.props.options",additional:e}),(0,n.A)((0,n.A)({subColumn:y((0,n.A)({},m))},m),y({column:"",title:c,shortTitle:d}))}(e),v=m.column,A=m.allowUnordered,_=m.withUndefined,N=m.nameContent,j=m.titleContent,k=m.allowedOrderTypes,S=m.subColumn,U=a.useCallback((function(e){var t=k?(0,h.Pc)(s,k):(0,h.$N)(s,A,_);null==o||o(v,t,{currentOrder:s,multisort:e.ctrlKey||e.metaKey})}),[v,s,o,A,k,_]),q=Boolean(o);return(0,f.jsxs)("div",{className:x(null,t),children:[(0,f.jsxs)("div",{className:x("label-icon",{sortable:q,align:r}),onClick:q?U:void 0,children:[(0,f.jsx)("span",{className:x("label"),title:j,children:N}),q&&(0,f.jsx)("span",{className:x("icon"),children:(0,f.jsx)(p.A,{order:s})}),void 0!==i&&(0,f.jsxs)("span",{className:x("multisort"),children:[" ",(0,f.jsx)("sup",{children:i})]}),Boolean(s)&&Boolean(S)&&(0,f.jsx)(u.E,{className:x("label",{"sub-column":!0}),variant:"caption-2",title:null==S?void 0:S.titleContent,color:"dark-secondary",children:null==S?void 0:S.nameContent})]}),(0,f.jsx)(C,{options:e.options,order:s,onSort:o}),void 0!==l&&(0,f.jsx)("div",{className:x("loader"),children:(0,f.jsx)(w.A,{visible:l})}),Boolean(d)&&(0,f.jsx)(g,{className:x("page-counter"),pageIndex:c,pageCount:d})]})}function C(e){var t=e.order,r=e.options,n=e.onSort;return r?(0,f.jsx)(c.r,{items:r.map((function(e){return{text:y(e).titleContent,action:function(){if(n){var r=e.column,a=e.allowUnordered,s=e.withUndefined,o=e.allowedOrderTypes,i=o?(0,h.Pc)(t,o):(0,h.$N)(t,a,s);n(r,i,{currentOrder:t})}}}})),renderSwitcher:function(e){var t=e.onClick;return(0,f.jsx)(d.$,{onClick:t,view:"flat",size:"xs",children:(0,f.jsx)(m.I,{size:12,data:l.A})})}}):null}},57486:(e,t,r)=>{r.d(t,{A:()=>A});var n=r(29121),a=r(12937),s=r(66134),o=r(10785),i=r(68175),l=r(77810),u=r(76872),c=r(64772),d=r(88787),m=r(19410),p=r(44458),h=r(64922),f=(0,u.A)("sort-icon"),v=(0,i.A)((0,i.A)((0,i.A)((0,i.A)((0,i.A)((0,i.A)((0,i.A)({},"","sort"),"asc","sort-up"),"desc","sort-down"),"asc-undefined","arrow-to-bottom"),"desc-undefined","arrow-from-bottom"),"undefined-asc","arrow-from-top"),"undefined-desc","arrow-to-top"),A=function(e){function t(){var e;(0,n.A)(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return(e=(0,s.A)(this,t,[].concat(a))).onClick=function(){var t=e.props,r=t.order,n=t.onChange,a=t.allowUnordered,s=t.withUndefined;n&&n((0,p.$N)(r,a,s))},e}return(0,o.A)(t,e),(0,a.A)(t,[{key:"render",value:function(){var e=this.props,t=e.className,r=e.label,n=e.order,a=e.hidden,s=v[n||""];return(0,h.jsxs)("span",{className:f({hidden:a},t),onClick:this.onClick,children:[r&&(0,h.jsx)("span",{className:f("label"),children:r}),(0,h.jsx)(m.m,{className:f("icon"),content:n?c.A.ReadableField(n):"Unordered",children:(0,h.jsx)(d.A,{awesome:s,face:"solid"})})]})}}])}(l.Component)},59578:(e,t,r)=>{r.d(t,{Qw:()=>p,dF:()=>d,jx:()=>m});var n=r(77810),a=r(15647),s=r(80676),o=r.n(s),i=r(88144),l=r.n(i),u=r(52797),c=r(53246);function d(){var e=(0,a.wA)();n.useEffect((function(){e((0,c.uU)())}),[]);var t=(0,a.d4)(u.mz);return{getFiltered:n.useCallback((function(e){var r=o()(t,e,(function(t){return t.substr(0,e.length)})),n=l()(t,e,(function(t){return t.substr(0,e.length)}));return t.slice(r,n)}),[t]),allNames:t}}function m(){var e=(0,a.wA)();n.useEffect((function(){e((0,c.qR)())}),[])}function p(e){var t=e.children;return m(),null!=t?t:null}},62561:(e,t,r)=>{r.d(t,{A:()=>u});var n=r(77810),a=r(76426),s=r(88787);const o=(0,r(92611).Kc)("yt:chart-link",{en:{View:"View"},ru:{View:"Смотреть"}});var i=r(64922);function l(e){var t=e.className,r=e.url,l=e.title,u=e.theme,c=e.children,d=e.hideIcon,m=e.face,p=e.wrapContent;if(!r)return null;var h=d?null:(0,i.jsx)(s.A,{awesome:"chart-bar",face:m}),f=c?(0,i.jsxs)(n.Fragment,{children:[h,c]}):h;return(0,i.jsx)(a.A,{className:t,target:"_blank",theme:u,url:r,title:null!=l?l:o("View"),children:p?p(f):f})}const u=n.memo(l)},63588:(e,t,r)=>{r.d(t,{A:()=>h});var n=r(29121),a=r(12937),s=r(66134),o=r(10785),i=r(77810),l=r(10720),u=r(8208),c=r(73822),d=r(48971),m=r(64922),p=new l.I,h=function(e){function t(){return(0,n.A)(this,t),(0,s.A)(this,t,arguments)}return(0,o.A)(t,e),(0,a.A)(t,[{key:"componentDidUpdate",value:function(){var e=this.props,t=e.error,r=e.loaded,n=e.errorData;t&&r&&p.add({theme:"danger",name:"network",autoHiding:5e5,title:"Oops! something went wrong.",content:n?n.message:c.A.format.NO_VALUE,actions:[{label:" view",onClick:function(){return(0,d.eW)(n)}}]})}},{key:"render",value:function(){var e=this.props,t=e.alwaysShowError,r=void 0!==t&&t,n=e.error,a=e.errorData,s=e.loaded,o=e.children;return!n||!r&&s?o:(0,m.jsx)(u.z,{error:a})}}])}(i.Component)},96104:(e,t,r)=>{r.d(t,{A:()=>g});var n=r(40319),a=r(29121),s=r(12937),o=r(66134),i=r(10785),l=r(77810),u=r(76872),c=r(31470),d=r.n(c),m=r(31680),p=r.n(m),h=r(63366),f=r(19410),v=r(64922),A=(0,u.A)("comma-separated-list-with-rest-counter"),g=function(e){function t(){var e;(0,a.A)(this,t);for(var r=arguments.length,n=new Array(r),s=0;s<r;s++)n[s]=arguments[s];return(e=(0,o.A)(this,t,[].concat(n))).ref=void 0,e.unmounted=!1,e.state={restCounter:0,rows:[],showDialog:!1},e.onRef=function(t){e.ref=t,e.updateState()},e.updateStateImpl=function(){e.unmounted&&(e.unmounted=!0);var t=e.props.items;if(!e.ref||!t||!t.length)return e.setStateIfChanged({rows:[],restCounter:0});var r=e.ref,n=r.offsetWidth,a=r.offsetHeight,s=getComputedStyle(e.ref),o=s.fontWeight,i=s.lineHeight,l=s.fontSize,u=s.fontFamily,c="".concat(o," ").concat(l,"/").concat(i," ").concat(u);if(!n||!a)return e.setStateIfChanged({rows:[],restCounter:0});var d=document.createElement("canvas").getContext("2d");d.font=c;for(var m,p=[],h=0,f=parseInt(i),v=[],A=0;(p.length+1)*f<=a&&h<t.length;){var g=h===t.length-1,w=t[h++],b=d.measureText(w+", ").width;A+=b;var x=a-(p.length+1)*f<f;A<=n-(x&&!g?d.measureText((m=t.length-h," +".concat(m))).width:0)?(v.push(w),g&&p.push(v)):(p.push(v),x?--h:(v=[w],A=b,g&&p.push(v)))}var y={offsetWidth:n,offsetHeight:a,font:c,lineHeight:i,items:t,rows:p,restCounter:t.length-h};e.setStateIfChanged(y)},e.updateState=p()(e.updateStateImpl,30),e.renderItem=function(t){var r=e.props.itemRenderer;return r?r(t):t},e.closeDialog=function(){e.setState({showDialog:!1})},e.onCounterClick=function(){e.allowItemsInTooltip()||e.setState({showDialog:!0})},e}return(0,i.A)(t,e),(0,s.A)(t,[{key:"componentWillUnmount",value:function(){this.unmounted=!0}},{key:"componentDidUpdate",value:function(){this.updateState()}},{key:"setStateIfChanged",value:function(e){var t=this,r=Object.keys(e).some((function(r){return!d()(t.state[r],e[r])}));return r&&this.setState((0,n.A)({},e)),r}},{key:"renderRows",value:function(){var e=this,t=this.state.rows;return t.map((function(r,n){return(0,v.jsx)("div",{className:A("row"),children:e.renderRow(r,n===t.length-1)},n)}))}},{key:"renderRow",value:function(e,t){return(0,v.jsxs)(l.Fragment,{children:[(0,v.jsx)("div",{className:A("row-items"),children:this.renderItems(e,t)}),t&&this.renderCounter()]})}},{key:"renderItems",value:function(e,t){var r=this;return e.map((function(n,a){var s=a===e.length-1,o=t&&s&&!r.state.restCounter?"":", ";return(0,v.jsxs)("span",{className:A("row-item"),children:[r.renderItem(n),o]},a)}))}},{key:"renderCounter",value:function(){var e=this.state.restCounter;if(!e)return null;var t=!this.allowItemsInTooltip(),r=t?"Click to show all items":this.renderTooltip(),n=this.state.showDialog,a=n;return(0,v.jsxs)(f.m,{className:A("hover-tooltip"),content:r,children:[(0,v.jsxs)("div",{className:A("row-counter",{clickable:t}),onClick:this.onCounterClick,children:["+",e]}),(0,v.jsx)(h.A,{title:"All items",visible:n,onCancel:this.closeDialog,children:n&&this.renderTooltip()})]},a)}},{key:"renderTooltip",value:function(){var e=this,t=this.state.items;return(0,v.jsx)("div",{className:A("tooltip","yc-root"),children:t.map((function(t){return(0,v.jsx)("div",{children:e.renderItem(t)},t)}))})}},{key:"allowItemsInTooltip",value:function(){var e=this.props.maxTooltipCount;return this.state.items.length<=Math.min(20,e)}},{key:"render",value:function(){var e=this.props.className;return(0,v.jsx)("div",{ref:this.onRef,className:A(null,e),children:this.renderRows()})}}])}(l.Component);g.defaultProps={maxTooltipCount:20}},97536:(e,t,r)=>{r.d(t,{A:()=>u});var n=r(40319),a=r(18801),s=(r(77810),r(58299)),o=r(88787),i=r(64922),l=["view","size"];function u(e){var t=e.view,r=void 0===t?"flat-secondary":t,u=e.size,c=void 0===u?"m":u,d=(0,a.A)(e,l);return(0,i.jsx)(s.A,(0,n.A)((0,n.A)({view:r,size:c},d),{},{children:(0,i.jsx)(o.A,{awesome:"at"})}))}}}]);
|
|
2
|
-
//# sourceMappingURL=users.a0dc610f.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/users.a0dc610f.chunk.js","mappings":"mUAKA,GAAeA,EAAAA,EAAAA,IAAc,uBAAwB,CAACC,GAAAA,EAAIC,GAAAA,I,yIC0D1D,SAFkBC,EAAAA,EAAAA,IAAQ,KAAM,CAACC,oBAAAA,EAAAA,IAEjC,EAvCA,SAAkCC,GAaY,IAZ1CC,EAAKD,EAALC,MAAKC,EAAAF,EACLG,aAAAA,OAAY,IAAAD,EAAG,WACX,MAAO,CAAC,CACZ,EAACA,EACDE,EAAIJ,EAAJI,KACAC,EAASL,EAATK,UACAC,EAASN,EAATM,UACAC,EAAUP,EAAVO,WACAR,EAAmBC,EAAnBD,oBAAmBS,EAAAR,EACnBS,YAAAA,OAAW,IAAAD,GAAOA,EAAAE,EAAAV,EAClBW,aAAAA,OAAY,IAAAD,EAAG,CAACE,UAAW,aAAcC,QAASC,EAAK,oBAAmBJ,EACvEK,GAAIC,EAAAA,EAAAA,GAAAhB,EAAAiB,GAEP,OACIC,EAAAA,EAAAA,KAACC,EAAAA,GAAgBC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTL,GAAI,IACRJ,aAAcA,EACdF,YAAaA,EACbY,QAAS,WACL,IAAMC,GAASF,EAAAA,EAAAA,GAAA,CACXhB,KAAAA,EACAC,UAAAA,GACGF,KAGPJ,GAAmBqB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAChBnB,MAAAA,GACGqB,GAAS,IACZhB,UAAAA,EACAC,WAAAA,IAER,IAGZ,G,6DC1DA,QADmC,SAAAgB,GAAK,OAAIL,EAAAA,EAAAA,KAAA,OAAAE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAKI,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,aAAgBH,GAAK,IAAAI,UAAET,EAAAA,EAAAA,KAAA,QAAMO,KAAK,eAAeG,SAAS,UAAUC,EAAE,uMAAuMC,SAAS,cAAmB,C,gFCA1Y,SAAeC,EAAMC,GAAA,OAAAC,EAAAC,MAAC,KAADC,UAAA,CAI3B,SAAAF,IAAA,OAAAA,GAAAG,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAJM,SAAAC,EAAsBC,GAAW,IAAAC,EAAA,OAAAJ,EAAAA,EAAAA,KAAAK,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAClBC,OAAOC,OAAOC,OAAO,WAAW,IAAIC,aAAcC,OAAOV,IAAM,KAAD,EAAvE,OAAHC,EAAGE,EAAAQ,KAAAR,EAAAS,OAAA,UAEFC,EAAAA,EAAAA,GAAI,IAAIC,WAAWb,IAAMc,KAAI,SAACC,GAAC,OAAM,KAAOA,EAAEC,SAAS,KAAKC,OAAO,EAAE,IAAEC,KAAK,KAAG,wBAAAhB,EAAAiB,OAAA,GAAArB,EAAA,MACzFL,MAAA,KAAAC,UAAA,CAEM,IAAM0B,EAA0B,WAAO,IAADC,EACzC,OAAOC,QAAc,QAAPD,EAAChB,cAAM,IAAAgB,GAAQ,QAARA,EAANA,EAAQf,cAAM,IAAAe,OAAA,EAAdA,EAAgBd,OACnC,C,6SCWMgB,GAAQC,EAAAA,EAAAA,GAAG,iBAiBjB,SAASC,EAAa3C,GAClB,IACI4C,EAUA5C,EAVA4C,MACAC,EASA7C,EATA6C,MACAC,EAQA9C,EARA8C,SACAC,EAOA/C,EAPA+C,SACAC,EAMAhD,EANAgD,YACAC,EAKAjD,EALAiD,UACAC,EAIAlD,EAJAkD,SACAC,EAGAnD,EAHAmD,MAAKC,EAGLpD,EAFAqD,cAAAA,OAAa,IAAAD,GAAOA,EACjB5D,GAAIC,EAAAA,EAAAA,GACPO,EAAKN,GAEH4D,EAAUC,IAAKX,GAAO,SAACY,GAAI,MAAM,CACnCL,MAAOK,EACPC,KAAMD,EACT,IAEKE,IAASP,SAAAA,EAAOQ,QAEhBC,EAAYC,EAAAA,SAAc,kBAAMN,IAAKO,IAAQ,GAAIX,IAAQ,SAACzE,GAAK,MAAM,CAACA,MAAAA,EAAM,GAAE,GAAE,CAACyE,IAEjFY,EAAeF,EAAAA,aACjB,SAACG,GACG,IAAMC,EAAMC,IAAQF,GAAS,SAAAvF,GAAS,OAAAA,EAAP0F,OAAqB,IAAEnC,KAAI,SAAAoC,GAAO,OAAAA,EAAL1F,KAAgB,IAC5EqE,EAASkB,EACb,GACA,CAACd,EAAOJ,IAGZ,OACIsB,EAAAA,EAAAA,MAAA,OAAKpB,UAAWR,EAAM,CAACiB,MAAAA,GAAQT,GAAW7C,SAAA,EACtCT,EAAAA,EAAAA,KAAC2E,EAAAA,GAAMzE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACCL,GAAI,IACRoD,MAAOU,EACPiB,SAAUxB,EACVC,YAAaA,EACbG,MAAOnD,EAAMmD,MACbL,SAAUA,EACVD,MAAOA,QAAAA,EAAS,MAChB2B,YAAU,EACVnB,cAAeA,KAElBP,GAAYI,IAAYvD,EAAAA,EAAAA,KAAC8E,EAAAA,GAAY,CAAC1B,SAAUgB,EAAcZ,MAAOS,MAGlF,CAEAjB,EAAa+B,QAAU,SAACvB,GACpB,QAAQA,SAAAA,EAAOQ,OACnB,EAEAhB,EAAagC,gBAAkB,WAC3B,MAAO,EACX,EAUA,SAAepG,EAAAA,EAAAA,KARS,SAACqG,EAAkBC,GAKvC,MAAO,CAACjC,MAJUiC,EAAXC,SAEAC,EAAAA,EAAAA,IAA0BH,IAC3BI,EAAAA,EAAAA,IAAuBJ,GAEjC,GAEA,CAAwCjC,E,kDCnG3BsC,EAAoB,SAACC,EAAeC,GAC7C,IAAMC,EAASD,IAAOE,EAAAA,EAAAA,MAEtB,OAAIH,EAAa,OACbE,EAAe,MACZ,GACX,C,qWCWME,EAAkB,CACpB,OACA,SACA,cACA,YACA,oBACA,0BACA,2BACA,2BACA,sBACA,QAGG,SAASC,EAAgB/B,GAC5B,IAAAgC,EAOIhC,EANAiC,YACeC,EAAMF,EAAjBG,UACmBC,EAASJ,EAA5BK,kBACqBV,EAAGK,EAAxBM,oBACAZ,EAAIM,EAAJN,KAGRQ,EAAOK,OACPH,EAAUG,OACV,IAAMX,EAASY,EAAAA,GAAMC,IAAId,IAAO,GAKhC,OAHA3B,EAAKiC,YAAYN,IAAMC,EACvB5B,EAAKiC,YAAYS,gBAAiBjB,EAAAA,EAAAA,GAAkBC,EAAME,GAC1D5B,EAAKiC,YAA8B,iBAAIU,IAAYP,EAAWF,GACvDlC,EAAKiC,WAChB,CAEO,SAASW,IACZ,OAAO,SAACC,GAGJ,OAFAA,EAAS,CAACC,KAAMC,EAAAA,GAAYC,WAErBC,EAAAA,EAAAA,IAAaC,EAAAA,GAAQC,UAAW,CAAC3H,WAAYsG,IAC/CsB,MAAK,SAACC,GACH,IAAMC,EAAQ,GACdC,IAASF,GAAM,SAACrD,GACZsD,EAAME,KAAKzB,EAAgB/B,GAC/B,IACA6C,EAAS,CAACC,KAAMC,EAAAA,GAAYU,QAASJ,KAAM,CAACC,MAAAA,IAChD,IAAE,OACK,SAACI,GACJb,EAAS,CAACC,KAAMC,EAAAA,GAAYY,QAASN,KAAMK,GAC/C,GACR,CACJ,CAyBO,SAASE,EAAoBC,GAChC,OAAO,SAAChB,GAGJ,GAFmBgB,EAEnB,CAQAhB,EAAS,CAACC,KAAMgB,EAAAA,GAAgBd,UAChC,IAAM3H,EAAI,eAAA0I,OAAkBF,GAC5B,OAAOG,EAAAA,GACFvB,IAAIS,EAAAA,GAAQe,cAAe,CAAC5I,KAAAA,EAAMG,WAAYsG,IAC9CsB,MAAK,SAAC3C,GACHoC,EAAS,CACLC,KAAMgB,EAAAA,GAAgBL,QACtBJ,KAAM,CAACA,KAAMtB,EAAgBtB,MAEjCoC,EAAS,CACLC,KAAMoB,EAAAA,GACNb,KAAM,CAACc,WAAW,EAAMN,SAAAA,IAEhC,IAAE,OACK,SAACH,GACJ,OAAOb,EAAS,CAACC,KAAMgB,EAAAA,GAAgBH,QAASN,KAAMK,GAC1D,GAlBJ,CALIb,EAAS,CACLC,KAAMoB,EAAAA,GACNb,KAAM,CAACc,WAAW,IAsB9B,CACJ,CASA,SAASC,EAAqBC,EAASR,EAAU3B,GAC7C,OAAOoC,QAAQC,IACXxE,IAAKmC,GAAQ,SAACsC,GACV,OAAOC,EAAAA,GAAUC,YAAYC,oBAAoB,CAACN,QAAAA,EAASR,SAAAA,EAAUW,UAAAA,GACzE,IAER,CAEA,SAASI,EAAgBP,EAASR,EAAU3B,EAAQ2C,GAChD,OAAOP,QAAQC,IACXxE,IAAKmC,GAAQ,SAACsC,GACV,OAAOC,EAAAA,GAAUC,YAAYI,eAAe,CAACT,QAAAA,EAASR,SAAAA,EAAUW,UAAAA,EAAWK,QAAAA,GAC/E,IAER,CAEA,SAASE,EAAkBnE,GAAwB,IAAtBiD,EAAQjD,EAARiD,SAAUmB,EAAQpE,EAARoE,SACnC,OAAIA,GACOhI,EAAAA,EAAAA,GAAOgI,GAAU5B,MAAK,SAAC6B,GAC1B,OAAOC,EAAAA,GAAUC,gBAAgBjC,EAAAA,GAAQiC,gBAAiB,CACtDC,WAAY,CACRC,KAAMxB,EACNoB,oBAAAA,IAGZ,IAGGX,QAAQgB,SACnB,C,6GCpJaC,EAAqB,SAACnE,GAAK,OAAKA,EAAMkC,MAAMkC,MAAMC,UAAW,EAC7DC,EAAsB,SAACtE,GAAK,OAAKA,EAAMkC,MAAMkC,MAAMG,WAAY,EAC/DC,EAAuB,SAACxE,GAAK,OAAKA,EAAMkC,MAAMkC,MAAMK,YAAa,EAGjEC,GAAmBC,EAAAA,EAAAA,IAC5B,CAPoB,SAAC3E,GAAK,OAAKA,EAAMkC,MAAMkC,MAAMlC,KAAM,EAO5CiC,EAAoBG,EAAqBE,IACpD,SAACtC,EAAOmC,EAAYE,EAAaE,GAC7B,IAAMG,EAAa,CACfP,GAAe,SAAAxK,GAAM,OAAoC,IAApCA,EAAJgL,KAAeC,QAAQT,EAAkB,EAC1DE,GACK,SAAA/E,GAA8C,IAAjCuF,EAAQvF,EAAnBuB,UAAqBiE,EAAgBxF,EAAhBwF,iBACpB,OACK,IAAMC,IAAeF,EAAUR,KAC/B,IAAMU,IAAeD,EAAkBT,EAEhD,EACJE,GAAiB,SAAAS,GAAQ,OAAAA,EAANC,MAAkB,GACvCC,OAAOxH,SAET,OAA0B,IAAtBgH,EAAW7F,OACJmD,EAGJ5C,IAAQ4C,EAAOmD,EAAAA,YAAWtJ,WAAC,GAADmB,EAAAA,EAAAA,GAAI0H,IACzC,IAGSU,GAA4BX,EAAAA,EAAAA,IACrC,CA1BwB,SAAC3E,GAAK,OAAKA,EAAMkC,MAAMkC,MAAMjD,IAAK,EA0B3CuD,IACf,SAACa,EAAWrD,GACR,OAAOsD,EAAAA,EAAAA,IAAqBtD,EAAOqD,EACvC,IAISE,EAA2B,SAACzF,GAAK,OAAKA,EAAMkC,MAAMwD,QAAS,E,oCC1C3DC,GAAsC,WAC/C,IAAMlE,GAAWmE,EAAAA,EAAAA,MACX1K,GAAU2K,EAAAA,EAAAA,cAAY,WACxBpE,EAASe,IACb,GAAG,IAIH,OAFkBsD,EAAAA,EAAAA,IAAYC,EAAAA,KAItBhL,EAAAA,GAAAA,KAACiL,GAAAA,EAAM,CAACC,KAAK,SAAS/K,QAASA,EAAQM,SAAC,eAMzC,IACX,ECEMqC,IAAQC,EAAAA,EAAAA,GAAG,sBAEXoI,GAAgB,SAAAC,GAAA,SAAAD,IAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAA,KAAAH,GAAA,QAAAI,EAAAtK,UAAA+C,OAAAwH,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAAzK,UAAAyK,GAiBhB,OAjBgBL,GAAAM,EAAAA,EAAAA,GAAA,KAAAR,EAAA,GAAAvD,OAAA4D,KAclBI,mBAAqB,WACjB,IAAAC,EAA6CR,EAAKhL,MAA3CqJ,EAAYmC,EAAZnC,cACPoC,EADyCD,EAApBC,uBACCpC,EAC1B,EAAC2B,CAAC,CAAD,OAAAU,EAAAA,EAAAA,GAAAZ,EAAAC,IAAAY,EAAAA,EAAAA,GAAAb,EAAA,EAAAc,IAAA,SAAAzI,MAED,WAAU,IAAD0I,EAAA,KACLC,EAA2DC,KAAK/L,MAAzDiD,EAAS6I,EAAT7I,UAAWgG,EAAU6C,EAAV7C,WAAYE,EAAW2C,EAAX3C,YAAaE,EAAYyC,EAAZzC,aAE3C,OACI1J,EAAAA,GAAAA,KAACqM,EAAAA,EAAO,CACJ/I,UAAWR,GAAM,KAAMQ,GACvBgJ,YAAa,CACT,CACIxC,KAAM,OACNyC,MACIvM,EAAAA,GAAAA,KAACwM,EAAAA,EAAM,CACHlJ,UAAWR,GAAM,mBACjB2J,UAAQ,EACRC,KAAK,IACL/F,KAAK,OACLnD,MAAO8F,EACPjG,YAAY,sBACZD,SAAUgJ,KAAK/L,MAAMsM,qBAG7BC,YAAY,EACZC,UAAU,EACVC,iBAAkBhK,GAAM,SAE5B,CACIgH,KAAM,QACNyC,MACIvM,EAAAA,GAAAA,KAAC+M,GAAAA,GAAY,CAAAtM,UACTT,EAAAA,GAAAA,KAACgD,EAAAA,EAAY,CACTM,UAAWR,GAAM,iBACjBU,MAAOgG,EAAc,CAACA,QAAewD,EACrC3J,YAAY,uBACZD,SAAU,SAAC6J,GAAI,OAAKf,EAAK7L,MAAM6M,oBAAoBD,EAAK,GAAG,EAC3DvJ,eAAe,MAI3BkJ,YAAY,EACZC,UAAU,EACVC,iBAAkBhK,GAAM,SAE5B,CACIgH,KAAM,SACNyC,MACIvM,EAAAA,GAAAA,KAACmN,EAAAA,EAAQ,CACLT,KAAK,IACLU,QAAS1D,EACT/J,QAAQ,SACRyD,SAAUgJ,KAAKR,uBAI7BnL,UAEFT,EAAAA,GAAAA,KAAC4K,GAAyB,KAGtC,IAAC,CA5EiB,CAAS1G,EAAAA,WAuFzBmJ,GAAqB,CACvBvB,qBHnCG,SAA8BpC,GACjC,MAAO,CAAC/C,KAAM2G,EAAAA,GAAyBpG,KAAM,CAACwC,aAAAA,GAClD,EGkCIiD,mBH/CG,SAA4BrD,GAC/B,MAAO,CAAC3C,KAAM2G,EAAAA,GAAyBpG,KAAM,CAACoC,WAAAA,GAClD,EG8CI4D,oBH5CG,SAA6B7C,GAChC,MAAO,CACH1D,KAAM2G,EAAAA,GACNpG,KAAM,CAACsC,YAAaa,GAAU,IAEtC,GG0CA,UAAezL,EAAAA,EAAAA,KAdS,SAACqG,GACrB,MAAO,CACHyE,aAAcD,EAAqBxE,GACnCqE,WAAYF,EAAmBnE,GAC/BuE,YAAaD,EAAoBtE,GAEzC,GAQwCoI,GAAxC,CAA4DlC,I,oOC3G/CoC,GAAa,SAAH9I,GAAuD,IAAlDiD,EAAQjD,EAARiD,SACxB,OAAO8F,KAAAA,GAAMC,OAAO,CAChBxE,WAAY,CACRtC,KAAM,OACNtH,WAAY,CACRyK,KAAMpC,KAItB,E,2CCKM5E,IAAQC,EAAAA,EAAAA,GAAG,qBAwEX2K,GAAe,SAAAtC,GAAA,SAAAsC,IAAA,IAAArC,GAAAC,EAAAA,EAAAA,GAAA,KAAAoC,GAAA,QAAAnC,EAAAtK,UAAA+C,OAAAwH,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAAzK,UAAAyK,GAsHf,OAtHeL,GAAAM,EAAAA,EAAAA,GAAA,KAAA+B,EAAA,GAAA9F,OAAA4D,KAyCjBvG,MAAe,CAAC,EAEhBoG,EACAsC,MAAK,eAAA7O,GAAAoC,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAG,SAAAC,EAAOuM,GAAyB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAApI,EAAAqI,EAAAC,EAAAxO,EAAAyO,EAAAC,EAAAC,EAAAC,EAAA/G,EAAAgH,EAAA,OAAAvN,EAAAA,GAAAA,KAAAK,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAgCnC,GAhCmCkM,EAGhCD,EAAKe,WAAUb,EAAAD,EADfe,OAAkBb,EAAUD,EAAnBe,QAA6Bb,EAASF,EAAjB/H,OAAwBkI,EAAMH,EAAXgB,IAAuBZ,EAAWJ,EAArBjF,UAE5DsF,GAAMjO,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,CACRsF,IAAKuI,EAAWvI,IAChBuJ,wBAAyBhB,EAAWgB,wBAAwBvL,MAC5DwL,yBAA0BjB,EAAWiB,yBAAyBxL,MAC9DyL,yBAA0BlB,EAAWkB,yBAAyBzL,MAC9DqF,SAAUqF,EAAYrF,UACnBmF,GACAC,IAGAzI,IAAWO,EAAqDoI,EAArDpI,OAAQqI,EAA6CD,EAA7CC,UAAqBC,EAAwBF,EAAlCtF,SAA0BhJ,GAAIC,EAAAA,EAAAA,GAAIqO,EAAMpO,IAAAuO,GAAAY,EAAAA,EAAAA,GAC3DnJ,EAAM,GAAjBwI,EAAOD,EAAA,GACRE,EAAiB5K,IAAKW,IAAQgK,aAAO,EAAPA,EAASrH,KAAM,WAAY,UAEzDuH,EAAgBU,KAClBtP,GACA,SAACuP,EAAK5L,EAAO6L,GAIT,OAHKC,KAAS9L,EAAO6H,EAAKhL,MAAMgP,MAC3BD,EAAoBC,GAAa7L,GAE/B4L,CACX,GACA,CAAC,IAE2B,aAAM/D,EAAKhL,MAAmB,oBAGnDoO,EAA2B,aAMlCpD,EAAKkE,YAAY,CAAD9N,EAAAE,KAAA,SAEG,OADnB+F,EAAWqG,EAAWjE,KACtB4E,EAAUhH,EAASjG,EAAAC,KAAA,GAAAD,EAAAE,KAAA,GAGT4L,GAAW,CAAC7F,SAAAA,IAAW,KAAD,GAAAjG,EAAAE,KAAA,iBAEL,OAFKF,EAAAC,KAAA,GAAAD,EAAA+N,GAAA/N,EAAA,UAE5B4J,EAAKoE,SAAS,CAAClI,MAAK9F,EAAA+N,KAAG/N,EAAAS,OAAA,SAChBiG,QAAQuH,OAAMjO,EAAA+N,KAAO,QAAA/N,EAAAE,KAAA,iBAGhC+F,EAAW2D,EAAKhL,MAAMqH,SACtBgH,EAAUX,EAAWjE,KAAK,eAAArI,EAAAS,OAAA,SAGvBmJ,EAAKhL,MACPsP,aAAa,CACVjI,SAAAA,EACAgH,QAAAA,EACArP,WAAYoP,EACZmB,YAAaxB,EACbI,eAAgBA,EAChB3F,SAAUwF,IAEbpH,MAAK,YAEF4I,EAAAA,EAAAA,MACAxE,EAAKhL,MAAMoG,YACf,IAAE,OACK,SAACc,GAEJ,OADA8D,EAAKoE,SAAS,CAAClI,MAAAA,IACRY,QAAQuH,OAAOnI,EAC1B,KAAE,yBAAA9F,EAAAiB,OAAA,GAAArB,EAAA,oBACT,gBAAAP,GAAA,OAAAhC,EAAAkC,MAAA,KAAAC,UAAA,EAtEI,GAsEJoK,EAEDyE,QAAU,WACNzE,EAAKhL,MAAM0P,sBACf,EAAC1E,CAAC,CAAD,OAAAU,EAAAA,EAAAA,GAAA2B,EAAAtC,IAAAY,EAAAA,EAAAA,GAAA0B,EAAA,EAAAzB,IAAA,YAAAzI,MAED,WACI,OAAQ4I,KAAK/L,MAAMqH,QACvB,GAAC,CAAAuE,IAAA,SAAAzI,MAED,WACI,IAAAqI,EAaIO,KAAK/L,MAZLiD,EAASuI,EAATvI,UACA0E,EAAS6D,EAAT7D,UACAN,EAAQmE,EAARnE,SACAlC,EAAGqG,EAAHrG,IACA4E,EAAMyB,EAANzB,OACa4F,EAAUnE,EAAvBoE,YACWlK,EAAM8F,EAAjB7F,UACyBkK,EAAIrE,EAA7BkD,wBAC0BoB,EAAItE,EAA9BmD,yBAC0BoB,EAAIvE,EAA9BoD,yBACAoB,EAAkBxE,EAAlBwE,mBACAC,EAAuBzE,EAAvByE,wBAGEC,GAASC,EAAAA,GAAAA,GAAgB,CAACpE,KAAKnH,MAAMsC,QAE3C,OACI7C,EAAAA,GAAAA,MAACR,EAAAA,SAAc,CAAAzD,SAAA,EACXT,EAAAA,GAAAA,KAAC+M,GAAAA,GAAY,KACb/M,EAAAA,GAAAA,KAACyQ,GAAAA,GAAU,CACPnN,UAAWR,GAAM,KAAMQ,GACvBoN,YAAa,CACT3R,MAAOqN,KAAKmD,YAAc,cAAa,QAAA3H,OAAWF,IAEtDgF,KAAM,IACNiE,cAAe,CACX9B,QAAS,CACLrJ,SAAawH,IAARxH,EAAoB,GAAKoL,OAAOpL,GACrCsE,KAAMpC,EACNqH,wBAAyB,CAACvL,MAAO0M,GAAQ,GACzClB,yBAA0B,CAACxL,MAAO2M,GAAQ,GAC1ClB,yBAA0B,CAACzL,MAAO4M,GAAQ,IAE9CrK,OAAQ,CACJqI,UAAW,GACXrI,OAAQ2H,EAAgBmD,eAAe9K,EAAQsK,GAC/C3H,QAAS,IAEboG,IAAK,CACD1E,OAAQA,IAAU,EAClB6F,YAAaD,GAEjBnH,SAAU,CACNA,SAAU,GACViI,gBAAiB,KAGzBnD,MAAOvB,KAAKuB,MACZoD,QAASlO,QAAQmF,GACjB8H,QAAS1D,KAAK0D,QACd3B,OAAM,CACF,CACIxH,KAAM,eACNmD,KAAM,UACN/K,MAAO,UACPoP,OAAO,GAADvG,QAAAzF,EAAAA,EAAAA,IACGuD,EAAAA,GAAAA,MAEC,CACI,CACIiB,KAAM,QACNmD,KAAM,MACNkH,QAAS,QALjB,KAOC7O,EAAAA,EAAAA,GACHmO,EACE,CACI,CACIxG,KAAM,OACNnD,KAAM,OACNsK,UAAU,EACVD,QAAS,SAGjB,IAAI,CACV,CACIrK,KAAM,SACNmD,KAAM,2BACNkH,QAAS,2BACTE,OAAQ,CACJC,IAAK,EACLC,iBAAiB,IAGzB,CACIzK,KAAM,SACNmD,KAAM,0BACNkH,QAAS,0BACTE,OAAQ,CACJC,IAAK,EACLC,iBAAiB,IAGzB,CACIzK,KAAM,SACNmD,KAAM,2BACNkH,QAAS,2BACTE,OAAQ,CACJC,IAAK,EACLC,iBAAiB,MAExBjP,EAAAA,EAAAA,GACEoO,MAEV3I,QAAAzF,EAAAA,EAAAA,IACIuD,EAAAA,GAAAA,MAEC,CACI,CACIiB,KAAM,eACNmD,KAAM,SACN/K,MAAO,SACPoP,OAAO,CACH,CACIxH,KAAM,WACNmD,KAAM,YACNkH,QAAS,SACTE,OAAQ,CACJ/N,UAAU,EACVI,UAAU,EACV8N,WAAW3L,EAAAA,GAAAA,MACX4L,iBAAkB,EAClBjO,YAAa,qBAGrB,CACIyG,KAAM,SACNnD,KAAM,uBACNqK,QAAS,GACTE,OAAQ,CACJK,eAAgBzO,GAAM,gBAG9B,CACIgH,KAAM,UACNkH,QAAS,kBACTrK,KAAM,WACNuK,OAAQ,CACJG,WAAW3L,EAAAA,GAAAA,SAElBkC,QAAAzF,EAAAA,EAAAA,GACEoO,MAnCf,IAsCG,CACT,CACI5J,KAAM,eACNmD,KAAM,MACN/K,MAAO,MACPoP,OAAO,CACH,CACIxH,KAAM,UACNmD,KAAM,SACNkH,QAAS,YAEb,CACIrK,KAAM,WACNmD,KAAM,cACNkH,QAAS,gBACZpJ,QAAAzF,EAAAA,EAAAA,GACEoO,OAEVpO,EAAAA,EAAAA,GACGmO,EACE,CACI,CACI3J,KAAM,eACNmD,KAAM,WACN/K,MAAO,WACPoP,OAAO,CACH,CACIrE,KAAM,WACNnD,KAAM,OACNqK,QAAS,eACTE,OAAQ,WAAF,MAAS,CAACvK,KAAM,WAAoB,GAE9C,CACImD,KAAM,kBACNnD,KAAM,OACNqK,QAAS,mBACTE,OAAQ,WAAF,MAAS,CAACvK,KAAM,WAAoB,IAC7CiB,QAAAzF,EAAAA,EAAAA,GACEoO,MAIf,KAEViB,SAAU,SAAF/M,GAAmB,IAAfoE,EAAQpE,EAARoE,SACF4I,EAEF,CAAC,EAML,OAJI5I,EAASA,WAAaA,EAASiI,kBAC/BW,EAAe5I,SAAW,0CAGvB,CAACA,SAAU4I,EACtB,MAIhB,IAAC,EAAAxF,IAAA,gBAAAzI,MArTD,WAAyF,IAAxCkO,EAAgCzQ,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAG,CAAC,EACjF,OADsCA,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAG,IAC3BoB,KAAI,SAACtD,GACf,IAAgB4S,EAASD,EAAjB3S,GACR,MAAO,CACHA,MAAAA,EAEA6S,QAASvL,EAAAA,GAAMC,IAAIqL,aAAK,EAALA,EAAOxL,qBAElC,GACJ,GAAC,CAAA8F,IAAA,iBAAAzI,MAED,WAA0F,IAApEuC,EAAqB9E,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAG,GAAIyQ,EAAgCzQ,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAG,CAAC,EAQlF,MAAO,CAJH,CACAlC,MAAO,UACPmI,KAAMwG,EAAgBmE,cAAc9L,EAAQ2L,KAE/BrH,QAAO,SAAAF,GAAM,OAAAA,EAAJjD,KAAelD,MAAM,GACnD,IAAC,CAvCgB,CAASE,EAAAA,WAuVxBmJ,GAAqB,CACvB0C,qBL/TG,WACH,MAAO,CACHpJ,KAAMoB,EAAAA,GACNb,KAAM,CAACc,WAAW,EAAON,SAAU,IAE3C,EK2TIiI,aL1RG,SAAqBxF,GAOxB,IANAzC,EAAQyC,EAARzC,SACAgH,EAAOvE,EAAPuE,QACArP,EAAU8K,EAAV9K,WACAuQ,EAAWzF,EAAXyF,YACApB,EAAcrE,EAAdqE,eACA3F,EAAQsB,EAARtB,SAEA,OAAO,SAACnC,EAAUiI,GACdjI,EAAS,CAACC,KAAMgB,EAAAA,GAAgBd,UAEhC,IAAM3H,EAAI,eAAA0I,OAAkBF,GACtBoK,EAAW,GACVpJ,EAAyBrJ,EAAzBqJ,QAAYqJ,GAASjS,EAAAA,EAAAA,GAAIT,EAAUU,GAC1CqH,IAAS2K,GAAW,SAACvO,EAAOyI,GACxB6F,EAASzK,KAAK,CACV2K,QAAS,MACT/I,WAAY,CACR/J,KAAK,GAAD0I,OAAK1I,EAAI,MAAA0I,OAAKqE,IAEtBgG,MAAOzO,GAEf,IAEIkL,IAAYhH,GACZoK,EAASzK,KAAK,CACV2K,QAAS,MACT/I,WAAY,CACR/J,KAAK,GAAD0I,OAAK1I,EAAI,WAEjB+S,MAAOvD,IAIf,IAAMzJ,EAAQ0J,IACRzG,GAAUgK,EAAAA,EAAAA,IAAWjN,GAE3B,OACIkD,QAAQC,IACJ,CACIK,EAAgBP,EAASR,EAAUkI,EAAalH,GAChDT,EAAqBC,EAASR,EAAU8G,GACxC5F,EAAmB,CAAClB,SAAAA,EAAUmB,SAAAA,IAC9BiJ,EAAS9N,QAAU6D,EAAAA,GAAUsK,aAAapL,EAAAA,GAAQqL,cAAe,CAACN,SAAAA,KACpEzH,OAAOxH,UAGRoE,MAAK,SAAAoL,GAAuD,IAADC,GAAApD,EAAAA,EAAAA,GAAAmD,EAAA,GAAdE,GAAhCD,EAAA,GAAWA,EAAA,GAAmBA,EAAA,GAAUA,EAAA,IAC5CE,GAAaC,EAAAA,EAAAA,IAAcF,EAAU,8BAC3C,GAAIC,EACA,MAAMA,EAGV9L,EAAS,CAACC,KAAMgB,EAAAA,GAAgBL,QAASJ,KAAM,CAAC,IAChDR,EAASD,IAGb,IAAE,OACK,SAACc,GAAW,IAADmL,EACRxL,GAAOK,SAAe,QAAVmL,EAALnL,EAAOoL,gBAAQ,IAAAD,OAAA,EAAfA,EAAiBxL,OAAQK,EAEtC,OADAb,EAAS,CAACC,KAAMgB,EAAAA,GAAgBH,QAASN,KAAMA,IACxCiB,QAAQuH,OAAOxI,EAC1B,GAEZ,CACJ,EK0NIT,WAAAA,GAGJ,UAAe7H,EAAAA,EAAAA,KAlBS,SAACqG,GACrB,IAAA2N,EAA2ClI,EAAyBzF,GAA7D+C,EAAS4K,EAAT5K,UAAWN,EAAQkL,EAARlL,SAAgBmL,EAAKD,EAAX1L,KACtBA,EAAO2L,GAASnL,IAAamL,EAAM/I,KAAO+I,EAAQ,CAAC,EACzD,OAAA3S,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,CACI8H,UAAAA,EACAN,SAAAA,GACGR,GAAI,IACPmJ,oBAAoByC,EAAAA,EAAAA,IAA4B7N,GAChDqL,yBAAyBtF,EAAAA,EAAAA,IAAyB/F,IAE1D,GAQwCoI,GAAxC,CAA4DK,I,gBCtb/CqF,GAA4B,WACrC,IAAMrM,GAAWmE,EAAAA,EAAAA,MACjBmI,EAA0B9O,EAAAA,cAAoC8I,GAAUiG,GAAA/D,EAAAA,EAAAA,GAAA8D,EAAA,GAAjEzL,EAAK0L,EAAA,GAAEC,EAAQD,EAAA,GAChBE,GAAmBpI,EAAAA,EAAAA,KACrB,SAAC9F,GAAgB,OAAKA,EAAMkC,MAAMiM,WAAWD,gBAAgB,IAG3DrD,GAAUhF,EAAAA,EAAAA,cAAY,WACxBpE,GFaG,SAACA,GACJA,EAAS2M,GAAAA,EAAqBC,QAAQC,cAAc,CAACJ,iBAAkB,KAC3E,GEdA,GAAG,CAACzM,IAEEiH,GAAQ7C,EAAAA,EAAAA,cAAW5J,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MAAC,SAAAC,IAAA,OAAAF,EAAAA,GAAAA,KAAAK,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAEE,OAFFF,EAAAC,KAAA,EAElBwR,OAASlG,GAAWvL,EAAAE,KAAA,OFlBJ+F,IEoBYyL,EFnB7B3F,KAAAA,GAAMgG,OAAO,CAChBvK,WAAY,CACR/J,KAAK,eAAD0I,OAAiBF,MEiB0B,KAAD,EAE9CoI,KAEAD,EAAAA,EAAAA,MAEAnJ,EAASD,KAAchF,EAAAE,KAAA,gBAAAF,EAAAC,KAAA,EAAAD,EAAA+N,GAAA/N,EAAA,SAEvByR,EAAQzR,EAAA+N,IAAmB,yBAAA/N,EAAAiB,OF5Bb,IAAEgF,CE4BW,GAAArG,EAAA,kBAEhC,CAACqF,EAAUyM,EAAkBrD,IAEhC,OACI9P,EAAAA,GAAAA,KAACyQ,GAAAA,GAAU,CACPM,QAASlO,QAAQsQ,GACjBzC,YAAa,CAAC3R,MAAM,eAAD6I,OAAiBuL,IACpCM,qBAAqB,EACrB3D,QAASA,EACTnC,MAAOA,EACPQ,OAAM,CACF,CACIrE,KAAM,WACNnD,KAAM,QACNuK,OAAQ,CACJzQ,UACIiE,EAAAA,GAAAA,MAACgP,GAAAA,EAAI,CAAAjT,SAAA,CAAC,oCACqC0S,EAAiB,WAIvEvL,QAAAzF,EAAAA,EAAAA,IACEqO,EAAAA,GAAAA,GAAgB,CAACjJ,OAIpC,E,+CC7CMoM,IAAI7Q,EAAAA,EAAAA,GAAM,mBAQH8Q,GAA0C,SAAH9U,GAAwC,IAapF+U,EAbiDvQ,EAASxE,EAATwE,UAAW4E,EAAOpJ,EAAPoJ,QAASR,EAAQ5I,EAAR4I,SACnEhB,GAAWmE,EAAAA,EAAAA,MAEXiJ,GAAchJ,EAAAA,EAAAA,cAAY,WAC5BpE,EAASe,EAAoBC,GACjC,GAAG,CAACA,EAAUhB,IAERqN,GAAgBjJ,EAAAA,EAAAA,cAAY,WHN/B,IAA6BqI,EGO5BzM,GHP4ByM,EGOCzL,EHN1B,SAAChB,GACJA,EAAS2M,GAAAA,EAAqBC,QAAQC,cAAc,CAACJ,iBAAAA,IACzD,GGKA,GAAG,CAACzL,EAAUhB,IAgBd,OATImN,GAL4B9I,EAAAA,EAAAA,IAAYC,EAAAA,KAMpChL,EAAAA,GAAAA,KAACiL,GAAAA,EAAM,CAACC,KAAK,iBAAiBwB,KAAK,IAAIvM,QAAS4T,EAActT,UAC1DT,EAAAA,GAAAA,KAACgU,GAAAA,EAAI,CAACC,QAAQ,gBAIH,MAInBvP,EAAAA,GAAAA,MAAA,OAAKpB,UAAWqQ,GAAE,KAAMrQ,GAAW7C,SAAA,EAC/BT,EAAAA,GAAAA,KAACkU,GAAAA,EAAS,CAACC,IAAK7L,EAAAA,GAAU8L,wBAAwBlM,EAASR,MAC3D1H,EAAAA,GAAAA,KAACqU,GAAAA,EAAI,CAACC,QAAM,EAACH,IAAKI,GAAmBrM,EAASR,GAAUjH,SAAC,SAGzDT,EAAAA,GAAAA,KAACwU,GAAAA,EAAyB,CAACzV,MAAO2I,EAAUxI,KAAI,eAAA0I,OAAiBF,MACjE1H,EAAAA,GAAAA,KAACiL,GAAAA,EAAM,CAACC,KAAK,iBAAiBwB,KAAK,IAAIvM,QAAS2T,EAAYrT,UACxDT,EAAAA,GAAAA,KAACgU,GAAAA,EAAI,CAACC,QAAQ,iBAEjBJ,IAGb,EAEA,SAASU,GAAmBrM,EAAiBgB,GACzC,MAAM,IAANtB,OAAWM,EAAO,+BAAAN,OAA8BsB,EAAI,aACxD,CCvCA,IAAMpG,IAAQC,EAAAA,EAAAA,GAAG,oBAEX0R,GAAiB,CACnBC,gBAAgB,EAChBC,WAAYC,GAAAA,GAAUC,OACtBC,UAAWC,EAAAA,GACXC,kBAAkB,EAClBC,eAAe,GAGbC,GAAe,CACjBpL,KAAM,OACNM,OAAQ,SACRpE,UAAW,SACXiE,iBAAkB,oBAClB+E,yBAA0B,gBAC1BD,wBAAyB,oBACzBE,yBAA0B,qBAC1B1I,eAAgB,kBAGhB+M,QAAS,IAGP6B,GAAoB,CACtB/K,OAAQ,IACR4E,yBAA0B,KAC1BD,wBAAyB,MACzBE,yBAA0B,OAGxBmG,GAAc,SAAAhK,GAAA,SAAAgK,IAAA,IAAA/J,GAAAC,EAAAA,EAAAA,GAAA,KAAA8J,GAAA,QAAA7J,EAAAtK,UAAA+C,OAAAwH,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAAzK,UAAAyK,GA6Gd,OA7GcL,GAAAM,EAAAA,EAAAA,GAAA,KAAAyJ,EAAA,GAAAxN,OAAA4D,KA0BhB6J,mBAAqB,SAACC,EAAKC,GACvB,IAAAC,EAEInK,EAAKhL,MADL+F,KAAOqP,EAAMD,EAANC,OAAQC,EAAKF,EAALE,MAEbC,EAAWL,IAAQG,EAEnB1W,EAAQmW,GAAaI,GAE3B,OACItV,EAAAA,GAAAA,KAAC4V,GAAAA,EAAY,CACTtS,UAAWR,GAAM,cAAe,CAACwS,IAAAA,EAAKC,SAAAA,GAAW,yBACjDE,OAAQH,EACRvW,MAAOA,EACP8W,WAAYV,GAAkBG,IAAQvW,EACtC2W,MAAOC,EAAWD,EAAQ,GAC1BI,OAAQzK,EAAK0K,aACbC,eAAa,GAGzB,EAAC3K,EAED0K,aAAe,SAACE,EAASC,IAErBC,EAD8B9K,EAAKhL,MAA5B8V,qBACa,CAACV,OAAQQ,EAASP,MAAOQ,GACjD,EAAC7K,EA+BD+K,iBAAmB,SAACd,GAAqB,IACvB9R,GADsBvC,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAP,CAAC,GAARoV,IACdf,GACR,OACItV,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,UAAW,CAACwS,IAAAA,IAAM7U,UACpCT,EAAAA,GAAAA,KAAA,QAAAS,SAAO+C,KAGnB,EAAC6H,EAEDiL,yBAA2B,SAAChB,GAAqB,IACtC/O,GADqCtF,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAP,CAAC,GAARoV,IACvB9P,eAEP,OACIvG,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,UAAW,CAACwS,IAAAA,IAAM7U,UACpCT,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAMwS,GAAK7U,SAAE8F,KAGzC,EAAC8E,EAEDkL,kBAAoB,SAACjB,EAAKpN,GAAyB,IAClCR,GADiCzG,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAP,CAAC,GAARoV,IACzBvM,KACP,OACI9J,EAAAA,GAAAA,KAAC4T,GAAW,CACRtQ,UAAWR,GAAM,UAAW,CAACwS,IAAAA,IAC7B5N,SAAUA,EACVQ,QAASA,GAGrB,EAACmD,CAAC,CAAD,OAAAU,EAAAA,EAAAA,GAAAqJ,EAAAhK,IAAAY,EAAAA,EAAAA,GAAAoJ,EAAA,EAAAnJ,IAAA,oBAAAzI,MAxFD,YAEIiD,EADqB2F,KAAK/L,MAAnBoG,aAEX,GAAC,CAAAwF,IAAA,iBAAAzI,MA4BD,SAAe8R,GAAkB,IAAZe,GAAWpV,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAJ,CAAC,GAARoV,IACVvM,EAAkCuM,EAAlCvM,KAA2BtE,EAAO6Q,EAA5BlQ,oBACb,OACInG,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,UAAW,CAACwS,IAAAA,IAAM7U,UACpCT,EAAAA,GAAAA,KAACwW,GAAAA,EAAW,CAAC1M,KAAMA,EAAM2M,UAAWjR,KAGhD,GAAC,CAAAyG,IAAA,mBAAAzI,MAED,SAAiB8R,GAAkB,IAAZe,GAAWpV,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAJ,CAAC,GAARoV,IACZjM,EAAmCiM,EAAnCjM,OAAqB4F,EAAcqG,EAA3BpG,YACf,OACIjQ,EAAAA,GAAAA,KAAC0W,GAAAA,EAAO,CAAC/W,QAASqQ,EAAWvP,UACzBT,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,UAAW,CAACwS,IAAAA,IAAM7U,SACnC2J,IAAUpK,EAAAA,GAAAA,KAAA,QAAMsD,UAAWR,GAAMwS,GAAK7U,SAAC,SAIxD,GAAC,CAAAwL,IAAA,mBAAAzI,MAED,SAAiB8R,GAAkB,IACjB9R,GADgBvC,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,GAAAA,UAAA,GAAJ,CAAC,GAARoV,IACXf,GACR,OACItV,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,UAAW,CAACwS,IAAAA,IAAM7U,UACpCT,EAAAA,GAAAA,KAAC2W,GAAAA,EAAiC,CAACrT,UAAWR,GAAM,UAAWG,MAAOO,KAGlF,GAAC,CAAAyI,IAAA,cAAAzI,MAgCD,WAAe,IAAD0I,EAAA,KACVL,EAA0CO,KAAK/L,MAAxC6H,EAAO2D,EAAP3D,QAASf,EAAK0E,EAAL1E,MAAOyP,EAAM/K,EAAN+K,OAAQC,EAAOhL,EAAPgL,QAEzBC,EAAc,SAAChN,GAAkC,IAA5BiN,EAAc9V,UAAA+C,OAAA,QAAAgJ,IAAA/L,UAAA,IAAAA,UAAA,GACrC,MAAO,CACH6I,KAAAA,EACAkN,MAAOpC,GAAAA,GAAUqC,KACjB1B,UAAU,EACVjS,UAAWR,GAAM,KAAM,CAACwS,IAAKxL,EAAKoN,gBAClCC,OAAQjL,EAAKmJ,mBAAmBvL,GAAOiN,GAE/C,EAEMK,GAAmB,EAEnBC,EAAU,EAAAnX,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAEL4W,EAAY,SAAO,IACtBQ,OAAQlL,KAAKmL,eAAeC,KAAKpL,KAAM,WAAOlM,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAG3C4W,EAAY,WAAS,IACxBQ,OAAQlL,KAAKqL,iBAAiBD,KAAKpL,KAAM,UACzC4K,MAAOpC,GAAAA,GAAU8C,UAAMxX,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAGpB4W,EAAY,iBAAkBM,IAAiB,IAClDE,OAAQlL,KAAKkK,yBAAyBkB,KAAKpL,KAAM,qBAAiBlM,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAG/D4W,EAAY,YAAaM,IAAiB,IAC7CE,OAAQlL,KAAKuL,iBAAiBH,KAAKpL,KAAM,gBAAYlM,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAGlD4W,EAAY,mBAAoBM,IAAiB,IACpDE,OAAQlL,KAAKuL,iBAAiBH,KAAKpL,KAAM,uBAAmBlM,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAGzD4W,EAAY,6BAA2B,IAC1CQ,OAAQlL,KAAKgK,iBAAiBoB,KAAKpL,KAAM,4BACzC4K,MAAO,WAAO9W,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAGX4W,EAAY,4BAA0B,IACzCQ,OAAQlL,KAAKgK,iBAAiBoB,KAAKpL,KAAM,2BACzC4K,MAAO,WAAO9W,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAGX4W,EAAY,6BAA2B,IAC1CQ,OAAQlL,KAAKgK,iBAAiBoB,KAAKpL,KAAM,4BACzC4K,MAAO,WAAO9W,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAGX4W,EAAY,YAAU,IACzBK,OAAQ,GACRG,OAAQlL,KAAKmK,kBAAkBiB,KAAKpL,KAAM,UAAWlE,MAI7D,OACIlI,EAAAA,GAAAA,KAAC4X,GAAAA,GAAW,CACRhB,OAAQA,EACRC,QAASA,EACTvT,UAAWR,GAAM,SACjBoE,KAAMC,EACNkQ,QAASA,EACTQ,SAAUpD,GACVqD,MAAO,eAGnB,GAAC,CAAA7L,IAAA,SAAAzI,MAED,WACI,IAAA2I,EAAsCC,KAAK/L,MAApCiD,EAAS6I,EAAT7I,UAAWiE,EAAK4E,EAAL5E,MAAOS,EAASmE,EAATnE,UACzB,OACIhI,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,KAAMQ,GAAW7C,UACnCiE,EAAAA,GAAAA,MAACqT,GAAAA,EAAe,CAACnB,QAAQ,EAAMrP,MAAO1E,QAAQ0E,GAAQyQ,UAAWzQ,GAAS,KAAK9G,SAAA,CAC1E2L,KAAK6L,cACLjQ,IAAahI,EAAAA,GAAAA,KAAC0N,GAAe,KAC9B1N,EAAAA,GAAAA,KAAC+S,GAAe,QAIhC,IAAC,CAlMe,CAAS7O,EAAAA,WAmNvBmJ,GAAqB,CACvB5G,WAAAA,EACA0P,oBR1LG,SAA4BrX,GAAmB,IAAjB2W,EAAM3W,EAAN2W,OAAQC,EAAK5W,EAAL4W,MACnCtP,EAAO,CAACqP,OAAAA,EAAQC,MAAAA,GAItB,OAHKA,IACDtP,EAAKqP,OAAS,IAEX,CAAC9O,KAAM2G,EAAAA,GAAyBpG,KAAM,CAACd,KAAAA,GAClD,GQuLA,UAAexH,EAAAA,EAAAA,KAnBS,SAACqG,GACrB,IAAAiT,EPtPkC,SAACjT,GAAK,OAAKA,EAAMkC,MAAMkC,KAAM,COsPxB8O,CAAuBlT,GAAvD2R,EAAMsB,EAANtB,OAAQC,EAAOqB,EAAPrB,QAAStP,EAAK2Q,EAAL3Q,MAAOnB,EAAI8R,EAAJ9R,KACxB4B,EAAa0C,EAAyBzF,GAAtC+C,UACP,MAAO,CACH4O,OAAAA,EACAC,QAAAA,EACAtP,MAAAA,EACAJ,MAAOoD,EAA0BtF,GACjCmB,KAAAA,EACA8B,SAASgK,EAAAA,EAAAA,IAAWjN,GACpB+C,UAAAA,EAER,GAOwCqF,GAAxC,CAA4D+H,IC1Q5D,IAAMtS,IAAQC,EAAAA,EAAAA,GAAG,cAEF,SAASqV,KACpB,OACIpY,EAAAA,GAAAA,KAAA,OAAKsD,UAAWR,GAAM,KAAM,yBAAyBrC,UACjDT,EAAAA,GAAAA,KAACqY,EAAAA,GAAiB,CACdC,mBAAiB,EACjBhV,UAAU,mBACViV,SAASvY,EAAAA,GAAAA,KAACmL,GAAgB,IAC1BxL,SAASK,EAAAA,GAAAA,KAACoV,GAAc,OAIxC,C,mLCjBMtS,GAAQC,EAAAA,EAAAA,GAAG,mBAQjB,SAASyV,EAAW1Z,GAAuD,IAArD2Z,EAAS3Z,EAAT2Z,UAAWC,EAAS5Z,EAAT4Z,UAAWpV,EAASxE,EAATwE,UACxC,YAAkB0J,IAAdyL,QAAyCzL,IAAd0L,EACpB,KAGJA,EAAa,GAChBhU,EAAAA,EAAAA,MAAA,QAAMpB,UAAWR,EAAM,KAAMQ,GAAW7C,SAAA,CAAC,UAC7BgY,GAAa,GAAK,EAAE,MAAIC,KAEpC,IACR,CAEA,QAAexU,EAAAA,KAAWsU,G,0BCPpB1V,GAAQC,EAAAA,EAAAA,GAAG,iBA+CjB,SAAS4V,EAAY7Z,GAIyD,IAH1E2W,EAAM3W,EAAN2W,OACA1W,EAAKD,EAALC,MACA8W,EAAU/W,EAAV+W,WAEM+C,EAAI7Z,QAAAA,EAAS8Z,IAAYpD,GAE/B,MAAO,CAACqD,YADajD,GAAa+C,EACbG,aAAcH,EACvC,CA+Be,SAAShD,EAAwCvV,GAC5D,IAAOiD,EAAkFjD,EAAlFiD,UAAW0T,EAAuE3W,EAAvE2W,MAAOtB,EAAgErV,EAAhEqV,MAAOI,EAAyDzV,EAAzDyV,OAAQkD,EAAiD3Y,EAAjD2Y,eAAgBnC,EAAiCxW,EAAjCwW,QAAS4B,EAAwBpY,EAAxBoY,UAAWC,EAAarY,EAAbqY,UAC5EO,EA/BJ,SACI5Y,GAEA,QAAsB2M,IAAlB3M,EAAM6Y,QAAuB,CAC7B,IAAOzD,EAA+EpV,EAA/EoV,OAAQ0D,EAAuE9Y,EAAvE8Y,eAAgBnD,EAAuD3V,EAAvD2V,cAAejX,EAAwCsB,EAAxCtB,MAAO8W,EAAiCxV,EAAjCwV,WAAYuD,EAAqB/Y,EAArB+Y,kBACjE,OAAAlZ,EAAAA,EAAAA,GAAA,CACIuV,OAAAA,EACA0D,eAAAA,EACAnD,cAAAA,EACAoD,kBAAAA,GACGT,EAAa,CAAClD,OAAAA,EAAQ1W,MAAAA,EAAO8W,WAAAA,IAExC,CAEA,IAAerS,EAAqCnD,EAA7CoV,OAAeyD,EAA8B7Y,EAA9B6Y,QAASna,EAAqBsB,EAArBtB,MAAO8W,EAAcxV,EAAdwV,WAChCwD,EAAaH,EAAQI,MAAK,SAAA7U,GAAA,IAAEgR,EAAMhR,EAANgR,OAAM,OAAMjS,IAAUiS,CAAM,IAO9D,OANK4D,IACDE,EAAAA,EAAAA,IAAY,CACRC,QAAS,mEACTC,WAAYpZ,KAGpBH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACIwZ,UAAWf,GAAYzY,EAAAA,EAAAA,GAAC,CAAC,EAAGmZ,KACzBA,GACAV,EAAa,CAAClD,OAAQ,GAAI1W,MAAAA,EAAO8W,WAAAA,IAE5C,CAYQ8D,CAActZ,GAPdoV,EAAMwD,EAANxD,OACA0D,EAAcF,EAAdE,eACAnD,EAAaiD,EAAbjD,cACA8C,EAAWG,EAAXH,YACAC,EAAYE,EAAZF,aACAK,EAAiBH,EAAjBG,kBACAM,EAAST,EAATS,UAGEE,EAAgB1V,EAAAA,aAClB,SAAC2V,GACG,IAAM3D,EAAYkD,GACZU,EAAAA,EAAAA,IAAwBpE,EAAO0D,IAC/BW,EAAAA,EAAAA,IAAmBrE,EAAOyD,EAAgBnD,GAChDF,SAAAA,EAASL,EAAQS,EAAW,CACxB8D,aAActE,EACduE,UAAWJ,EAAEK,SAAWL,EAAEM,SAElC,GACA,CAAC1E,EAAQC,EAAOI,EAAQqD,EAAgBC,EAAmBpD,IAGzDT,EAAW1S,QAAQiT,GAEzB,OACIpR,EAAAA,EAAAA,MAAA,OAAKpB,UAAWR,EAAM,KAAMQ,GAAW7C,SAAA,EACnCiE,EAAAA,EAAAA,MAAA,OACIpB,UAAWR,EAAM,aAAc,CAACyS,SAAAA,EAAUyB,MAAAA,IAC1C7W,QAASoV,EAAWqE,OAAgB5M,EAAUvM,SAAA,EAE9CT,EAAAA,EAAAA,KAAA,QAAMsD,UAAWR,EAAM,SAAU/D,MAAOga,EAAatY,SAChDqY,IAEJvD,IACGvV,EAAAA,EAAAA,KAAA,QAAMsD,UAAWR,EAAM,QAAQrC,UAC3BT,EAAAA,EAAAA,KAACoa,EAAAA,EAAQ,CAAC1E,MAAOA,WAGL1I,IAAnBgM,IACGtU,EAAAA,EAAAA,MAAA,QAAMpB,UAAWR,EAAM,aAAarC,SAAA,CAAC,KAC3BT,EAAAA,EAAAA,KAAA,OAAAS,SAAMuY,OAGnBnW,QAAQ6S,IAAU7S,QAAQ6W,KACvB1Z,EAAAA,EAAAA,KAAC0T,EAAAA,EAAI,CACDpQ,UAAWR,EAAM,QAAS,CAAC,cAAc,IACzCuX,QAAQ,YACRtb,MAAO2a,aAAS,EAATA,EAAWX,aAClBuB,MAAM,iBAAgB7Z,SAErBiZ,aAAS,EAATA,EAAWZ,kBAIxB9Y,EAAAA,EAAAA,KAACua,EAAiB,CAACrB,QAAS7Y,EAAM6Y,QAASxD,MAAOA,EAAOI,OAAQA,SACpD9I,IAAZ6J,IACG7W,EAAAA,EAAAA,KAAA,OAAKsD,UAAWR,EAAM,UAAUrC,UAC5BT,EAAAA,EAAAA,KAACwa,EAAAA,EAAM,CAACzJ,QAAS8F,MAGxBhU,QAAQ6V,KACL1Y,EAAAA,EAAAA,KAACwY,EAAW,CACRlV,UAAWR,EAAM,gBACjB2V,UAAWA,EACXC,UAAWA,MAK/B,CAEA,SAAS6B,EAAiBpQ,GAOtB,IANAuL,EAAKvL,EAALuL,MACAwD,EAAO/O,EAAP+O,QACApD,EAAM3L,EAAN2L,OAKA,OAAQoD,GACJlZ,EAAAA,EAAAA,KAACya,EAAAA,EAAY,CACTxX,MAAOiW,EAAQ7W,KAAI,SAACC,GAEhB,MAAO,CACHwB,KAFmB6U,EAAarW,GAA7ByW,aAGH2B,OAAM,WACF,GAAK5E,EAAL,CAGA,IAAOL,EAA4DnT,EAA5DmT,OAAQ0D,EAAoD7W,EAApD6W,eAAgBnD,EAAoC1T,EAApC0T,cAAeoD,EAAqB9W,EAArB8W,kBACxClD,EAAYkD,GACZU,EAAAA,EAAAA,IAAwBpE,EAAO0D,IAC/BW,EAAAA,EAAAA,IAAmBrE,EAAOyD,EAAgBnD,GAChDF,EAAOL,EAAQS,EAAW,CACtB8D,aAActE,GANlB,CAQJ,EAER,IACAiF,eAAgB,SAAFtI,GAAA,IAAIlS,EAAOkS,EAAPlS,QAAO,OACrBH,EAAAA,EAAAA,KAACiL,EAAAA,EAAM,CAAC9K,QAASA,EAAS+K,KAAK,OAAOwB,KAAK,KAAIjM,UAC3CT,EAAAA,EAAAA,KAACgU,EAAAA,EAAI,CAACtH,KAAM,GAAIxF,KAAM0T,EAAAA,KACjB,IAvBH,IA2BtB,C,2KCzMM9X,GAAQC,EAAAA,EAAAA,GAAG,aAEX8X,GAAYC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACb,GAAK,QAAM,MACP,WAAS,OACR,aACN,gBAAiB,mBACjB,iBAAkB,qBAClB,gBAAiB,kBACjB,iBAAkB,gBAaDV,EAAQ,SAAAhP,GAAA,SAAAgP,IAAA,IAAA/O,GAAAC,EAAAA,EAAAA,GAAA,KAAA8O,GAAA,QAAA7O,EAAAtK,UAAA+C,OAAAwH,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAAzK,UAAAyK,GASvB,OATuBL,GAAAM,EAAAA,EAAAA,GAAA,KAAAyO,EAAA,GAAAxS,OAAA4D,KACzBrL,QAAU,WACN,IAAA0L,EAAyDR,EAAKhL,MAAvDqV,EAAK7J,EAAL6J,MAAOtS,EAAQyI,EAARzI,SAAU+V,EAActN,EAAdsN,eAAgBnD,EAAanK,EAAbmK,cACnC5S,GAKLA,GADkB2W,EAAAA,EAAAA,IAAmBrE,EAAOyD,EAAgBnD,GAEhE,EAAC3K,CAAC,CAAD,OAAAU,EAAAA,EAAAA,GAAAqO,EAAAhP,IAAAY,EAAAA,EAAAA,GAAAoO,EAAA,EAAAnO,IAAA,SAAAzI,MAED,WACI,IAAA2I,EAA0CC,KAAK/L,MAAxCiD,EAAS6I,EAAT7I,UAAWyX,EAAK5O,EAAL4O,MAAOrF,EAAKvJ,EAALuJ,MAAOsF,EAAM7O,EAAN6O,OAC1BC,EAAOJ,EAAanF,GAAS,IAEnC,OACIhR,EAAAA,EAAAA,MAAA,QAAMpB,UAAWR,EAAM,CAACkY,OAAAA,GAAS1X,GAAYnD,QAASiM,KAAKjM,QAAQM,SAAA,CAC9Dsa,IAAS/a,EAAAA,EAAAA,KAAA,QAAMsD,UAAWR,EAAM,SAASrC,SAAEsa,KAC5C/a,EAAAA,EAAAA,KAAC0W,EAAAA,EAAO,CACJpT,UAAWR,EAAM,QACjBnD,QAAS+V,EAAQwF,EAAAA,EAAOC,cAAczF,GAAS,YAAYjV,UAE3DT,EAAAA,EAAAA,KAACgU,EAAAA,EAAI,CAACC,QAASgH,EAAMG,KAAK,cAI1C,IAAC,CA1BwB,CAASlX,EAAAA,U,8IClB/B,SAASmX,IACZ,IAAM3U,GAAWmE,EAAAA,EAAAA,MACjB3G,EAAAA,WAAgB,WACZwC,GAAS4U,EAAAA,EAAAA,MACb,GAAG,IAEH,IAAMC,GAAcxQ,EAAAA,EAAAA,IAAYyQ,EAAAA,IAYhC,MAAO,CAACC,YAVYvX,EAAAA,aAChB,SAACJ,GACG,IAAM4X,EAAOC,IAAeJ,EAAazX,GAAM,SAACD,GAAI,OAAKA,EAAK+X,OAAO,EAAG9X,EAAKE,OAAO,IAC9E6X,EAAKC,IAAmBP,EAAazX,GAAM,SAACD,GAAI,OAAKA,EAAK+X,OAAO,EAAG9X,EAAKE,OAAO,IAEtF,OADYuX,EAAY/Y,MAAMkZ,EAAMG,EAExC,GACA,CAACN,IAGgBQ,SAAUR,EACnC,CAEO,SAASS,IACZ,IAAMtV,GAAWmE,EAAAA,EAAAA,MAEjB3G,EAAAA,WAAgB,WACZwC,GAASuV,EAAAA,EAAAA,MACb,GAAG,GACP,CAEO,SAASlP,EAAYjO,GAA+C,IAA7C2B,EAAQ3B,EAAR2B,SAE1B,OADAub,IACOvb,QAAAA,EAAY,IACvB,C,8ECzCA,GAAehC,E,SAAAA,IAAc,gBAAiB,CAACC,G,cAAIC,G,mCCanD,SAASuV,EAAU7T,GACf,IAAOiD,EAAuEjD,EAAvEiD,UAAW6Q,EAA4D9T,EAA5D8T,IAAKpV,EAAuDsB,EAAvDtB,MAAO+Y,EAAgDzX,EAAhDyX,MAAOrX,EAAyCJ,EAAzCI,SAAUyb,EAA+B7b,EAA/B6b,SAAUd,EAAqB/a,EAArB+a,KAAMe,EAAe9b,EAAf8b,YAE/D,IAAKhI,EACD,OAAO,KAGX,IAAM8G,EAAOiB,EAAW,MAAOlc,EAAAA,EAAAA,KAACgU,EAAAA,EAAI,CAACC,QAAQ,YAAYmH,KAAMA,IACzDzb,EAAUc,GACZiE,EAAAA,EAAAA,MAACR,EAAAA,SAAc,CAAAzD,SAAA,CACVwa,EACAxa,KAGLwa,EAGJ,OACIjb,EAAAA,EAAAA,KAACqU,EAAAA,EAAI,CACD/Q,UAAWA,EACX8Y,OAAO,SACPtE,MAAOA,EACP3D,IAAKA,EACLpV,MAAOA,QAAAA,EAASa,EAAK,QAAQa,SAE5B0b,EAAcA,EAAYxc,GAAWA,GAGlD,CAEA,QAAeuE,EAAAA,KAAWgQ,E,oJCvCpBmI,EAAU,IAAIC,EAAAA,EAUCvE,EAAe,SAAAwE,GAAA,SAAAxE,IAAA,OAAAzM,EAAAA,EAAAA,GAAA,KAAAyM,IAAApM,EAAAA,EAAAA,GAAA,KAAAoM,EAAA9W,UAAA,QAAA8K,EAAAA,EAAAA,GAAAgM,EAAAwE,IAAAvQ,EAAAA,EAAAA,GAAA+L,EAAA,EAAA9L,IAAA,qBAAAzI,MAChC,WACI,IAAAqI,EAAmCO,KAAK/L,MAAjCkH,EAAKsE,EAALtE,MAAOqP,EAAM/K,EAAN+K,OAAQoB,EAASnM,EAATmM,UAElBzQ,GAASqP,GACTyF,EAAQG,IAAI,CACR1E,MAAO,SACPhO,KAAM,UACN2S,WAAY,IACZ1d,MAAO,8BACPY,QAASqY,EAAaA,EAAsBwB,QAAUkD,EAAAA,EAAOxB,OAAOyB,SACpErJ,QAAS,CACL,CACIyH,MAAO,QACP5a,QAAS,WAAF,OAAQyc,EAAAA,EAAAA,IAAe5E,EAAqB,KAKvE,GAAC,CAAA/L,IAAA,SAAAzI,MAED,WACI,IAAA2I,EAAsEC,KAAK/L,MAAKwc,EAAA1Q,EAAzE2Q,gBAAAA,OAAe,IAAAD,GAAQA,EAAEtV,EAAK4E,EAAL5E,MAAOyQ,EAAS7L,EAAT6L,UAAWpB,EAAMzK,EAANyK,OAAQnW,EAAQ0L,EAAR1L,SAI1D,OAAI8G,IAAUuV,GAFUlG,EAMjBnW,GAHIT,EAAAA,EAAAA,KAAC+c,EAAAA,EAAY,CAACxV,MAAOyQ,GAIpC,IAAC,CA/B+B,CAASgF,EAAAA,U,6LCPvCla,GAAQC,EAAAA,EAAAA,GAAG,0CAmBI4T,EAAiC,SAAAvL,GAAA,SAAAuL,IAAA,IAAAtL,GAAAC,EAAAA,EAAAA,GAAA,KAAAqL,GAAA,QAAApL,EAAAtK,UAAA+C,OAAAwH,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAAzK,UAAAyK,GAkMhD,OAlMgDL,GAAAM,EAAAA,EAAAA,GAAA,KAAAgL,EAAA,GAAA/O,OAAA4D,KAalDyR,SAAG,EAAA5R,EACH6R,WAAY,EAAK7R,EAEjBpG,MAAQ,CACJkY,YAAa,EACbC,KAAM,GACNC,YAAY,GACfhS,EAEDiS,MAAQ,SAACL,GACL5R,EAAK4R,IAAMA,EACX5R,EAAKkS,aACT,EAAClS,EAUDmS,gBAAkB,WACVnS,EAAK6R,YACL7R,EAAK6R,WAAY,GAGrB,IAAOja,EAASoI,EAAKhL,MAAd4C,MACP,IAAKoI,EAAK4R,MAAQha,IAAUA,EAAMe,OAC9B,OAAOqH,EAAKoS,kBAAkB,CAACL,KAAM,GAAID,YAAa,IAG1D,IAAAO,EAAoCrS,EAAK4R,IAAlCU,EAAWD,EAAXC,YAAaC,EAAYF,EAAZE,aACpBC,EAAuDC,iBAAiBzS,EAAK4R,KAAtEc,EAAUF,EAAVE,WAAYC,EAAUH,EAAVG,WAAYC,EAAQJ,EAARI,SAAUC,EAAUL,EAAVK,WACnCC,EAAI,GAAAvW,OAAMmW,EAAU,KAAAnW,OAAIqW,EAAQ,KAAArW,OAAIoW,EAAU,KAAApW,OAAIsW,GAExD,IAAKP,IAAgBC,EACjB,OAAOvS,EAAKoS,kBAAkB,CAACL,KAAM,GAAID,YAAa,IAG1D,IACMiB,EADSC,SAASC,cAAc,UACnBC,WAAW,MAC9BH,EAAID,KAAOA,EAQX,IAPA,IAzEana,EAyEPoZ,EAAO,GACToB,EAAM,EAEJC,EAAKC,SAASV,GAEhBW,EAAa,GACbC,EAAkB,GACdxB,EAAKpZ,OAAS,GAAKya,GAAMb,GAAgBY,EAAMvb,EAAMe,QAAQ,CACjE,IAAM6a,EAAaL,IAAQvb,EAAMe,OAAS,EAEpCF,EAAOb,EAAMub,KACZtb,EAASkb,EAAIU,YAAYhb,EAAO,MAAhCZ,MACP0b,GAAmB1b,EAEnB,IAAM6b,EAAYnB,GAAgBR,EAAKpZ,OAAS,GAAKya,EAAKA,EAOtDG,GAFajB,GAHboB,IAAcF,EACRT,EAAIU,aA1FL9a,EA0F6Bf,EAAMe,OAASwa,EAzFvD,MAAN5W,OAAa5D,KAyFsDd,MACjD,IAINyb,EAAWtX,KAAKvD,GACZ+a,GACAzB,EAAK/V,KAAKsX,KAGdvB,EAAK/V,KAAKsX,GAENI,IACEP,GAEFG,EAAa,CAAC7a,GACd8a,EAAkB1b,EACd2b,GACAzB,EAAK/V,KAAKsX,IAI1B,CAEA,IAAMK,EAAiB,CACnBrB,YAAAA,EACAC,aAAAA,EACAO,KAAAA,EACAH,WAAAA,EACA/a,MAAAA,EACAma,KAAAA,EACAD,YAAala,EAAMe,OAASwa,GAEhCnT,EAAKoS,kBAAkBuB,EAC3B,EAAC3T,EAEDkS,YAAc0B,IAAU5T,EAAKmS,gBAAiB,IAAGnS,EA8CjD6T,WAAa,SAACrb,GACV,IAAOsb,EAAgB9T,EAAKhL,MAArB8e,aACP,OAAOA,EAAeA,EAAatb,GAAQA,CAC/C,EAACwH,EA0BD+T,YAAc,WACV/T,EAAKoE,SAAS,CAAC4N,YAAY,GAC/B,EAAChS,EAEDgU,eAAiB,WACThU,EAAKiU,uBAITjU,EAAKoE,SAAS,CAAC4N,YAAY,GAC/B,EAAChS,CAAC,CAAD,OAAAU,EAAAA,EAAAA,GAAA4K,EAAAvL,IAAAY,EAAAA,EAAAA,GAAA2K,EAAA,EAAA1K,IAAA,uBAAAzI,MAvKD,WACI4I,KAAK8Q,WAAY,CACrB,GAAC,CAAAjR,IAAA,qBAAAzI,MAED,WACI4I,KAAKmR,aACT,GAAC,CAAAtR,IAAA,oBAAAzI,MA8ED,SAAkB+b,GAAY,IAADrT,EAAA,KACnBsT,EAAUC,OAAOC,KAAKH,GAAWI,MAAK,SAAC1T,GACzC,OAAQqD,IAASpD,EAAKjH,MAAMgH,GAAMsT,EAAUtT,GAChD,IAKA,OAHIuT,GACApT,KAAKqD,UAAQvP,EAAAA,EAAAA,GAAC,CAAC,EAAGqf,IAEfC,CACX,GAAC,CAAAvT,IAAA,aAAAzI,MAED,WAAc,IAADoc,EAAA,KACFxC,EAAQhR,KAAKnH,MAAbmY,KACP,OAAOA,EAAK/a,KAAI,SAACgU,EAAKwJ,GAClB,OACI7f,EAAAA,EAAAA,KAAA,OAAiBsD,UAAWR,EAAM,OAAOrC,SACpCmf,EAAKE,UAAUzJ,EAAKwJ,IAAUzC,EAAKpZ,OAAS,IADvC6b,EAIlB,GACJ,GAAC,CAAA5T,IAAA,YAAAzI,MAED,SAAUP,EAAO8b,GACb,OACIra,EAAAA,EAAAA,MAACR,EAAAA,SAAc,CAAAzD,SAAA,EACXT,EAAAA,EAAAA,KAAA,OAAKsD,UAAWR,EAAM,aAAarC,SAAE2L,KAAK2T,YAAY9c,EAAO8b,KAC5DA,GAAa3S,KAAK4T,kBAG/B,GAAC,CAAA/T,IAAA,cAAAzI,MAED,SAAYP,EAAO8b,GAAY,IAADkB,EAAA,KAC1B,OAAOhd,EAAMZ,KAAI,SAACwB,EAAMgc,GACpB,IAAMhB,EAAagB,IAAU5c,EAAMe,OAAS,EACtCkc,EAASnB,GAAcF,IAAcoB,EAAKhb,MAAMkY,YAAqB,GAAP,KACpE,OACIzY,EAAAA,EAAAA,MAAA,QAAkBpB,UAAWR,EAAM,YAAYrC,SAAA,CAC1Cwf,EAAKf,WAAWrb,GAChBqc,IAFML,EAKnB,GACJ,GAAC,CAAA5T,IAAA,gBAAAzI,MAOD,WACI,IAAO2Z,EAAe/Q,KAAKnH,MAApBkY,YACP,IAAKA,EACD,OAAO,KAGX,IAAMgD,GAAa/T,KAAKkT,sBAClBc,EAAWD,EAAmC,0BAAvB/T,KAAKiU,gBAE3BhD,EAAcjR,KAAKnH,MAAnBoY,WACDpR,EAAMoR,EAEZ,OACI3Y,EAAAA,EAAAA,MAACgS,EAAAA,EAAO,CAAWpT,UAAWR,EAAM,iBAAkBnD,QAASygB,EAAQ3f,SAAA,EACnEiE,EAAAA,EAAAA,MAAA,OAAKpB,UAAWR,EAAM,cAAe,CAACqd,UAAAA,IAAahgB,QAASiM,KAAKiT,eAAe5e,SAAA,CAAC,IAC3E0c,MAENnd,EAAAA,EAAAA,KAACsgB,EAAAA,EAAW,CAACvhB,MAAO,YAAagS,QAASsM,EAAYkD,SAAUnU,KAAKgT,YAAY3e,SAC5E4c,GAAcjR,KAAKiU,oBALdpU,EAStB,GAAC,CAAAA,IAAA,gBAAAzI,MAcD,WAAiB,IAADgd,EAAA,KACLvd,EAASmJ,KAAKnH,MAAdhC,MACP,OACIjD,EAAAA,EAAAA,KAAA,OAAKsD,UAAWR,EAAM,UAAW,WAAWrC,SACvCwC,EAAMZ,KAAI,SAACwB,GACR,OAAO7D,EAAAA,EAAAA,KAAA,OAAAS,SAAiB+f,EAAKtB,WAAWrb,IAAvBA,EACrB,KAGZ,GAAC,CAAAoI,IAAA,sBAAAzI,MAED,WACI,IAAOid,EAAmBrU,KAAK/L,MAAxBogB,gBAEP,OADgBrU,KAAKnH,MAAdhC,MACMe,QAAU0c,KAAKvP,IA/NV,GA+NiCsP,EACvD,GAAC,CAAAxU,IAAA,SAAAzI,MAED,WACI,IAAOF,EAAa8I,KAAK/L,MAAlBiD,UACP,OACItD,EAAAA,EAAAA,KAAA,OAAKid,IAAK7Q,KAAKkR,MAAOha,UAAWR,EAAM,KAAMQ,GAAW7C,SACnD2L,KAAKuU,cAGlB,IAAC,CA5NiD,CAASzc,EAAAA,WAA1CyS,EASViK,aAAe,CAClBH,gBAvBkB,G,2HCXX,SAASxgB,EAAgBnB,GAIb,IAAD+hB,EAAA/hB,EAHtBoM,KAAAA,OAAI,IAAA2V,EAAG,iBAAgBA,EAAAC,EAAAhiB,EACvB4N,KAAAA,OAAI,IAAAoU,EAAG,IAAGA,EACPjhB,GAAIC,EAAAA,EAAAA,GAAAhB,EAAAiB,GAEP,OACIC,EAAAA,EAAAA,KAACiL,EAAAA,GAAM/K,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACgL,KAAMA,EAAMwB,KAAMA,GAAU7M,GAAI,IAAAY,UACpCT,EAAAA,EAAAA,KAACgU,EAAAA,EAAI,CAACC,QAAQ,SAG1B,C","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/bars-descending-align-left.svg","webpack://@ytsaurus/ui/./src/ui/utils/sha256.ts","webpack://@ytsaurus/ui/./src/ui/pages/components/GroupSuggest/GroupSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/utils/getExternalSystem.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/users.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/users.js","webpack://@ytsaurus/ui/./src/ui/pages/users/CreateUserModal/CreateUserModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageFilters/UsersPageFilters.js","webpack://@ytsaurus/ui/./src/ui/store/actions/users-typed.ts","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageEditor/UsersPageEditor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/DeleteUserModal/DeleteUserModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UserActions/UserActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageTable/UsersPageTable.js","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPage.tsx","webpack://@ytsaurus/ui/./src/ui/components/PageCounter/PageCounter.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColumnHeader/ColumnHeader.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/components/CommaSeparateListWithRestCounter/CommaSeparateListWithRestCounter.js","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx"],"sourcesContent":["import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\nimport i18n from './i18n';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: i18n('tooltip-content')},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","const SvgBarsDescendingAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1 3.25a.75.75 0 0 1 .75-.75h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 3.25M1 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 8m.75 4a.75.75 0 0 0 0 1.5h2.5a.75.75 0 0 0 0-1.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgBarsDescendingAlignLeft;","export async function sha256(str: string) {\n const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(str));\n\n return [...new Uint8Array(buf)].map((x) => ('00' + x.toString(16)).slice(-2)).join('');\n}\n\nexport const isCryptoSubtleAvailable = () => {\n return Boolean(crypto?.subtle?.digest);\n};\n","import React from 'react';\nimport {connect} from 'react-redux';\n\nimport concat_ from 'lodash/concat';\nimport filter_ from 'lodash/filter';\nimport map_ from 'lodash/map';\n\nimport cn from 'bem-cn-lite';\n\nimport {SelectProps} from '@gravity-ui/uikit';\n\nimport {EditableList, EditableListItemType} from '../../../components/Dialog';\n\nimport {getAllGroupNamesSorted, getAllIdmGroupNamesSorted} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport Select from '../../../components/Select/Select';\n\nimport './GroupSuggest.scss';\n\nconst block = cn('group-suggest');\n\ninterface Props {\n placeholder?: string;\n items?: Array<string>;\n className?: string;\n showTags?: boolean;\n idmOnly?: boolean;\n multiple?: boolean;\n value: Array<string>;\n onChange: (value: Props['value']) => void;\n disabled?: boolean;\n width?: SelectProps['width'];\n maxVisibleValues?: number;\n disablePortal?: boolean;\n}\n\nfunction GroupSuggest(props: Props) {\n const {\n items,\n width,\n multiple,\n onChange,\n placeholder,\n className,\n showTags,\n value,\n disablePortal = true,\n ...rest\n } = props;\n\n const ycItems = map_(items, (item) => ({\n value: item,\n text: item,\n }));\n\n const empty = !value?.length;\n\n const listValue = React.useMemo(() => map_(concat_([], value), (title) => ({title})), [value]);\n\n const onListChange = React.useCallback(\n (newList: Array<EditableListItemType<any>>) => {\n const res = filter_(newList, ({removed}) => !removed).map(({title}) => title);\n onChange(res);\n },\n [value, onChange],\n );\n\n return (\n <div className={block({empty}, className)}>\n <Select\n {...rest}\n items={ycItems}\n onUpdate={onChange}\n placeholder={placeholder}\n value={props.value}\n multiple={multiple}\n width={width ?? 'max'}\n filterable\n disablePortal={disablePortal}\n />\n {multiple && showTags && <EditableList onChange={onListChange} value={listValue} />}\n </div>\n );\n}\n\nGroupSuggest.isEmpty = (value: Array<string>) => {\n return !value?.length;\n};\n\nGroupSuggest.getDefaultValue = () => {\n return [];\n};\n\nconst mapStateToProps = (state: RootState, ownProps: Props) => {\n const {idmOnly} = ownProps;\n const items: Array<string> = idmOnly\n ? (getAllIdmGroupNamesSorted(state) as Array<string>)\n : getAllGroupNamesSorted(state);\n return {items};\n};\n\nexport default connect(mapStateToProps)(GroupSuggest);\n","import {isIdmAclAvailable} from '../config';\n\nexport const getExternalSystem = (ldap: boolean, idm: boolean) => {\n const hasIdm = idm && isIdmAclAvailable();\n\n if (ldap) return 'ldap';\n if (hasIdm) return 'idm';\n return '-';\n};\n","import difference_ from 'lodash/difference';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport {\n USERS_EDIT_USER,\n USERS_EDIT_USER_DATA_FIELDS,\n USERS_TABLE,\n USERS_TABLE_DATA_FIELDS,\n} from '../../constants/users';\nimport {getCluster} from '../../store/selectors/global';\nimport {listAllUsers} from '../../utils/users-groups';\nimport {flags} from '../../utils/index';\nimport {getBatchError} from '../../utils/utils';\nimport {YTApiId, ytApiV3Id, ytApiV4Id} from '../../rum/rum-wrap-api';\nimport UIFactory from '../../UIFactory';\nimport {sha256} from '../../utils/sha256';\nimport {getExternalSystem} from '../../utils/getExternalSystem';\n\nconst USER_ATTRIBUTES = [\n 'name',\n 'banned',\n 'ban_message',\n 'member_of',\n 'member_of_closure',\n 'read_request_rate_limit',\n 'request_queue_size_limit',\n 'write_request_rate_limit',\n 'upravlyator_managed',\n 'ldap',\n];\n\nexport function prepareUserData(item) {\n const {\n $attributes: {\n member_of: groups,\n member_of_closure: allGroups,\n upravlyator_managed: idm,\n ldap,\n },\n } = item;\n groups.sort();\n allGroups.sort();\n const hasIdm = flags.get(idm || false);\n\n item.$attributes.idm = hasIdm;\n item.$attributes.externalSystem = getExternalSystem(ldap, hasIdm);\n item.$attributes['transitiveGroups'] = difference_(allGroups, groups);\n return item.$attributes;\n}\n\nexport function fetchUsers() {\n return (dispatch) => {\n dispatch({type: USERS_TABLE.REQUEST});\n\n return listAllUsers(YTApiId.usersData, {attributes: USER_ATTRIBUTES})\n .then((data) => {\n const users = [];\n forEach_(data, (item) => {\n users.push(prepareUserData(item));\n });\n dispatch({type: USERS_TABLE.SUCCESS, data: {users}});\n })\n .catch((error) => {\n dispatch({type: USERS_TABLE.FAILURE, data: error});\n });\n };\n}\n\nexport function setUsersNameFilter(nameFilter) {\n return {type: USERS_TABLE_DATA_FIELDS, data: {nameFilter}};\n}\n\nexport function setUsersGroupFilter(filter) {\n return {\n type: USERS_TABLE_DATA_FIELDS,\n data: {groupFilter: filter || ''},\n };\n}\n\nexport function setUsersBannedFilter(bannedFilter) {\n return {type: USERS_TABLE_DATA_FIELDS, data: {bannedFilter}};\n}\n\nexport function setUsersPageSorting({column, order}) {\n const sort = {column, order};\n if (!order) {\n sort.column = '';\n }\n return {type: USERS_TABLE_DATA_FIELDS, data: {sort}};\n}\n\nexport function showUserEditorModal(username) {\n return (dispatch) => {\n const isNewUser = !username;\n\n if (isNewUser) {\n dispatch({\n type: USERS_EDIT_USER_DATA_FIELDS,\n data: {showModal: true},\n });\n return;\n }\n\n dispatch({type: USERS_EDIT_USER.REQUEST});\n const path = `//sys/users/${username}`;\n return ytApiV3Id\n .get(YTApiId.usersEditData, {path, attributes: USER_ATTRIBUTES})\n .then((res) => {\n dispatch({\n type: USERS_EDIT_USER.SUCCESS,\n data: {data: prepareUserData(res)},\n });\n dispatch({\n type: USERS_EDIT_USER_DATA_FIELDS,\n data: {showModal: true, username},\n });\n })\n .catch((error) => {\n return dispatch({type: USERS_EDIT_USER.FAILURE, data: error});\n });\n };\n}\n\nexport function closeUserEditorModal() {\n return {\n type: USERS_EDIT_USER_DATA_FIELDS,\n data: {showModal: false, username: ''},\n };\n}\n\nfunction removeUserFromGroups(cluster, username, groups) {\n return Promise.all(\n map_(groups, (groupname) => {\n return UIFactory.getAclApi().removeUserFromGroup({cluster, username, groupname});\n }),\n );\n}\n\nfunction addUserToGroups(cluster, username, groups, comment) {\n return Promise.all(\n map_(groups, (groupname) => {\n return UIFactory.getAclApi().addUserToGroup({cluster, username, groupname, comment});\n }),\n );\n}\n\nfunction changeUserPassword({username, password}) {\n if (password) {\n return sha256(password).then((new_password_sha256) => {\n return ytApiV4Id.setUserPassword(YTApiId.setUserPassword, {\n parameters: {\n user: username,\n new_password_sha256,\n },\n });\n });\n }\n\n return Promise.resolve();\n}\n\nexport function saveUserData({\n username,\n newName,\n attributes,\n groupsToAdd,\n groupsToRemove,\n password,\n}) {\n return (dispatch, getState) => {\n dispatch({type: USERS_EDIT_USER.REQUEST});\n\n const path = `//sys/users/${username}`;\n const requests = [];\n const {comment, ...restAttrs} = attributes;\n forEach_(restAttrs, (value, key) => {\n requests.push({\n command: 'set',\n parameters: {\n path: `${path}/@${key}`,\n },\n input: value,\n });\n });\n\n if (newName !== username) {\n requests.push({\n command: 'set',\n parameters: {\n path: `${path}/@name`,\n },\n input: newName,\n });\n }\n\n const state = getState();\n const cluster = getCluster(state);\n\n return (\n Promise.all(\n [\n addUserToGroups(cluster, username, groupsToAdd, comment),\n removeUserFromGroups(cluster, username, groupsToRemove),\n changeUserPassword({username, password}),\n requests.length && ytApiV3Id.executeBatch(YTApiId.usersSaveData, {requests}),\n ].filter(Boolean),\n )\n // eslint-disable-next-line no-unused-vars\n .then(([addRes, removeRes, changePasswordRes, batchRes]) => {\n const batchError = getBatchError(batchRes, \"Failed to save user's data\");\n if (batchError) {\n throw batchError;\n }\n\n dispatch({type: USERS_EDIT_USER.SUCCESS, data: {}});\n dispatch(fetchUsers());\n\n return;\n })\n .catch((error) => {\n const data = error?.response?.data || error;\n dispatch({type: USERS_EDIT_USER.FAILURE, data: data});\n return Promise.reject(data);\n })\n );\n };\n}\n","import filter_ from 'lodash/filter';\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\n\nimport {createSelector} from 'reselect';\nimport {sortArrayBySortState} from '../../utils/sort-helpers';\nimport {concatByAnd} from '../../common/hammer/predicate';\n\n// Table\n\nexport const getUsersTableDataState = (state) => state.users.table;\n\nexport const getUsers = (state) => state.users.table.users;\nexport const getUsersNameFilter = (state) => state.users.table.nameFilter;\nexport const getUsersGroupFilter = (state) => state.users.table.groupFilter;\nexport const getUsersBannedFilter = (state) => state.users.table.bannedFilter;\nexport const getUsersSort = (state) => state.users.table.sort;\n\nexport const getUsersFiltered = createSelector(\n [getUsers, getUsersNameFilter, getUsersGroupFilter, getUsersBannedFilter],\n (users, nameFilter, groupFilter, bannedFilter) => {\n const predicates = [\n nameFilter && (({name}) => name.indexOf(nameFilter) !== -1),\n groupFilter &&\n (({member_of: memberOf, transitiveGroups}) => {\n return (\n -1 !== sortedIndexOf_(memberOf, groupFilter) ||\n -1 !== sortedIndexOf_(transitiveGroups, groupFilter)\n );\n }),\n bannedFilter && (({banned}) => banned),\n ].filter(Boolean);\n\n if (predicates.length === 0) {\n return users;\n }\n\n return filter_(users, concatByAnd(...predicates));\n },\n);\n\nexport const getUsersFilteredAndSorted = createSelector(\n [getUsersSort, getUsersFiltered],\n (sortState, users) => {\n return sortArrayBySortState(users, sortState);\n },\n);\n\n// User editor\nexport const getUsersPageEditableUser = (state) => state.users.editUser;\n","import Button from '../../../components/Button/Button';\nimport React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {showUserEditorModal} from '../../../store/actions/users';\nimport {getUserManagementEnabled} from '../../../store/selectors/global';\n\nexport const ShowCreateUserModalButton: React.FC = () => {\n const dispatch = useDispatch();\n const onClick = useCallback(() => {\n dispatch(showUserEditorModal());\n }, []);\n\n const isEnabled = useSelector(getUserManagementEnabled);\n\n if (isEnabled) {\n return (\n <Button view=\"action\" onClick={onClick}>\n Create new\n </Button>\n );\n }\n\n return null;\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport Filter from '../../../components/Filter/Filter';\n\nimport {\n setUsersBannedFilter,\n setUsersGroupFilter,\n setUsersNameFilter,\n} from '../../../store/actions/users';\nimport GroupSuggest from '../../../pages/components/GroupSuggest/GroupSuggest';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {\n getUsersBannedFilter,\n getUsersGroupFilter,\n getUsersNameFilter,\n} from '../../../store/selectors/users';\nimport {GroupsLoader} from '../../../hooks/global';\nimport {ShowCreateUserModalButton} from '../CreateUserModal/CreateUserModal';\n\nimport './UsersPageFilters.scss';\n\nconst block = cn('users-page-filters');\n\nclass UsersPageFilters extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n\n bannedFilter: PropTypes.bool.isRequired,\n setUsersBannedFilter: PropTypes.func.isRequired,\n\n groupFilter: PropTypes.string.isRequired,\n setUsersGroupFilter: PropTypes.func.isRequired,\n\n nameFilter: PropTypes.string.isRequired,\n setUsersNameFilter: PropTypes.func.isRequired,\n };\n\n toggleBannedFilter = () => {\n const {bannedFilter, setUsersBannedFilter} = this.props;\n setUsersBannedFilter(!bannedFilter);\n };\n\n render() {\n const {className, nameFilter, groupFilter, bannedFilter} = this.props;\n\n return (\n <Toolbar\n className={block(null, className)}\n itemsToWrap={[\n {\n name: 'name',\n node: (\n <Filter\n className={block('username-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={nameFilter}\n placeholder=\"User name filter...\"\n onChange={this.props.setUsersNameFilter}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'group',\n node: (\n <GroupsLoader>\n <GroupSuggest\n className={block('group-suggest')}\n value={groupFilter ? [groupFilter] : undefined}\n placeholder=\"Group name filter...\"\n onChange={(vals) => this.props.setUsersGroupFilter(vals[0])}\n disablePortal={false}\n />\n </GroupsLoader>\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'banned',\n node: (\n <Checkbox\n size=\"l\"\n checked={bannedFilter}\n content=\"Banned\"\n onChange={this.toggleBannedFilter}\n />\n ),\n },\n ]}\n >\n <ShowCreateUserModalButton />\n </Toolbar>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n bannedFilter: getUsersBannedFilter(state),\n nameFilter: getUsersNameFilter(state),\n groupFilter: getUsersGroupFilter(state),\n };\n};\n\nconst mapDispatchToProps = {\n setUsersBannedFilter,\n setUsersNameFilter,\n setUsersGroupFilter,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageFilters);\n","// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {deleteUserModalSlice} from '../reducers/users/delete-user';\nimport {Dispatch} from 'redux';\n\nexport const deleteUser = ({username}: {username: string}): Promise<void> => {\n return yt.v3.remove({\n parameters: {\n path: `//sys/users/${username}`,\n },\n });\n};\n\nexport const createUser = ({username}: {username: string}): Promise<void> => {\n return yt.v3.create({\n parameters: {\n type: 'user',\n attributes: {\n name: username,\n },\n },\n });\n};\n\nexport function showUserDeleteModal(usernameToDelete: string) {\n return (dispatch: Dispatch) => {\n dispatch(deleteUserModalSlice.actions.setModalState({usernameToDelete}));\n };\n}\n\nexport function closeUserDeleteModal() {\n return (dispatch: Dispatch) => {\n dispatch(deleteUserModalSlice.actions.setModalState({usernameToDelete: ''}));\n };\n}\n","import {FormApi, YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport filter_ from 'lodash/filter';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {closeUserEditorModal, fetchUsers, saveUserData} from '../../../store/actions/users';\nimport {\n getGlobalGroupAttributesMap,\n getUserManagementEnabled,\n} from '../../../store/selectors/global';\nimport {getUsersPageEditableUser} from '../../../store/selectors/users';\nimport {flags} from '../../../utils';\n\nimport './UsersPageEditor.scss';\nimport {GroupsLoader} from '../../../hooks/global';\nimport {RootState} from '../../../store/reducers';\nimport {FIX_MY_TYPE, YTError} from '../../../types';\nimport {isIdmAclAvailable} from '../../../config';\nimport {createUser} from '../../../store/actions/users-typed';\nimport {disableUsersCache} from '../../../utils/users-groups';\n\nconst block = cn('users-page-editor');\n\ninterface Props {\n className?: string;\n showModal?: boolean;\n username: string;\n ban_message?: string;\n banned?: string | boolean;\n member_of?: Array<string>;\n comment?: string;\n idm?: boolean;\n read_request_rate_limit?: number;\n request_queue_size_limit?: number;\n write_request_rate_limit?: number;\n groupAttributesMap?: GroupAttributes;\n isUserManagementEnabled?: boolean;\n\n closeUserEditorModal: () => void;\n fetchUsers: () => void;\n saveUserData: (payload: {\n username: string;\n password: string;\n newName: string;\n attributes: Partial<\n Pick<\n Props,\n Exclude<\n Level2Keys,\n 'idm' | 'name' | 'groups' | 'newGroups' | 'password' | 'passwordConfirm'\n >\n >\n >;\n groupsToAdd: Array<string>;\n groupsToRemove: Array<string>;\n }) => Promise<void>;\n}\n\ninterface State {\n error?: YTError;\n}\n\ntype GroupAttributes = Record<string, {upravlyator_managed: boolean}>;\n\ninterface FormValues {\n general: {\n idm: string;\n name: string;\n read_request_rate_limit: {value: number};\n request_queue_size_limit: {value: number};\n write_request_rate_limit: {value: number};\n };\n groups: {\n newGroups: Array<string>;\n groups: ReturnType<typeof UsersPageEditor.prepareCurrent>;\n comment: string;\n };\n ban: {\n banned?: string | boolean;\n ban_message?: string;\n };\n password: {\n password: string;\n passwordConfirm: string;\n };\n}\n\ntype Level2Keys =\n | keyof FormValues['general']\n | keyof FormValues['groups']\n | keyof FormValues['ban']\n | keyof FormValues['password'];\n\nclass UsersPageEditor extends React.Component<Props, State> {\n static propTypes = {\n className: PropTypes.string,\n showModal: PropTypes.bool,\n username: PropTypes.string.isRequired,\n ban_message: PropTypes.string,\n banned: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n member_of: PropTypes.arrayOf(PropTypes.string),\n read_request_rate_limit: PropTypes.number,\n request_queue_size_limit: PropTypes.number,\n write_request_rate_limit: PropTypes.number,\n groupAttributesMap: PropTypes.object,\n idm: PropTypes.bool,\n comment: PropTypes.string,\n\n closeUserEditorModal: PropTypes.func,\n saveUserData: PropTypes.func,\n };\n\n static prepareGroups(groups: Array<string> = [], groupAttributes: GroupAttributes = {}) {\n return groups.map((title) => {\n const {[title]: group} = groupAttributes;\n return {\n title,\n // eslint-disable-next-line camelcase\n frozen: !flags.get(group?.upravlyator_managed),\n };\n });\n }\n\n static prepareCurrent(groups: Array<string> = [], groupAttributes: GroupAttributes = {}) {\n const current: {\n title: string;\n data: ReturnType<typeof UsersPageEditor.prepareGroups>;\n } = {\n title: 'Current',\n data: UsersPageEditor.prepareGroups(groups, groupAttributes),\n };\n return [current].filter(({data}) => data.length);\n }\n\n state: State = {};\n\n // eslint-disable-next-line react/sort-comp\n onAdd = async (form: FormApi<FormValues>) => {\n const {\n values: {general: generalTab, groups: groupsTab, ban: banTab, password: passwordTab},\n } = form.getState();\n const fields = {\n idm: generalTab.idm,\n read_request_rate_limit: generalTab.read_request_rate_limit.value,\n request_queue_size_limit: generalTab.request_queue_size_limit.value,\n write_request_rate_limit: generalTab.write_request_rate_limit.value,\n password: passwordTab.password,\n ...groupsTab,\n ...banTab,\n };\n\n const {idm: _idm, groups, newGroups, password: newPassword, ...rest} = fields;\n const [current] = groups;\n const groupsToRemove = map_(filter_(current?.data, 'removed'), 'title');\n\n const changedFields = reduce_(\n rest,\n (acc, value, fieldName) => {\n if (!isEqual_(value, this.props[fieldName as keyof Props])) {\n (acc as FIX_MY_TYPE)[fieldName] = value;\n }\n return acc;\n },\n {} as Partial<typeof fields>,\n );\n if (!changedFields['ban_message'] && !this.props['ban_message']) {\n // This is required because textarea returns empty string\n // even if it receives 'undefined' as input\n delete changedFields['ban_message'];\n }\n\n let username;\n let newName;\n\n if (this.isNewUser()) {\n username = generalTab.name;\n newName = username;\n\n try {\n await createUser({username});\n } catch (error: any) {\n this.setState({error});\n return Promise.reject(error);\n }\n } else {\n username = this.props.username;\n newName = generalTab.name;\n }\n\n return this.props\n .saveUserData({\n username,\n newName,\n attributes: changedFields,\n groupsToAdd: newGroups,\n groupsToRemove: groupsToRemove,\n password: newPassword,\n })\n .then(() => {\n // we don't need to wait for the end of the action\n disableUsersCache();\n this.props.fetchUsers();\n })\n .catch((error) => {\n this.setState({error});\n return Promise.reject(error);\n });\n };\n\n onClose = () => {\n this.props.closeUserEditorModal();\n };\n\n isNewUser() {\n return !this.props.username;\n }\n\n render() {\n const {\n className,\n showModal,\n username,\n idm,\n banned,\n ban_message: banMessage,\n member_of: groups,\n read_request_rate_limit: rrrl,\n request_queue_size_limit: rqsl,\n write_request_rate_limit: wrrl,\n groupAttributesMap,\n isUserManagementEnabled,\n } = this.props;\n\n const errors = makeErrorFields([this.state.error]);\n\n return (\n <React.Fragment>\n <GroupsLoader />\n <YTDFDialog<FormValues>\n className={block(null, className)}\n headerProps={{\n title: this.isNewUser() ? 'Create user' : `User ${username}`,\n }}\n size={'l'}\n initialValues={{\n general: {\n idm: idm === undefined ? '' : String(idm),\n name: username,\n read_request_rate_limit: {value: rrrl || 1},\n request_queue_size_limit: {value: rqsl || 1},\n write_request_rate_limit: {value: wrrl || 1},\n },\n groups: {\n newGroups: [],\n groups: UsersPageEditor.prepareCurrent(groups, groupAttributesMap),\n comment: '',\n },\n ban: {\n banned: banned || false,\n ban_message: banMessage,\n },\n password: {\n password: '',\n passwordConfirm: '',\n },\n }}\n onAdd={this.onAdd}\n visible={Boolean(showModal)}\n onClose={this.onClose}\n fields={[\n {\n type: 'tab-vertical',\n name: 'general',\n title: 'General',\n fields: [\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n type: 'plain' as const,\n name: 'idm',\n caption: 'IDM',\n },\n ]),\n ...(isUserManagementEnabled\n ? [\n {\n name: 'name',\n type: 'text' as const,\n required: true,\n caption: 'Name',\n },\n ]\n : []),\n {\n type: 'number',\n name: 'request_queue_size_limit',\n caption: 'Request queue size limit',\n extras: {\n min: 1,\n hidePrettyValue: true,\n },\n },\n {\n type: 'number',\n name: 'read_request_rate_limit',\n caption: 'Read request rate limit',\n extras: {\n min: 1,\n hidePrettyValue: true,\n },\n },\n {\n type: 'number',\n name: 'write_request_rate_limit',\n caption: 'Write request rate limit',\n extras: {\n min: 1,\n hidePrettyValue: true,\n },\n },\n ...errors,\n ],\n },\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n type: 'tab-vertical' as const,\n name: 'groups',\n title: 'Groups',\n fields: [\n {\n type: 'yt-group' as const,\n name: 'newGroups',\n caption: 'Groups',\n extras: {\n multiple: true,\n showTags: true,\n disabled: !isIdmAclAvailable(),\n maxVisibleValues: 3,\n placeholder: 'Enter group name',\n },\n },\n {\n name: 'groups',\n type: 'multi-editable-lists' as const,\n caption: '',\n extras: {\n titleClassName: block('list-title'),\n },\n },\n {\n name: 'comment',\n caption: 'Comment for IDM',\n type: 'textarea' as const,\n extras: {\n disabled: !isIdmAclAvailable(),\n },\n },\n ...errors,\n ],\n },\n ]),\n {\n type: 'tab-vertical',\n name: 'ban',\n title: 'Ban',\n fields: [\n {\n type: 'tumbler',\n name: 'banned',\n caption: 'Ban user',\n },\n {\n type: 'textarea',\n name: 'ban_message',\n caption: 'Ban message',\n },\n ...errors,\n ],\n },\n ...(isUserManagementEnabled\n ? [\n {\n type: 'tab-vertical' as const,\n name: 'password',\n title: 'Password',\n fields: [\n {\n name: 'password',\n type: 'text' as const,\n caption: 'New password',\n extras: () => ({type: 'password' as const}),\n },\n {\n name: 'passwordConfirm',\n type: 'text' as const,\n caption: 'Confirm password',\n extras: () => ({type: 'password' as const}),\n },\n ...errors,\n ],\n },\n ]\n : []),\n ]}\n validate={({password}) => {\n const passwordErrors: Partial<\n Record<keyof typeof password, string | undefined>\n > = {};\n\n if (password.password !== password.passwordConfirm) {\n passwordErrors.password = 'New and confirm password must be equal';\n }\n\n return {password: passwordErrors};\n }}\n />\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {showModal, username, data: attrs} = getUsersPageEditableUser(state);\n const data = attrs && username === attrs.name ? attrs : {};\n return {\n showModal,\n username,\n ...data,\n groupAttributesMap: getGlobalGroupAttributesMap(state),\n isUserManagementEnabled: getUserManagementEnabled(state),\n };\n};\n\nconst mapDispatchToProps = {\n closeUserEditorModal,\n saveUserData,\n fetchUsers,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageEditor);\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RootState} from '../../../store/reducers';\nimport {Text} from '@gravity-ui/uikit';\nimport {closeUserDeleteModal, deleteUser} from '../../../store/actions/users-typed';\nimport {fetchUsers} from '../../../store/actions/users';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {YTError} from '../../../types';\nimport {disableUsersCache} from '../../../utils/users-groups';\n\nexport const DeleteUserModal: React.FC = () => {\n const dispatch = useDispatch();\n const [error, setError] = React.useState<YTError | undefined>(undefined);\n const usernameToDelete = useSelector(\n (state: RootState) => state.users.deleteUser.usernameToDelete,\n );\n\n const onClose = useCallback(() => {\n dispatch(closeUserDeleteModal());\n }, [dispatch]);\n\n const onAdd = useCallback(async () => {\n try {\n setError(undefined);\n\n await deleteUser({username: usernameToDelete});\n\n onClose();\n\n disableUsersCache();\n // we don't need to wait for the end of the action\n dispatch(fetchUsers());\n } catch (error) {\n setError(error as YTError);\n }\n }, [dispatch, usernameToDelete, onClose]);\n\n return (\n <YTDFDialog\n visible={Boolean(usernameToDelete)}\n headerProps={{title: `Delete user ${usernameToDelete}`}}\n pristineSubmittable={true}\n onClose={onClose}\n onAdd={onAdd}\n fields={[\n {\n name: 'username',\n type: 'block',\n extras: {\n children: (\n <Text>\n Are you sure you want to delete "{usernameToDelete}"?\n </Text>\n ),\n },\n },\n ...makeErrorFields([error]),\n ]}\n />\n );\n};\n","import React, {useCallback} from 'react';\nimport UIFactory from '../../../UIFactory';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport Link from '../../../components/Link/Link';\nimport Icon from '../../../components/Icon/Icon';\nimport Button from '../../../components/Button/Button';\nimport {showUserEditorModal} from '../../../store/actions/users';\nimport {showUserDeleteModal} from '../../../store/actions/users-typed';\nimport {getUserManagementEnabled} from '../../../store/selectors/global';\nimport block from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport './UserActions.scss';\n\nconst b = block('yt-user-actions');\n\ntype UserActionsProps = {\n className?: string;\n cluster: string;\n username: string;\n};\n\nexport const UserActions: React.FC<UserActionsProps> = ({className, cluster, username}) => {\n const dispatch = useDispatch();\n\n const onEditClick = useCallback(() => {\n dispatch(showUserEditorModal(username));\n }, [username, dispatch]);\n\n const onDeleteClick = useCallback(() => {\n dispatch(showUserDeleteModal(username));\n }, [username, dispatch]);\n\n const isUserManagementEnabled = useSelector(getUserManagementEnabled);\n\n let deleteUserButton;\n\n if (isUserManagementEnabled) {\n deleteUserButton = (\n <Button view=\"flat-secondary\" size=\"m\" onClick={onDeleteClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n } else {\n deleteUserButton = null;\n }\n\n return (\n <div className={b(null, className)}>\n <ChartLink url={UIFactory.makeUrlForUserDashboard(cluster, username)} />\n <Link routed url={userOperationsLink(cluster, username)}>\n </>\n </Link>\n <ClickableAttributesButton title={username} path={`//sys/users/${username}`} />\n <Button view=\"flat-secondary\" size=\"m\" onClick={onEditClick}>\n <Icon awesome=\"pencil-alt\" />\n </Button>\n {deleteUserButton}\n </div>\n );\n};\n\nfunction userOperationsLink(cluster: string, user: string) {\n return `/${cluster}/operations?mode=list&user=${user}&state=all`;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport DataTable from '@gravity-ui/react-data-table';\n\nimport {fetchUsers, setUsersPageSorting} from '../../../store/actions/users';\nimport ColumnHeader from '../../../components/ColumnHeader/ColumnHeader';\nimport CommaSeparatedListWithRestCounter from '../../../components/CommaSeparateListWithRestCounter/CommaSeparateListWithRestCounter';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport LoadDataHandler from '../../../components/LoadDataHandler/LoadDataHandler';\nimport {SubjectCard} from '../../../components/SubjectLink/SubjectLink';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport UsersPageEditor from '../../../pages/users/UsersPageEditor/UsersPageEditor';\nimport {DeleteUserModal} from '../../../pages/users/DeleteUserModal/DeleteUserModal';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getUsersFilteredAndSorted,\n getUsersPageEditableUser,\n getUsersTableDataState,\n} from '../../../store/selectors/users';\nimport {UserActions} from '../UserActions/UserActions';\n\nimport './UsersPageTable.scss';\n\nconst block = cn('users-page-table');\n\nconst TABLE_SETTINGS = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n\nconst COLUMN_NAMES = {\n name: 'Name',\n banned: 'Banned',\n member_of: 'Groups',\n transitiveGroups: 'Transitive groups',\n request_queue_size_limit: 'Request queue',\n read_request_rate_limit: 'Read request rate',\n write_request_rate_limit: 'Write request rate',\n externalSystem: 'External system',\n\n // pseudo columns\n actions: '',\n};\n\nconst SHOR_COLUMN_NAMES = {\n banned: 'B',\n request_queue_size_limit: 'RQ',\n read_request_rate_limit: 'RRR',\n write_request_rate_limit: 'WRR',\n};\n\nclass UsersPageTable extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n\n loading: PropTypes.bool,\n loaded: PropTypes.bool.isRequired,\n\n users: PropTypes.array.isRequired,\n cluster: PropTypes.string.isRequired,\n fetchUsers: PropTypes.func.isRequired,\n setUsersPageSorting: PropTypes.func.isRequired,\n\n sort: PropTypes.shape({\n column: PropTypes.string,\n order: PropTypes.string,\n }),\n\n showModal: PropTypes.bool,\n showUserEditorModal: PropTypes.func,\n };\n\n componentDidMount() {\n const {fetchUsers} = this.props;\n fetchUsers();\n }\n\n renderColumnHeader = (col, sortable) => {\n const {\n sort: {column, order},\n } = this.props;\n const isSorted = col === column;\n\n const title = COLUMN_NAMES[col];\n\n return (\n <ColumnHeader\n className={block('header-cell', {col, sortable}, 'data-table__head-cell')}\n column={col}\n title={title}\n shortTitle={SHOR_COLUMN_NAMES[col] || title}\n order={isSorted ? order : ''}\n onSort={this.onColumnSort}\n withUndefined\n />\n );\n };\n\n onColumnSort = (colName, nextOrder) => {\n const {setUsersPageSorting} = this.props;\n setUsersPageSorting({column: colName, order: nextOrder});\n };\n\n renderNameCell(col, {row} = {}) {\n const {name, upravlyator_managed: idm} = row;\n return (\n <div className={block('content', {col})}>\n <SubjectCard name={name} internal={!idm} />\n </div>\n );\n }\n\n renderBannedCell(col, {row} = {}) {\n const {banned, ban_message: banMessage} = row;\n return (\n <Tooltip content={banMessage}>\n <div className={block('content', {col})}>\n {banned && <span className={block(col)}>B</span>}\n </div>\n </Tooltip>\n );\n }\n\n renderGroupsCell(col, {row} = {}) {\n const {[col]: value} = row;\n return (\n <div className={block('content', {col})}>\n <CommaSeparatedListWithRestCounter className={block('groups')} items={value} />\n </div>\n );\n }\n\n renderNumberCell = (col, {row} = {}) => {\n const {[col]: value} = row;\n return (\n <div className={block('content', {col})}>\n <span>{value}</span>\n </div>\n );\n };\n\n renderExternalSystemCell = (col, {row} = {}) => {\n const {externalSystem} = row;\n\n return (\n <div className={block('content', {col})}>\n <div className={block(col)}>{externalSystem}</div>\n </div>\n );\n };\n\n renderActionsCell = (col, cluster, {row} = {}) => {\n const {name: username} = row;\n return (\n <UserActions\n className={block('content', {col})}\n username={username}\n cluster={cluster}\n />\n );\n };\n\n renderTable() {\n const {cluster, users, loaded, loading} = this.props;\n\n const columnProps = (name, disableSorting = false) => {\n return {\n name,\n align: DataTable.LEFT,\n sortable: false,\n className: block('td', {col: name.toLowerCase()}),\n header: this.renderColumnHeader(name, !disableSorting),\n };\n };\n\n const DISABLED_SORTING = true;\n\n const columns = [\n {\n ...columnProps('name'),\n render: this.renderNameCell.bind(this, 'name'),\n },\n {\n ...columnProps('banned'),\n render: this.renderBannedCell.bind(this, 'banned'),\n align: DataTable.CENTER,\n },\n {\n ...columnProps('externalSystem', DISABLED_SORTING),\n render: this.renderExternalSystemCell.bind(this, 'externalSystem'),\n },\n {\n ...columnProps('member_of', DISABLED_SORTING),\n render: this.renderGroupsCell.bind(this, 'member_of'),\n },\n {\n ...columnProps('transitiveGroups', DISABLED_SORTING),\n render: this.renderGroupsCell.bind(this, 'transitiveGroups'),\n },\n {\n ...columnProps('request_queue_size_limit'),\n render: this.renderNumberCell.bind(this, 'request_queue_size_limit'),\n align: 'right',\n },\n {\n ...columnProps('read_request_rate_limit'),\n render: this.renderNumberCell.bind(this, 'read_request_rate_limit'),\n align: 'right',\n },\n {\n ...columnProps('write_request_rate_limit'),\n render: this.renderNumberCell.bind(this, 'write_request_rate_limit'),\n align: 'right',\n },\n {\n ...columnProps('actions'),\n header: '',\n render: this.renderActionsCell.bind(this, 'actions', cluster),\n },\n ];\n\n return (\n <DataTableYT\n loaded={loaded}\n loading={loading}\n className={block('table')}\n data={users}\n columns={columns}\n settings={TABLE_SETTINGS}\n theme={'yt-internal'}\n />\n );\n }\n\n render() {\n const {className, error, showModal} = this.props;\n return (\n <div className={block(null, className)}>\n <LoadDataHandler loaded={true} error={Boolean(error)} errorData={error || null}>\n {this.renderTable()}\n {showModal && <UsersPageEditor />}\n <DeleteUserModal />\n </LoadDataHandler>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loaded, loading, error, sort} = getUsersTableDataState(state);\n const {showModal} = getUsersPageEditableUser(state);\n return {\n loaded,\n loading,\n error,\n users: getUsersFilteredAndSorted(state),\n sort,\n cluster: getCluster(state),\n showModal,\n };\n};\n\nconst mapDispatchToProps = {\n fetchUsers,\n setUsersPageSorting,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageTable);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport WithStickyToolbar from '../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport UsersPageFilters from './UsersPageFilters/UsersPageFilters';\nimport UsersPageTable from './UsersPageTable/UsersPageTable';\n\nconst block = cn('users-page');\n\nexport default function UsersPage() {\n return (\n <div className={block(null, 'elements-main-section')}>\n <WithStickyToolbar\n hideToolbarShadow\n className=\"elements-section\"\n toolbar={<UsersPageFilters />}\n content={<UsersPageTable />}\n />\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-page-counter');\n\nexport interface PageCounterProps {\n className?: string;\n pageIndex?: number;\n pageCount?: number;\n}\n\nfunction PageCounter({pageIndex, pageCount, className}: PageCounterProps) {\n if (pageIndex === undefined || pageCount === undefined) {\n return null;\n }\n\n return pageCount! > 1 ? (\n <span className={block(null, className)}>\n Page: {(pageIndex || 0) + 1} / {pageCount}\n </span>\n ) : null;\n}\n\nexport default React.memo(PageCounter);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport capitalize_ from 'lodash/capitalize';\n\nimport barsDescendingSvg from '@gravity-ui/icons/svgs/bars-descending-align-left.svg';\nimport {Button, DropdownMenu, Icon, Text} from '@gravity-ui/uikit';\n\nimport SortIcon from '../../components/SortIcon/SortIcon';\n\nimport {OrderType, calculateNextOrderValue, nextSortOrderValue} from '../../utils/sort-helpers';\nimport PageCounter, {PageCounterProps} from '../../components/PageCounter/PageCounter';\nimport Loader from '../../components/Loader/Loader';\nimport {rumLogError} from '../../rum/rum-counter';\n\nimport './ColumnHeader.scss';\n\nconst block = cn('column-header');\n\nexport type ColumnInfo<T> = {\n column: T;\n title?: string;\n shortTitle?: string;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n allowUnordered?: boolean;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n withUndefined?: boolean;\n allowedOrderTypes?: Array<OrderType>;\n};\n\nexport type HasSortColumn<T> =\n | (ColumnInfo<T> & {options?: undefined})\n | ({\n title: string;\n shortTitle?: string;\n column: T;\n options: Array<ColumnInfo<T>>;\n } & Partial<Record<keyof Omit<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>, undefined>>);\n\nexport type ColumnHeaderProps<T extends string = string> = PageCounterProps &\n HasSortColumn<T> & {\n className?: string;\n order?: OrderType;\n multisortIndex?: number;\n onSort?: (\n column: T,\n nextOrder: OrderType,\n options: {currentOrder?: OrderType; multisort?: boolean},\n ) => void;\n\n loading?: boolean;\n\n align?: 'center' | 'left' | 'right';\n };\n\ntype NameTitleContent = {\n nameContent: string;\n titleContent: string;\n};\n\nfunction getNameTitle<T extends string>({\n column,\n title,\n shortTitle,\n}: Pick<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>): NameTitleContent {\n const t = title ?? capitalize_(column);\n const nameContent = !shortTitle ? t : shortTitle;\n return {nameContent, titleContent: t};\n}\n\nfunction useColumnInfo<T extends string = string>(\n props: ColumnHeaderProps<T>,\n): ColumnInfo<T> & NameTitleContent & {subColumn?: NameTitleContent} {\n if (props.options === undefined) {\n const {column, allowUnordered, withUndefined, title, shortTitle, allowedOrderTypes} = props;\n return {\n column,\n allowUnordered,\n withUndefined,\n allowedOrderTypes,\n ...getNameTitle({column, title, shortTitle}),\n };\n }\n\n const {column: value, options, title, shortTitle} = props;\n const columnData = options.find(({column}) => value === column)!;\n if (!columnData) {\n rumLogError({\n message: 'Unexpected behavior: missing value in ColumnHeader.props.options',\n additional: props,\n });\n }\n return {\n subColumn: getNameTitle({...columnData}),\n ...columnData,\n ...getNameTitle({column: '', title, shortTitle}),\n };\n}\n\nexport default function ColumnHeader<T extends string = string>(props: ColumnHeaderProps<T>) {\n const {className, align, order, onSort, multisortIndex, loading, pageIndex, pageCount} = props;\n const {\n column,\n allowUnordered,\n withUndefined,\n nameContent,\n titleContent,\n allowedOrderTypes,\n subColumn,\n } = useColumnInfo(props);\n\n const changeHandler = React.useCallback(\n (e: React.MouseEvent) => {\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort?.(column, nextOrder, {\n currentOrder: order,\n multisort: e.ctrlKey || e.metaKey,\n });\n },\n [column, order, onSort, allowUnordered, allowedOrderTypes, withUndefined],\n );\n\n const sortable = Boolean(onSort);\n\n return (\n <div className={block(null, className)}>\n <div\n className={block('label-icon', {sortable, align})}\n onClick={sortable ? changeHandler : undefined}\n >\n <span className={block('label')} title={titleContent}>\n {nameContent}\n </span>\n {sortable && (\n <span className={block('icon')}>\n <SortIcon order={order} />\n </span>\n )}\n {multisortIndex !== undefined && (\n <span className={block('multisort')}>\n <sup>{multisortIndex}</sup>\n </span>\n )}\n {Boolean(order) && Boolean(subColumn) && (\n <Text\n className={block('label', {'sub-column': true})}\n variant=\"caption-2\"\n title={subColumn?.titleContent}\n color=\"dark-secondary\"\n >\n {subColumn?.nameContent}\n </Text>\n )}\n </div>\n <SubColumnSelector options={props.options} order={order} onSort={onSort} />\n {loading !== undefined && (\n <div className={block('loader')}>\n <Loader visible={loading} />\n </div>\n )}\n {Boolean(pageCount) && (\n <PageCounter\n className={block('page-counter')}\n pageIndex={pageIndex}\n pageCount={pageCount}\n />\n )}\n </div>\n );\n}\n\nfunction SubColumnSelector<T extends string>({\n order,\n options,\n onSort,\n}: Pick<ColumnHeaderProps<T>, 'onSort'> & {\n order?: ColumnHeaderProps<T>['order'];\n options?: Array<ColumnInfo<T>>;\n}) {\n return !options ? null : (\n <DropdownMenu\n items={options.map((x) => {\n const {titleContent} = getNameTitle(x);\n return {\n text: titleContent,\n action() {\n if (!onSort) {\n return;\n }\n const {column, allowUnordered, withUndefined, allowedOrderTypes} = x;\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort(column, nextOrder, {\n currentOrder: order,\n });\n },\n };\n })}\n renderSwitcher={({onClick}) => (\n <Button onClick={onClick} view=\"flat\" size=\"xs\">\n <Icon size={12} data={barsDescendingSvg} />\n </Button>\n )}\n />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport sortedIndexBy_ from 'lodash/sortedIndexBy';\nimport sortedLastIndexBy_ from 'lodash/sortedLastIndexBy';\n\nimport {getAllUserNamesSorted} from '../store/selectors/global';\nimport {\n loadAccountsIfNotLoaded,\n loadBundlesIfNotLoaded,\n loadGroupsIfNotLoaded,\n loadUsersIfNotLoaded,\n} from '../store/actions/global';\n\nexport function useAllUserNamesFiltered() {\n const dispatch = useDispatch();\n React.useEffect(() => {\n dispatch(loadUsersIfNotLoaded());\n }, []);\n\n const namesSorted = useSelector(getAllUserNamesSorted);\n\n const getFiltered = React.useCallback(\n (text: string) => {\n const from = sortedIndexBy_(namesSorted, text, (item) => item.substr(0, text.length));\n const to = sortedLastIndexBy_(namesSorted, text, (item) => item.substr(0, text.length));\n const res = namesSorted.slice(from, to);\n return res;\n },\n [namesSorted],\n );\n\n return {getFiltered, allNames: namesSorted};\n}\n\nexport function useGroupsLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadGroupsIfNotLoaded());\n }, []);\n}\n\nexport function GroupsLoader({children}: {children?: React.ReactElement}) {\n useGroupsLoaded();\n return children ?? null;\n}\n\nexport function useAccountsLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadAccountsIfNotLoaded());\n }, []);\n}\n\nexport function AccountsLoader() {\n useAccountsLoaded();\n return null;\n}\n\nexport function useBundlesLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadBundlesIfNotLoaded());\n }, []);\n}\n\nexport function BundlesLoader() {\n useBundlesLoaded();\n return null;\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:chart-link', {en, ru});\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\nimport i18n from './i18n';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link\n className={className}\n target=\"_blank\"\n theme={theme}\n url={url}\n title={title ?? i18n('View')}\n >\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new Toaster();\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded?: boolean;\n error?: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <YTErrorBlock error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\n\nimport isEqual_ from 'lodash/isEqual';\nimport throttle_ from 'lodash/throttle';\n\nimport SimpleModal from '../../components/Modal/SimpleModal';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './CommaSeparateListWithRestCounter.scss';\n\nconst block = cn('comma-separated-list-with-rest-counter');\n\nfunction counterText(length) {\n return ` +${length}`; // one space more than required\n}\n\nconst MAX_TOOLTIP_COUNT = 20;\n\n/**\n * The rendered result depends on:\n * - offsetWidth\n * - offsetHeight\n * - lineHeight (from getComputedStyle(...))\n * - font (from getComputedStyle(...))\n * properties of main-block of the component,\n * but the component does not try to detect any changes of these properties.\n * So you must force re-rendering of the component from outside\n * for each changing of these properties. Or the properties should be constant.\n */\nexport default class CommaSeparatedListWithRestCounter extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.string),\n maxTooltipCount: PropTypes.number, // maximum items in tooltip should be <= MAX_TOOLTIP_COUNT\n\n itemRenderer: PropTypes.func,\n };\n\n static defaultProps = {\n maxTooltipCount: MAX_TOOLTIP_COUNT,\n };\n\n ref;\n unmounted = false;\n\n state = {\n restCounter: 0,\n rows: [],\n showDialog: false,\n };\n\n onRef = (ref) => {\n this.ref = ref;\n this.updateState();\n };\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n componentDidUpdate() {\n this.updateState();\n }\n\n updateStateImpl = () => {\n if (this.unmounted) {\n this.unmounted = true;\n }\n\n const {items} = this.props;\n if (!this.ref || !items || !items.length) {\n return this.setStateIfChanged({rows: [], restCounter: 0});\n }\n\n const {offsetWidth, offsetHeight} = this.ref;\n const {fontWeight, lineHeight, fontSize, fontFamily} = getComputedStyle(this.ref);\n const font = `${fontWeight} ${fontSize}/${lineHeight} ${fontFamily}`;\n\n if (!offsetWidth || !offsetHeight) {\n return this.setStateIfChanged({rows: [], restCounter: 0});\n }\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n ctx.font = font;\n const rows = [];\n let pos = 0;\n\n const lh = parseInt(lineHeight);\n\n let currentRow = [];\n let currentRowWidth = 0;\n while ((rows.length + 1) * lh <= offsetHeight && pos < items.length) {\n const isLastItem = pos === items.length - 1;\n\n const text = items[pos++];\n const {width} = ctx.measureText(text + ', ');\n currentRowWidth += width;\n\n const isLastRow = offsetHeight - (rows.length + 1) * lh < lh;\n const counterWidth =\n isLastRow && !isLastItem\n ? ctx.measureText(counterText(items.length - pos)).width\n : 0;\n const maxWidth = offsetWidth - counterWidth;\n\n if (currentRowWidth <= maxWidth) {\n currentRow.push(text);\n if (isLastItem) {\n rows.push(currentRow);\n }\n } else {\n rows.push(currentRow);\n\n if (isLastRow) {\n --pos;\n } else {\n currentRow = [text];\n currentRowWidth = width;\n if (isLastItem) {\n rows.push(currentRow);\n }\n }\n }\n }\n\n const stateToCompare = {\n offsetWidth,\n offsetHeight,\n font,\n lineHeight,\n items,\n rows,\n restCounter: items.length - pos,\n };\n this.setStateIfChanged(stateToCompare);\n };\n\n updateState = throttle_(this.updateStateImpl, 30);\n\n setStateIfChanged(toCompare) {\n const changed = Object.keys(toCompare).some((key) => {\n return !isEqual_(this.state[key], toCompare[key]);\n });\n\n if (changed) {\n this.setState({...toCompare});\n }\n return changed;\n }\n\n renderRows() {\n const {rows} = this.state;\n return rows.map((row, index) => {\n return (\n <div key={index} className={block('row')}>\n {this.renderRow(row, index === rows.length - 1)}\n </div>\n );\n });\n }\n\n renderRow(items, isLastRow) {\n return (\n <React.Fragment>\n <div className={block('row-items')}>{this.renderItems(items, isLastRow)}</div>\n {isLastRow && this.renderCounter()}\n </React.Fragment>\n );\n }\n\n renderItems(items, isLastRow) {\n return items.map((item, index) => {\n const isLastItem = index === items.length - 1;\n const comma = !isLastRow || !isLastItem || this.state.restCounter ? ', ' : '';\n return (\n <span key={index} className={block('row-item')}>\n {this.renderItem(item)}\n {comma}\n </span>\n );\n });\n }\n\n renderItem = (item) => {\n const {itemRenderer} = this.props;\n return itemRenderer ? itemRenderer(item) : item;\n };\n\n renderCounter() {\n const {restCounter} = this.state;\n if (!restCounter) {\n return null;\n }\n\n const clickable = !this.allowItemsInTooltip();\n const toolTip = !clickable ? this.renderTooltip() : 'Click to show all items';\n\n const {showDialog} = this.state;\n const key = showDialog; // the key is required to hide tooltip behind the dialog with all items\n\n return (\n <Tooltip key={key} className={block('hover-tooltip')} content={toolTip}>\n <div className={block('row-counter', {clickable})} onClick={this.onCounterClick}>\n +{restCounter}\n </div>\n <SimpleModal title={'All items'} visible={showDialog} onCancel={this.closeDialog}>\n {showDialog && this.renderTooltip()}\n </SimpleModal>\n </Tooltip>\n );\n }\n\n closeDialog = () => {\n this.setState({showDialog: false});\n };\n\n onCounterClick = () => {\n if (this.allowItemsInTooltip()) {\n return;\n }\n\n this.setState({showDialog: true});\n };\n\n renderTooltip() {\n const {items} = this.state;\n return (\n <div className={block('tooltip', 'yc-root')}>\n {items.map((item) => {\n return <div key={item}>{this.renderItem(item)}</div>;\n })}\n </div>\n );\n }\n\n allowItemsInTooltip() {\n const {maxTooltipCount} = this.props;\n const {items} = this.state;\n return items.length <= Math.min(MAX_TOOLTIP_COUNT, maxTooltipCount);\n }\n\n render() {\n const {className} = this.props;\n return (\n <div ref={this.onRef} className={block(null, className)}>\n {this.renderRows()}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n"],"names":["addI18Keysets","en","ru","connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","i18n","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","props","xmlns","fill","viewBox","children","fillRule","d","clipRule","sha256","_x","_sha","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","str","buf","wrap","_context","prev","next","crypto","subtle","digest","TextEncoder","encode","sent","abrupt","_toConsumableArray","Uint8Array","map","x","toString","slice","join","stop","isCryptoSubtleAvailable","_crypto","Boolean","block","cn","GroupSuggest","items","width","multiple","onChange","placeholder","className","showTags","value","_props$disablePortal","disablePortal","ycItems","map_","item","text","empty","length","listValue","React","concat_","onListChange","newList","res","filter_","removed","_ref2","_jsxs","Select","onUpdate","filterable","EditableList","isEmpty","getDefaultValue","state","ownProps","idmOnly","getAllIdmGroupNamesSorted","getAllGroupNamesSorted","getExternalSystem","ldap","idm","hasIdm","isIdmAclAvailable","USER_ATTRIBUTES","prepareUserData","_item$$attributes","$attributes","groups","member_of","allGroups","member_of_closure","upravlyator_managed","sort","flags","get","externalSystem","difference_","fetchUsers","dispatch","type","USERS_TABLE","REQUEST","listAllUsers","YTApiId","usersData","then","data","users","forEach_","push","SUCCESS","error","FAILURE","showUserEditorModal","username","USERS_EDIT_USER","concat","ytApiV3Id","usersEditData","USERS_EDIT_USER_DATA_FIELDS","showModal","removeUserFromGroups","cluster","Promise","all","groupname","UIFactory","getAclApi","removeUserFromGroup","addUserToGroups","comment","addUserToGroup","changeUserPassword","password","new_password_sha256","ytApiV4Id","setUserPassword","parameters","user","resolve","getUsersNameFilter","table","nameFilter","getUsersGroupFilter","groupFilter","getUsersBannedFilter","bannedFilter","getUsersFiltered","createSelector","predicates","name","indexOf","memberOf","transitiveGroups","sortedIndexOf_","_ref3","banned","filter","concatByAnd","getUsersFilteredAndSorted","sortState","sortArrayBySortState","getUsersPageEditableUser","editUser","ShowCreateUserModalButton","useDispatch","useCallback","useSelector","getUserManagementEnabled","Button","view","UsersPageFilters","_React$Component","_this","_classCallCheck","_len","args","Array","_key","_callSuper","toggleBannedFilter","_this$props","setUsersBannedFilter","_inherits","_createClass","key","_this2","_this$props2","this","Toolbar","itemsToWrap","node","Filter","hasClear","size","setUsersNameFilter","shrinkable","growable","wrapperClassName","GroupsLoader","undefined","vals","setUsersGroupFilter","Checkbox","checked","mapDispatchToProps","USERS_TABLE_DATA_FIELDS","createUser","yt","create","UsersPageEditor","onAdd","form","_form$getState","_form$getState$values","generalTab","groupsTab","banTab","passwordTab","fields","newGroups","newPassword","_groups","current","groupsToRemove","changedFields","newName","getState","values","general","ban","read_request_rate_limit","request_queue_size_limit","write_request_rate_limit","_slicedToArray","reduce_","acc","fieldName","isEqual_","isNewUser","t0","setState","reject","saveUserData","groupsToAdd","disableUsersCache","onClose","closeUserEditorModal","banMessage","ban_message","rrrl","rqsl","wrrl","groupAttributesMap","isUserManagementEnabled","errors","makeErrorFields","YTDFDialog","headerProps","initialValues","String","prepareCurrent","passwordConfirm","visible","caption","required","extras","min","hidePrettyValue","disabled","maxVisibleValues","titleClassName","validate","passwordErrors","groupAttributes","group","frozen","prepareGroups","requests","restAttrs","command","input","getCluster","executeBatch","usersSaveData","_ref4","_ref5","batchRes","batchError","getBatchError","_error$response","response","_getUsersPageEditable","attrs","getGlobalGroupAttributesMap","DeleteUserModal","_React$useState","_React$useState2","setError","usernameToDelete","deleteUser","deleteUserModalSlice","actions","setModalState","remove","pristineSubmittable","Text","b","UserActions","deleteUserButton","onEditClick","onDeleteClick","Icon","awesome","ChartLink","url","makeUrlForUserDashboard","Link","routed","userOperationsLink","ClickableAttributesButton","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","COLUMN_NAMES","SHOR_COLUMN_NAMES","UsersPageTable","renderColumnHeader","col","sortable","_this$props$sort","column","order","isSorted","ColumnHeader","shortTitle","onSort","onColumnSort","withUndefined","colName","nextOrder","setUsersPageSorting","renderNumberCell","row","renderExternalSystemCell","renderActionsCell","SubjectCard","internal","Tooltip","CommaSeparatedListWithRestCounter","loaded","loading","columnProps","disableSorting","align","LEFT","toLowerCase","header","DISABLED_SORTING","columns","render","renderNameCell","bind","renderBannedCell","CENTER","renderGroupsCell","DataTableYT","settings","theme","LoadDataHandler","errorData","renderTable","_getUsersTableDataSta","getUsersTableDataState","UsersPage","WithStickyToolbar","hideToolbarShadow","toolbar","PageCounter","pageIndex","pageCount","getNameTitle","t","capitalize_","nameContent","titleContent","multisortIndex","_useColumnInfo","options","allowUnordered","allowedOrderTypes","columnData","find","rumLogError","message","additional","subColumn","useColumnInfo","changeHandler","e","calculateNextOrderValue","nextSortOrderValue","currentOrder","multisort","ctrlKey","metaKey","SortIcon","variant","color","SubColumnSelector","Loader","DropdownMenu","action","renderSwitcher","barsDescendingSvg","ICON_BY_TYPE","_defineProperty","label","hidden","icon","format","ReadableField","face","useAllUserNamesFiltered","loadUsersIfNotLoaded","namesSorted","getAllUserNamesSorted","getFiltered","from","sortedIndexBy_","substr","to","sortedLastIndexBy_","allNames","useGroupsLoaded","loadGroupsIfNotLoaded","hideIcon","wrapContent","target","toaster","Toaster","_Component","add","autoHiding","hammer","NO_VALUE","showErrorPopup","_this$props2$alwaysSh","alwaysShowError","YTErrorBlock","Component","ref","unmounted","restCounter","rows","showDialog","onRef","updateState","updateStateImpl","setStateIfChanged","_this$ref","offsetWidth","offsetHeight","_getComputedStyle","getComputedStyle","fontWeight","lineHeight","fontSize","fontFamily","font","ctx","document","createElement","getContext","pos","lh","parseInt","currentRow","currentRowWidth","isLastItem","measureText","isLastRow","stateToCompare","throttle_","renderItem","itemRenderer","closeDialog","onCounterClick","allowItemsInTooltip","toCompare","changed","Object","keys","some","_this3","index","renderRow","renderItems","renderCounter","_this4","comma","clickable","toolTip","renderTooltip","SimpleModal","onCancel","_this5","maxTooltipCount","Math","renderRows","defaultProps","_ref$view","_ref$size"],"sourceRoot":""}
|