mirror of
https://github.com/isledecomp/isle.pizza.git
synced 2026-03-01 14:27:38 +00:00
Extract EditorTooltip component for consistent tooltip positioning
Refactored tooltip markup into reusable EditorTooltip component used by both ScoreCube and VehicleEditor. Tooltip now consistently appears in top right corner of the editor section.
This commit is contained in:
parent
50a25a802c
commit
a86013e552
32
src/lib/EditorTooltip.svelte
Normal file
32
src/lib/EditorTooltip.svelte
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<script>
|
||||||
|
export let text = '';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="editor-tooltip-wrapper">
|
||||||
|
<span class="tooltip-trigger">?
|
||||||
|
<span class="tooltip-content">{text}</span>
|
||||||
|
</span>
|
||||||
|
<div class="editor-tooltip-content">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.editor-tooltip-wrapper {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip-trigger {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editor-tooltip-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -2,6 +2,7 @@
|
|||||||
import { onMount, onDestroy } from 'svelte';
|
import { onMount, onDestroy } from 'svelte';
|
||||||
import { ScoreCubeRenderer } from '../../core/rendering/ScoreCubeRenderer.js';
|
import { ScoreCubeRenderer } from '../../core/rendering/ScoreCubeRenderer.js';
|
||||||
import { WdbParser, findRoi } from '../../core/formats/WdbParser.js';
|
import { WdbParser, findRoi } from '../../core/formats/WdbParser.js';
|
||||||
|
import EditorTooltip from '../EditorTooltip.svelte';
|
||||||
|
|
||||||
export let missions = {};
|
export let missions = {};
|
||||||
export let onUpdate = () => {};
|
export let onUpdate = () => {};
|
||||||
@ -120,12 +121,8 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<EditorTooltip text="Click on the cube to cycle high scores. Changes are automatically saved.">
|
||||||
<div class="score-cube-container">
|
<div class="score-cube-container">
|
||||||
<div class="score-cube-header">
|
|
||||||
<span class="tooltip-trigger">?
|
|
||||||
<span class="tooltip-content">Click on the cube to cycle high scores. Changes are automatically saved.</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<canvas
|
<canvas
|
||||||
bind:this={canvas}
|
bind:this={canvas}
|
||||||
width="200"
|
width="200"
|
||||||
@ -145,19 +142,13 @@
|
|||||||
<div class="overlay error">Error: {error}</div>
|
<div class="overlay error">Error: {error}</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
</EditorTooltip>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.score-cube-container {
|
.score-cube-container {
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
}
|
margin-top: 16px;
|
||||||
|
|
||||||
.score-cube-header {
|
|
||||||
align-self: flex-end;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
canvas {
|
canvas {
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
} from '../../core/savegame/constants.js';
|
} from '../../core/savegame/constants.js';
|
||||||
import NavButton from '../NavButton.svelte';
|
import NavButton from '../NavButton.svelte';
|
||||||
import ResetButton from '../ResetButton.svelte';
|
import ResetButton from '../ResetButton.svelte';
|
||||||
|
import EditorTooltip from '../EditorTooltip.svelte';
|
||||||
|
|
||||||
export let slot;
|
export let slot;
|
||||||
export let onUpdate = () => {};
|
export let onUpdate = () => {};
|
||||||
@ -180,13 +181,7 @@
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="vehicle-editor">
|
<EditorTooltip text="Click on the part to cycle through colors. Changes are automatically saved.">
|
||||||
<div class="vehicle-editor-header">
|
|
||||||
<span class="tooltip-trigger">?
|
|
||||||
<span class="tooltip-content">Click on the part to cycle through colors. Changes are automatically saved.</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 3D Preview (clickable to cycle color) -->
|
<!-- 3D Preview (clickable to cycle color) -->
|
||||||
<div class="preview-container">
|
<div class="preview-container">
|
||||||
<canvas
|
<canvas
|
||||||
@ -226,20 +221,9 @@
|
|||||||
<ResetButton onclick={resetColor} />
|
<ResetButton onclick={resetColor} />
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</EditorTooltip>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.vehicle-editor {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vehicle-editor-header {
|
|
||||||
align-self: flex-end;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.preview-container {
|
.preview-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user