A set of utilities used by @reactour
packages
npm i -S @reactour/utils
# or
yarn add @reacmask/utils
A handy Portal Component
The type of Element to render in the DOM
import { Portal } from '@reactour/utils'
function App() {
return <Portal type="div">{/* ...*/}</Portal>
}
A component used by Tour to handle Mutation and Resize Observer.
Array
of CSS Selector to track mutations
Array
of CSS Selector to track resizing
Function to fire on each mutation update
import { Portal } from '@reactour/utils'
function App() {
function refresh() {
console.log('mutated!')
}
return (
<>
<p className="mutation-elem">Vestibulum maximus vitae </p>
<textarea
className="resize-elem"
defaultValue="Vestibulum maximus vitae"
/>
<Observables
resizeObservables={['.resize-elem']}
mutationObservables={['.mutation-elem']}
refresh={refresh}
/>
{/* ...*/}
</>
)
}
Calculates Element Bounding Rect by ref
provided
Ref attached at the element
Any value that if changed, updates calculations
import { useRef } from 'react'
import { useRect } from '@reactour/utils'
function App() {
const ref = useRef(null)
const sizes = useRect(ref)
return (
<>
<p ref={ref}>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
{/* ...*/}
</>
)
}
Same as useRect
but providing an Element
DOM Element
Any value that if changed, updates calculations
import { useElemRect } from '@reactour/utils'
function App() {
const elem = document.querySelector('.elem')
const sizes = useElemRect(elem)
return (
<>
<p class="elem">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
{/* ...*/}
</>
)
}
Type details
type RectResult = {
bottom: number
height: number
left: number
right: number
top: number
width: number
}
Get Element Bounding Rect from Element
const elem = documet.querySelector('.elem')
const sizes = getRect(elem)
Get window width
and height
import { getWindow } from '@reactour/utils'
const { w, h } = getWindow()
Type details
type InViewArgs = {
width: number
height: number
top: number
left: number
bottom?: number
right?: number
threshold?: number
}
Check if position values are in viewport
import { inView } from '@reactour/utils'
const isInView = inView({ top: 10, right: 10, bottom: 10, left: 10 })
Scroll DOM Element into view using native smooth
behavior with a callback when scroll finishes
const elem = documet.querySelector('.elem')
smoothScroll(elem).then(() => {
console.log('Scrolled!')
})