React
LoadingonOpenChangeLoading React…
Open one. Five follow. Each tile runs Preview Card in its own framework and reports the change in its own syntax.
Preview Card 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 Preview Card, as written in each framework. Lines that only React has are marked.
import { PreviewCard } from '@▢▢▢▢/react/preview-card'
export default function PreviewCardExample() {
return (
<PreviewCard.Root>
<p className="preview-text">
The principles of good{' '}
<PreviewCard.Trigger className="preview-link" href="#typography">
typography
</PreviewCard.Trigger>{' '}
hold up on screens too.
</p>
<PreviewCard.Portal>
<PreviewCard.Positioner sideOffset={8}>
<PreviewCard.Popup className="popover preview-card">
<PreviewCard.Arrow className="arrow" />
<p className="popover-title">Typography</p>
<p className="muted">
The craft of arranging type so that written words are legible and pleasant to read.
</p>
</PreviewCard.Popup>
</PreviewCard.Positioner>
</PreviewCard.Portal>
</PreviewCard.Root>
)
}
<script setup lang="ts">
import { PreviewCard } from '@▢▢▢▢/vue/preview-card'
</script>
<template>
<PreviewCard.Root>
<p class="preview-text">
The principles of good
<PreviewCard.Trigger class="preview-link" href="#typography"
>typography</PreviewCard.Trigger
>
hold up on screens too.
</p>
<PreviewCard.Portal>
<PreviewCard.Positioner :side-offset="8">
<PreviewCard.Popup class="popover preview-card">
<PreviewCard.Arrow class="arrow" />
<p class="popover-title">Typography</p>
<p class="muted">
The craft of arranging type so that written words are legible and pleasant to read.
</p>
</PreviewCard.Popup>
</PreviewCard.Positioner>
</PreviewCard.Portal>
</PreviewCard.Root>
</template>
Preview Card 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 PreviewCard.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]triggerIdchildrenpropchildren#defaultchildrenng-contentchildren