-
Notifications
You must be signed in to change notification settings - Fork 63
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposal: Change styles structure #2160
Proposal: Change styles structure #2160
Conversation
|
Size Change: -174 B (0%) Total Size: 1.23 MB
ℹ️ View Unchanged
|
[inputOptionWedge]: showWedgeProp, | ||
[getWedgeStyles(renderedContext, state, theme)]: shouldRenderWedge, | ||
[getHoverStyles(renderedContext, theme)]: | ||
!disabled && isInteractive && state !== State.Highlight, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: I would extract his into a separate shouldShowHoverStyles
var or something like that
[inputOptionWedge]: showWedgeProp, | ||
[getWedgeStyles(renderedContext, state, theme)]: shouldRenderWedge, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are these separate?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure, but these styles have different logic for how they're rendered, and I was just maintaining that. I really just wanted to propose an alternate organizational approach to Brooke's PR
const State = { | ||
Default: 'default', | ||
Hover: 'hover', | ||
Highlight: 'highlight', | ||
Disabled: 'disabled', | ||
Checked: 'checked', | ||
Destructive: 'destructive', | ||
} as const; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the purpose of this type? It doesn't look like we're exposing it to consumers, and the fact that the states in this type aren't actually mutually exclusive is confusing (e.g. an option can be both "hovered" and "checked" at the same time, so what is State
in this case?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To me there are multiple different "state"-type variables:
type State = "default" | "disabled" | "checked" | "highlight"
type ActionType = "default" | "destructive"
and also isHovered
(which can apply to any combination of State
& ActionType
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Then, in .style.ts
we have
get[Element]StateStyle(context)
, get[Element]ActionTypeStyle(context)
and get[Element]HoverStyle(context)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You'd also probably also want to simplify XYZContextColors
to match
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Broad strokes, I like the pattern of using the emotion css
object to toggle different styles rather than putting that logic inside a single function.
I do have concerns about how we're defining the styles though, since we have what's logically 4 inter-dependent layers of state (action type, state, hover, darkMode).
It's not perfect, but the way I styled CalendarCell
may be relevant here: https://github.com/mongodb/leafygreen-ui/blob/adam/date-picker-lg-3152/packages/date-picker/src/shared/components/Calendar/CalendarCell/CalendarCell.styles.ts
✍️ Proposed changes
This PR is a set of proposed edits to #2150.
Several things to note -
renderedContext === "form" && actionType === "destructive"
. I've restricted this from breaking the component and updated the LiveExample to still be interactive with both renderedContext values.overrideHoverBgColor
were identical to the values defined inthemes.ts
, so there wasn't really an override going on? If that just needed new values, we can change them, but I've removed them for now.