After some research, found that "@salesforce/client/formFactor" module will return Large even if the page is opened in Mobile Browser. In case of Mobile app FORM_FACTOR will be "small" which can be used to identify if this is Mobile Browser OR mobile App.
import { LightningElement } from 'lwc';
import FORM_FACTOR from '@salesforce/client/formFactor';
export default class DeviceSelection extends LightningElement {
largeSlotChangeHandler() {
const largeDiv = this.template.querySelector('.largeDevice');
FORM_FACTOR.toLowerCase() === 'large' ? largeDiv.classList.remove('slds-hide'): '' ;
}
mediumSlotChangeHandler() {
const mediumDiv = this.template.querySelector('.mediumDevice');
FORM_FACTOR.toLowerCase() === 'medium' ? mediumDiv.classList.remove('slds-hide'): '' ;
}
smallSlotChangeHandler() {
const smallDiv = this.template.querySelector('.smallDevice');
FORM_FACTOR.toLowerCase() === 'small' ? smallDiv.classList.remove('slds-hide'): '' ;
}
}
The HTML file can be
<template>
<div class="largeDevice slds-hide">
<slot name="large" onslotchange={largeSlotChangeHandler}></slot>
</div>
<div class="mediumDevice slds-hide">
<slot name="medium" onslotchange={mediumSlotChangeHandler}></slot>
</div>
<div class="smallDevice slds-hide">
<slot name="small" onslotchange={smallSlotChangeHandler}></slot>
</div>
</template>
And then this can be used conditionally for different devices:
<c-device-selection>
<div slot="large">
Show this message for only large device.
</div>
<div slot="medium">
Show this message for only medium devices.
</div>
<div slot="small">
Show this message for only small devices.
</div>
</c-device-selection>