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}
+ Preset colors
{#each presets as preset}
@@ -268,8 +287,9 @@
{/each}
-
-
+
+
+ Pick from screen
{#if showFooter && (showClear || showCancel || showClose)}
@@ -656,3 +676,61 @@
{/if}
+
+