Skip to content

Releases: antaresdk/sus-core

v1.1.0

Choose a tag to compare

@antaresdk antaresdk released this 11 Sep 20:45

Added

  • Storybook shell with a look of its own. Its tokens, classes and fonts are independent of the product stylesheets, so switching skin, theme or density changes the component you are inspecting, not the instrument around it.
  • Scoped cascade roots. A subtree can declare itself the cascade root, so a panel may show a component under a theme of its own while the rest of the application keeps another.
  • Closed variant axes for stories. A story declares the set of values a variant may take, so the state matrix shows real rows instead of a single unnamed line.
  • Component role registry. Which states a component owes and where its focus ring lives are declared as data, and the storybook matrix shows a state column only when the role owes that state.
  • Geometry anomalies are detected. Beside the former "visible but zero-size", the probe now reports out-of-bounds, clipped, overlapping and off-canvas elements, each with a threshold you can set.
  • History and reset in the storybook. Back and forward through visited stories, and a reset that returns the story to the seed its author chose rather than to type defaults.

Changed

  • Matrix cells fit their content. A cell grows to the natural size of the instance; a component too large for a grid gets a state switcher on a single full-size instance instead of a wall of clipped thumbnails.
  • Overlays are usable from the keyboard. Modals, drawers, sheets and dialogs trap focus, move it inside on open and return it to the opener on close.
  • The stage no longer jumps. One canvas height for every story and popover, scrolling on both axes, and a line that says when the content is wider than the window.
  • Value clamping is quiet on declared aliases and reports only values it does not know.
  • Font assets trimmed from 42 faces to the 10 actually used, with their licence texts alongside.

Fixed

  • The focus ring is visible on a primary fill. Its ink is a token of its own instead of an alias of the brand colour, so a selected segment or an active tab shows focus.
  • The ring survives a re-render and waits for a child that appears late.
  • A stack overflow when the safe-area story expanded its matrix.
  • The canvas grid tile is drawn at its own size instead of being stretched across the canvas.
  • The vertical scrollbar is styled like the horizontal one.

Also included since v1.0.18

Authoring

  • @variants in Sharq: a component declares its variant axes in the template, and the compiler emits the rules, the class binding and the allowed set.
  • rung(family, step): a step of the dimension ladder resolved at compile time inside a template.
  • Nested rules in Sharq stylesheets.
  • Generated-to-source maps next to every generated stylesheet, so a rule points back at the template line that produced it.
  • AOT-safe v-for keys, and a clear compile error instead of a broken type when an unknown UI Toolkit event is bound.

Runtime

  • Storybook engine moved into core as an opt-in sample: story registry, environment chips, state matrix, live instance and controls derived from the component's own properties.
  • Visibility through a class. v-show and BindVisibility hide with a sus-hidden class instead of writing inline display, so a stylesheet can override it.
  • Fonts through stylesheets: no font is assigned from code any more.
  • SusSafeArea and SusApp.UseSafeArea for notch and gesture insets.
  • Input device and glyphs: last active device (pointer, keyboard, gamepad, touch) with glyph resolution for prompts, plus a shared touch-target minimum token.
  • Slot containers carry stable classes, so a slot can be styled without C#.

Fixed

  • Reactive property re-entrancy: a watcher that reads a value while it is being written is no longer misattributed to another effect, and Peek() reads a value without registering a dependency.
  • Bind cascade desync: a derived value written during a bind pass no longer leaves the bound text or class one generation behind.
  • Companion stylesheets inherit: a C# subclass of a styled component keeps its ancestor's stylesheet instead of silently losing it.
  • A repeating motion stops when its target leaves the panel instead of ticking a dead element.
  • Headless runs without a graphics device no longer emit breakpoint errors.
  • Install diagnostics for classic sets: no false "relocated" or "residual" reports for nested skin modules, and scene comparison ignores line endings so Unity stops asking about changes that are not there.
  • Overlay host resolution unified across all mount paths; world-space panels declare their domain by class.

Performance

  • Reflection accessors for child-property binding are cached instead of resolved on every change.
  • The per-frame update tick is scheduled only for component types that actually override it, removing a 60 Hz no-op on every component.

1.0.18

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 21:07

[1.0.18] - 2026-08-18

Added

  • SusMotion — code-driven tween builder for UITK inline styles (opacity / scale / translate /
    rotate / background-color) with a fluent API, SusEase curves, SusRestoreMode, presets
    (SusMotionPresets: FadeIn/Out, SlideIn/Out, Bounce, PunchScale, Shake) and
    SusMotionStagger.Children. One active play per target; distinct from SusTransition
    (USS enter/leave phases). Tests added.

Fixed

  • WebGL RangeError: Maximum call stack size exceeded on deep synchronous mounts: a bind /
    WatchEffect action that adds a freshly built child during the parent's own attach-flush
    re-entered FlushPendingBindUpdatesOnAttach one stack level deeper per nested reveal. The
    synchronous flush depth is now capped at 1; nested flushes are queued and drained iteratively
    by the outermost caller within the same tick (nothing is deferred to the scheduler, nothing
    is dropped). Regression tests added.

Changed

  • README: first-touch section (requirements, .sharq quickstart, exit cost); legacy product
    comparison dropped.
  • Versioned hooks: scripts~/pre-push / scripts~/prepare-commit-msg carry the attribution
    guard (no AI trailers in the pushed range).

v1.0.17

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Added

  • SUS Set Doctor: RootFileProvenance — reads the packer's Generated for: <set> v<version>
    marker in generated root files (README / LICENSE / Third-Party Notices) and warns (never
    "delete") when a smaller set's re-import overwrote the root files of a larger installed set.
  • ResourcesFolderIconProvider: a requested icon weight (e.g. Fill) that the curated set does
    not ship degrades to Regular instead of returning no image.

Fixed

  • Reactive sibling attach-flush race: several freshly built reactive components attached in the
    same synchronous cascade could lose their post-attach bind catch-up (blank / uncoloured
    BindClass / BindVisibility targets); the flush is now applied without a per-component
    one-shot scheduler item. Regression tests added.
  • SusWorldSpacePanel: the auto-created world-space PanelSettings stays in Screen Space until
    the first AttachElement call — apps that never mount world-space UI no longer keep an idle
    WorldSpace panel alive.
  • Public doc-comments in SusSetDoctor no longer mention internal tool names.

Changed

  • Test infrastructure: SusLogLevelGuardAttribute resets SusLog.Level around every test in
    the shared PlayMode domain; scripts~/prepare-commit-msg is the versioned hook (PowerShell
    copy removed).
  • README: community links (Discord / Telegram); Docs/13-audits.md callback-audit count fixed.

v1.0.16

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Added

  • SUS Set Doctor v2: reads every per-module sus-module.json and per-set sus-set.<set>.json
    under Assets/ and attributes each path to its owner. "Delete" is advised only for a path that
    belongs to a module which is present but no longer lists it (Residual); everything else is
    reported without a destructive hint (Unattributed, ModuleManifestMissing, IncompleteSet,
    Relocated). Installing the Kit set on top of the Complete set no longer suggests removing the
    Game module.
  • SusClassicSampleLocator (Editor): resolves a module's sample folder under a classic
    (.unitypackage) install from its sus-module.json, so the Kit/Game Setup menus work for a
    classic purchaser instead of asking to install a package they never had.

Fixed

  • BindTransitionVisibility: the "no animation on initial mount" latch is now gated on the first
    real layout pass instead of the first reactive run, so a component whose prop is set right after
    construction (before Add()) no longer plays a real Enter animation on its first paint
    (expansion panels captured at opacity: 0).
  • Sample asmdefs are autoReferenced: false — a purchaser's Assembly-CSharp no longer
    implicitly references sample code.

Changed

  • Package push gate (scripts~/pre-push): docs check runs always and first; version bump is
    hard-required on source changes.

v1.0.15

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Added

  • SUS Set Doctor (Editor, Window/SUS/Set Doctor + auto-run on load/import): detects the three
    states that silently break a classic (.unitypackage) install — a UPM package and the same
    module under Assets/ at once, residual files left over from an older set version, and a
    version mismatch between modules — and prints what to delete/re-import.
  • Classic-layout starter assets and sharq.gen.json discovery for modules installed under
    Assets/ (not only under Packages/).
  • Project-local Phosphor icon subset provider + sample README (icon-subset sample).
  • SusUiProbe marks truncated single-line text nodes; dev console filter chips have stable names
    for UX targeting.

Fixed

  • OverlayHost.ClearAll / ClearCategory no longer corrupt the UIR render tree when a close
    re-enters the host.
  • Bindings and schedules survive a relocation-only detach (portal / self-teleporting elements),
    so overlay components no longer close themselves while opening.
  • v-if / transition elements: a hidden-at-mount element re-appears at its authored sibling
    index instead of jumping to last child; the first evaluation snaps to the start state instead
    of playing a leave animation.
  • Portal popups resync width/position on GeometryChangedEvent, not only at Show().
  • Fast Enter Play Mode: dev/diagnostic statics are reset on Enter Play Mode.
  • Samples: dangling PanelSettings reference in Comp/ThemeShowcase/SusKeepAlive.
  • Sharq source generator: a [CreateProperty(default: "…")] string default lost its quotes and
    overrode the author's field initializer, and a field with a trailing // comment after ;
    skipped its [UxmlAttribute] companion. String literals are re-emitted verbatim, the author's
    initializer wins, trailing comments are preserved (regenerate .g.cs in dependent packages).

Changed

  • Docs: internal workspace paths removed from buyer-facing docs; translation artifacts fixed;
    screenshots added.

v1.0.14

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Changed

  • The dev console (SusConsoleService) is now styled by a stylesheet instead of C# inline styles:
    Runtime/Resources/SusRuntime/sus-console.uss, loaded onto the console root on first Show().
    Every colour is a design token, so the console follows the active theme, and a project can
    restyle it by overriding the .sus-console* classes — previously the look was compiled into the
    service and could not be changed at all. Documented in Docs/17-console.md.

Fixed

  • The open console looked broken: filter buttons, text fields and the scrollbar rendered with the
    UI Toolkit defaults (light grey controls, white input boxes, editor-chrome scroller) on top of a
    dark game UI. Filters are now chips that show which one is active, inputs are dark with
    placeholders, and the scroller is a thin dragger.
  • The status line under the log said either the active filter or how many entries were shown,
    depending on which code path updated it last. It now always shows both.
  • SusConsoleService.Instance and OnDuplicateCommand survived leaving Play Mode with Domain
    Reload disabled (Fast Enter Playmode), so the next session could start with a console pointing
    at a destroyed panel. Both are reset on SubsystemRegistration, matching the other services.

v1.0.13

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Fixed

  • Assets → Create → SUS → Sharq Screen produced a file that did not compile in a project with
    only this package installed: the template's script section referenced Sharq.Router, which
    lives in a separate package. The navigation call is now a commented example, so the created
    component compiles as-is and still shows how to wire a router when one is installed.
  • The Screen and Modal templates styled themselves with token names this package does not define,
    so every colour silently fell back to a hardcoded literal. They now use the --sus-* tokens
    from design-tokens.uss.
  • Generated code lost its artifacts permanently when Generated/ was missing — a fresh clone of a
    project that does not commit that folder, or a "delete it and let it regenerate" cleanup. Both
    the content hash and the section cache reported "nothing changed", so nothing was written back
    and the project stayed uncompilable until a .sharq file was edited by hand. A missing artifact
    now counts as a change.
  • The header of a generated file recorded the absolute path of the machine that ran the generator,
    so teams committing Generated/ got a one-line diff per teammate. The path is now project
    relative.

Removed

  • Three unused template files (HomeScreen.sharq.txt, SettingsScreen.sharq.txt, MyApp.cs.txt)
    that shipped in Editor/Templates/ but were referenced by nothing — leftovers of the setup flow
    that now lives in Editor/Setup/Starter~, and stale copies of it.

v1.0.12

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Fixed

  • Icon SVGs were imported with the vector cropped to its geometry bounds instead of the source
    viewBox. Since a VectorImage is painted as a stretched background, sparse glyphs came out
    distorted: minus (an 18×1 bar inside a 24×24 box) filled its element as a solid block, and
    check / the carets rendered visibly larger than the rest of the set. All shipped icons — the
    built-in subset and the optional Phosphor sample — now preserve the viewBox, so one set of
    icons is optically consistent at any size.
  • New icon SVGs dropped into a Resources/SusRuntime/Icons/** folder get that import setting by
    default (SusIconImportDefaults); existing .meta files are never overwritten.

v1.0.11

Choose a tag to compare

@antaresdk antaresdk released this 17 Aug 16:42

Changed

  • The full Phosphor set (1,512 icons x 6 weights, 31 MB) moved out of Runtime/Resources into the
    optional Phosphor Icon Set sample. The package now ships a 127-icon subset — everything the
    built-in components use — so Resources, which lands in every player build, is 1.6 MB
    instead of 32.5 MB. Import the sample if you need the long tail; it keeps the same
    SusRuntime/Icons/phosphor/{weight}/{name} resource path, so no code changes are required.
    The manifest already declared this sample, but the assets had never been moved, which also
    broke store packaging.

sus-core 1.0.10

Choose a tag to compare

@antaresdk antaresdk released this 12 Aug 13:25

SusLog, SusIconElement, space/radius tokens, optional sharq.gen.json namespace, domain-reload hygiene.