diff --git a/src/uix/eidos/components/color-picker/color-picker.css b/src/uix/eidos/components/color-picker/color-picker.css index 76e436adc..eb922d442 100644 --- a/src/uix/eidos/components/color-picker/color-picker.css +++ b/src/uix/eidos/components/color-picker/color-picker.css @@ -297,22 +297,39 @@ * so the slider's track shows the gradient, with a transparency checker * behind it (via the wrapper's own ::before, z-index -1) for alpha. */ -[data-color-picker-channel-slider] { +/* Note on stacking: in the soma, the same `
` carries both + `[data-slider]` (from SliderProvider.props) and + `[data-color-picker-channel-slider]` (from our mergeProps). So both + pseudo-elements live on the SAME element: + ::before — owned by the slider recipe; it's the track strip. + ::after — used here for the transparency checker behind the track. + We override the slider's `::before` background to paint the channel + gradient (rainbow for hue, white→solid for sat/bright, transparent→ + solid for alpha) and put the checker on `::after` with z-index -1 so + it shows through wherever the gradient is transparent (alpha case). */ + +[data-color-picker-channel-slider][data-slider] { position: relative; inline-size: 100%; isolation: isolate; } -/* Transparency checker sits BEHIND the slider track for the alpha channel - (where the gradient ramps to transparent). For non-alpha channels the - gradient is opaque, so the checker stays hidden. */ -[data-color-picker-channel-slider]::before { +/* The slider's track (::before) — paint with the channel gradient. */ +[data-color-picker-channel-slider][data-slider]::before { + background: var(--cp-channel-gradient, var(--slider-track-bg)) !important; + border: var(--border-width) solid var(--color-border-subtle); + box-sizing: border-box; +} + +/* Transparency checker BEHIND the track. Same strip geometry as the + slider's ::before so the cells align with the gradient. */ +[data-color-picker-channel-slider][data-slider]::after { content: ''; position: absolute; - z-index: 0; + z-index: -1; inset-inline: 0; inset-block-start: 50%; - block-size: var(--slider-track-size-md); + block-size: var(--_slider-track-size, var(--slider-track-size-md)); transform: translateY(-50%); border-radius: var(--slider-track-radius); background-image: var(--cp-checker); @@ -325,15 +342,10 @@ pointer-events: none; } -/* The slider's own track (::before of [data-slider]) gets the channel - gradient. Slider.Range is hidden because color sliders show the full - channel range as a single gradient, not a "left-of-thumb" fill. */ -[data-color-picker-channel-slider] [data-slider]::before { - background: var(--cp-channel-gradient, var(--slider-track-bg)); -} - -[data-color-picker-channel-slider] [data-slider-range] { - background: transparent; +/* Slider.Range fill is irrelevant for color sliders — the full gradient + speaks for itself. */ +[data-color-picker-channel-slider][data-slider] [data-slider-range] { + background: transparent !important; } /* Reinforce thumb visibility against any colour: bright ring + dark shadow. diff --git a/web/routes/uix/components/color-picker/+page.svelte b/web/routes/uix/components/color-picker/+page.svelte index bd022ecaf..47e190197 100644 --- a/web/routes/uix/components/color-picker/+page.svelte +++ b/web/routes/uix/components/color-picker/+page.svelte @@ -245,11 +245,29 @@ - + + +
+ Hue + +
{#if enableAlpha} - +
+ Alpha + +
{/if} + +
+ +
+ + {format.toUpperCase()} +
+
+ {#snippet children({ segments }: ChannelInputSnippetProps)} {#each segments as { part, value }, i (`${part}-${i}`)} @@ -259,6 +277,7 @@ {/snippet} + {#each presets as preset} @@ -268,8 +287,9 @@ {/each} -
- +
+ + Pick from screen
{#if showFooter && (showClear || showCancel || showClose)} @@ -656,3 +676,61 @@ {/if}
+ +