{"version":3,"sources":["../../../src/govuk/helpers/_spacing.scss"],"names":[],"mappings":"AAAA,GAAG;AACH,yBAAyB;AACzB,GAAG;AACH,eAAe;AACf,gBAAgB;AAChB,gBAAgB;;AAEhB,qBAAqB;AACrB,kCAAkC;;AAElC,uBAAuB;AACvB,EAAE;AACF,oEAAoE;AACpE,EAAE;AACF,8DAA8D;AAC9D,qCAAqC;AACrC,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,gBAAgB;AAChB,eAAe;AACf,iCAAiC;AACjC,MAAM;AACN,EAAE;AACF,uCAAuC;AACvC,eAAe;AACf,qCAAqC;AACrC,MAAM;AACN,EAAE;AACF,0DAA0D;AAC1D,eAAe;AACf,+CAA+C;AAC/C,MAAM;AACN,EAAE;AACF,iBAAiB;;AAEjB;EACE,gDAAgD;EAChD;IACE;gCAC4B;EAC9B;;EAEA,mBAAmB;EACnB;IACE,kBAAkB;IAClB,wCAAwC;EAC1C;;EAEA;IACE,0IAA0I;EAC5I;;EAEA,sDAAsD;EACtD,mDAAmD;AACrD;;AAEA,qBAAqB;AACrB,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,qDAAqD;AACrD,EAAE;AACF,mEAAmE;AACnE,oCAAoC;AACpC,EAAE;AACF,8EAA8E;AAC9E,kEAAkE;AAClE,yEAAyE;AACzE,iEAAiE;AACjE,8CAA8C;AAC9C,wEAAwE;AACxE,oEAAoE;AACpE,EAAE;AACF,kBAAkB;;AAElB;;;;;;;EAOE,2DAA2D;EAC3D;IACE,2EAA2E;EAC7E;;EAEA;IACE;+DAC2D;EAC7D;;EAEA,yEAAyE;EACzE,+EAA+E;EAC/E,0CAA0C;EAC1C;IACE;uHACmH;EACrH;;EAEA,yCAAyC;EACzC;IACE;MACE,kDAAkD;IACpD;;IAEA,sCAAsC;IACtC;MACE;QACE,gEAAgE;MAClE,EAAE;QACA,8EAA8E;MAChF;IACF,EAAE;MACA;QACE;UACE,gEAAgE;QAClE,EAAE;UACA,8EAA8E;QAChF;MACF;IACF;EACF;AACF;;AAEA,oBAAoB;AACpB,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,kEAAkE;AAClE,EAAE;AACF,yCAAyC;AACzC,EAAE;AACF,8EAA8E;AAC9E,gEAAgE;AAChE,iEAAiE;AACjE,8CAA8C;AAC9C,wEAAwE;AACxE,oEAAoE;AACpE,EAAE;AACF,gBAAgB;AAChB,eAAe;AACf,sEAAsE;AACtE,MAAM;AACN,EAAE;AACF,iBAAiB;;AAEjB;EACE,4GAA4G;AAC9G;;AAEA,qBAAqB;AACrB,EAAE;AACF,0EAA0E;AAC1E,qEAAqE;AACrE,kEAAkE;AAClE,EAAE;AACF,yCAAyC;AACzC,EAAE;AACF,8EAA8E;AAC9E,kEAAkE;AAClE,iEAAiE;AACjE,8CAA8C;AAC9C,wEAAwE;AACxE,iEAAiE;AACjE,EAAE;AACF,gBAAgB;AAChB,eAAe;AACf,uEAAuE;AACvE,MAAM;AACN,EAAE;AACF,iBAAiB;;AAEjB;EACE,6GAA6G;AAC/G","file":"_spacing.scss","sourcesContent":["////\n/// @group helpers/spacing\n////\n@use \"sass:map\";\n@use \"sass:math\";\n@use \"sass:meta\";\n\n@import \"../tools/if\";\n@import \"../helpers/media-queries\";\n\n/// Single point spacing\n///\n/// Returns measurement corresponding to the spacing point requested.\n///\n/// @param {Number} $spacing-point - Point on the spacing scale\n///  (set in `settings/_spacing.scss`)\n///\n/// @returns {String} Spacing measurement eg. 10px\n///\n/// @example scss\n///   .element {\n///     padding: govuk-spacing(5);\n///   }\n///\n/// @example scss Using negative spacing\n///   .element {\n///     margin-top: govuk-spacing(-1);\n///   }\n///\n/// @example scss Marking spacing declarations as important\n///   .element {\n///     margin-top: govuk-spacing(1) !important;\n///   }\n///\n/// @access public\n\n@function govuk-spacing($spacing-point) {\n  $actual-input-type: meta.type-of($spacing-point);\n  @if $actual-input-type != \"number\" {\n    @error \"Expected a number (integer), but got a \"\n      + \"#{$actual-input-type}.\";\n  }\n\n  $is-negative: false;\n  @if $spacing-point < 0 {\n    $is-negative: true;\n    $spacing-point: math.abs($spacing-point);\n  }\n\n  @if not map.has-key($govuk-spacing-points, $spacing-point) {\n    @error \"Unknown spacing variable `#{$spacing-point}`. Make sure you are using a point from the spacing scale in `_settings/spacing.scss`.\";\n  }\n\n  $value: map.get($govuk-spacing-points, $spacing-point);\n  @return govuk-if($is-negative, $value * -1, $value);\n}\n\n/// Responsive spacing\n///\n/// Adds responsive spacing (either padding or margin, depending on `$property`)\n/// by fetching a 'spacing map' from the responsive spacing scale, which defines\n/// different spacing values at different breakpoints.\n///\n/// To generate responsive spacing, use 'govuk-responsive-margin' or\n/// 'govuk-responsive-padding' mixins\n///\n/// @param {Number} $responsive-spacing-point - Point on the responsive spacing\n///   scale, corresponds to a map of breakpoints and spacing values\n/// @param {String} $property - Property to add spacing to (e.g. 'margin')\n/// @param {String} $direction [all] - Direction to add spacing to\n///   (`top`, `right`, `bottom`, `left`, `all`)\n/// @param {Boolean} $important [false] - Whether to mark as `!important`\n/// @param {Number} $adjustment [false] - Offset to adjust spacing by\n///\n/// @access private\n\n@mixin _govuk-responsive-spacing(\n  $responsive-spacing-point,\n  $property,\n  $direction: \"all\",\n  $important: false,\n  $adjustment: false\n) {\n  $actual-input-type: meta.type-of($responsive-spacing-point);\n  @if $actual-input-type != \"number\" {\n    @error \"Expected a number (integer), but got a \" + \"#{$actual-input-type}.\";\n  }\n\n  @if not map.has-key($govuk-spacing-responsive-scale, $responsive-spacing-point) {\n    @error \"Unknown spacing point `#{$responsive-spacing-point}`. Make sure you are using a point from the \"\n      + \"responsive spacing scale in `_settings/spacing.scss`.\";\n  }\n\n  // Make sure that the return value from `_settings/spacing.scss` is a map.\n  $scale-map: map.get($govuk-spacing-responsive-scale, $responsive-spacing-point);\n  $actual-map-type: meta.type-of($scale-map);\n  @if $actual-map-type != \"map\" {\n    @error \"Expected a number (integer), but got a \"\n      + \"#{$actual-map-type}. Make sure you are using a map to set the responsive spacing in `_settings/spacing.scss`)\";\n  }\n\n  // Loop through each breakpoint in the map\n  @each $breakpoint, $breakpoint-value in $scale-map {\n    @if $adjustment {\n      $breakpoint-value: $breakpoint-value + $adjustment;\n    }\n\n    // The 'null' breakpoint is for mobile.\n    @if not $breakpoint {\n      @if $direction == all {\n        #{$property}: $breakpoint-value govuk-if($important, !important);\n      } @else {\n        #{$property}-#{$direction}: $breakpoint-value govuk-if($important, !important);\n      }\n    } @else {\n      @media #{govuk-from-breakpoint($breakpoint)} {\n        @if $direction == all {\n          #{$property}: $breakpoint-value govuk-if($important, !important);\n        } @else {\n          #{$property}-#{$direction}: $breakpoint-value govuk-if($important, !important);\n        }\n      }\n    }\n  }\n}\n\n/// Responsive margin\n///\n/// Adds responsive margin by fetching a 'spacing map' from the responsive\n/// spacing scale, which defines different spacing values at different\n/// breakpoints. Wrapper for the `_govuk-responsive-spacing` mixin.\n///\n/// @see {mixin} _govuk-responsive-spacing\n///\n/// @param {Number} $responsive-spacing-point - Point on the responsive spacing\n/// scale, corresponds to a map of breakpoints and spacing values\n/// @param {String} $direction [all] - Direction to add spacing to\n///   (`top`, `right`, `bottom`, `left`, `all`)\n/// @param {Boolean} $important [false] - Whether to mark as `!important`\n/// @param {Number} $adjustment [false] - Offset to adjust spacing by\n///\n/// @example scss\n///   .element {\n///      @include govuk-responsive-margin(6, \"left\", $adjustment: 1px);\n///   }\n///\n/// @access public\n\n@mixin govuk-responsive-margin($responsive-spacing-point, $direction: \"all\", $important: false, $adjustment: false) {\n  @include _govuk-responsive-spacing($responsive-spacing-point, \"margin\", $direction, $important, $adjustment);\n}\n\n/// Responsive padding\n///\n/// Adds responsive padding by fetching a 'spacing map' from the responsive\n/// spacing scale, which defines different spacing values at different\n/// breakpoints. Wrapper for the `_govuk-responsive-spacing` mixin.\n///\n/// @see {mixin} _govuk-responsive-spacing\n///\n/// @param {Number} $responsive-spacing-point - Point on the responsive spacing\n///   scale, corresponds to a map of breakpoints and spacing values\n/// @param {String} $direction [all] - Direction to add spacing to\n///   (`top`, `right`, `bottom`, `left`, `all`)\n/// @param {Boolean} $important [false] - Whether to mark as `!important`\n/// @param {Number} $adjustment [false] - Offset to adjust spacing\n///\n/// @example scss\n///   .element {\n///      @include govuk-responsive-padding(6, \"left\", $adjustment: 1px);\n///   }\n///\n/// @access public\n\n@mixin govuk-responsive-padding($responsive-spacing-point, $direction: \"all\", $important: false, $adjustment: false) {\n  @include _govuk-responsive-spacing($responsive-spacing-point, \"padding\", $direction, $important, $adjustment);\n}\n"]}
