refactor(soma): ola 3 de F3 — css/number-field pierden el targetOverride publico (censo 44 → 38)

La QUEDA pedia retirar targetOverride de la API publica de commit(), y el
censo de llamantes dio la razon entera: NADIE externo lo pasaba — solo los
propios scrubbers en pointerup/lostpointercapture, redirigiendo el TERMINAL
commit-set (declarado provider: «the terminal is stamped where the value
lives») al elemento del scrubber. Clase A-36: sobra la redireccion. Y no era
gratis: con el sello en el scrubber, las reglas de pack que seleccionan el
provider no casaban jamas un commit de scrub — la clase TextArea de S-12.

Tambien fuera los 4 handle-pick/handle-drag-scrub con e.currentTarget: el
scrubber es singleton y registra, el override re-decia el destino declarado.

commit() queda { clamp?: boolean }; los finales de scrub llaman sin bolsa y
los handlers sueltan el parametro e que ya no leian.

Verificado: suites 17/17 · censo 44 → 38 (−6 exactos) · check 69 = base, 0
propios.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-dir-prefs
dev 2 months ago
parent 3fdaa8cbb6
commit 14d0dee4f2

@ -295,8 +295,13 @@ montado):
registran, así que `partInstance` + trigger anclado; range-calendar gana un
helper `triggerOnDay` para sus 5 sitios) ·
navigation-menu · menubar · virtual-list/grid · pagination (declarado;
anclar desde los 5 controles) · css-field · number-field (exponen
`targetOverride` en su API pública de `commit()` — retirarla) ·
anclar desde los 5 controles) · ~~css-field · number-field~~ (**HECHOS
2026-08-13, censo 44 → 38**: el `targetOverride` público de `commit()`
RETIRADO — sólo lo pasaban sus propios scrubbers, redirigiendo el TERMINAL
declarado `provider` al scrubber contra la fila de la doctrina del sello, y
de paso silenciando las reglas de pack que seleccionan el provider; los 4
`handle-pick`/`drag-scrub` con `e.currentTarget` eran no-op sobre el
scrubber singleton registrado) ·
~~drag-drop · path-trace · rotate-align · float-panel~~ (**HECHOS
2026-08-13, censo 64 → 51**: los «campos de elemento propios» eran los
MISMOS elementos que las partes registran — 10 no-op retirados; las 3

@ -356,15 +356,13 @@ export class CssFieldProvider {
this.applyCommit(pending.value, pending.clamp);
}
commit(
value: string | undefined,
opts: { clamp?: boolean; targetOverride?: HTMLElement } = {}
): void {
commit(value: string | undefined, opts: { clamp?: boolean } = {}): void {
this.pendingCommit = { value, clamp: opts.clamp ?? true };
void this.runtime.trigger(
'commit-set',
opts.targetOverride ? { targetOverride: opts.targetOverride } : undefined
);
// The terminal is stamped where the value lives (morfo target:
// `provider`); the retired public `targetOverride` let the scrubber
// redirect it — which also kept the provider-selecting pack rules from
// ever matching a scrub-end commit.
void this.runtime.trigger('commit-set');
}
/** Book §6.2 untilFix — mark invalid + emit a warn signal until the next valid commit. */
@ -764,9 +762,7 @@ export class CssFieldScrubberProvider {
this.startValue = p && p.kind === 'dimension' ? p.value : (this.provider.min ?? 0);
this.startUnit = p && p.kind === 'dimension' && p.unit ? p.unit : this.provider.defaultUnit;
this.scrubStep = this.provider.step;
void this.provider.runtime.trigger('handle-pick', {
targetOverride: e.currentTarget as HTMLElement
});
void this.provider.runtime.trigger('handle-pick');
};
readonly onpointermove = (e: PointerEvent) => {
@ -783,9 +779,7 @@ export class CssFieldScrubberProvider {
}
e.preventDefault();
void this.provider.runtime.trigger('handle-drag-scrub', {
targetOverride: e.currentTarget as HTMLElement
});
void this.provider.runtime.trigger('handle-drag-scrub');
const sensitivity = this.opts.sensitivity.current;
const isHorizontal = this.opts.direction.current === 'horizontal';
@ -804,24 +798,20 @@ export class CssFieldScrubberProvider {
this.provider.inputValue = next;
};
readonly onpointerup = (e?: PointerEvent) => {
readonly onpointerup = () => {
this.pointerDown = false;
if (!this.provider.scrubbing) return;
this.captured = false;
this.provider.scrubbing = false;
this.provider.commit(this.provider.opts.value.current, {
targetOverride: e?.currentTarget as HTMLElement | undefined
});
this.provider.commit(this.provider.opts.value.current);
};
readonly onlostpointercapture = (e?: PointerEvent) => {
readonly onlostpointercapture = () => {
this.pointerDown = false;
this.captured = false;
if (this.provider.scrubbing) {
this.provider.scrubbing = false;
this.provider.commit(this.provider.opts.value.current, {
targetOverride: e?.currentTarget as HTMLElement | undefined
});
this.provider.commit(this.provider.opts.value.current);
}
};

@ -420,18 +420,16 @@ export class NumberFieldProvider {
this.applyCommit(pending.value, pending.clamp);
}
commit(
value: number | undefined,
opts: { clamp?: boolean; targetOverride?: HTMLElement } = {}
): void {
commit(value: number | undefined, opts: { clamp?: boolean } = {}): void {
this.pendingCommit = {
value,
clamp: opts.clamp ?? true
};
void this.runtime.trigger(
'commit-set',
opts.targetOverride ? { targetOverride: opts.targetOverride } : undefined
);
// The terminal is stamped where the value lives (morfo target:
// `provider`); the retired public `targetOverride` let the scrubber
// redirect it — which also kept the provider-selecting pack rules from
// ever matching a scrub-end commit.
void this.runtime.trigger('commit-set');
}
// ── Actions ──────────────────────────────────────────────────────────────
@ -829,9 +827,7 @@ export class NumberFieldScrubberProvider {
this.startX = e.clientX;
this.startY = e.clientY;
this.startValue = this.provider.startValue;
void this.provider.runtime.trigger('handle-pick', {
targetOverride: e.currentTarget as HTMLElement
});
void this.provider.runtime.trigger('handle-pick');
};
readonly onpointermove = (e: PointerEvent) => {
@ -849,9 +845,7 @@ export class NumberFieldScrubberProvider {
}
e.preventDefault();
void this.provider.runtime.trigger('handle-drag-scrub', {
targetOverride: e.currentTarget as HTMLElement
});
void this.provider.runtime.trigger('handle-drag-scrub');
const sensitivity = this.opts.sensitivity.current;
const step = this.provider.step;
@ -875,28 +869,22 @@ export class NumberFieldScrubberProvider {
: this.provider.formatValue(clamped);
};
readonly onpointerup = (e?: PointerEvent) => {
readonly onpointerup = () => {
this.pointerDown = false;
if (!this.provider.scrubbing) return;
this.captured = false;
this.provider.scrubbing = false;
// Commit the final scrub value — fires onValueCommit once
const finalValue = this.provider.opts.value.current;
this.provider.commit(finalValue, {
targetOverride: e?.currentTarget as HTMLElement | undefined
});
this.provider.commit(this.provider.opts.value.current);
};
readonly onlostpointercapture = (e?: PointerEvent) => {
readonly onlostpointercapture = () => {
this.pointerDown = false;
this.captured = false;
if (this.provider.scrubbing) {
this.provider.scrubbing = false;
// Commit the final scrub value on lost capture as well
const finalValue = this.provider.opts.value.current;
this.provider.commit(finalValue, {
targetOverride: e?.currentTarget as HTMLElement | undefined
});
this.provider.commit(this.provider.opts.value.current);
}
};

Loading…
Cancel
Save

Powered by TurnKey Linux.