1import{e as z,u as H,j as t,a as S,r as j,E as v,c1 as K,p as L}from"./index.C_jEAofg.js";import{l as q,f as G,d as J,r as i}from"./reactRouter.C6cvQAHO.js";import Q from"./LevelDetailPage.B1ibm2gJ.js";import{b as P,c as V,f as W,A as X}from"./curationTypeUtils.UzM-6L0y.js";import{A as M}from"./AccessDenied.Da_IVTEt.js";import{u as Z}from"./i18n.BxWiIRpk.js";import"./recharts.DzmhKP_O.js";import"./3.Basw4Ae0.js";import"./communityTags.D2n_4RPi.js";import"./TagConfidenceBar.kbpMl9x7.js";import"./bilibiliCover.BMMeVU1g.js";import"./PackItem.D5eL2g8B.js";import"./dnd.esm.Cdkn9E5v.js";import"./raf-schd.esm.Do3U_zjQ.js";import"./DownloadIcon.DjUIGIn8.js";import"./InfoIcon.D6E0BSOK.js";import"./DragHandleIcon.DD8FtFny.js";import"./FolderIcon.C9FyMAKL.js";import"./SongSelectorPopup.DKzLh1D3.js";import"./WebAdofaiViewerButton.B_YDorpM.js";import"./Select.BO5et_f4.js";import"./CreatorStatusBadge.BebQkP3q.js";import"./verificationStates.C-65KJT3.js";import"./MarkdownText.L8wnX1BN.js";import"./ExternalLink.Dqxd3OTW.js";import"./EditLevelPopup.DRNO7Nwl.js";import"./RefreshIcon.C6h3Vb3d.js";import"./GraphIcon.CYoVe_gk.js";import"./ChartIcon.D6Na6YlP.js";import"./RatingInput.DaDmVNeA.js";import"./LevelUploadManagementPopup.D_Jm9B8a.js";import"./toastMessage.BnceMJYi.js";import"./levelselectionpopup.XTKS7ydm.js";import"./LevelSelectionPopup.BM_HqWse.js";import"./levelHelpers.CkOxyFNP.js";import"./passJudgementHitCount.Ccm5-J09.js";import"./ItemPickManager.ByW3m6Qa.js";import"./TrashIcon.BeVW0keM.js";import"./useUnsavedClose.DBVfPN3-.js";/* empty css *//* empty css */import"./useVideoLinkResolver.CRdJO4N2.js";import"./resolveVideoUrl.CQLZGZ0c.js";/* empty css */import"./AdminLevelXaccCurvePopup.CEc05nAv.js";import"./XaccPassPickerJudgementStrip.RmYhi90o.js";import"./statFormatters.D_f0oQsy.js";import"./AdminReasonPrompt.DCSPFRYl.js";/* empty css */import"./SearchHelpPopup.BSQYCqH7.js";import"./EditIcon.C3zEPxhx.js";import"./PackIcon.BLDIeBiY.js";import"./TimeIcon.C24S6xSS.js";import"./LikeButton.JOd7Q3w3.js";import"./LikeIcon.DMlP2VPj.js";import"./PlusIcon.CBMb1dFY.js";import"./SearchIcon.qDkSL_MV.js";import"./ImageIcon.CKUsHZmQ.js";import"./uploadErrors.BuoBavFt.js";import"./ImageSelectorPopup.sFab1OF6.js";import"./packRefUtils.Ch95Re_b.js";/* empty css */import"./MarqueeText.C_DzVbgp.js";/* empty css */import"./packcard.CmgWfOZs.js";import"./EyeIcon.B3GYw7db.js";import"./VirtualList.CE9jB2m0.js";import"./SparkleIcon.ujc_uidK.js";import"./CalendarIcon.DcVPTZDb.js";import"./CreatorIcon.D9igEVbR.js";import"./entityMeta.DRNc0NpJ.js";/* empty css */import"./passSubmissionSource.CT_2-b8R.js";import"./AdofaiIcon.BLSDof5Q.js";import"./PassFlags.BPjp9GNa.js";import"./LinkIcon.Bkbldl9A.js";import"./CommentFormatter.CY3xEKRZ.js";/* empty css */import"./useScrollParent.C4GI240R.js";import"./RatingDetailPopup.lMkvv8-m.js";import"./UserManagementPopup.DBiEhQ94.js";/* empty css */import"./rateLimitError.ByypYhRt.js";import"./CrownIcon.C5mV_Hrz.js";import"./DraftIcon.Dpn7YAGG.js";import"./RatingItem.DhbiwCyp.js";import"./StatusBanner.B8Ld_wam.js";import"./CommunityTagVotePopup.C_f20uej.js";import"./tournamentAppearanceHref.H_barSjD.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};e.SENTRY_RELEASE={id:"aec9389561908f1f1b5366362ca3b629220ab900"},e._sentryModuleMetadata=e._sentryModuleMetadata||{},e._sentryModuleMetadata[new e.Error().stack]=function(l){for(var n=1;n<arguments.length;n++){var u=arguments[n];if(u!=null)for(var d in u)u.hasOwnProperty(d)&&(l[d]=u[d])}return l}({},e._sentryModuleMetadata[new e.Error().stack],{"_sentryBundlerPluginAppKey:tuf-website":!0});var p=new e.Error().stack;p&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[p]="4276f610-c2a8-41fc-b469-26b81f8eb1ad",e._sentryDebugIdIdentifier="sentry-dbid-4276f610-c2a8-41fc-b469-26b81f8eb1ad")}catch{}})();const Ft=()=>{const{t:e}=Z(["pages","common"]),{user:p}=z(),{curationTypesDict:l}=H(),{levelId:n}=q(),u=G(),d=J(),[o,D]=i.useState(null),[a,g]=i.useState(""),[h,k]=i.useState(!1),[F,E]=i.useState(!0),[b,N]=i.useState(!1),[y,T]=i.useState(""),[w,A]=i.useState(null),O=s=>!s||!p?!1:K(p,[L.SUPER_ADMIN,L.HEAD_CURATOR])?!0:P(s,l).some(c=>c.abilities&&W(p.permissionFlags,c.abilities));i.useEffect(()=>{var r;let s="";if(((r=d.state)==null?void 0:r.customCSS)!==void 0)s=d.state.customCSS;else{const C=new URLSearchParams(window.location.search).get("css");C&&(s=decodeURIComponent(C))}s&&(g(s),T(s))},[d.state]),i.useEffect(()=>{n&&(async()=>{try{E(!0);try{const r=await S.get(`${j.database.levels.root()}/${n}`),c=await S.get(`${j.database.passes.root()}/level/${n}`);A({...r.data,passes:c.data}),D(r.data.level.curation)}catch(r){console.error("Error fetching level data:",r),v.error("Failed to load level data");return}}catch(r){v.error("Failed to load data"),console.error("Error fetching data:",r)}finally{E(!1)}})()},[n]),i.useEffect(()=>{typeof window<"u"&&window.setCurationCssOverride&&window.setDisableDefaultStyling&&(window.setDisableDefaultStyling(!0),window.setCurationCssOverride(a||""))},[a]),i.useEffect(()=>()=>{typeof window<"u"&&window.setCurationCssOverride&&window.setDisableDefaultStyling&&(window.setCurationCssOverride(""),window.setDisableDefaultStyling(!1))},[]);const f=a!==y,$=async()=>{var c,C,I,R;if(!o){v.error("No curation found for this level");return}const r=P(o,l).map(m=>m.id).filter(m=>m!=null);try{N(!0);
1const m={typeIds:r,shortDescription:o.shortDescription??"",description:o.description??"",customCSS:a??"",customColor:o.customColor??null},Y=((c=(await S.put(`${j.admin.curations.root()}/${o.id}`,m)).data)==null?void 0:c.curation)??{...o,customCSS:a};D(Y),T(a),(C=w==null?void 0:w.level)!=null&&C.curation&&A(x=>({...x,level:{...x.level,curation:{...x.level.curation,customCSS:a}}})),v.success(e("curationCssPreview.notifications.saved"))}catch(m){const _=((R=(I=m.response)==null?void 0:I.data)==null?void 0:R.error)||e("curationCssPreview.errors.saveFailed");v.error(_)}finally{N(!1)}},U=()=>{window.confirm(e("curationCssPreview.confirmations.reset"))&&(g(y),v.success(e("curationCssPreview.notifications.reset")))},B=()=>{if(f&&!window.confirm(e("confirmations.unsavedChanges",{ns:"common"})))return;const s={...o,customCSS:f?y:a};u("/admin/curations",{state:{updatedCuration:s,action:"returned"}})};return i.useEffect(()=>{const s=r=>{f&&r.preventDefault()};return window.addEventListener("beforeunload",s),()=>window.removeEventListener("beforeunload",s)},[f]),F||!w?t.jsxs("div",{className:"curation-css-preview-loading",children:[t.jsx("div",{className:"spinner spinner-large spinner-primary"}),t.jsx("p",{children:e("curationCssPreview.loading")})]}):O(o)?P(o,l).some(s=>V(s==null?void 0:s.abilities,X.CUSTOM_CSS))?t.jsxs("div",{className:"curation-css-preview-page",children:[t.jsx("button",{className:"fixed-collapse-button",onClick:()=>k(!h),title:e(h?"curationCssPreview.editor.expand":"curationCssPreview.editor.collapse"),children:h?"â":"â¶"}),t.jsxs("div",{className:`css-editor-overlay ${h?"collapsed":""}`,children:[t.jsx("div",{className:"css-editor-header",children:t.jsxs("div",{className:"css-editor-title",children:[t.jsx("h3",{children:e("curationCssPreview.editor.title")}),t.jsx("p",{children:e("curationCssPreview.editor.subtitle")})]})}),t.jsxs("div",{className:"css-editor-content",children:[t.jsxs("div",{className:"css-editor-textarea-container",children:[t.jsx("label",{htmlFor:"css-editor",children:e("curationCssPreview.editor.cssLabel")}),t.jsx("textarea",{id:"css-editor",value:a,onChange:s=>g(s.target.value),placeholder:e("curationCssPreview.editor.placeholder"),className:"css-editor-textarea"}),t.jsxs("div",{className:"css-editor-help",children:[t.jsx("p",{children:e("curationCssPreview.editor.help")}),t.jsxs("p",{children:[t.jsx("strong",{children:"Note:"})," Your CSS is injected as-is after the base styles. Target ",t.jsx("code",{children:".level-detail"})," and its descendants. No transformation is applied."]}),t.jsxs("p",{children:[t.jsx("strong",{children:"Example:"})," ",t.jsxs("code",{children:[".left ","{"," box-shadow: 0 0 10px; ","}"]})," will target the left section."]})]})]}),t.jsxs("div",{className:"css-editor-actions",children:[t.jsx("button",{className:"reset-button btn-fill-neutral-dark",onClick:U,disabled:b||!f,children:e("buttons.reset",{ns:"common"})}),t.jsx("button",{className:"save-button btn-fill-accent",onClick:$,disabled:b||!f,children:b?e("loading.saving",{ns:"common"}):e("buttons.save",{ns:"common"})}),t.jsx("button",{className:"return-button btn-fill-ghost",onClick:B,disabled:b,children:e("buttons.return",{ns:"common"})})]})]})]}),t.jsx("div",{className:`level-detail-wrapper ${h?"collapsed":""}`,children:t.jsx(Q,{mockData:w})})]}):t.jsx(M,{metaTitle:e("curationCssPreview.meta.title"),metaDescription:e("curationCssPreview.meta.description")}):t.jsx(M,{metaTitle:e("curationCssPreview.meta.title"),metaDescription:e("curationCssPreview.meta.description")})};export{Ft as default};
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.