@weppy/roblox-mcp 2.10.3 → 2.10.4
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/CHANGELOG.md +17 -6
- package/dashboard/dist/assets/{AssetsPage-DFC---br.js → AssetsPage-YhGnZEI3.js} +1 -1
- package/dashboard/dist/assets/{ChangelogDetailPage-gvZDaLft.js → ChangelogDetailPage-C78XiyDy.js} +1 -1
- package/dashboard/dist/assets/{ChangelogPage-eOFIHxbD.js → ChangelogPage-BDUgixCt.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-BqCEvp7Y.js → ConfirmModal-WlE0qUHf.js} +1 -1
- package/dashboard/dist/assets/{ConnectionPage-DAz-lhiE.js → ConnectionPage-7MGw5kBx.js} +1 -1
- package/dashboard/dist/assets/{ControlsPage-CKEswTa6.js → ControlsPage-BUtN2zIN.js} +1 -1
- package/dashboard/dist/assets/{CurrentPlaceScope-C8U9I15o.js → CurrentPlaceScope-CF_xE8My.js} +1 -1
- package/dashboard/dist/assets/{GameChangeDetail-CMSmIwO-.js → GameChangeDetail-1QGJVFSx.js} +1 -1
- package/dashboard/dist/assets/{InfoLabel-BAhsgLcj.js → InfoLabel-BkAQdbWd.js} +1 -1
- package/dashboard/dist/assets/{OverviewPage-COMQ7wYS.js → OverviewPage-D1OcIXB0.js} +1 -1
- package/dashboard/dist/assets/{PageHeader-Bfy2f-GH.js → PageHeader-CD450myM.js} +1 -1
- package/dashboard/dist/assets/{PlaytestPage-BIkP1kCO.js → PlaytestPage-DVo_oYz5.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-ClSPo4J8.js → SettingsPage-CU7CHyaG.js} +1 -1
- package/dashboard/dist/assets/{StatusBadge-Df9BQsJU.js → StatusBadge-C2tcoGvy.js} +1 -1
- package/dashboard/dist/assets/{SyncPage-O1vlpViJ.js → SyncPage-BYVYYvX1.js} +1 -1
- package/dashboard/dist/assets/{Tabs-Ccrw7Hjb.js → Tabs-Bb6imtwV.js} +1 -1
- package/dashboard/dist/assets/{ToolsPage-CdPa3eYv.js → ToolsPage-DuMKAsHP.js} +1 -1
- package/dashboard/dist/assets/{TooltipText-CGH7dKN6.js → TooltipText-0HIROg6e.js} +1 -1
- package/dashboard/dist/assets/{UiStudioPage-io4UBG0Y.js → UiStudioPage-BVuHR29W.js} +1 -1
- package/dashboard/dist/assets/{WhatsNewPage-CGKwvik4.js → WhatsNewPage-CfslOZQY.js} +1 -1
- package/dashboard/dist/assets/{copy-D-nSZB9j.js → copy-ozprzL33.js} +1 -1
- package/dashboard/dist/assets/{index-CnXGGM07.js → index-T_F9Rs-N.js} +35 -3
- package/dashboard/dist/assets/{sample-requests-ythz0BoY.js → sample-requests-D5m4UOF0.js} +1 -1
- package/dashboard/dist/assets/{useLiveUptime-1Et9Q6mq.js → useLiveUptime-DpvpGzTY.js} +1 -1
- package/dashboard/dist/assets/{useSettings-DKMlodE_.js → useSettings-D918ACY5.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-D1OcIXB0.js","assets/InfoLabel-BkAQdbWd.js","assets/PageHeader-CD450myM.js","assets/PageHeader-CrhjZjgp.css","assets/StatusBadge-C2tcoGvy.js","assets/StatusBadge-C2zYt5iE.css","assets/TooltipText-0HIROg6e.js","assets/GameChangeDetail-1QGJVFSx.js","assets/GameChangeDetail-C1XtdYwk.css","assets/useLiveUptime-DpvpGzTY.js","assets/OverviewPage-Dsfl-NRT.css","assets/ConnectionPage-7MGw5kBx.js","assets/ConfirmModal-WlE0qUHf.js","assets/ConfirmModal.module-D1aZY2bQ.js","assets/ConfirmModal-izJskKtO.css","assets/copy-ozprzL33.js","assets/ConnectionPage-Ca5WLCm3.css","assets/SyncPage-BYVYYvX1.js","assets/CurrentPlaceScope-CF_xE8My.js","assets/CurrentPlaceScope-D-0g0WrM.css","assets/SyncPage-CIZWp8Ul.css","assets/AssetsPage-YhGnZEI3.js","assets/AssetsPage-Czc93xoU.css","assets/ChangelogPage-BDUgixCt.js","assets/Tabs-Bb6imtwV.js","assets/Tabs-CIszXeoU.css","assets/ChangelogPage-DsP0fTsc.css","assets/PlaytestPage-DVo_oYz5.js","assets/PlaytestPage-CVEtQ4dU.css","assets/UiStudioPage-BVuHR29W.js","assets/sample-requests-D5m4UOF0.js","assets/sample-requests-DmUwqmFE.css","assets/UiStudioPage-LH2dcLkr.css","assets/ToolsPage-DuMKAsHP.js","assets/ToolsPage-CAaH9fIQ.css","assets/ControlsPage-BUtN2zIN.js","assets/useSettings-D918ACY5.js","assets/useSettings-KAiL5E_X.css","assets/WhatsNewPage-CfslOZQY.js","assets/WhatsNewPage-BIYOEZg3.css","assets/ChangelogDetailPage-C78XiyDy.js","assets/ChangelogDetailPage-D6Tqz7ut.css","assets/SettingsPage-CU7CHyaG.js","assets/SettingsPage-ByHSUA7b.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
var jh=Object.defineProperty;var Uh=(i,n,r)=>n in i?jh(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r;var Io=(i,n,r)=>Uh(i,typeof n!="symbol"?n+"":n,r);function mp(i,n){for(var r=0;r<n.length;r++){const d=n[r];if(typeof d!="string"&&!Array.isArray(d)){for(const u in d)if(u!=="default"&&!(u in i)){const p=Object.getOwnPropertyDescriptor(d,u);p&&Object.defineProperty(i,u,p.get?p:{enumerable:!0,get:()=>d[u]})}}}return Object.freeze(Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))d(u);new MutationObserver(u=>{for(const p of u)if(p.type==="childList")for(const g of p.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&d(g)}).observe(document,{childList:!0,subtree:!0});function r(u){const p={};return u.integrity&&(p.integrity=u.integrity),u.referrerPolicy&&(p.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?p.credentials="include":u.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function d(u){if(u.ep)return;u.ep=!0;const p=r(u);fetch(u.href,p)}})();function yp(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var bl={exports:{}},es={},Pl={exports:{}},xe={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react.production.min.js
|
|
@@ -311,7 +311,39 @@ Ceci est un exemple d’aperçu. Passez à Pro pour exécuter des tests de jeu e
|
|
|
311
311
|
*
|
|
312
312
|
* This source code is licensed under the ISC license.
|
|
313
313
|
* See the LICENSE file in the root directory of this source tree.
|
|
314
|
-
*/const pS=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],gS=Ke("x",pS),Fp=[{labelKey:"sidebar.overview",route:"/",icon:Yf,minLevel:"disconnected",lazy:()=>Kt(()=>import("./OverviewPage-COMQ7wYS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))},{labelKey:"sidebar.connection",route:"/connection",icon:iS,minLevel:"disconnected",lazy:()=>Kt(()=>import("./ConnectionPage-DAz-lhiE.js"),__vite__mapDeps([11,1,2,3,4,5,6,12,13,14,9,15,16]))},{labelKey:"sidebar.sync",route:"/sync",icon:Bp,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./SyncPage-O1vlpViJ.js"),__vite__mapDeps([17,2,3,1,6,12,13,14,18,19,4,5,20]))},{labelKey:"sidebar.assets",route:"/assets",icon:oS,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./AssetsPage-DFC---br.js"),__vite__mapDeps([21,12,13,14,2,3,6,15,22]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:qf,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./ChangelogPage-eOFIHxbD.js"),__vite__mapDeps([23,2,3,12,13,14,18,19,6,24,25,26]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:Nf,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./PlaytestPage-BIkP1kCO.js"),__vite__mapDeps([27,2,3,1,18,19,6,12,13,14,28]))},{labelKey:"sidebar.ui_studio",route:"/ui-studio",icon:Wf,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./UiStudioPage-io4UBG0Y.js"),__vite__mapDeps([29,1,6,2,3,30,31,24,25,18,19,32]))},{labelKey:"sidebar.tools",route:"/tools",icon:cS,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./ToolsPage-CdPa3eYv.js"),__vite__mapDeps([33,2,3,6,12,13,14,18,19,24,25,34]))}],ql=[{labelKey:"sidebar.controls",route:"/controls",icon:Wp,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./ControlsPage-CKEswTa6.js"),__vite__mapDeps([35,2,3,1,13,14,6,36,37,15]))},{labelKey:"sidebar.whatsNew",route:"/whats-new",icon:wf,minLevel:"disconnected",lazy:()=>Kt(()=>import("./WhatsNewPage-CGKwvik4.js"),__vite__mapDeps([38,2,3,39]))}],jl="https://github.com/hope1026/weppy-roblox-mcp",hS="https://weppyai.com";function Bl(i){return i?/Mac OS X|Macintosh/i.test(i)?"macOS":/Windows NT/i.test(i)?"Windows":/Linux/i.test(i)?"Linux":"":""}function Kp(i){var v,P,C,D,U;const n=Bl(typeof navigator<"u"?navigator.userAgent:""),r=i.status,d=(r==null?void 0:r.version)??"",u=((P=(v=r==null?void 0:r.pluginClients)==null?void 0:v[0])==null?void 0:P.pluginVersion)??"",p=((D=(C=r==null?void 0:r.pluginClients)==null?void 0:C[0])==null?void 0:D.studioVersion)??"",g=d||u||p?[d?`MCP ${d}`:"",u?`Plugin ${u}`:"",p?`Studio ${p}`:""].filter(Boolean).join(" / "):"",y=((U=r==null?void 0:r.aiClientNames)==null?void 0:U[0])??"",h=(r==null?void 0:r.nodeVersion)??"";return{os:n,nodeVersion:h,aiClient:y,pluginVersionLabel:g}}function mS(i){const{os:n,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=Kp(i),p=new URLSearchParams;return p.set("template","bug_report.yml"),n&&p.set("os",n),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}function yS(i){const{os:n,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=Kp(i),p=new URLSearchParams;return p.set("template","install_help.yml"),n&&p.set("os",n),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}const fS=[{id:"bug",labelKey:"sidebar.help.bug",tooltipKey:"sidebar.help.bug.tooltip",icon:Af,buildUrl:i=>`${jl}/issues/new?${mS(i)}`},{id:"feature",labelKey:"sidebar.help.feature",tooltipKey:"sidebar.help.feature.tooltip",icon:Vf,buildUrl:()=>`${jl}/issues/new?template=feature_request.yml`},{id:"discussions",labelKey:"sidebar.help.discussions",tooltipKey:"sidebar.help.discussions.tooltip",icon:Zf,buildUrl:i=>`${jl}/issues/new?${yS(i)}`},{id:"troubleshooting",labelKey:"sidebar.help.troubleshooting",tooltipKey:"sidebar.help.troubleshooting.tooltip",icon:xf,buildUrl:i=>`${hS}/${i.locale}/docs/troubleshooting/`}];function SS(){const[i,n]=R.useState("basic"),[r,d]=R.useState(0),[u,p]=R.useState(0),[g,y]=R.useState(0),[h,v]=R.useState(!0);R.useEffect(()=>{let C=!1;async function D(){try{return await Np("auto")}catch{return null}}async function U(){var N,te;try{const[K,$]=await Promise.all([D(),Et.get("/api/dashboard/tool-stats").catch(()=>null)]);if(C)return;if(K!=null&&K.tier&&n(K.tier),$!=null&&$.tierSummary){const G=((N=$.tierSummary.basic)==null?void 0:N.totalCalls)??0,he=((te=$.tierSummary.pro)==null?void 0:te.totalCalls)??0;y(G),p(he),d(G+he)}}catch{}finally{C||v(!1)}}U();const B=new Ql;B.connect();const H=B.on("license",()=>{D().then(N=>{!C&&(N!=null&&N.tier)&&n(N.tier)})});return()=>{C=!0,H(),B.disconnect()}},[]);const P=r>0?u/r*100:0;return{tier:i,proUsagePercent:P,totalCalls:r,proCalls:u,basicCalls:g,loading:h}}const vS="https://weppyai.com/plans/";function Ra(i){const n=new URLSearchParams({utm_source:"weppy_dashboard",utm_medium:"app",utm_campaign:"pro_upgrade",utm_content:i});return`${vS}?${n.toString()}`}const bS={sidebarUpgrade:Ra("sidebar_upgrade"),settingsLicense:Ra("settings_license"),sync:Ra("sync_tier_panel"),changelog:Ra("changelog_limit_notice"),playtest:Ra("playtest_sample_banner"),uiStudioAnalysis:Ra("ui_studio_analysis_banner"),uiStudioHistory:Ra("ui_studio_history_banner")},PS=5e3,CS=5;function wS(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function kS(i,n){const r=new URLSearchParams(n);if(i==="ui-studio")return r.get("tab")==="history"?"ui_studio_history":"ui_studio_analysis";if(i==="tools")return"tools_history";if(i==="changelog")return"changelog_all"}function ds(i,n){const r=wS(i);if(n===void 0)return r;const d=kS(r,n);return d?{page:r,tab:d}:{page:r}}let ci=[],np=null;function Yp(){if(ci.length===0)return;const i=ci.splice(0),n=`${zn}/api/dashboard/analytics`,r=JSON.stringify({events:i});fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:r}).catch(()=>{})}function xS(){np||(np=setInterval(Yp,PS))}function rp(i){ci.push(i),xS(),ci.length>=CS&&Yp()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(ci.length===0)return;const i=`${zn}/api/dashboard/analytics`,n=JSON.stringify({events:ci.splice(0)});navigator.sendBeacon(i,new Blob([n],{type:"application/json"}))});function us(){const i=R.useCallback((r,d)=>{rp({name:r,params:d})},[]),n=R.useCallback(r=>{rp({name:"dashboard_page_view",params:{...typeof r=="string"?{page:r}:r}})},[]);return{trackEvent:i,trackPageView:n}}const RS="_widget_1q1ab_1",AS="_header_1q1ab_12",IS="_sparkle_1q1ab_18",DS="_title_1q1ab_23",ES="_actions_1q1ab_31",TS="_cta_1q1ab_37",jS="_licenseCta_1q1ab_38",US="_collapsedGroup_1q1ab_70",MS="_collapsed_1q1ab_70",HS="_collapsedSecondary_1q1ab_91",oo={widget:RS,header:AS,sparkle:IS,title:DS,actions:ES,cta:TS,licenseCta:jS,collapsedGroup:US,collapsed:MS,collapsedSecondary:HS};function LS({collapsed:i=!1}){const{tier:n}=SS(),{t:r}=Uo(),{trackEvent:d}=us(),{pathname:u,search:p}=Yt();if(n==="pro")return null;const g=bS.sidebarUpgrade,y="/settings?section=license",h=ds(u,p),v=()=>{d("dashboard_click_event",{click_target:"upgrade_cta",placement:"sidebar_upgrade",...h})},P=()=>{d("dashboard_click_event",{click_target:"license_shortcut",placement:"sidebar_license",...h})};return i?x.jsxs("div",{className:oo.collapsedGroup,children:[x.jsx("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oo.collapsed,title:r("upgrade.title","View Pro"),"aria-label":r("upgrade.title","View Pro"),onClick:v,children:x.jsx(sp,{size:18,strokeWidth:1.75})}),x.jsx(Ea,{to:y,className:`${oo.collapsed} ${oo.collapsedSecondary}`,title:r("upgrade.licenseShortcut","Enter License"),"aria-label":r("upgrade.licenseShortcut","Enter License"),onClick:P,children:x.jsx(ip,{size:18,strokeWidth:1.75})})]}):x.jsxs("div",{className:oo.widget,children:[x.jsxs("div",{className:oo.header,children:[x.jsx(sp,{size:16,strokeWidth:1.75,className:oo.sparkle}),x.jsx("span",{className:oo.title,children:r("upgrade.tagline","Check Pro features")})]}),x.jsxs("div",{className:oo.actions,children:[x.jsxs("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oo.cta,onClick:v,children:[r("upgrade.cta","View Pro")," →"]}),x.jsxs(Ea,{to:y,className:oo.licenseCta,onClick:P,children:[x.jsx(ip,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"}),x.jsx("span",{children:r("upgrade.licenseShortcut","Enter License")})]})]})]})}const zS="_backdrop_1r5ey_1",_S="_dialog_1r5ey_11",NS="_header_1r5ey_21",OS="_titleBlock_1r5ey_30",qS="_title_1r5ey_30",BS="_subtitle_1r5ey_42",WS="_closeButton_1r5ey_49",FS="_body_1r5ey_67",KS="_statusBox_1r5ey_73",YS="_errorBox_1r5ey_74",GS="_spin_1r5ey_92",VS="_bundleBlock_1r5ey_102",XS="_label_1r5ey_107",$S="_bundleName_1r5ey_115",QS="_guidanceBox_1r5ey_127",ZS="_includedList_1r5ey_143",JS="_includedItem_1r5ey_152",ev="_actions_1r5ey_163",tv="_button_1r5ey_169",ov="_primaryLink_1r5ey_170",av="_hint_1r5ey_206",We={backdrop:zS,dialog:_S,header:NS,titleBlock:OS,title:qS,subtitle:BS,closeButton:WS,body:FS,statusBox:KS,errorBox:YS,spin:GS,bundleBlock:VS,label:XS,bundleName:$S,guidanceBox:QS,includedList:ZS,includedItem:JS,actions:ev,button:tv,primaryLink:ov,hint:av};function Ul(){return typeof navigator<"u"?navigator.userAgent:""}function iv(i){window.open(i,"_blank","noopener,noreferrer")}function sv({open:i,fallbackHref:n,onClose:r}){const{locale:d,t:u}=Uo(),p=R.useId(),[g,y]=R.useState(!1),[h,v]=R.useState(null),[P,C]=R.useState(null),[D,U]=R.useState("idle");if(R.useEffect(()=>{if(!i)return;let G=!1;const he=Ul();return y(!0),v(null),C(null),U("idle"),Et.post("/api/dashboard/support/bug-report",{os:Bl(he),userAgent:he,locale:d}).then(De=>{G||(v(De),y(!1))}).catch(()=>{G||(C(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),y(!1))}),()=>{G=!0}},[i,d]),R.useEffect(()=>{if(!i||g)return;function G(he){he.key==="Escape"&&r()}return window.addEventListener("keydown",G),()=>window.removeEventListener("keydown",G)},[i,g,r]),!i)return null;async function B(){if(h)try{U("opening"),await Et.post("/api/dashboard/support/bug-report/reveal",{bundleName:h.bundleName}),U("opened")}catch{U("failed")}}const H=h!==null,N=(h==null?void 0:h.issueUrl)??n,te=(h==null?void 0:h.includedFiles)??[],K=D==="opening"?u("bugReportDialog.reveal.opening","Opening..."):D==="opened"?u("bugReportDialog.reveal.opened","Opened location"):u("bugReportDialog.reveal","Reveal in Finder"),$=x.jsx("div",{className:We.backdrop,onClick:g?void 0:r,children:x.jsxs("section",{className:We.dialog,role:"dialog","aria-modal":"true","aria-labelledby":p,onClick:G=>G.stopPropagation(),children:[x.jsxs("div",{className:We.header,children:[x.jsxs("div",{className:We.titleBlock,children:[x.jsx("h2",{id:p,className:We.title,children:u("bugReportDialog.title","diagnostics.zip can help us investigate")}),x.jsx("p",{className:We.subtitle,children:u("bugReportDialog.subtitle","WEPPY created a diagnostics zip on your computer. It includes Studio, plugin, Sync, and tool logs that can help us understand what happened.")})]}),x.jsx("button",{type:"button",className:We.closeButton,"aria-label":u("bugReportDialog.close","Close"),onClick:r,disabled:g,children:x.jsx(gS,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),x.jsxs("div",{className:We.body,children:[g&&x.jsxs("div",{className:We.statusBox,role:"status",children:[x.jsx($f,{className:We.spin,size:18,strokeWidth:1.75,"aria-hidden":"true"}),x.jsx("span",{children:u("bugReportDialog.loading","Preparing diagnostics.zip...")})]}),P&&x.jsxs("div",{className:We.errorBox,role:"alert",children:[x.jsx(Mf,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),x.jsx("span",{children:P})]}),H&&x.jsxs(x.Fragment,{children:[x.jsxs("div",{className:We.guidanceBox,children:[x.jsx("p",{children:u("bugReportDialog.optional","You can submit the bug report without this file, but attaching it usually helps us find the cause faster.")}),x.jsx("p",{children:u("bugReportDialog.attachHow","To attach it, download or reveal the zip, then add it to the Diagnostics ZIP (optional) upload field on GitHub before you submit.")})]}),x.jsxs("div",{className:We.bundleBlock,children:[x.jsx("span",{className:We.label,children:u("bugReportDialog.bundle","Bundle")}),x.jsx("code",{className:We.bundleName,children:h.bundleName})]}),x.jsxs("div",{className:We.bundleBlock,children:[x.jsx("span",{className:We.label,children:u("bugReportDialog.included","Included")}),x.jsx("ul",{className:We.includedList,children:te.length>0?te.map(G=>x.jsx("li",{className:We.includedItem,children:G.label},`${G.label}:${G.archivePath??G.path}`)):x.jsx("li",{className:We.includedItem,children:u("bugReportDialog.included.none","No log files found")})})]}),D==="failed"&&x.jsxs("div",{className:We.errorBox,role:"alert",children:[x.jsx(ap,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),x.jsx("span",{children:u("bugReportDialog.reveal.failed","Could not open the file location.")})]})]}),x.jsxs("div",{className:We.actions,children:[H&&x.jsxs(x.Fragment,{children:[x.jsxs("a",{className:We.primaryLink,href:h.downloadUrl,download:h.bundleName,children:[x.jsx(Tf,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.download","1. Download diagnostics.zip")]}),x.jsxs("button",{type:"button",className:We.button,onClick:()=>void B(),disabled:D==="opening",children:[x.jsx(ap,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),K]})]}),P&&!H&&x.jsxs("button",{type:"button",className:We.button,onClick:()=>{C(null),y(!0),Et.post("/api/dashboard/support/bug-report",{os:Bl(Ul()),userAgent:Ul(),locale:d}).then(G=>{v(G),y(!1)}).catch(()=>{C(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),y(!1)})},children:[x.jsx(Bp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.retry","Try again")]}),x.jsxs("button",{type:"button",className:We.button,onClick:()=>iv(N),disabled:g,children:[x.jsx(qp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),H?u("bugReportDialog.openGithub","2. Open GitHub issue"):u("bugReportDialog.openGithubFallback","Open GitHub without diagnostics")]})]}),x.jsx("p",{className:We.hint,children:u("bugReportDialog.hint","The zip can contain local logs and project context. Review it before attaching if you want to share it.")})]})]})});return typeof document>"u"?$:Un.createPortal($,document.body)}const nv="_sidebar_19hyu_2",rv="_brand_19hyu_17",lv="_brandIcon_19hyu_28",dv="_brandText_19hyu_33",uv="_brandTextPro_19hyu_44",cv="_nav_19hyu_50",pv="_spacer_19hyu_57",gv="_navLink_19hyu_63",hv="_active_19hyu_84",mv="_disabled_19hyu_91",yv="_icon_19hyu_102",fv="_label_19hyu_113",Sv="_secondaryDivider_19hyu_120",vv="_secondaryNav_19hyu_127",bv="_secondaryNavEntry_19hyu_134",Pv="_secondaryItemDivider_19hyu_140",Cv="_helpDivider_19hyu_147",wv="_helpGroupTitle_19hyu_154",kv="_helpNav_19hyu_165",xv="_externalIcon_19hyu_172",Je={sidebar:nv,brand:rv,brandIcon:lv,brandText:dv,brandTextPro:uv,nav:cv,spacer:pv,navLink:gv,active:hv,disabled:mv,icon:yv,label:fv,secondaryDivider:Sv,secondaryNav:vv,secondaryNavEntry:bv,secondaryItemDivider:Pv,helpDivider:Cv,helpGroupTitle:wv,helpNav:kv,externalIcon:xv},Rv={bug:"sidebar_help_bug",feature:"sidebar_help_feature",discussions:"sidebar_help_community",troubleshooting:"sidebar_help_troubleshooting"};function Av(){const[i,n]=R.useState(!1);return R.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const r=window.matchMedia("(max-width: 768px)"),d=()=>n(r.matches);return d(),r.addEventListener("change",d),()=>r.removeEventListener("change",d)},[]),i}const lp={disconnected:0,serverOnly:1,studioConnected:2};function Iv(i,n){return lp[i]>=lp[n]}function Dv(i,n){return i==="serverOnly"?n("sidebar.gate.l1","MCP server connection required"):i==="studioConnected"?n("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function dp({item:i}){const{level:n}=_n(),{t:r}=Uo(),d=Iv(n,i.minLevel),u=i.icon,p=x.jsxs(Iy,{to:i.route,end:i.route==="/",className:({isActive:g})=>[Je.navLink,g?Je.active:"",d?"":Je.disabled].filter(Boolean).join(" "),onClick:g=>{d||g.preventDefault()},children:[x.jsx("span",{className:Je.icon,children:x.jsx(u,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),x.jsx("span",{className:Je.label,children:r(i.labelKey)})]});return d?p:x.jsx(Ft,{text:Dv(i.minLevel,r),children:p})}function Ev({item:i,ctx:n}){const{t:r}=Uo(),{trackEvent:d}=us(),{pathname:u,search:p}=Yt(),g=i.icon,y=i.buildUrl(n),h=r(i.tooltipKey,""),v=ds(u,p),[P,C]=R.useState(!1),D=x.jsxs("a",{href:y,target:"_blank",rel:"noopener noreferrer",className:Je.navLink,"data-testid":`sidebar-help-${i.id}`,onClick:B=>{d("dashboard_click_event",{click_target:Rv[i.id],placement:"sidebar_help",...v}),i.id==="bug"&&(B.preventDefault(),C(!0))},children:[x.jsx("span",{className:Je.icon,children:x.jsx(g,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),x.jsx("span",{className:Je.label,children:r(i.labelKey)}),x.jsx("span",{className:Je.externalIcon,"aria-hidden":"true",children:x.jsx(qp,{size:12,strokeWidth:1.75})})]}),U=h?x.jsx(Ft,{text:h,children:D}):D;return x.jsxs(x.Fragment,{children:[U,i.id==="bug"&&x.jsx(sv,{open:P,fallbackHref:y,onClose:()=>C(!1)})]})}function Tv(){const[i,n]=R.useState("basic"),r=Av(),{status:d}=_n(),{locale:u,t:p}=Uo(),g={locale:u,status:d};return R.useEffect(()=>{let y=!1;async function h(){try{const C=await Np("auto");!y&&(C!=null&&C.tier)&&n(C.tier)}catch{y||n("basic")}}h();const v=new Ql;v.connect();const P=v.on("license",()=>{h()});return()=>{y=!0,P(),v.disconnect()}},[]),x.jsxs("aside",{className:Je.sidebar,children:[x.jsxs("div",{className:Je.brand,children:[x.jsx("span",{className:Je.brandIcon,children:x.jsx(Df,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),x.jsx("span",{"data-testid":"sidebar-brand-text",className:[Je.brandText,i==="pro"?Je.brandTextPro:""].filter(Boolean).join(" "),children:"WEPPY"})]}),x.jsx("nav",{className:Je.nav,children:Fp.map(y=>x.jsx(dp,{item:y},y.route))}),x.jsx("div",{className:Je.secondaryDivider}),x.jsx("nav",{className:Je.secondaryNav,children:ql.map((y,h)=>x.jsxs("div",{className:Je.secondaryNavEntry,children:[x.jsx(dp,{item:y}),h<ql.length-1?x.jsx("div",{className:Je.secondaryItemDivider,"data-testid":"sidebar-controls-whats-new-divider","aria-hidden":"true"}):null]},y.route))}),x.jsx("div",{className:Je.helpDivider,"aria-hidden":"true"}),x.jsx("div",{className:Je.helpGroupTitle,"aria-label":p("sidebar.help.group"),children:p("sidebar.help.group")}),x.jsx("nav",{className:Je.helpNav,"aria-label":p("sidebar.help.group"),children:fS.map(y=>x.jsx(Ev,{item:y,ctx:g},y.id))}),x.jsx("div",{className:Je.spacer}),x.jsx(LS,{collapsed:r})]})}async function jv(){return Et.get("/api/dashboard/place-summary")}async function Uv(){return Et.get("/api/dashboard/sync-root")}async function zb(){return Et.post("/api/dashboard/sync-root/pick")}async function _b(i){return Et.patch("/api/dashboard/sync-root",{projectRoot:i})}const Mv=[{id:"2026-07-03-sync-delete-policy-undo",date:"2026-07-03",title:{en:"Sync delete settings now work with Studio Undo",ko:"Sync 삭제 설정과 Studio Undo 처리를 추가했습니다",es:"Los ajustes de borrado de Sync ahora funcionan con Undo de Studio","pt-br":"As configurações de exclusão do Sync agora funcionam com Undo do Studio",ja:"Sync削除設定がStudioのUndoに対応しました",id:"Pengaturan hapus Sync sekarang bekerja dengan Undo Studio",de:"Sync-Löschoptionen funktionieren jetzt mit Studio Undo","fr-fr":"Les réglages de suppression Sync fonctionnent maintenant avec Undo dans Studio"},body:{en:`Sync now has a separate delete policy for cases where a local file deletion can remove the matching Studio instance. The default is to ask before deleting. You can change the Studio delete policy in the Sync direction card to Auto Delete, and WEPPY asks for confirmation before that setting is enabled.
|
|
314
|
+
*/const pS=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],gS=Ke("x",pS),Fp=[{labelKey:"sidebar.overview",route:"/",icon:Yf,minLevel:"disconnected",lazy:()=>Kt(()=>import("./OverviewPage-D1OcIXB0.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))},{labelKey:"sidebar.connection",route:"/connection",icon:iS,minLevel:"disconnected",lazy:()=>Kt(()=>import("./ConnectionPage-7MGw5kBx.js"),__vite__mapDeps([11,1,2,3,4,5,6,12,13,14,9,15,16]))},{labelKey:"sidebar.sync",route:"/sync",icon:Bp,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./SyncPage-BYVYYvX1.js"),__vite__mapDeps([17,2,3,1,6,12,13,14,18,19,4,5,20]))},{labelKey:"sidebar.assets",route:"/assets",icon:oS,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./AssetsPage-YhGnZEI3.js"),__vite__mapDeps([21,12,13,14,2,3,6,15,22]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:qf,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./ChangelogPage-BDUgixCt.js"),__vite__mapDeps([23,2,3,12,13,14,18,19,6,24,25,26]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:Nf,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./PlaytestPage-DVo_oYz5.js"),__vite__mapDeps([27,2,3,1,18,19,6,12,13,14,28]))},{labelKey:"sidebar.ui_studio",route:"/ui-studio",icon:Wf,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./UiStudioPage-BVuHR29W.js"),__vite__mapDeps([29,1,6,2,3,30,31,24,25,18,19,32]))},{labelKey:"sidebar.tools",route:"/tools",icon:cS,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./ToolsPage-DuMKAsHP.js"),__vite__mapDeps([33,2,3,6,12,13,14,18,19,24,25,34]))}],ql=[{labelKey:"sidebar.controls",route:"/controls",icon:Wp,minLevel:"serverOnly",lazy:()=>Kt(()=>import("./ControlsPage-BUtN2zIN.js"),__vite__mapDeps([35,2,3,1,13,14,6,36,37,15]))},{labelKey:"sidebar.whatsNew",route:"/whats-new",icon:wf,minLevel:"disconnected",lazy:()=>Kt(()=>import("./WhatsNewPage-CfslOZQY.js"),__vite__mapDeps([38,2,3,39]))}],jl="https://github.com/hope1026/weppy-roblox-mcp",hS="https://weppyai.com";function Bl(i){return i?/Mac OS X|Macintosh/i.test(i)?"macOS":/Windows NT/i.test(i)?"Windows":/Linux/i.test(i)?"Linux":"":""}function Kp(i){var v,P,C,D,U;const n=Bl(typeof navigator<"u"?navigator.userAgent:""),r=i.status,d=(r==null?void 0:r.version)??"",u=((P=(v=r==null?void 0:r.pluginClients)==null?void 0:v[0])==null?void 0:P.pluginVersion)??"",p=((D=(C=r==null?void 0:r.pluginClients)==null?void 0:C[0])==null?void 0:D.studioVersion)??"",g=d||u||p?[d?`MCP ${d}`:"",u?`Plugin ${u}`:"",p?`Studio ${p}`:""].filter(Boolean).join(" / "):"",y=((U=r==null?void 0:r.aiClientNames)==null?void 0:U[0])??"",h=(r==null?void 0:r.nodeVersion)??"";return{os:n,nodeVersion:h,aiClient:y,pluginVersionLabel:g}}function mS(i){const{os:n,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=Kp(i),p=new URLSearchParams;return p.set("template","bug_report.yml"),n&&p.set("os",n),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}function yS(i){const{os:n,nodeVersion:r,aiClient:d,pluginVersionLabel:u}=Kp(i),p=new URLSearchParams;return p.set("template","install_help.yml"),n&&p.set("os",n),r&&p.set("node",r),d&&p.set("ai-client",d),u&&p.set("plugin-version",u),p.toString()}const fS=[{id:"bug",labelKey:"sidebar.help.bug",tooltipKey:"sidebar.help.bug.tooltip",icon:Af,buildUrl:i=>`${jl}/issues/new?${mS(i)}`},{id:"feature",labelKey:"sidebar.help.feature",tooltipKey:"sidebar.help.feature.tooltip",icon:Vf,buildUrl:()=>`${jl}/issues/new?template=feature_request.yml`},{id:"discussions",labelKey:"sidebar.help.discussions",tooltipKey:"sidebar.help.discussions.tooltip",icon:Zf,buildUrl:i=>`${jl}/issues/new?${yS(i)}`},{id:"troubleshooting",labelKey:"sidebar.help.troubleshooting",tooltipKey:"sidebar.help.troubleshooting.tooltip",icon:xf,buildUrl:i=>`${hS}/${i.locale}/docs/troubleshooting/`}];function SS(){const[i,n]=R.useState("basic"),[r,d]=R.useState(0),[u,p]=R.useState(0),[g,y]=R.useState(0),[h,v]=R.useState(!0);R.useEffect(()=>{let C=!1;async function D(){try{return await Np("auto")}catch{return null}}async function U(){var N,te;try{const[K,$]=await Promise.all([D(),Et.get("/api/dashboard/tool-stats").catch(()=>null)]);if(C)return;if(K!=null&&K.tier&&n(K.tier),$!=null&&$.tierSummary){const G=((N=$.tierSummary.basic)==null?void 0:N.totalCalls)??0,he=((te=$.tierSummary.pro)==null?void 0:te.totalCalls)??0;y(G),p(he),d(G+he)}}catch{}finally{C||v(!1)}}U();const B=new Ql;B.connect();const H=B.on("license",()=>{D().then(N=>{!C&&(N!=null&&N.tier)&&n(N.tier)})});return()=>{C=!0,H(),B.disconnect()}},[]);const P=r>0?u/r*100:0;return{tier:i,proUsagePercent:P,totalCalls:r,proCalls:u,basicCalls:g,loading:h}}const vS="https://weppyai.com/plans/";function Ra(i){const n=new URLSearchParams({utm_source:"weppy_dashboard",utm_medium:"app",utm_campaign:"pro_upgrade",utm_content:i});return`${vS}?${n.toString()}`}const bS={sidebarUpgrade:Ra("sidebar_upgrade"),settingsLicense:Ra("settings_license"),sync:Ra("sync_tier_panel"),changelog:Ra("changelog_limit_notice"),playtest:Ra("playtest_sample_banner"),uiStudioAnalysis:Ra("ui_studio_analysis_banner"),uiStudioHistory:Ra("ui_studio_history_banner")},PS=5e3,CS=5;function wS(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function kS(i,n){const r=new URLSearchParams(n);if(i==="ui-studio")return r.get("tab")==="history"?"ui_studio_history":"ui_studio_analysis";if(i==="tools")return"tools_history";if(i==="changelog")return"changelog_all"}function ds(i,n){const r=wS(i);if(n===void 0)return r;const d=kS(r,n);return d?{page:r,tab:d}:{page:r}}let ci=[],np=null;function Yp(){if(ci.length===0)return;const i=ci.splice(0),n=`${zn}/api/dashboard/analytics`,r=JSON.stringify({events:i});fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:r}).catch(()=>{})}function xS(){np||(np=setInterval(Yp,PS))}function rp(i){ci.push(i),xS(),ci.length>=CS&&Yp()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(ci.length===0)return;const i=`${zn}/api/dashboard/analytics`,n=JSON.stringify({events:ci.splice(0)});navigator.sendBeacon(i,new Blob([n],{type:"application/json"}))});function us(){const i=R.useCallback((r,d)=>{rp({name:r,params:d})},[]),n=R.useCallback(r=>{rp({name:"dashboard_page_view",params:{...typeof r=="string"?{page:r}:r}})},[]);return{trackEvent:i,trackPageView:n}}const RS="_widget_1q1ab_1",AS="_header_1q1ab_12",IS="_sparkle_1q1ab_18",DS="_title_1q1ab_23",ES="_actions_1q1ab_31",TS="_cta_1q1ab_37",jS="_licenseCta_1q1ab_38",US="_collapsedGroup_1q1ab_70",MS="_collapsed_1q1ab_70",HS="_collapsedSecondary_1q1ab_91",oo={widget:RS,header:AS,sparkle:IS,title:DS,actions:ES,cta:TS,licenseCta:jS,collapsedGroup:US,collapsed:MS,collapsedSecondary:HS};function LS({collapsed:i=!1}){const{tier:n}=SS(),{t:r}=Uo(),{trackEvent:d}=us(),{pathname:u,search:p}=Yt();if(n==="pro")return null;const g=bS.sidebarUpgrade,y="/settings?section=license",h=ds(u,p),v=()=>{d("dashboard_click_event",{click_target:"upgrade_cta",placement:"sidebar_upgrade",...h})},P=()=>{d("dashboard_click_event",{click_target:"license_shortcut",placement:"sidebar_license",...h})};return i?x.jsxs("div",{className:oo.collapsedGroup,children:[x.jsx("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oo.collapsed,title:r("upgrade.title","View Pro"),"aria-label":r("upgrade.title","View Pro"),onClick:v,children:x.jsx(sp,{size:18,strokeWidth:1.75})}),x.jsx(Ea,{to:y,className:`${oo.collapsed} ${oo.collapsedSecondary}`,title:r("upgrade.licenseShortcut","Enter License"),"aria-label":r("upgrade.licenseShortcut","Enter License"),onClick:P,children:x.jsx(ip,{size:18,strokeWidth:1.75})})]}):x.jsxs("div",{className:oo.widget,children:[x.jsxs("div",{className:oo.header,children:[x.jsx(sp,{size:16,strokeWidth:1.75,className:oo.sparkle}),x.jsx("span",{className:oo.title,children:r("upgrade.tagline","Check Pro features")})]}),x.jsxs("div",{className:oo.actions,children:[x.jsxs("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:oo.cta,onClick:v,children:[r("upgrade.cta","View Pro")," →"]}),x.jsxs(Ea,{to:y,className:oo.licenseCta,onClick:P,children:[x.jsx(ip,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"}),x.jsx("span",{children:r("upgrade.licenseShortcut","Enter License")})]})]})]})}const zS="_backdrop_1r5ey_1",_S="_dialog_1r5ey_11",NS="_header_1r5ey_21",OS="_titleBlock_1r5ey_30",qS="_title_1r5ey_30",BS="_subtitle_1r5ey_42",WS="_closeButton_1r5ey_49",FS="_body_1r5ey_67",KS="_statusBox_1r5ey_73",YS="_errorBox_1r5ey_74",GS="_spin_1r5ey_92",VS="_bundleBlock_1r5ey_102",XS="_label_1r5ey_107",$S="_bundleName_1r5ey_115",QS="_guidanceBox_1r5ey_127",ZS="_includedList_1r5ey_143",JS="_includedItem_1r5ey_152",ev="_actions_1r5ey_163",tv="_button_1r5ey_169",ov="_primaryLink_1r5ey_170",av="_hint_1r5ey_206",We={backdrop:zS,dialog:_S,header:NS,titleBlock:OS,title:qS,subtitle:BS,closeButton:WS,body:FS,statusBox:KS,errorBox:YS,spin:GS,bundleBlock:VS,label:XS,bundleName:$S,guidanceBox:QS,includedList:ZS,includedItem:JS,actions:ev,button:tv,primaryLink:ov,hint:av};function Ul(){return typeof navigator<"u"?navigator.userAgent:""}function iv(i){window.open(i,"_blank","noopener,noreferrer")}function sv({open:i,fallbackHref:n,onClose:r}){const{locale:d,t:u}=Uo(),p=R.useId(),[g,y]=R.useState(!1),[h,v]=R.useState(null),[P,C]=R.useState(null),[D,U]=R.useState("idle");if(R.useEffect(()=>{if(!i)return;let G=!1;const he=Ul();return y(!0),v(null),C(null),U("idle"),Et.post("/api/dashboard/support/bug-report",{os:Bl(he),userAgent:he,locale:d}).then(De=>{G||(v(De),y(!1))}).catch(()=>{G||(C(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),y(!1))}),()=>{G=!0}},[i,d]),R.useEffect(()=>{if(!i||g)return;function G(he){he.key==="Escape"&&r()}return window.addEventListener("keydown",G),()=>window.removeEventListener("keydown",G)},[i,g,r]),!i)return null;async function B(){if(h)try{U("opening"),await Et.post("/api/dashboard/support/bug-report/reveal",{bundleName:h.bundleName}),U("opened")}catch{U("failed")}}const H=h!==null,N=(h==null?void 0:h.issueUrl)??n,te=(h==null?void 0:h.includedFiles)??[],K=D==="opening"?u("bugReportDialog.reveal.opening","Opening..."):D==="opened"?u("bugReportDialog.reveal.opened","Opened location"):u("bugReportDialog.reveal","Reveal in Finder"),$=x.jsx("div",{className:We.backdrop,onClick:g?void 0:r,children:x.jsxs("section",{className:We.dialog,role:"dialog","aria-modal":"true","aria-labelledby":p,onClick:G=>G.stopPropagation(),children:[x.jsxs("div",{className:We.header,children:[x.jsxs("div",{className:We.titleBlock,children:[x.jsx("h2",{id:p,className:We.title,children:u("bugReportDialog.title","diagnostics.zip can help us investigate")}),x.jsx("p",{className:We.subtitle,children:u("bugReportDialog.subtitle","WEPPY created a diagnostics zip on your computer. It includes Studio, plugin, Sync, and tool logs that can help us understand what happened.")})]}),x.jsx("button",{type:"button",className:We.closeButton,"aria-label":u("bugReportDialog.close","Close"),onClick:r,disabled:g,children:x.jsx(gS,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),x.jsxs("div",{className:We.body,children:[g&&x.jsxs("div",{className:We.statusBox,role:"status",children:[x.jsx($f,{className:We.spin,size:18,strokeWidth:1.75,"aria-hidden":"true"}),x.jsx("span",{children:u("bugReportDialog.loading","Preparing diagnostics.zip...")})]}),P&&x.jsxs("div",{className:We.errorBox,role:"alert",children:[x.jsx(Mf,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),x.jsx("span",{children:P})]}),H&&x.jsxs(x.Fragment,{children:[x.jsxs("div",{className:We.guidanceBox,children:[x.jsx("p",{children:u("bugReportDialog.optional","You can submit the bug report without this file, but attaching it usually helps us find the cause faster.")}),x.jsx("p",{children:u("bugReportDialog.attachHow","To attach it, download or reveal the zip, then add it to the Diagnostics ZIP (optional) upload field on GitHub before you submit.")})]}),x.jsxs("div",{className:We.bundleBlock,children:[x.jsx("span",{className:We.label,children:u("bugReportDialog.bundle","Bundle")}),x.jsx("code",{className:We.bundleName,children:h.bundleName})]}),x.jsxs("div",{className:We.bundleBlock,children:[x.jsx("span",{className:We.label,children:u("bugReportDialog.included","Included")}),x.jsx("ul",{className:We.includedList,children:te.length>0?te.map(G=>x.jsx("li",{className:We.includedItem,children:G.label},`${G.label}:${G.archivePath??G.path}`)):x.jsx("li",{className:We.includedItem,children:u("bugReportDialog.included.none","No log files found")})})]}),D==="failed"&&x.jsxs("div",{className:We.errorBox,role:"alert",children:[x.jsx(ap,{size:18,strokeWidth:1.75,"aria-hidden":"true"}),x.jsx("span",{children:u("bugReportDialog.reveal.failed","Could not open the file location.")})]})]}),x.jsxs("div",{className:We.actions,children:[H&&x.jsxs(x.Fragment,{children:[x.jsxs("a",{className:We.primaryLink,href:h.downloadUrl,download:h.bundleName,children:[x.jsx(Tf,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.download","1. Download diagnostics.zip")]}),x.jsxs("button",{type:"button",className:We.button,onClick:()=>void B(),disabled:D==="opening",children:[x.jsx(ap,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),K]})]}),P&&!H&&x.jsxs("button",{type:"button",className:We.button,onClick:()=>{C(null),y(!0),Et.post("/api/dashboard/support/bug-report",{os:Bl(Ul()),userAgent:Ul(),locale:d}).then(G=>{v(G),y(!1)}).catch(()=>{C(u("bugReportDialog.error","Could not create the diagnostics bundle. You can still open GitHub without diagnostics.")),y(!1)})},children:[x.jsx(Bp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),u("bugReportDialog.retry","Try again")]}),x.jsxs("button",{type:"button",className:We.button,onClick:()=>iv(N),disabled:g,children:[x.jsx(qp,{size:16,strokeWidth:1.75,"aria-hidden":"true"}),H?u("bugReportDialog.openGithub","2. Open GitHub issue"):u("bugReportDialog.openGithubFallback","Open GitHub without diagnostics")]})]}),x.jsx("p",{className:We.hint,children:u("bugReportDialog.hint","The zip can contain local logs and project context. Review it before attaching if you want to share it.")})]})]})});return typeof document>"u"?$:Un.createPortal($,document.body)}const nv="_sidebar_19hyu_2",rv="_brand_19hyu_17",lv="_brandIcon_19hyu_28",dv="_brandText_19hyu_33",uv="_brandTextPro_19hyu_44",cv="_nav_19hyu_50",pv="_spacer_19hyu_57",gv="_navLink_19hyu_63",hv="_active_19hyu_84",mv="_disabled_19hyu_91",yv="_icon_19hyu_102",fv="_label_19hyu_113",Sv="_secondaryDivider_19hyu_120",vv="_secondaryNav_19hyu_127",bv="_secondaryNavEntry_19hyu_134",Pv="_secondaryItemDivider_19hyu_140",Cv="_helpDivider_19hyu_147",wv="_helpGroupTitle_19hyu_154",kv="_helpNav_19hyu_165",xv="_externalIcon_19hyu_172",Je={sidebar:nv,brand:rv,brandIcon:lv,brandText:dv,brandTextPro:uv,nav:cv,spacer:pv,navLink:gv,active:hv,disabled:mv,icon:yv,label:fv,secondaryDivider:Sv,secondaryNav:vv,secondaryNavEntry:bv,secondaryItemDivider:Pv,helpDivider:Cv,helpGroupTitle:wv,helpNav:kv,externalIcon:xv},Rv={bug:"sidebar_help_bug",feature:"sidebar_help_feature",discussions:"sidebar_help_community",troubleshooting:"sidebar_help_troubleshooting"};function Av(){const[i,n]=R.useState(!1);return R.useEffect(()=>{if(typeof window>"u"||!window.matchMedia)return;const r=window.matchMedia("(max-width: 768px)"),d=()=>n(r.matches);return d(),r.addEventListener("change",d),()=>r.removeEventListener("change",d)},[]),i}const lp={disconnected:0,serverOnly:1,studioConnected:2};function Iv(i,n){return lp[i]>=lp[n]}function Dv(i,n){return i==="serverOnly"?n("sidebar.gate.l1","MCP server connection required"):i==="studioConnected"?n("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function dp({item:i}){const{level:n}=_n(),{t:r}=Uo(),d=Iv(n,i.minLevel),u=i.icon,p=x.jsxs(Iy,{to:i.route,end:i.route==="/",className:({isActive:g})=>[Je.navLink,g?Je.active:"",d?"":Je.disabled].filter(Boolean).join(" "),onClick:g=>{d||g.preventDefault()},children:[x.jsx("span",{className:Je.icon,children:x.jsx(u,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),x.jsx("span",{className:Je.label,children:r(i.labelKey)})]});return d?p:x.jsx(Ft,{text:Dv(i.minLevel,r),children:p})}function Ev({item:i,ctx:n}){const{t:r}=Uo(),{trackEvent:d}=us(),{pathname:u,search:p}=Yt(),g=i.icon,y=i.buildUrl(n),h=r(i.tooltipKey,""),v=ds(u,p),[P,C]=R.useState(!1),D=x.jsxs("a",{href:y,target:"_blank",rel:"noopener noreferrer",className:Je.navLink,"data-testid":`sidebar-help-${i.id}`,onClick:B=>{d("dashboard_click_event",{click_target:Rv[i.id],placement:"sidebar_help",...v}),i.id==="bug"&&(B.preventDefault(),C(!0))},children:[x.jsx("span",{className:Je.icon,children:x.jsx(g,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),x.jsx("span",{className:Je.label,children:r(i.labelKey)}),x.jsx("span",{className:Je.externalIcon,"aria-hidden":"true",children:x.jsx(qp,{size:12,strokeWidth:1.75})})]}),U=h?x.jsx(Ft,{text:h,children:D}):D;return x.jsxs(x.Fragment,{children:[U,i.id==="bug"&&x.jsx(sv,{open:P,fallbackHref:y,onClose:()=>C(!1)})]})}function Tv(){const[i,n]=R.useState("basic"),r=Av(),{status:d}=_n(),{locale:u,t:p}=Uo(),g={locale:u,status:d};return R.useEffect(()=>{let y=!1;async function h(){try{const C=await Np("auto");!y&&(C!=null&&C.tier)&&n(C.tier)}catch{y||n("basic")}}h();const v=new Ql;v.connect();const P=v.on("license",()=>{h()});return()=>{y=!0,P(),v.disconnect()}},[]),x.jsxs("aside",{className:Je.sidebar,children:[x.jsxs("div",{className:Je.brand,children:[x.jsx("span",{className:Je.brandIcon,children:x.jsx(Df,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})}),x.jsx("span",{"data-testid":"sidebar-brand-text",className:[Je.brandText,i==="pro"?Je.brandTextPro:""].filter(Boolean).join(" "),children:"WEPPY"})]}),x.jsx("nav",{className:Je.nav,children:Fp.map(y=>x.jsx(dp,{item:y},y.route))}),x.jsx("div",{className:Je.secondaryDivider}),x.jsx("nav",{className:Je.secondaryNav,children:ql.map((y,h)=>x.jsxs("div",{className:Je.secondaryNavEntry,children:[x.jsx(dp,{item:y}),h<ql.length-1?x.jsx("div",{className:Je.secondaryItemDivider,"data-testid":"sidebar-controls-whats-new-divider","aria-hidden":"true"}):null]},y.route))}),x.jsx("div",{className:Je.helpDivider,"aria-hidden":"true"}),x.jsx("div",{className:Je.helpGroupTitle,"aria-label":p("sidebar.help.group"),children:p("sidebar.help.group")}),x.jsx("nav",{className:Je.helpNav,"aria-label":p("sidebar.help.group"),children:fS.map(y=>x.jsx(Ev,{item:y,ctx:g},y.id))}),x.jsx("div",{className:Je.spacer}),x.jsx(LS,{collapsed:r})]})}async function jv(){return Et.get("/api/dashboard/place-summary")}async function Uv(){return Et.get("/api/dashboard/sync-root")}async function zb(){return Et.post("/api/dashboard/sync-root/pick")}async function _b(i){return Et.patch("/api/dashboard/sync-root",{projectRoot:i})}const Mv=[{id:"2026-07-17-natural-environment-generation",date:"2026-07-17",title:{en:"Natural environment generation is more detailed and controllable",ko:"자연 배경 생성 품질과 조절 기능을 개선했습니다",es:"Mejoramos la calidad y el control de la generación de entornos","pt-br":"Melhoramos a qualidade e o controle da geração de ambientes",ja:"自然な背景生成の品質と調整機能を改善しました",id:"Kualitas dan kontrol pembuatan lingkungan telah ditingkatkan",de:"Qualität und Steuerung der Umgebungsgenerierung wurden verbessert","fr-fr":"La qualité et le contrôle de la génération d’environnements ont été améliorés"},body:{en:`Existing terrain generation now produces more natural shapes. Large landforms and small surface variations appear together, materials change between ground and cliffs based on slope, and water and shorelines follow the terrain. Use mountain, hill, plain, dune, island, and canyon presets to adjust the result quickly.
|
|
315
|
+
|
|
316
|
+
Environment controls have also been expanded. Apply clear daylight, sunset, fog, storm, or night moods, then place tree and rock templates after checking ground slope and water. Set minimum spacing, rotation, and scale variation, and reuse the same seed to reproduce the terrain and placement.
|
|
317
|
+
|
|
318
|
+
Terrain generation, mood changes, and prop placement each work as one Studio Undo step. These improvements are available in Pro.`,ko:`기존 지형 생성이 더 자연스러운 형태를 만들도록 개선되었습니다. 큰 지형 형태와 작은 굴곡이 함께 나타나고, 경사에 따라 지표와 절벽 재질이 나뉘며, 물과 해안도 지형에 맞춰 생성됩니다. 산, 언덕, 평원, 사구, 섬, 협곡 프리셋으로 결과를 빠르게 조절할 수 있습니다.
|
|
319
|
+
|
|
320
|
+
배경 조절 범위도 넓어졌습니다. 맑은 낮, 일몰, 안개, 폭풍, 밤 등의 분위기를 적용하고, 나무나 바위 템플릿을 지면 경사와 물을 확인해 배치할 수 있습니다. 최소 간격, 회전, 크기 변화를 설정할 수 있고 같은 seed를 사용하면 같은 지형과 배치를 다시 만들 수 있습니다.
|
|
321
|
+
|
|
322
|
+
지형 생성, 무드 적용, 소품 배치는 각각 Studio Undo 한 번으로 되돌릴 수 있습니다. 이 개선 사항은 Pro에서 사용할 수 있습니다.`,es:`La generación de terreno existente se ha mejorado para crear formas más naturales. Las grandes formaciones y las pequeñas variaciones de la superficie aparecen juntas, los materiales cambian entre suelo y acantilado según la pendiente, y el agua y las orillas se adaptan al terreno. Usa los ajustes de montañas, colinas, llanuras, dunas, islas y cañones para ajustar el resultado con rapidez.
|
|
323
|
+
|
|
324
|
+
También ampliamos los controles del entorno. Aplica ambientes de día despejado, atardecer, niebla, tormenta o noche y coloca plantillas de árboles y rocas después de comprobar la pendiente y el agua. Define la separación mínima y las variaciones de rotación y escala, y reutiliza la misma semilla para reproducir el terreno y la distribución.
|
|
325
|
+
|
|
326
|
+
La generación de terreno, los cambios de ambiente y la colocación de objetos funcionan cada uno como un único paso de Undo en Studio. Estas mejoras están disponibles en Pro.`,"pt-br":`A geração de terreno existente foi aprimorada para criar formas mais naturais. Grandes formações e pequenas variações da superfície aparecem juntas, os materiais mudam entre solo e penhasco conforme a inclinação, e a água e as margens acompanham o terreno. Use predefinições de montanhas, colinas, planícies, dunas, ilhas e cânions para ajustar o resultado rapidamente.
|
|
327
|
+
|
|
328
|
+
Os controles do ambiente também foram ampliados. Aplique climas de dia claro, pôr do sol, neblina, tempestade ou noite e posicione modelos de árvores e rochas após verificar a inclinação e a água. Defina o espaçamento mínimo e as variações de rotação e escala, e reutilize a mesma seed para reproduzir o terreno e o posicionamento.
|
|
329
|
+
|
|
330
|
+
A geração de terreno, as mudanças de clima e o posicionamento de objetos funcionam, cada um, como uma única etapa de Undo no Studio. Essas melhorias estão disponíveis no Pro.`,ja:`既存の地形生成を、より自然な形状を作れるように改善しました。大きな地形の起伏と細かな表面変化が同時に現れ、傾斜に応じて地表と崖のマテリアルが切り替わり、水面と海岸線も地形に沿って生成されます。山、丘、平原、砂丘、島、峡谷のプリセットで結果をすばやく調整できます。
|
|
331
|
+
|
|
332
|
+
背景の調整範囲も広がりました。晴天、夕焼け、霧、嵐、夜のムードを適用し、地面の傾斜と水面を確認して木や岩のテンプレートを配置できます。最小間隔、回転、サイズの変化を設定し、同じseedで同じ地形と配置を再現できます。
|
|
333
|
+
|
|
334
|
+
地形生成、ムード適用、小物配置は、それぞれStudioのUndo 1回で元に戻せます。これらの改善はProで利用できます。`,id:`Pembuatan terrain yang sudah ada telah ditingkatkan agar menghasilkan bentuk yang lebih alami. Bentuk lahan besar dan variasi permukaan kecil muncul bersama, material berubah antara tanah dan tebing berdasarkan kemiringan, serta air dan garis pantai mengikuti terrain. Gunakan preset pegunungan, perbukitan, dataran, bukit pasir, pulau, dan ngarai untuk menyesuaikan hasil dengan cepat.
|
|
335
|
+
|
|
336
|
+
Kontrol lingkungan juga telah diperluas. Terapkan suasana siang cerah, matahari terbenam, kabut, badai, atau malam, lalu tempatkan template pohon dan batu setelah memeriksa kemiringan tanah dan air. Atur jarak minimum serta variasi rotasi dan skala, lalu gunakan seed yang sama untuk menghasilkan ulang terrain dan penempatan.
|
|
337
|
+
|
|
338
|
+
Pembuatan terrain, perubahan suasana, dan penempatan prop masing-masing dapat dibatalkan dengan satu langkah Undo di Studio. Peningkatan ini tersedia di Pro.`,de:`Die bestehende Geländegenerierung wurde verbessert und erzeugt natürlichere Formen. Große Landschaftsformen und kleine Oberflächenvariationen erscheinen gemeinsam, Materialien wechseln je nach Neigung zwischen Boden und Fels, und Wasser sowie Uferlinien folgen dem Gelände. Mit Presets für Berge, Hügel, Ebenen, Dünen, Inseln und Schluchten lässt sich das Ergebnis schnell anpassen.
|
|
339
|
+
|
|
340
|
+
Auch die Umgebungssteuerung wurde erweitert. Wenden Sie Stimmungen für klares Tageslicht, Sonnenuntergang, Nebel, Sturm oder Nacht an und platzieren Sie Baum- und Felsvorlagen nach Prüfung von Bodenneigung und Wasser. Legen Sie Mindestabstand sowie Rotations- und Größenvariationen fest und verwenden Sie denselben Seed, um Gelände und Platzierung zu reproduzieren.
|
|
341
|
+
|
|
342
|
+
Geländegenerierung, Stimmungsänderungen und Objektplatzierung lassen sich jeweils mit einem einzelnen Studio-Undo-Schritt zurücknehmen. Diese Verbesserungen sind in Pro verfügbar.`,"fr-fr":`La génération de terrain existante a été améliorée pour produire des formes plus naturelles. Les grandes formes du relief et les petites variations de surface apparaissent ensemble, les matériaux changent entre le sol et les falaises selon la pente, et l’eau ainsi que les rivages suivent le terrain. Utilisez les préréglages de montagnes, collines, plaines, dunes, îles et canyons pour ajuster rapidement le résultat.
|
|
343
|
+
|
|
344
|
+
Les réglages de l’environnement ont également été étendus. Appliquez une ambiance de plein jour, coucher de soleil, brouillard, orage ou nuit, puis placez des modèles d’arbres et de rochers après vérification de la pente et de l’eau. Définissez l’espacement minimal et les variations de rotation et d’échelle, puis réutilisez la même seed pour reproduire le terrain et la disposition.
|
|
345
|
+
|
|
346
|
+
La génération du terrain, les changements d’ambiance et le placement des objets correspondent chacun à une seule étape Undo dans Studio. Ces améliorations sont disponibles dans Pro.`},severity:"info",category:"release"},{id:"2026-07-03-sync-delete-policy-undo",date:"2026-07-03",title:{en:"Sync delete settings now work with Studio Undo",ko:"Sync 삭제 설정과 Studio Undo 처리를 추가했습니다",es:"Los ajustes de borrado de Sync ahora funcionan con Undo de Studio","pt-br":"As configurações de exclusão do Sync agora funcionam com Undo do Studio",ja:"Sync削除設定がStudioのUndoに対応しました",id:"Pengaturan hapus Sync sekarang bekerja dengan Undo Studio",de:"Sync-Löschoptionen funktionieren jetzt mit Studio Undo","fr-fr":"Les réglages de suppression Sync fonctionnent maintenant avec Undo dans Studio"},body:{en:`Sync now has a separate delete policy for cases where a local file deletion can remove the matching Studio instance. The default is to ask before deleting. You can change the Studio delete policy in the Sync direction card to Auto Delete, and WEPPY asks for confirmation before that setting is enabled.
|
|
315
347
|
|
|
316
348
|
When Sync applies local changes to Roblox Studio, those changes are now recorded in Studio history. Script edits, created instances, and local delete applies can be undone from Roblox Studio with Undo.
|
|
317
349
|
|
|
@@ -683,4 +715,4 @@ Saat memulai UI baru, AI lebih dulu merapikan kebutuhan — tujuan, layar, dan p
|
|
|
683
715
|
|
|
684
716
|
Hasil pemeriksaan, layar yang ditangkap, dan saran perbaikan dapat dilihat langsung di halaman UI Studio pada dashboard.
|
|
685
717
|
|
|
686
|
-
Minta seperti biasa: "Buatkan UI."`},severity:"info",category:"release"}],Jl="weppy-dashboard.whatsNew.readIds";function Gp(){try{const i=localStorage.getItem(Jl);if(!i)return new Set;const n=JSON.parse(i);return Array.isArray(n)?new Set(n.filter(r=>typeof r=="string")):new Set}catch{return new Set}}function Hv(i){try{localStorage.setItem(Jl,JSON.stringify([...i]))}catch{}}let di=Gp(),Vp=di;const Wl=new Set;function Xp(){Vp=new Set(di);for(const i of Wl)i()}const Ml={subscribe(i){return Wl.add(i),()=>{Wl.delete(i)}},getSnapshot(){return Vp},markRead(i){let n=!1;for(const r of i)di.has(r)||(di.add(r),n=!0);n&&(Hv(di),Xp())}};typeof window<"u"&&window.addEventListener("storage",i=>{i.key===Jl&&(di=Gp(),Xp())});function Lv(){const i=R.useSyncExternalStore(Ml.subscribe,Ml.getSnapshot),n=Mv.filter(r=>!i.has(r.id)).length;return{readSet:i,unreadCount:n,markRead:Ml.markRead}}const zv="_header_1do17_2",_v="_row1_1do17_17",Nv="_contextGroups_1do17_25",Ov="_projectGroup_1do17_33",qv="_studioGroup_1do17_34",Bv="_groupTitleRow_1do17_52",Wv="_groupLabel_1do17_59",Fv="_groupIcon_1do17_73",Kv="_projectName_1do17_78",Yv="_placeChips_1do17_90",Gv="_metaActions_1do17_99",Vv="_placeChip_1do17_90",Xv="_placeChipStatic_1do17_122",$v="_placeChipMuted_1do17_123",Qv="_placeChipActive_1do17_127",Zv="_placeChipInactive_1do17_134",Jv="_placeChipId_1do17_145",eb="_placeChipClient_1do17_160",tb="_placeChipState_1do17_166",ob="_placeChipBadge_1do17_172",ab="_placeDot_1do17_180",ib="_placeChipName_1do17_188",sb="_row2_1do17_196",nb="_pathRow_1do17_208",rb="_auxiliaryPath_1do17_209",lb="_pathLabel_1do17_221",db="_projectPath_1do17_232",ub="_changeButton_1do17_242",cb="_iconButton_1do17_276",be={header:zv,row1:_v,contextGroups:Nv,projectGroup:Ov,studioGroup:qv,groupTitleRow:Bv,groupLabel:Wv,groupIcon:Fv,projectName:Kv,placeChips:Yv,metaActions:Gv,placeChip:Vv,placeChipStatic:Xv,placeChipMuted:$v,placeChipActive:Qv,placeChipInactive:Zv,placeChipId:Jv,placeChipClient:eb,placeChipState:tb,placeChipBadge:ob,placeDot:ab,placeChipName:ib,row2:sb,pathRow:nb,auxiliaryPath:rb,pathLabel:lb,projectPath:db,changeButton:ub,iconButton:cb},pb="_bellWrapper_tae21_2",gb="_unreadDot_tae21_8",up={bellWrapper:pb,unreadDot:gb};function hb(){const{t:i}=Uo(),{unreadCount:n}=Lv(),{trackEvent:r}=us(),{pathname:d,search:u}=Yt(),p=ds(d,u),g=n>0?`${i("header.whatsNew","What's New")} (${n})`:i("header.whatsNew","What's New");return x.jsx(Ft,{text:i("header.whatsNew.tooltip","What's New"),children:x.jsxs("span",{className:up.bellWrapper,children:[x.jsx(Ea,{to:"/whats-new","aria-label":g,className:be.iconButton,onClick:()=>r("dashboard_click_event",{click_target:"top_header_notification_bell",placement:"top_header",...p}),children:"🔔"}),n>0&&x.jsx("span",{className:up.unreadDot,"data-testid":"unread-dot","aria-hidden":"true"})]})})}function $p(i,n,r){const d=n==="pinned"?r:null;return[...i].sort((u,p)=>mb(u,p,d))}function Nb(i,n,r){return $p(i,n,r)[0]}function mb(i,n,r){if(r){const h=i.clientId===r,v=n.clientId===r;if(h!==v)return h?-1:1}const d=i.lastRoutedAt,u=n.lastRoutedAt,p=d!==void 0;if(p!==(u!==void 0))return p?-1:1;if(d!==void 0&&u!==void 0&&d!==u)return u-d;const y=(i.connectedAt??0)-(n.connectedAt??0);return y!==0?y:i.clientId.localeCompare(n.clientId)}function cp(i){if(!i)return"";const n=i.split(/[\\/]/).filter(Boolean);return n[n.length-1]??""}function yb(i){var d,u;const n=((d=i==null?void 0:i.mcpInstances)==null?void 0:d.filter(p=>!p.isServer&&p.aiClientName))??[];if(n.length===0){const p=((u=i==null?void 0:i.mcpInstances)==null?void 0:u.find(g=>!!g.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}n.sort((p,g)=>(g.lastCommandAt??g.connectedAt)-(p.lastCommandAt??p.connectedAt));const r=n[0];return r.projectRoot??r.cwd??null}function pp(i,n){return i??n}function fb(i){const n=i.replace(/^\//,"").split("/")[0];return n===""||n==="overview"}function Sb(i){return i.replace(/^\//,"").split("/")[0]==="whats-new"}function vb(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function gp(i,n){return Object.entries(n).reduce((r,[d,u])=>r.split(`{${d}}`).join(u||"-"),i)}function bb(i,n){const r=i.studioState??"unknown",d={edit:n("connection.targets.studioState.edit","Edit"),running:n("connection.targets.studioState.running","Running"),paused:n("connection.targets.studioState.paused","Paused"),unknown:n("connection.targets.studioState.unknown","Unknown")},u=i.playtestMode&&i.playtestMode!=="unknown"?`/${i.playtestMode}`:"";return`${d[r]}${u}`}function Pb(){var M,ye;const{pathname:i,search:n}=Yt(),{level:r,status:d}=_n(),{t:u}=Uo(),{trackEvent:p}=us(),[g,y]=R.useState(null),[h,v]=R.useState(null),[P,C]=R.useState(null),[D,U]=R.useState(!1),B=u("header.placeNotConnected","Place not connected"),H=(d==null?void 0:d.studioRoutingMode)??"recentPriority",N=(d==null?void 0:d.pinnedTargetClientId)??null,te=$p((d==null?void 0:d.pluginClients)??[],H,N),K=te[0],$=fb(i),G=Sb(i),he=ds(i,n);R.useEffect(()=>{let F=!1;async function ie(){if(r==="disconnected"){y(null);return}try{const ue=await Et.get("/connection-info");F||y(ue)}catch{F||y(null)}}return ie(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),R.useEffect(()=>{let F=!1;async function ie(){if(r==="disconnected"){v(null),U(!1);return}v(null),U(!1);try{const ue=await Uv();F||(v(ue),U(!1))}catch{F||(v(null),U(!0))}}return ie(),()=>{F=!0}},[$,r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),R.useEffect(()=>{let F=!1;async function ie(){if(r==="disconnected"){C(null);return}try{const ue=await jv();F||C(ue)}catch{F||C(null)}}return ie(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]);const De=yb(g)??"",E=r==="disconnected"?"blocked":h?"ready":D?"error":"loading",Q=E==="ready"?(h==null?void 0:h.projectRoot)??"":E==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"),Pe=E==="ready"?(h==null?void 0:h.projectRoot)??"":$?"":De,ce=$||E==="ready"?E==="ready"?cp(Pe)||u("header.unknownProject","Unknown project"):E==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"):cp(Pe)||u("header.unknownProject","Unknown project"),Le=pp((ye=(M=d==null?void 0:d.pluginClients)==null?void 0:M[0])==null?void 0:ye.placeName,B),ve=P!=null&&P.pluginConnected?P.activePlaceId:(P==null?void 0:P.lastActivePlaceId)??null,Te=[...(P==null?void 0:P.places)??[]].sort((F,ie)=>{const ue=F.placeId===ve,Ce=ie.placeId===ve;return ue!==Ce?ue?-1:1:F.isConnected!==ie.isConnected?F.isConnected?-1:1:F.placeName.localeCompare(ie.placeName)}),ze=te.length>0?Te.filter(F=>!te.some(ie=>ie.placeId!==void 0&&ie.placeId===F.placeId)):Te,et=$?E==="loading"?u("header.currentProject.loading.tooltip","Project root information is still loading"):E==="error"?u("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):u("header.currentProject.tooltip","Currently selected project folder"):u("header.currentProject.tooltip","Currently selected project folder"),ot=u("header.manageProjectRoot.tooltip","Open Project Root controls"),_e=u("header.activeStudio.tooltip","Connected Studio targets that MCP can route requests to. Studio Routing changes the priority for requests without a named Studio target."),O=Te.find(F=>F.placeId===ve)??null,de=vb(i),V=h!=null&&h.projectSyncRoot&&O?`${h.projectSyncRoot}/${O.placeDirName}`:null,w=de==="playtest"?O!=null&&O.testsPath?{label:u("header.testFiles.label","Test Files"),value:O.testsPath,tooltip:u("header.testFiles.tooltip","Current playtest files directory for the selected place")}:null:["sync","changelog","ui-studio"].includes(de)&&V?{label:u("header.placeData.label","Place Data"),value:V,tooltip:u("header.placeData.tooltip","Current place data directory")}:null;return x.jsx(x.Fragment,{children:x.jsxs("header",{className:be.header,children:[x.jsxs("div",{className:be.row1,children:[x.jsxs("div",{className:be.contextGroups,children:[x.jsxs("section",{className:be.projectGroup,"aria-label":u("header.projectGroup.label","Project"),children:[x.jsxs("div",{className:be.groupTitleRow,children:[x.jsxs("span",{className:be.groupLabel,children:[x.jsx(zf,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:be.groupIcon}),u("header.projectGroup.label","Project")]}),x.jsx(Ft,{text:et,children:x.jsx("h1",{className:be.projectName,children:ce})}),x.jsx(Ft,{text:ot,children:x.jsx(Ea,{to:"/controls?section=project-root",className:be.changeButton,onClick:()=>p("dashboard_click_event",{click_target:"project_root_manage",placement:"top_header",...he}),children:u("header.manageProjectRoot","Manage Project Root")})})]}),x.jsxs("div",{className:be.pathRow,children:[x.jsx("span",{className:be.pathLabel,children:u("header.projectRoot.label","Project Root")}),x.jsx("span",{className:be.projectPath,title:Q,children:Q})]})]}),x.jsxs("section",{className:be.studioGroup,"aria-label":u("header.activeStudio.label","Active Studio"),children:[x.jsx(Ft,{text:_e,children:x.jsxs("span",{className:be.groupLabel,children:[x.jsx(eS,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:be.groupIcon}),u("header.activeStudio.label","Active Studio")]})}),x.jsxs("div",{className:be.placeChips,children:[te.map(F=>{const ie=F.targetAlias,ue=pp(F.placeName,B),Ce=F.connectionState??"connected",ke=te.filter(yo=>yo.placeId!==void 0&&yo.placeId===F.placeId).length>1,je=H==="pinned"&&N===F.clientId?u("connection.routing.pinnedBadge","Pinned"):H==="recentPriority"&&(K==null?void 0:K.clientId)===F.clientId?u("connection.routing.priorityBadge","Priority"):"-",gt=gp(u("header.studioTarget.tooltip","Studio ID: {studioId} · Connection ID: {connectionId} · Place: {placeName} · Place ID: {placeId} · State: {state} · Runtime: {runtimeState} · Routing: {routing}"),{studioId:ie,connectionId:F.clientId,placeName:ue,placeId:F.placeId!==void 0?String(F.placeId):"-",state:Ce,runtimeState:bb(F,u),routing:je});return x.jsx(Ft,{text:gt,children:x.jsxs("span",{className:`${be.placeChip} ${be.placeChipStatic} ${be.placeChipActive}`,children:[x.jsx("span",{className:be.placeDot,"aria-hidden":"true"}),x.jsx("span",{className:be.placeChipName,children:ue}),F.placeId!==void 0?x.jsx("span",{className:be.placeChipId,children:F.placeId}):null,x.jsx("span",{className:be.placeChipState,children:Ce}),ke?x.jsx("span",{className:be.placeChipClient,children:ie}):null,je!=="-"?x.jsx("span",{className:be.placeChipBadge,children:je}):null]})},F.clientId)}),te.length===0&&ze.length===0?x.jsx(Ft,{text:u("header.activeStudio.emptyTooltip","No Studio plugin is connected. Open Roblox Studio and connect the WEPPY Plugin."),children:x.jsx("span",{className:`${be.placeChip} ${be.placeChipMuted}`,children:x.jsx("span",{className:be.placeChipName,children:Le})})}):ze.map(F=>{const ie=F.placeId===ve,ue=!!(P!=null&&P.pluginConnected)&&F.isConnected,Ce=ue?u("header.places.active","Active"):u("header.places.inactive","Inactive"),ke=gp(u("header.storedPlace.tooltip","Stored project place: {placeName} · Place ID: {placeId} · State: {state}"),{placeName:F.placeName,placeId:String(F.placeId),state:Ce}),je=[be.placeChip,be.placeChipStatic,ie&&ue?be.placeChipActive:be.placeChipInactive].filter(Boolean).join(" ");return x.jsx(Ft,{text:ke,children:x.jsxs("span",{className:je,children:[ie&&ue?x.jsx("span",{className:be.placeDot,"aria-hidden":"true"}):null,x.jsx("span",{className:be.placeChipName,children:F.placeName}),x.jsx("span",{className:be.placeChipId,children:F.placeId})]})},`${F.placeId}:${F.placeDirName}`)})]})]})]}),x.jsxs("div",{className:be.metaActions,children:[!G&&x.jsx(hb,{}),x.jsx(Ft,{text:u("sidebar.controls","Controls"),children:x.jsx(Ea,{to:"/controls","aria-label":u("sidebar.controls","Controls"),className:be.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_controls",placement:"top_header",...he}),children:x.jsx(Wp,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})}),x.jsx(Ft,{text:u("sidebar.settings","Settings"),children:x.jsx(Ea,{to:"/settings","aria-label":u("sidebar.settings","Settings"),className:be.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_settings",placement:"top_header",...he}),children:x.jsx(rS,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})})]})]}),x.jsx("div",{className:be.row2,"data-testid":"top-header-auxiliary-slot","data-state":w?"visible":"empty","aria-hidden":w?void 0:!0,children:w?x.jsx(Ft,{text:w.tooltip,children:x.jsxs("div",{className:be.auxiliaryPath,children:[x.jsx("span",{className:be.pathLabel,children:w.label}),x.jsx("span",{className:be.projectPath,title:w.value,children:w.value})]})}):null})]})})}const Cb="_layout_ya8ln_2",wb="_mainShell_ya8ln_8",kb="_content_ya8ln_17",xb="_loading_ya8ln_25",In={layout:Cb,mainShell:wb,content:kb,loading:xb};function Rb(){const{pathname:i,search:n}=Yt(),{trackPageView:r}=us();return R.useEffect(()=>{r(ds(i,n))},[i,n,r]),null}function Ab(){const{t:i}=Uo();return x.jsx("div",{className:In.loading,children:i("common.loading","Loading...")})}function Ib(){return x.jsx(Zy,{children:x.jsx(lf,{children:x.jsxs(qy,{children:[x.jsx(uf,{}),x.jsx(Rb,{}),x.jsxs("div",{className:In.layout,children:[x.jsx(Tv,{}),x.jsxs("div",{className:In.mainShell,children:[x.jsx(Pb,{}),x.jsx("main",{className:In.content,children:x.jsx(R.Suspense,{fallback:x.jsx(Ab,{}),children:x.jsx(ny,{})})})]})]})]})})})}function hp(i){return i.route==="/"?{index:!0,lazy:i.lazy}:{path:i.route.slice(1),lazy:i.lazy}}const Db=my([{path:"/",element:x.jsx(Ib,{}),children:[...Fp.map(hp),...ql.map(hp),{path:"changelog/:id",lazy:()=>Kt(()=>import("./ChangelogDetailPage-gvZDaLft.js"),__vite__mapDeps([40,1,7,8,6,41]))},{path:"settings",lazy:()=>Kt(()=>import("./SettingsPage-ClSPo4J8.js"),__vite__mapDeps([42,2,3,1,6,36,37,12,13,14,30,31,43]))}]}]);qh.createRoot(document.getElementById("root")).render(x.jsx(wy,{router:Db}));export{Ta as A,Mb as B,Hb as C,Ql as D,qp as E,Lb as F,Lv as G,Mv as H,Wf as I,Un as J,Ea as L,eS as M,jb as N,oS as P,Bp as R,$y as S,bS as T,gS as X,Et as a,Tb as b,$l as c,Yt as d,us as e,_n as f,jv as g,SS as h,Ke as i,x as j,Ft as k,df as l,ds as m,zn as n,Tf as o,rS as p,Ly as q,R as r,$p as s,Ub as t,Uo as u,Uv as v,_b as w,zb as x,Nb as y,Np as z};
|
|
718
|
+
Minta seperti biasa: "Buatkan UI."`},severity:"info",category:"release"}],Jl="weppy-dashboard.whatsNew.readIds";function Gp(){try{const i=localStorage.getItem(Jl);if(!i)return new Set;const n=JSON.parse(i);return Array.isArray(n)?new Set(n.filter(r=>typeof r=="string")):new Set}catch{return new Set}}function Hv(i){try{localStorage.setItem(Jl,JSON.stringify([...i]))}catch{}}let di=Gp(),Vp=di;const Wl=new Set;function Xp(){Vp=new Set(di);for(const i of Wl)i()}const Ml={subscribe(i){return Wl.add(i),()=>{Wl.delete(i)}},getSnapshot(){return Vp},markRead(i){let n=!1;for(const r of i)di.has(r)||(di.add(r),n=!0);n&&(Hv(di),Xp())}};typeof window<"u"&&window.addEventListener("storage",i=>{i.key===Jl&&(di=Gp(),Xp())});function Lv(){const i=R.useSyncExternalStore(Ml.subscribe,Ml.getSnapshot),n=Mv.filter(r=>!i.has(r.id)).length;return{readSet:i,unreadCount:n,markRead:Ml.markRead}}const zv="_header_1do17_2",_v="_row1_1do17_17",Nv="_contextGroups_1do17_25",Ov="_projectGroup_1do17_33",qv="_studioGroup_1do17_34",Bv="_groupTitleRow_1do17_52",Wv="_groupLabel_1do17_59",Fv="_groupIcon_1do17_73",Kv="_projectName_1do17_78",Yv="_placeChips_1do17_90",Gv="_metaActions_1do17_99",Vv="_placeChip_1do17_90",Xv="_placeChipStatic_1do17_122",$v="_placeChipMuted_1do17_123",Qv="_placeChipActive_1do17_127",Zv="_placeChipInactive_1do17_134",Jv="_placeChipId_1do17_145",eb="_placeChipClient_1do17_160",tb="_placeChipState_1do17_166",ob="_placeChipBadge_1do17_172",ab="_placeDot_1do17_180",ib="_placeChipName_1do17_188",sb="_row2_1do17_196",nb="_pathRow_1do17_208",rb="_auxiliaryPath_1do17_209",lb="_pathLabel_1do17_221",db="_projectPath_1do17_232",ub="_changeButton_1do17_242",cb="_iconButton_1do17_276",be={header:zv,row1:_v,contextGroups:Nv,projectGroup:Ov,studioGroup:qv,groupTitleRow:Bv,groupLabel:Wv,groupIcon:Fv,projectName:Kv,placeChips:Yv,metaActions:Gv,placeChip:Vv,placeChipStatic:Xv,placeChipMuted:$v,placeChipActive:Qv,placeChipInactive:Zv,placeChipId:Jv,placeChipClient:eb,placeChipState:tb,placeChipBadge:ob,placeDot:ab,placeChipName:ib,row2:sb,pathRow:nb,auxiliaryPath:rb,pathLabel:lb,projectPath:db,changeButton:ub,iconButton:cb},pb="_bellWrapper_tae21_2",gb="_unreadDot_tae21_8",up={bellWrapper:pb,unreadDot:gb};function hb(){const{t:i}=Uo(),{unreadCount:n}=Lv(),{trackEvent:r}=us(),{pathname:d,search:u}=Yt(),p=ds(d,u),g=n>0?`${i("header.whatsNew","What's New")} (${n})`:i("header.whatsNew","What's New");return x.jsx(Ft,{text:i("header.whatsNew.tooltip","What's New"),children:x.jsxs("span",{className:up.bellWrapper,children:[x.jsx(Ea,{to:"/whats-new","aria-label":g,className:be.iconButton,onClick:()=>r("dashboard_click_event",{click_target:"top_header_notification_bell",placement:"top_header",...p}),children:"🔔"}),n>0&&x.jsx("span",{className:up.unreadDot,"data-testid":"unread-dot","aria-hidden":"true"})]})})}function $p(i,n,r){const d=n==="pinned"?r:null;return[...i].sort((u,p)=>mb(u,p,d))}function Nb(i,n,r){return $p(i,n,r)[0]}function mb(i,n,r){if(r){const h=i.clientId===r,v=n.clientId===r;if(h!==v)return h?-1:1}const d=i.lastRoutedAt,u=n.lastRoutedAt,p=d!==void 0;if(p!==(u!==void 0))return p?-1:1;if(d!==void 0&&u!==void 0&&d!==u)return u-d;const y=(i.connectedAt??0)-(n.connectedAt??0);return y!==0?y:i.clientId.localeCompare(n.clientId)}function cp(i){if(!i)return"";const n=i.split(/[\\/]/).filter(Boolean);return n[n.length-1]??""}function yb(i){var d,u;const n=((d=i==null?void 0:i.mcpInstances)==null?void 0:d.filter(p=>!p.isServer&&p.aiClientName))??[];if(n.length===0){const p=((u=i==null?void 0:i.mcpInstances)==null?void 0:u.find(g=>!!g.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}n.sort((p,g)=>(g.lastCommandAt??g.connectedAt)-(p.lastCommandAt??p.connectedAt));const r=n[0];return r.projectRoot??r.cwd??null}function pp(i,n){return i??n}function fb(i){const n=i.replace(/^\//,"").split("/")[0];return n===""||n==="overview"}function Sb(i){return i.replace(/^\//,"").split("/")[0]==="whats-new"}function vb(i){return i.replace(/^\//,"").split("/")[0]||"overview"}function gp(i,n){return Object.entries(n).reduce((r,[d,u])=>r.split(`{${d}}`).join(u||"-"),i)}function bb(i,n){const r=i.studioState??"unknown",d={edit:n("connection.targets.studioState.edit","Edit"),running:n("connection.targets.studioState.running","Running"),paused:n("connection.targets.studioState.paused","Paused"),unknown:n("connection.targets.studioState.unknown","Unknown")},u=i.playtestMode&&i.playtestMode!=="unknown"?`/${i.playtestMode}`:"";return`${d[r]}${u}`}function Pb(){var M,ye;const{pathname:i,search:n}=Yt(),{level:r,status:d}=_n(),{t:u}=Uo(),{trackEvent:p}=us(),[g,y]=R.useState(null),[h,v]=R.useState(null),[P,C]=R.useState(null),[D,U]=R.useState(!1),B=u("header.placeNotConnected","Place not connected"),H=(d==null?void 0:d.studioRoutingMode)??"recentPriority",N=(d==null?void 0:d.pinnedTargetClientId)??null,te=$p((d==null?void 0:d.pluginClients)??[],H,N),K=te[0],$=fb(i),G=Sb(i),he=ds(i,n);R.useEffect(()=>{let F=!1;async function ie(){if(r==="disconnected"){y(null);return}try{const ue=await Et.get("/connection-info");F||y(ue)}catch{F||y(null)}}return ie(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),R.useEffect(()=>{let F=!1;async function ie(){if(r==="disconnected"){v(null),U(!1);return}v(null),U(!1);try{const ue=await Uv();F||(v(ue),U(!1))}catch{F||(v(null),U(!0))}}return ie(),()=>{F=!0}},[$,r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]),R.useEffect(()=>{let F=!1;async function ie(){if(r==="disconnected"){C(null);return}try{const ue=await jv();F||C(ue)}catch{F||C(null)}}return ie(),()=>{F=!0}},[r,d==null?void 0:d.sessionId,d==null?void 0:d.connectedClients]);const De=yb(g)??"",E=r==="disconnected"?"blocked":h?"ready":D?"error":"loading",Q=E==="ready"?(h==null?void 0:h.projectRoot)??"":E==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"),Pe=E==="ready"?(h==null?void 0:h.projectRoot)??"":$?"":De,ce=$||E==="ready"?E==="ready"?cp(Pe)||u("header.unknownProject","Unknown project"):E==="loading"?u("header.currentProject.loading","Loading project root..."):u("header.currentProject.unavailable","Project root unavailable"):cp(Pe)||u("header.unknownProject","Unknown project"),Le=pp((ye=(M=d==null?void 0:d.pluginClients)==null?void 0:M[0])==null?void 0:ye.placeName,B),ve=P!=null&&P.pluginConnected?P.activePlaceId:(P==null?void 0:P.lastActivePlaceId)??null,Te=[...(P==null?void 0:P.places)??[]].sort((F,ie)=>{const ue=F.placeId===ve,Ce=ie.placeId===ve;return ue!==Ce?ue?-1:1:F.isConnected!==ie.isConnected?F.isConnected?-1:1:F.placeName.localeCompare(ie.placeName)}),ze=te.length>0?Te.filter(F=>!te.some(ie=>ie.placeId!==void 0&&ie.placeId===F.placeId)):Te,et=$?E==="loading"?u("header.currentProject.loading.tooltip","Project root information is still loading"):E==="error"?u("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):u("header.currentProject.tooltip","Currently selected project folder"):u("header.currentProject.tooltip","Currently selected project folder"),ot=u("header.manageProjectRoot.tooltip","Open Project Root controls"),_e=u("header.activeStudio.tooltip","Connected Studio targets that MCP can route requests to. Studio Routing changes the priority for requests without a named Studio target."),O=Te.find(F=>F.placeId===ve)??null,de=vb(i),V=h!=null&&h.projectSyncRoot&&O?`${h.projectSyncRoot}/${O.placeDirName}`:null,w=de==="playtest"?O!=null&&O.testsPath?{label:u("header.testFiles.label","Test Files"),value:O.testsPath,tooltip:u("header.testFiles.tooltip","Current playtest files directory for the selected place")}:null:["sync","changelog","ui-studio"].includes(de)&&V?{label:u("header.placeData.label","Place Data"),value:V,tooltip:u("header.placeData.tooltip","Current place data directory")}:null;return x.jsx(x.Fragment,{children:x.jsxs("header",{className:be.header,children:[x.jsxs("div",{className:be.row1,children:[x.jsxs("div",{className:be.contextGroups,children:[x.jsxs("section",{className:be.projectGroup,"aria-label":u("header.projectGroup.label","Project"),children:[x.jsxs("div",{className:be.groupTitleRow,children:[x.jsxs("span",{className:be.groupLabel,children:[x.jsx(zf,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:be.groupIcon}),u("header.projectGroup.label","Project")]}),x.jsx(Ft,{text:et,children:x.jsx("h1",{className:be.projectName,children:ce})}),x.jsx(Ft,{text:ot,children:x.jsx(Ea,{to:"/controls?section=project-root",className:be.changeButton,onClick:()=>p("dashboard_click_event",{click_target:"project_root_manage",placement:"top_header",...he}),children:u("header.manageProjectRoot","Manage Project Root")})})]}),x.jsxs("div",{className:be.pathRow,children:[x.jsx("span",{className:be.pathLabel,children:u("header.projectRoot.label","Project Root")}),x.jsx("span",{className:be.projectPath,title:Q,children:Q})]})]}),x.jsxs("section",{className:be.studioGroup,"aria-label":u("header.activeStudio.label","Active Studio"),children:[x.jsx(Ft,{text:_e,children:x.jsxs("span",{className:be.groupLabel,children:[x.jsx(eS,{size:14,strokeWidth:1.75,"aria-hidden":"true",focusable:"false",className:be.groupIcon}),u("header.activeStudio.label","Active Studio")]})}),x.jsxs("div",{className:be.placeChips,children:[te.map(F=>{const ie=F.targetAlias,ue=pp(F.placeName,B),Ce=F.connectionState??"connected",ke=te.filter(yo=>yo.placeId!==void 0&&yo.placeId===F.placeId).length>1,je=H==="pinned"&&N===F.clientId?u("connection.routing.pinnedBadge","Pinned"):H==="recentPriority"&&(K==null?void 0:K.clientId)===F.clientId?u("connection.routing.priorityBadge","Priority"):"-",gt=gp(u("header.studioTarget.tooltip","Studio ID: {studioId} · Connection ID: {connectionId} · Place: {placeName} · Place ID: {placeId} · State: {state} · Runtime: {runtimeState} · Routing: {routing}"),{studioId:ie,connectionId:F.clientId,placeName:ue,placeId:F.placeId!==void 0?String(F.placeId):"-",state:Ce,runtimeState:bb(F,u),routing:je});return x.jsx(Ft,{text:gt,children:x.jsxs("span",{className:`${be.placeChip} ${be.placeChipStatic} ${be.placeChipActive}`,children:[x.jsx("span",{className:be.placeDot,"aria-hidden":"true"}),x.jsx("span",{className:be.placeChipName,children:ue}),F.placeId!==void 0?x.jsx("span",{className:be.placeChipId,children:F.placeId}):null,x.jsx("span",{className:be.placeChipState,children:Ce}),ke?x.jsx("span",{className:be.placeChipClient,children:ie}):null,je!=="-"?x.jsx("span",{className:be.placeChipBadge,children:je}):null]})},F.clientId)}),te.length===0&&ze.length===0?x.jsx(Ft,{text:u("header.activeStudio.emptyTooltip","No Studio plugin is connected. Open Roblox Studio and connect the WEPPY Plugin."),children:x.jsx("span",{className:`${be.placeChip} ${be.placeChipMuted}`,children:x.jsx("span",{className:be.placeChipName,children:Le})})}):ze.map(F=>{const ie=F.placeId===ve,ue=!!(P!=null&&P.pluginConnected)&&F.isConnected,Ce=ue?u("header.places.active","Active"):u("header.places.inactive","Inactive"),ke=gp(u("header.storedPlace.tooltip","Stored project place: {placeName} · Place ID: {placeId} · State: {state}"),{placeName:F.placeName,placeId:String(F.placeId),state:Ce}),je=[be.placeChip,be.placeChipStatic,ie&&ue?be.placeChipActive:be.placeChipInactive].filter(Boolean).join(" ");return x.jsx(Ft,{text:ke,children:x.jsxs("span",{className:je,children:[ie&&ue?x.jsx("span",{className:be.placeDot,"aria-hidden":"true"}):null,x.jsx("span",{className:be.placeChipName,children:F.placeName}),x.jsx("span",{className:be.placeChipId,children:F.placeId})]})},`${F.placeId}:${F.placeDirName}`)})]})]})]}),x.jsxs("div",{className:be.metaActions,children:[!G&&x.jsx(hb,{}),x.jsx(Ft,{text:u("sidebar.controls","Controls"),children:x.jsx(Ea,{to:"/controls","aria-label":u("sidebar.controls","Controls"),className:be.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_controls",placement:"top_header",...he}),children:x.jsx(Wp,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})}),x.jsx(Ft,{text:u("sidebar.settings","Settings"),children:x.jsx(Ea,{to:"/settings","aria-label":u("sidebar.settings","Settings"),className:be.iconButton,onClick:()=>p("dashboard_click_event",{click_target:"top_header_settings",placement:"top_header",...he}),children:x.jsx(rS,{size:18,strokeWidth:1.75,"aria-hidden":"true",focusable:"false"})})})]})]}),x.jsx("div",{className:be.row2,"data-testid":"top-header-auxiliary-slot","data-state":w?"visible":"empty","aria-hidden":w?void 0:!0,children:w?x.jsx(Ft,{text:w.tooltip,children:x.jsxs("div",{className:be.auxiliaryPath,children:[x.jsx("span",{className:be.pathLabel,children:w.label}),x.jsx("span",{className:be.projectPath,title:w.value,children:w.value})]})}):null})]})})}const Cb="_layout_ya8ln_2",wb="_mainShell_ya8ln_8",kb="_content_ya8ln_17",xb="_loading_ya8ln_25",In={layout:Cb,mainShell:wb,content:kb,loading:xb};function Rb(){const{pathname:i,search:n}=Yt(),{trackPageView:r}=us();return R.useEffect(()=>{r(ds(i,n))},[i,n,r]),null}function Ab(){const{t:i}=Uo();return x.jsx("div",{className:In.loading,children:i("common.loading","Loading...")})}function Ib(){return x.jsx(Zy,{children:x.jsx(lf,{children:x.jsxs(qy,{children:[x.jsx(uf,{}),x.jsx(Rb,{}),x.jsxs("div",{className:In.layout,children:[x.jsx(Tv,{}),x.jsxs("div",{className:In.mainShell,children:[x.jsx(Pb,{}),x.jsx("main",{className:In.content,children:x.jsx(R.Suspense,{fallback:x.jsx(Ab,{}),children:x.jsx(ny,{})})})]})]})]})})})}function hp(i){return i.route==="/"?{index:!0,lazy:i.lazy}:{path:i.route.slice(1),lazy:i.lazy}}const Db=my([{path:"/",element:x.jsx(Ib,{}),children:[...Fp.map(hp),...ql.map(hp),{path:"changelog/:id",lazy:()=>Kt(()=>import("./ChangelogDetailPage-C78XiyDy.js"),__vite__mapDeps([40,1,7,8,6,41]))},{path:"settings",lazy:()=>Kt(()=>import("./SettingsPage-CU7CHyaG.js"),__vite__mapDeps([42,2,3,1,6,36,37,12,13,14,30,31,43]))}]}]);qh.createRoot(document.getElementById("root")).render(x.jsx(wy,{router:Db}));export{Ta as A,Mb as B,Hb as C,Ql as D,qp as E,Lb as F,Lv as G,Mv as H,Wf as I,Un as J,Ea as L,eS as M,jb as N,oS as P,Bp as R,$y as S,bS as T,gS as X,Et as a,Tb as b,$l as c,Yt as d,us as e,_n as f,jv as g,SS as h,Ke as i,x as j,Ft as k,df as l,ds as m,zn as n,Tf as o,rS as p,Ly as q,R as r,$p as s,Ub as t,Uo as u,Uv as v,_b as w,zb as x,Nb as y,Np as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as v,q as k,u as G,r as d,j as n}from"./index-CnXGGM07.js";import{C as D}from"./PageHeader-Bfy2f-GH.js";async function u(t,e){const r=await fetch(`${v}${t}`,e);if(!r.ok){let a=null;try{a=await r.json()}catch{}throw new k(r.status,(a==null?void 0:a.message)??r.statusText,(a==null?void 0:a.error)??null,a)}return r.json()}function S(t){return{headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}}function V(t){return u(`/api/ui-studio/usage?placeId=${t}`)}function X(t,e={}){const r=new URLSearchParams({placeId:String(t)});for(const[a,s]of Object.entries(e))s!=null&&r.set(a,String(s));return u(`/api/ui-studio/requests?${r}`)}function ee(t,e){return u(`/api/ui-studio/requests/${encodeURIComponent(e)}?placeId=${t}`)}function te(t,e){return u("/api/ui-studio/requests",{method:"DELETE",...S({placeId:t,...e})})}function ae(t,e){return u(`/api/ui-studio/snapshots/${encodeURIComponent(e)}?placeId=${t}`,{method:"DELETE"})}function re(t,e){return u("/api/ui-studio/snapshots",{method:"DELETE",...S({placeId:t,...e})})}function se(t,e){const r=new URLSearchParams({placeId:String(t)});if(e)for(const[a,s]of Object.entries(e))s!=null&&r.set(`preview.${a}`,String(s));return u(`/api/ui-studio/cleanup?${r}`)}function ie(t,e){return u("/api/ui-studio/cleanup",{method:"PUT",...S({placeId:t,...e})})}function oe(t){return u(`/api/ui-studio/cleanup/run?placeId=${t}`,{method:"POST"})}function ne(t,e){return u("/api/ui-studio/run",{method:"POST",...S({action:t,params:e})})}const C="_overlay_t66q4_4",A="_dialog_t66q4_15",E="_title_t66q4_28",x="_titleDanger_t66q4_37",U="_message_t66q4_42",H="_cascadeRow_t66q4_50",Z="_actions_t66q4_65",R="_cancelBtn_t66q4_73",w="_confirmBtn_t66q4_95",L="_confirmBtnDanger_t66q4_118",j="_busySpinner_t66q4_125",o={overlay:C,dialog:A,title:E,titleDanger:x,message:U,cascadeRow:H,actions:Z,cancelBtn:R,confirmBtn:w,confirmBtnDanger:L,busySpinner:j};function ue({title:t,message:e,danger:r=!1,cascadeOption:a,confirmLabel:s,busy:i=!1,onConfirm:T,onClose:p}){const{t:h}=G(),[_,g]=d.useState(!1),q=d.useRef(null),y=d.useRef(null);d.useEffect(()=>{var m;(m=q.current)==null||m.focus()},[]),d.useEffect(()=>{const m=l=>{if(l.key==="Escape"&&!i&&!_){p();return}if(l.key==="Tab"&&y.current){const f=Array.from(y.current.querySelectorAll('button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(f.length===0)return;const b=f[0],I=f[f.length-1];l.shiftKey&&document.activeElement===b?(l.preventDefault(),I.focus()):!l.shiftKey&&document.activeElement===I&&(l.preventDefault(),b.focus())}};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[i,_,p]);const B=async()=>{if(!(_||i)){g(!0);try{await T()}finally{g(!1)}}},M=()=>{!i&&!_&&p()},c=i||_,P=s??h("common.delete","삭제");return n.jsx("div",{className:o.overlay,role:"presentation",onClick:M,children:n.jsxs("div",{ref:y,className:o.dialog,role:"dialog","aria-modal":"true","aria-labelledby":"delete-confirm-title",onClick:m=>m.stopPropagation(),children:[n.jsx("h2",{id:"delete-confirm-title",className:`${o.title} ${r?o.titleDanger:""}`,children:t}),n.jsx("p",{className:o.message,children:e}),a&&n.jsxs("label",{className:o.cascadeRow,children:[n.jsx(D,{checked:a.checked,onChange:m=>a.onChange(m.target.checked),disabled:c}),a.label]}),n.jsxs("div",{className:o.actions,children:[n.jsx("button",{ref:q,className:o.cancelBtn,onClick:p,disabled:c,type:"button",children:h("common.cancel","취소")}),n.jsxs("button",{className:`${o.confirmBtn} ${r?o.confirmBtnDanger:""}`,onClick:()=>void B(),disabled:c,type:"button",children:[c&&n.jsx("span",{className:o.busySpinner,"aria-hidden":"true"}),P]})]})]})})}const z="/dashboard/assets/ui-studio-sample-DrNTD6yi.png",me=z,le={requestCount:6,mutationCount:22,snapshotCount:8,historyBytes:12e3,snapshotBytes:48e4,totalBytes:492e3},_e={mode:"off",cascadeSnapshots:!0},O={sample_req_1:"uiStudio.sample.history.request1.label",sample_req_2:"uiStudio.sample.history.request2.label",sample_req_3:"uiStudio.sample.history.request3.label",sample_req_4:"uiStudio.sample.history.request4.label",sample_req_5:"uiStudio.sample.history.request5.label",sample_req_6:"uiStudio.sample.history.request6.label"},N={sample_mut_1_1:"uiStudio.sample.history.request1.mutation1.diff",sample_mut_1_2:"uiStudio.sample.history.request1.mutation2.diff",sample_mut_1_3:"uiStudio.sample.history.request1.mutation3.diff",sample_mut_1_4:"uiStudio.sample.history.request1.mutation4.diff",sample_mut_1_5:"uiStudio.sample.history.request1.mutation5.diff",sample_mut_2_1:"uiStudio.sample.history.request2.mutation1.diff",sample_mut_2_2:"uiStudio.sample.history.request2.mutation2.diff",sample_mut_2_3:"uiStudio.sample.history.request2.mutation3.diff",sample_mut_2_4:"uiStudio.sample.history.request2.mutation4.diff",sample_mut_3_1:"uiStudio.sample.history.request3.mutation1.diff",sample_mut_3_2:"uiStudio.sample.history.request3.mutation2.diff",sample_mut_4_1:"uiStudio.sample.history.request4.mutation1.diff",sample_mut_4_2:"uiStudio.sample.history.request4.mutation2.diff",sample_mut_4_3:"uiStudio.sample.history.request4.mutation3.diff",sample_mut_4_4:"uiStudio.sample.history.request4.mutation4.diff",sample_mut_4_5:"uiStudio.sample.history.request4.mutation5.diff",sample_mut_4_6:"uiStudio.sample.history.request4.mutation6.diff",sample_mut_5_1:"uiStudio.sample.history.request5.mutation1.diff",sample_mut_6_1:"uiStudio.sample.history.request6.mutation1.diff",sample_mut_6_2:"uiStudio.sample.history.request6.mutation2.diff",sample_mut_6_3:"uiStudio.sample.history.request6.mutation3.diff",sample_mut_6_4:"uiStudio.sample.history.request6.mutation4.diff"},$={BackgroundColor3:"uiStudio.sample.history.detail.backgroundColor",AnchorPoint:"uiStudio.sample.history.detail.anchorPoint",Position:"uiStudio.sample.history.detail.position",Size:"uiStudio.sample.history.detail.size",TextColor3:"uiStudio.sample.history.detail.textColor",TextSize:"uiStudio.sample.history.detail.textSize",BorderSizePixel:"uiStudio.sample.history.detail.borderSize",BorderColor3:"uiStudio.sample.history.detail.borderColor"},K={sample_mut_6_3:"uiStudio.sample.history.request6.mutation3.error",sample_mut_6_4:"uiStudio.sample.history.request6.mutation4.error"},Y=[{requestId:"sample_req_1",label:"HUD 레이아웃 초기 생성",startedAt:"2026-05-03T09:12:00.000Z",closedAt:"2026-05-03T09:12:04.321Z",closeReason:"explicit",ok:!0,affectedPaths:["StarterGui.HUD"],mutationCount:5,beforeSnapshots:{"StarterGui.HUD":null},afterSnapshots:{"StarterGui.HUD":"sample_snap_1"},childMutationIds:["sample_mut_1_1","sample_mut_1_2","sample_mut_1_3","sample_mut_1_4","sample_mut_1_5"]},{requestId:"sample_req_2",label:"Inventory 모달 디자인 업데이트",startedAt:"2026-05-03T10:04:18.000Z",closedAt:"2026-05-03T10:04:22.817Z",closeReason:"idle_timeout",ok:!0,affectedPaths:["StarterGui.Inventory.Modal","StarterGui.Inventory.Modal.Header"],mutationCount:4,beforeSnapshots:{"StarterGui.Inventory.Modal":"sample_snap_1","StarterGui.Inventory.Modal.Header":"sample_snap_1"},afterSnapshots:{"StarterGui.Inventory.Modal":"sample_snap_2","StarterGui.Inventory.Modal.Header":"sample_snap_2"},childMutationIds:["sample_mut_2_1","sample_mut_2_2","sample_mut_2_3","sample_mut_2_4"]},{requestId:"sample_req_3",label:"HUD HealthBar 색상 수정",startedAt:"2026-05-03T11:30:55.000Z",closedAt:"2026-05-03T11:30:57.102Z",closeReason:"context_change",ok:!0,affectedPaths:["StarterGui.HUD.HealthBar"],mutationCount:2,beforeSnapshots:{"StarterGui.HUD.HealthBar":"sample_snap_2"},afterSnapshots:{"StarterGui.HUD.HealthBar":"sample_snap_3"},childMutationIds:["sample_mut_3_1","sample_mut_3_2"]},{requestId:"sample_req_4",label:"Inventory 탭 버튼 터치 타겟 확대",startedAt:"2026-05-03T13:22:11.000Z",closedAt:"2026-05-03T13:22:14.500Z",closeReason:"explicit",ok:!0,affectedPaths:["StarterGui.Inventory.TabBar.TabAll","StarterGui.Inventory.TabBar.TabWeapon","StarterGui.Inventory.TabBar.TabArmor"],mutationCount:6,beforeSnapshots:{"StarterGui.Inventory.TabBar.TabAll":"sample_snap_3","StarterGui.Inventory.TabBar.TabWeapon":"sample_snap_3","StarterGui.Inventory.TabBar.TabArmor":"sample_snap_3"},afterSnapshots:{"StarterGui.Inventory.TabBar.TabAll":"sample_snap_4","StarterGui.Inventory.TabBar.TabWeapon":"sample_snap_4","StarterGui.Inventory.TabBar.TabArmor":"sample_snap_4"},childMutationIds:["sample_mut_4_1","sample_mut_4_2","sample_mut_4_3","sample_mut_4_4","sample_mut_4_5","sample_mut_4_6"]},{requestId:"sample_req_5",label:"Settings 팝업 삭제",startedAt:"2026-05-03T14:45:33.000Z",closedAt:"2026-05-03T14:45:34.290Z",closeReason:"legacy_single",ok:!0,affectedPaths:["StarterGui.Settings"],mutationCount:1,beforeSnapshots:{"StarterGui.Settings":"sample_snap_4"},afterSnapshots:{"StarterGui.Settings":null},childMutationIds:["sample_mut_5_1"]},{requestId:"sample_req_6",label:"HUD 미니맵 컴포넌트 추가",startedAt:"2026-05-03T16:08:47.000Z",closedAt:"2026-05-03T16:08:51.776Z",closeReason:"server_restart",ok:!1,affectedPaths:["StarterGui.HUD.Minimap"],mutationCount:4,beforeSnapshots:{"StarterGui.HUD.Minimap":null},afterSnapshots:{"StarterGui.HUD.Minimap":"sample_snap_5"},childMutationIds:["sample_mut_6_1","sample_mut_6_2","sample_mut_6_3","sample_mut_6_4"]}],F={sample_req_1:[{mutationId:"sample_mut_1_1",requestId:"sample_req_1",ts:"2026-05-03T09:12:00.500Z",command:"manage_ui_create_tree",origin:"ai",targetPath:"StarterGui.HUD",diffSummary:"Frame + HealthBar + StaminaBar 생성",ok:!0,durationMs:312},{mutationId:"sample_mut_1_2",requestId:"sample_req_1",ts:"2026-05-03T09:12:01.000Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.HealthBar",diffSummary:"BackgroundColor3 → Color3.new(0.2,0.8,0.2)",changeDetails:[{property:"BackgroundColor3",category:"color",label:"배경색",before:{r:36,g:42,b:52},after:{r:51,g:204,b:51}}],ok:!0,durationMs:84},{mutationId:"sample_mut_1_3",requestId:"sample_req_1",ts:"2026-05-03T09:12:01.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.StaminaBar",diffSummary:"BackgroundColor3 → Color3.new(0.1,0.6,1.0)",ok:!0,durationMs:76},{mutationId:"sample_mut_1_4",requestId:"sample_req_1",ts:"2026-05-03T09:12:02.000Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD",diffSummary:"AnchorPoint, Position, Size 설정",changeDetails:[{property:"AnchorPoint",category:"layout",label:"앵커",before:{x:.5,y:.5},after:{x:0,y:0}},{property:"Position",category:"layout",label:"위치",before:{xScale:.5,xOffset:0,yScale:.5,yOffset:0},after:{xScale:0,xOffset:16,yScale:0,yOffset:16}},{property:"Size",category:"size",label:"사이즈",before:{xScale:0,xOffset:240,yScale:0,yOffset:64},after:{xScale:0,xOffset:320,yScale:0,yOffset:80}}],ok:!0,durationMs:91},{mutationId:"sample_mut_1_5",requestId:"sample_req_1",ts:"2026-05-03T09:12:02.500Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.HUD",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1521}],sample_req_2:[{mutationId:"sample_mut_2_1",requestId:"sample_req_2",ts:"2026-05-03T10:04:18.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.Modal.Header",diffSummary:"BackgroundColor3 어둡게 조정 (대비 개선)",ok:!0,durationMs:102},{mutationId:"sample_mut_2_2",requestId:"sample_req_2",ts:"2026-05-03T10:04:19.000Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.Modal.Header.Title",diffSummary:"TextColor3 → Color3.new(1,1,1), TextSize 16→18",changeDetails:[{property:"TextColor3",category:"color",label:"글자색",before:{r:212,g:222,b:238},after:{r:255,g:255,b:255}},{property:"TextSize",category:"size",label:"글자 크기",before:16,after:18}],ok:!0,durationMs:88},{mutationId:"sample_mut_2_3",requestId:"sample_req_2",ts:"2026-05-03T10:04:19.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.Modal",diffSummary:"BorderSizePixel 0→2, BorderColor3 설정",changeDetails:[{property:"BorderSizePixel",category:"size",label:"테두리 크기",before:0,after:2},{property:"BorderColor3",category:"color",label:"테두리색",before:{r:86,g:99,b:122},after:{r:255,g:255,b:255}}],ok:!0,durationMs:95},{mutationId:"sample_mut_2_4",requestId:"sample_req_2",ts:"2026-05-03T10:04:20.000Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.Inventory.Modal",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1802}],sample_req_3:[{mutationId:"sample_mut_3_1",requestId:"sample_req_3",ts:"2026-05-03T11:30:55.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.HealthBar",diffSummary:"BackgroundColor3 → Color3.new(0.9,0.2,0.2) (빨간 계열)",ok:!0,durationMs:80},{mutationId:"sample_mut_3_2",requestId:"sample_req_3",ts:"2026-05-03T11:30:56.000Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.HUD.HealthBar",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1102}],sample_req_4:[{mutationId:"sample_mut_4_1",requestId:"sample_req_4",ts:"2026-05-03T13:22:11.300Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabAll",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:78},{mutationId:"sample_mut_4_2",requestId:"sample_req_4",ts:"2026-05-03T13:22:11.700Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabWeapon",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:71},{mutationId:"sample_mut_4_3",requestId:"sample_req_4",ts:"2026-05-03T13:22:12.100Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabArmor",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:73},{mutationId:"sample_mut_4_4",requestId:"sample_req_4",ts:"2026-05-03T13:22:12.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabConsume",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:70},{mutationId:"sample_mut_4_5",requestId:"sample_req_4",ts:"2026-05-03T13:22:12.900Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabMisc",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:72},{mutationId:"sample_mut_4_6",requestId:"sample_req_4",ts:"2026-05-03T13:22:13.300Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabAll",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1200}],sample_req_5:[{mutationId:"sample_mut_5_1",requestId:"sample_req_5",ts:"2026-05-03T14:45:33.500Z",command:"manage_ui_delete",origin:"ai",targetPath:"StarterGui.Settings",diffSummary:"ScreenGui 제거 (Settings 전용 UI)",ok:!0,durationMs:290}],sample_req_6:[{mutationId:"sample_mut_6_1",requestId:"sample_req_6",ts:"2026-05-03T16:08:47.500Z",command:"manage_ui_create_tree",origin:"ai",targetPath:"StarterGui.HUD.Minimap",diffSummary:"Frame + MapImage + PlayerDot 생성 시도",ok:!0,durationMs:340},{mutationId:"sample_mut_6_2",requestId:"sample_req_6",ts:"2026-05-03T16:08:48.200Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.Minimap",diffSummary:"Size, Position, BackgroundTransparency 설정",ok:!0,durationMs:84},{mutationId:"sample_mut_6_3",requestId:"sample_req_6",ts:"2026-05-03T16:08:48.900Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.Minimap.MapImage",diffSummary:"ImageLabel 설정 중 서버 재시작으로 중단",ok:!1,error:"server_restart: connection lost",durationMs:700},{mutationId:"sample_mut_6_4",requestId:"sample_req_6",ts:"2026-05-03T16:08:49.700Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.HUD.Minimap",diffSummary:"불완전 화면 캡처 저장",ok:!1,error:"partial snapshot: missing layers",durationMs:876}]};function W(t,e){var s;const r=N[e.mutationId],a=K[e.mutationId];return{...e,diffSummary:e.diffSummary&&r?t(r,e.diffSummary):e.diffSummary,error:e.error&&a?t(a,e.error):e.error,changeDetails:(s=e.changeDetails)==null?void 0:s.map(i=>({...i,label:t($[i.property]??"",i.label)}))}}function de(t){const e=Y.map(a=>({...a,label:a.label?t(O[a.requestId]??"",a.label):a.label})),r=Object.fromEntries(Object.entries(F).map(([a,s])=>[a,s.map(i=>W(t,i))]));return{requests:e,mutationsByRequest:r}}export{ue as D,le as S,V as a,_e as b,ne as c,te as d,ae as e,se as f,z as g,re as h,X as i,ee as j,de as k,me as l,oe as r,ie as s};
|
|
1
|
+
import{n as v,q as k,u as G,r as d,j as n}from"./index-T_F9Rs-N.js";import{C as D}from"./PageHeader-CD450myM.js";async function u(t,e){const r=await fetch(`${v}${t}`,e);if(!r.ok){let a=null;try{a=await r.json()}catch{}throw new k(r.status,(a==null?void 0:a.message)??r.statusText,(a==null?void 0:a.error)??null,a)}return r.json()}function S(t){return{headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}}function V(t){return u(`/api/ui-studio/usage?placeId=${t}`)}function X(t,e={}){const r=new URLSearchParams({placeId:String(t)});for(const[a,s]of Object.entries(e))s!=null&&r.set(a,String(s));return u(`/api/ui-studio/requests?${r}`)}function ee(t,e){return u(`/api/ui-studio/requests/${encodeURIComponent(e)}?placeId=${t}`)}function te(t,e){return u("/api/ui-studio/requests",{method:"DELETE",...S({placeId:t,...e})})}function ae(t,e){return u(`/api/ui-studio/snapshots/${encodeURIComponent(e)}?placeId=${t}`,{method:"DELETE"})}function re(t,e){return u("/api/ui-studio/snapshots",{method:"DELETE",...S({placeId:t,...e})})}function se(t,e){const r=new URLSearchParams({placeId:String(t)});if(e)for(const[a,s]of Object.entries(e))s!=null&&r.set(`preview.${a}`,String(s));return u(`/api/ui-studio/cleanup?${r}`)}function ie(t,e){return u("/api/ui-studio/cleanup",{method:"PUT",...S({placeId:t,...e})})}function oe(t){return u(`/api/ui-studio/cleanup/run?placeId=${t}`,{method:"POST"})}function ne(t,e){return u("/api/ui-studio/run",{method:"POST",...S({action:t,params:e})})}const C="_overlay_t66q4_4",A="_dialog_t66q4_15",E="_title_t66q4_28",x="_titleDanger_t66q4_37",U="_message_t66q4_42",H="_cascadeRow_t66q4_50",Z="_actions_t66q4_65",R="_cancelBtn_t66q4_73",w="_confirmBtn_t66q4_95",L="_confirmBtnDanger_t66q4_118",j="_busySpinner_t66q4_125",o={overlay:C,dialog:A,title:E,titleDanger:x,message:U,cascadeRow:H,actions:Z,cancelBtn:R,confirmBtn:w,confirmBtnDanger:L,busySpinner:j};function ue({title:t,message:e,danger:r=!1,cascadeOption:a,confirmLabel:s,busy:i=!1,onConfirm:T,onClose:p}){const{t:h}=G(),[_,g]=d.useState(!1),q=d.useRef(null),y=d.useRef(null);d.useEffect(()=>{var m;(m=q.current)==null||m.focus()},[]),d.useEffect(()=>{const m=l=>{if(l.key==="Escape"&&!i&&!_){p();return}if(l.key==="Tab"&&y.current){const f=Array.from(y.current.querySelectorAll('button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(f.length===0)return;const b=f[0],I=f[f.length-1];l.shiftKey&&document.activeElement===b?(l.preventDefault(),I.focus()):!l.shiftKey&&document.activeElement===I&&(l.preventDefault(),b.focus())}};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[i,_,p]);const B=async()=>{if(!(_||i)){g(!0);try{await T()}finally{g(!1)}}},M=()=>{!i&&!_&&p()},c=i||_,P=s??h("common.delete","삭제");return n.jsx("div",{className:o.overlay,role:"presentation",onClick:M,children:n.jsxs("div",{ref:y,className:o.dialog,role:"dialog","aria-modal":"true","aria-labelledby":"delete-confirm-title",onClick:m=>m.stopPropagation(),children:[n.jsx("h2",{id:"delete-confirm-title",className:`${o.title} ${r?o.titleDanger:""}`,children:t}),n.jsx("p",{className:o.message,children:e}),a&&n.jsxs("label",{className:o.cascadeRow,children:[n.jsx(D,{checked:a.checked,onChange:m=>a.onChange(m.target.checked),disabled:c}),a.label]}),n.jsxs("div",{className:o.actions,children:[n.jsx("button",{ref:q,className:o.cancelBtn,onClick:p,disabled:c,type:"button",children:h("common.cancel","취소")}),n.jsxs("button",{className:`${o.confirmBtn} ${r?o.confirmBtnDanger:""}`,onClick:()=>void B(),disabled:c,type:"button",children:[c&&n.jsx("span",{className:o.busySpinner,"aria-hidden":"true"}),P]})]})]})})}const z="/dashboard/assets/ui-studio-sample-DrNTD6yi.png",me=z,le={requestCount:6,mutationCount:22,snapshotCount:8,historyBytes:12e3,snapshotBytes:48e4,totalBytes:492e3},_e={mode:"off",cascadeSnapshots:!0},O={sample_req_1:"uiStudio.sample.history.request1.label",sample_req_2:"uiStudio.sample.history.request2.label",sample_req_3:"uiStudio.sample.history.request3.label",sample_req_4:"uiStudio.sample.history.request4.label",sample_req_5:"uiStudio.sample.history.request5.label",sample_req_6:"uiStudio.sample.history.request6.label"},N={sample_mut_1_1:"uiStudio.sample.history.request1.mutation1.diff",sample_mut_1_2:"uiStudio.sample.history.request1.mutation2.diff",sample_mut_1_3:"uiStudio.sample.history.request1.mutation3.diff",sample_mut_1_4:"uiStudio.sample.history.request1.mutation4.diff",sample_mut_1_5:"uiStudio.sample.history.request1.mutation5.diff",sample_mut_2_1:"uiStudio.sample.history.request2.mutation1.diff",sample_mut_2_2:"uiStudio.sample.history.request2.mutation2.diff",sample_mut_2_3:"uiStudio.sample.history.request2.mutation3.diff",sample_mut_2_4:"uiStudio.sample.history.request2.mutation4.diff",sample_mut_3_1:"uiStudio.sample.history.request3.mutation1.diff",sample_mut_3_2:"uiStudio.sample.history.request3.mutation2.diff",sample_mut_4_1:"uiStudio.sample.history.request4.mutation1.diff",sample_mut_4_2:"uiStudio.sample.history.request4.mutation2.diff",sample_mut_4_3:"uiStudio.sample.history.request4.mutation3.diff",sample_mut_4_4:"uiStudio.sample.history.request4.mutation4.diff",sample_mut_4_5:"uiStudio.sample.history.request4.mutation5.diff",sample_mut_4_6:"uiStudio.sample.history.request4.mutation6.diff",sample_mut_5_1:"uiStudio.sample.history.request5.mutation1.diff",sample_mut_6_1:"uiStudio.sample.history.request6.mutation1.diff",sample_mut_6_2:"uiStudio.sample.history.request6.mutation2.diff",sample_mut_6_3:"uiStudio.sample.history.request6.mutation3.diff",sample_mut_6_4:"uiStudio.sample.history.request6.mutation4.diff"},$={BackgroundColor3:"uiStudio.sample.history.detail.backgroundColor",AnchorPoint:"uiStudio.sample.history.detail.anchorPoint",Position:"uiStudio.sample.history.detail.position",Size:"uiStudio.sample.history.detail.size",TextColor3:"uiStudio.sample.history.detail.textColor",TextSize:"uiStudio.sample.history.detail.textSize",BorderSizePixel:"uiStudio.sample.history.detail.borderSize",BorderColor3:"uiStudio.sample.history.detail.borderColor"},K={sample_mut_6_3:"uiStudio.sample.history.request6.mutation3.error",sample_mut_6_4:"uiStudio.sample.history.request6.mutation4.error"},Y=[{requestId:"sample_req_1",label:"HUD 레이아웃 초기 생성",startedAt:"2026-05-03T09:12:00.000Z",closedAt:"2026-05-03T09:12:04.321Z",closeReason:"explicit",ok:!0,affectedPaths:["StarterGui.HUD"],mutationCount:5,beforeSnapshots:{"StarterGui.HUD":null},afterSnapshots:{"StarterGui.HUD":"sample_snap_1"},childMutationIds:["sample_mut_1_1","sample_mut_1_2","sample_mut_1_3","sample_mut_1_4","sample_mut_1_5"]},{requestId:"sample_req_2",label:"Inventory 모달 디자인 업데이트",startedAt:"2026-05-03T10:04:18.000Z",closedAt:"2026-05-03T10:04:22.817Z",closeReason:"idle_timeout",ok:!0,affectedPaths:["StarterGui.Inventory.Modal","StarterGui.Inventory.Modal.Header"],mutationCount:4,beforeSnapshots:{"StarterGui.Inventory.Modal":"sample_snap_1","StarterGui.Inventory.Modal.Header":"sample_snap_1"},afterSnapshots:{"StarterGui.Inventory.Modal":"sample_snap_2","StarterGui.Inventory.Modal.Header":"sample_snap_2"},childMutationIds:["sample_mut_2_1","sample_mut_2_2","sample_mut_2_3","sample_mut_2_4"]},{requestId:"sample_req_3",label:"HUD HealthBar 색상 수정",startedAt:"2026-05-03T11:30:55.000Z",closedAt:"2026-05-03T11:30:57.102Z",closeReason:"context_change",ok:!0,affectedPaths:["StarterGui.HUD.HealthBar"],mutationCount:2,beforeSnapshots:{"StarterGui.HUD.HealthBar":"sample_snap_2"},afterSnapshots:{"StarterGui.HUD.HealthBar":"sample_snap_3"},childMutationIds:["sample_mut_3_1","sample_mut_3_2"]},{requestId:"sample_req_4",label:"Inventory 탭 버튼 터치 타겟 확대",startedAt:"2026-05-03T13:22:11.000Z",closedAt:"2026-05-03T13:22:14.500Z",closeReason:"explicit",ok:!0,affectedPaths:["StarterGui.Inventory.TabBar.TabAll","StarterGui.Inventory.TabBar.TabWeapon","StarterGui.Inventory.TabBar.TabArmor"],mutationCount:6,beforeSnapshots:{"StarterGui.Inventory.TabBar.TabAll":"sample_snap_3","StarterGui.Inventory.TabBar.TabWeapon":"sample_snap_3","StarterGui.Inventory.TabBar.TabArmor":"sample_snap_3"},afterSnapshots:{"StarterGui.Inventory.TabBar.TabAll":"sample_snap_4","StarterGui.Inventory.TabBar.TabWeapon":"sample_snap_4","StarterGui.Inventory.TabBar.TabArmor":"sample_snap_4"},childMutationIds:["sample_mut_4_1","sample_mut_4_2","sample_mut_4_3","sample_mut_4_4","sample_mut_4_5","sample_mut_4_6"]},{requestId:"sample_req_5",label:"Settings 팝업 삭제",startedAt:"2026-05-03T14:45:33.000Z",closedAt:"2026-05-03T14:45:34.290Z",closeReason:"legacy_single",ok:!0,affectedPaths:["StarterGui.Settings"],mutationCount:1,beforeSnapshots:{"StarterGui.Settings":"sample_snap_4"},afterSnapshots:{"StarterGui.Settings":null},childMutationIds:["sample_mut_5_1"]},{requestId:"sample_req_6",label:"HUD 미니맵 컴포넌트 추가",startedAt:"2026-05-03T16:08:47.000Z",closedAt:"2026-05-03T16:08:51.776Z",closeReason:"server_restart",ok:!1,affectedPaths:["StarterGui.HUD.Minimap"],mutationCount:4,beforeSnapshots:{"StarterGui.HUD.Minimap":null},afterSnapshots:{"StarterGui.HUD.Minimap":"sample_snap_5"},childMutationIds:["sample_mut_6_1","sample_mut_6_2","sample_mut_6_3","sample_mut_6_4"]}],F={sample_req_1:[{mutationId:"sample_mut_1_1",requestId:"sample_req_1",ts:"2026-05-03T09:12:00.500Z",command:"manage_ui_create_tree",origin:"ai",targetPath:"StarterGui.HUD",diffSummary:"Frame + HealthBar + StaminaBar 생성",ok:!0,durationMs:312},{mutationId:"sample_mut_1_2",requestId:"sample_req_1",ts:"2026-05-03T09:12:01.000Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.HealthBar",diffSummary:"BackgroundColor3 → Color3.new(0.2,0.8,0.2)",changeDetails:[{property:"BackgroundColor3",category:"color",label:"배경색",before:{r:36,g:42,b:52},after:{r:51,g:204,b:51}}],ok:!0,durationMs:84},{mutationId:"sample_mut_1_3",requestId:"sample_req_1",ts:"2026-05-03T09:12:01.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.StaminaBar",diffSummary:"BackgroundColor3 → Color3.new(0.1,0.6,1.0)",ok:!0,durationMs:76},{mutationId:"sample_mut_1_4",requestId:"sample_req_1",ts:"2026-05-03T09:12:02.000Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD",diffSummary:"AnchorPoint, Position, Size 설정",changeDetails:[{property:"AnchorPoint",category:"layout",label:"앵커",before:{x:.5,y:.5},after:{x:0,y:0}},{property:"Position",category:"layout",label:"위치",before:{xScale:.5,xOffset:0,yScale:.5,yOffset:0},after:{xScale:0,xOffset:16,yScale:0,yOffset:16}},{property:"Size",category:"size",label:"사이즈",before:{xScale:0,xOffset:240,yScale:0,yOffset:64},after:{xScale:0,xOffset:320,yScale:0,yOffset:80}}],ok:!0,durationMs:91},{mutationId:"sample_mut_1_5",requestId:"sample_req_1",ts:"2026-05-03T09:12:02.500Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.HUD",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1521}],sample_req_2:[{mutationId:"sample_mut_2_1",requestId:"sample_req_2",ts:"2026-05-03T10:04:18.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.Modal.Header",diffSummary:"BackgroundColor3 어둡게 조정 (대비 개선)",ok:!0,durationMs:102},{mutationId:"sample_mut_2_2",requestId:"sample_req_2",ts:"2026-05-03T10:04:19.000Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.Modal.Header.Title",diffSummary:"TextColor3 → Color3.new(1,1,1), TextSize 16→18",changeDetails:[{property:"TextColor3",category:"color",label:"글자색",before:{r:212,g:222,b:238},after:{r:255,g:255,b:255}},{property:"TextSize",category:"size",label:"글자 크기",before:16,after:18}],ok:!0,durationMs:88},{mutationId:"sample_mut_2_3",requestId:"sample_req_2",ts:"2026-05-03T10:04:19.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.Modal",diffSummary:"BorderSizePixel 0→2, BorderColor3 설정",changeDetails:[{property:"BorderSizePixel",category:"size",label:"테두리 크기",before:0,after:2},{property:"BorderColor3",category:"color",label:"테두리색",before:{r:86,g:99,b:122},after:{r:255,g:255,b:255}}],ok:!0,durationMs:95},{mutationId:"sample_mut_2_4",requestId:"sample_req_2",ts:"2026-05-03T10:04:20.000Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.Inventory.Modal",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1802}],sample_req_3:[{mutationId:"sample_mut_3_1",requestId:"sample_req_3",ts:"2026-05-03T11:30:55.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.HealthBar",diffSummary:"BackgroundColor3 → Color3.new(0.9,0.2,0.2) (빨간 계열)",ok:!0,durationMs:80},{mutationId:"sample_mut_3_2",requestId:"sample_req_3",ts:"2026-05-03T11:30:56.000Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.HUD.HealthBar",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1102}],sample_req_4:[{mutationId:"sample_mut_4_1",requestId:"sample_req_4",ts:"2026-05-03T13:22:11.300Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabAll",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:78},{mutationId:"sample_mut_4_2",requestId:"sample_req_4",ts:"2026-05-03T13:22:11.700Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabWeapon",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:71},{mutationId:"sample_mut_4_3",requestId:"sample_req_4",ts:"2026-05-03T13:22:12.100Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabArmor",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:73},{mutationId:"sample_mut_4_4",requestId:"sample_req_4",ts:"2026-05-03T13:22:12.500Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabConsume",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:70},{mutationId:"sample_mut_4_5",requestId:"sample_req_4",ts:"2026-05-03T13:22:12.900Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabMisc",diffSummary:"Size {0,64},{0,32} → {0,64},{0,44}",ok:!0,durationMs:72},{mutationId:"sample_mut_4_6",requestId:"sample_req_4",ts:"2026-05-03T13:22:13.300Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.Inventory.TabBar.TabAll",diffSummary:"화면 캡처 저장 완료",ok:!0,durationMs:1200}],sample_req_5:[{mutationId:"sample_mut_5_1",requestId:"sample_req_5",ts:"2026-05-03T14:45:33.500Z",command:"manage_ui_delete",origin:"ai",targetPath:"StarterGui.Settings",diffSummary:"ScreenGui 제거 (Settings 전용 UI)",ok:!0,durationMs:290}],sample_req_6:[{mutationId:"sample_mut_6_1",requestId:"sample_req_6",ts:"2026-05-03T16:08:47.500Z",command:"manage_ui_create_tree",origin:"ai",targetPath:"StarterGui.HUD.Minimap",diffSummary:"Frame + MapImage + PlayerDot 생성 시도",ok:!0,durationMs:340},{mutationId:"sample_mut_6_2",requestId:"sample_req_6",ts:"2026-05-03T16:08:48.200Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.Minimap",diffSummary:"Size, Position, BackgroundTransparency 설정",ok:!0,durationMs:84},{mutationId:"sample_mut_6_3",requestId:"sample_req_6",ts:"2026-05-03T16:08:48.900Z",command:"manage_ui_update",origin:"ai",targetPath:"StarterGui.HUD.Minimap.MapImage",diffSummary:"ImageLabel 설정 중 서버 재시작으로 중단",ok:!1,error:"server_restart: connection lost",durationMs:700},{mutationId:"sample_mut_6_4",requestId:"sample_req_6",ts:"2026-05-03T16:08:49.700Z",command:"manage_ui_preview",origin:"ai",targetPath:"StarterGui.HUD.Minimap",diffSummary:"불완전 화면 캡처 저장",ok:!1,error:"partial snapshot: missing layers",durationMs:876}]};function W(t,e){var s;const r=N[e.mutationId],a=K[e.mutationId];return{...e,diffSummary:e.diffSummary&&r?t(r,e.diffSummary):e.diffSummary,error:e.error&&a?t(a,e.error):e.error,changeDetails:(s=e.changeDetails)==null?void 0:s.map(i=>({...i,label:t($[i.property]??"",i.label)}))}}function de(t){const e=Y.map(a=>({...a,label:a.label?t(O[a.requestId]??"",a.label):a.label})),r=Object.fromEntries(Object.entries(F).map(([a,s])=>[a,s.map(i=>W(t,i))]));return{requests:e,mutationsByRequest:r}}export{ue as D,le as S,V as a,_e as b,ne as c,te as d,ae as e,se as f,z as g,re as h,X as i,ee as j,de as k,me as l,oe as r,ie as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as a}from"./index-
|
|
1
|
+
import{r as a}from"./index-T_F9Rs-N.js";function c(t){const r=Math.max(0,Math.floor(t/1e3)),n=Math.floor(r/3600),o=Math.floor(r%3600/60),e=Math.floor(r%60);return`${String(n).padStart(2,"0")}:${String(o).padStart(2,"0")}:${String(e).padStart(2,"0")}`}const s=1e3;function i(t){const[r,n]=a.useState(t??null);return a.useEffect(()=>{if(t==null){n(null);return}const o=Date.now();n(t);const e=window.setInterval(()=>{n(t+(Date.now()-o))},s);return()=>{window.clearInterval(e)}},[t]),r}export{c as f,i as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as v,r as a,z as D,D as R,B as M,C as T,F as G,a as f}from"./index-
|
|
1
|
+
import{f as v,r as a,z as D,D as R,B as M,C as T,F as G,a as f}from"./index-T_F9Rs-N.js";const A="_page_1atks_2",N="_card_1atks_10",E="_licenseCardTarget_1atks_26",W="_licenseCardPro_1atks_31",F="_cardHeader_1atks_42",P="_cardHeaderActions_1atks_55",O="_collapseButton_1atks_61",K="_headerBadge_1atks_88",$="_headerBadgeLive_1atks_102",q="_licenseGrid_1atks_108",z="_statusDot_1atks_126",j="_statusActive_1atks_135",x="_statusGrace_1atks_140",J="_statusInactive_1atks_145",Q="_statusError_1atks_149",U="_proBadge_1atks_154",V="_upgradeLink_1atks_168",X="_licenseControls_1atks_182",Y="_licenseControlRow_1atks_191",Z="_licenseField_1atks_198",tt="_licenseFieldGrow_1atks_204",et="_controlLabel_1atks_209",st="_textInput_1atks_215",at="_actionBtn_1atks_235",nt="_licenseMessage_1atks_262",ot="_licenseNotice_1atks_269",it="_licenseNoticeInfo_1atks_279",ct="_licenseNoticeWarning_1atks_285",rt="_licenseNoticeMuted_1atks_291",_t="_controlGrid_1atks_296",lt="_controlHint_1atks_318",dt="_routingOverview_1atks_326",ut="_routingOverviewCopy_1atks_338",gt="_routingEyebrow_1atks_345",kt="_priorityTargetSummary_1atks_368",yt="_tableWrap_1atks_397",ft="_table_1atks_397",Ht="_studioRoutingChoiceControl_1atks_422",Lt="_segment_1atks_433",pt="_segmentActive_1atks_434",ht="_routingWarning_1atks_481",wt="_monoMuted_1atks_489",mt="_copyIconButton_1atks_493",bt="_routingBadge_1atks_518",Ct="_setPriorityTargetButton_1atks_532",St="_emptyRow_1atks_559",Bt="_settingRow_1atks_596",It="_settingLabel_1atks_610",vt="_settingControl_1atks_617",Dt="_select_1atks_626",Rt="_numberInput_1atks_648",Mt="_toggleSwitch_1atks_670",Tt="_toggleInput_1atks_677",Gt="_toggleTrack_1atks_685",At="_toggleThumb_1atks_707",Nt="_savedIndicator_1atks_756",Et="_savedIndicatorHidden_1atks_767",Wt="_dataHistoryIntro_1atks_772",Ft="_dataHistoryList_1atks_780",Pt="_dataHistoryRow_1atks_786",Ot="_dataHistoryDetail_1atks_795",Kt="_uiStudioDataHistoryRow_1atks_800",$t="_uiStudioDataHistoryDetail_1atks_805",qt="_dataHistoryMain_1atks_812",zt="_dataHistoryTitle_1atks_816",jt="_dataHistoryDescription_1atks_822",xt="_dataHistoryMetric_1atks_830",Jt="_dataHistoryActions_1atks_837",Qt="_linkButton_1atks_843",Ut="_dangerButton_1atks_844",Vt="_inlineStatus_1atks_887",Xt="_coldGrid_1atks_895",Yt="_coldHint_1atks_913",Zt="_langRow_1atks_922",te="_loading_1atks_935",ee="_unit_1atks_944",ae={page:A,card:N,licenseCardTarget:E,licenseCardPro:W,cardHeader:F,cardHeaderActions:P,collapseButton:O,headerBadge:K,headerBadgeLive:$,licenseGrid:q,statusDot:z,statusActive:j,statusGrace:x,statusInactive:J,statusError:Q,proBadge:U,upgradeLink:V,licenseControls:X,licenseControlRow:Y,licenseField:Z,licenseFieldGrow:tt,controlLabel:et,textInput:st,actionBtn:at,licenseMessage:nt,licenseNotice:ot,licenseNoticeInfo:it,licenseNoticeWarning:ct,licenseNoticeMuted:rt,controlGrid:_t,controlHint:lt,routingOverview:dt,routingOverviewCopy:ut,routingEyebrow:gt,priorityTargetSummary:kt,tableWrap:yt,table:ft,studioRoutingChoiceControl:Ht,segment:Lt,segmentActive:pt,routingWarning:ht,monoMuted:wt,copyIconButton:mt,routingBadge:bt,setPriorityTargetButton:Ct,emptyRow:St,settingRow:Bt,settingLabel:It,settingControl:vt,select:Dt,numberInput:Rt,toggleSwitch:Mt,toggleInput:Tt,toggleTrack:Gt,toggleThumb:At,savedIndicator:Nt,savedIndicatorHidden:Et,dataHistoryIntro:Wt,dataHistoryList:Ft,dataHistoryRow:Pt,dataHistoryDetail:Ot,uiStudioDataHistoryRow:Kt,uiStudioDataHistoryDetail:$t,dataHistoryMain:qt,dataHistoryTitle:zt,dataHistoryDescription:jt,dataHistoryMetric:xt,dataHistoryActions:Jt,linkButton:Qt,dangerButton:Ut,inlineStatus:Vt,coldGrid:Xt,coldHint:Yt,langRow:Zt,loading:te,unit:ee};function ne(){const{level:H}=v(),[l,g]=a.useState(null),[L,k]=a.useState(null),[p,y]=a.useState(!1),[h,w]=a.useState(!0),[m,i]=a.useState(!1),[b,_]=a.useState(null),o=H==="disconnected",n=a.useCallback(t=>{t&&k(e=>({...e,...t,maskedKey:t.maskedKey??(e==null?void 0:e.maskedKey),provider:t.provider??(e==null?void 0:e.provider)??"auto"}))},[]),d=a.useCallback(t=>{if(!t){k(null);return}k({...t,provider:t.provider??"auto"})},[]),u=a.useCallback(async()=>{try{return await D()}catch{return null}},[]);a.useEffect(()=>{let t=!1;async function e(){try{const[s,r]=await Promise.all([f.get("/api/dashboard/settings").catch(()=>null),u()]);if(t)return;s&&g(s),r&&n(r)}catch{}finally{t||w(!1)}}return e(),()=>{t=!0}},[u,n]),a.useEffect(()=>{const t=new R;t.connect();const e=t.on("license",s=>{u().then(r=>{if(r){if((s==null?void 0:s.cleared)===!0){d(r);return}n(r)}})});return()=>{e(),t.disconnect()}},[u,n,d]);const c=a.useCallback((t,e)=>{_(t??e)},[]),C=a.useCallback(async t=>{if(o)return!1;if(!t.trim())return _("License key is required."),!1;i(!0);try{const e=await M({licenseKey:t.trim()});return n(e.license),c(e.message,e.ok?"License updated.":"License activation failed."),e.ok}catch{return _("License activation failed."),!1}finally{i(!1)}},[c,o,n]),S=a.useCallback(async()=>{if(!o){i(!0);try{const t=await T();n(t.license),c(t.message,t.ok?"License updated.":"License refresh failed.")}catch{_("License refresh failed.")}finally{i(!1)}}},[c,o,n]),B=a.useCallback(async()=>{if(!o){i(!0);try{const t=await G();d(t.license),c(t.message,t.ok?"License reset.":"License reset failed.")}catch{_("License reset failed.")}finally{i(!1)}}},[c,o,d]),I=a.useCallback(async(t,e)=>{if(l){g(s=>s&&{...s,hot:{...s.hot,[t]:e}}),y(!0);try{await f.patch("/api/dashboard/settings",{[t]:e})}catch{g(s=>s&&{...s,hot:{...s.hot,[t]:l.hot[t]}})}finally{y(!1)}}},[l]);return{settings:l,license:L,saving:p,licenseControlsDisabled:o,licenseSubmitting:m,licenseMessage:b,activateLicense:C,refreshLicense:S,resetLicense:B,updateHotSetting:I,loading:h}}export{ae as s,ne as u};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" href="/dashboard/weppy-icon.png" />
|
|
7
7
|
<title>WEPPY Dashboard</title>
|
|
8
|
-
<script type="module" crossorigin src="/dashboard/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/dashboard/assets/index-T_F9Rs-N.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/dashboard/assets/index-DzkZyWCv.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|