/** * Switch the CSS stylesheet used between 'rtl' and 'ltr' * @param {('ltr' | 'rtl')} direction - Text direction, either left-to-right (ltr) or right-to-left (rtl) * @return {Promise} */ const switchDirection = async (direction) => { if (direction === 'auto') { direction = 'ltr' } let updatedLink Array.from(document.getElementsByTagName('link')) .filter((link) => link.rel === 'stylesheet') .forEach((link) => { if (link.title === direction && link.disabled) { link.disabled = false updatedLink = link } else if (link.title !== direction && !link.disabled) { link.disabled = true } }) if (updatedLink) { return new Promise((resolve, reject) => { updatedLink.onload = () => { resolve() } updatedLink.onerror = () => reject(new Error(`Failed to load '${direction}' stylesheet`)) }) } return undefined } export default switchDirection