diff --git a/src/uix/eidos/components/color-field/color-field.css b/src/uix/eidos/components/color-field/color-field.css index 822b84d44..fdab3b2d3 100644 --- a/src/uix/eidos/components/color-field/color-field.css +++ b/src/uix/eidos/components/color-field/color-field.css @@ -154,7 +154,10 @@ display: inline-flex; align-items: center; justify-content: center; - min-inline-size: var(--color-field-segment-min-width); + /* Channels (RGB 0-255 / HSL 0-360 / 0-100 / alpha) are at most 3 digits → + fixed 3ch so they don't reflow 99 → 100. Hex (6 chars) overridden below. + Font-relative + tabular figures (shared field-segment-state layer). */ + min-inline-size: calc(3ch + 2 * var(--_color-field-segment-px)); block-size: var(--color-field-segment-height); padding-inline: var(--_color-field-segment-px); border-radius: var(--color-field-segment-radius); @@ -174,6 +177,11 @@ color: var(--color-field-literal-color); } +/* Hex is always 6 chars (RRGGBB) — wider than the 3ch channel default. */ +[data-color-field-segment][data-segment='hex'] { + min-inline-size: calc(6ch + 2 * var(--_color-field-segment-px)); +} + [data-color-field-segment][data-placeholder] { color: var(--color-field-placeholder-color); } diff --git a/src/uix/eidos/components/date-range-picker/date-range-picker-segment.svelte b/src/uix/eidos/components/date-range-picker/date-range-picker-segment.svelte index bd7f31c70..9480812e0 100644 --- a/src/uix/eidos/components/date-range-picker/date-range-picker-segment.svelte +++ b/src/uix/eidos/components/date-range-picker/date-range-picker-segment.svelte @@ -1,10 +1,11 @@ - + {@render children?.()} diff --git a/src/uix/eidos/components/date-range-picker/date-range-picker.css b/src/uix/eidos/components/date-range-picker/date-range-picker.css index c2db3996f..90f4e5cdc 100644 --- a/src/uix/eidos/components/date-range-picker/date-range-picker.css +++ b/src/uix/eidos/components/date-range-picker/date-range-picker.css @@ -284,7 +284,9 @@ display: inline-flex; align-items: center; justify-content: center; - min-inline-size: var(--date-field-segment-min-width); + /* Fixed 2-digit width (font-relative) + tabular figures (shared layer) so the + segment never reflows on 1 → 2 digit / glyph changes. border-box: 2ch + padding. */ + min-inline-size: calc(2ch + 2 * var(--_date-field-segment-px)); block-size: var(--date-field-segment-height); padding-inline: var(--_date-field-segment-px); border-radius: var(--date-field-segment-radius); diff --git a/src/uix/eidos/components/time-field/time-field.css b/src/uix/eidos/components/time-field/time-field.css index 17d79b015..446db0c5d 100644 --- a/src/uix/eidos/components/time-field/time-field.css +++ b/src/uix/eidos/components/time-field/time-field.css @@ -149,7 +149,9 @@ display: inline-flex; align-items: center; justify-content: center; - min-inline-size: var(--time-field-segment-min-width); + /* Fixed 2-digit width (font-relative) + tabular figures (shared layer) so the + segment never reflows on 1 → 2 digit / glyph changes. border-box: 2ch + padding. */ + min-inline-size: calc(2ch + 2 * var(--_time-field-segment-px)); block-size: var(--time-field-segment-height); padding-inline: var(--_time-field-segment-px); border-radius: var(--time-field-segment-radius); diff --git a/src/uix/eidos/generated/base.css b/src/uix/eidos/generated/base.css index 7a551fb87..8cd5463a9 100644 --- a/src/uix/eidos/generated/base.css +++ b/src/uix/eidos/generated/base.css @@ -1419,7 +1419,6 @@ --date-field-placeholder-color: var(--color-content-muted); --date-field-literal-color: var(--color-content-muted); --date-field-focus-shadow: inset 0 0 0 var(--focus-ring-inner-width) var(--focus-ring-color), 0 0 0 var(--focus-ring-offset) var(--color-surface-default), 0 0 0 calc(var(--focus-ring-offset) + var(--focus-ring-width)) var(--focus-ring-color); - --date-field-segment-min-width: 1.5ch; --date-field-segment-height: calc(var(--_date-field-height) - var(--space-2)); --date-field-segment-radius: var(--radius-sm); --date-field-segment-color: var(--color-content-primary); @@ -1469,7 +1468,6 @@ --time-field-placeholder-color: var(--color-content-muted); --time-field-literal-color: var(--color-content-muted); --time-field-focus-shadow: inset 0 0 0 var(--focus-ring-inner-width) var(--focus-ring-color), 0 0 0 var(--focus-ring-offset) var(--color-surface-default), 0 0 0 calc(var(--focus-ring-offset) + var(--focus-ring-width)) var(--focus-ring-color); - --time-field-segment-min-width: 1.5ch; --time-field-segment-height: calc(var(--_time-field-height) - var(--space-2)); --time-field-segment-radius: var(--radius-sm); --time-field-segment-color: var(--color-content-primary); @@ -1519,7 +1517,6 @@ --color-field-placeholder-color: var(--color-content-muted); --color-field-literal-color: var(--color-content-muted); --color-field-focus-shadow: inset 0 0 0 var(--focus-ring-inner-width) var(--focus-ring-color), 0 0 0 var(--focus-ring-offset) var(--color-surface-default), 0 0 0 calc(var(--focus-ring-offset) + var(--focus-ring-width)) var(--focus-ring-color); - --color-field-segment-min-width: 1.5ch; --color-field-segment-height: calc(var(--_color-field-height) - var(--space-2)); --color-field-segment-radius: var(--radius-sm); --color-field-segment-color: var(--color-content-primary); diff --git a/src/uix/eidos/lib/recipes/base.ts b/src/uix/eidos/lib/recipes/base.ts index 3ff5e0924..7bd706f2b 100644 --- a/src/uix/eidos/lib/recipes/base.ts +++ b/src/uix/eidos/lib/recipes/base.ts @@ -1241,7 +1241,6 @@ export const THEME_BASE_RECIPE_TOKENS = { 'literal-color': 'var(--color-content-muted)', 'focus-shadow': 'inset 0 0 0 var(--focus-ring-inner-width) var(--focus-ring-color), 0 0 0 var(--focus-ring-offset) var(--color-surface-default), 0 0 0 calc(var(--focus-ring-offset) + var(--focus-ring-width)) var(--focus-ring-color)', - 'segment-min-width': '1.5ch', 'segment-height': 'calc(var(--_date-field-height) - var(--space-2))', 'segment-radius': 'var(--radius-sm)', 'segment-color': 'var(--color-content-primary)', @@ -1294,7 +1293,6 @@ export const THEME_BASE_RECIPE_TOKENS = { 'literal-color': 'var(--color-content-muted)', 'focus-shadow': 'inset 0 0 0 var(--focus-ring-inner-width) var(--focus-ring-color), 0 0 0 var(--focus-ring-offset) var(--color-surface-default), 0 0 0 calc(var(--focus-ring-offset) + var(--focus-ring-width)) var(--focus-ring-color)', - 'segment-min-width': '1.5ch', 'segment-height': 'calc(var(--_time-field-height) - var(--space-2))', 'segment-radius': 'var(--radius-sm)', 'segment-color': 'var(--color-content-primary)', @@ -1347,7 +1345,6 @@ export const THEME_BASE_RECIPE_TOKENS = { 'literal-color': 'var(--color-content-muted)', 'focus-shadow': 'inset 0 0 0 var(--focus-ring-inner-width) var(--focus-ring-color), 0 0 0 var(--focus-ring-offset) var(--color-surface-default), 0 0 0 calc(var(--focus-ring-offset) + var(--focus-ring-width)) var(--focus-ring-color)', - 'segment-min-width': '1.5ch', 'segment-height': 'calc(var(--_color-field-height) - var(--space-2))', 'segment-radius': 'var(--radius-sm)', 'segment-color': 'var(--color-content-primary)',