Release Notes
What's new in each version of Blazor Power Tools.
- chore: 10.9.39 — Server Monitor .rpm packages now ship in releases
- chore(test): bump test projects to BlazorPowerTools 10.9.38
- chore: 10.9.38 — re-trigger CI build and test deploy
- chore(test): bump test projects to BlazorPowerTools 10.9.37
- chore: 10.9.37 — TODO sweep across landing, about, MCP, docs, admin
- fix(admin-users): rework Create-user toolbar and form for better UX
- fix(mcp-server): remove license gate from BPT MCP Server download
- fix(about): tighten About copy and enlarge Bellivex logo
- fix(nav): force full navigation on Support link so logged-out clicks route to login
- docs(server-monitoring): adopt Download-page install layout with stop commands
- feat(servermonitor): build .rpm packages for Rocky Linux and CentOS Stream
- fix(home): swap visual hierarchy of pricing teaser cards
- fix(home): use generic 'bptuser' in SSH terminal mockup
- fix(home): remove static "What's new" band from landing page
- chore(test): bump test projects to BlazorPowerTools 10.9.36
- chore: 10.9.36 — About page now attributes BlazorPowerTools to Bellivex Labs
- chore(test): bump test projects to BlazorPowerTools 10.9.35
- chore: 10.9.35 — admin user management (create / disable / enable, force-password-change)
- fix(admin-ui): guard LoadUsersAsync after create-user success
- feat(admin-ui): Create-user form on All Users page
- fix(admin-ui): count only active licenses in the All Users table
- feat(admin-ui): Disable / Enable button on All Users page
- feat(admin-ui): Status column on All Users page
- fix(seed): skip claim seeding when support-user CreateAsync fails
- feat(seed): auto-seed support@blazorpowertools.com as Administrator
- fix(auth): surface UpdateAsync error when clearing MustChangePassword
- feat(auth): clear MustChangePassword on successful change
- fix(auth): ensure ForcePasswordChangeMiddleware runs after authentication
- feat(auth): ForcePasswordChangeMiddleware
- feat(di): register AdminUserService and IHttpContextAccessor
- feat(admin): AdminUserService.EnableUserAsync
- feat(admin): AdminUserService.DisableUserAsync
- feat(admin): AdminUserService.CreateUserAsync
- fix(data): renumber LicenseRevocationReason to avoid 0
- feat(licenses): add RevokeForUserAsync / ReinstateForUserAsync
- test: scaffold Bpt.Server.Tests xUnit project
- feat(data): add MustChangePassword + LicenseRevocationReason
- fix(pricing): mobile-responsive "Why BPT?" comparison table
- chore: 10.9.34 — mobile UI fixes, PostgreSQL column-type repair, migration guard
- chore: 10.9.33 — admin & payments hardening, theme-builder dark mode, chart rotation 360°
- chore: 10.9.32 — support-ticket dev workflow + threading + admin review
- chore: 10.9.31 — UI/UX revision, Stripe checkout fix, AI proxy & cloning
- chore: bump to 10.9.30
- docs(site): Developing-with-MCP walkthrough + MCP page refresh
- feat(mcp): add charts, design-system, and implementation-plan skills
- feat(site): add Charts card to the home features section
- fix(charts): responsive width — charts shrink to fit narrow viewports
- fix(db): promote int PKs to GENERATED IDENTITY on PostgreSQL (10.9.29)
- fix(db): convert mis-typed bool columns to native boolean on PostgreSQL (10.9.28)
- chore: bump to 10.9.27
- fix(charts): funnel 3D as one solid + finish pink Charts color in nav/docs
- feat(charts): Item3DRotation rename + Rotation2D, polar 3D fix, pink Charts color, templated tooltips everywhere
- feat(charts): templated tooltips via BptGraphItemTemplate + DataItem on every chart
- feat(charts): defaults, funnel polish, diffuse light, donut hole 3D, polar 3D rims
- feat(charts): unified ShowItemBorder/ItemBorderColor + Bullet bands off by default
- fix(charts): disable scroll-wheel zoom by default across all charts
- feat(charts): BptChartFunnel — horizontal orientation + parallel sub-ribbons
- fix(charts): pie data labels follow slice rotation in 3D mode
- feat(charts): embed BptChartColorGenerator in every chart demo
- fix(charts): drop timeline-slider gradient background
- feat(charts): BptChartBubble — ShowMarkerBorder + MarkerBorderColor params
- fix(charts): theme integration — BptThemeBuilder Charts tiles + live theme colors
- feat(charts): Phase 6 complete — BptChartTrendline with regression + CI band
- feat(charts): Phase 5b complete — BptChartTreeMap with squarified layout
- feat(charts): Phase 5a complete — BptChartBoxWhisker (Tukey 5-number summary)
- feat(charts): Phase 5a/3 — BptChartBullet (target vs actual, qualitative bands)
- feat(charts): Phase 5a/2 — BptChartBubble (X, Y, Size encoded as area)
- feat(charts): Phase 5a/1 — BptChartFunnel (stacked trapezoids)
- feat(charts): Phase 4 complete — BptChartPolar (Nightingale / coxcomb)
- feat(charts): Phase 4a — BptChartRadar introduces the polar coordinate system
- feat(charts): Phase 3 complete — BptChartDateAxis + shared BptChartDateScale
- feat(charts): Phase 3 — BptChartHistogram with auto-binning
- feat(charts): Phase 3 — BptChartScatter on continuous X/Y axes
- feat(charts): Phase 3 — BptChartLine with FillArea, smoothing, markers
- feat(charts): Phase 2 redo — Pie/Donut demos match BarChart parameter parity + new-chart skill
- feat(charts): Phase 2 — BptChartPie + BptChartDonut
- fix(charts): position timeline slider below the canvas title (no overlap)
- feat(charts): timeline playback — animated slider, space-to-play, drag-to-scrub, 15 FPS interpolation
- feat(charts): specular lighting, title styling, axis-line + guide-line customisation
- feat(charts): cube-correct 3D faces, ShowTitle, label color/font-size, aspect-ratio LockScale, PNG clipboard snapshot
- fix(charts): 3D backface selection, vectorised LockScale, Y-axis label clamp
- feat(charts): cross-cutting requirements — tooltips, axis/data labels, lock-scale, real 3D look
- feat(charts): Phase 1 foundation — Charts category, BptChartBase, BptChartColorGenerator, BptChartBar smoke-test
- feat: EULA acceptance for license purchase + combined admin Test page
- fix(demos): migrate 11 demos to BlazorDemoParametersCard + add missing translations
- refactor(admin): consolidate BugReports/Improvements/Tickets into single Requests page
- chore(test-wasm): bump to 10.9.26
- feat(site): tutorials, hero overlay, auth redirect, NuGet customer-facing cleanup
- chore(test-wasm): bump to 10.9.25 and stub DataFlow test page
- refactor(demos): collapsible parameters card + theme-friendly chrome
- docs: four remaining tutorials — STT, image processing, admin dashboard, custom theme
- docs: two beginner tutorials — form controls and date/time pickers
- docs: tooltips on Required/Cascading/Nullable badges
- fix(db): correct PostgreSQL column types for Teams/PricingSettings
- feat: real built-in UI for AI components + grid tiles, theme builder
- feat(demos): friendly demo titles + component name as subtitle
- fix(i18n): demo translation polish — callbacks, typo, themes, missing param headers
- fix(i18n): route demo L() helper through BptCultureState
- chore: in-progress work — component lib, pages, services, JS, docs
- feat(i18n): translate demo pages — descriptions, parameter cards, shared chrome
- feat: theme builder + control improvements; add dual-NET release skill
- feat(teams): round-2 team licensing — opt-out, admin pricing, billing safety
- fix(releases): explicit MapGet endpoint + sort tiebreaker
- fix(releases): always register /releases static-file middleware
- fix(downloads): let admins/moderators access license-gated downloads
- feat(mcp): add BPT-Expert MCP server image + license-gated download
- docs(skills): refresh skillset bundle for chat panel + landing page
- feat(ai): extract reusable BptAiChatPanel with BYOK + model picker
Maintenance release.
Maintenance release.
- fix(releases): explicit MapGet endpoint + sort tiebreaker
- fix(releases): always register /releases static-file middleware
Maintenance release.
Maintenance release.
- fix(downloads): let admins/moderators access license-gated downloads
- feat(mcp): add BPT-Expert MCP server image + license-gated download
- docs(skills): refresh skillset bundle for chat panel + landing page
- feat(ai): extract reusable BptAiChatPanel with BYOK + model picker
- feat(image-editor,ai): in-canvas AI chat panel with multi-vendor support
- fix(theming): make Dark/Nord cascade reach BptImageEditor and BptDataFlow
- Add landingpage product demo on frontpage
- Fixed popup on start
- feat(landing-page): align Page Settings/Components subtabs with device bar in minified mode
- feat(landing-page): minified mode, translations sweep, sub-component label localization
- feat(test): add BptDataFlow lifecycle test setup with server host
- feat(landing-page,banner): menu navigation, palette unification, ad copy
- feat(dataflow): add 4 new test flows for Email, SQLite, FTP, and Azure Function
- fix(dataflow): harden all connectors for production use
- wip(landing-page): unify color picker + editor-hidden toggle [skip ci]
- feat(landing-page): grid cells, toolbar, drag-to-cell; extract BptButton CSS
- feat(dataflow): add full connector implementations to Windows service
- Landingpage fixes
- feat(landing-page): sliders, label colors, format toolbar, device preview
- feat(landing-page): fix element selection UX and add CTA button styling fields
- fix(landing-page): clicking CTA/button sub-components selects their properties, not the section
- fix(landing-page): fix section selection toggle, focused field properties, rename Section tab
- fix(landing-page): restore text selection before applying font color from picker
- fix(landing-page): suppress sidebar transition during panel drag
- feat(landing-page): switch Properties tab when inline editing activates
- feat(landing-page): add font color button to inline text toolbar
- fix(landing-page): make sections list visible in all sidebar tabs, fix three-way sync
- refactor(landing-page): remove floating CSS editor, HTML modal, and left panel CSS tab styles
- feat(landing-page): add three-way selection sync between preview, sections, and editors
- feat(landing-page): add unified CSS editor with scope highlighting and auto-apply
- feat(landing-page): add syntax-highlighted HTML editor in right panel
- feat(landing-page): restructure right panel with Sections/HTML/CSS tabs, resizable width
- feat(landing-page): add panel resize JS with localStorage, editor scroll sync, remove draggable
- feat(landing-page): add HTML and CSS syntax tokenizers
- fix(landing-page): use theme-adaptive colors for CSS scope headers
- fix(dataflow): fix Kafka consumer failing on topic metadata
- release: bump to v10.9.14
- fix(dataflow): fix connector bugs for Kafka, SFTP, MySQL, and MongoDB
- BptLandingpageCommands
- fix(dataflow): add JsonProtocol config to DataFlowWorker HubConnectionBuilder
- chore(landing-page): remove dead _showThemePicker/_showExportMenu fields, ToggleThemePicker, and orphaned CSS rule
- fix(landing-page): notify parent on tab close/rename, cancel bg timer on dispose, improve export label and filename sanitization
- feat(landing-page): add slug duplicate warning in page settings
- feat(landing-page): render BptButton sub-components in section content with page link resolution
- fix(landing-page): guard selEntity.fields null in sub-component panel foreach
- feat(landing-page): add Button sub-component property panel with page picker
- fix(admin): remove unused @using BlazorPowerTools.Server.Services from MainLayout
- fix(dataflow): wire demo pages to real bpt_dataflow Docker services
- fix(admin): move @using BlazorPowerTools.Server.Services to correct position in MyAccount
- feat(admin): apply view mode to MyAccount admin section cards
- feat(landing-page): add New Page popup with template+theme picker and New Project confirmation
- feat(admin): wire AdminNavLinks and AdminViewPill into MainLayout
- feat(admin): add AdminNavLinks interactive island with view mode awareness
- fix(admin): add type=button to AdminViewPill buttons to prevent accidental form submit
- feat(admin): add AdminViewPill floating mode switcher component
- fix(landing-page): fix tab rename Enter key, autofocus, smooth tab scroll
- fix(admin): use local handler capture to avoid event race in AdminViewModeService
- feat(admin): add AdminViewModeService singleton for per-user view mode
- feat(landing-page): replace Export+Themes buttons with File menu and Project Settings
- feat(landing-page): add multi-page tab strip with scroll and inline rename
- fix(landing-page): flush pending edits on tab switch, init content theme from doc, fix async discard
- feat(landing-page): migrate to LandingPageProject with internal tab infrastructure
- feat(landing-page): add LandingPageProject model and Button sub-component type
- feat(landing-page): add BptlSerializer v2.0 project format with backward-compat fallback
- feat(demo): add offline storage toggle to server map demo
- feat(demo): add offline storage toggle to WASM map demo
- feat(map): add BptMapOfflineStorage component with UI and plugin adapter
- feat(map): add bptMapOfflineStorage.js with IndexedDB, tile resolver, overlay, and selection mode
- feat(map): add offline tile resolver hook in renderTiles()
- feat(map): add BptOfflineArea and BptOfflineDownloadProgress models
- BptLandingpage first version
- Add BptRichTextEditor component with full export/import pipeline
- Add chinese lang
- Add bpt culture js
- Add Bpt component translations
- bump version to 10.9.13
- fix(BptTerminalClient): Auto theme now follows site theme changes
- feat(BptLanguage): unified culture/language infrastructure with nav bar selector
- Fixed theme config
- ignore skills zip file created on build
- BptError white page fix
- BptError
- BptGrid and BptFilter
- feat(BptGrid): add demo pages and navigation entry
- feat(BptGrid): add JS module for filter popup handling
- feat(BptGrid): add core grid and column components
- feat(BptGrid): add enums and event args classes
- feat: add BptFilter generic filter component
- feat: BptLoader - classic spinner, Size slider, themed preview, Small mode fix
- feat: add BptProgressCircle demo pages, navigation entry, and theming support
- feat: add BptProgressCircle SVG-based circular progress component
- feat: use GradientColor for striped pattern via CSS variable --bpt-stripe-color
- feat: add BptProgressBarCircle enums
- feat(demo): update ProgressBar demo with GradientColor and SegmentCount controls
- feat: rework WebGL shaders in bptProgressBar.js
- feat(BptProgressBar): add GradientColor, GradientColorHex, SegmentCount parameters
- refactor: remove Wave, Particle, GradientSweep from BptProgressBar
- fix(carousel): address marquee code review issues
- feat(carousel): add marquee mode to server demo
- feat(carousel): add marquee mode to WASM demo
- feat(carousel): wire marquee JS interop lifecycle
- feat(carousel): add marquee JS engine (init/update/pause/resume/dispose)
- feat(carousel): add marquee rendering path and CSS
- feat(carousel): add marquee mode parameters
- feat(carousel): add BptCarouselMode and BptMarqueeDirection enums
- feat: v10.9.12 - BptSlider Label param, BptLoader WebGL fixes and shader improvements
- feat: component enhancements, demo updates, BptLoaderShape, BptDialogue, date selectors
- feat: v10.9.11 - BptUpload enhancements: ButtonMode, ItemTemplate, visibility toggles
- feat(demo): mirror BptUpload demo enhancements to WASM client
- feat(demo): add ButtonUpload, CustomTemplate, ButtonWithTemplate configs to Upload demo
- feat(BptUpload): add ItemTemplate for custom file row rendering
- Merge branch 'feat/image-editor-collapsible-panels' into main
- fix(BptUpload): add optional chaining to JS interop and doc comment for ButtonMode precedence
- feat(loader): integrate WebGL rendering into BptLoader.razor with CSS fallback
- feat(loader): add bptLoader.js WebGL renderer with all 5 shape shaders
- feat(BptUpload): add ButtonMode with BptButton pass-through parameters
- feat(BptUpload): add ShowDropZone and ShowUploadedFiles visibility toggles
- fix(progressbar): address code review issues
- feat(progressbar): update server demo with BptColorSelector and animation dropdown
- feat(progressbar): update WASM demo with BptColorSelector and animation dropdown
- feat(progressbar): wire JS interop lifecycle for WebGL animations
- feat(progressbar): add WebGL animation JS module with all 5 shaders
- feat(progressbar): add canvas overlay markup and CSS fallback animations
- feat(progressbar): add ColorHex, Animation params with backward compat
- feat(progressbar): add BptProgressBarAnimation enum
- feat(image-editor): add collapsible panels for Properties, Adjustments, and Banners
- fix slnx file
- v10.9.10: Refraction effect rewrite, Perspective/Refraction zoom & depth, font picker fixes, DataFlow component, map/UI improvements
- fix(image-editor): address security and resource management findings from code review
- feat(image-editor): add document-open prompt before loading web fonts
- feat(image-editor): add CSS fallback chain for web fonts in renderText
- feat(image-editor): replace font
- feat(image-editor): add JS font picker dropdown with lazy preview and search
- feat(image-editor): add font catalog loading and Google Font CSS fetch/parse
- fix(image-editor): fix font catalog category grouping and Pacifico classification
- feat(image-editor): add bundled font catalog (~175 Google Fonts)
- fix(map): remove display:none wrapper so plugin overlays render
- fix(map): address code review issues in datapoints/bargraph plugins
- feat(map): add flight tracking simulation demo pages and nav links
- feat(map): add BptMapBarGraph component with drill-down filtering
- feat(map): add bptMapBarGraph.js with animated bar chart and drill-down interaction
- feat(map): add BptMapDatapoints component with canvas rendering and timeline
- feat(map): add bptMapDatapoints.js canvas renderer with spatial grid and hit testing
- feat(map): add plugin view-change callbacks and expose projection functions
- feat(map): add plugin registration API to BptMap
- feat(map): add plugin interfaces and datapoints model classes
- Change clone stamp source-set from Alt+click to Ctrl+click
- Add Channels tab, inline toolbar, tab bar restructure, and multiple UI improvements
- Add missing BPTI/BPTT format support for curves, levels, blur, layer effects, smart filters, and skew
- Fix calligraphy pen rendering: position offset and shape fidelity
- BptImageEditor: bitmap snapshot drag compositing for persistent effects during drag
- Fix spray tool duplicate emitter caused by leaked pointer event listeners
- BptImageEditor: custom banner formats, startup UX, and demo updates
- Update test project to BlazorPowerTools 10.9.8
- BptImageEditor: multiple UX improvements
- Update test project to BlazorPowerTools 10.9.7
- Fix StartFreshBanner: re-init JS state and cancel auto-save
- Update test project to BlazorPowerTools 10.9.6
- Change image editor zoom shortcut from Alt+scroll to Ctrl+scroll
- Fix StartFreshBanner to properly reset state and show format dialog
- BptImageEditor: Show banner format selection on fresh start instead of default
- Add test project to solution under /Test/ folder
- Read license from embedded resource instead of public wwwroot static file
- BptImageEditor: freeze/play toggle for all animation presets, banner mode fixes
- Fix BptImageEditor light theme, add mobile logo, publish AI NuGet in CI
- Theme Bootstrap tables via scoped CSS instead of inline styles
- Fix dark theme support across multiple components and demo pages
- Add theme system: 4-theme demo switcher, density presets, ThemeBuilder persistence, and Tailwind isolation
- Integrate BptImageEditor into BptThemeBuilder with CSS custom properties
- Fix 2D water ripple showing different image than background
- Rewrite WaterRipple 2D renderer with displacement-based rendering
- Fix demo page tools, navbar z-index, WebComponent inputs, and misc config updates
- v10.9.2: BptImageEditor enhancements — shapes, layers, banners, stroke, tabs
- Add mask undo/redo, fix fill-image drag, improve soft brush falloff
- Fix BannerEditor: canvas clearing on switch, tools broken, shared asset release