sveltelean
Versionv0.2.0 GitHub Get started

Proof

This page exposes the internals of the site you are reading. Every value below is read from the page after it loads or from a measurement file committed in the repository; nothing is typed in.

Primitives on this page

One of each of the first eleven primitives, rendered with @svelte-lean/styles; the rest of the catalog is on its own pages and in the gallery on Primitives. The seven native ones here work with page JavaScript disabled wherever the platform features in the last section are supported; the four behaviors and the panels that read the runtime need JavaScript.

A native dialog

Top layer, inertness and Escape from the browser.

Anchored to its invoker with CSS anchor positioning where supported.

Radio group
Disclosure
A native details element; the state is its open attribute.
The tabs behavior: one click and one keydown listener for the whole page.
  • Listbox
  • Second option
  • First option
  • Second option
Runtime
Read from the page after it loads; requires JavaScript.

Instances versus listeners

Mount more tabs roots and read the listener table again. A Tier 1 behavior installs one listener per event type on the document runtime, so the count is the same for one root and for a thousand (ADR 0004; the release gate in listeners.spec.ts).

Root 1, a panel.
Listener readings by number of mounted tabs roots
RootsRuntime accountIndependent countRouter listeners on elements
Readings appear after the page loads.

Runtime tiers

Every primitive with its declared tier, registration module and measured behavior JavaScript
PrimitiveTierShared listenersModuleBehavior JS (brotli)
button0nonenone (native)0 B
dialog0nonenone (native)0 B
popover0nonenone (native)0 B
disclosure0nonenone (native)0 B
checkbox0nonenone (native)0 B
switch0nonenone (native)0 B
radio-group0nonenone (native)0 B
tabs1click, keydown@svelte-lean/primitives/tabs/register1521 B
menu1click, keydown, toggle@svelte-lean/primitives/menu/register1932 B
listbox1click, keydown@svelte-lean/primitives/listbox/register1838 B
combobox2click, keydown, input, pointerdown, pointerover, focusout, toggle@svelte-lean/primitives/combobox/register2564 B
date-field0nonenone (native)0 B
calendar1click, keydown, pointerover, pointerout@svelte-lean/primitives/calendar/register3925 B
date-picker2click, keydown, input, change, pointerdown, focusout, toggle@svelte-lean/primitives/date-picker/register4912 B
input0nonenone (native)0 B
field0nonenone (native)0 B
select2click, keydown, pointerdown, pointerover, focusout, change, toggle@svelte-lean/primitives/select/register3362 B
segmented0nonenone (native)0 B
rating0nonenone (native)0 B
slider0nonenone (native)0 B
otp-field0nonenone (native)0 B
file-field0nonenone (native)0 B
color-field0nonenone (native)0 B
autocomplete0nonenone (native)0 B
alert-dialog0nonenone (native)0 B
drawer0nonenone (native)0 B
accordion0nonenone (native)0 B
card0nonenone (native)0 B
separator0nonenone (native)0 B
avatar0nonenone (native)0 B
badge0nonenone (native)0 B
tag0nonenone (native)0 B
kbd0nonenone (native)0 B
carousel0nonenone (native)0 B
alert0nonenone (native)0 B
progress0nonenone (native)0 B
meter0nonenone (native)0 B
spinner0nonenone (native)0 B
skeleton0nonenone (native)0 B
breadcrumb0nonenone (native)0 B
pagination0nonenone (native)0 B
steps0nonenone (native)0 B
toggle1click@svelte-lean/primitives/toggle/register888 B
toggle-group1click, keydown@svelte-lean/primitives/toggle-group/register1569 B
toolbar1keydown, focusin@svelte-lean/primitives/toolbar/register1494 B
range-slider1input@svelte-lean/primitives/range-slider/register1291 B
number-field1click@svelte-lean/primitives/number-field/register1082 B
tree1click, keydown@svelte-lean/primitives/tree/register1919 B
tooltip1pointerover, pointerout, focusin, focusout, keydown@svelte-lean/primitives/tooltip/register1297 B
toast2click, pointerover, pointerout, focusin, focusout@svelte-lean/primitives/toast/register1396 B
button-group0nonenone (native)0 B
scroll-area0nonenone (native)0 B
descriptions0nonenone (native)0 B
timeline0nonenone (native)0 B
empty0nonenone (native)0 B
splitter2keydown, pointerdown@svelte-lean/primitives/splitter/register1683 B
context-menu1contextmenu@svelte-lean/primitives/context-menu/register1409 B
file-drop1dragenter, dragleave, drop, change@svelte-lean/primitives/file-drop/register1107 B
hover-card1pointerover, pointerout, focusin, focusout, keydown@svelte-lean/primitives/hover-card/register1353 B
menubar1keydown, focusin, pointerover@svelte-lean/primitives/menubar/register1457 B

Loaded behavior modules

@svelte-lean/vite scans this site's Svelte files for static data-slean markers and writes a manifest next to the build. This is what it recorded for the build you are looking at.

Behaviors found in the site's markup and the registration module injected for each, from node_modules/.svelte-lean/manifest.json
BehaviorRegistration moduleFiles
accordionnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/accordion/+page.svelte
alertnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/alert/+page.svelte
alert-dialognone (native)src/routes/primitives/alert-dialog/+page.svelte
autocompletenone (native)src/routes/primitives/autocomplete/+page.svelte
avatarnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/avatar/+page.svelte
badgenone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/badge/+page.svelte
breadcrumbnone (native)src/routes/primitives/breadcrumb/+page.svelte
buttonnone (native)src/lib/components/CopyButton.svelte, src/lib/components/ThemeToggle.svelte, src/lib/components/TopNav.svelte, src/lib/home/ListenerLab.svelte, src/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/docs/architecture/native-first/+page.svelte, src/routes/performance/results/+page.svelte, src/routes/performance/results/RowsSpecimen.svelte, src/routes/primitives/alert-dialog/+page.svelte, src/routes/primitives/alert/+page.svelte, src/routes/primitives/badge/+page.svelte, src/routes/primitives/button-group/+page.svelte, src/routes/primitives/button/+page.svelte, src/routes/primitives/card/+page.svelte, src/routes/primitives/combobox/+page.svelte, src/routes/primitives/dialog/+page.svelte, src/routes/primitives/drawer/+page.svelte, src/routes/primitives/empty/+page.svelte, src/routes/primitives/kbd/+page.svelte, src/routes/primitives/listbox/+page.svelte, src/routes/primitives/menu/+page.svelte, src/routes/primitives/popover/+page.svelte, src/routes/primitives/spinner/+page.svelte, src/routes/primitives/toast/+page.svelte, src/routes/primitives/toolbar/+page.svelte, src/routes/primitives/tooltip/+page.svelte, src/routes/proof/+page.svelte, src/routes/styling/themes/+page.svelte, src/routes/styling/variants/+page.svelte, src/routes/table/clipboard-export/CsvExport.svelte, src/routes/table/clipboard-export/RangeClipboard.svelte, src/routes/table/columns/Visibility.svelte, src/routes/table/editing/Editing.svelte, src/routes/table/pagination/Pagination.svelte, src/routes/table/rows/NestedTable.svelte, src/routes/table/rows/RowAnimation.svelte, src/routes/table/rows/RowEvents.svelte, src/routes/table/selection/Selection.svelte, src/routes/table/server-data/EmptyStates.svelte, src/routes/table/server-data/LoadingEmpty.svelte, src/routes/table/server-data/ServerData.svelte, src/routes/table/state-persistence/PersistedState.svelte
button-groupnone (native)src/routes/primitives/button-group/+page.svelte
calendar@svelte-lean/primitives/calendar/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/calendar/+page.svelte, src/routes/primitives/date-picker/+page.svelte
cardnone (native)src/routes/primitives/card/+page.svelte
carouselnone (native)src/routes/primitives/carousel/+page.svelte
checkboxnone (native)/vercel/path0/packages/table/dist/table/data-table.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/primitives/checkbox/+page.svelte, src/routes/primitives/dialog/+page.svelte, src/routes/primitives/drawer/+page.svelte, src/routes/proof/+page.svelte, src/routes/table/layout/DensityBorders.svelte, src/routes/table/server-data/LoadingEmpty.svelte
color-fieldnone (native)src/routes/primitives/color-field/+page.svelte
combobox@svelte-lean/primitives/combobox/registersrc/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/docs/architecture/runtime-tiers/+page.svelte, src/routes/primitives/combobox/+page.svelte, src/routes/proof/+page.svelte
context-menu@svelte-lean/primitives/context-menu/registersrc/routes/primitives/context-menu/+page.svelte
date-fieldnone (native)src/routes/primitives/date-field/+page.svelte
date-picker@svelte-lean/primitives/date-picker/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/date-picker/+page.svelte
descriptionsnone (native)src/routes/primitives/descriptions/+page.svelte
dialognone (native)src/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/docs/architecture/native-first/+page.svelte, src/routes/primitives/combobox/+page.svelte, src/routes/primitives/dialog/+page.svelte, src/routes/proof/+page.svelte, src/routes/styling/variants/+page.svelte
disclosurenone (native)src/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/primitives/disclosure/+page.svelte, src/routes/proof/+page.svelte
drawernone (native)src/routes/primitives/drawer/+page.svelte
emptynone (native)src/routes/primitives/empty/+page.svelte
fieldnone (native)src/routes/primitives/field/+page.svelte, src/routes/primitives/input/+page.svelte
file-drop@svelte-lean/primitives/file-drop/registersrc/routes/primitives/file-drop/+page.svelte
file-fieldnone (native)src/routes/primitives/file-field/+page.svelte
hover-card@svelte-lean/primitives/hover-card/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/hover-card/+page.svelte
inputnone (native)src/routes/primitives/field/+page.svelte, src/routes/primitives/input/+page.svelte, src/routes/styling/themes/+page.svelte, src/routes/table/server-data/EmptyStates.svelte
kbdnone (native)src/routes/primitives/kbd/+page.svelte
listbox@svelte-lean/primitives/listbox/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/listbox/+page.svelte, src/routes/proof/+page.svelte
menu@svelte-lean/primitives/menu/registersrc/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/primitives/button-group/+page.svelte, src/routes/primitives/context-menu/+page.svelte, src/routes/primitives/menu/+page.svelte, src/routes/primitives/menubar/+page.svelte, src/routes/proof/+page.svelte, src/routes/table/columns/Visibility.svelte
menubar@svelte-lean/primitives/menubar/registersrc/routes/primitives/menubar/+page.svelte
meternone (native)src/routes/primitives/meter/+page.svelte
number-field@svelte-lean/primitives/number-field/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/number-field/+page.svelte
otp-fieldnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/otp-field/+page.svelte
paginationnone (native)src/routes/primitives/pagination/+page.svelte
popovernone (native)src/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/docs/architecture/native-first/+page.svelte, src/routes/primitives/listbox/+page.svelte, src/routes/primitives/popover/+page.svelte, src/routes/proof/+page.svelte, src/routes/styling/variants/+page.svelte, src/routes/table/sorting/HeaderSort.svelte
progressnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/progress/+page.svelte
radio-groupnone (native)src/lib/home/TableLab.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/primitives/radio-group/+page.svelte, src/routes/proof/+page.svelte, src/routes/table/layout/DensityBorders.svelte, src/routes/table/localization-rtl/Messages.svelte, src/routes/table/selection/Selection.svelte
range-slider@svelte-lean/primitives/range-slider/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/range-slider/+page.svelte
ratingnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/rating/+page.svelte
scroll-areanone (native)src/routes/primitives/scroll-area/+page.svelte
segmentednone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/field/+page.svelte, src/routes/primitives/segmented/+page.svelte
select@svelte-lean/primitives/select/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/select/+page.svelte
separatornone (native)src/routes/primitives/separator/+page.svelte
skeletonnone (native)src/routes/primitives/skeleton/+page.svelte
slidernone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/slider/+page.svelte
spinnernone (native)src/routes/primitives/skeleton/+page.svelte, src/routes/primitives/spinner/+page.svelte
splitter@svelte-lean/primitives/splitter/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/splitter/+page.svelte
stepsnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/steps/+page.svelte
switchnone (native)src/lib/home/Stage.svelte, src/lib/home/TableLab.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/primitives/switch/+page.svelte, src/routes/proof/+page.svelte
tabs@svelte-lean/primitives/tabs/registersrc/lib/components/ExampleFrame.svelte, src/lib/components/InstallBlock.svelte, src/lib/components/TabsRoots.svelte, src/lib/home/Compare.svelte, src/lib/home/Stage.svelte, src/lib/primitives/Gallery.svelte, src/routes/demos/settings/SettingsApp.svelte, src/routes/docs/architecture/dom-protocol/+page.svelte, src/routes/docs/architecture/runtime-tiers/+page.svelte, src/routes/primitives/tabs/+page.svelte, src/routes/proof/+page.svelte, src/routes/styling/variants/+page.svelte
tagnone (native)src/lib/primitives/Gallery.svelte, src/routes/primitives/tag/+page.svelte
timelinenone (native)src/routes/primitives/timeline/+page.svelte
toast@svelte-lean/primitives/toast/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/toast/+page.svelte
toggle@svelte-lean/primitives/toggle/registersrc/routes/primitives/toggle/+page.svelte, src/routes/primitives/toolbar/+page.svelte
toggle-group@svelte-lean/primitives/toggle-group/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/toggle-group/+page.svelte, src/routes/primitives/toolbar/+page.svelte
toolbar@svelte-lean/primitives/toolbar/registersrc/routes/primitives/toolbar/+page.svelte
tooltip@svelte-lean/primitives/tooltip/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/tooltip/+page.svelte
tree@svelte-lean/primitives/tree/registersrc/lib/primitives/Gallery.svelte, src/routes/primitives/tree/+page.svelte

Controllers

Tier 2 behaviors create a scoped controller on first interaction and count it in development builds. The combobox above is the one Tier 2 behavior: nothing exists for it until you type or press ArrowDown in it; while its popup is open one document listener is scoped to that session, and the count returns to zero when it closes. Shipping invariant D of ADR 0005 is asserted with a hundred roots in lazy.spec.ts. This is a production build, where the diagnostics are stripped. To read the live count and the runtime report, run yarn workspace @svelte-lean/docs dev, open this page and evaluate window.__SLEAN_DEBUG__.report() in the console.

Bundle sizes

What a consumer application ships, from the fixtures in fixtures/: each is a Vite application built in production mode with every @svelte-lean/* module isolated into one chunk.

Svelte Lean chunk per fixture; zero bytes means no such chunk was emitted
FixtureUsesbrotligziprawAssertions
combobox-onlycombobox markup, discovered by the plugin2564 B2849 B6855 B48 passed
date-picker-onlydate picker and range picker markup, discovered by the plugin5446 B5935 B15676 B53 passed
listbox-onlylistbox markup, discovered by the plugin1838 B2030 B4268 B46 passed
manual-registrationtabs markup, register module imported by hand1521 B1693 B3639 B42 passed
native-onlybutton, dialog, popover markup and styles0 B0 B0 B31 passed
select-onlyowned select markup, discovered by the plugin3362 B3731 B9526 B48 passed
table-basic<DataTable /> and its stylesheet16829 B18900 B52658 B46 passed
tabs-and-menutabs and menu markup2351 B2611 B6209 B43 passed
tabs-onlytabs markup, discovered by the plugin1521 B1693 B3639 B43 passed

Production `vite build` per fixture with Vite defaults (esbuild minify, modulepreload polyfill). Sizes are the emitted JavaScript and CSS files: raw bytes, gzip level 9, brotli quality 11 (node:zlib). "svelteLean" is the svelte-lean chunk that the fixture plugin isolates for every @svelte-lean/* module and "svelteRuntime" the svelte-runtime chunk for Svelte's runtime (both include chunk import/export bindings); 0 B means no such chunk was emitted. "modules.svelteLean" lists rendered @svelte-lean/* modules with their pre-minification rendered length. Environment: Node v22.23.3, Vite 7.3.6, Svelte 5.57.1.

Browser capabilities

Feature detection in the browser you are using, for the platform features the native paths depend on. The contracts list each feature's Baseline status and the behavior outside the target.

Platform features and whether this browser supports them
FeatureUsed byThis browser
Detection runs in the browser and requires JavaScript.

Without JavaScript

With scripting disabled, the button, dialog, popover, disclosure, checkbox, switch and radio group above keep working wherever the browser supports the features listed; the dialog and popover invokers depend on invoker commands and the Popover API. The tabs root keeps its authored state (the first panel visible, switching impossible), the menu opens as a plain popover, the listbox keeps its authored selection, the combobox is a plain text field with a closed popup, and the panels that read the runtime show their static text. The playground suite runs the native contracts with page JavaScript disabled (javaScriptEnabled: false).