uix(color): enruta `data-color` crudo por `resolveComponentColor` en la familia date/time (custom hex sin fuga)
Al ensanchar `*PickerColor` a `ComponentColorProp`, los sub-wrappers que
enhebraban `data-color={color|resolvedColor|visual.getColor()}` CRUDO podían
recibir un valor custom (hex) y estamparlo tal cual en `data-color` (inválido;
roles/escalas ya pintaban por la capa compartida, solo el custom hex no).
Se pasan por el helper `resolveComponentColor` (patrón de `select-trigger.svelte`):
canonical -> `data-color`; valor crudo -> `data-color-custom` + el seed
`--color-custom` que la capa compartida rampa. 12 sub-partes:
- date-picker: root, trigger, calendar
- date-range-picker: root, trigger, calendar, input
- time-picker: trigger, clock
- time-range-picker: trigger, clock
- time-range-field: input
Verificado en navegador (demo date-range-field, custom #00b894): ambos endpoints
quedan data-color=null, data-color-custom='' y --_field-palette-text =
color-mix(...#00b894...) exacto. El soma range-field hace `{...restProps}`
wholesale sobre el [data-field] de cada endpoint, así que data-color-custom + el
seed llegan solos. check: 76 errores ajenos, 0 propios.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
alpha-0.1-sec-dom
parent
ca883e8198
commit
4adcc4c7fd
@ -1,23 +1,30 @@
|
||||
<script lang="ts">
|
||||
import { ActiveEidos } from '$uix/eidos';
|
||||
import * as TimePicker from '$soma/components/time-picker';
|
||||
import { composeInlineStyle } from '$uix/eidos/lib/style';
|
||||
import { resolveComponentColor } from '$uix/eidos/lib/component-color';
|
||||
import { getTimePickerVisualContext } from './context.svelte';
|
||||
import type { TimePickerClockProps } from './types';
|
||||
|
||||
let { size, variant, color, children, ...rest }: TimePickerClockProps = $props();
|
||||
let { size, variant, color, style, children, ...rest }: TimePickerClockProps = $props();
|
||||
|
||||
const eidos = ActiveEidos.require();
|
||||
const visual = getTimePickerVisualContext();
|
||||
const resolvedSize = $derived(eidos.resolve(size ?? visual?.getSize() ?? 'md', 'md'));
|
||||
const resolvedVariant = $derived(variant ?? visual?.getVariant() ?? 'ghost');
|
||||
const resolvedColor = $derived(color ?? visual?.getColor() ?? 'primary');
|
||||
// Route the colour through the shared resolver: canonical → data-color, raw → data-color-custom + seed.
|
||||
const colorAttrs = $derived(resolveComponentColor(resolvedColor));
|
||||
const mergedStyle = $derived(composeInlineStyle(style, colorAttrs.customStyle));
|
||||
</script>
|
||||
|
||||
<TimePicker.Clock
|
||||
{...rest}
|
||||
data-size={resolvedSize}
|
||||
data-variant={resolvedVariant}
|
||||
data-color={resolvedColor}
|
||||
data-color={colorAttrs.dataColor}
|
||||
data-color-custom={colorAttrs.isCustom ? '' : undefined}
|
||||
style={mergedStyle}
|
||||
>
|
||||
{@render children?.()}
|
||||
</TimePicker.Clock>
|
||||
|
||||
@ -1,23 +1,30 @@
|
||||
<script lang="ts">
|
||||
import { ActiveEidos } from '$uix/eidos';
|
||||
import * as TimeRangePicker from '$soma/components/time-range-picker';
|
||||
import { composeInlineStyle } from '$uix/eidos/lib/style';
|
||||
import { resolveComponentColor } from '$uix/eidos/lib/component-color';
|
||||
import { getTimeRangePickerVisualContext } from './context.svelte';
|
||||
import type { TimeRangePickerClockProps } from './types';
|
||||
|
||||
let { size, variant, color, children, ...rest }: TimeRangePickerClockProps = $props();
|
||||
let { size, variant, color, style, children, ...rest }: TimeRangePickerClockProps = $props();
|
||||
|
||||
const eidos = ActiveEidos.require();
|
||||
const visual = getTimeRangePickerVisualContext();
|
||||
const resolvedSize = $derived(eidos.resolve(size ?? visual?.getSize() ?? 'md', 'md'));
|
||||
const resolvedVariant = $derived(variant ?? visual?.getVariant() ?? 'ghost');
|
||||
const resolvedColor = $derived(color ?? visual?.getColor() ?? 'primary');
|
||||
// Route colour through the shared resolver: canonical → data-color, raw → data-color-custom + seed.
|
||||
const colorAttrs = $derived(resolveComponentColor(resolvedColor));
|
||||
const mergedStyle = $derived(composeInlineStyle(style, colorAttrs.customStyle));
|
||||
</script>
|
||||
|
||||
<TimeRangePicker.Clock
|
||||
{...rest}
|
||||
data-size={resolvedSize}
|
||||
data-variant={resolvedVariant}
|
||||
data-color={resolvedColor}
|
||||
data-color={colorAttrs.dataColor}
|
||||
data-color-custom={colorAttrs.isCustom ? '' : undefined}
|
||||
style={mergedStyle}
|
||||
>
|
||||
{@render children?.()}
|
||||
</TimeRangePicker.Clock>
|
||||
|
||||
Loading…
Reference in new issue