mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 13:36:48 +00:00
Let a dayTintProvider send its own colour
Four tones cannot keep a twenty-stop trip's legs apart, which is most of the point of colour-coding one. A contribution can now carry `#rrggbb` alongside `tone`, per region or as a shorthand. The split of control is: the plugin picks the hue, the host picks the weight. A colour rides the same per-theme, per-region alphas as a tone, and its OKLCH lightness is clamped into a per-theme band first, so no contribution can hand a user a day card they can't read. The band brackets the built-in tones rather than tightening around them, so an ordinary colour passes through untouched and a hex equal to a tone renders exactly like that tone. Hue and chroma are never touched - it bounds a colour, it doesn't boost one, so a near-white grey still lands as a faint tint. Only `#rrggbb` survives normalization, and that is a security boundary rather than tidying: the value ends up inside a `color-mix()` in an inline `background`, a shorthand that takes a layer list, so a string closing the paren early could append a `url(...)` and beacon everyone viewing the trip. A region gets exactly one paint instruction - what it names beats the shorthand, a colour beats a tone at the same level - so the client never has a tie to break. A region naming a colour the host can't use degrades to `default` like a bogus tone already did.
This commit is contained in:
@@ -691,14 +691,23 @@ export interface PluginDayScheduleItem {
|
||||
* visible while scrolling the itinerary. The card has three separately tintable
|
||||
* regions; an absent one is not tinted and renders exactly as it does with no plugin.
|
||||
* Server-normalized: dayIds checked against the trip, one contribution per day (first
|
||||
* granted provider wins), the `tone` shorthand already resolved into the regions,
|
||||
* labels sanitized + capped. Tone only — the client picks the alpha per theme. */
|
||||
* granted provider wins), the `tone` / `color` shorthands already resolved into the
|
||||
* regions, labels sanitized + capped.
|
||||
*
|
||||
* A region carries EITHER a tone from the fixed palette or the plugin's own colour,
|
||||
* never both — the server picked the winner. `*Color` is guaranteed `#rrggbb` (nothing
|
||||
* else survives normalization, because it lands inside a CSS value); the client still
|
||||
* owns how strongly it renders — alpha per theme and per region, lightness clamped
|
||||
* into a readable band. */
|
||||
export type PluginDayTintTone = 'default' | 'success' | 'warn' | 'danger'
|
||||
export interface PluginDayTint {
|
||||
pluginId: string; dayId: number;
|
||||
badgeTone?: PluginDayTintTone;
|
||||
badgeColor?: string;
|
||||
headerTone?: PluginDayTintTone;
|
||||
headerColor?: string;
|
||||
activityTone?: PluginDayTintTone;
|
||||
activityColor?: string;
|
||||
label?: string;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user