-
Notifications
You must be signed in to change notification settings - Fork 76
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
chore(responsive): add xxs breakpoint prop #8041
Conversation
cc @driskull |
--calcite-app-breakpoint-width-md: 1000px; | ||
--calcite-app-breakpoint-width-sm: 100px; | ||
--calcite-app-breakpoint-width-xs: 10px; | ||
--calcite-app-breakpoint-width-xxs: 1px; |
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.
Breakpoints as CSS Custom Props don't actually work. They can be queried by JS but this is not the ideal way to retrieve these variables. These tokens are also provided by calcite-design-tokens as CSS custom props. However the values do not align.
--calcite-app-breakpoint-width-lg: 1440px; /* min-width size */
--calcite-app-breakpoint-width-md: 1152px; /* min-width size */
--calcite-app-breakpoint-width-sm: 768px; /* min-width size */
--calcite-app-breakpoint-width-xs: 476px; /* min-width size */
--calcite-app-breakpoint-width-xxs: 320px;
Or as SCSS variables
$breakpoint-width-lg: 1440px; // min-width size
$breakpoint-width-md: 1152px; // min-width size
$breakpoint-width-sm: 768px; // min-width size
$breakpoint-width-xs: 476px; // min-width size
$breakpoint-width-xxs: 320px; // Small handheld devices and mini-windows
The new PR (8044) also provides the same breakpoints now as a JS object
import tokenJSON from "@esri/calcite-design-tokens/js";
const breakpointXxs = tokenJSON.core.breakpoint.width.xxs.value;
or as tree-shakeable named exports
import { CoreBreakpointWidthXxs } from "@esri/calcite-design-tokens/es6";
Do we still need this PR?
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.
Breakpoints as CSS Custom Props don't actually work.
Can you provide more info on this? I'm not sure I follow.
They can be queried by JS but this is not the ideal way to retrieve these variables. These tokens are also provided by calcite-design-tokens as CSS custom props. However the values do not align.
There are a few factors on why we get the breakpoints by evaluating the CSS at runtime:
- no JS object at the time
- unclear if we were allowing users to override breakpoints via CSS props or not
- wanted to avoid introducing a third way to reference tokens within the code base
Depending on 2, we could revisit this module's implementation (in a follow-up PR) and set some guidelines for 3.
These breakpoints do not align with designer approved breakpoints
FWIW, this test cover looking up the breakpoints CSS props and isn't meant to match the actual breakpoint values.
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.
Can you provide more info on this? I'm not sure I follow.
https://bholmes.dev/blog/alternative-to-css-variable-media-queries/
- unclear if we were allowing users to override breakpoints via CSS props or not
While a consumer could override any custom prop including --calcite-app-breakpoint-width-lg
it won't do them any good because CSS will not use custom props in media breakpoint queries as shown in the link above. This can be accomplished via SCSS but that would rely on the SCSS var $breakpoint-width-lg
before compiling.
FWIW, this test cover looking up the breakpoints CSS props and isn't meant to match the actual breakpoint values.
Got it! Thanks for the clarification.
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.
Container Style Queries can be used to set breakpoint styles with CSS Custom Props but that's currently only available in chrome https://developer.chrome.com/blog/style-queries/
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.
While a consumer could override any custom prop including --calcite-app-breakpoint-width-lg it won't do them any good because CSS will not use custom props in media breakpoint queries as shown in the link above. This can be accomplished via SCSS but that would rely on the SCSS var $breakpoint-width-lg before compiling.
Container Style Queries can be used to set breakpoint styles with CSS Custom Props but that's currently only available in chrome https://developer.chrome.com/blog/style-queries/
Ah, that's right. Thanks for catching that and clarifying.
The responsive
util does pick up breakpoint CSS props overrides at load time, but we would still have a disconnect in a few places (namely stylesheet and conditional rendering) because we can't use style queries/environment variables yet.
I'll update the util in a follow-up PR to use the JS exports instead. ✨🔧✨
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.
These breakpoints do not align with designer approved breakpoints
My bad this is just for testing.
…ct (#8051) **Related Issue:** N/A ## Summary Stems from #8041 (comment). This changes how breakpoints are built and used (`responsive` module): * uses design tokens JS output target to reference breakpoint values * prevents possible disconnect between stylesheet and conditional rendering breakpoint values (only the latter could be overridden via CSS props) * the breakpoints lookup object no longer needs to be obtained asynchronously This also updates and unskips the `responsive` spec test. **Note**: this includes an update to the testing Jest config to apply Stencil's transformer to the design token's headless ESM file as the default one was not transforming properly and leading to `Jest encountered an unexpected token` errors when running the spec test.
…ct (#8051) **Related Issue:** N/A ## Summary Stems from #8041 (comment). This changes how breakpoints are built and used (`responsive` module): * uses design tokens JS output target to reference breakpoint values * prevents possible disconnect between stylesheet and conditional rendering breakpoint values (only the latter could be overridden via CSS props) * the breakpoints lookup object no longer needs to be obtained asynchronously This also updates and unskips the `responsive` spec test. **Note**: this includes an update to the testing Jest config to apply Stencil's transformer to the design token's headless ESM file as the default one was not transforming properly and leading to `Jest encountered an unexpected token` errors when running the spec test.
Related Issue: #7856
Summary
Updates
breakpoints
lookup object to includexxs
(added in #7992).