1import{a as ae}from"./chunk-CR2CBZLG.js";import{a as re}from"./chunk-ZK7D3HSO.js";import{a as oe}from"./chunk-MCDHQ4UD.js";import{a as ie}from"./chunk-JTOYIJNF.js";import{K as ne,a as ee,z as te}from"./chunk-UMLHM5TN.js";import{A as Q,O as X,a as Z,o as Y}from"./chunk-E2PME6ZT.js";import{Aa as N,Bb as L,C as P,Ca as o,Cb as q,Da as m,E as C,Ea as k,Eb as U,F as x,Fa as w,Fb as H,J as p,Kb as W,Nb as K,Pb as $,Qa as D,T as l,Y as F,ba as v,ca as u,da as g,fa as y,ga as S,gb as z,ha as E,hc as j,ia as b,ja as t,ka as e,la as _,nb as V,pa as M,qa as f,qc as J,ra as d,ub as I,vb as G,xb as h,yb as R,zb as B}from"./chunk-QKMQSLGT.js";import"./chunk-AINIKOIO.js";import"./chunk-RFOV4IGE.js";import"./chunk-HP7N32MK.js";import"./chunk-AUAON7IA.js";import"./chunk-ZHI5XNW2.js";import"./chunk-YUNOCBLG.js";import"./chunk-YJ5TA4PT.js";import"./chunk-2NIBOUWM.js";import"./chunk-I547WOKC.js";import"./chunk-OIVL4MKS.js";import"./chunk-CYPTFLPY.js";import"./chunk-NMFL75IO.js";import{e as A}from"./chunk-JHI3MBHO.js";var le=(i,s)=>s.key,se=(i,s)=>s.id;function ce(i,s){if(i&1&&(t(0,"div",4),o(1),e()),i&2){let r=d();l(),m(r.errorMessage())}}function de(i,s){if(i&1&&(t(0,"div",5),o(1),e()),i&2){let r=d();l(),m(r.successMessage())}}function me(i,s){i&1&&(t(0,"section",6)(1,"article",7),_(2,"div",8)(3,"div",9)(4,"div",10),e(),t(5,"article",7),_(6,"div",8)(7,"div",11)(8,"div",12),e()())}function ue(i,s){i&1&&(t(0,"small",25),o(1,"Bitte einen Wert angeben."),e())}function ge(i,s){i&1&&(t(0,"small",25),o(1,"Nur Werte ab 0 sind erlaubt."),e())}function pe(i,s){i&1&&(t(0,"small",26),o(1,"Dieser Wert steuert das globale monatliche Coin-Budget."),e())}function _e(i,s){i&1&&(t(0,"small",25),o(1,"Bitte einen Wert angeben."),e())}function he(i,s){i&1&&(t(0,"small",25),o(1,"Nur Werte ab 0 sind erlaubt."),e())}function Ce(i,s){if(i&1&&(t(0,"small",26),o(1),e()),i&2){let r=d().$implicit;l(),m(r.hint)}}function xe(i,s){if(i&1&&(t(0,"label",27)(1,"span"),o(2),e(),_(3,"input",57),u(4,_e,2,0,"small",25)(5,he,2,0,"small",25)(6,Ce,2,1,"small",26),e()),i&2){let r=s.$implicit,n=d(2);l(2),m(r.label),l(),b("formControlName",r.key),l(),g(n.rewardControlHasError(r.key,"required")?4:n.rewardControlHasError(r.key,"min")?5:6)}}function fe(i,s){if(i&1&&(t(0,"article")(1,"span"),o(2),e(),t(3,"strong"),o(4),e()()),i&2){let r=s.$implicit,n=d(),a=d();l(2),m(r.label),l(2),m(a.rewardDisplay(n.rewards[r.key]))}}function be(i,s){if(i&1&&(t(0,"span",38),o(1),e()),i&2){let r=s.$implicit,n=d(2);l(),m(n.userTypeLabels[r])}}function ve(i,s){if(i&1&&(t(0,"span",40),o(1),e()),i&2){let r=s.$implicit,n=d(2);l(),m(n.userTypeLabels[r])}}function Se(i,s){i&1&&(t(0,"p",45),o(1,"Manuelle Gutschriften sind deaktiviert, solange der Feature-Schalter ausgeschaltet ist."),e())}function Ee(i,s){if(i&1&&(t(0,"div",4),o(1),e()),i&2){let r=d(2);l(),m(r.creditSearchErrorMessage())}}function Me(i,s){i&1&&(t(0,"p",45),o(1,"Mindestens zwei Zeichen eingeben, um einen Benutzer auszuw\xE4hlen."),e())}function Pe(i,s){i&1&&(t(0,"p",45),o(1,"Benutzer werden gesucht..."),e())}function ye(i,s){if(i&1){let r=M();t(0,"button",59),f("click",function(){let a=C(r).$implicit,c=d(3);return x(c.selectCreditUser(a))}),t(1,"div")(2,"strong"),o(3),e(),t(4,"span"),o(5),e()(),t(6,"span",38),o(7),e()()}if(i&2){let r,n=s.$implicit,a=d(3);N("is-selected",((r=a.selectedCreditUser())==null?null:r.id)===n.id),b("disabled",!a.coinFeatureEnabled()),l(3),w("",n.firstName," ",n.lastName),l(2),m(n.email),l(2),m(a.userTypeLabels[n.userType])}}function ke(i,s){if(i&1&&(t(0,"div",46),S(1,ye,8,7,"button",58,se),e()),i&2){let r=d(2);l(),E(r.creditSearchResults())}}function we(i,s){i&1&&(t(0,"p",45),o(1,"Keine passenden Benutzer gefunden."),e())}function Oe(i,s){if(i&1){let r=M();t(0,"div",60)(1,"div")(2,"strong"),o(3),e(),t(4,"span"),o(5),e()(),t(6,"button",61),f("click",function(){C(r);let a=d(2);return x(a.openSelectedCreditUser())}),o(7," Nutzerdetails \xF6ffnen "),e()(),_(8,"app-admin-coin-credit-panel",62)}if(i&2){let r=s,n=d(2);l(3),w("",r.firstName," ",r.lastName),l(2),m(r.email),l(3),b("userId",r.id)("userDisplayName",r.firstName+" "+r.lastName)("disabled",!n.coinFeatureEnabled())}}
1function Te(i,s){if(i&1&&(t(0,"div",4),o(1),e()),i&2){let r=d(2);l(),m(r.voucherErrorMessage())}}function Ae(i,s){if(i&1&&(t(0,"div",5),o(1),e()),i&2){let r=d(2);l(),m(r.voucherSuccessMessage())}}function Fe(i,s){i&1&&(t(0,"p",45),o(1,"Gutscheine k\xF6nnen erst erstellt werden, nachdem das Coin-Feature aktiviert und gespeichert wurde."),e())}function Ne(i,s){i&1&&(t(0,"small",25),o(1,"Bitte eine Anzahl eingeben."),e())}function De(i,s){i&1&&(t(0,"small",25),o(1,"Nur Werte ab 1 sind erlaubt."),e())}function ze(i,s){i&1&&(t(0,"small",25),o(1,"Die Bezeichnung darf h\xF6chstens 120 Zeichen lang sein."),e())}function Ve(i,s){i&1&&(t(0,"small",26),o(1,"Optional, zum Beispiel f\xFCr Kampagnen oder interne Notizen."),e())}function Ie(i,s){i&1&&(t(0,"small",25),o(1,"Die Nachricht darf h\xF6chstens 280 Zeichen lang sein."),e())}function Ge(i,s){i&1&&(t(0,"small",26),o(1,"Optional. Wird beim Einl\xF6sen mit dem Gutschein verkn\xFCpft."),e())}function Re(i,s){if(i&1&&(t(0,"div",5),o(1),e()),i&2){let r=d(3);l(),m(r.voucherCodeCopyFeedback())}}function Be(i,s){if(i&1&&(t(0,"p",66),o(1),e()),i&2){let r=d();l(),m(r.message)}}function Le(i,s){if(i&1&&(t(0,"div",65)(1,"article")(2,"span"),o(3,"Coins"),e(),t(4,"strong"),o(5),e()(),t(6,"article")(7,"span"),o(8,"Bezeichnung"),e(),t(9,"strong"),o(10),e()(),t(11,"article")(12,"span"),o(13,"Ablaufdatum"),e(),t(14,"strong"),o(15),e()(),t(16,"article")(17,"span"),o(18,"Erstellt am"),e(),t(19,"strong"),o(20),e()()(),u(21,Be,2,1,"p",66)),i&2){let r=s,n=d(3);l(5),m(r.amount),l(5),m(r.label||"Keine"),l(5),m(r.expiresAt?n.formatDateTime(r.expiresAt):"Keins"),l(5),m(r.entryCreated?n.formatDateTime(r.entryCreated):"Gerade eben"),l(),g(r.message?21:-1)}}
1function qe(i,s){if(i&1){let r=M();t(0,"section",56)(1,"div",63)(2,"span"),o(3,"Gutschein-Code"),e(),t(4,"strong"),o(5),e()(),t(6,"div",64)(7,"button",61),f("click",function(){C(r);let a=d(2);return x(a.copyVoucherCode())}),o(8," Code kopieren "),e()(),t(9,"p",45),o(10," Diesen Code k\xF6nnen Sie an eingeloggte Nutzer weitergeben. Er kann sp\xE4ter im Nutzerbereich eingel\xF6st werden. "),e(),u(11,Re,2,1,"div",5),u(12,Le,22,5),e()}if(i&2){let r,n=d(2);l(5),m(s),l(6),g(n.voucherCodeCopyFeedback()?11:-1),l(),g((r=n.createdVoucher())?12:-1,r)}}function Ue(i,s){if(i&1){let r=M();t(0,"section",13)(1,"article",14)(2,"div",15)(3,"div")(4,"span",3),o(5,"Globaler Standard"),e(),t(6,"h2"),o(7,"Monatspool verwalten"),e()()(),t(8,"form",16),f("ngSubmit",function(){C(r);let a=d();return x(a.submit())}),t(9,"label",17),_(10,"input",18),t(11,"span")(12,"strong"),o(13,"Winkekatzen-Coins aktivieren"),e(),t(14,"small"),o(15,"Bei deaktiviertem Feature bleiben Einstellungen sichtbar, aber Nutzeroberfl\xE4chen und Coin-Aktionen sind gesperrt."),e()()(),t(16,"div",19)(17,"label",20)(18,"span",21)(19,"span"),o(20,"Globaler Monatspool"),e(),t(21,"button",22),f("click",function(){C(r);let a=d();return x(a.toggleInfo("monthlyPool"))}),_(22,"ion-icon",23),e()(),_(23,"input",24),u(24,ue,2,0,"small",25)(25,ge,2,0,"small",25)(26,pe,2,0,"small",26),e(),S(27,xe,7,3,"label",27,le),e(),t(29,"button",28),o(30),e()()(),t(31,"article",29)(32,"div",15)(33,"div")(34,"span",3),o(35,"Referenzwerte"),e(),t(36,"h2"),o(37,"Aktive Regeln aus der API"),e()()(),t(38,"div",30)(39,"article")(40,"span"),o(41,"Feature-Status"),e(),t(42,"strong"),o(43),e()(),t(44,"article")(45,"span",21)(46,"span"),o(47,"Geltungsbereich"),e(),t(48,"button",31),f("click",function(){C(r);let a=d();return x(a.toggleInfo("scope"))}),_(49,"ion-icon",23),e()(),t(50,"strong"),o(51),e()(),t(52,"article")(53,"span",21)(54,"span"),o(55,"Maximale Nachrichtenl\xE4nge"),e(),t(56,"button",32),f("click",function(){C(r);let a=d();return x(a.toggleInfo("messageLength"))}),_(57,"ion-icon",23),e()(),t(58,"strong"),o(59),e()()(),t(60,"section",33)(61,"div",34)(62,"strong"),o(63,"Reward-Standards"),e()(),t(64,"div",35),S(65,fe,5,2,"article",null,le),e()(),t(67,"section",33)(68,"div",34)(69,"strong"),o(70,"Rollen mit Coin-Budget"),e(),t(71,"button",36),f("click",function(){C(r);let a=d();return x(a.toggleInfo("budgetRoles"))}),_(72,"ion-icon",23),e()(),t(73,"div",37),S(74,be,2,1,"span",38,y),e()(),t(76,"section",33)(77,"div",34)(78,"strong"),o(79,"Rollen, die Coins empfangen d\xFCrfen"),e(),t(80,"button",39),f("click",function(){C(r);let a=d();return x(a.toggleInfo("recipientRoles"))}),_(81,"ion-icon",23),e()(),t(82,"div",37),S(83,ve,2,1,"span",40,y),e()()()(),t(85,"section",41)(86,"article",42)(87,"div",15)(88,"div")(89,"span",3),o(90,"Direkte Gutschrift"),e(),t(91,"h2"),o(92,"Coins direkt gutschreiben"),e(),t(93,"p"),o(94,"W\xE4hlen Sie einen globalen Benutzer aus und buchen Sie Coins direkt auf dessen Wallet."),e()()(),t(95,"label",43)(96,"span"),o(97,"Benutzer suchen"),e(),t(98,"input",44),f("input",function(a){C(r);let c=d();return x(c.updateCreditUserSearch(a))}),e()(),u(99,Se,2,0,"p",45),u(100,Ee,2,1,"div",4),u(101,Me,2,0,"p",45)(102,Pe,2,0,"p",45)(103,ke,3,0,"div",46)(104,we,2,0,"p",45),u(105,Oe,9,6),e(),t(106,"article",47)(107,"div",15)(108,"div")(109,"span",3),o(110,"Coin-Gutschein"),e(),t(111,"h2"),o(112,"Coin-Gutschein erstellen"),e(),t(113,"p"),o(114,"Erstellen Sie einen Gutschein-Code, der sp\xE4ter von eingeloggten Nutzern eingel\xF6st werden kann."),e()()(),u(115,Te,2,1,"div",4),u(116,Ae,2,1,"div",5),u(117,Fe,2,0,"p",45),t(118,"form",48),f("ngSubmit",function(){C(r);let a=d();return x(a.submitVoucher())}),t(119,"div",49)(120,"label",27)(121,"span"),o(122,"Anzahl Coins"),e(),_(123,"input",50),u(124,Ne,2,0,"small",25)(125,De,2,0,"small",25),e(),t(126,"label",27)(127,"span"),o(128,"Bezeichnung"),e(),_(129,"input",51),u(130,ze,2,0,"small",25)(131,Ve,2,0,"small",26),e(),t(132,"label",52)(133,"span"),o(134,"Nachricht"),e(),_(135,"textarea",53),u(136,Ie,2,0,"small",25)(137,Ge,2,0,"small",26),e(),t(138,"label",27)(139,"span"),o(140,"Ablaufdatum"),e(),_(141,"input",54),t(142,"small",26),o(143,"Optional. Leer bedeutet ohne Ablauf."),e()()(),t(144,"button",55),o(145),e()(),u(146,qe,13,3,"section",56),e()()}if(i&2){let r,n,a=s,c=d();l(8),b("formGroup",c.form),l(16),g(c.controlHasError("required")?24:c.controlHasError("min")?25:26),l(3),E(c.rewardFields),l(2),b("disabled",c.saving()),l(),k(" ",c.saving()?"Speichert...":"Globale Einstellungen speichern"," "),l(13),m(a.featureEnabled?"Aktiv":"Deaktiviert"),l(8),m(c.scopeLabel(a.scope)),l(8),m(a.messageMaxLength),l(6),E(c.rewardFields),l(9),E(a.budgetEligibleUserTypes),l(9),E(a.recipientEligibleUserTypes),l(15),b("disabled",!c.coinFeatureEnabled())("value",c.creditSearchTerm()),l(),g(c.coinFeatureEnabled()?-1:99),l(
1),g(c.creditSearchErrorMessage()?100:-1),l(),g(c.creditSearchTerm().trim().length<2?101:c.creditSearchLoading()?102:c.creditSearchResults().length>0?103:104),l(4),g((r=c.selectedCreditUser())?105:-1,r),l(10),g(c.voucherErrorMessage()?115:-1),l(),g(c.voucherSuccessMessage()?116:-1),l(),g(c.coinFeatureEnabled()?-1:117),l(),b("formGroup",c.voucherForm),l(5),v("disabled",c.coinFeatureEnabled()?null:""),l(),g(c.voucherControlHasError("amount","required")?124:c.voucherControlHasError("amount","min")?125:-1),l(5),v("disabled",c.coinFeatureEnabled()?null:""),l(),g(c.voucherControlHasError("label","maxlength")?130:131),l(5),v("disabled",c.coinFeatureEnabled()?null:""),l(),g(c.voucherControlHasError("message","maxlength")?136:137),l(5),v("disabled",c.coinFeatureEnabled()?null:""),l(3),b("disabled",c.voucherSaving()||!c.coinFeatureEnabled()),l(),k(" ",c.voucherSaving()?"Gutschein wird erstellt...":"Gutschein erstellen"," "),l(),g((n=c.createdVoucherCode())?146:-1,n)}}function He(i,s){if(i&1){let r=M();t(0,"div",67),f("click",function(){C(r);let a=d();return x(a.closeInfo())}),e(),t(1,"section",68)(2,"article",69)(3,"div",70)(4,"div")(5,"span",3),o(6,"Coin-Erkl\xE4rung"),e(),t(7,"h2",71),o(8),e()(),t(9,"button",72),f("click",function(){C(r);let a=d();return x(a.closeInfo())}),_(10,"ion-icon",73),e()(),t(11,"p"),o(12),e()()()}if(i&2){let r=s,n=d();l(),v("aria-labelledby","admin-coins-modal-title"),l(7),m(n.infoContent[r].title),l(4),m(n.infoContent[r].description)}}var lt=(()=>{let s=class s{constructor(){this.fb=P(K),this.router=P(V),this.adminUserCache=P(re),this.portalApi=P(X),this.userSearchRequestSequence=0,this.userSearchDebounceHandle=null,this.loading=p(!0),this.saving=p(!1),this.errorMessage=p(null),this.successMessage=p(null),this.settings=p(null),this.coinFeatureEnabled=D(()=>this.settings()?.featureEnabled??!1),this.userTypeLabels=Z,this.activeInfo=p(null),this.creditSearchTerm=p(""),this.creditSearchLoading=p(!1),this.creditSearchErrorMessage=p(null),this.creditSearchResults=p([]),this.selectedCreditUser=p(null),this.voucherSaving=p(!1),this.voucherErrorMessage=p(null),this.voucherSuccessMessage=p(null),this.voucherCodeCopyFeedback=p(null),this.createdVoucherCode=p(null),this.createdVoucher=p(null),this.formatDateTime=Y,this.rewardFields=[{key:"firstCourseEnrollmentCoins",label:"Erster Kursbeitritt",hint:"0 = deaktiviert. Legt die Coin-Gutschrift beim ersten Kursbeitritt fest."},{key:"firstDocumentDownloadCoins",label:"Erster Dateidownload",hint:"0 = deaktiviert. Gilt nur f\xFCr den ersten erfolgreichen Download."},{key:"newsletterSubscriptionCoins",label:"Newsletter-Anmeldung",hint:"0 = deaktiviert. Wird bei erfolgreicher Newsletter-Anmeldung vergeben."},{key:"telegramJoinClickCoins",label:"Telegram-Beitritt",hint:"0 = deaktiviert. Gilt f\xFCr den neuen Join-Click-Flow."}],this.infoContent={monthlyPool:{title:"Globaler Monatspool",description:"Dieser Wert bestimmt, wie viele Coins pro Monat standardm\xE4\xDFig f\xFCr berechtigte Nutzer zur Verf\xFCgung stehen. Kundenspezifische Abweichungen k\xF6nnen diesen Wert pro Kunde \xFCberschreiben."},scope:{title:"Geltungsbereich",description:"Dieser Wert zeigt, auf welcher Ebene die gezeigten Coin-Regeln gelten. Auf dieser Seite verwalten Sie die systemweiten Standardwerte."},messageLength:{title:"Maximale Nachrichtenl\xE4nge",description:"Dieser Wert legt fest, wie lang eine Nachricht beim Verschenken von Coins h\xF6chstens sein darf."},budgetRoles:{title:"Rollen mit Coin-Budget",description:"Diese Rollen erhalten ein monatliches Coin-Budget und d\xFCrfen Coins verschenken."},recipientRoles:{title:"Rollen, die Coins empfangen d\xFCrfen",description:"Diese Rollen d\xFCrfen Coins \xFCber Share-Links oder andere vorgesehene Wege erhalten."}},this.form=this.fb.group({featureEnabled:[!1],monthlyPoolSize:[0,[h.required,h.min(0)]],firstCourseEnrollmentCoins:[0,[h.required,h.min(0)]],firstDocumentDownloadCoins:[0,[h.required,h.min(0)]],newsletterSubscriptionCoins:[0,[h.required,h.min(0)]],telegramJoinClickCoins:[0,[h.required,h.min(0)]]}),this.voucherForm=this.fb.group({amount:[1,[h.required,h.min(1)]],label:["",[h.maxLength(120)]],message:["",[h.maxLength(280)]],expiresAt:[""]}),ee({closeOutline:te,helpCircleOutline:ne}),this.loadSettings()}ngOnDestroy(){this.userSearchDebounceHandle!==null&&clearTimeout(this.userSearchDebounceHandle)}
1submit(){if(this.form.invalid){this.form.markAllAsTouched();return}let n=this.form.getRawValue();this.saving.set(!0),this.errorMessage.set(null),this.successMessage.set(null),this.portalApi.adminUpdateSystemCoinSettings({featureEnabled:!!n.featureEnabled,monthlyPoolSize:Number(n.monthlyPoolSize??0),firstCourseEnrollmentCoins:Number(n.firstCourseEnrollmentCoins??0),firstDocumentDownloadCoins:Number(n.firstDocumentDownloadCoins??0),newsletterSubscriptionCoins:Number(n.newsletterSubscriptionCoins??0),telegramJoinClickCoins:Number(n.telegramJoinClickCoins??0)}).subscribe({next:a=>{this.settings.set(a),this.applySettingsToForm(a),this.saving.set(!1),this.successMessage.set("Globale Coin-Einstellungen wurden aktualisiert.")},error:a=>{this.saving.set(!1),this.errorMessage.set(a?.error?.error?.message??"Globale Coin-Einstellungen konnten nicht gespeichert werden.")}})}controlHasError(n){let a=this.form.controls.monthlyPoolSize;return a.touched&&a.hasError(n)}rewardControlHasError(n,a){let c=this.form.controls[n];return c.touched&&c.hasError(a)}toggleInfo(n){this.activeInfo.update(a=>a===n?null:n)}closeInfo(){this.activeInfo.set(null)}scopeLabel(n){return n==="system"?"Systemweit":n}rewardDisplay(n){return Q(n,"Nicht verf\xFCgbar")}updateCreditUserSearch(n){let a=n.target;if(!this.coinFeatureEnabled()){this.creditSearchTerm.set(""),this.creditSearchResults.set([]),this.creditSearchLoading.set(!1),this.userSearchRequestSequence+=1,a.value="";return}if(this.creditSearchTerm.set(a.value),this.creditSearchErrorMessage.set(null),this.userSearchDebounceHandle!==null&&clearTimeout(this.userSearchDebounceHandle),a.value.trim().length<2){this.creditSearchLoading.set(!1),this.creditSearchResults.set([]),this.userSearchRequestSequence+=1;return}this.userSearchDebounceHandle=setTimeout(()=>{this.userSearchDebounceHandle=null,this.searchCreditUsers()},280)}selectCreditUser(n){this.coinFeatureEnabled()&&this.selectedCreditUser.set(n)}openSelectedCreditUser(){let n=this.selectedCreditUser();n&&(this.adminUserCache.rememberUser(n),this.router.navigate(["/app/admin/nutzer",n.id],{state:{user:n}}))}voucherControlHasError(n,a){let c=this.voucherForm.controls[n];return c.touched&&c.hasError(a)}submitVoucher(){if(!this.coinFeatureEnabled()){this.voucherErrorMessage.set("Das Coin-Feature ist aktuell deaktiviert. Aktivieren und speichern Sie es zuerst, um Gutscheine zu erstellen.");return}
1if(this.voucherForm.invalid){this.voucherForm.markAllAsTouched();return}let n=this.voucherForm.getRawValue();this.voucherSaving.set(!0),this.voucherErrorMessage.set(null),this.voucherSuccessMessage.set(null),this.voucherCodeCopyFeedback.set(null),this.portalApi.adminCreateCoinVoucher({amount:Number(n.amount??0),label:n.label?.trim()||null,message:n.message?.trim()||null,expiresAt:this.fromDateTimeLocal(n.expiresAt)}).subscribe({next:a=>{this.createdVoucherCode.set(a.code),this.createdVoucher.set(a.voucher),this.voucherSaving.set(!1),this.voucherSuccessMessage.set("Coin-Gutschein wurde erstellt."),this.voucherForm.reset({amount:1,label:"",message:"",expiresAt:""})},error:a=>{this.voucherSaving.set(!1),this.voucherErrorMessage.set(a?.error?.error?.message??"Coin-Gutschein konnte nicht erstellt werden.")}})}copyVoucherCode(){return A(this,null,function*(){let n=this.createdVoucherCode();if(n){this.voucherCodeCopyFeedback.set(null);try{yield oe(n),this.voucherCodeCopyFeedback.set("Gutschein-Code wurde kopiert.")}catch{this.voucherCodeCopyFeedback.set("Gutschein-Code konnte nicht kopiert werden.")}}})}loadSettings(){this.loading.set(!0),this.errorMessage.set(null),this.portalApi.adminGetSystemCoinSettings().subscribe({next:n=>{this.settings.set(n),this.applySettingsToForm(n),this.loading.set(!1)},error:n=>{this.settings.set(null),this.loading.set(!1),this.errorMessage.set(n?.error?.error?.message??"Globale Coin-Einstellungen konnten nicht geladen werden.")}})}applySettingsToForm(n){this.form.patchValue({featureEnabled:n.featureEnabled,monthlyPoolSize:n.monthlyPoolSize,firstCourseEnrollmentCoins:n.rewards.firstCourseEnrollmentCoins,firstDocumentDownloadCoins:n.rewards.firstDocumentDownloadCoins,newsletterSubscriptionCoins:n.rewards.newsletterSubscriptionCoins,telegramJoinClickCoins:n.rewards.telegramJoinClickCoins})}searchCreditUsers(){let n=++this.userSearchRequestSequence,a=this.creditSearchTerm().trim();if(a.length<2){this.creditSearchLoading.set(!1),this.creditSearchResults.set([]);return}this.creditSearchLoading.set(!0),this.creditSearchErrorMessage.set(null),this.portalApi.listGlobalUsers({page:1,pageSize:8,q:a}).subscribe({next:c=>{n!==this.userSearchRequestSequence||a!==this.creditSearchTerm().trim()||(this.creditSearchResults.set(c.items),this.creditSearchLoading.set(!1))},error:c=>{n!==this.userSearchRequestSequence||a!==this.creditSearchTerm().trim()||(this.creditSearchResults.set([]),this.creditSearchLoading.set(!1),this.creditSearchErrorMessage.set(c?.error?.error?.message??"Benutzersuche konnte nicht geladen werden."))}})}fromDateTimeLocal(n){if(!n?.trim())return null;let a=new Date(n);return Number.isNaN(a.getTime())?null:a.toISOString()}};s.\u0275fac=function(a){return new(a||s)},s.\u0275cmp=F({type:s,selectors:[["app-admin-coins-page"]],decls:15,vars:5,consts:[[3,"fullscreen"],[1,"portal-page","portal-page--wide","admin-coins-page"],[1,"admin-coins-header","page-head"],[1,"eyebrow"],[1,"form-message","error"],[1,"form-message","success"],["aria-hidden","true",1,"portal-skeleton-stack"],[1,"screen-card","section-card","portal-skeleton-copy"],[1,"portal-skeleton-line","portal-skeleton-line--heading"],[1,"portal-skeleton-line","portal-skeleton-line--input"],[1,"portal-skeleton-line","portal-skeleton-line--button"],[1,"portal-skeleton-line","portal-skeleton-line--body"],[1,"portal-skeleton-line","portal-skeleton-line--body-short"],[1,"admin-coins-grid"],[1,"screen-card","section-card","admin-coins-form-card"],[1,"section-header"],[1,"portal-form",3,"ngSubmit","formGroup"],[1,"admin-coins-feature-toggle"],["type","checkbox","formControlName","featureEnabled"],[1,"admin-coins-settings-grid"],[1,"form-field","admin-coins-settings-grid__full"],[1,"admin-coins-label-row"],["type","button","aria-label","Erkl\xE4rung zu Globaler Monatspool anzeigen",1,"admin-coins-help",3,"click"],["name","help-circle-outline","aria-hidden","true"],["type","number","min","0","formControlName","monthlyPoolSize"],[1,"admin-coins-hint","admin-coins-hint--error"],[1,"admin-coins-hint"],[1,"form-field"],["type","submit",1,"portal-action-button","admin-coins-save",3,"disabled"],[1,"screen-card","section-card","admin-coins-info-card"],[1,"admin-coins-stat-list"],["type","button","aria-label","Erkl\xE4rung zu Geltungsbereich anzeigen",1,"admin-coins-help",3,"click"],["type","button","aria-label","Erkl\xE4rung zu Maximale Nachrichtenl\xE4nge anzeigen",1,"admin-coins-help",3,"click"],[1,"admin-coins-role-section"],[1,"admin-coins-role-section__heading"],[1,"admin-coins-reward-list"],["type","button","aria-label","Erkl\xE4rung zu Rollen mit Coin-Budget anzeigen",1,"admin-coins-help",3,"click"],[1,"admin-coins-role-list"],[1,"page-chip"],["type","button","aria-label","Erkl\xE4rung zu Rollen, die Coins empfangen d\xFCrfen anzeigen",1,"admin-coins-help",3,"click"],[1,"page-chip","page-chip--yellow"],[1,"admin-coins-extensions"],[1,"screen-card","section-card","admin-coins-credit-card"],[1,"form-field","admin-coins-search-field"],["type","search","placeholder","Nach Name, E-Mail oder Benutzername suchen",3,"input","disabled","value"],[1,"admin-coins-inline-hint"],[1,"admin-coins-user-results"],[1,"screen-card","section-card","admin-coins-voucher-card"],[1,"portal-form","admin-coins-voucher-form",3,"ngSubmit","formGroup"],[1,"admin-coins-voucher-form__grid"],["type","number","min","1","formControlName","amount"],["type","text","formControlName","label"],[1,"form-field","admin-coins-voucher-form__message"],["rows","4","formControlName","message"],["type","datetime-local","formControlName","expiresAt"],["type","submit",1,"portal-action-button",3,"disabled"],[1,"admin-coins-voucher-result"],["type","number","min","0",3,"formControlName"],["type","button",1,"admin-coins-user-result",3,"is-selected","disabled"],["type","button",1,"admin-coins-user-result",3,"click","disabled"],[1,"admin-coins-selected-user"],["type","button",1,"portal-action-button","portal-action-button--secondary",3,"click"],[3,"userId","userDisplayName","disabled"],[1,"admin-coins-voucher-result__code"],[1,"admin-coins-voucher-result__actions"],[1,"admin-coins-voucher-result__meta"],[1,"admin-coins-voucher-result__message"],["appPortalToBody","","aria-hidden","true",1,"admin-coins-modal-backdrop",3,"click"],["appPortalToBody","","role","dialog","aria-modal","true",1,"admin-coins-modal"],[1,"screen-card","section-card","admin-coins-modal__dialog"],[1,"admin-coins-modal__header"],["id","admin-coins-modal-title"],["type","button","aria-label","Erkl\xE4rung schlie\xDFen",1,"admin-coins-modal__close",3,"click"],["name","close-outline","aria-hidden","true"]],template:function(a,c){if(a&1&&(t(0,"ion-content",0)(1,"div",1)(2,"header",2)(3,"div")(4,"span",3),o(5,"Administration"),e(),t(6,"h1"),o(7,"Coin-Einstellungen"),e(),t(8,"p"),o(9," Verwalten Sie das globale Monatsbudget f\xFCr Winkekatzen-Coins und sehen Sie alle zentralen Referenzwerte auf einen Blick. "),e()()(),u(10,ce,2,1,"div",4),u(11,de,2,1,"div",5),u(12,me,9,0,"section",6)(13,Ue,147,27),u(14,He,13,3),e()()),a&2){let O,T;b("fullscreen",!0),l(10),g(c.errorMessage()?10:-1),l(),g(c.successMessage()?11:-1),l(),g(c.loading()?12:(O=c.settings())?13:-1,O),l(2),g((T=c.activeInfo())?14:-1,T)}},dependencies:[ie,z,$,L,G,q,I,R,B,W,U,H,j,J,ae],styles:["[_nghost-%COMP%]{display:block;width:100%}.admin-coins-page[_ngcontent-%COMP%]{padding:28px 32px 48px}.admin-coins-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px}.admin-coins-extensions[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:20px;margin-top:20px}.admin-coins-save[_ngcontent-%COMP%]{width:100%;justify-content:center}.admin-coins-feature-toggle[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border:1px solid var(--portal-border-subtle);border-radius:14px;background:#fff}.admin-coins-feature-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:18px;height:18px;margin-top:2px;accent-color:var(--color-brand-red)}.admin-coins-feature-toggle[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:grid;gap:4px}.admin-coins-feature-toggle[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--color-text-secondary);line-height:1.5}.admin-coins-settings-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}.admin-coins-settings-grid__full[_ngcontent-%COMP%]{grid-column:1/-1}.admin-coins-label-row[_ngcontent-%COMP%], .admin-coins-role-section__heading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px}.admin-coins-hint[_ngcontent-%COMP%]{display:block;margin-top:6px;color:var(--color-text-muted)}.admin-coins-hint--error[_ngcontent-%COMP%]{color:var(--color-brand-red-deep)}.admin-coins-stat-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.admin-coins-stat-list[_ngcontent-%COMP%] article[_ngcontent-%COMP%]{padding:16px;border-radius:18px;background:var(--muted)}.admin-coins-stat-list[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;margin-bottom:6px;color:var(--color-text-secondary);font-size:.8rem}.admin-coins-help[_ngcontent-%COMP%], .admin-coins-modal__close[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;border-radius:999px;background:transparent;color:var(--color-text-muted);cursor:pointer;flex-shrink:0}.admin-coins-help[_ngcontent-%COMP%]:hover, .admin-coins-modal__close[_ngcontent-%COMP%]:hover{background:#1118270f;color:var(--color-text-primary)}.admin-coins-help[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%], .admin-coins-modal__close[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%]{font-size:1rem}.admin-coins-role-section[_ngcontent-%COMP%]{margin-top:18px}.admin-coins-role-section[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{display:block;margin-bottom:10px}.admin-coins-role-section__heading[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{margin-bottom:0}.admin-coins-role-list[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px}.admin-coins-reward-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.admin-coins-reward-list[_ngcontent-%COMP%] article[_ngcontent-%COMP%]{display:grid;gap:6px;padding:14px 16px;border-radius:16px;border:1px solid var(--portal-border-subtle);background:#fff}.admin-coins-reward-list[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.8rem}.admin-coins-reward-list[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text-primary)}.admin-coins-credit-card[_ngcontent-%COMP%], .admin-coins-voucher-card[_ngcontent-%COMP%]{display:grid;gap:14px;align-content:start}.admin-coins-inline-hint[_ngcontent-%COMP%], .admin-coins-voucher-result__message[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);line-height:1.6}.admin-coins-search-field[_ngcontent-%COMP%]{max-width:560px}.admin-coins-search-field[_ngcontent-%COMP%] input[type=search][_ngcontent-%COMP%]{min-height:46px;-webkit-appearance:none;appearance:none}.admin-coins-user-results[_ngcontent-%COMP%]{display:grid;gap:10px}.admin-coins-user-result[_ngcontent-%COMP%], .admin-coins-selected-user[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--portal-border-subtle);border-radius:16px;background:#fff}.admin-coins-user-result[_ngcontent-%COMP%]{text-align:left;cursor:pointer}.admin-coins-user-result.is-selected[_ngcontent-%COMP%]{border-color:#e3061338;background:#ffc40014}.admin-coins-user-result[_ngcontent-%COMP%]:disabled{cursor:not-allowed;opacity:.65}.admin-coins-user-result[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .admin-coins-selected-user[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{display:block;color:var(--color-text-primary)}.admin-coins-user-result[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .admin-coins-selected-user[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.86rem}.admin-coins-voucher-result[_ngcontent-%COMP%]{display:grid;gap:16px;padding:16px;border:1px solid #e5e7eb;border-radius:18px;background:#fafafa}.admin-coins-voucher-result__code[_ngcontent-%COMP%]{display:grid;gap:6px;justify-items:start}.admin-coins-voucher-result__code[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.78rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.admin-coins-voucher-result__code[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-family:var(--portal-font-display);font-size:clamp(1.55rem,2vw,2rem);line-height:1.05;color:var(--color-text-primary);
1word-break:break-word}.admin-coins-voucher-result__actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:12px}.admin-coins-voucher-result__meta[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.admin-coins-voucher-result__meta[_ngcontent-%COMP%] article[_ngcontent-%COMP%]{display:grid;gap:6px;padding:14px;border-radius:14px;background:#fff}.admin-coins-voucher-result__meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.78rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.admin-coins-voucher-result__meta[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text-primary)}.admin-coins-voucher-form[_ngcontent-%COMP%]{display:grid;gap:14px}.admin-coins-voucher-form__grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px;align-items:start}.admin-coins-voucher-form__message[_ngcontent-%COMP%]{grid-column:1/-1}.admin-coins-modal-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:10;background:#0f172a6b}.admin-coins-modal[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:11;display:flex;align-items:center;justify-content:center;padding:24px}.admin-coins-modal__dialog[_ngcontent-%COMP%]{width:min(520px,100%);max-height:min(80vh,640px);overflow:auto;box-shadow:0 24px 60px #0f172a38}.admin-coins-modal__header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}.admin-coins-modal__header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:4px 0 0}.admin-coins-modal__dialog[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);line-height:1.6}@media (max-width: 900px){.admin-coins-page[_ngcontent-%COMP%]{padding:24px 20px 40px}.admin-coins-grid[_ngcontent-%COMP%], .admin-coins-extensions[_ngcontent-%COMP%], .admin-coins-settings-grid[_ngcontent-%COMP%], .admin-coins-stat-list[_ngcontent-%COMP%], .admin-coins-reward-list[_ngcontent-%COMP%], .admin-coins-voucher-result__meta[_ngcontent-%COMP%], .admin-coins-voucher-form__grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.admin-coins-settings-grid__full[_ngcontent-%COMP%]{grid-column:auto}.admin-coins-modal[_ngcontent-%COMP%]{padding:16px}}@media (max-width: 720px){.admin-coins-user-result[_ngcontent-%COMP%], .admin-coins-selected-user[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}"]});let i=s;return i})();export{lt as AdminCoinsPage};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.