- Add Sources/TUIkit/VERSION as single source of truth for version string
- Read version at runtime via Bundle.module instead of hardcoded string
- Remove unused TUIkitVersion constant from Package.swift
- Fix version mismatch (was 0.1.0, actual is 0.4.0)
- Add LocalizationService singleton for managing language selection
- Implement XDG-compatible persistent language storage (macOS/Linux)
- Create translation JSON files for 5 languages (EN, DE, FR, IT, ES)
- Add LocalizationService to EnvironmentValues
- Support dot-notation keys for string resolution
- Implement fallback to English for missing keys
- Update Package.swift to include translation resources
- All 1069 tests pass
- Extract 12 pure type definitions (Color, Palette, Appearance, BorderStyle, etc.) into TUIkitStyling module with no dependencies
- Extract 3 image processing files (RGBAImage, ImageLoader, ASCIIConverter) into TUIkitImage module (deps: CSTBImage, TUIkitStyling)
- Split 6 mixed files into type definitions (TUIkitStyling) and environment glue (TUIkit/Styling/)
- Decouple ThemeManager from AppState via renderTrigger closure
- Decouple ASCIIConverter from ANSIRenderer via local ANSIEscape constants
- Add @_exported imports in Exports.swift for backward compatibility
- All 1064 tests pass, no breaking API changes
- Add Image view rendering local files and URLs as colored ASCII art
- Add CSTBImage C target wrapping stb_image for cross-platform image decoding
- Add ASCIIConverter with block, ASCII, and braille character sets
- Support trueColor, ANSI-256, grayscale, and mono color modes
- Add Floyd-Steinberg dithering for improved visual quality
- Add async image loading with URLImageCache for URL sources
- Add bracketed paste mode for bulk text insertion in text fields
- Add TextContentType modifier for input character filtering
- Add ContentMode enum and aspectRatio(_:contentMode:) View modifier
- Add text-input priority in key dispatch to prevent shortcut conflicts
- Add Image (File) and Image (URL) demo pages to example app
- Update DocC documentation with new symbols and layout table
- SwiftLint runs via CLI only (swiftlint lint), same as CI
- Removes SwiftLintPlugins dependency and DISABLE_SWIFTLINT env logic
- Faster local builds, no discrepancy between local and CI linting
The SwiftLint prebuild plugin cannot execute binary artifacts on
GitHub Actions macOS runners. Package.swift now checks for
DISABLE_SWIFTLINT=1 to conditionally skip the plugin.
The DocC workflow sets this variable.
- Remove dead code: legacy BorderModifier (70 lines), legacy FrameModifier (74 lines)
- Fix state-mismatch bug in Theme/Appearance setTheme()/setAppearance()
- Eliminate force unwraps in Panel.body and Menu.dividerLineIndex
- Remove anti-patterns: _ = self, pointless ternary, identical branches
- Rename all 1-2 char variables to self-descriptive names across 9 files
- Centralize ANSI constants: add dim, ansiPattern to ANSIRenderer
- Replace all hardcoded ANSI reset strings with ANSIRenderer.reset
- Replace raw ANSI regex with ANSIRenderer.ansiPattern in FrameBuffer
- Inline all local ANSIRenderer alias variables (13 removals)
- Replace manual CSI-building in BackgroundModifier with ANSIRenderer.backgroundCode()
- Migrate View.frame() to use FlexibleFrameView
- Update macOS deployment target from 10.15 to 13
- Remove redundant explicit raw values from DemoPage enum
22 files changed, 113 insertions(+), 310 deletions(-)
- Remove old VitePress, MkDocs, and legacy DocC workflows and files
- Add swift-docc-plugin dependency to Package.swift
- Create DocC catalog at Sources/TUIKit/TUIKit.docc/ with:
- Main landing page with full API topic organization
- Getting Started guide
- Architecture overview
- State Management guide
- Theming guide
- Add GitHub Actions workflow for DocC → GitHub Pages (macos-15)
- CNAME for tuikit.layered.work injected during CI build
- Clean up .gitignore (remove MkDocs/VitePress entries, add docs-output/)
BREAKING CHANGE: Package name changed due to name collision with
existing rensbreur/SwiftTUI package.
Changes:
- Rename package from SwiftTUI to TUIKit in Package.swift
- Rename Sources/SwiftTUI to Sources/TUIKit
- Rename Sources/SwiftTUIExample to Sources/TUIKitExample
- Rename Tests/SwiftTUITests to Tests/TUIKitTests
- Rename SwiftTUI.swift to TUIKit.swift
- Update all imports: import SwiftTUI -> import TUIKit
- Update all code references: SwiftTUI.renderToBuffer -> TUIKit.renderToBuffer
- Update documentation comments
- Rename swiftTUIVersion to tuiKitVersion
All 181 tests passing.
- Add @AppStorage and @SceneStorage for persistent settings
- Add @onAppear, @onDisappear and .task() lifecycle modifiers
- Add Preferences system for bottom-up data flow (child → parent)
- Add UserDefaultsStorage with Linux-compatible implementation
- Add flexible .frame() with minWidth/maxWidth/maxHeight/.infinity
- Fix BorderModifier to reduce availableWidth for content
- Fix StatusBar .justified alignment for equal edge spacing
- Fix Alert vertical expansion by removing Spacer
- Fix q-quit not working when StatusBar item has no action
- Fix render loop caused by statusBarItems modifier
- Add Linux compatibility (Glibc, XDG paths)