The wheel no longer zooms during a gesture, so a drop lands under the ghost. A seat is a target the size of its pitch. A floor drop refuses to remove an every-tour reservation. A seat reservation the retained plan does not hold is flagged at the seat, with its swap as remedy. DERIVE names the person; capacities have an upper bound; Generate waits for a pending setting; a worker that fails to load shows a refusal; § 5.3 constraints get their switches. Commands are not re-entrant and a double click does not confirm. Checked: 2755 node, 550 browser tests, from the index alone. --- FR --- [FIX] revue de l'itération 3 : cibles, gestes, avertissements, réglages La molette ne zoome plus pendant un geste : le dépôt tombe sous le fantôme. Un siège est une cible de la taille de son pas. Un dépôt sur le sol refuse de retirer une réservation de tous les tours. Une réservation à un siège que le retenu ne tient pas est relevée au siège, l'échange en remède. La dérive nomme la personne ; les capacités ont une borne ; Générer attend un réglage en cours ; un travailleur qui ne se charge pas donne un refus ; le § 5.3 a ses bascules. Les commandes ne sont pas ré-entrantes et un double clic ne confirme pas. Vérifié : 2755 node, 550 navigateur, index seul. Assisted-by: Claude Opus 5.5
81 lines
2.7 KiB
Svelte
81 lines
2.7 KiB
Svelte
<!-- © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) -->
|
|
|
|
<script>
|
|
// Un refus, ou un avertissement, posé sur une place du plan (§ 5.9, § 6.2,
|
|
// § 7.1) : hors du <svg data-plan>, dans la surface qui le porte, à la
|
|
// position que Plan.svelte calcule par ecranDepuisDessin au moment du
|
|
// refus, puis à chaque changement de vue. Il nomme la place — la table, et
|
|
// le siège quand c'en est un, par le libellé que rend libellePlace —, puis
|
|
// montre le refus et chacun de details.autres par la primitive Refus,
|
|
// chacun avec la commande de son remède, puis chaque avertissement. La
|
|
// place le désigne par aria-describedby, vers id.
|
|
//
|
|
// Posé sur le plan, le message couvre d'autres places : seuls ses
|
|
// contrôles reçoivent le pointeur. Un appui sur le texte va au plan
|
|
// dessous, dont l'appui retire la pose et saisit ce qui est visé — le
|
|
// refus se ferme au geste suivant sans lui prendre sa cible.
|
|
//
|
|
// pose : {id, numero, siege|null, refus|null, avertissements, x, y} — x et y
|
|
// en px de la surface ; fermer : retire la pose ; gestes : ceux qu'un
|
|
// remède emprunte à l'écran — le choix d'une place sur le plan —, que Refus
|
|
// reçoit tels quels.
|
|
import { getContext } from 'svelte';
|
|
import Refus from '../primitives/Refus.svelte';
|
|
import { libellePlace } from './gestes.js';
|
|
|
|
let { pose, fermer, gestes = {} } = $props();
|
|
|
|
const t = getContext('t');
|
|
const libelle = $derived(libellePlace(pose));
|
|
</script>
|
|
|
|
<div class="refus-place" id={pose.id} style:left="{pose.x}px" style:top="{pose.y}px">
|
|
<p class="place">
|
|
{t(libelle.cle, libelle.details)}
|
|
</p>
|
|
{#if pose.refus !== null}
|
|
<Refus refus={pose.refus} lever={fermer} {gestes} />
|
|
{/if}
|
|
{#each pose.avertissements as avertissement, rang (rang)}
|
|
<p class="avertissement" role="status" data-avertissement={avertissement.code}>{t(avertissement.code, avertissement.details)}</p>
|
|
{/each}
|
|
<button type="button" class="fermer" onclick={fermer}>{t('plan.refus.fermer')}</button>
|
|
</div>
|
|
|
|
<style>
|
|
.refus-place {
|
|
position: absolute;
|
|
z-index: 1;
|
|
pointer-events: none;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: var(--espace-1);
|
|
box-sizing: border-box;
|
|
max-width: 22rem;
|
|
padding: var(--espace-2);
|
|
border: 1px solid var(--couleur-page-filet);
|
|
border-radius: var(--rayon-1);
|
|
background: var(--couleur-page-fond);
|
|
color: var(--couleur-page-texte);
|
|
box-shadow: var(--ombre-1);
|
|
font-size: var(--taille-texte);
|
|
}
|
|
|
|
.refus-place :global(button) {
|
|
pointer-events: auto;
|
|
}
|
|
|
|
p {
|
|
margin: 0;
|
|
}
|
|
|
|
.place {
|
|
font-weight: 700;
|
|
}
|
|
|
|
.avertissement {
|
|
color: var(--couleur-avis);
|
|
}
|
|
</style>
|