React
LoadingonOpenChangeLoading React…
Open one. Five follow. Each tile runs Tooltip in its own framework and reports the change in its own syntax.
Tooltip docs: demo, examples and APIonOpenChangeLoading React…
@open-changeLoading Vue…
onOpenChangeLoading Svelte…
(openChange)Loading Angular…
onOpenChangeLoading Solid…
No changes yet. Use any tile.
The attributes on each framework's Popup element, read from the page while it is open. Open a tile to fill its column.
The showcase example for Tooltip, as written in each framework. Lines that only React has are marked.
import { Tooltip } from '@▢▢▢▢/react/tooltip'
export default function TooltipExample() {
return (
<Tooltip.Provider>
<Tooltip.Root>
<Tooltip.Trigger className="button" aria-label="Bold">
B
</Tooltip.Trigger>
<Tooltip.Portal>
<Tooltip.Positioner sideOffset={8}>
<Tooltip.Popup className="tooltip">
<Tooltip.Arrow className="arrow" />
Bold
</Tooltip.Popup>
</Tooltip.Positioner>
</Tooltip.Portal>
</Tooltip.Root>
</Tooltip.Provider>
)
}
<script setup lang="ts">
import { Tooltip } from '@▢▢▢▢/vue/tooltip'
</script>
<template>
<Tooltip.Provider>
<Tooltip.Root>
<Tooltip.Trigger class="button" aria-label="Bold">B</Tooltip.Trigger>
<Tooltip.Portal>
<Tooltip.Positioner :side-offset="8">
<Tooltip.Popup class="tooltip">
<Tooltip.Arrow class="arrow" />
Bold
</Tooltip.Popup>
</Tooltip.Positioner>
</Tooltip.Portal>
</Tooltip.Root>
</Tooltip.Provider>
</template>
Tooltip in each framework, side by side. Lower is better for size, time and memory. No outside baseline: the frameworks are compared with each other only.
The Tooltip.Root props as each framework writes them. A name that differs from React is marked.
onCheckedChange(checked, details), onOpenChange(open, details), onValueChange(value, details).:default-checked, :side-offset). Upstream's callbacks are Vue events with the same arguments: checkedChange(checked, details), openChange(open, details), valueChange(value, details).onCheckedChange(checked, details), onOpenChange(open, details), onValueChange(value, details), with details.cancel(), reason and event. Native event props use Svelte's names (onclick, onkeydown).checked, disabled, nativeButton); boolean inputs also work as bare attributes. Each callback with details is an output named without on: checkedChange, openChange, valueChange.onCheckedChange(checked, details), with details.cancel() and details.event. Native handlers are camelCase (onClick, onKeyDown), as Solid 2 requires.defaultOpenpropdefaultOpendefault-opendefaultOpen[defaultOpen]defaultOpenopenpropopenopenopen[open]openonOpenChangeeventonOpenChange@open-changeonOpenChange(openChange)onOpenChangeactionsRefpropactionsRefactions-refactionsRef[actionsRef]actionsRefdefaultTriggerIdpropdefaultTriggerIddefault-trigger-iddefaultTriggerId[defaultTriggerId]defaultTriggerIdhandleprophandlehandlehandle[handle]handleonOpenChangeCompleteeventonOpenChangeComplete@open-change-completeonOpenChangeComplete(openChangeComplete)onOpenChangeCompletetriggerIdproptriggerIdtrigger-idtriggerId[triggerId]triggerIdtrackCursorAxisproptrackCursorAxistrack-cursor-axistrackCursorAxis[trackCursorAxis]trackCursorAxisdisabledpropdisableddisableddisabled[disabled]disableddisableHoverablePopuppropdisableHoverablePopupdisable-hoverable-popupdisableHoverablePopup[disableHoverablePopup]disableHoverablePopupchildrenpropchildren#defaultchildrenng-contentchildren