// Fluid DatePicker (v11 port). v10 has no fluid variant.
// https://github.com/carbon-design-system/carbon/blob/main/packages/styles/scss/components/fluid-date-picker/_fluid-date-picker.scss
//
// DOM differences: no inner span (width on input wrapper); validation message
// after wrapper; AI label/slug/decorator/toggletip/skeleton rules omitted.

@import "carbon-components/scss/globals/scss/vars";
@import "carbon-components/scss/globals/scss/helper-mixins";
@import "carbon-components/scss/globals/scss/typography";
@import "carbon-components/scss/globals/scss/vendor/@carbon/elements/scss/import-once/import-once";

/// Fluid date picker (Carbon React FluidDatePicker)
/// @access private
/// @group components
@mixin fluid-date-picker {
  // `--fluid` on the outer form-item wrapper. Default width matches the 288px
  // flatpickr calendar; stretches to 100% inside `.bx--form--fluid`.
  .#{$prefix}--date-picker--fluid {
    display: inline-flex;
    background: $field-01;
    inline-size: to-rem(288px);
    min-inline-size: to-rem(144px);
  }

  .#{$prefix}--form--fluid .#{$prefix}--date-picker--fluid {
    inline-size: 100%;
  }

  .#{$prefix}--date-picker--fluid .#{$prefix}--date-picker {
    position: relative;
    block-size: 100%;
    inline-size: 100%;
    transition:
      background-color $duration--fast-01 motion(standard, productive),
      outline $duration--fast-01 motion(standard, productive);
  }

  .#{$prefix}--date-picker--fluid .#{$prefix}--label {
    position: absolute;
    z-index: 1;
    display: flex;
    align-items: center;
    margin: 0;
    block-size: to-rem(16px);
    inline-size: calc(100% - 2rem);
    inset-block-start: to-rem(13px);
    inset-inline-start: $spacing-05;
    overflow-x: scroll;
    white-space: nowrap;
    -ms-overflow-style: none;
    scrollbar-width: none;
  }

  .#{$prefix}--date-picker--fluid .#{$prefix}--label::-webkit-scrollbar {
    display: none;
  }

  .#{$prefix}--date-picker--fluid .#{$prefix}--label--slotted {
    gap: $spacing-03;
    overflow: visible;
    white-space: normal;
  }

  // Stretch every layer so underline and warn divider span the full field.
  .#{$prefix}--date-picker--fluid .#{$prefix}--date-picker-container {
    inline-size: 100%;
    width: 100%;
  }

  .#{$prefix}--date-picker--fluid .#{$prefix}--date-picker-input__wrapper {
    inline-size: 100%;
    width: 100%;
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker-input__wrapper
    > .flatpickr-wrapper {
    display: block;
    inline-size: 100%;
    width: 100%;
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker-input__wrapper
    .#{$prefix}--date-picker__input {
    padding: to-rem(32px) $spacing-05 to-rem(13px);
    background: transparent;
    border-block-end: none;
    inline-size: 100%;
    width: 100%;
    min-block-size: to-rem(64px);
    min-inline-size: to-rem(144px);
  }

  // Match base simple warn/invalid width rules at (0,4,1) specificity.
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker-input__wrapper--invalid,
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker-input__wrapper--warn {
    .#{$prefix}--date-picker__input,
    ~ .#{$prefix}--form-requirement {
      inline-size: 100%;
      width: 100%;
    }
  }

  // Simple: hide decorative calendar icon, draw bottom border.
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker__icon {
    display: none;
  }

  // Match base simple width rules at (0,3,0) specificity.
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker__input,
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--label {
    inline-size: 100%;
    width: 100%;
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker__input:not(
      .#{$prefix}--date-picker__input--invalid
    ) {
    border-block-end: 1px solid $ui-04;
  }

  .#{$prefix}--date-picker--fluid .#{$prefix}--date-picker__icon {
    inset-block-start: to-rem(43px);
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--single
    .#{$prefix}--date-picker__input:not(
      .#{$prefix}--date-picker__input--invalid
    ) {
    border-block-end: 1px solid $ui-04;
  }

  .#{$prefix}--date-picker--fluid:not(
      .#{$prefix}--date-picker--fluid--invalid
    ):not(.#{$prefix}--date-picker--fluid--warn)
    .#{$prefix}--date-picker--range
    .#{$prefix}--date-picker-container:not(
      .#{$prefix}--date-picker--fluid--invalid
    ) {
    border-block-end: 1px solid $ui-04;
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--range
    .#{$prefix}--date-picker__input,
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--range
    .#{$prefix}--date-picker-container {
    inline-size: 100%;
    width: 100%;
    min-block-size: to-rem(63px);
    min-inline-size: to-rem(144px);
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--range
    > .#{$prefix}--date-picker-container:first-child {
    margin-inline-end: 0;
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--range
    > .#{$prefix}--date-picker-container:last-child
    .#{$prefix}--date-picker__input {
    border-inline-start: 1px solid $ui-04;
  }

  .#{$prefix}--date-picker--fluid.#{$prefix}--date-picker--fluid--invalid,
  .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid {
    @include focus-outline("invalid");
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--date-picker__input--invalid {
    outline: none;
  }

  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker-container:last-child.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--date-picker__input--invalid,
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid
    + .#{$prefix}--date-picker-container
    .#{$prefix}--date-picker__input {
    border-inline-start: none;
  }

  // Validation message sits after the input wrapper, inside the container.
  .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--form-requirement,
  .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--warn
    .#{$prefix}--form-requirement {
    display: block;
    overflow: visible;
    padding: $spacing-03 to-rem(40px) $spacing-03 $spacing-05;
    margin: 0;
    max-block-size: 100%;
  }

  // Invalid/warn: drop inner bottom border; outline supplies the boundary.
  .#{$prefix}--date-picker--fluid.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--date-picker,
  .#{$prefix}--date-picker--fluid.#{$prefix}--date-picker--fluid--warn
    .#{$prefix}--date-picker--range
    .#{$prefix}--date-picker-container {
    border-block-end: 1px solid transparent;
  }

  // Status icon aligned with first line of validation message.
  .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--date-picker__icon--invalid,
  .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--warn
    .#{$prefix}--date-picker__icon--warn {
    inset-block-start: to-rem(80px);
  }

  // Simple variant hides the base icon; show it again for invalid/warn.
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--date-picker__icon--invalid,
  .#{$prefix}--date-picker--fluid
    .#{$prefix}--date-picker--simple
    .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--warn
    .#{$prefix}--date-picker__icon--warn {
    display: block;
  }

  // Focus ring on invalid single/range cell (after invalid rules in source order).
  .#{$prefix}--date-picker-container.#{$prefix}--date-picker--fluid--invalid
    .#{$prefix}--date-picker__input:focus {
    @include focus-outline("outline");
  }

  .#{$prefix}--date-picker--fluid.#{$prefix}--date-picker--fluid--readonly:not(
      .#{$prefix}--date-picker--fluid--invalid
    ):not(.#{$prefix}--date-picker--fluid--warn)
    .#{$prefix}--date-picker
    > .#{$prefix}--date-picker-container,
  .#{$prefix}--date-picker--fluid.#{$prefix}--date-picker--fluid--readonly:not(
      .#{$prefix}--date-picker--fluid--invalid
    ):not(.#{$prefix}--date-picker--fluid--warn)
    .#{$prefix}--date-picker
    .#{$prefix}--date-picker__input {
    border-block-end-color: $ui-03;
  }

  .#{$prefix}--date-picker--fluid.#{$prefix}--date-picker--fluid--readonly:not(
      .#{$prefix}--date-picker--fluid--invalid
    ):not(.#{$prefix}--date-picker--fluid--warn)
    .#{$prefix}--date-picker--range
    > .#{$prefix}--date-picker-container:last-child
    .#{$prefix}--date-picker__input {
    border-inline-start-color: $ui-03;
  }

  .#{$prefix}--date-picker--fluid__skeleton {
    background: $skeleton-01;
    block-size: to-rem(64px);
    border-block-end: 1px solid $skeleton-02;
  }

  .#{$prefix}--date-picker--fluid__skeleton--container {
    position: relative;
    block-size: 100%;
    inline-size: 100%;
  }

  .#{$prefix}--date-picker--fluid__skeleton .#{$prefix}--skeleton {
    position: absolute;
    block-size: to-rem(8px);
    inline-size: 25%;
    inset-block-start: $spacing-05;
    inset-inline-start: $spacing-05;
  }

  .#{$prefix}--date-picker--fluid__skeleton .#{$prefix}--label {
    margin-block-end: to-rem(4px);
  }

  .#{$prefix}--date-picker--fluid__skeleton .#{$prefix}--text-input {
    position: absolute;
    padding: 0;
    block-size: to-rem(8px);
    inline-size: 50%;
    inset-block-start: to-rem(36px);
    inset-inline-start: $spacing-05;
  }

  .#{$prefix}--date-picker--fluid__skeleton--container
    .#{$prefix}--date-picker__icon {
    inset-block: auto $spacing-03;
  }

  .#{$prefix}--date-picker--fluid__skeleton--range {
    display: flex;
    flex-direction: row;
  }

  .#{$prefix}--date-picker--fluid__skeleton--range
    .#{$prefix}--date-picker--fluid__skeleton--container {
    display: flex;
    flex-direction: column;
    inline-size: 50%;
  }

  .#{$prefix}--date-picker--fluid__skeleton--range
    .#{$prefix}--date-picker--fluid__skeleton--container:first-of-type {
    border-inline-end: 1px solid $skeleton-02;
  }

  .#{$prefix}--date-picker--fluid__skeleton--range
    .#{$prefix}--date-picker--fluid__skeleton--container
    .#{$prefix}--date-picker__icon {
    inset-block-end: $spacing-03;
  }
}

@include exports("fluid-date-picker") {
  @include fluid-date-picker;
}
