This commit is contained in:
33333-33333 2026-06-03 18:47:09 +09:00
commit 06ab438d7b
13 changed files with 1167 additions and 3747 deletions

View file

@ -34,7 +34,7 @@
</label>
</div>
<button id="createAccount" class="miniButton" type="button">Generate account</button>
<small id="accountNote">Save + Place creates a local account for island publishing.</small>
<small id="accountNote">Publish creates a local account for island publishing.</small>
</div>
</header>
@ -59,7 +59,6 @@
<button class="tab active" data-tab="draw">Create</button>
<button class="tab" data-tab="library">Collection</button>
<button class="tab" data-tab="settings">Settings</button>
<button class="tab devOnly" data-tab="data">Data</button>
</nav>
<div class="drawerBody">
@ -75,6 +74,7 @@
<option value="human">Human</option>
<option value="animal">Animal</option>
<option value="bird">Bird</option>
<option value="fish">Fish</option>
<option value="nature">Nature</option>
<option value="building">Building</option>
<option value="ship">Ship</option>
@ -91,7 +91,12 @@
<div class="paintLayout">
<div class="paintMainColumn">
<canvas id="paintCanvas" width="512" height="512" aria-label="Pixel editor"></canvas>
<div class="toolRow editorToolRow basicEditorTools">
<div class="palettePanel">
<div id="paletteGrid" class="paletteGrid" aria-label="Color palette"></div>
</div>
</div>
<div class="drawControlPanel">
<div class="toolRow editorToolRow basicEditorTools" aria-label="Basic draw tools">
<button id="toolBrush" class="tool toolBrush active" title="B">Draw</button>
<button id="toolErase" class="tool toolErase" title="E">Erase</button>
<button id="toolFill" class="tool toolFill" title="F">Fill</button>
@ -102,56 +107,53 @@
<button id="undoPaint" class="tool toolUndo" type="button" disabled>↶ Undo</button>
<button id="redoPaint" class="tool toolRedo" type="button" disabled>↷ Redo</button>
</div>
</div>
<div class="palettePanel">
<div id="paletteGrid" class="paletteGrid" aria-label="Color palette"></div>
</div>
</div>
<div class="advancedPanel">
<div class="advancedPanelHeader">Advanced settings</div>
<div id="advancedToolGroup" class="advancedToolGroup" hidden>
<div class="toolRow advancedDrawRow">
<button id="toolLine" class="tool toolLine advancedTool" title="L">Line</button>
<button id="toolRect" class="tool toolRect advancedTool" title="R">Rect</button>
<button id="toolSelect" class="tool toolSelect advancedTool" title="S">Select</button>
<button id="toolDoor" class="tool toolDoor advancedTool buildingOnly">Door</button>
<button id="clearPaint" class="tool danger advancedTool">Clear</button>
</div>
<div class="toolRow advancedActionRow">
<button id="outlinePaint" class="tool toolOutline advancedTool" type="button">Outline</button>
<button id="flipHorizontal" class="tool toolFlipH advancedTool" type="button">Flip H</button>
<button id="flipVertical" class="tool toolFlipV advancedTool" type="button">Flip V</button>
<button id="clearSelection" class="tool toolClearSel advancedTool" type="button" disabled>Clear Sel</button>
<div class="advancedPanel">
<div class="advancedPanelHeader">Advanced draw</div>
<div id="advancedToolGroup" class="advancedToolGroup" hidden>
<div class="toolRow advancedDrawRow">
<button id="toolLine" class="tool toolLine advancedTool" title="L">Line</button>
<button id="toolRect" class="tool toolRect advancedTool" title="R">Rect</button>
<button id="toolSelect" class="tool toolSelect advancedTool" title="S">Select</button>
<button id="toolDoor" class="tool toolDoor advancedTool buildingOnly">Door</button>
<button id="clearPaint" class="tool danger advancedTool">Clear</button>
</div>
<div class="toolRow advancedActionRow">
<button id="outlinePaint" class="tool toolOutline advancedTool" type="button">Outline</button>
<button id="flipHorizontal" class="tool toolFlipH advancedTool" type="button">Flip H</button>
<button id="flipVertical" class="tool toolFlipV advancedTool" type="button">Flip V</button>
<button id="clearSelection" class="tool toolClearSel advancedTool" type="button" disabled>Clear Sel</button>
</div>
</div>
<div class="advancedRow extraAdvancedRow">
<button id="toolLight" class="tool toolLight advancedOnly" hidden>Light</button>
<button id="toolParticle" class="tool toolParticle advancedOnly" hidden>Particle</button>
<button id="toolDepth" class="tool toolDepth advancedOnly" hidden>Depth</button>
<button id="depthHigh" class="tool advancedOnly" type="button" hidden>High</button>
<button id="depthLow" class="tool advancedOnly" type="button" hidden>Low</button>
<div id="particleDirectionWrap" class="particleControl particleControlGroup advancedOnly" hidden>
<label>Direction
<select id="particleDirection">
<option value="up" selected>↑ Up</option>
<option value="down">↓ Down</option>
<option value="left">← Left</option>
<option value="right">→ Right</option>
</select>
</label>
<small id="particleRangeStatus">Particle: paint cells like Light/Depth. Shift/right-click clears a cell.</small>
</div>
</div>
<span id="advancedHint" class="hint" hidden></span>
<input id="paintColor" type="color" value="#6bd06b" hidden />
<div id="editHint" class="hint" hidden></div>
</div>
</div>
<div class="advancedRow extraAdvancedRow">
<button id="toolLight" class="tool toolLight advancedOnly" hidden>Light</button>
<button id="toolParticle" class="tool toolParticle advancedOnly" hidden>Particle</button>
<button id="toolDepth" class="tool toolDepth advancedOnly" hidden>Depth</button>
<button id="depthHigh" class="tool advancedOnly" type="button" hidden>High</button>
<button id="depthLow" class="tool advancedOnly" type="button" hidden>Low</button>
<div id="particleDirectionWrap" class="particleControl particleControlGroup advancedOnly" hidden>
<label>Direction
<select id="particleDirection">
<option value="up" selected>↑ Up</option>
<option value="down">↓ Down</option>
<option value="left">← Left</option>
<option value="right">→ Right</option>
</select>
</label>
<small id="particleRangeStatus">Particle: paint cells like Light/Depth. Shift/right-click clears a cell.</small>
</div>
</div>
<span id="advancedHint" class="hint" hidden>Advanced reveals line, rectangle, selection, flip, light, depth, and particles.</span>
<input id="paintColor" type="color" value="#6bd06b" hidden />
<div id="editHint" class="hint">Palette color is used for pixels, lights, particles, and depth marks. Shortcuts: B/E/F/I/L/R/S, Ctrl/Cmd+Z, arrows move a selection.</div>
</div>
</div>
<div class="card stack summonCard">
<div class="cardTitle">Finish</div>
<div class="actionRow finishActions">
<button id="saveAndPlace" class="primary bigPrimary"><span>Save + Place on Island</span><span id="finishQuotaBadge" class="quotaBadge finishQuotaBadge" aria-live="polite"></span></button>
<button id="saveAndPlace" class="primary bigPrimary"><span>Publish</span><span id="finishQuotaBadge" class="quotaBadge finishQuotaBadge" aria-live="polite"></span></button>
<button id="saveAsset" class="secondary">Save to Collection</button>
</div>
</div>
@ -164,7 +166,7 @@
<div class="cardTitle">Collection</div>
<button id="showHiddenAssets" class="tool" type="button">Hidden</button>
</div>
<p class="hint">Your works are permanent here. The island is a temporary exhibition: place your own new or past works; remix only copies lineage and pixels to the canvas.</p>
<p class="hint">Your works are permanent here. The island is a temporary exhibition.</p>
<div id="hiddenAssetPanel" class="hiddenAssetPanel" hidden>
<div class="cardTitle">Hidden</div>
<div id="hiddenAssetList" class="assetList compactAssetList"></div>
@ -190,36 +192,6 @@
</div>
</section>
<section id="tab-data" class="tabPanel devOnly">
<div class="card stack">
<div class="cardTitle">Local save</div>
<p class="hint">Works are durable collection works; island placements are temporary exhibition objects. Export JSON if you want to move or test a local world.</p>
<div class="actionRow wrap">
<button id="exportData">Export full JSON</button>
<button id="exportCompact">Export compact</button>
<button id="exportSnapshot">Export snapshot</button>
<button id="exportAssetBundle">Export asset bundle</button>
<button id="importData">Import JSON</button>
<button id="exportPng" type="button">Export PNG</button>
<button id="importPng" type="button">Import PNG</button>
<input id="pngImportInput" type="file" accept="image/png,image/*" hidden />
<button id="resetAll" class="danger">Reset all</button>
</div>
<div id="syncStats" class="syncStats"></div>
<textarea id="dataBox" rows="10" placeholder="Exported JSON appears here."></textarea>
</div>
<div class="card stack">
<div class="cardTitle">Phase 5 guardrails</div>
<p class="hint">Local pre-server checks for object volume, orphaned placements, terrain compatibility, hidden objects, and report logs.</p>
<div id="guardrailStats" class="syncStats"></div>
<div class="actionRow wrap">
<button id="validateWorld" type="button">Validate world</button>
<button id="exportModerationReport" type="button">Export moderation report</button>
<button id="clearReports" class="danger" type="button">Clear reports</button>
</div>
</div>
</section>
</div>
</section>
@ -245,6 +217,17 @@
</div>
<div id="toast" class="toast" hidden></div>
<div id="confirmDialog" class="reportDialog" hidden>
<div class="reportCard" role="dialog" aria-modal="true" aria-labelledby="confirmTitle">
<div id="confirmTitle" class="cardTitle">Delete work</div>
<p id="confirmMessage" class="hint"></p>
<div class="actionRow wrap reportActions">
<button id="confirmOk" class="danger" type="button">Delete</button>
<button id="confirmCancel" type="button">Cancel</button>
</div>
</div>
</div>
<div id="reportDialog" class="reportDialog" hidden>
<div class="reportCard" role="dialog" aria-modal="true" aria-labelledby="reportTitle">
<div id="reportTitle" class="cardTitle">Report object</div>