Skip to Content
DocsCloud UI PrimitiveFloatingIndicator

FloatingIndicator

Display a floating highlight indicator over target elements.

Import

import { FloatingIndicator } from '@tidbcloud/uikit'

Usage

FloatingIndicator is a component that displays a floating highlight over a target element. It is useful for creating navigation tabs, segmented controls, and other similar UI patterns.

import { useState } from 'react' import { FloatingIndicator, UnstyledButton } from '@tidbcloud/uikit' function Demo() { const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null) const [controlsRefs, setControlsRefs] = useState<Record<string, HTMLButtonElement | null>>({}) const [active, setActive] = useState(0) const setControlRef = (index: number) => (node: HTMLButtonElement) => { controlsRefs[index] = node setControlsRefs(controlsRefs) } const controls = ['React', 'Vue', 'Angular', 'Svelte'].map((item, index) => ( <UnstyledButton key={item} className="control" ref={setControlRef(index)} onClick={() => setActive(index)} mod={{ active: active === index }} > <span className="controlLabel">{item}</span> </UnstyledButton> )) return ( <div className="root" ref={setRootRef}> {controls} <FloatingIndicator target={controlsRefs[active]} parent={rootRef} className="indicator" /> </div> ) }

With Tabs

import { useState } from 'react' import { Tabs, FloatingIndicator } from '@tidbcloud/uikit' function Demo() { const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null) const [value, setValue] = useState<string | null>('first') const [controlsRefs, setControlsRefs] = useState<Record<string, HTMLButtonElement | null>>({}) const setControlRef = (val: string) => (node: HTMLButtonElement) => { controlsRefs[val] = node setControlsRefs(controlsRefs) } return ( <Tabs value={value} onChange={setValue}> <Tabs.List ref={setRootRef}> <Tabs.Tab value="first" ref={setControlRef('first')}> First tab </Tabs.Tab> <Tabs.Tab value="second" ref={setControlRef('second')}> Second tab </Tabs.Tab> <Tabs.Tab value="third" ref={setControlRef('third')}> Third tab </Tabs.Tab> <FloatingIndicator target={value ? controlsRefs[value] : null} parent={rootRef} className="indicator" /> </Tabs.List> </Tabs> ) }

Display vertical

Set displayAxis="y" to make the indicator expand vertically:

<FloatingIndicator target={controlsRefs[active]} parent={rootRef} displayAxis="y" />

Transition duration

Control the transition duration with transitionDuration prop:

<FloatingIndicator target={controlsRefs[active]} parent={rootRef} transitionDuration={300} />

Props

PropTypeDefaultDescription
targetHTMLElement | null-Target element to highlight
parentHTMLElement | null-Parent element for positioning
displayAxis’x’ | ‘y''x’Axis along which indicator expands
transitionDurationnumber150Transition duration in ms
Last updated on