/*
----------------------------------------
USWDS Properties
----------------------------------------
*/

$standard-colors: map-collect(
  $tokens-color-theme,
  $tokens-color-state,
  $tokens-color-required
);

$extended-colors: map-collect($system-colors, $tokens-color-basic);

$partial-values: (
  zero-zero: (
    0: 0,
  ),
  none: (
    "none": none,
  ),
  auto: (
    "auto": auto,
  ),
  full-percent: (
    "full": 100%,
  ),
  full-viewport-height: (
    "viewport": 100vh,
  ),
  full-viewport-width: (
    "viewport": 100vw,
  ),
);

$system-properties: (
  align-items: (
    standard: (
      "align-start": flex-start,
      "align-end": flex-end,
      "align-center": center,
      "align-stretch": stretch,
      "align-baseline": baseline,
    ),
    extended: (),
  ),
  align-self: (
    standard: (
      "align-self-start": flex-start,
      "align-self-end": flex-end,
      "align-self-center": center,
      "align-self-stretch": stretch,
      "align-self-baseline": baseline,
    ),
    extended: (),
  ),
  background-color: (
    standard: $standard-colors,
    extended: $extended-colors,
  ),
  border: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($partial-values, "zero-zero"),
        (
          "noValue": 1px,
        )
      ),
    extended: (),
  ),
  border-color: (
    standard: $standard-colors,
    extended: $extended-colors,
  ),
  border-radius: (
    standard: $project-border-radius,
    extended:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small")
      ),
  ),
  border-style: (
    standard: (
      "dashed": dashed,
      "dotted": dotted,
      "solid": solid,
    ),
    extended: (),
  ),
  border-width: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($partial-values, "zero-zero")
      ),
    extended: (),
  ),
  bottom: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto"),
        map-get($partial-values, "full-percent")
      ),
    extended: (),
  ),
  box-shadow: (
    standard: (
      "none": none,
      1: 0 units(1px) units(0.5) 0 rgba(0, 0, 0, 0.1),
      2: 0 units(0.5) units(1) 0 rgba(0, 0, 0, 0.1),
      3: 0 units(1) units(2) 0 rgba(0, 0, 0, 0.1),
      4: 0 units(1.5) units(3) 0 rgba(0, 0, 0, 0.1),
      5: 0 units(2) units(4) 0 rgba(0, 0, 0, 0.1),
    ),
    extended: (),
  ),
  breakpoints: (
    standard:
      map-collect(
        map-get($system-spacing, "large"),
        map-get($system-spacing, "larger"),
        map-get($system-spacing, "largest")
      ),
    extended: (),
  ),
  circle: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large")
      ),
    extended: (),
  ),
  color: (
    standard: $standard-colors,
    extended: $extended-colors,
  ),
  cursor: (
    standard: (
      "auto": auto,
      "default": default,
      "pointer": pointer,
      "wait": wait,
      "move": move,
      "not-allowed": not-allowed,
    ),
    extended: (),
  ),
  display: (
    standard: (
      "block": block,
      "flex": flex,
      "none": none,
      "inline": inline,
      "inline-block": inline-block,
      "inline-flex": inline-flex,
      "table": table,
      "table-cell": table-cell,
      "table-row": table-row,
    ),
    extended: (),
  ),
  flex: (
    standard: (
      1: 1 1 0%,
      2: 2 1 0%,
      3: 3 1 0%,
      4: 4 1 0%,
      5: 5 1 0%,
      6: 6 1 0%,
      7: 7 1 0%,
      8: 8 1 0%,
      9: 9 1 0%,
      10: 10 1 0%,
      11: 11 1 0%,
      12: 12 1 0%,
      "fill": 1 1 0%,
      "auto": 0 1 auto,
    ),
    extended: (),
  ),
  flex-direction: (
    standard: (
      "row": row,
      "column": column,
    ),
    extended: (),
  ),
  flex-wrap: (
    standard: (
      "wrap": wrap,
      "no-wrap": nowrap,
    ),
    extended: (),
  ),
  float: (
    standard: (
      "left": left,
      "none": none,
      "right": right,
    ),
    extended: (),
  ),
  font-family: (
    standard: $project-font-stacks,
    extended: (),
  ),
  font-feature-settings: (
    standard: (
      "tabular": unquote('"tnum" 1, "kern" 1'),
      "no-tabular": unquote('"kern" 1'),
    ),
    extended: (),
  ),
  font-style: (
    standard: (
      "italic": italic,
      "no-italic": normal,
    ),
    extended: (),
  ),
  font-weight: (
    standard: (
      "thin": $theme-font-weight-thin,
      "light": $theme-font-weight-light,
      "normal": normal,
      "medium": $theme-font-weight-medium,
      "semibold": $theme-font-weight-semibold,
      "bold": $theme-font-weight-bold,
      "heavy": $theme-font-weight-heavy,
    ),
    extended: (
      100: 100,
      200: 200,
      300: 300,
      400: 400,
      500: 500,
      600: 600,
      700: 700,
      800: 800,
      900: 900,
    ),
  ),
  gap: (
    standard:
      map-collect(
        $system-column-gaps,
        (
          "sm": $theme-column-gap-sm,
          "md": $theme-column-gap-md,
          "lg": $theme-column-gap-lg,
        )
      ),
    extended: (),
  ),
  height: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto"),
        map-get($partial-values, "full-percent"),
        map-get($partial-values, "full-viewport-height")
      ),
    extended: (),
  ),
  justify-content: (
    standard: (
      "justify-center": center,
      "justify-start": flex-start,
      "justify-end": flex-end,
      "justify": space-between,
    ),
    extended: (),
  ),
  left: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto")
      ),
    extended: (),
  ),
  letter-spacing: (
    standard: (
      "ls-auto": initial,
      "ls-neg-3": -0.03em,
      "ls-neg-2": -0.02em,
      "ls-neg-1": -0.01em,
      "ls-1": 0.025em,
      "ls-2": 0.1em,
      "ls-3": 0.15em,
    ),
    extended: (),
    function: (
      "auto": initial,
      -3: -0.03em,
      -2: -0.02em,
      -1: -0.01em,
      1: 0.025em,
      2: 0.1em,
      3: 0.15em,
    ),
  ),
  line-height: (
    standard: (
      "sans-1": lh("sans", 1),
      "sans-2": lh("sans", 2),
      "sans-3": lh("sans", 3),
      "sans-4": lh("sans", 4),
      "sans-5": lh("sans", 5),
      "sans-6": lh("sans", 6),
      "serif-1": lh("serif", 1),
      "serif-2": lh("serif", 2),
      "serif-3": lh("serif", 3),
      "serif-4": lh("serif", 4),
      "serif-5": lh("serif", 5),
      "serif-6": lh("serif", 6),
      "mono-1": lh("mono", 1),
      "mono-2": lh("mono", 2),
      "mono-3": lh("mono", 3),
      "mono-4": lh("mono", 4),
      "mono-5": lh("mono", 5),
      "mono-6": lh("mono", 6),
      "cond-1": lh("cond", 1),
      "cond-2": lh("cond", 2),
      "cond-3": lh("cond", 3),
      "cond-4": lh("cond", 4),
      "cond-5": lh("cond", 5),
      "cond-6": lh("cond", 6),
      "heading-1": lh("heading", 1),
      "heading-2": lh("heading", 2),
      "heading-3": lh("heading", 3),
      "heading-4": lh("heading", 4),
      "heading-5": lh("heading", 5),
      "heading-6": lh("heading", 6),
      "ui-1": lh("ui", 1),
      "ui-2": lh("ui", 2),
      "ui-3": lh("ui", 3),
      "ui-4": lh("ui", 4),
      "ui-5": lh("ui", 5),
      "ui-6": lh("ui", 6),
      "body-1": lh("body", 1),
      "body-2": lh("body", 2),
      "body-3": lh("body", 3),
      "body-4": lh("body", 4),
      "body-5": lh("body", 5),
      "body-6": lh("body", 6),
      "code-1": lh("code", 1),
      "code-2": lh("code", 2),
      "code-3": lh("code", 3),
      "code-4": lh("code", 4),
      "code-5": lh("code", 5),
      "code-6": lh("code", 6),
      "alt-1": lh("alt", 1),
      "alt-2": lh("alt", 2),
      "alt-3": lh("alt", 3),
      "alt-4": lh("alt", 4),
      "alt-5": lh("alt", 5),
      "alt-6": lh("alt", 6),
    ),
    extended: (
      1: 1,
      2: 1.1,
      3: 1.35,
      4: 1.5,
      5: 1.62,
      6: 1.75,
    ),
  ),
  margin: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium-negative"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing-em, "small"),
        map-get($partial-values, "zero-zero")
      ),
    extended: (),
  ),
  margin-horizontal: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($system-spacing, "medium-negative"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large"),
        map-get($system-spacing-em, "small"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto")
      ),
    extended: (),
  ),
  margin-vertical: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($system-spacing, "medium-negative"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing-em, "small"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto")
      ),
    extended: (),
  ),
  max-height: (
    standard:
      map-collect(
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large"),
        map-get($system-spacing, "larger"),
        map-get($partial-values, "none"),
        map-get($partial-values, "full-viewport-height")
      ),
    extended: (),
  ),
  max-width: (
    standard:
      map-collect(
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large"),
        map-get($system-spacing, "larger"),
        map-get($system-spacing, "largest"),
        map-get($partial-values, "none"),
        map-get($partial-values, "full-percent")
      ),
    extended: (),
  ),
  measure: (
    standard: (
      1: $system-measure-smaller,
      2: $system-measure-small,
      3: $system-measure-base,
      4: $system-measure-large,
      5: $system-measure-larger,
      6: $system-measure-largest,
      "none": none,
    ),
    extended: (),
  ),
  min-height: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large"),
        map-get($system-spacing, "larger"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "full-percent"),
        map-get($partial-values, "full-viewport-height")
      ),
    extended: (),
  ),
  min-width: (
    standard:
      map-collect(
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($partial-values, "zero-zero")
      ),
    extended: (),
  ),
  opacity: (
    standard: (
      0: 0,
      10: 0.1,
      20: 0.2,
      30: 0.3,
      40: 0.4,
      50: 0.5,
      60: 0.6,
      70: 0.7,
      80: 0.8,
      90: 0.9,
      100: 1,
    ),
    extended: (),
  ),
  order: (
    standard: (
      "first": -1,
      "last": 999,
      "initial": initial,
      0: 0,
      1: 1,
      2: 2,
      3: 3,
      4: 4,
      5: 5,
      6: 6,
      7: 7,
      8: 8,
      9: 9,
      10: 10,
      11: 11,
    ),
    extended: (),
  ),
  outline: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($partial-values, "zero-zero"),
        (
          "05": spacing-multiple(0.5),
        )
      ),
    extended: (),
  ),
  outline-color: (
    standard: map-collect($tokens-color-required),
    extended: $extended-colors,
  ),
  overflow: (
    standard: (
      "hidden": hidden,
      "scroll": scroll,
      "auto": auto,
      "visible": visible,
    ),
    extended: (),
  ),
  padding: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($partial-values, "zero-zero")
      ),
    extended: (),
  ),
  position: (
    standard: (
      "absolute": absolute,
      "fixed": fixed,
      "relative": relative,
      "static": static,
      "sticky": sticky,
    ),
    extended: (),
  ),
  right: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto")
      ),
    extended: (),
  ),
  square: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large")
      ),
    extended: (),
  ),
  text-align: (
    standard: (
      "center": center,
      "left": left,
      "justify": justify,
      "right": right,
    ),
    extended: (),
  ),
  text-decoration: (
    standard: (
      "strike": line-through,
      "underline": underline,
      "no-underline": none,
      "no-strike": none,
    ),
    extended: (),
  ),
  text-decoration-color: (
    standard: map-collect($standard-colors, map-get($partial-values, "auto")),
    extended: $extended-colors,
  ),
  text-indent: (
    standard:
      map-collect(
        map-get($partial-values, "zero-zero"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "small-negative"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "medium-negative")
      ),
    extended: (),
  ),
  text-transform: (
    standard: (
      "uppercase": uppercase,
      "no-uppercase": none,
      "lowercase": lowercase,
      "no-lowercase": none,
    ),
    extended: (),
  ),
  top: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "smaller-negative"),
        map-get($system-spacing, "small-negative"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "auto")
      ),
    extended: (),
  ),
  vertical-align: (
    standard: (
      "baseline": baseline,
      "bottom": bottom,
      "middle": middle,
      "sub": sub,
      "super": super,
      "tbottom": text-bottom,
      "ttop": text-top,
      "top": top,
    ),
    extended: (),
  ),
  white-space: (
    standard: (
      "pre": pre,
      "pre-line": pre-line,
      "pre-wrap": pre-wrap,
      "wrap": normal,
      "no-wrap": nowrap,
    ),
    extended: (),
  ),
  width: (
    standard:
      map-collect(
        map-get($system-spacing, "smaller"),
        map-get($system-spacing, "small"),
        map-get($system-spacing, "medium"),
        map-get($system-spacing, "large"),
        map-get($system-spacing, "larger"),
        map-get($system-spacing, "largest"),
        map-get($partial-values, "zero-zero"),
        map-get($partial-values, "full-percent"),
        map-get($partial-values, "auto")
      ),
    extended: (),
  ),
  z-index: (
    standard: (
      "auto": auto,
      "bottom": -100,
      "top": 99999,
      0: 0,
      100: 100,
      200: 200,
      300: 300,
      400: 400,
      500: 500,
    ),
    extended: (),
  ),
);
