diff --git a/core/src/components/segment-button/segment-button.ios.scss b/core/src/components/segment-button/segment-button.ios.scss index 51d36e1dc2..f720e6bb99 100644 --- a/core/src/components/segment-button/segment-button.ios.scss +++ b/core/src/components/segment-button/segment-button.ios.scss @@ -140,6 +140,10 @@ // Segment: States // -------------------------------------------------- +:host(.segment-button-activated) { + --indicator-transform: scale(0.95); +} + :host(.ion-focused) .button-native { opacity: $segment-button-ios-opacity-focused; } diff --git a/core/src/components/segment-button/segment-button.tsx b/core/src/components/segment-button/segment-button.tsx index 1bacfe1407..2cb05cdf7a 100644 --- a/core/src/components/segment-button/segment-button.tsx +++ b/core/src/components/segment-button/segment-button.tsx @@ -23,9 +23,6 @@ export class SegmentButton implements ComponentInterface, ButtonInterface { @Element() el!: HTMLElement; - /** - * If `true`, the segment button is selected. - */ @State() checked = false; /** diff --git a/core/src/components/segment/segment.ios.scss b/core/src/components/segment/segment.ios.scss index 6d5db09607..59608f45ee 100644 --- a/core/src/components/segment/segment.ios.scss +++ b/core/src/components/segment/segment.ios.scss @@ -23,14 +23,6 @@ } -// Segment: Activated -// -------------------------------------------------- - -:host(.segment-activated) ::slotted(ion-segment-button) { - --indicator-transform: scale(0.95); -} - - // Segment: Default Toolbar // -------------------------------------------------- diff --git a/core/src/components/segment/segment.tsx b/core/src/components/segment/segment.tsx index 4fbb51bb3a..878be574d0 100644 --- a/core/src/components/segment/segment.tsx +++ b/core/src/components/segment/segment.tsx @@ -123,7 +123,7 @@ export class Segment implements ComponentInterface { } onEnd(detail: GestureDetail) { - this.activated = false; + this.setActivated(false); const checkedValidButton = this.setNextIndex(detail, true); @@ -157,6 +157,23 @@ export class Segment implements ComponentInterface { ripple.addRipple(x, y).then(remove => remove()); } + /* + * Activate both the segment and the buttons + * due to a bug with ::slotted in Safari + */ + private setActivated(activated: boolean) { + const buttons = this.getButtons(); + + buttons.forEach(button => { + if (activated) { + button.classList.add('segment-button-activated'); + } else { + button.classList.remove('segment-button-activated'); + } + }); + this.activated = activated; + } + private activate(detail: GestureDetail) { const clicked = detail.event.target as HTMLIonSegmentButtonElement; const buttons = this.getButtons(); @@ -176,7 +193,7 @@ export class Segment implements ComponentInterface { // If the gesture began on the clicked button with the indicator // then we should activate the indicator if (this.value === clicked.value) { - this.activated = true; + this.setActivated(true); } }