--- /dev/null
+@charset "UTF-8";
+
+// scss-lint:disable SpaceAroundOperator
+
+/// Builds directional properties by parsing CSS shorthand values. For example,
+/// a value of `10px null` will output top and bottom directional properties,
+/// but the `null` skips left and right from being output.
+///
+/// @argument {string} $property
+/// Base property.
+///
+/// @argument {string} $suffix
+/// Suffix to append. Use `null` to omit.
+///
+/// @argument {list} $values
+/// List of values to set for the property.
+///
+/// @example scss
+/// .element {
+/// @include _directional-property(border, width, null 5px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-right-width: 5px;
+/// border-left-width: 5px;
+/// }
+///
+/// @require {function} _compact-shorthand
+///
+/// @require {function} _contains-falsy
+///
+/// @access private
+
+@mixin _directional-property(
+ $property,
+ $suffix,
+ $values
+) {
+ $top: $property + "-top" + if($suffix, "-#{$suffix}", "");
+ $bottom: $property + "-bottom" + if($suffix, "-#{$suffix}", "");
+ $left: $property + "-left" + if($suffix, "-#{$suffix}", "");
+ $right: $property + "-right" + if($suffix, "-#{$suffix}", "");
+ $all: $property + if($suffix, "-#{$suffix}", "");
+
+ $values: _compact-shorthand($values);
+
+ @if _contains-falsy($values) {
+ @if nth($values, 1) { #{$top}: nth($values, 1); }
+
+ @if length($values) == 1 {
+ @if nth($values, 1) { #{$right}: nth($values, 1); }
+ } @else {
+ @if nth($values, 2) { #{$right}: nth($values, 2); }
+ }
+
+ @if length($values) == 2 {
+ @if nth($values, 1) { #{$bottom}: nth($values, 1); }
+ @if nth($values, 2) { #{$left}: nth($values, 2); }
+ } @else if length($values) == 3 {
+ @if nth($values, 3) { #{$bottom}: nth($values, 3); }
+ @if nth($values, 2) { #{$left}: nth($values, 2); }
+ } @else if length($values) == 4 {
+ @if nth($values, 3) { #{$bottom}: nth($values, 3); }
+ @if nth($values, 4) { #{$left}: nth($values, 4); }
+ }
+ } @else {
+ #{$all}: $values;
+ }
+}