feat: 3-step edit form, share card redesign, map fixes

- EditForm: refactored to 3-step flow matching NewEntryForm (details → photos → memo), transport icons with bigger images
- ShareCard: profile image, "You've colored X% of the world map" hero stat, removed stat boxes and continent bar, font embedding fix for PNG export, renamed brand to Journi
- JourneyView: auto-close after journey complete
- WorldMap: removed home marker icon, fix home marker reposition on resize

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Haeri Kim
2026-06-16 21:38:29 +09:00
parent 5a95fccd70
commit 9109d6a861
5 changed files with 306 additions and 323 deletions

View File

@@ -322,6 +322,7 @@
if (!isCancelled && myId === animId) {
isFinished = true; isPlaying = false;
if (onprogress) onprogress({ index: trips.length, total: trips.length, label: 'Journey complete!' });
setTimeout(() => close(), 2500);
} else if (myId === animId) { isPlaying = false; }
}

View File

@@ -5,7 +5,6 @@
import worldData from 'world-atlas/countries-50m.json';
import { getSelected, setTotalCount, getFlashing } from '../layout/selection.svelte.js';
import { getUserProfile } from '../auth/userStore.svelte.js';
import homeIconUrl from '../../assets/home.png';
import { nameToId } from '../shared/countries.js';
import crayonCursorUrl from '../../assets/logo-cursor.png';
@@ -82,29 +81,6 @@
let _pathFn = null;
let _countries = null;
function updateHomeMarker(homeCountryName) {
if (!_g || !_pathFn || !_countries) return;
_g.selectAll('.home-marker').remove();
if (!homeCountryName) return;
const found = _countries.find(f => f.properties.name === homeCountryName);
if (!found) return;
const [cx, cy] = _pathFn.centroid(found);
if (isNaN(cx) || isNaN(cy)) return;
const SIZE = 18;
_g.append('image')
.attr('class', 'home-marker')
.attr('href', homeIconUrl)
.attr('x', cx - SIZE / 2)
.attr('y', cy - SIZE / 2)
.attr('width', SIZE)
.attr('height', SIZE)
.style('pointer-events', 'none');
}
$effect(() => {
const homeCountry = getUserProfile()?.homeCountry ?? null;
updateHomeMarker(homeCountry);
});
function fitProjection(proj, w, h) {
proj.fitSize([w, h], { type: 'Sphere' });
@@ -231,7 +207,6 @@
}
renderMicrostates();
updateHomeMarker(getUserProfile()?.homeCountry ?? null);
const zoom = d3.zoom()
.scaleExtent([1, 32])
@@ -257,7 +232,6 @@
countryPaths.attr('d', path);
updateFill(countryPaths);
renderMicrostates();
updateHomeMarker(getUserProfile()?.homeCountry ?? null);
}
});