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

Grid component react #4894

Merged
merged 42 commits into from
Jan 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
20e4bb3
feat(grid): add hiding columns with width 0
zachhardesty7 Aug 15, 2019
1290f60
docs(grid): add example of hiding columns
zachhardesty7 Aug 15, 2019
6a746be
docs(grid): fix incorrect `bleed` info and typos
zachhardesty7 Aug 15, 2019
031d46a
docs(grid): add link to live demo website
zachhardesty7 Aug 15, 2019
cd46e13
feat(grid): implement functional React component
zachhardesty7 Aug 15, 2019
176d0a9
chore(grid): add generated files
zachhardesty7 Oct 3, 2019
0d8c4ad
fix(docs): storybook support load CSF & add sort
zachhardesty7 Oct 7, 2019
203655c
docs(Grid): update valid props
zachhardesty7 Oct 7, 2019
e9020ac
docs(Grid): add initial story & style margins
zachhardesty7 Oct 7, 2019
9de2fd2
docs(Grid): clean up doc styles & knob controls
zachhardesty7 Nov 11, 2019
1c84f6a
docs(Grid): add color knobs, pass thru params
zachhardesty7 Nov 12, 2019
ae19981
docs(Grid): fix minor fullwidth disp bug
zachhardesty7 Nov 12, 2019
af7b92e
test(Grid): add smoke tests for root el
zachhardesty7 Nov 12, 2019
fd48342
test(Grid): add basic row and col tests
zachhardesty7 Dec 16, 2019
302fd8a
test(Grid): fix wrappers & update index snapshot
zachhardesty7 Dec 16, 2019
a54fc63
feat(Grid): use layout's breakpoints
zachhardesty7 Dec 16, 2019
7e5d938
chore(Grid): port all tests, add 'as' prop
zachhardesty7 Dec 16, 2019
0a945ff
docs(Grid): include stories from #3892
zachhardesty7 Dec 17, 2019
acd0d48
feat(Grid): support obj syntax & rm offset props
zachhardesty7 Dec 28, 2019
35d8769
fix(Grid): add missing @carbon/layout pkg
zachhardesty7 Jan 11, 2020
021e1a0
feat(Grid): rm `noGutter` prop for later PR
zachhardesty7 Jan 12, 2020
573727e
chore(Grid): revert storybook to 5.2.1
zachhardesty7 Jan 12, 2020
279bc1d
chore(Grid): convert to recommended syntax
zachhardesty7 Jan 12, 2020
179e50b
chore(Grid): inline array gen helper
zachhardesty7 Jan 12, 2020
d591165
fix(Grid): update incorrect prop types
zachhardesty7 Jan 15, 2020
d12c3ef
chore(Grid): update import format
zachhardesty7 Jan 15, 2020
9afd776
Revert sass.md
zachhardesty7 Jan 15, 2020
d6e6bf9
Revert _mixins.scss
zachhardesty7 Jan 15, 2020
54d56d5
Revert App.js
zachhardesty7 Jan 15, 2020
0017c8f
refactor(grid): split out files and update Column
joshblack Jan 21, 2020
ee23e15
refactor(grid): update test suite for grid components
joshblack Jan 22, 2020
8384714
docs(grid): update story for grid
joshblack Jan 22, 2020
9c65ae4
Merge branch 'master' of github.com:carbon-design-system/carbon into …
joshblack Jan 22, 2020
0833e0b
fix(react): update entrypoint with grid components
joshblack Jan 22, 2020
898df9e
fix(grid): convert story offset to prop obj
zachhardesty7 Jan 22, 2020
520e9aa
fix(react): update with missing prop values
joshblack Jan 27, 2020
36b923e
Merge branch 'master' of github.com:carbon-design-system/carbon into …
joshblack Jan 27, 2020
5bbab2b
Merge branch 'master' into grid-component-react
joshblack Jan 27, 2020
e65f750
chore(project): sync offline mirror
joshblack Jan 27, 2020
3efc941
Merge branch 'grid-component-react' of github.com:zachhardesty7/carbo…
joshblack Jan 27, 2020
95d3135
Merge branch 'master' into grid-component-react
joshblack Jan 27, 2020
34c2cbf
Merge branch 'master' into grid-component-react
joshblack Jan 29, 2020
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
Binary file not shown.
Binary file added .yarn/offline-mirror/@storybook-addons-5.3.0.tgz
Binary file not shown.
Binary file added .yarn/offline-mirror/@storybook-api-5.3.0.tgz
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added .yarn/offline-mirror/@storybook-router-5.3.0.tgz
Binary file not shown.
Binary file added .yarn/offline-mirror/@storybook-theming-5.3.0.tgz
Binary file not shown.
Binary file added .yarn/offline-mirror/schema-utils-2.6.1.tgz
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,339 @@
//
// Copyright IBM Corp. 2018, 2018
//
// This source code is licensed under the Apache-2.0 license found in the
// LICENSE file in the root directory of this source tree.
//

// Helpers for defining columns, rows, and containers are heavily inspired by,
// and often derived from, bootstrap:
// https://github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/_grid.scss

@import '../vendor/@carbon/layout/breakpoint';
@import 'prefix';

// -----------------------------------------------------------------------------
// Columns
// -----------------------------------------------------------------------------

/// Used to initialize the default properties for a column class, most notably
/// for setting width and default gutters when a column's breakpoint has not been
/// hit yet.
/// @param {Number} $gutter [$carbon--grid-gutter] - The gutter for the grid system
/// @param {Number} $collapsed-gutter [$carbon--grid-gutter--condensed] - The condensed mode gutter
/// @access private
/// @group @carbon/grid
@mixin carbon--make-col-ready(
$gutter: $carbon--grid-gutter,
$condensed-gutter: $carbon--grid-gutter--condensed
) {
// Prevent columns from becoming too narrow when at smaller grid tiers by
// always setting `width: 100%;`. This works because we use `flex` values
// later on to override this initial width.
width: 100%;
padding-right: ($gutter / 2);
padding-left: ($gutter / 2);

// For our condensed use-case, our gutters collapse to 2px solid, 1px on each
// side.
.#{$prefix}--row--condensed &,
.#{$prefix}--grid--condensed & {
padding-right: ($condensed-gutter / 2);
padding-left: ($condensed-gutter / 2);
}
}

/// Define the width of the column for a given span and column count.
/// A width of 0 will hide the column entirely.
/// @param {Number} $span - The number of columns covered
/// @param {Number} $columns - The total number of columns available
/// @access private
/// @group @carbon/grid
@mixin carbon--make-col($span, $columns) {
@if $span == 0 {
display: none;
} @else {
// Explicitly include `display: block` to override
display: block;
flex: 0 0 percentage($span / $columns);
// Add a `max-width` to ensure content within each column does not blow out
// the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
// do not appear to require this.
max-width: percentage($span / $columns);
}
}

/// Create a column offset for a given span and column count.
/// @param {Number} $span - The number of columns the offset should cover
/// @param {Number} $columns - The total number of columns available
/// @access private
/// @group @carbon/grid
@mixin carbon--make-col-offset($span, $columns) {
$offset: $span / $columns;
@if $offset == 0 {
margin-left: 0;
} @else {
margin-left: percentage($offset);
}
}

/// Output the CSS required for all the columns in a given grid system.
/// @param {Map} $breakpoints [$carbon--grid-breakpoints] - The breakpoints in the grid system
/// @param {Number} $gutter [$carbon--grid-gutter] - The gutter for the grid system
/// @access private
/// @group @carbon/grid
@mixin carbon--make-grid-columns(
$breakpoints: $carbon--grid-breakpoints,
$gutter: $carbon--grid-gutter
) {
.#{$prefix}--col {
@include carbon--make-col-ready();
}

@each $breakpoint in map-keys($breakpoints) {
$infix: carbon--breakpoint-infix($breakpoint);
$columns: map-get(map-get($breakpoints, $breakpoint), columns);

// Allow columns to stretch full width below their breakpoints
@for $i from 0 through $columns {
.#{$prefix}--col#{$infix}-#{$i} {
@include carbon--make-col-ready();
}
}

.#{$prefix}--col#{$infix},
.#{$prefix}--col#{$infix}--auto {
@include carbon--make-col-ready();
}

@include carbon--breakpoint($breakpoint, $breakpoints) {
// Provide basic `.col-{bp}` classes for equal-width flexbox columns
.#{$prefix}--col,
.#{$prefix}--col#{$infix} {
flex-basis: 0;
flex-grow: 1;
max-width: 100%;
}

.#{$prefix}--col--auto,
.#{$prefix}--col#{$infix}--auto {
flex: 1 0 0%;
width: auto;
// Reset earlier grid tiers
max-width: 100%;
}

@for $i from 0 through $columns {
.#{$prefix}--col#{$infix}-#{$i} {
@include carbon--make-col($i, $columns);
}
}

@for $i from 0 through ($columns - 1) {
@if not($infix == '') {
.#{$prefix}--offset#{$infix}-#{$i} {
@include carbon--make-col-offset($i, $columns);
}
}
}
}
}
}

// -----------------------------------------------------------------------------
// Rows
// -----------------------------------------------------------------------------

/// Define the properties for a selector assigned to a row in the grid system.
/// @param {Number} $gutter [$carbon--grid-gutter] - The gutter in the grid system
/// @access private
/// @group @carbon/grid
@mixin carbon--make-row($gutter: $carbon--grid-gutter) {
display: flex;
flex-wrap: wrap;
margin-right: -1 * $gutter / 2;
margin-left: -1 * $gutter / 2;
}

// -----------------------------------------------------------------------------
// No gutter
// -----------------------------------------------------------------------------

/// Add `no-gutter` and `no-gutter--{left,right}` classes to the output CSS. These
/// classes are useful for dropping the gutter in fluid situations.
/// @access private
/// @group @carbon/grid
@mixin carbon--no-gutter {
.#{$prefix}--no-gutter,
.#{$prefix}--row.#{$prefix}--no-gutter [class*='#{$prefix}--col'] {
padding-left: 0;
padding-right: 0;
}

.#{$prefix}--no-gutter--left,
.#{$prefix}--row.#{$prefix}--no-gutter--left [class*='#{$prefix}--col'] {
padding-left: 0;
}

.#{$prefix}--no-gutter--right,
.#{$prefix}--row.#{$prefix}--no-gutter--right [class*='#{$prefix}--col'] {
padding-right: 0;
}
}

// -----------------------------------------------------------------------------
// Hang
// -----------------------------------------------------------------------------

/// Add `hang--left` and `hang--right` classes for a given gutter. These classes are
/// used alongside `no-gutter--left` and `no-gutter--right` to "hang" type.
/// @param {Number} $gutter [$carbon--grid-gutter] - The gutter in the grid system
/// @access private
/// @group @carbon/grid
@mixin carbon--hang($gutter: $carbon--grid-gutter) {
.#{$prefix}--hang--left {
padding-left: ($gutter / 2);
}

.#{$prefix}--hang--right {
padding-right: ($gutter / 2);
}
}

// -----------------------------------------------------------------------------
// Aspect ratio
// -----------------------------------------------------------------------------

/// The aspect ratios that are used to generate corresponding aspect ratio
/// classes in code
/// @type List
/// @access public
/// @group @carbon/grid
$carbon--aspect-ratios: ((16, 9), (2, 1), (4, 3), (1, 1), (1, 2));

/// Output the CSS classes for generating aspect ratio classes
/// @param {List} $aspect-ratios [$carbon--aspect-ratios] - A list of aspect ratios to generate
/// @access private
/// @group @carbon/grid
@mixin carbon--aspect-ratio($aspect-ratios: $carbon--aspect-ratios) {
.#{$prefix}--aspect-ratio {
height: 0;
position: relative;
}

.#{$prefix}--aspect-ratio--object {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
}

@each $ratio in $aspect-ratios {
$width: nth($ratio, 1);
$height: nth($ratio, 2);

.#{$prefix}--aspect-ratio--#{$width}x#{$height} {
padding-bottom: percentage($height / $width);
}
}
}

// -----------------------------------------------------------------------------
// Grid
// -----------------------------------------------------------------------------

/// Create the container for a grid. Will cause full-bleed for the grid unless
/// max-width properties are added with `make-container-max-widths`
/// @param {Map} $breakpoints [$carbon--grid-breakpoints] - A map of breakpoints where the key is the name
/// @access private
/// @group @carbon/grid
@mixin carbon--make-container($breakpoints: $carbon--grid-breakpoints) {
margin-right: auto;
margin-left: auto;

@include carbon--set-largest-breakpoint();

@each $name, $value in $breakpoints {
$prev-breakpoint: map-get($breakpoints, carbon--breakpoint-prev($name));
$margin: map-get($value, margin);

@if $prev-breakpoint {
$prev-margin: map-get($prev-breakpoint, margin);
@if $prev-margin != $margin {
@include carbon--breakpoint($name) {
padding-left: #{($carbon--grid-gutter / 2) + $margin};
padding-right: #{($carbon--grid-gutter / 2) + $margin};
}
}
} @else {
@include carbon--breakpoint($name) {
padding-left: #{($carbon--grid-gutter / 2) + $margin};
padding-right: #{($carbon--grid-gutter / 2) + $margin};
}
}
}
}

/// Get the last breakpoint width and set max-width to its value
/// @param {Map} $breakpoints [$carbon--grid-breakpoints] - A map of breakpoints where the key is the name
/// @access private
/// @group @carbon/grid
@mixin carbon--set-largest-breakpoint($breakpoints: $carbon--grid-breakpoints) {
$largest-breakpoint: last-map-item($breakpoints);

max-width: map-get($largest-breakpoint, 'width');
}

/// Add in the max-widths for each breakpoint to the container
/// @param {Map} $breakpoints [$carbon--grid-breakpoints] - A map of breakpoints where the key is the name
/// @access private
/// @group @carbon/grid
@mixin carbon--make-container-max-widths(
$breakpoints: $carbon--grid-breakpoints
) {
@each $name, $value in $breakpoints {
@include carbon--breakpoint($name) {
max-width: map-get($value, width);
}
}
}

/// Generate the CSS for a grid for the given breakpoints and gutters
/// @param {Map} $breakpoints [$carbon--grid-breakpoints] - The default breakpoints
/// @param {Number} $grid-gutter [$carbon--grid-gutter] - The default gutters
/// @param {Number} $condensed-gutter [$carbon--grid-gutter--condensed] - The condensed mode gutter
/// @access public
/// @group @carbon/grid
@mixin carbon--grid(
$breakpoints: $carbon--grid-breakpoints,
$grid-gutter: $carbon--grid-gutter,
$condensed-gutter: $carbon--grid-gutter--condensed
) {
.#{$prefix}--grid {
@include carbon--make-container($breakpoints);
}

@include carbon--largest-breakpoint($breakpoints) {
.#{$prefix}--grid--full-width {
max-width: 100%;
}
}

.#{$prefix}--row {
@include carbon--make-row();
}

.#{$prefix}--grid--condensed [class*='#{$prefix}--col'] {
padding-top: $condensed-gutter / 2;
padding-bottom: $condensed-gutter / 2;
}

@include carbon--make-grid-columns($breakpoints, $grid-gutter);
@include carbon--no-gutter();
@include carbon--hang($grid-gutter);
@include carbon--aspect-ratio();
}
Loading