Skip to content

UI theming: a skin cascade from the UIRoot and style behind controlled setters (ME-57) - #631

Merged
Exoridus merged 6 commits into
mainfrom
ui/theme-cascade-and-controlled-setters
Aug 27, 2026
Merged

UI theming: a skin cascade from the UIRoot and style behind controlled setters (ME-57)#631
Exoridus merged 6 commits into
mainfrom
ui/theme-cascade-and-controlled-setters

Conversation

@Exoridus

Copy link
Copy Markdown
Owner

Closes the UI group of the review backlog: the texture-suite design round (its output is a workspace spec, not code) and ME-57 Slice 1.

ME-57 is closed against its full ledger contract, not the narrowed slice: the theme cascade with local overrides is here, not deferred.

What changed

A theme is a skin, not a colour table. Per role (panel, button, label, progressBarTrack, progressBarFill) and per state (normal, hover, pressed, disabled, focused, falling back to normal) it carries a background descriptor, a text style and insets. Insets are layout input, which is why style invalidation is paint and layout.

The cascade runs through the scene tree. ThemedContainer carries a theme for the subtree below it, UIRoot owns the layer's, and a widget resolves the nearest themed ancestor's theme with its own setTheme overrides on top. No global theme singleton — two UI layers can carry different themes. A widget without overrides passes the inherited object through by reference, so a cascade refresh is a pointer comparison; reparenting re-resolves the same way effectiveEnabled already did.

Style goes through setters. setFill, setBackground, setTextStyle, setTheme — each invalidating what the change can actually move. The silently mutable style objects are gone: button.colors hands out values, not a live reference into the widget.

The nine-slice case is painted, not just declared. WidgetBackground owns whichever node a descriptor needs — a Graphics for a fill, a NineSliceSprite for a texture — and swaps it at a fixed child slot, so a background that was dropped (zero size, 'none' skin) comes back underneath the content rather than on top of it.

Serialization writes overrides, not resolved values. A scene saved under one theme no longer replays that theme when it is loaded under another.

defaultUITheme reproduces the widgets' previous look exactly and is frozen in development builds.

API notes (pre-1.0 break)

  • Panel.background is now the background descriptor; the painted node is Panel.backgroundNode.
  • Fill colour getters are nullable (Panel.color, ProgressBar.trackColor/fillColor, Button.colors[state]): a widget painting a texture or nothing has no fill colour.
  • New exports: UITheme, UISkin, UISkinSet, UIBackground and friends, createUITheme, defaultUITheme, resolveUISkin, ThemedContainer, ButtonState.

Validation

  • pnpm gates typecheck, typecheck:examples, typecheck:guides, docs:api:check, full-bundle:exports:check, source-hygiene, and the lint/format gates.
  • test/ui (39 widget + 11 cascade + 8 theme cases) and test/core/serialization.test.ts.
  • Pre-push ran verify:quick plus every selected lane, including the browser lanes.

Exoridus added 6 commits August 27, 2026 21:23
A theme is a skin, not a colour table: per role and per state it carries a
background descriptor, a text style and insets. Insets are layout input,
which is why a later style setter has to invalidate layout as well as paint.

The background descriptor covers what the widgets draw today (a rounded
fill with an optional border) and the nine-slice case the texture-based
widget suite needs, so the value type does not have to change again when
skins become textured.

`defaultUITheme` reproduces the widgets' current look exactly and is frozen
in development builds, so a caller who mutates a shared skin fails at the
write instead of silently restyling every widget that inherited it.
…tion

The theme travels the scene graph: `ThemedContainer` carries one for the
subtree below it, `UIRoot` owns the layer's, and a widget resolves the
nearest themed ancestor's theme with its own overrides applied on top.
A widget without overrides reuses the inherited object by reference, so
"did my theme change?" stays a pointer comparison, and reparenting
re-resolves the same way `effectiveEnabled` already does. No global theme
registry - two UI layers can carry different themes.

Widgets now paint in `_repaint` and place content in `_relayout`, with
`_invalidatePaint` and `_invalidateLayout` naming which of the two a change
needs. A theme change takes the layout path: skin insets are layout input,
so a paint-only refresh would be wrong as soon as a skin changes them.
Panel, Button, ProgressBar and Label read their look from the theme role
they paint and keep only their own overrides. `WidgetBackground` owns the
node a background descriptor needs - a `Graphics` for a fill, a
`NineSliceSprite` for a texture - and swaps it in place at a fixed child
slot, so the texture case is painted rather than merely declared.

Style is no longer a mutable object handed out by a getter: `setFill`,
`setBackground` and `setTextStyle` are the way in, and each one invalidates
paint or layout as the change requires. Button carries one skin per state,
so hover, pressed and disabled follow the theme instead of four hardcoded
colours; label placement now respects the skin's insets.

Serialization writes a widget's overrides instead of its resolved values,
so a scene saved under one theme no longer replays that theme when it is
loaded under another.
Adds the skin and theme types, `ThemedContainer`, and the widgets' new
style accessors; refreshes the public export snapshots.
Adds a Theming section to the UI chapter: where a widget's skin comes
from, what a background descriptor can be, and why style goes through a
setter instead of a mutable style object.
A widget that paints a texture or nothing has no fill colour, so the
colour getters are nullable now.
@Exoridus
Exoridus enabled auto-merge (squash) August 27, 2026 19:57
@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 17.03MB (57.31%) ⬆️⚠️, exceeding the configured threshold of 5%.

Bundle name Size Change
exo-esm-esm 1.06MB 7.31kB (0.7%) ⬆️
exo-esm-modules-esm 3.02MB 21.88kB (0.73%) ⬆️
exo-iife-min-Exo-iife 1.06MB 7.3kB (0.7%) ⬆️
site-server-esm 31.24MB 16.94MB (118.44%) ⬆️⚠️
exo-full-iife-Exo-iife 4.65MB 21.75kB (0.47%) ⬆️
exo-iife-Exo-iife 2.93MB 21.74kB (0.75%) ⬆️
exo-full-iife-min-Exo-iife 1.7MB 7.31kB (0.43%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: exo-iife-min-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.iife.min.js 7.3kB 1.06MB 0.7%

Files in exo.iife.min.js:

  • ./src/core/serialization/serializerHelpers.ts → Total Size: 7.88kB

  • ./src/core/serialization/uiSerializers.ts → Total Size: 7.33kB

  • ./src/ui/Button.ts → Total Size: 7.31kB

view changes for bundle: site-server-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
chunks/_astro_data-layer-content_erBV22lS.mjs (New) 6.27MB 6.27MB 100.0% 🚀
chunks/example-sources_BMw-qHo9.mjs (New) 1.45MB 1.45MB 100.0% 🚀
chunks/cpp_CPDmpxAH.mjs (New) 837.87kB 837.87kB 100.0% 🚀
chunks/emacs-lisp_Dv0hCzlu.mjs (New) 792.54kB 792.54kB 100.0% 🚀
chunks/wasm_CLRKp8VF.mjs (New) 622.55kB 622.55kB 100.0% 🚀
_astro/vendor-monaco.C9n_FGUq.css (New) 308.93kB 308.93kB 100.0% 🚀
chunks/components_kh107YWS.mjs (New) 306.9kB 306.9kB 100.0% 🚀
chunks/wolfram_CcZPfnLd.mjs (New) 266.98kB 266.98kB 100.0% 🚀
chunks/jsx-runtime_viANt07j.mjs (New) 247.49kB 247.49kB 100.0% 🚀
prerender-entry.BzkRfSlT.mjs (New) 235.04kB 235.04kB 100.0% 🚀
chunks/vue-vine_BwEx5Hbl.mjs (New) 201.21kB 201.21kB 100.0% 🚀
chunks/angular-ts_Go_sxgiM.mjs (New) 194.57kB 194.57kB 100.0% 🚀
chunks/typescript_BdOuaDkb.mjs (New) 191.0kB 191.0kB 100.0% 🚀
chunks/jsx_DlBZfu41.mjs (New) 188.11kB 188.11kB 100.0% 🚀
chunks/tsx_DP9gbsaw.mjs (New) 185.85kB 185.85kB 100.0% 🚀
chunks/javascript_Csr6kOdt.mjs (New) 185.19kB 185.19kB 100.0% 🚀
chunks/typst_BnzMfKm_.mjs (New) 184.6kB 184.6kB 100.0% 🚀
chunks/objective-cpp__ooRQ-PY.mjs (New) 184.45kB 184.45kB 100.0% 🚀
chunks/audio-effects_BdRbtzM8.mjs (New) 157.49kB 157.49kB 100.0% 🚀
chunks/asciidoc_xKuVlNk6.mjs (New) 150.63kB 150.63kB 100.0% 🚀
chunks/mdx_BK9ZufRc.mjs (New) 146.33kB 146.33kB 100.0% 🚀
chunks/backend-comparison_BToVD5st.mjs (New) 145.01kB 145.01kB 100.0% 🚀
chunks/infinite-maps_Coep9Y36.mjs (New) 141.61kB 141.61kB 100.0% 🚀
chunks/animation_eEnLxeV0.mjs (New) 141.28kB 141.28kB 100.0% 🚀
chunks/php_Ce-_eRmu.mjs (New) 120.72kB 120.72kB 100.0% 🚀
chunks/blade_BmZAqhvV.mjs (New) 112.47kB 112.47kB 100.0% 🚀
chunks/objective-c_6dJF64Dt.mjs (New) 111.93kB 111.93kB 100.0% 🚀
chunks/tiled-maps_CwaiyVaA.mjs (New) 111.71kB 111.71kB 100.0% 🚀
chunks/audio-basics_h8Fu2Gqr.mjs (New) 107.94kB 107.94kB 100.0% 🚀
chunks/less_BzbdhFUi.mjs (New) 107.13kB 107.13kB 100.0% 🚀
chunks/gamepad_CoxG_GFP.mjs (New) 100.0kB 100.0kB 100.0% 🚀
chunks/csharp_CFKaLbHg.mjs (New) 99.97kB 99.97kB 100.0% 🚀
chunks/fortran-free-form_yxJ7igsv.mjs (New) 98.65kB 98.65kB 100.0% 🚀
chunks/loading-and-resources_BFIcQHmn.mjs (New) 97.46kB 97.46kB 100.0% 🚀
chunks/spatial-audio_B5jYDDgM.mjs (New) 95.62kB 95.62kB 100.0% 🚀
chunks/racket_DRv7j6nv.mjs (New) 95.06kB 95.06kB 100.0% 🚀
chunks/particles_CUgGTJHj.mjs (New) 94.62kB 94.62kB 100.0% 🚀
chunks/swift_DWmMn3lF.mjs (New) 94.57kB 94.57kB 100.0% 🚀
chunks/custom-mesh-shaders_DvRCpE0G.mjs (New) 88.03kB 88.03kB 100.0% 🚀
chunks/authoring-extensions_--B-W26t.mjs (New) 86.09kB 86.09kB 100.0% 🚀
chunks/hack_ogeSwry3.mjs (New) 86.02kB 86.02kB 100.0% 🚀
chunks/text_xi2ZdVmK.mjs (New) 84.66kB 84.66kB 100.0% 🚀
chunks/beat-detection__xceXthH.mjs (New) 83.95kB 83.95kB 100.0% 🚀
chunks/application_Dydqyf6G.mjs (New) 83.51kB 83.51kB 100.0% 🚀
chunks/vyper_C6KGx0YU.mjs (New) 82.05kB 82.05kB 100.0% 🚀
chunks/latex_CHMapQI4.mjs (New) 80.49kB 80.49kB 100.0% 🚀
chunks/filters_DgaYc6M4.mjs (New) 79.62kB 79.62kB 100.0% 🚀
chunks/gameplay-collision_C-BoBrNg.mjs (New) 78.98kB 78.98kB 100.0% 🚀
chunks/c_DtrCgMGx.mjs (New) 78.39kB 78.39kB 100.0% 🚀
chunks/physics-basics_BBfmAdNi.mjs (New) 77.32kB 77.32kB 100.0% 🚀
chunks/immediate-mode_B_t9CoZI.mjs (New) 77.17kB 77.17kB 100.0% 🚀
chunks/python_BjnOIxPe.mjs (New) 77.17kB 77.17kB 100.0% 🚀
chunks/mojo_CsUSYzsu.mjs (New) 76.64kB 76.64kB 100.0% 🚀
chunks/graphics_DpILHdda.mjs (New) 75.46kB 75.46kB 100.0% 🚀
chunks/vendor-react_DC9oQVkM.mjs (New) 74.78kB 74.78kB 100.0% 🚀
chunks/worlds-and-spawning_cerve_EM.mjs (New) 72.75kB 72.75kB 100.0% 🚀
chunks/ldtk_BSiNkR2O.mjs (New) 72.12kB 72.12kB 100.0% 🚀
chunks/typed-worklets-and-workers_B-Er2nC9.mjs (New) 70.72kB 70.72kB 100.0% 🚀
chunks/ExampleBrowser_BXMEysFh.mjs (New) 68.68kB 68.68kB 100.0% 🚀
chunks/debugging-and-inspection_BTA5etiC.mjs (New) 67.4kB 67.4kB 100.0% 🚀
chunks/ocaml_vm1Y8An6.mjs (New) 67.28kB 67.28kB 100.0% 🚀
chunks/markdown_CkmxmzqY.mjs (New) 65.34kB 65.34kB 100.0% 🚀
chunks/sprites_MtmVP9IC.mjs (New) 65.21kB 65.21kB 100.0% 🚀
chunks/ballerina_DIdXD2KH.mjs (New) 64.73kB 64.73kB 100.0% 🚀
chunks/aseprite_CpktbcVn.mjs (New) 63.85kB 63.85kB 100.0% 🚀
chunks/deployment_DrWTLfIm.mjs (New) 63.24kB 63.24kB 100.0% 🚀
chunks/wikitext_wjhjmmzD.mjs (New) 62.35kB 62.35kB 100.0% 🚀
chunks/html_CJiVogkZ.mjs (New) 62.31kB 62.31kB 100.0% 🚀
chunks/stata_ZpI2p0PE.mjs (New) 62.02kB 62.02kB 100.0% 🚀
chunks/mermaid_ItFqCK9s.mjs (New) 61.2kB 61.2kB 100.0% 🚀
chunks/everforest-light_D0-By8Ib.mjs (New) 58.66kB 58.66kB 100.0% 🚀
chunks/everforest-dark_DM8lKNNi.mjs (New) 58.65kB 58.65kB 100.0% 🚀
chunks/catppuccin-macchiato_Dkogd_RC.mjs (New) 56.22kB 56.22kB 100.0% 🚀
chunks/catppuccin-frappe_DpzIdcTG.mjs (New) 56.2kB 56.2kB 100.0% 🚀
chunks/catppuccin-latte_qlLg6gWa.mjs (New) 56.2kB 56.2kB 100.0% 🚀
chunks/catppuccin-mocha_DW8bSod0.mjs (New) 56.2kB 56.2kB 100.0% 🚀
chunks/typed-shaders_P73g-96q.mjs (New) 55.37kB 55.37kB 100.0% 🚀
chunks/_virtual_astro_get-image_BG72LlO4.mjs (New) 55.26kB 55.26kB 100.0% 🚀
chunks/imba_96qKoJCa.mjs (New) 54.85kB 54.85kB 100.0% 🚀
chunks/ada_twHwrVWN.mjs (New) 54.62kB 54.62kB 100.0% 🚀
_astro/AppShell.dVZnVFsQ.css (New) 54.07kB 54.07kB 100.0% 🚀
chunks/mouse-and-pointer_gjK67oNW.mjs (New) 53.75kB 53.75kB 100.0% 🚀
chunks/apex_CybrBQ0z.mjs (New) 53.2kB 53.2kB 100.0% 🚀
chunks/keyboard-and-actions_fItxDt_w.mjs (New) 52.88kB 52.88kB 100.0% 🚀
chunks/ruby_DurSp7NY.mjs (New) 52.52kB 52.52kB 100.0% 🚀
chunks/css_B24SoJng.mjs (New) 52.49kB 52.49kB 100.0% 🚀
chunks/AppShell_ClJlM5cd.mjs (New) 51.92kB 51.92kB 100.0% 🚀
chunks/go_aXtTCanQ.mjs (New) 51.86kB 51.86kB 100.0% 🚀
chunks/ui-and-widgets_Dnkx5Yr9.mjs (New) 49.31kB 49.31kB 100.0% 🚀
chunks/ahk2_bJ5Wm9-K.mjs (New) 48.96kB 48.96kB 100.0% 🚀
chunks/d_BQY8TDgQ.mjs (New) 48.94kB 48.94kB 100.0% 🚀
chunks/perl_DD46WzW0.mjs (New) 48.57kB 48.57kB 100.0% 🚀
chunks/shellscript_CJgrg95w.mjs (New) 45.75kB 45.75kB 100.0% 🚀
chunks/haskell_CfGsE1Cf.mjs (New) 45.58kB 45.58kB 100.0% 🚀
chunks/troubleshooting_PIq3cOMM.mjs (New) 44.55kB 44.55kB 100.0% 🚀
chunks/asm_wBDSgBbA.mjs (New) 43.88kB 43.88kB 100.0% 🚀
chunks/scene-graph_DIIyeLqN.mjs (New) 43.01kB 43.01kB 100.0% 🚀
chunks/custom-renderers_BaJNto-f.mjs (New) 42.4kB 42.4kB 100.0% 🚀
chunks/erlang_BsP4G84Y.mjs (New) 41.69kB 41.69kB 100.0% 🚀
chunks/org_GxkLwT0W.mjs (New) 41.61kB 41.61kB 100.0% 🚀
chunks/cobol_Cde5oeOV.mjs (New) 41.47kB 41.47kB 100.0% 🚀
chunks/bird2_BMprQDNV.mjs (New) 41.32kB 41.32kB 100.0% 🚀
chunks/haxe_QaqXWmIB.mjs (New) 40.26kB 40.26kB 100.0% 🚀
chunks/pixel-snapping_BFqKsEj_.mjs (New) 40.11kB 40.11kB 100.0% 🚀
chunks/resize-dpr-and-canvas_Cjw4h_8a.mjs (New) 39.66kB 39.66kB 100.0% 🚀
chunks/nginx_B6K5caqL.mjs (New) 39.45kB 39.45kB 100.0% 🚀
chunks/houston_BCge59HB.mjs (New) 39.13kB 39.13kB 100.0% 🚀
chunks/tokyo-night_CZgEO66P.mjs (New) 38.95kB 38.95kB 100.0% 🚀
chunks/one-dark-pro_CUhzNQJE.mjs (New) 37.42kB 37.42kB 100.0% 🚀
chunks/poimandres_QRiMVtzX.mjs (New) 36.74kB 36.74kB 100.0% 🚀
chunks/EditorPreview_4pB7QdlC.mjs (New) 36.67kB 36.67kB 100.0% 🚀
chunks/serialization-and-prefabs_CdZeQVvU.mjs (New) 35.73kB 35.73kB 100.0% 🚀
chunks/scenes-and-lifecycle_CeNF--Om.mjs (New) 35.13kB 35.13kB 100.0% 🚀
chunks/bsl_RRHQTRWr.mjs (New) 35.05kB 35.05kB 100.0% 🚀
chunks/stylus_ZZDn1yUO.mjs (New) 33.23kB 33.23kB 100.0% 🚀
chunks/julia_CUdUEEdZ.mjs (New) 33.23kB 33.23kB 100.0% 🚀
chunks/crystal_BxARsATC.mjs (New) 32.91kB 32.91kB 100.0% 🚀
chunks/ahk_B0zayAPr.mjs (New) 32.83kB 32.83kB 100.0% 🚀
chunks/night-owl_Cm6kp1PA.mjs (New) 32.35kB 32.35kB 100.0% 🚀
chunks/applescript_CJ80B5XJ.mjs (New) 32.08kB 32.08kB 100.0% 🚀
chunks/render-targets_CbkVFsD_.mjs (New) 32.08kB 32.08kB 100.0% 🚀
chunks/scala_pMGZAs9j.mjs (New) 31.33kB 31.33kB 100.0% 🚀
chunks/joints-and-dynamics_BEGJGHg_.mjs (New) 31.05kB 31.05kB 100.0% 🚀
chunks/razor_DtzGaIsD.mjs (New) 30.85kB 30.85kB 100.0% 🚀
chunks/scss_DfTZ3J77.mjs (New) 30.71kB 30.71kB 100.0% 🚀
chunks/java_DtJJObUJ.mjs (New) 30.68kB 30.68kB 100.0% 🚀
chunks/EditorCode_B0kP9s3Z.mjs (New) 30.29kB 30.29kB 100.0% 🚀
chunks/coffee_CKL8nDPj.mjs (New) 29.89kB 29.89kB 100.0% 🚀
chunks/c3_u0qNrniV.mjs (New) 29.84kB 29.84kB 100.0% 🚀
chunks/nord_B2iOUYPu.mjs (New) 29.64kB 29.64kB 100.0% 🚀
chunks/codeql_BwdvwJnv.mjs (New) 29.6kB 29.6kB 100.0% 🚀
chunks/night-owl-light_C5JQlziG.mjs (New) 29.05kB 29.05kB 100.0% 🚀
chunks/system-verilog_DW0KSMVO.mjs (New) 28.95kB 28.95kB 100.0% 🚀
chunks/performance_BYwWa7NV.mjs (New) 28.89kB 28.89kB 100.0% 🚀
chunks/vue_BZSikl6a.mjs (New) 28.8kB 28.8kB 100.0% 🚀
chunks/guide-structure_D4cxD3VI.mjs (New) 28.71kB 28.71kB 100.0% 🚀
chunks/marko_yztgkyW2.mjs (New) 28.69kB 28.69kB 100.0% 🚀
chunks/fsharp_Csv26BFS.mjs (New) 28.44kB 28.44kB 100.0% 🚀
_astro/jetbrains-mono-latin-500-normal.CJOVTJB7.woff (New) 28.21kB 28.21kB 100.0% 🚀
chunks/one-light_Dydeaphl.mjs (New) 28.19kB 28.19kB 100.0% 🚀
chunks/angular-html_DFpvQUcR.mjs (New) 27.66kB 27.66kB 100.0% 🚀
chunks/typespec_C_R5TbvO.mjs (New) 27.64kB 27.64kB 100.0% 🚀
chunks/moonbit_BzHkbr4Q.mjs (New) 27.52kB 27.52kB 100.0% 🚀
_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff (New) 27.5kB 27.5kB 100.0% 🚀
chunks/apl_BusG2rRg.mjs (New) 27.01kB 27.01kB 100.0% 🚀
chunks/vhdl_Co2XFKY7.mjs (New) 26.8kB 26.8kB 100.0% 🚀
chunks/purescript_CLpaGMbw.mjs (New) 26.78kB 26.78kB 100.0% 🚀
chunks/DocsSidebar_BiHc8h_b.mjs (New) 26.63kB 26.63kB 100.0% 🚀
chunks/cadence_B1ELWULD.mjs (New) 26.37kB 26.37kB 100.0% 🚀
chunks/templ_Dua9xeFZ.mjs (New) 26.31kB 26.31kB 100.0% 🚀
chunks/astro_DVlyOzje.mjs (New) 25.85kB 25.85kB 100.0% 🚀
chunks/nim_B6oIhaho.mjs (New) 25.63kB 25.63kB 100.0% 🚀
chunks/retained-containers_C0kGrZx2.mjs (New) 25.49kB 25.49kB 100.0% 🚀
chunks/_astro_content_J3UtWWr4.mjs (New) 25.36kB 25.36kB 100.0% 🚀
chunks/gruvbox-light-medium_DK7Hp87r.mjs (New) 25.36kB 25.36kB 100.0% 🚀
chunks/gruvbox-dark-medium_C1cagsrM.mjs (New) 25.36kB 25.36kB 100.0% 🚀
chunks/gruvbox-light-hard_h1QgYclB.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/gruvbox-light-soft_CsHBh6fE.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/gruvbox-dark-hard_DaH6zhre.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/gruvbox-dark-soft_V8cmWQ7W.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/react_DbIRDMKE.mjs (New) 25.32kB 25.32kB 100.0% 🚀
chunks/sql_DtGcscyb.mjs (New) 24.8kB 24.8kB 100.0% 🚀
chunks/errors-data_D57MGrwC.mjs (New) 24.29kB 24.29kB 100.0% 🚀
chunks/twig_D5YhvR8w.mjs (New) 24.25kB 24.25kB 100.0% 🚀
chunks/rose-pine-dawn_5bNxnqJn.mjs (New) 24.16kB 24.16kB 100.0% 🚀
chunks/rose-pine-moon_D9u1dVFS.mjs (New) 24.16kB 24.16kB 100.0% 🚀
chunks/rose-pine_LrKaLPzB.mjs (New) 24.14kB 24.14kB 100.0% 🚀
chunks/offline_BEGAci8P.mjs (New) 24.08kB 24.08kB 100.0% 🚀
chunks/wit_CeQiCbz_.mjs (New) 23.94kB 23.94kB 100.0% 🚀
chunks/common-lisp_DJtwvW4V.mjs (New) 23.61kB 23.61kB 100.0% 🚀
chunks/dracula-soft_CxJ6yBh7.mjs (New) 23.29kB 23.29kB 100.0% 🚀
_astro/HomePage.CixXSfs_.css (New) 23.28kB 23.28kB 100.0% 🚀
chunks/dracula_DrwtDR2u.mjs (New) 23.26kB 23.26kB 100.0% 🚀
chunks/audio-reactive-visualization_ClZOvzUY.mjs (New) 23.26kB 23.26kB 100.0% 🚀
chunks/snazzy-light_DfXk5yzb.mjs (New) 23.25kB 23.25kB 100.0% 🚀
chunks/build-orb-dodge_XdUomu8O.mjs (New) 23.02kB 23.02kB 100.0% 🚀
chunks/glimmer-js_B8pygmEI.mjs (New) 22.94kB 22.94kB 100.0% 🚀
chunks/glimmer-ts_CQEDCkOl.mjs (New) 22.94kB 22.94kB 100.0% 🚀
chunks/nushell_BLPX3-WC.mjs (New) 22.84kB 22.84kB 100.0% 🚀
chunks/ayu-light_Djj5_ZCz.mjs (New) 22.53kB 22.53kB 100.0% 🚀
chunks/ayu-mirage_B5o6RGmT.mjs (New) 22.47kB 22.47kB 100.0% 🚀
chunks/ayu-dark_liWEyCZQ.mjs (New) 22.46kB 22.46kB 100.0% 🚀
chunks/powershell_DvOBVZPr.mjs (New) 21.96kB 21.96kB 100.0% 🚀
_astro/ExampleBrowser.CTr-T4xB.css (New) 21.88kB 21.88kB 100.0% 🚀
_astro/jetbrains-mono-latin-500-normal.BWZEU5yA.woff2 (New) 21.83kB 21.83kB 100.0% 🚀
chunks/groovy_Bw2Ku4bU.mjs (New) 21.56kB 21.56kB 100.0% 🚀
chunks/mdc_C1b5g3_q.mjs (New) 21.34kB 21.34kB 100.0% 🚀
chunks/viml_BReTXeDA.mjs (New) 21.2kB 21.2kB 100.0% 🚀
_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2 (New) 21.17kB 21.17kB 100.0% 🚀
chunks/gdscript_CSSSWtkL.mjs (New) 21.11kB 21.11kB 100.0% 🚀
chunks/your-first-scene_DJHTQR9t.mjs (New) 21.01kB 21.01kB 100.0% 🚀
chunks/svelte_BPWEr4fK.mjs (New) 20.75kB 20.75kB 100.0% 🚀
chunks/graphql_D_YYFDMU.mjs (New) 20.59kB 20.59kB 100.0% 🚀
chunks/material-theme-palenight_BqWSY0zJ.mjs (New) 20.57kB 20.57kB 100.0% 🚀
chunks/material-theme-lighter_BiEXTf1u.mjs (New) 20.56kB 20.56kB 100.0% 🚀
chunks/material-theme-darker_DAUXLwZb.mjs (New) 20.55kB 20.55kB 100.0% 🚀
chunks/material-theme-ocean_C0tH_beU.mjs (New) 20.55kB 20.55kB 100.0% 🚀
chunks/material-theme_DckHuUUK.mjs (New) 20.52kB 20.52kB 100.0% 🚀
chunks/liquid_BmzWPM4R.mjs (New) 20.34kB 20.34kB 100.0% 🚀
chunks/move_B-o8dn0N.mjs (New) 20.24kB 20.24kB 100.0% 🚀
chunks/setup_C-vsjH--.mjs (New) 19.4kB 19.4kB 100.0% 🚀
chunks/ts-tags_fCPzN4J1.mjs (New) 19.02kB 19.02kB 100.0% 🚀
chunks/kanagawa-dragon_BUX6P0jP.mjs (New) 18.91kB 18.91kB 100.0% 🚀
chunks/kanagawa-lotus_Dm_LiccM.mjs (New) 18.91kB 18.91kB 100.0% 🚀
chunks/kanagawa-wave_K9PBxgbK.mjs (New) 18.9kB 18.9kB 100.0% 🚀
chunks/odin_vjOJSyfV.mjs (New) 18.58kB 18.58kB 100.0% 🚀
chunks/solidity_DPVu0wkJ.mjs (New) 18.46kB 18.46kB 100.0% 🚀
chunks/elixir_B_EVzLaG.mjs (New) 18.25kB 18.25kB 100.0% 🚀
chunks/cue_B5KneM5p.mjs (New) 18.22kB 18.22kB 100.0% 🚀
chunks/matlab_CfRK6IMC.mjs (New) 17.96kB 17.96kB 100.0% 🚀
chunks/luau_koeK31uZ.mjs (New) 17.78kB 17.78kB 100.0% 🚀
chunks/nix_4vzStI7m.mjs (New) 17.7kB 17.7kB 100.0% 🚀
chunks/lua_D40mNAJl.mjs (New) 17.57kB 17.57kB 100.0% 🚀
chunks/post-processing_B6hqCRw5.mjs (New) 17.44kB 17.44kB 100.0% 🚀
chunks/actionscript-3_CfsDl31I.mjs (New) 17.38kB 17.38kB 100.0% 🚀
_astro/space-grotesk-latin-400-normal.BnQMeOim.woff (New) 17.0kB 17.0kB 100.0% 🚀
_astro/space-grotesk-latin-500-normal.CNSSEhBt.woff (New) 16.99kB 16.99kB 100.0% 🚀
chunks/rust_COBzcmTx.mjs (New) 16.94kB 16.94kB 100.0% 🚀
_astro/space-grotesk-latin-600-normal.BflQw4A9.woff (New) 16.88kB 16.88kB 100.0% 🚀
_astro/space-grotesk-latin-ext-400-normal.DRPE3kg4.woff (New) 16.79kB 16.79kB 100.0% 🚀
_astro/space-grotesk-latin-ext-500-normal.3dgZTiw9.woff (New) 16.79kB 16.79kB 100.0% 🚀
_astro/space-grotesk-latin-ext-600-normal.VcznFIpX.woff (New) 16.73kB 16.73kB 100.0% 🚀
chunks/abap_LtYK6g-v.mjs (New) 16.59kB 16.59kB 100.0% 🚀
chunks/github-dark-high-contrast_RHN5kW48.mjs (New) 16.44kB 16.44kB 100.0% 🚀
chunks/gnuplot_DgWvVXI8.mjs (New) 16.3kB 16.3kB 100.0% 🚀
chunks/kusto_6FdaWTzR.mjs (New) 16.29kB 16.29kB 100.0% 🚀
chunks/github-dark-default_BrdnT3vv.mjs (New) 16.25kB 16.25kB 100.0% 🚀
chunks/github-dark-dimmed_Bn-P3bZJ.mjs (New) 16.25kB 16.25kB 100.0% 🚀
chunks/github-light-high-contrast_XMJJhVsV.mjs (New) 16.09kB 16.09kB 100.0% 🚀
chunks/coordinates-and-views_i8mNMd0g.mjs (New) 15.95kB 15.95kB 100.0% 🚀
chunks/github-light-default_PTSfV1MO.mjs (New) 15.94kB 15.94kB 100.0% 🚀
chunks/clarity_BkOxTQMf.mjs (New) 15.91kB 15.91kB 100.0% 🚀
chunks/pug_UKFyUFpE.mjs (New) 15.87kB 15.87kB 100.0% 🚀
chunks/parse_iFeItYnv.mjs (New) 15.85kB 15.85kB 100.0% 🚀
_astro/DocsSidebar.DFrQicgP.css (New) 15.83kB 15.83kB 100.0% 🚀
chunks/synthwave-84_D4CZeGaH.mjs (New) 15.79kB 15.79kB 100.0% 🚀
chunks/smalltalk_D4IpSogw.mjs (New) 15.67kB 15.67kB 100.0% 🚀
chunks/HomePage_BOHD_o0r.mjs (New) 15.49kB 15.49kB 100.0% 🚀
chunks/vitesse-dark_Cjct7fHa.mjs (New) 15.47kB 15.47kB 100.0% 🚀
chunks/ApiSymbolPage_B5khjqki.mjs (New) 15.4kB 15.4kB 100.0% 🚀
chunks/vitesse-black_BnxsPkql.mjs (New) 15.39kB 15.39kB 100.0% 🚀
chunks/vitesse-light_D54yeeu7.mjs (New) 15.32kB 15.32kB 100.0% 🚀
chunks/v_DBTjbKF9.mjs (New) 15.03kB 15.03kB 100.0% 🚀
chunks/aurora-x_Dwo4cmWi.mjs (New) 15.02kB 15.02kB 100.0% 🚀
chunks/bat_Dx8nnxXE.mjs (New) 14.19kB 14.19kB 100.0% 🚀
chunks/chords-and-sequences_qebaQgdg.mjs (New) 14.16kB 14.16kB 100.0% 🚀
chunks/fish_D7qAeWQz.mjs (New) 13.98kB 13.98kB 100.0% 🚀
chunks/handlebars_CenwkBn_.mjs (New) 13.96kB 13.96kB 100.0% 🚀
chunks/vesper_29-00ngB.mjs (New) 13.95kB 13.95kB 100.0% 🚀
chunks/nsis_C3tUpeAt.mjs (New) 13.79kB 13.79kB 100.0% 🚀
chunks/surrealql_H8LFCYct.mjs (New) 13.62kB 13.62kB 100.0% 🚀
chunks/hjson_Cuaphql8.mjs (New) 13.51kB 13.51kB 100.0% 🚀
_astro/space-grotesk-latin-400-normal.CJ-V5oYT.woff2 (New) 13.39kB 13.39kB 100.0% 🚀
chunks/apache_BIl2qPOf.mjs (New) 13.38kB 13.38kB 100.0% 🚀
_astro/space-grotesk-latin-500-normal.lFbtlQH6.woff2 (New) 13.31kB 13.31kB 100.0% 🚀
_astro/space-grotesk-latin-600-normal.DjKNqYRj.woff2 (New) 13.28kB 13.28kB 100.0% 🚀
chunks/wasm_gNIKwGlD.mjs (New) 13.23kB 13.23kB 100.0% 🚀
chunks/GuideChapterPage_DhtAw3u8.mjs (New) 13.12kB 13.12kB 100.0% 🚀
chunks/github-dark_DS-peopi.mjs (New) 12.89kB 12.89kB 100.0% 🚀
chunks/puppet_CQlPp728.mjs (New) 12.8kB 12.8kB 100.0% 🚀
chunks/terraform_v0KN9QQh.mjs (New) 12.78kB 12.78kB 100.0% 🚀
chunks/project-structure_BCpgaGET.mjs (New) 12.74kB 12.74kB 100.0% 🚀
chunks/cinematics_OVWyQa4Y.mjs (New) 12.7kB 12.7kB 100.0% 🚀
chunks/github-light_COKynrhu.mjs (New) 12.66kB 12.66kB 100.0% 🚀
chunks/laserwave_DHoaXozT.mjs (New) 12.62kB 12.62kB 100.0% 🚀
chunks/elm_Bipiw8b9.mjs (New) 12.52kB 12.52kB 100.0% 🚀
chunks/just_Du2dk0Nd.mjs (New) 12.4kB 12.4kB 100.0% 🚀
_astro/space-grotesk-latin-ext-600-normal.DxxdqCpr.woff2 (New) 12.29kB 12.29kB 100.0% 🚀
_astro/space-grotesk-latin-ext-500-normal.DUe3BAxM.woff2 (New) 12.27kB 12.27kB 100.0% 🚀
_astro/space-grotesk-latin-ext-400-normal.CfP_5XZW.woff2 (New) 12.26kB 12.26kB 100.0% 🚀
chunks/gherkin_D6Lr12YQ.mjs (New) 12.25kB 12.25kB 100.0% 🚀
chunks/ApiAllPage_CZkQw-SR.mjs (New) 12.01kB 12.01kB 100.0% 🚀
chunks/rst_8pQc8J6s.mjs (New) 11.99kB 11.99kB 100.0% 🚀
chunks/prolog_Bacii3Ue.mjs (New) 11.89kB 11.89kB 100.0% 🚀
chunks/yaml_BXGYSTgF.mjs (New) 11.87kB 11.87kB 100.0% 🚀
chunks/nextflow-groovy_CdFFX-gF.mjs (New) 11.82kB 11.82kB 100.0% 🚀
chunks/beancount_CXtOQ8oS.mjs (New) 11.76kB 11.76kB 100.0% 🚀
chunks/dream-maker_CngiPd8U.mjs (New) 11.66kB 11.66kB 100.0% 🚀
chunks/pkl_C7lWzykI.mjs (New) 11.51kB 11.51kB 100.0% 🚀
chunks/hcl_DHg_Osgo.mjs (New) 11.39kB 11.39kB 100.0% 🚀
chunks/light-plus_BYP-8qw4.mjs (New) 11.16kB 11.16kB 100.0% 🚀
chunks/jison_otwuiBLr.mjs (New) 11.11kB 11.11kB 100.0% 🚀
chunks/raku_DI9yGpeW.mjs (New) 11.1kB 11.1kB 100.0% 🚀
chunks/pause-menu_D4vUHgVa.mjs (New) 10.73kB 10.73kB 100.0% 🚀
chunks/slack-ochin_BtOis9cv.mjs (New) 10.72kB 10.72kB 100.0% 🚀
chunks/tex_D-vgCAxY.mjs (New) 10.68kB 10.68kB 100.0% 🚀
chunks/sass_DI2zJwx7.mjs (New) 10.44kB 10.44kB 100.0% 🚀
chunks/plastic_DW9BRoPy.mjs (New) 10.41kB 10.41kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-500-normal.ckzbgY84.woff (New) 10.34kB 10.34kB 100.0% 🚀
chunks/slack-dark_DF6OVa8y.mjs (New) 10.31kB 10.31kB 100.0% 🚀
chunks/smithy_BRyN83Yn.mjs (New) 10.29kB 10.29kB 100.0% 🚀
chunks/dark-plus_BLkfv1Ms.mjs (New) 10.26kB 10.26kB 100.0% 🚀
chunks/game-feel_BT6bQtTA.mjs (New) 10.16kB 10.16kB 100.0% 🚀
chunks/cmake_DPsCB_V6.mjs (New) 10.14kB 10.14kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-400-normal.fXTG6kC5.woff (New) 10.13kB 10.13kB 100.0% 🚀
chunks/audio-reactive-scene_BZpOm8g9.mjs (New) 10.11kB 10.11kB 100.0% 🚀
chunks/andromeeda_BsG9A-2G.mjs (New) 10.05kB 10.05kB 100.0% 🚀
chunks/make_B2ukzWs3.mjs (New) 10.03kB 10.03kB 100.0% 🚀
chunks/horizon-bright_CwPyL0ta.mjs (New) 9.96kB 9.96kB 100.0% 🚀
chunks/horizon_D2HPo9qV.mjs (New) 9.93kB 9.93kB 100.0% 🚀
chunks/kotlin_BHE8CoV9.mjs (New) 9.85kB 9.85kB 100.0% 🚀
chunks/sas_CDyGTQ8m.mjs (New) 9.74kB 9.74kB 100.0% 🚀
chunks/haml_Cuchl6uH.mjs (New) 9.71kB 9.71kB 100.0% 🚀
chunks/hud-overlay_WD1xOPPY.mjs (New) 9.69kB 9.69kB 100.0% 🚀
chunks/vue-html_CftEgX6P.mjs (New) 9.68kB 9.68kB 100.0% 🚀
chunks/dart_C6DUdjib.mjs (New) 9.67kB 9.67kB 100.0% 🚀
_astro/ApiSymbolPage.DftN5Wbn.css (New) 9.59kB 9.59kB 100.0% 🚀
chunks/monokai_Y04IwRdK.mjs (New) 9.17kB 9.17kB 100.0% 🚀
chunks/regexp_hIwxRxyb.mjs (New) 9.14kB 9.14kB 100.0% 🚀
chunks/ui-patterns_Fl74iANu.mjs (New) 9.06kB 9.06kB 100.0% 🚀
chunks/plsql_DCNXypXO.mjs (New) 9.03kB 9.03kB 100.0% 🚀
chunks/camera-follow-and-parallax_DOGRtdxx.mjs (New) 9.0kB 9.0kB 100.0% 🚀
chunks/prisma_4G_BaF_i.mjs (New) 8.73kB 8.73kB 100.0% 🚀
chunks/systemd_DFbUltlW.mjs (New) 8.58kB 8.58kB 100.0% 🚀
chunks/GuideIndexPage_CwQHbJbG.mjs (New) 8.36kB 8.36kB 100.0% 🚀
chunks/ApiIndexPage_D5yS4g1s.mjs (New) 8.28kB 8.28kB 100.0% 🚀
chunks/soy_CIWxkm6B.mjs (New) 8.12kB 8.12kB 100.0% 🚀
chunks/solarized-dark_W1kg3ZX0.mjs (New) 8.03kB 8.03kB 100.0% 🚀
chunks/qss_Iltvkn1C.mjs (New) 7.97kB 7.97kB 100.0% 🚀
chunks/split-screen_CHuNTJzc.mjs (New) 7.96kB 7.96kB 100.0% 🚀
chunks/r_xm7_PhsC.mjs (New) 7.96kB 7.96kB 100.0% 🚀
_astro/GuideChapterPage.D4TLsye4.css (New) 7.95kB 7.95kB 100.0% 🚀
chunks/min-light_CnaFhYML.mjs (New) 7.88kB 7.88kB 100.0% 🚀
chunks/scheme_D3A2QBtM.mjs (New) 7.87kB 7.87kB 100.0% 🚀
chunks/talonscript_CLxaFu-b.mjs (New) 7.73kB 7.73kB 100.0% 🚀
chunks/hlsl_BJLUNfne.mjs (New) 7.73kB 7.73kB 100.0% 🚀
chunks/solarized-light_DnHmPawE.mjs (New) 7.63kB 7.63kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-500-normal.Cut-4mMH.woff2 (New) 7.53kB 7.53kB 100.0% 🚀
chunks/riscv_CvzikGLb.mjs (New) 7.5kB 7.5kB 100.0% 🚀
chunks/proto_ClkOcAW0.mjs (New) 7.47kB 7.47kB 100.0% 🚀
chunks/chapel_C02jq-Ii.mjs (New) 7.47kB 7.47kB 100.0% 🚀
chunks/red_C4iRHu1e.mjs (New) 7.35kB 7.35kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-400-normal.Bc8Ftmh3.woff2 (New) 7.34kB 7.34kB 100.0% 🚀
chunks/toml_B7BHZIqX.mjs (New) 7.22kB 7.22kB 100.0% 🚀
chunks/clojure_DDsQ0FaV.mjs (New) 7.2kB 7.2kB 100.0% 🚀
chunks/postcss_D1gKt4z_.mjs (New) 7.15kB 7.15kB 100.0% 🚀
chunks/min-dark_Ba1FsixN.mjs (New) 7.12kB 7.12kB 100.0% 🚀
chunks/ara_IxnQjO6j.mjs (New) 7.1kB 7.1kB 100.0% 🚀
chunks/gdshader_D7JfdFV3.mjs (New) 7.08kB 7.08kB 100.0% 🚀
chunks/what-is-exojs_D0T223Vv.mjs (New) 7.03kB 7.03kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-500-normal.DJqRU3vO.woff (New) 7.02kB 7.02kB 100.0% 🚀
chunks/verilog_Ma7yBE30.mjs (New) 6.99kB 6.99kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-400-normal.ugxPyKxw.woff (New) 6.98kB 6.98kB 100.0% 🚀
_astro/GuideIndexPage.Cq9sMYS3.css (New) 6.73kB 6.73kB 100.0% 🚀
chunks/jinja_D9zUf7rH.mjs (New) 6.61kB 6.61kB 100.0% 🚀
_astro/ApiIndexPage.C0owWC5Z.css (New) 6.59kB 6.59kB 100.0% 🚀
chunks/cypher_D8Bb8Cq2.mjs (New) 6.58kB 6.58kB 100.0% 🚀
chunks/powerquery_SrvS_NBM.mjs (New) 6.58kB 6.58kB 100.0% 🚀
chunks/coq_BtFcIXby.mjs (New) 6.55kB 6.55kB 100.0% 🚀
chunks/vb_eGVhCUXq.mjs (New) 6.54kB 6.54kB 100.0% 🚀
chunks/shaderlab_BcRFTmmA.mjs (New) 6.5kB 6.5kB 100.0% 🚀
chunks/xml_DzftpGsQ.mjs (New) 6.41kB 6.41kB 100.0% 🚀
chunks/lean_BwOKScIt.mjs (New) 6.28kB 6.28kB 100.0% 🚀
chunks/qml_CknB7WvB.mjs (New) 6.24kB 6.24kB 100.0% 🚀
chunks/content-modules_wYyM5GdY.mjs (New) 6.22kB 6.22kB 100.0% 🚀
chunks/SourceSnippet_b-oaowKp.mjs (New) 6.17kB 6.17kB 100.0% 🚀
chunks/awk_D6dA05Ye.mjs (New) 6.17kB 6.17kB 100.0% 🚀
chunks/gdresource_DdPbsqpY.mjs (New) 6.06kB 6.06kB 100.0% 🚀
chunks/bicep_CZ338dSk.mjs (New) 5.98kB 5.98kB 100.0% 🚀
chunks/zig_lTQvxhLD.mjs (New) 5.97kB 5.97kB 100.0% 🚀
chunks/wgsl_1s5rV5xS.mjs (New) 5.77kB 5.77kB 100.0% 🚀
chunks/dax_S-Noo-ku.mjs (New) 5.73kB 5.73kB 100.0% 🚀
_astro/space-grotesk-vietnamese-400-normal.BIWiOVfw.woff (New) 5.73kB 5.73kB 100.0% 🚀
_astro/jetbrains-mono-greek-500-normal.D7SFKleX.woff (New) 5.72kB 5.72kB 100.0% 🚀
_astro/space-grotesk-vietnamese-500-normal.BTqKIpxg.woff (New) 5.72kB 5.72kB 100.0% 🚀
_astro/space-grotesk-vietnamese-600-normal.D6zpsUhD.woff (New) 5.7kB 5.7kB 100.0% 🚀
_astro/EditorCode.C5W-684-.css (New) 5.67kB 5.67kB 100.0% 🚀
_astro/jetbrains-mono-greek-400-normal.B9oWc5Lo.woff (New) 5.66kB 5.66kB 100.0% 🚀
_astro/jetbrains-mono-vietnamese-500-normal.DNRqzVM1.woff (New) 5.48kB 5.48kB 100.0% 🚀
chunks/bibtex_BzgdqG3s.mjs (New) 5.41kB 5.41kB 100.0% 🚀
chunks/sharp_CJaCxpiL.mjs (New) 5.39kB 5.39kB 100.0% 🚀
chunks/polar_4pN1JrJ8.mjs (New) 5.38kB 5.38kB 100.0% 🚀
_astro/jetbrains-mono-vietnamese-400-normal.CqNFfHCs.woff (New) 5.37kB 5.37kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-500-normal.DmUKJPL_.woff2 (New) 5.36kB 5.36kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-400-normal.BEIGL1Tu.woff2 (New) 5.33kB 5.33kB 100.0% 🚀
chunks/llvm_ZNG_yAr9.mjs (New) 5.31kB 5.31kB 100.0% 🚀
chunks/nextflow_Dp8l2yvM.mjs (New) 5.28kB 5.28kB 100.0% 🚀
chunks/http_DUlij2nY.mjs (New) 5.25kB 5.25kB 100.0% 🚀
chunks/fennel_B3wtZRne.mjs (New) 5.21kB 5.21kB 100.0% 🚀
_astro/ApiAllPage.Yzjdg8KA.css (New) 5.19kB 5.19kB 100.0% 🚀
chunks/rosmsg_CyYq6XdT.mjs (New) 5.13kB 5.13kB 100.0% 🚀
chunks/tcl_DLe0Tsfm.mjs (New) 4.95kB 4.95kB 100.0% 🚀
chunks/sdbl_CdQg5gu1.mjs (New) 4.95kB 4.95kB 100.0% 🚀
chunks/ron_DzAo6FTJ.mjs (New) 4.51kB 4.51kB 100.0% 🚀
chunks/pascal_D8-gNZ2I.mjs (New) 4.49kB 4.49kB 100.0% 🚀
chunks/zenscript_BoijL7rl.mjs (New) 4.38kB 4.38kB 100.0% 🚀
_astro/space-grotesk-vietnamese-500-normal.BmEvtly_.woff2 (New) 4.32kB 4.32kB 100.0% 🚀
chunks/gn_DDjbVPF4.mjs (New) 4.31kB 4.31kB 100.0% 🚀
_astro/space-grotesk-vietnamese-600-normal.DUi7WF5p.woff2 (New) 4.31kB 4.31kB 100.0% 🚀
_astro/space-grotesk-vietnamese-400-normal.B7xT_GF5.woff2 (New) 4.3kB 4.3kB 100.0% 🚀
_astro/jetbrains-mono-greek-500-normal.JpySY46c.woff2 (New) 4.28kB 4.28kB 100.0% 🚀
_astro/jetbrains-mono-greek-400-normal.C190GLew.woff2 (New) 4.23kB 4.23kB 100.0% 🚀
chunks/hurl_CmOLSul9.mjs (New) 4.22kB 4.22kB 100.0% 🚀
chunks/turtle_BEG5g_eT.mjs (New) 4.2kB 4.2kB 100.0% 🚀
chunks/narrat_D9rrR0H5.mjs (New) 4.12kB 4.12kB 100.0% 🚀
chunks/kdl_DkTyxPcj.mjs (New) 4.1kB 4.1kB 100.0% 🚀
chunks/glsl_BNaTluKX.mjs (New) 4.09kB 4.09kB 100.0% 🚀
chunks/fluent_BjfpB34g.mjs (New) 4.04kB 4.04kB 100.0% 🚀
chunks/jsonnet_BafgE6cE.mjs (New) 4.04kB 4.04kB 100.0% 🚀
chunks/ssh-config_DXFPABYp.mjs (New) 3.83kB 3.83kB 100.0% 🚀
chunks/tasl__AAbKiWM.mjs (New) 3.81kB 3.81kB 100.0% 🚀
chunks/rel_BT0iIKKw.mjs (New) 3.75kB 3.75kB 100.0% 🚀
chunks/rbs_D_4FkXDS.mjs (New) 3.75kB 3.75kB 100.0% 🚀
chunks/vala_BnnASFsX.mjs (New) 3.74kB 3.74kB 100.0% 🚀
chunks/genie_DnK2KWIP.mjs (New) 3.73kB 3.73kB 100.0% 🚀
chunks/json5_xULSgPQI.mjs (New) 3.71kB 3.71kB 100.0% 🚀
chunks/po_IjpR1yHO.mjs (New) 3.71kB 3.71kB 100.0% 🚀
chunks/splunk_xP_ZjUH2.mjs (New) 3.65kB 3.65kB 100.0% 🚀
chunks/mipsasm_EL46Y4Xg.mjs (New) 3.54kB 3.54kB 100.0% 🚀
chunks/jsonc_Cu6rqcrJ.mjs (New) 3.51kB 3.51kB 100.0% 🚀
chunks/cairo_7gDYl5gO.mjs (New) 3.49kB 3.49kB 100.0% 🚀
chunks/json_B8nXmmR-.mjs (New) 3.48kB 3.48kB 100.0% 🚀
chunks/jsonl_Bp0qqr10.mjs (New) 3.42kB 3.42kB 100.0% 🚀
chunks/berry_CgA2ea0_.mjs (New) 3.4kB 3.4kB 100.0% 🚀
chunks/logo_DTXV8SKw.mjs (New) 3.27kB 3.27kB 100.0% 🚀
_astro/Callout.CLa05DU9.css (New) 3.19kB 3.19kB 100.0% 🚀
chunks/openscad_jn-f1Ocl.mjs (New) 3.17kB 3.17kB 100.0% 🚀
chunks/ExamplePreview_uXjZB2v8.mjs (New) 3.15kB 3.15kB 100.0% 🚀
chunks/log_Dad54gsi.mjs (New) 3.15kB 3.15kB 100.0% 🚀
chunks/api-reference_DfrpdFy6.mjs (New) 3.15kB 3.15kB 100.0% 🚀
chunks/gleam_CTllUdfC.mjs (New) 2.93kB 2.93kB 100.0% 🚀
chunks/diff_Blb4MjsC.mjs (New) 2.89kB 2.89kB 100.0% 🚀
chunks/hy_CJKxDzbh.mjs (New) 2.86kB 2.86kB 100.0% 🚀
chunks/edge_CgYDa_hN.mjs (New) 2.85kB 2.85kB 100.0% 🚀
chunks/TryIt_B_GiBTyg.mjs (New) 2.81kB 2.81kB 100.0% 🚀
chunks/reg_DpJf71oO.mjs (New) 2.64kB 2.64kB 100.0% 🚀
chunks/erb_C8YKatMA.mjs (New) 2.61kB 2.61kB 100.0% 🚀
chunks/jssm_Dx5A5sBR.mjs (New) 2.54kB 2.54kB 100.0% 🚀
chunks/wenyan_BeysbCrW.mjs (New) 2.43kB 2.43kB 100.0% 🚀
_astro/ExamplePreview.Ctes81XE.css (New) 2.35kB 2.35kB 100.0% 🚀
chunks/remote_BUikHFn8.mjs (New) 2.24kB 2.24kB 100.0% 🚀
chunks/hxml_D7jA4-jQ.mjs (New) 2.2kB 2.2kB 100.0% 🚀
chunks/fortran-fixed-form_DKmTkb0c.mjs (New) 2.11kB 2.11kB 100.0% 🚀
chunks/desktop_BgOb7Aj4.mjs (New) 2.06kB 2.06kB 100.0% 🚀
_astro/backend-comparison.ZtNk-atA.css (New) 2.0kB 2.0kB 100.0% 🚀
chunks/docker_PC1tuYpa.mjs (New) 1.96kB 1.96kB 100.0% 🚀
chunks/GuidePartRedirect_DOiuEzIo.mjs (New) 1.94kB 1.94kB 100.0% 🚀
chunks/ini_C24lZfdM.mjs (New) 1.76kB 1.76kB 100.0% 🚀
chunks/sparql_DGgRGInO.mjs (New) 1.75kB 1.75kB 100.0% 🚀
chunks/index_DruwmCd5.mjs (New) 1.72kB 1.72kB 100.0% 🚀
chunks/xsl_Cw3rM8vE.mjs (New) 1.71kB 1.71kB 100.0% 🚀
chunks/dotenv_Dkdv7Sm2.mjs (New) 1.65kB 1.65kB 100.0% 🚀
chunks/index_BFtAWAF9.mjs (New) 1.61kB 1.61kB 100.0% 🚀
chunks/index_MHN1GlR4.mjs (New) 1.61kB 1.61kB 100.0% 🚀
chunks/Callout_CvZIVYVe.mjs (New) 1.58kB 1.58kB 100.0% 🚀
chunks/git-commit_bqpc4DGi.mjs (New) 1.57kB 1.57kB 100.0% 🚀
_astro/TryIt.2vmWUXmI.css (New) 1.56kB 1.56kB 100.0% 🚀
chunks/rolldown-runtime_DC62tzP2.mjs (New) 1.45kB 1.45kB 100.0% 🚀
chunks/index_BQGx4zhi.mjs (New) 1.44kB 1.44kB 100.0% 🚀
chunks/index_D-R6eDlr.mjs (New) 1.44kB 1.44kB 100.0% 🚀
chunks/index_BlLXWsne.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/index_D8rZS_W0.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/_symbol__DajpKduS.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/_symbol__DzvLfeYy.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/compiler_5mpsWPie.mjs (New) 1.34kB 1.34kB 100.0% 🚀
chunks/csv_DqIVFkK7.mjs (New) 1.32kB 1.32kB 100.0% 🚀
chunks/git-rebase_CRs01Nr6.mjs (New) 1.3kB 1.3kB 100.0% 🚀
_astro/NextStep.5jphCb2x.css (New) 1.28kB 1.28kB 100.0% 🚀
_astro/example-sources.BPTlcc6X.css (New) 1.19kB 1.19kB 100.0% 🚀
chunks/qmldir_Dz8ttxjf.mjs (New) 1.17kB 1.17kB 100.0% 🚀
chunks/react-utils_DNZ_oAx1.mjs (New) 1.15kB 1.15kB 100.0% 🚀
chunks/html-derivative_UN2HpEjt.mjs (New) 1.13kB 1.13kB 100.0% 🚀
_astro/EditorPreview.mpok5XGz.css (New) 1.08kB 1.08kB 100.0% 🚀
chunks/NextStep_CMSXvBZa.mjs (New) 1.06kB 1.06kB 100.0% 🚀
chunks/shellsession_Bbrjk1tD.mjs (New) 995 bytes 995 bytes 100.0% 🚀
chunks/index_Cbh5BbJo.mjs (New) 957 bytes 957 bytes 100.0% 🚀
chunks/index_oQQ-x48q.mjs (New) 957 bytes 957 bytes 100.0% 🚀
chunks/index_Cm77_5Vi.mjs (New) 935 bytes 935 bytes 100.0% 🚀
chunks/index_MqOQVszY.mjs (New) 935 bytes 935 bytes 100.0% 🚀
chunks/all_ChgidTs1.mjs (New) 919 bytes 919 bytes 100.0% 🚀
chunks/all_UF3W2bwX.mjs (New) 919 bytes 919 bytes 100.0% 🚀
chunks/index_D1amgNh0.mjs (New) 897 bytes 897 bytes 100.0% 🚀
chunks/index_Df7KofYE.mjs (New) 897 bytes 897 bytes 100.0% 🚀
chunks/tsv_BorGVq2Z.mjs (New) 862 bytes 862 bytes 100.0% 🚀
chunks/codeowners_CxEKPWu0.mjs (New) 666 bytes 666 bytes 100.0% 🚀
chunks/EnglishFallbackNotice_CueGmAa1.mjs (New) 635 bytes 635 bytes 100.0% 🚀
chunks/vendor-monaco_Bk9R2yQ0.mjs (New) 570 bytes 570 bytes 100.0% 🚀
_astro/SourceSnippet.DWw4KFVr.css (New) 529 bytes 529 bytes 100.0% 🚀
chunks/audio-reactive-visualization_D3smaNhh.mjs (New) 381 bytes 381 bytes 100.0% 🚀
chunks/typed-worklets-and-workers_C2nX6zxF.mjs (New) 380 bytes 380 bytes 100.0% 🚀
chunks/camera-follow-and-parallax_DNDheTD8.mjs (New) 379 bytes 379 bytes 100.0% 🚀
chunks/debugging-and-inspection_bK-Blo-t.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/resize-dpr-and-canvas_DldQ3gPi.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/serialization-and-prefabs_BL2BiSyW.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/authoring-extensions_DsFDTUCk.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/coordinates-and-views_BqT_h9A9.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/project-structure_DsVcqLMe.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/loading-and-resources_BuTyuBDn.mjs (New) 368 bytes 368 bytes 100.0% 🚀
chunks/audio-reactive-scene_C5WRdZ9Z.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/retained-containers_BKdw3C8n.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/scenes-and-lifecycle_Ck9R5QW1.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/your-first-scene_B40aaFkg.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/backend-comparison_DkUAASB5.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/chords-and-sequences_BX1-wJmn.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/custom-mesh-shaders_Dw0u6IKX.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/joints-and-dynamics_DLx-GNCK.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/keyboard-and-actions_D9ab5WZ3.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/worlds-and-spawning_DY5PpdHu.mjs (New) 364 bytes 364 bytes 100.0% 🚀
chunks/gameplay-collision_xYl_EjOe.mjs (New) 363 bytes 363 bytes 100.0% 🚀
chunks/custom-renderers_BRpCe3fY.mjs (New) 361 bytes 361 bytes 100.0% 🚀
chunks/what-is-exojs_Z98gymrc.mjs (New) 361 bytes 361 bytes 100.0% 🚀
chunks/mouse-and-pointer_C5PKVcVX.mjs (New) 359 bytes 359 bytes 100.0% 🚀
chunks/troubleshooting_CO2F4GOq.mjs (New) 358 bytes 358 bytes 100.0% 🚀
chunks/build-orb-dodge_DEKIqVMG.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/immediate-mode_BinJEBVe.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/pixel-snapping_DopZHWjF.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/post-processing_BLTUyayP.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/render-targets_DjjnzCal.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/infinite-maps_eIacBUPW.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/physics-basics_DXFoNQPF.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/ui-and-widgets_CZD6nHK6.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/typed-shaders_BaZWRqJD.mjs (New) 354 bytes 354 bytes 100.0% 🚀
chunks/beat-detection_CGWBvNEI.mjs (New) 353 bytes 353 bytes 100.0% 🚀
chunks/audio-effects_DLYFmZPO.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/performance_CHwcEb9g.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/spatial-audio_xCPguBSA.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/split-screen_DCCzmOqZ.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/application_DsBwQRf3.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/audio-basics_NRTl1l75.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/hud-overlay_W5AM_Sot.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/scene-graph_CO-64Qtx.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/ui-patterns_D9WK5M-g.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/deployment_nPlt5rz4.mjs (New) 348 bytes 348 bytes 100.0% 🚀
chunks/animation_BVX-Bo25.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/cinematics_BrCPL0rU.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/pause-menu_BpW1_WSd.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/tiled-maps_CT7-hOAG.mjs (New) 346 bytes 346 bytes 100.0% 🚀
chunks/game-feel_Dk5uEv0Y.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/graphics_2zwe-WIX.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/particles_C-0CsNgW.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/setup_yuT2y-Nq.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/sprites_DiaSMd_C.mjs (New) 343 bytes 343 bytes 100.0% 🚀
chunks/aseprite_CAqiNt0W.mjs (New) 342 bytes 342 bytes 100.0% 🚀
chunks/react_D3tQMt43.mjs (New) 342 bytes 342 bytes 100.0% 🚀
chunks/filters_DVDQ3rLh.mjs (New) 341 bytes 341 bytes 100.0% 🚀
chunks/offline_EsPHZB09.mjs (New) 340 bytes 340 bytes 100.0% 🚀
chunks/gamepad_CImCpu0F.mjs (New) 339 bytes 339 bytes 100.0% 🚀
chunks/text_CRg0k9jH.mjs (New) 337 bytes 337 bytes 100.0% 🚀
chunks/ldtk_CqvgMkZK.mjs (New) 334 bytes 334 bytes 100.0% 🚀
_astro/EnglishFallbackNotice.CBJEFTmj.css (New) 279 bytes 279 bytes 100.0% 🚀
chunks/_virtual_astro_server-island-manifest_C1Q2srgE.mjs (New) 217 bytes 217 bytes 100.0% 🚀
chunks/_virtual_astro_session-driver_C-PI1Pas.mjs (New) 165 bytes 165 bytes 100.0% 🚀
chunks/content-assets_DXqEyLLP.mjs (New) 151 bytes 151 bytes 100.0% 🚀
chunks/_noop-middleware_CQ50ikAJ.mjs (New) 100 bytes 100 bytes 100.0% 🚀
chunks/noop-entrypoint_Z3zFhrGC.mjs (New) 99 bytes 99 bytes 100.0% 🚀
_astro/vendor-monaco.COd7n0iw.js (Deleted) -4.18MB 0 bytes -100.0% 🗑️
_astro/css.worker-Dsm2X3j_.js (Deleted) -1.05MB 0 bytes -100.0% 🗑️
_astro/html.worker-fD12ABR7.js (Deleted) -719.51kB 0 bytes -100.0% 🗑️
_astro/json.worker-B2CIyALT.js (Deleted) -409.15kB 0 bytes -100.0% 🗑️
_astro/vendor-monaco.CTGdSUG0.css (Deleted) -321.61kB 0 bytes -100.0% 🗑️
_astro/vendor-react.CrH08agE.js (Deleted) -206.03kB 0 bytes -100.0% 🗑️
_astro/codicon.ngg6Pgfi.ttf (Deleted) -121.97kB 0 bytes -100.0% 🗑️
_astro/ExampleBrowser.iw--hrDR.js (Deleted) -32.23kB 0 bytes -100.0% 🗑️
_astro/ExoHeader.Cyf-pXag.js (Deleted) -31.7kB 0 bytes -100.0% 🗑️
_astro/EditorPreview.gRGw25Pe.js (Deleted) -19.39kB 0 bytes -100.0% 🗑️
_astro/EditorCode.Cp4YKuTK.js (Deleted) -15.39kB 0 bytes -100.0% 🗑️
_astro/EditorCode.CVWGmhtx.css (Deleted) -3.38kB 0 bytes -100.0% 🗑️
_astro/BottomSheet.5e2n4-z3.js (Deleted) -2.67kB 0 bytes -100.0% 🗑️
_astro/BottomSheet.URrhJv5z.css (Deleted) -2.08kB 0 bytes -100.0% 🗑️
_astro/versions.aOfTA5D9.js (Deleted) -1.61kB 0 bytes -100.0% 🗑️
_astro/GuideExamplePreview.B0eutRFI.js (Deleted) -1.55kB 0 bytes -100.0% 🗑️
_astro/EditorPreview.CftKPCXX.css (Deleted) -1.06kB 0 bytes -100.0% 🗑️
_astro/rolldown-runtime.hePW80VL.js (Deleted) -716 bytes 0 bytes -100.0% 🗑️
_astro/react-utils.VlPjQmbj.js (Deleted) -260 bytes 0 bytes -100.0% 🗑️
_astro/client.hXtcBeT_.js (Deleted) -68 bytes 0 bytes -100.0% 🗑️

Files in chunks/ui-and-widgets_Dnkx5Yr9.mjs:

  • ./src/content/guide/runtime/ui-and-widgets.mdx → Total Size: 48.83kB

App Routes Affected:

App Route Size Change Total Size Change (%)
/en/guide (New) 957 bytes 957 bytes 100% 🚀
/en (New) 897 bytes 897 bytes 100% 🚀
/ (New) 1.72kB 1.72kB 100% 🚀
/de/guide/[part]/[chapter] (New) 1.61kB 1.61kB 100% 🚀
/de (New) 897 bytes 897 bytes 100% 🚀
/en/guide/[part]/[chapter] (New) 1.61kB 1.61kB 100% 🚀
/de/guide/[part] (New) 1.41kB 1.41kB 100% 🚀
/en/api (New) 935 bytes 935 bytes 100% 🚀
/de/api/all (New) 919 bytes 919 bytes 100% 🚀
/de/api/[symbol] (New) 1.41kB 1.41kB 100% 🚀
/de/playground (New) 1.44kB 1.44kB 100% 🚀
/en/playground (New) 1.44kB 1.44kB 100% 🚀
/en/api/all (New) 919 bytes 919 bytes 100% 🚀
/de/api (New) 935 bytes 935 bytes 100% 🚀
/en/api/[symbol] (New) 1.41kB 1.41kB 100% 🚀
/de/guide (New) 957 bytes 957 bytes 100% 🚀
/en/guide/[part] (New) 1.41kB 1.41kB 100% 🚀
view changes for bundle: exo-full-iife-min-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.full.iife.min.js 7.31kB 1.7MB 0.43%
view changes for bundle: exo-esm-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.esm.js 7.31kB 1.06MB 0.7%

Files in exo.esm.js:

  • ./src/core/serialization/serializerHelpers.ts → Total Size: 7.71kB

  • ./src/core/serialization/uiSerializers.ts → Total Size: 7.12kB

  • ./src/ui/Button.ts → Total Size: 7.1kB

view changes for bundle: exo-iife-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.iife.js 21.74kB 2.93MB 0.75%

Files in exo.iife.js:

  • ./src/core/serialization/uiSerializers.ts → Total Size: 7.33kB

  • ./src/ui/Button.ts → Total Size: 7.31kB

  • ./src/core/serialization/serializerHelpers.ts → Total Size: 7.88kB

view changes for bundle: exo-esm-modules-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
index.js 200 bytes 18.74kB 1.08%
ui/Widget.js 2.88kB 9.27kB 45.13% ⚠️
core/serialization/serializerHelpers.js 775 bytes 8.04kB 10.66% ⚠️
core/serialization/uiSerializers.js 827 bytes 7.71kB 12.01% ⚠️
ui/Button.js 3.72kB 7.45kB 99.71% ⚠️
ui/ProgressBar.js 1.89kB 3.93kB 92.55% ⚠️
ui/Panel.js 1.74kB 3.5kB 98.36% ⚠️
ui/theme.js (New) 3.34kB 3.34kB 100.0% 🚀
ui/WidgetBackground.js (New) 2.86kB 2.86kB 100.0% 🚀
ui/UIRoot.js 778 bytes 2.52kB 44.64% ⚠️
ui/Label.js 1.38kB 2.37kB 138.99% ⚠️
ui/ThemedContainer.js (New) 1.5kB 1.5kB 100.0% 🚀

Files in core/serialization/serializerHelpers.js:

  • ./src/core/serialization/serializerHelpers.ts → Total Size: 7.71kB

Files in core/serialization/uiSerializers.js:

  • ./src/core/serialization/uiSerializers.ts → Total Size: 7.12kB

Files in ui/Button.js:

  • ./src/ui/Button.ts → Total Size: 7.1kB
view changes for bundle: exo-full-iife-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.full.iife.js 21.75kB 4.65MB 0.47%

@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 86.54434% with 44 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/ui/Button.ts 71.21% 16 Missing and 3 partials ⚠️
src/ui/ProgressBar.ts 70.73% 12 Missing ⚠️
src/ui/WidgetBackground.ts 86.11% 3 Missing and 2 partials ⚠️
src/ui/Panel.ts 90.90% 3 Missing ⚠️
src/core/serialization/serializerHelpers.ts 84.61% 2 Missing ⚠️
src/core/serialization/uiSerializers.ts 87.50% 0 Missing and 2 partials ⚠️
src/ui/Widget.ts 96.66% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@Exoridus
Exoridus merged commit 8c2e3aa into main Aug 27, 2026
21 checks passed
@Exoridus
Exoridus deleted the ui/theme-cascade-and-controlled-setters branch August 27, 2026 20:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant