$file-border-color: var(--border, #{$border}) !default
$file-radius: var(--radius, #{$radius}) !default

$file-cta-background-color: $scheme-main-ter !default
$file-cta-color: var(--text, #{$text}) !default
$file-cta-hover-color: var(--text-strong, #{$text-strong}) !default
$file-cta-active-color: var(--text-strong, #{$text-strong}) !default

$file-name-border-color: $border !default
$file-name-border-style: solid !default
$file-name-border-width: 1px 1px 1px 0 !default
$file-name-max-width: 16em !default

$file-colors: $form-colors !default

.file
  --file-radius: #{$file-radius}
  --file-cta-hover-color: #{$file-cta-hover-color}
  --file-cta-active-color: #{$file-cta-active-color}
  --file-border-color: #{$file-border-color}
  --file-cta-background-color: #{$file-cta-background-color}
  --file-cta-color: #{$file-cta-color}
  --file-name-border-color: #{$file-name-border-color}
  --file-name-border-style: #{$file-name-border-style}
  --file-name-border-width: #{$file-name-border-width}
  --file-name-max-width: #{$file-name-max-width}
  @extend %unselectable
  align-items: stretch
  display: flex
  font-size: var(--file-font-size)
  justify-content: flex-start
  position: relative
  // Colors
  @each $name, $pair in $file-colors
    $color: nth($pair, 1)
    $color-invert: nth($pair, 2)
    &.is-#{$name}
      --hover-background-l-delta: -2.5%
      --hover-background-#{$name}-l: calc(#{var(--#{$name}-light-l)} + #{var(--hover-background-l-delta)})
      --hover-background-color: hsla(var(--#{$name}-h), var(--#{$name}-s), var(--hover-background-#{$name}-l), var(--#{$name}-a))
      --focus-box-shadow-color-hsla: hsla(var(--#{$name}-h), var(--#{$name}-s), var(--#{$name}-l), 0.25)
      --focus-box-shadow-color: var(--focus-box-shadow-color-hsla, #{bulmaRgba($color, 0.25)})
      --active-background-l-delta: -5%
      --active-background-#{$name}-l: calc(#{var(--#{$name}-light-l)} + #{var(--active-background-l-delta)})
      --active-background-color: hsla(var(--#{$name}-h), var(--#{$name}-s), var(--active-background-#{$name}-l), var(--#{$name}-a))
      .file-cta
        background-color: var(--#{$name} #{$color})
        border-color: transparent
        color: var(--#{$name}-invert, #{$color-invert})
      &:hover,
      &.is-hovered
        .file-cta
          background-color: var(--hover-background-color, #{bulmaDarken($color, 2.5%)})
          border-color: transparent
          color: var(--#{$name}-invert, #{$color-invert})
      &:focus,
      &.is-focused
        .file-cta
          border-color: transparent
          box-shadow: 0 0 0.5em var(--focus-box-shadow-color)
          color: var(--#{$name}-invert, #{$color-invert})
      &:active,
      &.is-active
        .file-cta
          background-color: var(--active-background-color, #{bulmaDarken($color, 5%)})
          border-color: transparent
          color: var(--#{$name}-invert, #{$color-invert})
  // Sizes
  &.is-small
    --file-font-size: var(--size-small, #{$size-small})
  &.is-medium
    --file-font-size: var(--size-medium, #{$size-medium})
    .file-icon
      .fa
        font-size: 21px
  &.is-large
    --file-font-size: var(--size-large, #{$size-large})
    .file-icon
      .fa
        font-size: 28px
  // Modifiers
  &.has-name
    .file-cta
      border-bottom-right-radius: 0
      border-top-right-radius: 0
    .file-name
      border-bottom-left-radius: 0
      border-top-left-radius: 0
    &.is-empty
      .file-cta
        border-radius: var(--file-radius)
      .file-name
        display: none
  &.is-boxed
    .file-label
      flex-direction: column
    .file-cta
      flex-direction: column
      height: auto
      padding: 1em 3em
    .file-name
      border-width: 0 1px 1px
    .file-icon
      height: 1.5em
      width: 1.5em
      .fa
        font-size: 21px
    &.is-small
      .file-icon .fa
        font-size: 14px
    &.is-medium
      .file-icon .fa
        font-size: 28px
    &.is-large
      .file-icon .fa
        font-size: 35px
    &.has-name
      .file-cta
        border-radius: var(--file-radius) var(--file-radius) 0 0
      .file-name
        border-radius: 0 0 var(--file-radius) var(--file-radius)
        border-width: 0 1px 1px
  &.is-centered
    justify-content: center
  &.is-fullwidth
    .file-label
      width: 100%
    .file-name
      flex-grow: 1
      max-width: none
  &.is-right
    justify-content: flex-end
    .file-cta
      border-radius: 0 var(--file-radius) var(--file-radius) 0
    .file-name
      border-radius: var(--file-radius) 0 0 var(--file-radius)
      border-width: 1px 0 1px 1px
      order: -1

.file-label
  align-items: stretch
  display: flex
  cursor: pointer
  justify-content: flex-start
  overflow: hidden
  position: relative
  &:hover
    .file-cta
      background-color: bulmaDarken($file-cta-background-color, 2.5%)
      color: var(--file-cta-hover-color)
    .file-name
      border-color: bulmaDarken($file-name-border-color, 2.5%)
  &:active
    .file-cta
      background-color: bulmaDarken($file-cta-background-color, 5%)
      color: var(--file-cta-active-color)
    .file-name
      border-color: bulmaDarken($file-name-border-color, 5%)

.file-input
  height: 100%
  left: 0
  opacity: 0
  outline: none
  position: absolute
  top: 0
  width: 100%

.file-cta,
.file-name
  @extend %control
  border-color: var(--file-border-color)
  border-radius: var(--file-radius)
  font-size: 1em
  padding-left: 1em
  padding-right: 1em
  white-space: nowrap

.file-cta
  background-color: var(--file-cta-background-color)
  color: var(--file-cta-color)

.file-name
  border-color: var(--file-name-border-color)
  border-style: var(--file-name-border-style)
  border-width: var(--file-name-border-width)
  display: block
  max-width: var(--file-name-max-width)
  overflow: hidden
  text-align: inherit
  text-overflow: ellipsis

.file-icon
  align-items: center
  display: flex
  height: 1em
  justify-content: center
  +ltr-property("margin", 0.5em)
  width: 1em
  .fa
    font-size: 14px
