Skip to content

Latest commit

 

History

History
2397 lines (1859 loc) · 128 KB

File metadata and controls

2397 lines (1859 loc) · 128 KB

Changelog

All notable changes to this project will be documented in this file.

[0.7.0.4] - 2026-07-18

Added

  • Typed outline keywords - Modifier.outline(OutlineStyle) applies outline keywords such as OutlineStyle.None without extracting their raw string values

[0.7.0.3] - 2026-07-17

Added

  • Typed stylesheet DSL - Structured selectors, pseudo-classes, pseudo-elements, media queries, keyframes, rule priorities, and animation values for declaring reusable styles without raw CSS
  • Conditional modifier styles - State, scoped-selector, and media-query styles now render on JVM SSR and attach the required state hooks in browser runtimes
  • Typed CSS modifiers - Added APIs for text wrapping and overflow, outlines, logical insets, scrollbar styling, grid tracks, color schemes, list styles, sizing, and text shadows
  • Native form metadata - Added search and date inputs, maximum-length and numeric-step constraints, radio groups, and submit-button name, value, and form targeting

Changed

  • JVM head rendering - Custom head declarations now supersede matching defaults, declarations made during composition are included in the final document, and repeated renders do not leak head state
  • Typed rendering coverage - Expanded typed background, border, accessibility, transition, grid, and text helpers used by framework-only SSR applications

Fixed

  • Head output escaping - Titles, attributes, and raw-text end tags are escaped to prevent malformed or prematurely terminated head elements
  • Binary compatibility - Preserved the existing JVM signatures for form fields and buttons while exposing the new optional form metadata

[0.7.0.2] - 2026-02-10

Fixed

  • Composable rendered twice in fullstack SSR projects - The server-rendered HTML and the client-side app both appeared on screen because the generated client Main.kt used renderComposableRoot instead of hydrateComposableRoot, causing the JS app to append below the static SSR content rather than replacing it
  • renderComposable safety net - Calling renderComposableRoot on an SSR container now always clears existing content before rendering, preventing duplicate output even if hydrateComposableRoot is not used

[0.7.0.1] - 2026-02-09

Fixed

  • SSR 500 error in generated fullstack projects - The app module was missing jvmToolchain(17), causing UnsupportedClassVersionError when ./gradlew :backend:run loaded app classes compiled with a higher JDK
  • Silent SSR failures - Added error handling (catch Throwable) to the SSR route in all generated server templates (Ktor, Spring Boot, Quarkus) so rendering errors produce a visible error page and log output instead of an empty HTTP 500

[0.7.0.0] - 2026-02-05

Added

HTML DSL Components

  • New components/html/ Package - Complete HTML5 semantic elements DSL
    • HtmlElements.kt - Header, Nav, Main, Footer, Section, Article, Aside, Address, Hgroup, Search
    • TextElements.kt - H1-H6, P, Blockquote, Pre, Code, Strong, Em, Small, Mark, Del, Ins, Sub, Sup, S, U, B, I
    • ListElements.kt - Ul, Ol, Li, Dl, Dt, Dd, Menu
    • TableElements.kt - Table, Thead, Tbody, Tfoot, Tr, Th, Td, Caption, Colgroup, Col
    • InlineElements.kt - A, Span, Time, Abbr, Cite, Q, Kbd, Samp, Var, Dfn, Data, Bdi, Bdo, Ruby, Rt, Rp, Wbr, Br
    • MediaElements.kt - Figure, Figcaption, Iframe, Embed, ObjectTag, Param, Source, Track, Audio, Meter
    • DetailsElements.kt - Details, Summary, Dialog

Modifier Enhancements

  • Breakpoint Shortcut Modifiers - Mobile-first responsive design helpers
    • xs(), sm(), md(), lg(), xl(), xxl() - Min-width breakpoints
    • xsDown(), smDown(), mdDown(), lgDown(), xlDown(), xxlDown() - Max-width breakpoints
    • smOnly(), mdOnly(), lgOnly(), xlOnly() - Exact range breakpoints
    • breakpointBetween(min, max) - Custom range breakpoints
  • Scoped Style Selectors - CSS combinator support
    • Modifier.descendant(selector) - Descendant selector (space)
    • Modifier.child(selector) - Child selector (>)
    • Modifier.adjacentSibling(selector) - Adjacent sibling selector (+)
    • Modifier.generalSibling(selector) - General sibling selector (~)

Desktop/Multi-window Features

  • SyncedStorage - Cross-tab reactive storage using localStorage + storage events
    • createSyncedStorage() - Create synchronized storage instance
    • rememberSynced() - Composable for synced state
  • BroadcastChannel - Cross-window messaging API
    • createBroadcastChannel() - Create messaging channel
    • SummonBroadcastChannel - Cross-platform interface
  • WindowManager - Multi-window management
    • WindowManager.open() - Open new windows/tabs
    • WindowManager.getScreenInfo() - Screen dimensions and capabilities
    • WindowManager.currentWindowId - Unique window identifier
    • WindowManager.moveTo(), resizeTo(), focus() - Window manipulation
  • File Dialogs - File System Access API integration
    • showOpenFileDialog() - Open file picker
    • showSaveFileDialog() - Save file dialog
    • showDirectoryPicker() - Directory selection
    • isFileSystemAccessSupported() - Feature detection
  • MenuBar - Application menu bar component
    • MenuBar() composable with DSL builder
    • MenuItem, Menu, KeyboardShortcut data classes
    • menuBar { } DSL for declarative menu definition
  • SystemTray - System tray support (no-op on web)
    • createTrayIcon() - Create tray icon
    • showNotification() - Web Notifications API fallback
  • Cross-Window Drag and Drop - DragCoordinator using BroadcastChannel
    • DragCoordinator - Coordinate drag operations across windows
    • DragData, DragMessage - Serializable drag payloads
  • Picture-in-Picture - Document PiP API support
    • requestPictureInPicture() - Request PiP window
    • PictureInPictureContent() - Render into PiP window
    • isPictureInPictureSupported() - Feature detection

Changed

  • JVM Renderer - Expanded renderHtmlTag to support 70+ HTML5 elements
  • WASM Renderer - Implemented proper renderHtmlTag with full HTML5 support
  • PlatformRenderer - Added renderMenuBar() method

Deprecated

  • SemanticHTML.kt - All functions deprecated in favor of components/html/ package
    • Header, Main, Nav, Article, Section, Aside, Footer, Heading, Figure, FigCaption

[0.6.3.0] - 2026-01-12

Added

  • BasicTextField Component - New minimal text input field without validation state, safe for JS minification scenarios where state capture in callbacks can cause issues
  • @SlowTest Annotation - New test annotation for marking slow tests (stress tests, performance tests) that are excluded from default test runs

Fixed

  • JS Minification Issues - Fixed callback handling in TextField and StatefulTextField components that caused runtime failures in production (minified) JS builds
    • Refactored state updates to use local wrapper functions instead of capturing mutable state in inline lambdas
    • Added @JsName annotations to ensure consistent function naming in minified builds
  • PlatformRenderer Access - Improved getPlatformRenderer() to prioritize global store lookup before CompositionLocal, making it more reliable in minified JS contexts
  • SSR renderToString Double-wrapping - Fixed ServerSideRenderUtils.renderPageToString which was wrapping already-complete HTML documents in another HTML document, causing content to not render properly

Changed

  • TextField Components - Added @JsName annotations to TextField, StatefulTextField, BasicTextField, and TextFieldType for consistent JS interop
  • PlatformRendererFacade - Added @JsName annotations to all public methods (renderText, renderButton, renderTextField, renderDiv, renderRow, renderColumn, renderBlock, renderComposable)
  • PlatformRendererAccessor - Added @JsName annotations to getPlatformRenderer, setPlatformRenderer, and clearPlatformRenderer functions

Performance

  • Build Time Optimization - Significant improvements to build and test execution times:
    • Enabled Gradle build cache by default for faster rebuilds
    • Disabled configureondemand (not compatible with KMP JS/WASM targets - see KT-52074)
    • Added ParallelGC to Kotlin daemon and Gradle JVM for faster garbage collection
    • Enabled parallel test execution with maxParallelForks based on available CPU cores
    • Added JVM test process reuse with forkEvery = 100
    • Set org.gradle.workers.max=4 for controlled parallel task execution
    • Separated slow tests (stress/performance tests) from default test runs:
      • SSRPerformanceStressTest - Stress tests with 100+ iterations
      • SSRErrorHandlingTest.testMemoryLeakPrevention - GC-dependent tests
      • KtorIntegrationE2ETest - Embedded server tests
      • QuarkusIntegrationE2ETest - Embedded Vert.x server tests
      • SpringBootRendererHydrationTest - Spring WebFlux tests
      • WebFluxRendererHydrationTest - Reactor-based tests
      • SpringWebFluxRouterTest - Spring router tests
      • CallbackHydrationTest - Coroutine callback tests
    • Added slowTests Gradle task for running excluded slow tests separately
    • Updated CI workflow to use --build-cache and --parallel flags
    • Expected time savings: 60-70% reduction in JVM test execution time

[0.6.2.2] - 2026-01-07

Changed

  • Kotlin 2.3.0 - Updated Kotlin and Kotlin Multiplatform from 2.2.0 to 2.3.0
  • AtomicFU 0.30.0-beta - Updated from 0.29.0 to fix "Unsupported API dependency types in test source sets" warning with Kotlin 2.3.0

Removed

  • Examples Directory - Removed the examples/ directory; CLI-generated projects now serve as the canonical examples

Dependencies

  • Aether - Updated from 0.2.0.0 to 0.4.2.1
  • kotlinx-datetime - Updated from 0.6.2 to 0.7.1
  • Kotlin Wrappers - Updated from 2025.10.14 to 2025.12.11
  • Chart.js - Updated from 4.4.1 to 4.4.7
  • markdown-it - Updated from 14.0.0 to 14.1.0
  • highlight.js - Updated from 11.9.0 to 11.11.0
  • Quarkus - Updated from 3.15.7 to 3.20.4
  • Ktor - Updated from 3.3.1 to 3.3.3
  • Spring Boot - Updated from 3.5.7 to 3.5.9
  • Spring Framework - Updated from 6.2.12 to 6.2.14
  • Reactor Core - Updated from 3.7.12 to 3.7.14
  • Reactor Kotlin Extensions - Updated from 1.2.4 to 1.2.5
  • GraalVM Native Image - Updated from 0.11.2 to 0.11.3
  • kaml - Updated from 0.102.0 to 0.104.0
  • commons-io - Updated from 2.20.0 to 2.21.0
  • Kotest - Updated from 5.9.1 to 6.0.7
  • jsoup - Updated from 1.18.3 to 1.22.1
  • Binary Compatibility Validator - Updated from 0.16.3 to 0.17.0

[0.6.2.1] - 2025-12-28

Fixed

  • Native Form Submission - Forms with server-side action attribute now bypass hydration event interception, allowing native browser form submission to work correctly
  • Added data-native-form marker to Form component when using action-based submission

[0.6.2.0] - 2025-12-23

Fixed

  • DOCTYPE Declaration Missing - Fixed renderComposableRoot on JVM to include <!DOCTYPE html> declaration, preventing browser quirks mode and ensuring standards-compliant rendering

[0.6.1.0] - 2025-12-23

Added

  • Type-Safe CSS Enums - Added type-safe enum overloads for all CSS property modifiers:
    • fontWeight(FontWeight) - Accept FontWeight enum directly
    • fontWeight(Int) - Accept numeric values (100-900)
    • color(Color) - Accept Color class directly
    • backgroundColor(Color) - Accept Color class directly
    • background(Color) - Accept Color class directly
    • cursor(Cursor) - Accept Cursor enum directly
    • objectFit(ObjectFit) - Accept ObjectFit enum directly
  • ObjectFit Enum - Added new ObjectFit enum with values: Fill, Contain, Cover, None, ScaleDown

Changed

  • All modifier functions now prefer type-safe enum parameters over raw strings for better compile-time safety

[0.6.0] - 2025-12-23

Added

  • Platform-Agnostic Layout Primitives - Implemented high-level application structure components including Scaffold, TopAppBar, BottomNavigation, NavigationDrawer, BottomSheet, FloatingActionButton, Snackbar, NavigationRail, SplitPane, and Sidebar.
  • Window Insets Support - Added WindowInsets API and Modifier.windowInsetsPadding to handle system safe areas (notches, status bars).
  • Gesture System - Implemented a unified gesture detection system with GestureDetector supporting tap, double tap, long press, drag, pinch, and rotate. Added Modifier.gestures and Modifier.onContextMenu.
  • Drag and Drop - Enhanced drag and drop support with DragEvent and DataTransfer API. Added Modifier.onDragStart, Modifier.onDrop, etc.
  • Context Menu - Added ContextMenuArea component and ContextMenuItem for creating context menus.
  • WASI Export Surface - Added WasiExport object and export functions (summon_entry, summon_event) to enable compiling Summon to wasm32-wasi for headless environments.
  • CBOR UI Tree - Implemented UiTree, UiNode, and UiPatch data structures with serialization support (currently JSON-backed) for headless rendering and interop.
  • Theme DSL - Added a type-safe DSL for defining themes.
  • Tooltip API - Added Tooltip component with automatic positioning.
  • Clipboard API - Added ClipboardAPI for reading/writing to system clipboard.
  • Cursor Styles - Added Modifier.cursor for changing mouse cursor appearance.
  • Focus Management - Implemented FocusRequester and keyboard navigation support.
  • Semantic Accessibility - Added comprehensive accessibility support with ARIA mapping and semantic modifiers.
  • Navigation - Implemented a platform-agnostic routing system with back stack management.

Changed

  • Modifier Refactor - Refactored Modifier to use the Companion Object pattern (similar to Jetpack Compose) for better API ergonomics and extensibility.

[0.5.8.7] - 2025-12-18

Fixed

  • State Updates Not Re-rendering UI - Fixed critical bug where state changes via mutableStateOf were not triggering UI re-renders in CLI-generated projects
    • Root cause: JsApi.renderComposableRoot() was using the extension function renderer.renderComposable() which bypassed recomposer setup
    • The extension function just called composable() directly without setting up RecomposerHolder or composeInitial()
    • Solution: Changed to use the proper renderComposable(renderer, composable, container) function from Composable.kt that sets up recomposition correctly

Changed

  • Auto-publish to Maven Central - Added publishingType=AUTOMATIC to Central Portal upload URLs so packages are automatically published after validation passes (no manual approval needed)

[0.5.8.6] - 2025-12-18

Fixed

  • currentParent ReferenceError in Browser - Fixed "Uncaught ReferenceError: currentParent is not defined" error when running CLI-generated projects
    • Root cause: PlatformRendererExt.kt accessed currentParent as a local variable instead of window.currentParent
    • The initialization code in Initialize.kt sets window.currentParent, but the extension function was missing the window. prefix
    • Fixed all JS interop calls to use window.currentParent

[0.5.8.5] - 2025-12-18

Fixed

  • CLI Generated Projects Console Errors - Fixed CLI-generated standalone projects showing console errors at runtime

    • Root cause: Generated Main.kt used manual window.onload + renderComposable() pattern which bypassed proper initialization
    • Solution: Changed to use renderComposableRoot() API which properly initializes GlobalEventListener and sets up the rendering context
    • Affects standalone, fullstack Ktor, Spring Boot, and Quarkus project templates
  • Recomposer LocalPlatformRenderer Error - Fixed potential crash when LocalPlatformRenderer.current was accessed before CompositionLocal was provided

    • Changed to use PlatformRendererStore.get()?. with safe calls in Recomposer.kt

Changed

  • CLI Help Text Dynamic Version - CLI help text now displays the actual version dynamically instead of hardcoded values
  • CLI README Version Placeholders - Documentation now uses <version> placeholders with a note to check releases page

[0.5.8.4] - 2025-12-11

Fixed

  • Dropdown data-action Attribute Not Applied - Fixed critical bug where the data-action attribute was never added to the dropdown trigger element
    • Root cause: The code used .apply {} block to conditionally add the attribute. Since Modifier is immutable, attribute() returns a new Modifier instance, but .apply {} always returns the original receiver, discarding the new instance
    • Solution: Changed from .apply {} to .let {} which properly returns the modified Modifier when the condition is true, or the original when false
    • This was the actual root cause of dropdown click-to-expand not working (the previous ClientDispatcher fix in 0.5.8.3 was also necessary but insufficient)
    • Fixed across all platform implementations (JVM, JS, WASM)

[0.5.8.3] - 2025-12-11

Fixed

  • Dropdown Click Toggle Not Working - Fixed critical bug where clicking dropdown trigger did not expand the menu

    • Root cause: ClientDispatcher.parseUiAction() was using js("JSON.parse(jsonStr)") which doesn't properly capture the Kotlin variable jsonStr in the JavaScript context
    • Solution: Changed to use kotlin.js.JSON.parse<dynamic>(jsonStr) which correctly parses the JSON string
    • This affected all data-action based toggle interactions (Dropdown, HamburgerMenu, etc.)
  • DropdownItem Link Navigation - Fixed DropdownItem components with href not navigating

    • Root cause: DropdownItem was using renderBlock() which renders a <div> element - adding an href attribute to a <div> doesn't create a working link
    • Solution: Now uses renderEnhancedLink() for items with href, which properly renders an <a> tag
    • Click-only items (with onClick but no href) still use renderBlock() as before

[0.5.8.2] - 2025-12-11

Changed

  • Dropdown UiAction Refactor - Refactored Dropdown component to use UiAction system instead of inline JavaScript
    • Replaced inline onClick JavaScript handlers with data-action attributes containing serialized UiAction.ToggleVisibility
    • Uses remember {} for stable menu ID generation across recompositions
    • Follows the same pattern as HamburgerMenu for consistency
    • Applied across all platform implementations (JVM, JS, WASM)

[0.5.8.1] - 2025-12-11

Fixed

  • Dropdown Hover Gap Bug - Fixed critical issue where hover-triggered dropdowns would close when moving mouse from trigger to menu
    • Root cause: onMouseEnter/onMouseLeave events were attached separately to trigger and menu elements, creating a gap where neither element received hover when transitioning between them
    • Solution: Moved hover events to the container element that wraps both trigger and menu, ensuring the dropdown stays open while hovering anywhere within the component
    • Fixed across all platform implementations (JVM, JS, WASM)

[0.5.8.0] - 2025-12-02

Added

  • Advanced UI Components - New components for complex data visualization and editing

    • CodeEditor - Syntax-highlighted code editing component
    • SplitPane - Resizable split layout (horizontal/vertical)
    • Chart - Data visualization component (bar, line, pie charts)
    • MarkdownEditor - Markdown editor with live preview support
  • Authentication Components - Built-in security UI

    • LoginComponent - Pre-built login form with authentication service integration
    • SecuredComponent - Wrapper for content that requires specific roles/permissions

Fixed

  • JS Platform Renderer Fixes - Resolved critical issues in DOM rendering and style application
    • Fixed renderCodeEditor to explicitly set textContent on textarea elements, ensuring correct value serialization in tests and hydration
    • Fixed applyModifier to use kebab-case for CSS properties in style attributes (e.g., flex-direction instead of flexDirection), ensuring styles are correctly applied by the browser
    • Resolved AdvancedComponentsJsTest failures (testCodeEditorJS and testSplitPaneJS)

[0.5.7.0] - 2025-12-02

Added

  • Visual Builder Foundation - Core infrastructure for drag-and-drop UI builders

    • ComponentRegistry - Thread-safe singleton for registering/retrieving component factories with fallback support
    • RenderLoop - Reactive render loop with batched updates and frame-rate limiting
    • JsonBlock - Data class for JSON-based component tree representation
    • FallbackComponent - Visual error component for missing registrations (red dashed border)
  • Theme Variable Injection ("Vibe" System) - Instant theme switching without re-renders

    • ThemeVariableInjector - Platform-specific CSS variable injection into :root
    • ThemeVariableGenerator - Converts ThemeConfig to CSS custom properties
    • ApplyThemeVariables / ApplyCurrentThemeVariables - Composables for reactive theme application
    • Automatic kebab-case conversion for CSS variable names
  • CSS Injection System - Dynamic stylesheet management

    • CssInjector - Platform-specific <style> tag injection with sanitization
    • CSS sanitization to prevent injection attacks
    • Support for updating existing style blocks by ID
  • Video/Audio Components - Type-safe media elements

    • Video component with autoplay/muted browser policy enforcement
    • Audio component with standard controls
    • VideoSource for multiple format fallbacks
    • Automatic MIME type inference from file extensions
  • Media Modifiers - Scroll-based media control

    • Modifier.pauseOnScroll() - Pauses media when element leaves viewport (IntersectionObserver)
    • Modifier.lazyLoad() - Deferred loading near viewport
    • Modifier.nativeLazyLoad() - Browser native loading="lazy"
    • Modifier.aspectRatio() / Modifier.responsiveMedia() - Responsive media helpers
  • Selection Manager - Component selection state for visual editors

    • SelectionManager singleton with reactive selectedId state
    • select(), deselect(), hasSelection(), toggle() methods
    • onSelectionChange callback for external listeners
  • History Manager (Undo/Redo) - Edit history with state snapshots

    • Generic HistoryManager<T> class for any state type
    • JsonTreeHistoryManager singleton for JSON component trees
    • push(), undo(), redo(), canUndo(), canRedo() methods
    • Configurable max history size with automatic pruning
  • Property Bridge - Live property updates between editor and renderer

    • PropertyBridge for reactive property synchronization
    • updateProperty(), getProperty(), getAllProperties() methods
    • Tree manipulation: addChild(), removeComponent(), moveComponent()
    • onPropertyChange callback for external listeners
  • Edit Mode Manager - Toggle between edit and preview modes

    • EditModeManager singleton with reactive isEditMode state
    • enterEditMode(), exitEditMode(), toggleEditMode() methods
    • onModeChange callback for external listeners
  • Collision Detector - Hit testing for drag-and-drop

    • CollisionDetector singleton for drop zone management
    • registerDropZone(), unregisterDropZone(), findDropTarget() methods
    • Bounds data class for rectangular regions
    • Z-index priority for overlapping zones
  • Site Bundler - Static site packaging

    • SiteBundler expect/actual for platform-specific zip creation
    • bundleSite(html, css) - Bundle HTML + CSS into archive
    • bundleSite(files) - Bundle arbitrary file map

Tests

  • Added 12 new test files covering all new features (82+ test cases)
    • RegistryTest - ComponentRegistry register/retrieve/fallback
    • RenderTreeTest - JsonBlock structure and nesting
    • ThemeInjectionTest - ThemeVariableGenerator CSS variable creation
    • StyleInjectionTest - CssInjector sanitization
    • MediaAttributeTest - Video autoplay/muted browser policy enforcement
    • BundleTest - SiteBundler zip archive creation
    • SelectionTest - SelectionManager state management
    • UndoTest - HistoryManager/HistoryStack undo/redo
    • ModeTest - EditModeManager mode toggle
    • PropertyUpdateTest - PropertyBridge property manipulation
    • CollisionTest - CollisionDetector hit testing
    • VideoScrollTest - MediaModifiers pauseOnScroll attributes

[0.5.6.1] - 2025-11-29

Fixed

  • summon-bootloader.js 404 Error - Added missing route for /summon-bootloader.js in summonStaticAssets()
    • The external bootloader introduced in v0.5.6.0 was not being served because the route was missing
    • Added get("/summon-bootloader.js") route at root level
    • Added get("/summon-bootloader.js") route under /summon-assets/ prefix for consistency
    • Bootloader now served with same caching (1 year, immutable) and gzip compression as other assets

Technical Details

The summonStaticAssets() Ktor extension function was not updated when the external bootloader architecture was introduced. The HTML referenced /summon-bootloader.js but the route to serve it was missing, causing 404 errors and breaking SSR hydration.

[0.5.6.0] - 2025-11-29

Fixed

  • Critical TBT Fix: External Bootloader Architecture - Moved inline bootloader to external defer script

    • Replaced ~390 lines of inline synchronous JavaScript with 1 line external script loader
    • Created /summon-bootloader.js external file (loaded with defer attribute)
    • Inline script no longer blocks main thread during HTML parsing
  • Bundle Size Reduction - Reduced JS hydration bundle by 46%

    • Before: 279KB (summon-hydration.js: 164KB + kotlinx-libs: 115KB)
    • After: 150KB (summon-hydration.js: 125KB + kotlinx-libs: 24KB)
    • Replaced kotlinx-serialization in ClientDispatcher with native JS JSON parsing
    • Better tree-shaking now that serialization is not called in hot path

Technical Details

Root cause of persistent TBT was identified:

  1. Inline script blocking - ~390 lines of JavaScript running synchronously during HTML parse
  2. Large bundle size - 279KB of JS must be parsed before interactive
  3. Previous micro-optimizations (console.log, getBoundingClientRect) had negligible impact

Solution:

  • External bootloader with defer loads in parallel, executes after DOM ready
  • Native JSON.parse() for UiAction instead of kotlinx-serialization reflection
  • Bundle size nearly halved through better tree-shaking

Expected TBT Impact

Change Impact
External defer bootloader No inline blocking
46% smaller bundle ~46% faster parse time
Expected TBT < 300ms (from 31,000ms+)

[0.5.5.3] - 2025-11-29

Fixed

  • TBT Phase 2: Remaining Blocking Patterns - Removed additional blocking operations discovered in real-world testing
    • Removed deprecated hydrateClickHandlers() and hydrateFormInputs() calls that were still executing despite GlobalEventListener handling events
    • Removed getBoundingClientRect() layout-forcing call at initialization (always load hydration immediately now)
    • Removed WebGL context creation for feature detection (not needed for hydration decisions)
    • Replaced getComputedStyle() in ClientDispatcher with aria-expanded attribute check to avoid forced style recalculation
    • Removed all console.log/console.group calls from inline bootloader script for production
    • Removed enableStaticFormFallbacks() layout thrashing (querySelectorAll loops with style mutations)

Technical Details

These changes target real-world TBT issues that weren't captured in local Lighthouse tests:

  • Local tests use simple pages with minimal DOM
  • Deployed site (dev.yousef.codes) has complex DOM where blocking patterns compound
  • Each blocking operation adds latency: layout thrashing, style recalculations, console I/O
  • Total expected TBT reduction: 15-28 seconds on mobile

[0.5.5.2] - 2025-11-29

Fixed

  • Critical TBT (Total Blocking Time) Optimization - Fixed catastrophic main-thread blocking causing 31,000ms+ TBT on mobile
    • Removed 3-second artificial lazy loading timeout (reduced to 100ms)
    • Added production logging mode - SummonLogger now only logs errors in production (non-localhost)
    • Removed debug DOM queries that ran querySelectorAll("button") and serialized outerHTML on every page load
    • Simplified WASM detection to avoid synchronous WebAssembly.Module/Instance creation that blocked main thread

Added

  • Local Performance Testing - scripts/lighthouse-test.sh for PageSpeed Insights-equivalent local testing
    • Uses same throttling as PageSpeed Insights (4x CPU slowdown, Slow 4G for mobile)
    • Enforces thresholds: TBT <300ms, Performance >80% mobile / >90% desktop
    • Generates HTML reports to lighthouse-reports/
    • Exit code 1 on failure for CI/pre-commit integration

Performance Results

Metric Before After
Mobile TBT 31,210ms 0ms
Mobile Performance 47% 100%
Desktop TBT 16,380ms 0ms
Desktop Performance 59% 100%

[0.5.5.0] - 2025-11-28

Added

  • Hydration Performance Optimization - Non-blocking hydration system targeting Lighthouse performance improvements (Mobile: 45→70+, Desktop: 59→85+)

    • HydrationScheduler: Non-blocking task scheduler using requestIdleCallback with requestAnimationFrame fallback

      • 50ms max blocking time per task batch (FR-001)
      • Priority-aware processing (CRITICAL → VISIBLE → NEAR → DEFERRED)
      • Scroll-aware yielding to maintain 60fps during scrolling
      • Graceful error isolation - task failures don't affect other tasks (FR-007)
      • Platform implementations for both JS and WASM
    • DOMBatcher: Read-write phase separation to prevent layout thrashing

      • Batches DOM read operations before write operations
      • RAF-based scheduling for optimal browser timing
      • syncMode for test compatibility with immediate execution
    • EventBuffer: Captures user events during hydration for replay

      • Buffers click, input, submit, change, focus, blur events
      • Replays events after component hydration completes
      • Prevents dropped clicks during hydration (SC-008)
    • PriorityHydrationQueue: Viewport-aware component prioritization

      • Four priority levels: CRITICAL, VISIBLE, NEAR (200px threshold), DEFERRED
      • Auto-detection of priority based on viewport position
      • Dynamic priority promotion when elements enter viewport
      • Scroll-based visibility detection
    • HydrationPriority enum: Developer-assignable hydration priorities

      • data-hydration-priority attribute for SSR output
      • Modifier.hydrationPriority(), .hydrationCritical(), .hydrationDeferred() extensions
  • GlobalEventListener Enhancements

    • markElementHydrated() for event replay triggering
    • Event buffering integration for non-hydrated components
  • ClientDispatcher Enhancements

    • DOMBatcher integration for batched DOM operations
    • syncMode flag for test compatibility

Changed

  • SummonHydrationClient: Uses HydrationScheduler for non-blocking startup
  • HydrationManagerWasm: Uses HydrationScheduler for async component hydration
  • Test Infrastructure: Added syncMode to HydrationScheduler and ClientDispatcher for synchronous test execution

Technical Details

These changes implement the hydration optimization spec (002-hydration-optimization):

  • Non-blocking Hydration: Uses browser idle time via requestIdleCallback
  • DOM Batching: Prevents layout thrashing with read-write phase separation
  • Event Preservation: Captures and replays user events during hydration
  • Priority Scheduling: Critical components hydrate first, deferred components during idle

Target metrics:

  • TBT (Total Blocking Time): <300ms (from ~27,000ms)
  • TTI (Time to Interactive): <3.5s
  • Main Thread Work: <4s total
  • Frame Rate During Scroll: 50+ fps
  • Dropped Clicks: 0%

[0.5.4.2] - 2025-11-28

Added

  • Performance Optimization: Webpack Configuration

    • Added terser-optimization.js - TerserPlugin configuration for aggressive JavaScript minification with dead code elimination, console removal, and variable mangling
    • Added code-splitting.js - Vendor code separation into kotlin-stdlib, kotlinx-libs, and vendors chunks for better caching
    • Added cache-busting.js - Content hash filenames ([name].[contenthash:8].bundle.js) for optimal browser caching
  • Performance Optimization: WASM Bundle Size Reduction

    • Enabled Dead Code Elimination (DCE) for WASM builds by removing -Xir-dce=false flag
    • WASM binary reduced from 778KB to 261KB (66% reduction)
    • WASM wrapper reduced from 624KB to 204KB (67% reduction)
  • Cache Headers for Static Assets

    • New CacheHeaders.kt utility in codes.yousef.summon.ssr package
    • IMMUTABLE_ASSET - 1-year cache with immutable directive for hashed files
    • VERSIONED_ASSET - 1-day cache for stable-named assets
    • forAsset(name) - Automatic cache strategy selection based on filename pattern
    • Updated Ktor, Spring Boot, and Quarkus integrations to include Cache-Control headers
  • Image Component Performance Enhancements

    • Added FetchPriority enum (HIGH, LOW, AUTO) - hints browser about image fetch priority
    • Added ImageDecoding enum (SYNC, ASYNC, AUTO) - hints browser about image decoding strategy
    • Added ImageSource data class for Picture element sources
    • New Image parameters: srcset, sizes, fetchPriority, decoding
    • New Picture composable for modern image format support (WebP, AVIF)
    • New ResponsiveImage composable for automatic srcset generation

Changed

  • Build Configuration
    • Added terser-webpack-plugin NPM dev dependency
    • JS bundle now split into runtime (924B), kotlinx-libs (112KB), main (146KB)
    • Production builds now disable source maps for smaller bundles

Technical Details

These changes address Lighthouse performance audit findings:

  • Bundle Optimization: Reduces initial JavaScript parse time and improves FCP/LCP
  • Code Splitting: Enables better caching - vendor code changes rarely vs app code
  • Cache Headers: Enables browser caching for returning visitors (80%+ cache hit rate target)
  • Image Optimization: Supports responsive images, lazy loading, and modern formats

[0.5.4.1] - 2025-11-28

Fixed

  • Link Component Content Rendering: Fixed Link component to properly render content inside the <a> tag. Previously, content() was called separately after renderEnhancedLink closed the anchor, causing link content (text, icons, etc.) to appear outside the clickable link area. Now Link passes its content lambda directly to the renderer for correct HTML structure.

Changed

  • Removed fallbackText Parameter: The fallbackText parameter has been removed from Link, AnchorLink, ExternalLink, and ButtonLink functions as it is no longer needed. Use the content lambda to render any content inside links.

[0.5.4.0] - 2025-11-27

Added

  • renderEnhancedLink with Content: Added new overload of renderEnhancedLink that accepts a content: @Composable () -> Unit parameter, allowing composable content to be rendered inside anchor tags. This enables creating rich links with icons, styled text, or any other composable content:
    renderer.renderEnhancedLink(
        href = "/about",
        target = "_blank",
        title = "About Us",
        modifier = Modifier().padding(8.px)
    ) {
        Text("Learn More")
        Icon(name = "arrow-right")
    }
    Implemented across all platforms (JVM, JS, WASM).

[0.5.3.0] - 2025-11-27

Added

  • HamburgerMenu menuContainerModifier: Added menuContainerModifier parameter to HamburgerMenu component, allowing native Summon styling of the dropdown container without requiring GlobalStyle CSS. Supports positioning, background, border, and other styles directly via the Modifier API.

  • SSR i18n Support: Added lang and dir parameters to SSR hydration rendering:

    • renderComposableRootWithHydration(lang, dir, composable) in JvmPlatformRenderer
    • respondSummonHydrated(status, lang, dir, content) in KtorRenderer
    • respondSummonPage(status, lang, dir, content) in KtorRenderer
    • HTML documents now render with proper <html lang="..." dir="..."> attributes for RTL language support

Changed

  • Maven Publishing: Removed legacy io.github.codeyousef group ID publishing. All artifacts are now published exclusively under codes.yousef. If you're still using the legacy group ID, update your dependencies:
    // Old (no longer published)
    implementation("io.github.codeyousef:summon:x.x.x")
    
    // New (use this)
    implementation("codes.yousef:summon:0.5.4.2")

[0.5.2.9] - 2025-11-25

Fixed

  • GlobalEventListener Test Isolation: Fixed GlobalEventListener to properly track and remove event listeners on reset(). Previously, calling reset() only set initialized = false but didn't remove the event listeners that were already added to the document. This caused duplicate event handlers when tests called reset() + init() between tests, which would toggle the menu twice (open then close), leaving it in the hidden state.

  • GlobalEventListener Initialization Guard: Added a guard to prevent multiple initializations of GlobalEventListener.init(). Now subsequent calls are safely ignored if already initialized.

Added

  • Comprehensive HamburgerMenu Click Tests: Added tests that verify the full click-to-toggle flow through GlobalEventListener event delegation, not just direct ClientDispatcher.dispatch() calls. These tests catch issues with event listener registration and event bubbling.

[0.5.2.6] - 2025-11-25

Fixed

  • HamburgerMenu ID Counter Race Condition: Fixed critical bug where the global ID counter would get out of sync during SSR when multiple HamburgerMenu components are rendered (e.g., in ResponsiveLayout for different breakpoints). The counter was being incremented each time remember was evaluated, but without a composer context during SSR, remember doesn't memoize - it just runs the calculation each time. Changed ID generation to use random 6-digit numbers (hamburger-menu-NNNNNN) to ensure unique IDs without relying on a global counter that could drift.

[0.5.2.5] - 2025-11-25

Added

  • HamburgerMenu Comprehensive Test Suite: Added 14 tests across all platforms to verify HamburgerMenu functionality without publishing:
    • 8 JVM SSR tests verifying ID consistency, accessibility attributes, visibility states, and JSON serialization
    • 4 JS integration tests verifying DOM structure, ID matching, and data-action parsing
    • 2 common tests verifying UiAction serialization roundtrip

[0.5.2.4] - 2025-11-25

Fixed

  • HamburgerMenu ID Mismatch: Fixed critical bug where the hamburger button's data-action.targetId and aria-controls would have a different ID than the menu content's id attribute. The issue was caused by the ID counter being incremented inside a remember block, which could be evaluated multiple times during SSR when no composer context exists. Now the ID is generated once at the start of the composable function.

  • HamburgerMenu Serialization: Fixed UiAction.ToggleVisibility serialization to include the polymorphic type discriminator ("type":"toggle") required by ClientDispatcher for deserialization.

[0.5.2.3] - 2025-11-25

Fixed

  • HamburgerMenu Console Fix: Added missing warn() method to Console external interface and added missing import codes.yousef.summon.js.console to ClientDispatcher.kt. This fixes runtime errors when toggling hamburger menu visibility.

[0.5.2.2] - 2025-11-25

Fixed

  • HamburgerMenu Client-Side Toggle: Fixed GlobalEventListener to handle elements with data-action attribute directly, not just via data-sid. This fixes the HamburgerMenu component which uses data-action for client-side ToggleVisibility actions.

[0.5.2.1] - 2025-11-25

Fixed

  • WASM Hashed File Serving: Fixed summonStaticAssets() to serve hashed WASM files (e.g., 5879e3a6a3625f8b6452.wasm) that the WASM loader references
  • Build Process: Fixed copyHydrationBundles task to preserve original hashed WASM filename in addition to the stable summon-hydration.wasm name

Removed

  • Removed Invalid Prefetch: Removed prefetch of non-existent /static/summon-core.js and /static/vendors.js files that were causing 404 errors
  • Removed Invalid Routes: Removed /static/summon-core.js and /static/vendors.js routes from all integrations (these files don't exist)

[0.5.2.0] - 2025-11-25

Added

  • Zero-Config Hydration Support: Implemented all requirements from SUMMON_LIBRARY_REQUIREMENTS.md for a truly "drop-in" hydration experience.

  • Ktor Integration (KtorRenderer.kt):

    • Route.summonStaticAssets() - Serves JS/WASM hydration files directly from the library JAR
    • Route.summonCallbackHandler() - Handles POST /summon/callback/{callbackId} requests automatically
    • ApplicationCall.respondSummonPage() - Convenience alias for respondSummonHydrated
  • Quarkus/Vert.x Integration (QuarkusRenderer.kt):

    • Router.summonStaticAssets() - Serves hydration assets via Vert.x Router
    • Router.summonCallbackHandler() - Handles callback execution via Vert.x
    • RoutingContext.respondSummonPage() - Convenience alias for respondSummonHydrated
  • Spring Boot Integration (SpringBootRenderer.kt):

    • handleSummonAsset(request, response) - For use in Spring controllers to serve hydration assets
    • getSummonAsset(name) - Returns ResponseEntity for hydration assets
    • handleCallback(callbackId) - Handles callback execution and returns appropriate ResponseEntity

Changed

  • WASM MIME Type: All integrations now properly serve .wasm files with Content-Type: application/wasm
  • Hydration Data Injection: respondSummonHydrated automatically injects the <script id="summon-hydration-data"> tag

Documentation

  • Updated SUMMON_LIBRARY_REQUIREMENTS.md to reflect all implemented requirements

[0.5.1.0] - 2025-11-19

Fixed

  • WASM Runtime Error: Fixed process.release is undefined error by providing proper process mock in Webpack configuration.

[0.4.9.2] - 2025-11-19

Fixed

  • WASM Hydration Issues: Implemented hydrateComposableRoot with fallback logic to resolve hydration problems in WebAssembly.
  • JavaScript File Removal: Eliminated the need for manual JavaScript files (initialize-summon.js, JsEnvironmentSetup.js) by fully utilizing Kotlin/JS capabilities.
  • PlatformRendererWasm.kt Compilation Errors: Fixed various compilation errors in the WebAssembly-specific platform renderer.
  • Build Configuration: Updated to skip browser tests in headless environments, preventing unnecessary test failures in CI/CD pipelines.
  • Generated Artifacts Cleanup: Removed unnecessary generated artifacts from source control to reduce clutter and potential confusion.

[0.4.8.9] - 2025-11-18

Added

  • First-class Hydration Bundles in Summon Core
    • Summon now builds and embeds all hydration bundles directly into the JVM artifact so consuming apps don’t need custom asset wiring.
    • Assets are emitted under stable, loader-friendly URLs:
      • /summon-hydration.js
      • /summon-hydration.wasm
      • /summon-hydration.wasm.js
      • /static/summon-core.js
      • /static/vendors.js
    • The new copyHydrationBundles Gradle task runs before jvmProcessResources to ensure bundles are present in resources/static for all JVM integrations.

Fixed

  • WASM Hydration Asset Mismatch: Ensured the Kotlin/Wasm browser build emits the hydration wrapper with a stable file name (summon-hydration.wasm.js) and the .wasm binary is renamed to summon-hydration.wasm inside the JAR.
  • Consuming App 404s on Hydration Assets: Eliminated the need for downstream projects to manually copy or rename hydration bundles; any Summon-based Ktor/Spring/Quarkus server that serves classpath static resources will now satisfy the loader’s 5 URLs out of the box.

[0.4.8.8] - 2025-11-17 (internal reference, superseded by 0.4.8.9)

Fixed

  • Critical SSR Callback ID Mismatch: Fixed bug where callback IDs in server-rendered HTML didn't match the callback IDs in hydration data
    • Symptom: Button with data-onclick-id="cb-1-6063" in HTML, but hydration data contained cb-2-1844, causing clicks to fail
    • Root Cause: Global callbackCounter was shared across all render contexts, incrementing whenever ANY callback was registered anywhere
    • Solution: Implemented per-context callback counters that reset to 0 when beginRender() is called for each SSR request
    • Impact: onClick handlers, form submissions, and all interactive features now work correctly in SSR applications
    • No breaking changes - pure bug fix

[0.4.8.7] - 2025-11-17

Fixed

  • SSR Hydration Root Container Detection: Fixed critical issue where the hydration client was defaulting to document.body instead of locating the actual SSR root container emitted by respondSummonHydrated. The hydration script now correctly finds and uses the server-rendered root element marked with data-summon-root attribute.

  • Correct Hydration Mode: Switched the top-level client boot process from renderComposable (render mode) to hydrate(...) (hydration mode). This ensures event listeners are properly attached to the existing server-rendered DOM elements instead of creating a parallel tree, which was causing onClick handlers to fail silently.

  • Stable Callback ID Preservation: Ensured callback IDs emitted during server-side rendering are preserved and correctly matched during the hydration process. Button onClick events and other interactive features now function correctly immediately after page load without requiring page refresh or additional user interaction.

  • Ktor SSR Integration: Enhanced respondSummonHydrated to emit a stable root container ID with proper data-summon-root marker attribute. The hydration bundle is now included with preload hints for improved performance and reliability in production SSR deployments.

  • Kotlin Compiler Warnings: Added -Xexpect-actual-classes compiler flag to suppress Beta warnings for expect/actual classes across all targets. This eliminates hundreds of compilation warnings while maintaining type safety and multiplatform functionality.

  • Build Configuration: Added proper gradle.properties generation to all CLI-generated projects with adequate memory settings (2GB heap, 768MB metaspace) to prevent OOM errors during builds on resource-constrained environments.

  • JS Test Compilation Order: Fixed race condition where JS test compilation could start before main compilation completed, causing NoSuchFileException for missing linkdata directories. Added explicit task dependencies to ensure proper build order.

Changed

  • Updated all documentation, examples, CLI templates, and test fixtures to version 0.4.8.7
  • Improved hydration client logging to aid in debugging SSR integration issues
  • CLI-generated projects now include production-ready gradle.properties with optimized JVM settings
  • All generated build.gradle.kts files now include compiler flags to suppress known Beta API warnings

Technical Details

This release resolves multiple production issues:

  1. SSR Hydration: The "Button onClick doesn't work after SSR hydration" issue is fully resolved with proper root container detection and hydration mode
  2. Build Reliability: Eliminates compilation warnings and memory errors that affected developer experience
  3. CI/CD Ready: Generated projects now build cleanly in constrained environments (Docker, CI runners)

[0.4.8.1] - 2025-01-16

Fixed

  • Critical SSR Callback Hydration Fix: Fixed callback ID mismatch between server-rendered HTML and client-side hydration data in coroutine-based frameworks (Ktor, Spring WebFlux). The issue was caused by thread context switching during request handling, causing callbacks to be registered on one thread but collected from another. Implemented CallbackContextElement coroutine context element to maintain stable callback context across thread switches, ensuring onClick handlers and other interactive features hydrate correctly.

Changed

  • Ktor Integration Enhancement: Updated respondSummonHydrated to use coroutine-local callback context, ensuring reliable SSR hydration in production environments with thread pools and coroutine dispatchers.

[0.4.8.7] - 2025-11-13

🚨 IMPORTANT: Group ID Migration

Summon is now published under codes.yousef (new) in addition to io.github.codeyousef (legacy)

  • Action Required: Update your dependencies from io.github.codeyousef to codes.yousef
  • Timeline: Version 0.5.0.0 will be the LAST release under io.github.codeyousef
  • After 0.5.0.0: All releases will ONLY be published to codes.yousef
  • Migration Guide: See GROUP_ID_MIGRATION.md for complete details

Update your dependencies:

// Old (deprecated)
implementation("io.github.codeyousef:summon:0.4.8.7")

// New (use this!)
implementation("codes.yousef:summon:0.4.8.7")

Both group IDs are published for versions 0.4.8.7 through 0.5.0.0 for backward compatibility.

Added

  • Dynamic CSS Injection System: Introduced StyleInjector (JS) and StyleInjectorWasm (WASM) for automatic generation of scoped CSS rules for pseudo-selectors and media queries that can't be applied as inline styles.
  • Portal/Teleport Component: Implemented PortalManager for JS platform enabling DOM teleportation for modals, tooltips, and overlays with automatic lifecycle management.
  • Enhanced Pseudo-Selector Support: Added comprehensive pseudo-selector modifiers including focus(), active(), focusWithin(), firstChild(), lastChild(), nthChild(), onlyChild(), visited(), disabledStyles(), and checkedStyles().
  • Media Query System: Introduced type-safe MediaQuery sealed class with support for viewport queries (MinWidth, MaxWidth, MinHeight, MaxHeight), orientation (Portrait, Landscape), user preferences (PrefersDarkScheme, PrefersLightScheme, PrefersReducedMotion), device capabilities (CanHover, NoHover, FinePointer, CoarsePointer), and logical operators (And, Or, Custom).
  • Predefined Breakpoints: Added Breakpoints object with industry-standard responsive breakpoints (XS: 320px, SM: 640px, MD: 768px, LG: 1024px, XL: 1280px, XXL: 1536px).
  • CSS Variable Helpers: Introduced cssVar() modifier functions for defining and referencing CSS custom properties with optional fallback values.
  • Scroll Utilities: Added scrollBehavior(), scrollSnapType(), scrollSnapAlign(), scrollMargin(), and scrollPadding() modifier functions, plus onScroll() event handler.
  • Async Form Validation: Implemented AsyncValidator interface and enhanced FormValidationState with validateFieldAsync() for server-side validation, along with ServerValidationRequest and ServerValidationResponse data classes.
  • Platform-Specific Dropdown: Converted Dropdown component to expect/actual pattern with separate implementations for JS (DOM APIs), JVM (SSR-compatible), and WASM platforms, removing inline JavaScript from common code.
  • Additional Mouse Events: Added onMouseMove() event handler to pointer event modifiers.

Enhanced

  • PlatformRenderer Integration: Updated JS PlatformRenderer to automatically detect and process pseudo-selector and media query data attributes, integrate PortalManager for portal teleportation, and handle automatic style cleanup.
  • Form Validation: Enhanced existing form validation system with async support, form-level state management, and comprehensive error tracking.

Fixed

  • TextArea SSR Artifacts: Removed visible HTML comment artifacts (<!-- onValueChange handler needed (JS) -->) from server-side rendered output in JvmPlatformRenderer for TextField, TextArea, DatePicker, Slider, RangeSlider, and TimePicker components.

Documentation

  • Created comprehensive API reference documentation (2,400+ lines) covering all new features with 100+ practical examples
  • Added StyleInjector API reference with implementation details and performance considerations
  • Added PortalManager API reference with common use cases and lifecycle management
  • Added Media Query Modifiers API reference with responsive design patterns
  • Added Pseudo-Selector Modifiers API reference with interactive state examples
  • Added Async Form Validation API reference with coroutine integration patterns
  • Created complete API Reference Index with platform support matrix
  • Added Quick Reference Guide with practical examples for all features
  • Added Future Considerations Complete document with architecture decisions
  • Added Release Notes with migration guide (100% backward compatible)

Technical Details

  • Zero breaking changes - all enhancements are additive
  • Full Kotlin implementations where possible, KotlinJS interop where needed
  • Platform-specific optimizations for JS, JVM, and WASM
  • Memory-safe lifecycle management throughout
  • Automatic cleanup prevents memory leaks
  • Type-safe APIs with comprehensive error handling

[0.4.7.0]

Added

  • Introduced code.yousef.summon.components.forms.* with an SSR-friendly Form, text inputs, text areas, selects, checkboxes, and semantic submit/reset buttons that reuse Summon spacing/colors and emit proper label/description/error relationships without RawHtml.
  • Expanded PlatformRenderer (and its JVM/JS/WASM implementations plus the Quarkus wrapper) with native element hooks (renderNativeInput/Textarea/Select/Button) and a NativeSelectOption model so server-managed forms can render pure HTML fields while still flowing through the modifier system.
  • Added JVM snapshot coverage (FormComponentsJvmTest) to prove the new form primitives serialize hidden inputs, field defaults, and submit buttons exactly as expected, alongside updated MockPlatformRenderer tracking for the new native APIs.
  • Introduced MarkdownEditor, a composable pairing Summon's multiline TextArea with an optional live Markdown preview so content teams can author and instantly validate markdown inside admin experiences.

[0.4.6.0]

Added

  • Link exposes a navigationMode flag (Native vs Client) so hash/section links can emit harmless placeholder href values while keeping their real targets in data-href for Summon's hydration scripts.

Fixed

  • Server-side rendering no longer injects the raw href as fallback content when custom link children are provided; an optional fallbackText parameter keeps the previous behavior for teams that still need it.

[0.4.5.1]

Added

  • cssMin/cssMax/cssClamp accept the existing unit extensions (e.g., 22.px, 4.vw), and typography helpers such as fontSize include string overloads so responsive math can skip .style(...).

[0.4.5.0]

Added

  • Modifier.backgroundBlendModes(...) (plus docs + tests) so aurora stacks can pair gradient layers with mix/blend sequences without stringly-typed CSS.
  • TextDecoration and WhiteSpace enums, along with overloads that accept one or many values, keeping typography modifiers fully type-safe.
  • Modifier.centerHorizontally() wraps the common margin: <vertical> auto pattern for centering fixed-width blocks.
  • Added cssMin, cssMax, and cssClamp helpers so responsive sizes and paddings can use the native CSS functions without embedding raw strings.
  • backgroundLayers now supports conicGradient { ... }, backgroundClipText() handles the WebKit prefix automatically, and Modifier.filter(FilterFunction, value) overloads let you express single filters without tuple boilerplate.
  • ButtonType enum + Modifier.buttonType(...) remove the need to call .attribute("type", ...) when wiring CTA buttons.

Documentation

  • Styling and API reference guides now document the new blend-mode helper, the anchor/canvas/script primitives, and the enum-based text helpers so designers can copy working snippets straight into Summon projects.

[0.4.4.0]

Added

  • Canonical AnchorLink/enhanced ButtonLink primitives plus new dataHref, id, and dataAttributes parameters on Link, ensuring hero CTAs preserve their original labels and analytics hooks without ad-hoc helpers.
  • Low-level HTML helpers—Canvas, ScriptTag, and a dual-mode RawHtml DSL—landed in code.yousef.summon.components.foundation, so canvas-driven backgrounds and inline scripts no longer require kotlinx-html.
  • Modifier.dataAttributes(...) and intrinsic Modifier.pointerEvents(...) overloads let callers declare multiple data-* hooks or pointer behaviors in a single, type-safe call.
  • Renderer contracts on all platforms (JVM/JS/WASM) now expose renderCanvas and renderScriptTag, plus the test harness tracks those calls to keep multiplatform parity honest.

Changed

  • Button accepts a nullable onClick and propagates declarative data attributes, which unblocks hydration-friendly “Copy” chips that rely on data-copy/data-href instead of no-op lambdas.
  • MockPlatformRenderer, link/button tests, and rich-text specs were expanded to lock in the new attributes, preventing regressions as the primitives evolve.

[0.4.3.0]

Added

  • Introduced type-safe enums for PointerEvents, Visibility, and FontStyle, along with overloaded modifier extensions (pointerEvents, visibility, fontStyle) so callers get autocompletion instead of memorizing strings.
  • Expanded the pointer-event helpers (disablePointerEvents, enablePointerEvents) and text modifiers to consume the new enums, plus test coverage to lock in the behavior.
  • Gradient-heavy backgrounds now have a dedicated DSL: backgroundLayers { radialGradient { … } } plus layered filter builders, pseudo-element hooks (before/after), and mix-blend helpers so aurora/film-grain mocks can be expressed without raw CSS strings.
  • Layout utilities gained aspectRatio, inset, and positionInset shorthands matching the single-file portfolio reference implementation.
  • Button hydration fixes are fully baked into the CLI templates and renderers, guaranteeing every generated project ships with live click handlers (no follow-up scripts required).
  • Styling docs and the modifier API reference now cover the new gradient/filter/pseudo-element APIs with practical code samples to keep design teams in sync.

Fixed

  • Modifier.flexDirection (and the DSL variants) now accept the existing FlexDirection enum, eliminating the need to pass raw CSS strings for flex layouts.
  • CLI-generated Ktor/Spring/Quarkus servers now expose /summon-hydration.* assets and a /summon/callback/{id} bridge backed by a persistent CallbackRegistry, so every button rendered by the templates ships with a functioning onClick handler out of the box.
  • The long-running “non-functioning buttons” regression is closed: renderer-side callback wiring, hydration client POSTs, and CLI assets were aligned and validated across JVM/JS/WASM.

[0.4.3.0]

Added

  • CLI integration coverage: New smoke tests scaffold standalone, Spring Boot, Ktor, and Quarkus projects and run their Gradle builds, providing automated guardrails for template regressions.
  • Quarkus unit check: Generated Quarkus backends ship with a lightweight unitTest task so developers can verify the backend without triggering the heavier dev-mode code generation.

Changed

  • Unified CLI flow: The Summon CLI now exposes a single init command with prompts for standalone vs. full-stack stacks and backend selection (Spring, Ktor, Quarkus). --mode/--backend flags support non-interactive environments.
  • Documentation refresh: README quick starts, backend guides, and CLI help output all reference the new workflow and updated dependency coordinates.

Fixed

  • Quarkus scaffolding: Eliminated the java plugin conflict by generating separate app/ and backend/ modules and wiring backend-specific Gradle aliases, restoring out-of-the-box builds for Quarkus projects.

[0.4.2.1]

Fixed

  • Brand Assets: Updated README, CLI docs, and code examples to reference the new assets/logo.png image so the Summon logo renders consistently across the project.

[0.4.2.0]

Added

  • Focused Styling Modules: BoxShadowModifiers.kt and ClipPathModifiers.kt split the legacy StylingModifiers helpers into dedicated files, making the styling API easier to discover and maintain.

Changed

  • Package Consolidation: Moved foundational UI APIs to code.yousef.summon.components.foundation, security components to code.yousef.summon.components.auth, global styles to code.yousef.summon.components.styles, JS effects to code.yousef.summon.effects.browser, SEO helpers to code.yousef.summon.seo.routes, and the Quarkus navigation bridge to code.yousef.summon.integration.quarkus.navigationsupport. CLI templates, generators, and docs now reference the new namespaces to avoid import ambiguity.
  • Documentation Structure: API reference sections and examples were renamed to mirror the new packages (e.g. the “Foundation” and “Styling” component chapters) and include updated import snippets for authentication utilities.
  • Release Metadata: Bumped every project artifact, script, and download snippet to version 0.4.2.0 so the CLI, examples, and guides stay in sync with the latest release.

Fixed

  • Conflicting Imports: Removed duplicated package names like core, style, and navigation that previously came from different namespaces, eliminating ambiguous imports across multiplatform targets and tests.

[0.4.2.0]

Added

  • Diagnostics Stress Suite: New PlatformRendererThreadIsolationTest and HydrationConcurrencyTest verify per-thread renderer isolation and guard against callback leaks under concurrent load.

Changed

  • Renderer Lifecycle: Introduced PlatformRendererStore to back setPlatformRenderer with a thread-local store on JVM and lightweight singletons on JS/WASM. clearPlatformRenderer() is now available to explicitly drop state after each request.
  • Callback Registry IDs: Hydration callbacks now use compact cb-<context>-<counter>-<random> identifiers and automatically evict executed callbacks to reduce memory retention.
  • Documentation Refresh: Ktor, Spring Boot, and Quarkus integration guides highlight the new per-request renderer lifecycle so apps avoid cross-request state sharing.

Fixed

  • Server Request Leakage: Ktor, Spring Boot (MVC & WebFlux), and Quarkus helpers now dispose both the callback registry and renderer state after every response, eliminating cross-request hydration bleed-through.
  • Example Parity: The SSR todo application provisions a fresh renderer per request, preventing renderer reuse across Ktor worker threads.
  • Baseline Clean-ups: Common renderComposableRoot clears the callback registry on exit, and tests reset the renderer store to keep diagnostics deterministic.
  • WASM DOM Harness: Node-based WASM tests bootstrap a happy-dom environment and load Summon’s bridge script so integration tests execute against a functional DOM instead of skipping.

[0.4.0.10]

Added

  • Ktor Integration Enhancements:
    • respondSummonHydrated helper for one-line hydrated SSR responses within Ktor applications.
    • summonRouter bridge to mount Summon’s server router with hydration toggles and pluggable not-found handlers.
    • JVM end-to-end tests (KtorIntegrationE2ETest) covering hydrated responses, router navigation, and custom 404 flows.
  • Quarkus Parity:
    • QuarkusRouterBridge with Router.summonRouter and default/not-found handling for file-based pages.
    • RoutingContext.respondSummonHydrated helper plus Vert.x-powered E2E coverage (QuarkusIntegrationE2ETest).
  • Spring Boot / WebFlux Parity:
    • SpringBootRenderer.renderHydrated and renderHydratedToResponse APIs for hydrated MVC responses.
    • WebFluxRenderer.renderHydrated and WebFluxSupport.summonRouter bridge mirroring Ktor/Quarkus behaviour.
    • SpringBootRendererHydrationTest, WebFluxRendererHydrationTest, and SpringWebFluxRouterTest to validate the new helpers.

Changed

  • Dependency Refresh: Version catalog now targets Kotlin 2.2.21, Ktor 3.3.1, Quarkus 3.15.7, Spring Boot 3.5.7, core-js 3.46.0, Clikt 5.0.3, and aligned transitive libraries.
  • Template & Documentation Updates: CLI generators, templates, quickstart docs, and example READMEs reference the new toolchain (Kotlin 2.2.21, updated npm pins, refreshed Quarkus/Spring/Ktor coordinates).
  • Tooling Alignment: AtomicFU 0.29.0 and refreshed kotlinx ecosystem dependencies are sourced from the version catalog to keep targets in sync.
  • Documentation Refresh: Ktor, Quarkus, and Spring Boot integration READMEs now describe hydrated helpers, router bridges, and setup instructions.
  • Integration Overview: integration/README.md highlights the parity features across backends.

Fixed

  • WASM Test Harness: WasmDOMIntegrationTest now skips gracefully when the runtime lacks the JS DOM bridge, restoring a clean WASM test run.
  • Backend Hydration Safety: Callback registry is now scoped per execution context and every backend integration ( Ktor, Spring Boot/WebFlux, Quarkus) instantiates/clears its renderer per request, eliminating cross-request hydration leaks and data races.
  • Reactive Streaming Stability: WebFlux and Ktor streaming helpers avoid blocking event loops by using coroutine-reactor bridges and CopyOnWrite listener collections, preventing ConcurrentModificationExceptions under load.

[0.4.0.9]

🛠️ Comprehensive Summon CLI Overhaul

Release 0.4.0.9 consolidates every CLI fix and enhancement delivered across the 0.4.0.x line into a single production-ready update and resolves the remaining template issues discovered after 0.4.0.7.

Added

  • Installation Experience: Clear walkthrough in summon-cli/README.md, plus automatic creation of bin/summon and bin/summon.bat wrapper scripts during install.
  • Robust Validation: WrapperResourceValidationTest, injectWrapperJar, and validateWrapperInJar guard against broken Gradle wrappers inside the shaded JAR.
  • Extensive Testing: ProjectGeneratorTest now exercises all templates, verifying version detection, Modifier API usage, Button parameters, and generated Kotlin syntax.
  • Toolchain Alignment: Templates now default to Kotlin 2.2.20, matching the Summon runtime and avoiding IR compiler crashes in generated JS projects.
  • Simplified Sample Tests: Generated ExampleComponentTest no longer depends on internal test helpers, ensuring new projects compile and test successfully out of the box.

Fixed\r\n\r\n- Critical Maven Central Publishing: Fixed missing summon-core (WASM) artifact in Maven Central publication. The publishing task now correctly uploads all 4 platform artifacts (summon, summon-jvm, summon-js, summon-core), resolving dependency resolution failures in CLI-generated projects.\r\n- Gradle Wrapper Packaging: Shadow JAR now reliably ships all wrapper assets (jar, properties, gradlew,

gradlew.bat), eliminating "gradle: not found" errors in new projects.

  • Version Synchronisation: Templates pull their dependency version from version.properties; fallbacks and docs are aligned to 0.4.0.9.
  • Template Compilation Errors: Corrected Modifier().padding(...), Button label argument order, and remember import locations so every generated project compiles out of the box. Additional fixes ensure generated tests only rely on publicly exported APIs.
  • Install Command: Works from any directory and automatically drops wrapper scripts for the downloaded JAR.

Changed

  • Documentation & Help Output: All CLI messaging, README snippets, and examples showcase java -jar summon-cli-0.4.0.9.jar ... usage. Removed stale npm references and clarified global install flow.
  • Repository Defaults: Generated projects now target Maven Central exclusively, removing unnecessary GitHub Packages configuration.

Notes

  • Download & install via java -jar summon-cli-0.4.0.9.jar install.
  • Library dependency: implementation("io.github.codeyousef:summon:0.4.0.9").
  • All artifacts (CLI + libraries) published to Maven Central.

[0.4.0.0]

🚀 WebAssembly (WASM) Support

This major release introduces full WebAssembly support to Summon, enabling high-performance client-side execution while maintaining perfect SEO compatibility through server-side rendering.

Added

Complete WASM Implementation
  • Multi-Target Architecture: New webMain source set sharing code between JS and WASM targets
  • Real WASM DOM Manipulation: Native WebAssembly DOM operations replacing JavaScript stubs
  • Server-Side Rendering Integration: Hydration system allowing WASM to enhance SSR HTML without replacement
  • Browser Compatibility Layer: 97% browser support with automatic fallback to JS for older browsers
  • Production Build Optimization: Bundle size optimization achieving < 200KB gzipped (8% increase)
  • Performance Monitoring: Real-time performance tracking showing 15-30% improvement over JS
🎯 WASM-Specific Features
  • DOM Operations: Direct WebAssembly DOM manipulation with type-safe Kotlin APIs
  • Event Handling: WASM event listeners with automatic cleanup and memory management
  • Hydration Markers: data-summon-id attributes for SSR/WASM coordination
  • Browser Detection: Comprehensive capability detection for WASM, SharedArrayBuffer, SIMD
  • Error Recovery: 95%+ automatic recovery rate from WASM initialization failures
  • Lazy Loading: Intersection Observer-based lazy loading for WASM components
🧪 Testing & Quality
  • Cross-Browser Test Suite: 15+ browser scenarios with automatic fallback validation
  • SEO Validation: 25+ checks ensuring zero SEO regressions
  • Performance Tests: WASM vs JS performance comparison validation
  • Error Reporting: Privacy-compliant error handling for WASM failures
  • E2E Testing: Comprehensive end-to-end tests for all platforms
  • WASM Test Suite Completion: Fixed remaining 21 failing WASM tests achieving 100% pass rate (923/923 tests)
    • PlatformRenderer Enhancement: Complete HTML rendering and DOM manipulation for WASM
    • HydrationManager Implementation: Full SSR hydration support with JSON context serialization
    • SecurityContext Implementation: Authentication and authorization framework for WASM
📚 Documentation & Tooling
  • Complete WASM Documentation: New comprehensive WASM guide and API reference
  • Migration Guide: Zero-breaking-changes upgrade path for existing applications
  • Troubleshooting Guide: Comprehensive WASM debugging and optimization strategies
  • Framework Integration: Guides for Ktor, Spring Boot, and Quarkus
  • Performance Profiling: Tools for analyzing WASM vs JS performance
  • Example Projects: Updated SSR and WASM demo applications
  • API Reference: New WASM-specific API documentation covering all WASM features
🔧 Build System & Infrastructure Improvements
  • Kotlin 2.2.20 Upgrade: Successfully upgraded from Kotlin 2.1.0 to latest stable release
  • AtomicFU 0.30.0-beta: Updated with proper plugin configuration and IR transformations
  • Modern Incremental Compilation: Enabled FIR-based incremental compilation for all platforms
  • Zero Compilation Warnings: Eliminated all 400+ compilation warnings for production-ready code
  • Improved Test Infrastructure: Fixed WASM test execution in Node.js environments
  • Yarn Lock Management: Resolved persistent yarn.lock synchronization issues
🛠️ CLI Tool Fixes
  • Gradle Wrapper Fix: Fixed critical "gradle: not found" error in scaffolded projects
    • gradle-wrapper.jar now properly embedded in shadow JAR (43KB)
    • Created validation tests and build tasks to prevent regression
    • All 4 wrapper files verified in shadow JAR
  • Version Synchronization: Eliminated hardcoded version strings in templates
    • Created VersionReader utility to read version from version.properties at runtime
    • Projects now use correct version 0.4.0.0 instead of outdated 0.2.9.1
  • Repository Configuration: Added GitHub Packages repository to generated projects
    • Projects can now resolve summon-core dependencies correctly
    • Supports both gradle.properties and environment variable credentials
  • Enhanced Testing: Added comprehensive test suite for CLI functionality
    • WrapperResourceValidationTest ensures wrapper files are accessible
    • validateWrapperInJar task verifies shadow JAR contents
🐛 Bug Fixes & Stability
  • IC Internal Error Resolution: Fixed "can not find library org.jetbrains.kotlin:kotlinx-atomicfu-runtime" error
  • WASM Test Compatibility: Created safe wrappers for WASM browser functions in Node.js
  • Deprecated API Updates: Fixed all deprecated function calls across the codebase
  • Unchecked Cast Warnings: Added proper @Suppress annotations for external interface casts
  • Test Stability: Reduced test failures from 315 to under 50 through MockComposer fixes
  • Browser Test Configuration: Disabled hanging browser tests in CI environments

Technical Achievements

  • Zero SEO Regressions: All meta tags, structured data preserved through SSR
  • 15-30% Performance Improvement: Measured on complex UI operations
  • 97% Browser Compatibility: With graceful JS fallback for older browsers
  • 8% Bundle Size Increase: Well under 10% target, includes both JS and WASM
  • 100% Backward Compatibility: No breaking API changes
  • 90+ New Tests: Comprehensive WASM-specific test coverage
  • Zero Compilation Warnings: All 400+ warnings eliminated for production quality
  • Modern Kotlin Stack: Running on latest Kotlin 2.2.20 with all modern features

[0.3.2.2]

🔧 Publishing Fix

Fixed

  • JavaScript Package Publishing: Fixed Maven Central publishing to include .klib files for summon-js artifact
  • Gradle Module Metadata: Added .module files to publishing pipeline for proper dependency resolution
  • Publishing Script: Updated artifact filter to include all necessary Kotlin/JS artifacts (.klib, .module)

Technical Details

  • The publishing script was previously only including .jar and .pom files
  • Kotlin/JS targets produce .klib files instead of .jar files, which were being excluded
  • This fix ensures summon-js artifact is properly consumable from Maven Central

[0.3.2.1]

📚 Comprehensive Documentation Release

This release provides complete enterprise-level documentation for the entire Summon framework, establishing it as the most thoroughly documented Kotlin Multiplatform UI framework.

Added

🎯 Complete Framework Documentation
  • Enterprise-Level KDoc: Professional documentation for all 150+ framework files
  • Complete API Reference: Comprehensive coverage with @param, @return, @throws, @see, @sample tags
  • Real-World Examples: 200+ practical usage examples across all components
  • Cross-Platform Guidance: Detailed browser vs JVM behavior documentation
  • Accessibility Guidelines: WCAG compliance patterns and screen reader support
  • Performance Optimization: Best practices and optimization strategies throughout
  • Integration Patterns: How framework systems work together
  • Migration Guides: Transitioning from other UI frameworks
📖 Component Library Documentation (47+ Components)
  • Display Components: Text, Image, Icon, RichText with typography and accessibility
  • Input Components: Button, TextField, Checkbox, Select, DatePicker, FileUpload, Form management
  • Feedback Components: Alert, Modal, Snackbar, Toast, Progress, Loading, Badge, Tooltip
  • Layout Components: Box, Column, Row, Grid, Card, LazyColumn/Row, ResponsiveLayout
  • Navigation Components: Link, TabLayout with routing integration
  • Style Components: GlobalStyle with theme management
⚙️ Framework Systems Documentation
  • Modifier System: Complete type-safe styling system with 20+ modifier categories
  • Animation System: Keyframes, transitions, easing functions, custom animations
  • Effects System: LaunchedEffect, DisposableEffect, WebSocket, HTTP client, Storage
  • State Management: Reactive state, remember functions, ViewModel patterns
  • Composition Runtime: Composer, Recomposer, PlatformRenderer architecture
🔧 Supporting Systems Documentation
  • Routing System: File-based routing, page discovery, route guards, navigation
  • Server-Side Rendering: SSR patterns, hydration, static rendering, SEO optimization
  • Internationalization: I18n context, RTL support, translation management
  • Theme System: Design tokens, color systems, typography, responsive design
  • Security System: Authentication, RBAC, JWT handling, secured components
  • Validation System: Form validation, error handling, custom validators
  • Accessibility: ARIA support, keyboard navigation, focus management

Enhanced

  • Developer Experience: Clear onboarding paths with progressive examples
  • Production Readiness: Enterprise deployment guidance and best practices
  • Framework Adoption: Documentation quality that inspires confidence
  • Cross-Platform Development: Comprehensive platform-specific guidance

Documentation Quality Standards

  • Professional KDoc: Industry-standard documentation with complete tag coverage
  • Practical Examples: Real-world usage patterns for production applications
  • Accessibility First: WCAG compliance and inclusive design patterns
  • Performance Aware: Optimization tips integrated throughout
  • Cross-Platform Focus: Platform-specific behavior clearly documented
  • Enterprise Ready: Documentation suitable for enterprise framework adoption

[0.3.2.0]

🎨 Design System & SSR Todo Application Enhancements

This release introduces a comprehensive type-safe design system and modernizes the SSR Todo application with Material Design 3 inspired components.

Added

🎯 Type-Safe Design System
  • Design Token Enums: Comprehensive set of type-safe design tokens
    • Spacing: XS through XXL with pixel values (8px to 64px)
    • Typography: TextSize (12px to 48px) and FontWeight enums
    • SemanticColor: Complete color system with light/dark mode support
    • ButtonSize: SMALL, MEDIUM, LARGE with padding and sizing
    • BorderRadius: Consistent radius values from SM to FULL
    • Shadow: Elevation system from NONE to XXL
    • MaxWidth: Container width constraints
    • Breakpoint: Responsive design breakpoints
🚀 SSR Todo App Improvements
  • Modern UI Implementation: Complete redesign with Material Design 3 principles
  • Centered Container Layout: Responsive centered layout with proper spacing
  • Consistent Button Sizing: All buttons use ButtonSize enum for uniformity
  • Enhanced Form Components: Improved form styling with proper error states
  • Better Visual Hierarchy: Typography system for improved readability
🔧 Modifier System Extensions
  • Design-Aware Modifiers: Custom modifiers using design tokens
    • spacing(), paddingHorizontal(), paddingVertical()
    • containerWidth(), shadow(), radius()
    • typography(), buttonSize()
  • Optimized Imports: Proper use of core library modifiers
    • Leverages existing gap(), alignItems(), justifyContent()
    • Uses core opacity(), fontFamily() modifiers

Fixed

  • Import Resolution: Fixed .px extension imports from correct package
  • Modifier Conflicts: Resolved conflicts between custom and core modifiers
  • Type Safety: Replaced string literals with type-safe enum values
  • Session Management: Improved SSR session handling for todo persistence

Technical Improvements

  • Better Code Organization: Design system properly structured in dedicated package
  • Reduced Redundancy: Eliminated duplicate modifier implementations
  • Improved Type Safety: No magic strings in styling code
  • Enhanced Maintainability: Centralized design tokens for consistency

[0.3.1.0]

🌟 Complete Server-Side Rendering (SSR) Implementation

This release delivers a fully functional, production-ready Server-Side Rendering system with comprehensive testing and real-world capabilities.

Added

🚀 Core SSR Functionality

  • Complete SSR Implementation: Fully functional server-side rendering with proper composition context management
  • PlatformRenderer Integration: Seamless integration with existing component system
  • State Management During SSR: Full support for remember, mutableStateOf, and reactive state during server rendering
  • HTML Generation: Production-quality HTML output using kotlinx.html with proper structure and semantics

🧪 Comprehensive Test Coverage

  • 58 SSR-Specific Tests: Battle-tested implementation with extensive test coverage
  • Performance Stress Testing: Verified to handle 100+ components and deep nesting (15+ levels)
  • Memory Management: Proper cleanup and resource management during SSR operations
  • Error Handling: Robust error handling for edge cases, null values, and special characters
  • Real-World Scenarios: Tests covering e-commerce, blog, dashboard, forms, and authentication flows

Performance Optimizations

  • Efficient Rendering: Optimized for large datasets (1000+ items) with selective rendering
  • Memory Cleanup: Automatic resource cleanup and garbage collection friendly
  • Concurrent Safety: Thread-safe operations for multi-user server environments
  • Benchmarked Performance: Sub-second rendering for complex applications

🎯 Advanced SSR Features

  • Hydration Support: Client-side reactivation of server-rendered HTML with state preservation
  • SEO Metadata Generation: Comprehensive SEO support with OpenGraph, Twitter Cards, and structured data
  • Custom Head Elements: Support for custom head content and meta tags
  • Initial State Injection: Server state can be injected for client-side hydration

🔧 Developer Experience

  • ServerSideRenderUtils: High-level utilities for common SSR operations
  • RenderContext: Configurable rendering context with SEO, hydration, and debugging options
  • Multiple Renderer Support: Support for multiple isolated renderer instances
  • Streaming Support: Interface for streaming SSR implementations

📊 Real-World Use Cases

  • E-commerce Applications: Product listings, shopping carts, checkout flows
  • Content Management: Blog posts, articles, comments systems
  • Dashboard Applications: Data visualization, charts, metrics
  • Form Applications: Registration, authentication, validation
  • SEO-Optimized Pages: Landing pages, marketing sites, content pages

🛠️ API Enhancements

  • PlatformRenderer.renderComposableRoot() - Core SSR rendering method
  • PlatformRenderer.renderComposableRootWithHydration() - SSR with client hydration support
  • ServerSideRenderUtils.renderPageToString() - High-level page rendering utility
  • RenderContext - Configurable rendering context with SEO and hydration options
  • Enhanced composition context management for proper state handling during SSR

Technical Improvements

  • Composition Context: Fixed composition context management for proper state handling during SSR
  • Platform Registration: Automatic platform renderer registration for seamless SSR setup
  • HTML Structure: Proper HTML document structure with head/body separation
  • Cross-Platform: Full compatibility with existing JVM and JS platform implementations

Testing

  • All 863 tests passing (100% success rate)
  • SSR-specific test suite: 58 comprehensive tests
  • Performance verified: handles complex applications efficiently
  • Memory usage optimized and verified through stress testing

[0.3.0.0]

Major Framework Restructuring and Feature Additions

This release represents a significant milestone with major architectural changes, new tooling, and complete onClick functionality implementation. The framework has been restructured for better maintainability and includes new publishing capabilities and development tools.

Added

🏗️ Project Restructuring

  • Modular Architecture: Restructured project into separate modules for better organization
    • summon-core/ - Core framework functionality
    • docs/ - Comprehensive documentation and API reference
  • Centralized Version Management: Unified version configuration across all modules
  • Enhanced Build System: Improved Gradle configuration with better dependency management

📦 Maven Central Publishing

  • Official Maven Central Distribution: Summon is now available on Maven Central
    • io.github.codeyousef:summon:0.3.0.0 - Multiplatform artifact
    • io.github.codeyousef:summon-jvm:0.3.0.0 - JVM-specific artifact
    • io.github.codeyousef:summon-js:0.3.0.0 - JavaScript-specific artifact
  • Automated Publishing Pipeline: GitHub Actions workflow for seamless releases
  • Comprehensive POM Metadata: Proper Maven metadata with licensing, SCM, and developer information
  • Artifact Signing: GPG-signed artifacts for security and authenticity

🛠️ CLI Development Tool

  • Summon CLI: New command-line interface for project scaffolding and development
    • summon init - Initialize new Summon projects with templates
    • summon create - Generate components, pages, and other project artifacts
    • summon generate - Code generation utilities for common patterns
  • Interactive Setup: Guided project initialization with framework-specific configurations
  • Native Binary Distribution: Compiled native executables for major platforms

🖱️ Complete onClick Functionality

  • Cross-Platform Event Handling: Seamless onClick functionality across JVM and JS platforms
    • CommonMain: CallbackRegistry for managing event handlers with unique IDs
    • JvmMain: Server-side callback registration and hydration data generation
    • JsMain: Client-side hydration system using compiled Kotlin/JS (no raw JavaScript)
  • Automatic Hydration: Server-rendered components become interactive without manual JavaScript
  • Type-Safe Event Handling: Full Kotlin type safety for event handlers across platforms
  • HTTP Callback Bridge: Client-side events can trigger server-side callbacks via HTTP requests

🎭 Advanced UI Components

  • Modal/Dialog System: Complete modal component framework
    • Modal Variants: DEFAULT, ALERT, CONFIRMATION, FULLSCREEN modes
    • Modal Sizes: SMALL, MEDIUM, LARGE, EXTRA_LARGE options
    • Backdrop Handling: Click-to-dismiss and keyboard navigation (ESC)
    • Accessibility: ARIA attributes and focus management
    • Convenience Functions: AlertModal() and ConfirmationModal() helpers
  • Loading Components: Comprehensive loading indicators
    • Loading Variants: SPINNER, DOTS, LINEAR, CIRCULAR animations
    • Loading Sizes: SMALL, MEDIUM, LARGE options
    • LoadingOverlay: Full-screen loading states with backdrop
    • Customizable: Text, colors, and animation speeds
  • Toast Notification System: Complete notification management
    • Toast Variants: INFO, SUCCESS, WARNING, ERROR types
    • Toast Positioning: TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT
    • ToastManager: Programmatic toast creation and management
    • ToastProvider: Context-based toast management with auto-dismiss
    • Action Support: Interactive toasts with custom action buttons

🌐 Network and Communication

  • WebSocket Support: Full-featured WebSocket implementation
    • Cross-Platform: expect/actual pattern for JVM and JS platforms
    • Auto-Reconnection: Configurable reconnection with exponential backoff
    • Connection Management: Automatic connection lifecycle handling
    • Event Handling: onOpen, onMessage, onClose, onError callbacks
    • Protocol Support: Multiple WebSocket sub-protocols
    • Keepalive: Ping/pong mechanism for connection health (JVM)
  • HTTP Client: Comprehensive HTTP client with coroutines
    • Cross-Platform: Unified API across JVM and JS platforms
    • HTTP Methods: GET, POST, PUT, DELETE, PATCH support
    • Request/Response: Full HTTP request and response handling
    • JSON Integration: Built-in JSON serialization/deserialization
    • Form Data: Support for form-encoded data submission
    • Headers: Complete HTTP header management
    • Error Handling: Structured error responses and exception handling

💾 Storage and Persistence

  • Storage API: Cross-platform storage abstraction
    • Storage Types: LOCAL, SESSION, MEMORY storage options
    • Unified Interface: Consistent API across all platforms
    • TypedStorage: Type-safe storage wrapper for structured data
    • Automatic Serialization: JSON serialization for complex objects
    • Error Handling: Graceful fallbacks for storage unavailability

📚 Enhanced Documentation

  • API Reference: Comprehensive API documentation with examples
    • Component API reference with usage patterns
    • Modifier system documentation with type-safe examples
    • Platform-specific implementation guides
  • Integration Guides: Step-by-step guides for framework integration
  • Migration Documentation: Guidance for upgrading from previous versions

Changed

Performance Improvements

  • Optimized Build Process: Faster compilation and reduced build times
  • Efficient Asset Bundling: Automatic Kotlin/JS bundle generation and optimization
  • Resource Management: Improved static resource handling and caching

🔧 Developer Experience

  • Type-Safe Modifiers: Enhanced modifier system with proper type safety
    • .fontSize(12.px) instead of .fontSize("12px")
    • .cursor(Cursor.Pointer) instead of .cursor("pointer")
    • .gap(theme.spacing.md) with proper spacing tokens
  • Improved Error Messages: Better compilation and runtime error reporting
  • Enhanced IDE Support: Better code completion and error detection

🏛️ Architecture Improvements

  • Platform Abstraction: Cleaner separation between platform-specific implementations
  • Rendering Pipeline: Improved rendering performance and consistency
  • State Management: Enhanced state handling patterns and lifecycle management

Technical Details

onClick Implementation Architecture

// Developer writes this:
Button(
    onClick = { handleAction() },
    label = "Click Me"
)

// Framework generates:
// 1. JVM: Registers callback, outputs HTML with data-onclick-id
// 2. JS: Hydration client attaches event listeners  
// 3. Execution: Client events trigger server callbacks via HTTP

Build System Enhancements

  • Multi-Module Support: Independent building and testing of modules
  • Dependency Management: Centralized version catalogs and dependency resolution
  • Cross-Platform Testing: Automated testing across JVM, JS, and native platforms

Publishing Infrastructure

  • Staging Repository: Automated staging and verification before release
  • Version Validation: Automatic version conflict detection and resolution
  • Documentation Publishing: API docs automatically published with releases

Migration Guide

For Existing Projects

  1. Update Dependencies: Replace local Summon references with Maven Central artifacts
  2. Modifier Updates: Replace string-based modifiers with type-safe equivalents
  3. onClick Handlers: No changes needed - existing onClick handlers now work automatically
  4. Build Configuration: Update Gradle files to use new module structure

For New Projects

  • Use summon init CLI command for guided project setup
  • Choose appropriate artifact based on target platform
  • Visit our separate repository for integration guides and framework setup

Breaking Changes

  • Module Structure: Project layout has changed (focus on core library)
  • Build Configuration: Some Gradle configuration paths have changed
  • Internal APIs: Some internal APIs have been reorganized (public APIs unchanged)

Deprecations

  • Raw CSS string modifiers (still supported but deprecated in favor of type-safe alternatives)
  • Direct platform renderer access (use framework abstractions instead)

[0.2.9.1]

Major Code Refactoring and Cleanup

This release represents a comprehensive code refactoring and cleanup effort that significantly improves the codebase quality, eliminates duplication, and enhances maintainability. The refactoring touched 46 files with 1,514 additions and 762 deletions, while maintaining backward compatibility and ensuring all 822 tests continue to pass.

Added

  • Enhanced Test Infrastructure:

    • TestSetupUtils.kt - Comprehensive test setup utilities for consistent test environments
    • TestFixtures.kt - Enhanced test fixtures with expanded component examples and state management
    • TestMocks.kt - Complete mock implementations for testing platform-specific functionality
    • TestAssertions.kt - Custom assertion utilities for better test readability and debugging
    • TestUtils.kt - Additional testing utilities and helper functions
  • Centralized Error Handling:

    • ErrorHandling.kt - Comprehensive error handling system with custom exception hierarchy
    • ValidationMessages.kt - Centralized validation error messages for consistent user feedback
    • Standardized error patterns across the framework
  • Platform Abstraction:

    • RenderingPatterns.kt - Abstract platform-specific rendering patterns into reusable utilities
    • Enhanced platform renderer abstraction for better cross-platform compatibility

Changed

  • Code Deduplication:

    • Consolidated duplicate breakpoint constants across ResponsiveLayout and MediaQuery
    • Removed duplicate RenderUtils implementations in JS platform by consolidating into single implementation
    • Eliminated duplicate modifier extension files and consolidated extension patterns
    • Unified validation patterns by migrating from boolean return types to ValidationResult
  • API Improvements:

    • Simplified time API by removing redundant getCurrentTimeMillis function
    • Enhanced shadowConfig function with automatic string-to-Color conversion
    • Improved animation modifiers with better type safety and validation
  • Component Enhancements:

    • Updated Button component with improved styling and consistency
    • Enhanced Divider component with better cross-platform support
    • Improved ResponsiveLayout with consolidated breakpoint management

Fixed

  • Compilation Issues:

    • Resolved test compilation problems across all platforms
    • Fixed deprecated test patterns and updated to current best practices
    • Eliminated compilation warnings and improved type safety
  • Platform Compatibility:

    • Fixed cross-platform time handling inconsistencies
    • Resolved rendering issues in server-side rendering scenarios
    • Improved hydration support with simplified implementation
  • State Management:

    • Enhanced state validation with better error reporting
    • Improved reactive state handling with consolidated patterns
    • Fixed edge cases in state synchronization

Removed

  • Duplicate Code:

    • Removed redundant RenderUtilsExtensions.kt and RenderUtilsJs.kt implementations
    • Eliminated duplicate modifier extension files
    • Removed obsolete getCurrentTimeMillis function in favor of unified time API
    • Cleaned up redundant validation implementations
  • Deprecated Patterns:

    • Removed legacy boolean validation patterns in favor of ValidationResult
    • Eliminated outdated test setup patterns
    • Removed deprecated SSR helper functions

Technical Improvements

  • Performance:

    • Optimized rendering patterns for better performance across platforms
    • Reduced code duplication leading to smaller bundle sizes
    • Improved compilation times through better code organization
  • Maintainability:

    • Standardized code patterns across the entire codebase
    • Improved code organization with clearer separation of concerns
    • Enhanced documentation and inline comments for better developer experience
  • Testing:

    • All 822 tests continue to pass, ensuring backward compatibility
    • Enhanced test coverage with new utility classes
    • Improved test reliability and consistency across platforms

Migration Notes

This release maintains full backward compatibility. No changes are required for existing applications. The refactoring was designed to improve internal code quality while preserving all public APIs.

[0.2.9.0]

Added

  • Core Library Enhancements:
    • Added toCssString() method to Color class for CSS string conversion
    • Added missing Rotate3d to TransformFunction enum for 3D rotation transformations
    • Added backdrop filter modifiers (backdropFilter, backdropBlur, backdropBrightness, backdropContrast, backdropGrayscale, backdropHueRotate, backdropInvert, backdropOpacity, backdropSaturate, backdropSepia)
    • Enhanced shadowConfig function to convert string colors to Color objects automatically
    • Added support for multiple backdrop filters with chaining

Fixed

  • Cross-Platform Compatibility:

    • Fixed DOT_MATCHES_ALL regex issue in RichText component by using [\s\S]*? pattern for multiplatform compatibility
    • Fixed Math.toRadians() reference in LayoutModifiers by using manual calculation: angle.degrees.toDouble() * kotlin.math.PI / 180.0
    • Fixed floating-point precision test failure in ShadowConfigTest by making assertions more flexible across platforms
  • CompositionLocal Runtime Error:

    • Fixed "CompositionLocal not provided" error in JvmPlatformRenderer
    • Updated renderContent() method to properly provide LocalPlatformRenderer without accessing private renderer variable
  • Build System:

    • Fixed yarn lock file synchronization issues
    • Resolved missing JS dependencies for webpack and karma-runner
    • Fixed JS test compilation issues by cleaning and reinstalling dependencies

[0.2.8.7]

Changed

  • Version Bump: Updated all documentation examples and version references to 0.2.8.7
  • Documentation Updates: Updated feature version references from v0.2.7+ to v0.2.8+
  • Example Updates: Updated Quarkus and Spring Boot example dependencies to 0.2.8.7

[0.2.8.6]

Added

  • Complete Spring Boot Example: Added comprehensive Spring Boot integration example with Thymeleaf templates
    • Pure Summon implementation with standalone Modifier system
    • Full CRUD user management with server-side rendering
    • Dashboard with statistics and activity feeds
    • Contact form with validation
    • Interactive counter component
    • Navigation and footer components
    • All styling done through Modifier system, no Bootstrap or manual CSS
    • Complete test suite with 8 passing tests
    • Integration with Thymeleaf using th:utext for Summon-rendered HTML

Fixed

  • Example Templates: Converted all Spring Boot templates to use pure Summon components
    • Removed Bootstrap CSS dependencies
    • Eliminated manual HTML structure in favor of Summon components
    • Removed JavaScript libraries, keeping only minimal component interaction scripts
    • Templates now use only Summon-rendered content via server-side component rendering

Enhanced

  • Testing Infrastructure: Added comprehensive test coverage for Summon components
    • Component rendering tests
    • State management tests
    • Modifier system tests
    • Form validation tests

[0.2.8.5]

Fixed

  • CI/CD Snapshot Publishing: Fixed snapshot version modification to use version.properties
  • Snapshot builds now correctly append -SNAPSHOT to distinguish from release versions
  • Prevents version conflicts between snapshot and release publishing

[0.2.8.4]

Fixed

  • CI/CD Pipeline: Resolved duplicate snapshot publishing workflows causing 409 conflicts
  • Disabled standalone publish-snapshot workflow to prevent race conditions
  • CI/CD pipeline now handles all publishing after successful tests

[0.2.8.3]

Fixed

  • Version Conflict: Bumped version to resolve GitHub Packages publishing conflict from premature release creation
  • No code changes from 0.2.8.2, just a version increment to allow automated workflow publishing

[0.2.8.2]

Fixed

  • Version Conflict: Bumped version to resolve GitHub Packages publishing conflict
  • No code changes from 0.2.8.1, just a version increment to allow successful publishing

[0.2.8.1]

Fixed

  • Test Suite Reliability: Fixed failing ButtonTest and ColumnTest cases in CI/CD pipeline
    • Added explicit background colors for PRIMARY and SECONDARY button variants in tests
    • Updated ButtonTest helper functions to handle CSS !important values correctly
    • Updated ColumnTest expectations to match actual Column component behavior with default flex styles
  • CI/CD Pipeline: Improved test stability across different environments

[0.2.8.0]

Added

  • Unified Version Catalog: Migrated to Gradle's version catalog (libs.versions.toml) for centralized dependency management
    • All dependencies now use type-safe version references
    • Consistent versions across main project and examples
    • Easier dependency updates and maintenance

Changed

  • Build Configuration: Migrated from hardcoded dependency versions to version catalog references
    • Updated all dependency declarations in build.gradle.kts files
    • Improved build consistency and maintainability
  • GitHub Actions: Added Claude PR Assistant workflow for automated PR reviews
  • JS Example Project: Major refactoring and cleanup
    • Consolidated multiple test files into a more organized structure
    • Removed redundant example components
    • Simplified Main.kt with cleaner example implementation
    • Updated dependencies to use version catalog

[0.2.7.2]

Changed

  • Updated version number to 0.2.7.2
  • Fixed GitHub Packages publishing conflict by incrementing version

[0.2.7.1]

Changed

  • Updated version number to 0.2.7.1
  • Fixed various issues with the build process

[0.2.7]

Added

  • State Management & Recomposition: Complete implementation of advanced state management features

    • simpleDerivedStateOf() - Creates derived states that automatically recompute when dependencies change
    • produceState() - Creates state from suspend functions with proper lifecycle management
    • collectAsState() - Converts Kotlin Flow to Summon State for reactive data streams
    • mutableStateListOf() - Observable list implementation that triggers recomposition on modifications
    • Recomposition optimization annotations: @Skippable, @Stable, @Immutable
    • Enhanced Composer interface with recompose(), rememberedValue(), and updateRememberedValue() methods
    • startRestartableGroup() and key() methods for fine-grained recomposition control
  • Router Enhancements: Complete browser history integration

    • Automatic browser back/forward button handling with popstate event listener
    • Dynamic route parameter support (e.g., /user/:id, /posts/:category/:slug)
    • Wildcard route support with * pattern
    • Proper cleanup of event listeners when router is disposed
    • Route state management with reactive updates on navigation
  • JS Platform Renderer Implementations:

    • renderLink() - Full implementation with href and content support
    • renderEnhancedLink() - Advanced link with target, title, and ARIA attributes
    • renderTabLayout() - Complete tab navigation with keyboard support and ARIA roles
    • renderDivider() - Simple HR element rendering
    • renderCheckbox() - Delegated implementation to version with label parameter
    • renderRadioButton() - Delegated implementation to version with label parameter
    • renderRangeSlider() - Custom implementation with two range inputs for start/end values
    • renderForm() - Form element with submit event handling and preventDefault
    • renderFileUpload() - File input with trigger function return for programmatic access
    • renderSnackbar() - Fixed position notification with optional action button
    • renderAspectRatio() - Container maintaining aspect ratio using padding-bottom trick
    • renderExpansionPanel() - Using details/summary for native expand/collapse
    • renderResponsiveLayout() - Flexbox container with wrap for responsive behavior
    • renderLazyColumn() - Scrollable vertical list container
    • renderLazyRow() - Scrollable horizontal list container
    • renderAnimatedContent() - Content with CSS transition support
    • renderSpacer() - Empty div for spacing
    • renderBox() - Basic div container with FlowContent support
    • renderScreen() - Full-height container for screen layouts
    • renderInline() - Inline span element
    • renderSpan() - Span element with FlowContent support
    • renderGrid() - CSS Grid container
    • renderHtmlTag() - Generic HTML tag renderer
    • renderModal() - Modal dialog with backdrop and dismiss handling
    • Proper event handling and attribute management for all components
  • Recomposer Scheduling: Complete scheduling infrastructure for automatic UI updates

    • Platform-specific schedulers (requestAnimationFrame for JS, coroutines for JVM)
    • Automatic recomposition when state changes with proper dependency tracking
    • Coalescing of multiple state changes into single recomposition
    • Proper cleanup of dependencies when components are disposed
    • Integration with MutableState to trigger recomposition on value changes
  • App Registration System: Complete implementation of @App annotation support

    • AppRegistry for managing custom app entry points
    • Support for single custom @App composable registration
    • Warning for multiple @App registrations
    • Fallback to default SummonApp when no custom app is registered
    • Integration with Main.kt for automatic app discovery
    • Test coverage for registration behavior
  • ElementRef System: Complete implementation for DOM element access

    • Platform-specific ElementRef implementations (JS and JVM)
    • JS implementation provides full DOM element access and lifecycle management
    • Automatic ID generation for elements without IDs
    • isAttached() method to check DOM attachment status
    • useElementRef() composable for creating refs in components
    • Modifier extensions for attaching refs to elements
    • Integration with IntersectionObserver and ResizeObserver effects
    • Test coverage for all ElementRef functionality
  • Clipboard API: Full browser clipboard implementation

    • Modern Clipboard API support with fallback for older browsers
    • Secure context detection and graceful degradation
    • Text reading and writing with Promise-based API
    • Fallback implementation using execCommand for legacy browsers
    • Clipboard state caching for synchronous interface compatibility
    • Console logging for debugging clipboard operations

Changed

  • Updated all Composer implementations (CommonComposer, JvmComposer, JsComposer) to support new interface methods
  • Enhanced Router to properly track and update current path state
  • Improved test infrastructure with comprehensive test coverage for new features

Fixed

  • Fixed compilation errors in test files by adding required Composer interface methods
  • Resolved syntax errors in MockComposer implementations across test files
  • Fixed router navigation state synchronization with browser history
  • Corrected modifier method usage in JS renderer (attribute() instead of withAttribute())
  • Recomposer Circular Dependency: Fixed StackOverflowError in Recomposer state tracking
    • Removed circular call between Recomposer.recordRead() and Composer.recordRead()
    • Updated state tracking to avoid infinite recursion during composition
  • Select Component ID Handling: Fixed issue where Select component overrode user-provided IDs
    • Now preserves existing ID from modifier when rendering with label
    • Only generates automatic ID when no ID is provided
  • ElementRef Test Fixes: Updated ElementRef tests to avoid incorrect mocking of @Composable functions

Testing

  • Select Component Tests: Added comprehensive test coverage

    • Tests for label rendering and 'for' attribute linkage
    • Tests for placeholder option generation
    • Tests for onSelectionChange callback behavior
    • Tests for multiple and size attributes
    • Tests for custom modifiers
    • Tests for all parameter combinations
  • Link Component Tests: Added extensive test coverage

    • Tests for basic link rendering with href
    • Tests for target="_blank" with automatic rel attributes
    • Tests for external link handling
    • Tests for nofollow attribute
    • Tests for combined rel attributes
    • Tests for ARIA attributes (ariaLabel, ariaDescribedBy)
    • Tests for title attribute
    • Tests for custom modifiers
    • Tests for various link types (mailto, tel, anchor, relative)
    • Tests for different target values (_self, _parent, _top)

Technical Details

  • State management implementation follows Jetpack Compose patterns adapted for multiplatform
  • Router now properly handles browser history API events and state changes
  • Clipboard API uses type-safe external declarations for browser APIs
  • ElementRef provides platform-specific element access with proper lifecycle management
  • All implementations maintain backward compatibility with existing code

Known Issues

  • JS test compilation fails with Kotlin 2.2.0-Beta1 due to kotlinx-serialization issues
    • Main code compiles successfully for all platforms
    • JVM tests pass successfully (758/758 tests passing)
    • Workaround: Use ./gradlew build -x jsTest -x jsBrowserTest

[0.2.5.1]

Fixed

  • Icon Component: Fixed compilation error by removing incorrect import of role function
    • The role function is a member function of the Modifier class, not an extension function
    • Removed unnecessary import statement that was causing "Unresolved reference 'role'" error
  • ModifierExtensionsTest: Fixed type mismatch error in test
    • Changed test to use Number parameter instead of String for minWidth function
    • Extension functions in ModifierExtensions.kt only accept Number parameters and automatically append "px"

Changed

  • Documentation: Comprehensive documentation update
    • Updated all component documentation to include 40+ components
    • Created complete modifier API reference covering all modifier features
    • Enhanced state management documentation with ViewModel and Flow integration
    • Updated routing documentation with dynamic route patterns
    • Improved animation and color API references
    • Added missing API references for accessibility, SEO, and i18n
  • README.md: Updated with correct GitHub username and Maven coordinates
    • Changed GitHub repository URL from yebaital to codeyousef
    • Updated Maven group ID from code.yousef to io.github.codeyousef

Known Issues

  • JS test compilation fails with Kotlin 2.2.0-Beta1 due to cross-module dependency issues with kotlinx-serialization
    • Main code compiles successfully for all platforms
    • JVM tests pass successfully
    • Workaround: Use ./gradlew build -x jsTest -x jsBrowserTest to build without JS tests

Infrastructure

  • CI/CD Pipeline: Fixed GitHub Actions workflow issues
    • Added security-events: write permission for security scan uploads
    • Fixed npm cache configuration (removed npm cache, project uses Yarn)
    • Updated test artifact upload to always upload reports (not just on failure)
    • Added workaround for JS test compilation issue in build jobs
    • Added test scripts for local development (run-tests.sh and run-tests.bat)
    • Fixed missing gradle-wrapper.jar file that was causing CI/CD builds to fail
    • Reorganized .gitignore to properly track the gradle wrapper jar file
    • Modified CI/CD workflow to allow build job to run even if tests fail using if: always() condition
    • Removed test dependency from publish tasks in build.gradle.kts to allow publishing despite test failures
    • Updated GitHub repository URLs in publishing configuration from yourusername to codeyousef
    • Fixed group ID from io.github.yourusername to io.github.codeyousef to match repository owner
    • Added both traditional OSSRH and new Central Portal repository configurations for flexibility
    • Renamed Maven Central repository from "central" to "ossrh" to avoid conflicts with cached configurations
    • Added documentation about required environment variables for Maven Central publishing
    • Updated CI/CD workflow to use the renamed "ossrh" repository instead of "central"
    • Added continue-on-error flags to publishing steps to handle cases where secrets might not be configured
    • Clarified documentation for local vs CI/CD publishing with repository secrets
    • Updated documentation to reflect current GitHub Packages publishing setup
    • Added troubleshooting section for common publishing errors
    • Note: Maven Central publishing is temporarily using GitHub Packages while OSSRH credentials are being configured
    • Fixed environment variable names in build.gradle.kts to use CENTRAL_USERNAME/CENTRAL_PASSWORD to match GitHub secrets
    • Re-enabled Maven Central publishing in CI/CD workflow with correct OSSRH repository name
    • Added Maven Central publishing to snapshot builds (on push to main)
    • Updated signing configuration to use environment variables for CI/CD
    • Added GPG key import to snapshot publishing job
    • Added support for new Maven Central Portal publishing via REST API
    • Created publish-to-central-portal.sh and .bat scripts for bundle creation and upload
    • Updated CI/CD to use Central Portal publishing scripts instead of traditional OSSRH
    • Changed publishing type from USER_MANAGED to AUTOMATIC for immediate Maven Central publication
    • Fixed Kotlin/JS publication metadata issue by allowing standard Kotlin multiplatform publications
    • Updated Central Portal publishing script to exclude .klib files from bundle (Maven Central doesn't accept them)
    • Removed OSSRH repository from build.gradle.kts - Maven Central publishing now handled exclusively by custom script
    • Fixed cache cleaning scripts to reference correct repository names (GitHubPackages instead of OSSRH)
    • Added comprehensive troubleshooting for phantom task errors caused by Gradle cache
  • Documentation: Updated project description
    • Changed terminology from "UI toolkit" to "frontend framework" to better reflect Summon's comprehensive nature
    • Updated README.md and project documentation with new terminology

[0.2.4.5]

Refactor

  • Compose Wrapper: Introduce reusable compose wrapper for consistency
    • Refactored effects and hooks to leverage a generalized compose wrapper for consistent composition behavior
    • Simplified interval, timeout, and other effect implementations by reusing shared utility functions while ensuring clean-up and modularization
    • Standardized media query, localStorage, and event listener logic for improved testability and reduced redundancy

[0.2.4.4]

Fixed

  • Modifier Prefixing Logic: Resolved inconsistencies in how internal prefixes (__attr:, __event:) were applied to HTML attributes and event handlers, which caused widespread test failures.
    • Reverted the Modifier.style member function (Modifier.kt) to its original behavior, ensuring it only handles standard CSS properties without adding any prefixes.
    • Updated helper extension functions (AttributeModifiers.attribute in ModifierUtils.kt, CoreModifiers.event in CoreModifiers.kt, and pointer event handlers like onClick, onMouseEnter in PointerEventModifiers.kt) to explicitly add the required prefixes (__attr: or __event:) to the style map keys.

Changed

  • Component Attribute/Event Handling: Ensured correct HTML attribute and event handler application in various components and utilities that rely on the fixed modifier helper functions. This includes, but is not limited to:
    • Accessibility utilities (AccessibilityTree.kt) relying on __attr: prefixes.
    • Components using .attribute() or event modifiers (e.g., Badge.kt, DatePicker.kt, Select.kt, Text.kt).
    • Note: Platform renderers (JvmPlatformRenderer.kt, EnhancedJvmPlatformRenderer.kt, JsPlatformRenderer.kt) and components calling them directly (RangeSlider.kt, Slider.kt, Switch.kt, TimePicker.kt) were not directly modified but benefit from the corrected modifier data they receive. PlatformRenderer.kt interface was unchanged.
  • Updated project version number to 0.2.4.4.

[0.2.4.3]

Changed

  • Updated version number to 0.2.4.3
  • Improved Boolean parameter handling in RouteParams.getBoolean() method to explicitly check for "true" and "false" strings (case-insensitive)

Added

  • Comprehensive test suite for routing functionality
  • JVM-specific router tests including server-side session management
  • Enhanced test coverage for composition context and rendering utilities

[0.2.4.2]

Fixed

  • Fixed floating point representation issue in LazyListState.getDataAttributes method
  • Ensured consistent decimal formatting across platforms

[0.2.4.1]

Added

  • Comprehensive thread safety improvements to FlowBinding.kt
  • Added Mutex for thread-safe access to the scopes map in FlowCollectionRegistry
  • Implemented double-check locking pattern in getScope method for improved performance while maintaining thread safety
  • Enhanced cancelScope and cancelAll methods with proper locking mechanisms
  • Started comprehensive testing

Changed

  • Improved thread safety documentation with detailed notes for each method
  • Enhanced error handling for race conditions in flow binding operations

[0.2.4.0]

Added

  • Enhanced theme system with typed theme classes for more type-safe access
  • Added TypographyTheme, SpacingTheme, BorderRadiusTheme, and ElevationTheme classes
  • Added direct access methods for typed theme properties (getTypographyTheme, getSpacingTheme, etc.)
  • Enhanced TextStyle class to support FontWeight enum, numeric values, and Color objects
  • Added TextStyle.create() factory method for type-safe TextStyle creation
  • Added fillMaxHeight() and fillMaxSize() modifier extensions to complement existing fillMaxWidth()
  • Updated documentation with examples of both string-based and typed theme APIs
  • Added component-specific type-safe modifiers to ensure modifiers are only applied to appropriate components
  • Added TextComponent, MediaComponent, LayoutComponent, InputComponent, ScrollableComponent, ClickableComponent, and FocusableComponent marker interfaces
  • Added BorderSide enum for specifying which side of an element to apply border properties to
  • Enhanced borderWidth modifier to accept numeric values directly (e.g., 1 becomes "1px")
  • Added side-specific borderWidth function that takes a BorderSide parameter
  • Added individual border width functions for each side (borderTopWidth, borderRightWidth, etc.)
  • Added AlignItems, AlignContent, and AlignSelf enums for more type-safe alignment
  • Added verticalAlignment and horizontalAlignment modifier extensions for Row and Column components
  • Enhanced alignSelf and alignContent modifiers to accept enum values
  • Added comprehensive border modifier that accepts width, style, color, and radius as parameters
  • Added linear gradient background functions with flexible API options
  • Added color extensions (Color.hex, Color.rgb, Color.rgba) for easier color creation
  • Added extensive color presets including basic colors, Material3, and Catppuccin palettes
  • Added TextAlign enum with proper string value representation
  • Enhanced textAlign modifier functions to accept TextAlign enum directly
  • Added TextTransform enum with standard CSS text-transform values (None, Capitalize, Uppercase, Lowercase, etc.)
  • Enhanced textTransform modifier functions to accept TextTransform enum directly
  • Enhanced letterSpacing modifier functions to accept numeric values directly (e.g., 1 becomes "1px")
  • Added BackgroundClip enum with support for text clipping
  • Added backgroundClip modifier functions
  • Enhanced linear gradient to support Color objects directly
  • Enhanced radial gradient to support Color objects directly
  • Improved linear gradient to better support angle degrees
  • Added new linearGradient overload with direction-first parameter order
  • Added support for using Color objects directly with color and backgroundColor modifiers
  • Added FontWeight enum with common presets (Thin, ExtraLight, Light, Normal, Medium, SemiBold, Bold, ExtraBold, Black)
  • Enhanced lineHeight to accept numeric values directly (e.g., 1.2)
  • Added support for numeric font-weight values (100-900)
  • Added RadialGradientShape and RadialGradientPosition enums for more type-safe radial gradients
  • Enhanced radial gradient to accept numeric values for positions (e.g., 0, 70)
  • Added FlexWrap enum with standard CSS flex-wrap values (NoWrap, Wrap, WrapReverse)
  • Enhanced flexWrap modifier functions to accept FlexWrap enum directly
  • Added BorderStyle enum with standard CSS border-style values (None, Hidden, Dotted, Dashed, Solid, Double, Groove, Ridge, Inset, Outset)
  • Enhanced border-related functions to accept BorderStyle enum directly
  • Added Cursor enum with standard CSS cursor values (Auto, Default, Pointer, Text, Wait, etc.)
  • Enhanced cursor modifier functions to accept Cursor enum directly
  • Added TransitionProperty enum with standard CSS transition property values (All, None, Transform, Opacity, etc.)
  • Added TransitionTimingFunction enum with standard CSS timing function values (Ease, Linear, EaseIn, EaseOut, etc.)
  • Added time unit extensions for Number (s, ms) for easier time value creation
  • Enhanced transition-related functions to accept enums and numeric values directly
  • Added parameterized transition function with support for all transition properties

Removed

  • Removed old unnecessary border extensions (borderTop, borderRight, borderBottom, borderLeft)
  • Removed duplicate border functions from LayoutModifiers.kt

Changed

  • Improved ThemeConfig to support both string-based maps (for backward compatibility) and typed properties
  • Enhanced theme documentation with comprehensive examples
  • Modified text-specific modifiers (fontFamily, fontWeight, textAlign, etc.) to require TextComponent parameter
  • Modified media-specific modifiers (objectFit) to require MediaComponent parameter
  • Modified scrollable-specific modifiers (scrollBehavior, scrollbarWidth) to require ScrollableComponent parameter
  • Updated modifier documentation to reflect type-safe modifier changes
  • Version update to 0.2.4.0 to reflect significant enhancements
  • Improved color system with more comprehensive options
  • Enhanced styling capabilities with additional gradient options
  • Updated Color.rgba to accept float alpha values (0.0-1.0) in addition to int values (0-255)

[0.2.3.0]

Added

  • Enhanced Quarkus integration with improved component rendering
  • Comprehensive HTMX support for dynamic UI interactions
  • Qute template integration for hybrid rendering approaches
  • Navigation support with automatic component processing after navigation
  • New HtmxContainer component for loading content via HTMX
  • New QuteTemplate component for rendering Qute templates in Summon components
  • Extensive logging for debugging component rendering issues
  • New documentation for Quarkus integration with detailed examples
  • Added Position, Overflow, Display, JustifyContent, JustifyItems, JustifySelf, and TextAlign enums with proper string value representation
  • Added radial gradient background functions with flexible API options

Changed

  • Improved HTML attribute handling in JvmPlatformRenderer
  • Enhanced component processing with support for raw HTML content
  • Updated documentation structure with new examples and guides
  • Refactored navigation support for better integration with HTMX

Fixed

  • Fixed issue with HTMX attributes being rendered incorrectly
  • Fixed component rendering issues with malformed HTML
  • Fixed navigation issues with duplicate navigation bars
  • Fixed issues with buttons not working due to incorrect attribute rendering
  • Fixed issues with components showing "Loading..." messages instead of actual content
  • Fixed HTML structure issues with nested components
  • Fixed issues with escaped HTML entities in component rendering
  • Fixed issue with rem number extension not working with padding and margin functions

[0.2.2.0]

Added

  • Server-side rendering (SSR) capabilities for improved performance
  • Enhanced theme system with dark mode support
  • Accessibility improvements with ARIA support
  • SEO features with meta tag support
  • Improved documentation with more examples and guides

Changed

  • Refactored component system for better performance
  • Improved styling system with more flexible modifiers
  • Enhanced state management with better reactivity
  • Updated dependencies to latest versions

Fixed

  • Fixed issues with component rendering in nested structures
  • Fixed styling inconsistencies across platforms
  • Fixed state management issues with complex state objects
  • Fixed navigation issues with dynamic routes

[0.2.1.1]

Fixed

  • Updated Quarkus integration path handling to improve route mapping
  • Fixed inconsistent route handling for navigation links in Quarkus example

Known Issues

  • The Quarkus example navigation still exhibits inconsistent behavior with some routes. We're actively investigating and will address in a future update. For now, using absolute paths is recommended.

[0.2.1.0]

Added

  • Comprehensive internationalization (i18n) framework
  • Support for multiple languages with easy configuration
  • Right-to-left (RTL) layout support for languages like Arabic and Hebrew
  • Direction-aware modifiers (paddingStart, paddingEnd, marginStart, marginEnd, etc.)
  • JSON-based translation system with nested key support
  • Language switching at runtime
  • Automatic HTML direction attribute handling
  • Documentation and examples for i18n implementation

Changed

  • Updated README to include i18n features
  • Improved directory structure for translation resources

[0.2.0.1]

Added

  • Complete Next.js-style file-based routing system with code generation
  • Automatic page discovery based on file structure
  • Build-time route registration for improved performance
  • Fixes for the routing Link component API
  • Support for dynamic route parameters with [param] filename syntax

Changed

  • Adopted semantic versioning with patch point releases (MAJOR.MINOR.PATCH.POINT)
  • Fixed Button component parameter naming consistency
  • Improved error handling in router implementations

[0.2.0]

Added

  • Cross-platform routing system with URL pattern matching
  • Enhanced state management with reactive updates
  • Integration with Quarkus, Ktor, and Spring Boot frameworks
  • Improved accessibility features and documentation
  • Additional UI components for common use cases

Changed

  • Updated documentation structure
  • Standardized API across platforms
  • Improved type safety in modifiers

[0.1.6]

Added

  • Comprehensive security system with JWT authentication support
  • Role-based access control (RBAC) with hierarchical roles
  • Security-aware components for conditional rendering
  • Security annotations for declarative security
  • Route guards for protecting routes
  • CORS and CSRF protection
  • Session management
  • Security configuration builder
  • Security API reference documentation

Changed

  • Updated JWT authentication to handle tokens from backend
  • Improved security documentation
  • Enhanced README with security features

[0.1.5]

Added

  • Dedicated AutoMarginModifiers package with specialized centering modifiers
  • marginHorizontalAutoZero() and marginVerticalAutoZero() convenience functions for unambiguous usage
  • Improved import guidance in documentation

Changed

  • Fixed import ambiguity issues by adding proper deprecation annotations for duplicate modifier functions
  • Clarified documentation with correct import statements
  • Added examples demonstrating proper usage of auto margin modifiers

[0.1.4]

Added

  • Auto margin modifiers (marginHorizontalAuto, marginVerticalAuto, marginAuto)

[0.1.3]

Added

  • Initial public release of core functionality
  • Basic layout modifiers
  • Styling modifiers
  • Component system
  • Server-Side Stability: Added per-request renderer instantiation, callback cleanup, concurrency-safe listener collections, and hover-style locking to eliminate shared-state races and memory leaks mapped out during the Oct 31 audit.