@use "../../themes/ionic/ionic.globals.scss" as globals;
@use "./segment-button.common";

// Ionic Segment Button
// --------------------------------------------------

:host {
  /**
   * @prop --color-disabled: Color of the disabled segment button
   */
  --background: none;
  --background-checked: var(--background);
  --color: #{globals.$ion-primitives-neutral-1200};
  --color-checked: #{globals.$ion-semantics-primary-base};
  --color-disabled: #{globals.$ion-primitives-neutral-500};
  --border-width: #{globals.$ion-border-size-025};
  --border-color: #{globals.$ion-primitives-neutral-300};
  --border-style: #{globals.$ion-border-style-solid};
  --indicator-box-shadow: none;
  --indicator-color: var(--color-checked);
  --indicator-height: #{globals.$ion-border-size-025};
  --indicator-transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1);
  --indicator-transform: none;
  --padding-top: #{globals.$ion-space-200};
  --padding-end: #{globals.$ion-space-200};
  --padding-bottom: #{globals.$ion-space-200};
  --padding-start: #{globals.$ion-space-200};
  --transition: color 0.15s linear 0s, opacity 0.15s linear 0s;

  min-width: globals.$ion-scale-1200;
  min-height: globals.$ion-scale-1200;
}

.button-native {
  border-bottom: var(--border-width) var(--border-style) var(--border-color);

  // Ensures the indicator moves correctly between segment buttons
  z-index: 1;
}

.button-inner {
  @include globals.padding(globals.$ion-space-100, null, globals.$ion-space-100, null);

  gap: globals.$ion-space-100;
}

::slotted(*) {
  color: var(--color);
}

// Segment Button Label
// --------------------------------------------------

::slotted(ion-label) {
  @include globals.typography(globals.$ion-body-action-sm);
}

// Segment Button Icon
// --------------------------------------------------

::slotted(ion-icon) {
  width: globals.$ion-scale-600;
  height: globals.$ion-scale-600;
}

// Segment Button: Checked
// All slot content should have the checked color even when it's not label or icon
// --------------------------------------------------

:host(.segment-button-checked) ::slotted(*) {
  color: var(--color-checked);
}

// Segment Button: Disabled
// All slot content should have the disabled color even when it's not label or icon
// --------------------------------------------------

:host(.segment-button-disabled) ::slotted(*) {
  color: var(--color-disabled);
}

// Segment Button: Focused
// --------------------------------------------------

:host(.ion-focused) .button-inner {
  @include globals.focused-state();
}

// Segment Button: Indicator
// --------------------------------------------------

.segment-button-indicator {
  @include globals.position(null, 0, 0, 0);

  // Ensures the indicator displays correctly above the border
  z-index: 2;
}

// Segment Button Layout
// --------------------------------------------------

// Segments with icons above or below the label
// should have a fixed height of 72px
:host(.segment-button-layout-icon-top),
:host(.segment-button-layout-icon-bottom) {
  height: globals.$ion-scale-1800;
}

// Segments with icons at the start or end, or with only
// icons or labels, should have a fixed height of 48px
:host(.segment-button-has-label-only),
:host(.segment-button-has-icon-only),
:host(.segment-button-layout-icon-start),
:host(.segment-button-layout-icon-end) {
  height: globals.$ion-scale-1200;
}

:host(.segment-button-layout-icon-start) .button-inner,
:host(.segment-button-layout-icon-end) .button-inner {
  gap: globals.$ion-space-200;
}
