Skip to content
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

update(scss): add initial helpers/mixins/etc. #24

Merged
merged 1 commit into from
Oct 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions packages/scss/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
# @ooee/scss
SCSS assets for building CSS stylesheets.

## Installation
```
npm install @ooee/scss
```

## Consumption

```scss
// PRODUCTION
@use '@ooee/scss';

// DEVELOPMENT
@use '@ooee/scss/dev';
```
1 change: 1 addition & 0 deletions packages/scss/__overrides.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Try to keep this file empty of any styles!
6 changes: 6 additions & 0 deletions packages/scss/_config.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Module Usage:
//
// @use '@ooee/scss/config' with ($env: DEV);
// @use '@ooee/scss';

$env: PROD !default;
2 changes: 2 additions & 0 deletions packages/scss/components/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/// TBD...
//@use 'compnent-name';
1 change: 1 addition & 0 deletions packages/scss/core/_theme.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// TBD...
1 change: 1 addition & 0 deletions packages/scss/core/_typography.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// TBD...
2 changes: 2 additions & 0 deletions packages/scss/core/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@use 'theme';
@use 'typography';
2 changes: 2 additions & 0 deletions packages/scss/dev.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@use 'config' with ($env: DEV);
@use 'index';
5 changes: 5 additions & 0 deletions packages/scss/helpers/_visually-hidden.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@use '../utils/a11y' as A11y

.ui--visuallyHidden {
@include A11y.visuallyHidden;
}
1 change: 1 addition & 0 deletions packages/scss/helpers/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@use 'visually-hidden';
6 changes: 6 additions & 0 deletions packages/scss/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@use 'resets';
@use 'core';
@use 'components';
@use 'helpers';
@use '_overrides'; // KEEP LAST!

13 changes: 13 additions & 0 deletions packages/scss/resets/_box-sizing.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// -----------------------------------------------------------------------------
// BOX-SIZING RESET
// -----------------------------------------------------------------------------
// See https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/
html {
box-sizing: border-box;
}

*,
*::before,
*::after {
box-sizing: inherit;
}
5 changes: 5 additions & 0 deletions packages/scss/resets/_document.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
html,
body {
padding: 0;
margin: 0;
}
15 changes: 15 additions & 0 deletions packages/scss/resets/_inert.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
@use '../utils/user-select' as UserSelect;

// https://github.com/WICG/inert/commit/be4b4a4f4a4c8e37e775c64b9db22b78ccf9d96a
// https://github.com/WICG/inert/blob/master/src/inert.js#L703
// https://github.com/WICG/inert/commit/be4b4a4f4a4c8e37e775c64b9db22b78ccf9d96a#diff-04c6e90faac2675aa89e2176d2eec7d8R85

[inert] {
cursor: default;
pointer-events: none;
}

[inert],
[inert] * {
@include UserSelect.set(none);
}
5 changes: 5 additions & 0 deletions packages/scss/resets/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@use 'box-sizing';
@use 'document';

/// OPTIONAL
//@use 'inert';
34 changes: 34 additions & 0 deletions packages/scss/utils/_a11y.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// @use '@ooee/scss/utils/a11y';
// .foo {
// @include a11y.visuallyHidden;
// }
@mixin visuallyHidden {
// remove visible styles around element perimeter
border: 0 !important;
outline: none !important;
box-shadow: none !important;

// shrink as small as possible without removing
// content from the a11y tree
width: 1px !important;
height: 1px !important;
clip: rect(1px, 1px, 1px, 1px); /* old & current Browsers */
clip-path: inset(50%); /* browsers in the future */

// Prevent the screen reader to skip spaces between words
white-space: nowrap;

// eliminate any space being taken up by the element
margin: -1px !important;
overflow: hidden !important;
padding: 0 !important;

// remove element from normal document flow
position: absolute !important;
z-index: -99999 !important;

// render fg and bg invisible
color: transparent;
background-color: transparent;
text-shadow: none;
}
21 changes: 21 additions & 0 deletions packages/scss/utils/_env.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
@use "../config";

// Only generate content if in DEV mode
//
// @use "@ooee/scss/utils/env";
// @include env.DEV { ... }
@mixin DEV {
@if config.$env == DEV {
@content;
}
}

// Only generate content if in PROD mode.
//
// @use "@ooee/scss/utils/env";
// @include env.PROD { ... }
@mixin PROD {
@if config.$env == PROD {
@content;
}
}
17 changes: 17 additions & 0 deletions packages/scss/utils/_layout.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// @use "@ooee/scss/utils/layout" as Layout;
// .foo {
// @include Layout.stack(8px);
// }
@mixin stack($gap: 0) {
display: flex;
flex-direction: column;

> * {
margin-top: 0;
margin-bottom: 0;

& + * {
margin-top: $gap;
}
}
}
42 changes: 42 additions & 0 deletions packages/scss/utils/_placeholder.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Mixin for standard `::placeholder` pseudo-element selector
// - https://developer.mozilla.org/en-US/docs/Web/CSS/::placeholder#Browser_compatibility
// - https://css-tricks.com/snippets/css/style-placeholder-text/
//
// Example:
// @use '@ooee/scss/utils/placeholder' as Placeholder;
// input {
// @include Placeholder.apply { ... }
// }
@mixin apply {
// Firefox (< 51)
&::-moz-placeholder { @content; }

// Edge
&::-ms-input-placeholder { @content; }

// Chrome (< 57), Opera (< 44), Safari (< 10.1), Edge
&::-webkit-input-placeholder { @content; }

// standards-compliant selector
&::placeholder { @content; }
}


// Mixin for standard `:placeholder-shown` pseudo-class
// - https://developer.mozilla.org/en-US/docs/Web/CSS/:placeholder-shown#Browser_compatibility
//
// Example:
// @use "@ooee/scss/utils/placeholder" as Placeholder;
// input {
// @include Placeholder.applyWhenShown { ... }
// }
@mixin applyWhenShown {
// Firefox (< 51) uses non-standard, prefixed selector
&:-moz-placeholder { @content; }

// IE10+ uses non-standard, prefixed selector
&:-ms-input-placeholder { @content; }

// standards-compliant selector
&:placeholder-shown { @content; }
}
19 changes: 19 additions & 0 deletions packages/scss/utils/_prefers.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// @use '@ooee/scss/utils/prefers' as Prefers;
// @include Prefers.reducedMotion {
// // apply reduced animations/transitions/motion here...
// }
@mixin reducedMotion {
@media (prefers-reduced-motion) {
@content;
}
}

// @use '@ooee/scss/utils/prefers' as Prefers;
// @include Prefers.darkMode {
// // apply "dark" styles here...
// }
@mixin darkMode {
@media (prefers-color-scheme: dark) {
@content;
}
}
76 changes: 76 additions & 0 deletions packages/scss/utils/_pseudo.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
@use 'env';

// @use "@ooee/scss/utils/pseudo" as Pseudo;
// .foo {
// @include Pseudo.hover { ... }
// }
// +------------+
// | env.$mode |
// +--------------+------------+
// | selector | DEV | PROD |
// +--------------+-----+------+
// | :hover | X | X |
// +--------------+-----+------+
// | .mock-hover | X | |
// +--------------+-----+------+
@mixin hover {
&:hover {
@content;
}

@include env.DEV {
&.mock-hover {
@content;
}
}
}

// @use "@ooee/scss/utils/pseudo" as Pseudo;
// .foo {
// @include Pseudo.focus { ... }
// }
// +------------+
// | env.$mode |
// +--------------+------------+
// | selector | DEV | PROD |
// +--------------+-----+------+
// | :focus | X | X |
// +--------------+-----+------+
// | .mock-focus | X | |
// +--------------+-----+------+
@mixin focus {
&:focus {
@content;
}

@include env.DEV {
&.mock-focus {
@content;
}
}
}

// @use "@ooee/scss/utils/pseudo" as Pseudo;
// .foo {
// @include Pseudo.active { ... }
// }
// +------------+
// | env.$mode |
// +--------------+------------+
// | selector | DEV | PROD |
// +--------------+-----+------+
// | :active | X | X |
// +--------------+-----+------+
// | .mock-active | X | |
// +--------------+-----+------+
@mixin active {
&:active {
@content;
}

@include env.DEV {
&.mock-active {
@content;
}
}
}
13 changes: 13 additions & 0 deletions packages/scss/utils/_user-select.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// See https://developer.mozilla.org/en-US/docs/Web/CSS/user-select#Browser_compatibility
//
// Example:
// @use '@ooee/scss/utils/user-select' as UserSelect;
// .foo {
// @include UserSelect.set(none);
// }
@mixin set($value) {
-webkit-user-select: $value; // Edge, Opera?, Firefox (49-68), Safari
-moz-user-select: $value; // Firefox (<49)
-ms-user-select: $value; // Edge, IE
user-select: $value; // Chromium (54+) and spec-compliant browsers
}