-
Notifications
You must be signed in to change notification settings - Fork 0
Changelog
Polish release - shared UI workflows and safer rebuilds
- Tooltips now wrap long text and clamp to the current GUI bounds instead of clipping outside the screen.
- Tooltips inside
<virtual-list>rows are redrawn after the list scissor is disabled, so row tooltips are no longer clipped by the list viewport. -
TesseraScreenno longer toggles the debug overlay on plainI. The keyboard debug toggle is opt-in with-Dtesseraui.debug.hotkey=trueandCtrl+Alt+I.
-
TesseraRenderContext.setInputText(id, value)updates persisted input text, cursor, selection and scroll in one call. -
<virtual-list>parent fallback - row bindings now fall back to the parent model when no per-row key exists, so global keys like{{ s.items }}work inside rows. -
<hr>separator rendering -<hr>renders as a 1 px separator by default and can be styled throughborder-color,background,color,height, andopacity.
- README install examples now point to the
1.1jar and the license badge matches LGPL-3.0. - Release documentation now calls out the state-management helpers used by rebuild-heavy screens.
Initial release — full feature set
-
<badge>layout width - badges now report their measured text width before render, preventing overlaps when several badges are placed in the same row. -
<item-slot>CSS styling -background,:hover { background: ... }andborder-colorare applied to theTesseraItemSlotwidget. -
v-if/v-showbare expressions —v-if="count > 0"évalue correctement. Les expressions nues sans{{ }}étaient toujours vraies. -
String comparison —
status == 'ready'fait une comparaison string. Les deux côtés étaient convertis endoubleet tout comparait à0 == 0. -
RHS model resolution —
a == bavec deux clés modèle compare les valeurs résolues. -
Quote-aware operator parsing — un opérateur dans un littéral quoté (
status == 'a > b') n'est plus interprété comme opérateur de comparaison. -
Clé absente — une clé absente du modèle vaut
"", pas0.missing == 0retournefalse. -
Commentaires CSS multilignes —
/* ... */sur plusieurs lignes correctement supprimés. -
rgba()alpha clamping — les valeurs hors[0, 1]sont clampées au lieu de wrapper. -
margin-top: autocascade — une règle plus spécifique peut réinitialiserautoen valeur px. -
Transition memory leak — les transitions n'étaient jamais supprimées après leur fin.
-
Couleur transparente animable —
0x00000000est maintenant une valeur cible valide pour les animations. -
DragContext.render()safety — position et shader color restaurés viatry/finally. -
VirtualList.mouseScrolled()— scroll consommé uniquement si la liste a réellement bougé. -
<virtual-list v-for>prefixed bindings — les rows acceptent maintenant la syntaxe documentée{{ row.name }}/onclick="{{ row.action }}"avec des clés modèlerow.name.0, tout en conservant la compatibilité avec les clés nues{{ name }}. -
Hot Reload double activation —
activate()ne spawne plus plusieurs threads watcher. -
Hot Reload path traversal — les
resourceIdcontenant../horsassets/lèvent uneSecurityException. -
Templates HTML UTF-8 BOM — le parser tolère un BOM initial et le renderer renvoie une erreur lisible si un template n'a pas de root.
-
Inputs persistants —
TesseraRenderContextconserve texte, curseur et focus entre rebuilds pour les inputs avecid. -
Input autocomplete —
TesseraInputet<input>supportentsuggestions/autocomplete, navigation Up/Down, acceptation Enter/Tab. -
Input state cleanup —
TesseraRenderContextexposeclearInput,clearInputsWithPrefixetclearInputsMatching. -
<virtual-list>— cache borné autour de la fenêtre visible, rows focus conservées, forwarding clavier pour les inputs en row. -
<badge>— fond par défaut transparent au lieu d'un style visuel imposé.
-
TesseraRenderContext— per-screen transient state for rebuild-safe inputs -
TesseraTemplateRenderer— HTML → widget tree pipeline -
TesseraCssParser— CSS parser with full selector support -
TesseraModel— flat key-value data binding with{{ }}expressions -
TesseraScreenbase class with automatic event wiring -
TesseraTemplate— resource-location based template loading -
TesseraHotReload— cache invalidation and disk-watch for development -
TesseraPalette— copper-patina design system
-
Shared CSS from HTML —
<link rel="stylesheet" href="..."> -
Flexbox engine —
flex-grow,flex-shrink,flex-basis,flex-wrap -
justify-content,align-items,align-self,margin-top: auto -
gap,padding,margin,width,height,min/max-width/height -
Grid layout —
<grid cols="N">andgrid-template-columns -
position: absolutewithtop,left,right,bottomoffsets -
overflow: hidden,box-sizing,z-index,order -
calc()expressions forwidthandheight
-
background,border,border-color,border-radius,opacity -
color,font-size,font-weight,text-align,text-decoration,white-space -
corner-dot-size,corner-dot-color - Pseudo-states:
:hover,:active,:focus,:disabled,:nth-child - CSS variables —
:root { --var: value; }andvar(--name) -
@media (min-width / max-width)queries
-
transition— smooth hover interpolation forbackground,border-color,color -
@keyframes— named animations withfrom,%,tostops -
animation—duration,easing,delay,iterations,alternate -
TesseraEasing— cubic-Bézier easing (Newton-Raphson + bisection) -
TesseraAnimationEngine— per-widget animation state viaWeakHashMap
-
TesseraPanel,TesseraLabel,TesseraButton -
TesseraInput,TesseraTextArea -
TesseraCheckbox,TesseraSlider,TesseraDropdown -
TesseraBadge,TesseraIcon -
TesseraTabPanel— tabbed container -
TesseraVirtualList— efficient scrolling list (visible rows only) -
TesseraItemSlot,TesseraItemGrid,TesseraInventoryPicker
<col>, <row>, <grid>, <div>, <section>, <article>, <main>, <nav>, <header>, <footer>,
<label>, <button>, <input>, <textarea>, <checkbox>, <slider>, <select>, <option>,
<h1>–<h6>, <p>, <span>, <strong>, <b>, <em>, <i>, <a>, <badge>,
<ul>, <ol>, <li>, <hr>, <tabs>, <tab>, <virtual-list>,
<table>, <thead>, <tbody>, <tfoot>, <tr>, <td>, <th>,
<img>, <icon>, <item-slot>, <link>
-
{{ expr }}— inline expressions with ternary, string concatenation,t:keytranslations -
v-for="item in list"— repeat element for each model entry -
v-if="expr"— conditional rendering -
v-show="expr"— conditional visibility (preserves layout space) -
data-i18n="key"— Minecraft i18n translation binding -
{{ t:key }}— inline translation syntax
-
<template name="...">— define reusable components -
<slot>/<slot name="...">— named and default slot injection -
TesseraComponentRegistry— global component store
-
draggable="true"anddrag-payloadHTML attributes -
TesseraDropZone—accepts(),onDrop(),dropBounds() - Drag ghost rendered by
renderTesseraOverlays()