Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.11.3] - 2026-03-08
Fixed
- Fixed dev audit issues: updated dev dependencies (rollup 4.59.0, ajv 8.18.0, minimatch 9.0.9) via
npm audit fix
[0.11.2] - 2026-03-08
Fixed
- Updated
test-publisheddependencies:@frybynite/image-cloudto^0.11.1andviteto^7.0.0
[0.11.1] - 2026-03-08
Changed
- Reorganized
parameters.mdwith improved section order: Loaders → Layouts → Image Size & Style → Animations → Event Callbacks → Interaction → UI → Debug - Renamed "Pattern-Based Configuration" to "Structure Overview"
- Moved Styling into the Image Size & Style section
- Promoted layout algorithms to subsections of Layouts (no longer top-level)
- Grouped all entry animation subsections under Animations
- Added reference to
layouts.mdfrom the Layouts section - Added layout screenshot images to
layouts.mdfor all 7 algorithms - Added
scripts/screenshot-layouts.mjsutility for generating layout screenshots
[0.11.0] - 2026-03-07
Added
Event Callbacks (on) — comprehensive lifecycle hook system covering all major image events:
- State change hooks (existing, now documented alongside new hooks):
onImageHover,onImageUnhover,onImageFocus,onImageUnfocus - Loading lifecycle hooks:
onBeforeImageLoad,onImageLoaded,onImageError,onLoadProgress,onGalleryReady onBeforeImageLoadsupports two modes: URL-only transform (zero overhead) and fetch mode (fullRequestInitfor auth headers, custom cache, credentials)onGalleryReadyprovides total load duration- Entry animation hooks:
onEntryStart,onEntryProgress(per-rAF, JS paths only),onEntryComplete onEntryProgressfires onbounce,elastic, andwavepaths; not on CSS-transitionedlinearpaths- Layout hook:
onLayoutComplete— fires after layout algorithm runs, before images load; provides fullImageLayout[], container bounds, and algorithm name
New exports: BeforeLoadContext, BeforeLoadResult, ImageLoadedContext, ImageErrorContext, LoadProgressContext, GalleryReadyContext, EntryAnimPoint, EntryStartContext, EntryProgressContext, EntryCompleteContext, LayoutCompleteContext
Examples:
- examples/api-hooks.html — 5-panel technical reference demo with live event logs for every hook group
- examples/hooks-example.html — extended with loading progress bar (onLoadProgress), ready toast (onGalleryReady), and dismissable layout chip (onLayoutComplete)
[0.10.3] - 2026-03-05
Changed
- Removed
mouseWheelstub from public API (NavigationInteractionConfigintypes.tsanddefaults.ts) — unimplemented and never functional - Removed
navigation.mouseWheelfromdocs/parameters.md
Docs
- Deleted 21 completed/superseded planning documents from
docs/plans/(directory now empty) - Added
docs/architecture.md— engine system overview, loader pattern, design principles, stability policy - Added v2.0 loader config simplification proposal to
docs/backlog.md - Added pre-existing "applies rotation transforms" test failure to active issues in
docs/backlog.md
[0.10.2] - 2026-03-05
Fixed
- Fixed and enabled 4 permanently-skipped swipe gesture tests (
test.skip→ active) - Touch simulation now uses real
Touch/TouchEventconstructors (Chrome) withcreateEvent('Event')fallback for WebKit wherenew Touch()is an illegal constructor - Added
test.use({ hasTouch: true })to enable touch APIs in Chromium test contexts - Added 50ms delay between
touchstartandtouchmoveto keep swipe velocity below SwipeEngine threshold, so only distance determines navigation in tests - Replaced DOM-position-based image lookups with
dataset.imageId-based lookups to eliminate non-determinism from async image load order under parallel test execution - Cleared pre-release review doc (both items resolved: skipped swipe tests and hover-after-unfocus bug)
[0.10.1] - 2026-03-04
Changed
- Updated documentation; publish with mkdocs
- Set up MkDocs with Material theme for GitHub Pages publishing
- Renamed all docs files to lowercase; moved CHANGELOG.md into docs/
- Reviewed and updated CONFIGURATOR.md, LAYOUTS.md, LOADERS.md, PARAMETERS.md against code
- Added docs/index.md homepage, docs/examples.md, docs/changelog.md to nav
- Updated publish-pages.yml to build with mkdocs; copies configurator/, examples/, dist/ into site/
- Added requirements.txt pinning mkdocs and mkdocs-material versions
- Updated README.md with GitHub Pages links, honeycomb layout, swipe gestures
[0.10.0] - 2026-03-03
Added
imageCloud()factory function for single-expression initialization — constructs and callsinit()in oneawaitexpression- Actionable error messages: missing container, no loaders, and missing
data-confignow include remediation guidance
[0.9.6] - 2026-03-03
Added
- Tests:
ImageFilterunit tests — 30 new unit tests covering default extensions, case insensitivity, query-string stripping, edge cases (no extension, empty string, multiple dots, URL fragments), custom extensions, and defensive-copy semantics ofgetAllowedExtensions(). - Tests:
requiresJSAnimationunit tests — 5 new unit tests verifying all 5 path types (bounce/elastic/wave →true, linear/arc →false). - Tests:
destroy()cleanup — 3 new e2e tests confirming images are removed from the DOM afterdestroy(), thatdestroy()beforeinit()is safe, and that a container can be reused after destroy. - Tests: single-image edge cases — all 7 layout algorithms verified to initialize without error when given exactly 1 image.
Fixed
- Radial layout center-position test — loosened tolerance from 20% to 25% of viewport size; the 20% threshold was narrower than the layout's actual adaptive sizing can produce, causing intermittent failures.
[0.9.5] - 2026-03-01
Fixed
- CHANGELOG: 0.9.4 entry corrected to include missing hover-style fix and
SharedLoaderConfigremoval.
[0.9.4] - 2026-03-01
Added
ui.showNavButtons: Optional prev/next‹ ›navigation buttons that appear when an image is focused and hide on unfocus. Follows the same pattern asshowImageCounter. Custom elements supported viaprevButtonElement/nextButtonElement. Clicks usestopPropagation()to prevent accidental unfocus.ui.showFocusOutline: Controls the gallery container's focus ring. Defaultfalsesuppresses the browser's:focusoutline and shows a subtle accent-coloured inset outline only while an image is focused. Set totruefor a light blue inset ring. Style via.fbn-ic-gallery.fbn-ic-has-focus { outline: ... }.- Configurator: Show Nav Buttons and Show Focus Outline checkboxes added to the UI section.
- Tests: 9 Playwright tests for nav buttons (enabled + disabled fixtures).
- Docs:
parameters.mdupdated with newuirows and a focus outline customisation section.
Fixed
- Hover styles after unfocus: When an image unfocuses and returns under the cursor,
mouseenterdoes not re-fire (cursor never left). ArequestAnimationFramecallback inonUnfocusCompletenow re-applies hover styling if the cursor is still over the element.
Removed
SharedLoaderConfigremoved from public exports (src/index.ts) — internal type, not intended for consumer use.
[0.9.3] - 2026-03-01
Added
uitop-level config key: Promotedrendering.uito a top-leveluinamespace. Oldrendering.uistill works with a deprecation warning for backwards compatibility.- Configurator: New UI accordion section (above Config) with Show Loading Spinner and Show Image Counter checkboxes.
Removed
rendering.responsivenamespace — was entirely unimplemented stubs (breakpoints.tablet,breakpoints.desktop,mobileDetection); removed from types, defaults, adapter, and docs. Therenderingkey is now fully gone from the config.UIRenderingConfigtype — replaced byUIConfigin the public API.
Changed
UIRenderingConfigrenamed toUIConfigin exported types.
[0.9.2] - 2026-03-01
Added
interaction.navigation.keyboard: New boolean flag (default:true) to enable/disable arrow key and Escape keyboard navigation per gallery instance. Keyboard events are now scoped to the container element (requires clicking the gallery to focus it first) rather than the globaldocument, so multiple galleries on the same page operate independently.interaction.navigation.swipe: New boolean flag (default:true) to enable/disable touch swipe gesture navigation per gallery instance. Useful when the gallery is embedded in a scrollable container where swipes should scroll rather than navigate.- Configurator: Navigation group added to the Interaction section with Keyboard Navigation and Swipe Gestures checkboxes.
- Example:
examples/keyboard-navigation-demo.html— side-by-side demo showing per-container keyboard navigation enabled vs disabled. - Tests: 3 new Playwright tests in
test/e2e/navigation-disabled.spec.ts; updated existing keyboard tests to focus container before key presses.
Changed
- Gallery containers now have
tabindex="0"applied automatically, making them keyboard-focusable.
Removed
animation.performanceconfig namespace (useGPU,reduceMotion) — was never implemented; GPU acceleration is unconditionally applied via CSS.animation.queue.maxConcurrent— was never implemented; removed from types and defaults.getBounceCSSEasing()— unused exported function removed fromPathAnimator.layout.spacing.minGap— was defined but never read by any layout; removed from types, defaults, adapter, and docs.
Fixed
HoneycombPlacementLayoutis now exported from the public API (was missing, inconsistent with other layout classes).interaction-disable-draggingtest fixture used wrong property name (disableDragging→dragging: false).
[0.9.1] - 2026-03-01
Added
interaction.disableDragging: New boolean option (default:false) that setsdraggable="false"on each image element, suppressing the browser's native click-drag ghost-image behavior.- Configurator: Single checkbox in the Interaction section (matching the debug checkbox style) — auto-refreshes the gallery on change and only emits the property when checked.
- Tests: 3 new Playwright tests in
test/e2e/interaction.spec.tscovering default, enabled, and explicit-false cases, with a dedicated fixturetest/fixtures/interaction-disable-dragging.html. - Docs:
interaction.disableDraggingrow added toparameters.mdand tooltip added tofield-descriptions.json.
[0.9.0] - 2026-02-26
Added
- Idle Animation: New
animation.idleconfiguration for continuous ambient animations on gallery images. Supports five types: wiggle— images gently rock back and forth (rotation)pulse— images breathe in and out (scale)blink— images flash on/off withsnaporfadestylespin— images continuously rotate clockwise or counter-clockwisecustom— user-supplied Web Animations API animation or teardown functionanimation.idle.sync:'random'staggers phases per image;'together'uses a shared rAF loop to stamp identicalcurrentTimeon every animation each frame, guaranteeing perfect phase sync.animation.idle.startDelay: Configurable delay (ms) before idle starts after an image appears. Defaults to entry animation duration.- Idle + Focus integration: Idle animation pauses immediately when an image is clicked/focused; resumes with a fresh animation after the unfocus animation fully completes.
- Blink opacity: Blink
'on'opacity reads from the element's computed style, honoring configured default and hover opacity values. - Configurator: Idle Animation section added inside the Animation accordion (Type, Start Delay, and type-specific sub-controls).
- Docs:
animation.idlesection added toparameters.mdandfield-descriptions.json. - Tests: 12 new Playwright tests in
test/e2e/idle-animations.spec.ts.
[0.8.3] - 2026-02-25
Added
examples/layout-algorithms.html: Added interactive tightness slider to Radial Layout section, matching the pattern of other layouts.
Fixed
docs/layouts.md: AddedRadialAlgorithmConfigdocumentation block for the Radial layout (type, default, range, visual characteristics).docs/configurator.md: Updated algorithm-specific options list to include radial (tightness) and wave controls.docs/backlog.md: Cleaned up completed honeycomb item from ideas; refined radial ring-fill idea to reflect that tightness was implemented.
[0.8.2] - 2026-02-25
Added
layout.radial.tightness: New parameter controlling radial ring spacing independently of image size. Higher values pack rings closer together; lower values spread them further apart. Default:1.0. Range:0.3–2.0.- Configurator: Added Tightness control for Radial layout.
- Tests: Added
layout-radial.spec.tswith 16 tests covering rendering, tightness, and edge cases.
Fixed
- Radial layout: Decoupled ring spacing from
densityFactor— rings now use container geometry as the base, so changing image size no longer affects ring positions. - Configurator: Wave
rowsdefault corrected to1(was3). - Configurator: Wave Synchronization moved above Phase Shift; Phase Shift is now hidden and disabled unless Synchronization is set to
offset.
[0.8.1] - 2026-02-25
Fixed
- Example pages: Fixed compressed gallery boxes in Entry Animations and Image Style demos — CSS selector
.image-cloud.fbn-ic-gallerynever matched (ImageCloud only addsfbn-ic-gallery); corrected to.fbn-ic-galleryand bumped height to 500px to match Layout Algorithms demo. - Layout Algorithms Demo: Added Honeycomb section with spacing slider; removed standalone
honeycomb-demo.html.
[0.8.0] - 2026-02-25
Added
- Honeycomb Layout: New
layout.algorithm: 'honeycomb'places images in hexagonal rings filling outward clockwise from center-top. Default and hover clip paths are automatically forced to hexagon height-relative for edge-to-edge tiling; focused clip path remains user-configurable. layout.honeycomb.spacing: Extra gap in pixels between hexagons (default: 0 = edge-to-edge tiling).
Fixed
- Honeycomb container fit: Image height is now automatically capped so the outermost ring always fits within the container bounds. Previously, adaptive sizing could produce images large enough to push outer-ring images offscreen.
- Regular hexagon proportions: Clip-path hexagon reference points updated to use circumradius
r = 100/√3, giving properwidth:height = 2:√3proportions. Previous hexagon was ~15% too tall. Column-step ratio updated from 0.75 to√3/2 ≈ 0.866to maintain edge-to-edge tiling. - Clip-path centering:
calculateHeightRelativeClipPathnow derives the shape's bounding-box center from its actual points rather than assuming a square reference box, correctly centering the regular (non-square) hexagon.
Changed
- Configurator: Density Factor and Min Gap controls are hidden when Honeycomb is selected (neither has any effect on the honeycomb layout).
- TypeScript: Pinned to
~5.8.2to silence api-extractor version mismatch warning until api-extractor ships support for TS 5.9.x.
[0.7.7] - 2026-02-24
Released
- Merged to main branch with full verification: all 713 tests passing (99.8% pass rate)
- Production-ready release with focused state styling fixes and height-relative clip-path mode
- All features from 0.7.5 and 0.7.6 verified and working correctly
[0.7.6] - 2026-02-24
Fixed
- Focused State Styling: Fixed focused state styling properties (opacity, filters, borders, shadows, outline, cursor, objectFit, aspectRatio) not being applied when an image is focused/zoomed. These properties are now correctly applied in
applyFocusedStyling()and restored inremoveFocusedStyling().
Tests
- Test improvements: Fixed 20 failing tests, improving pass rate from 690 passing to 710 passing (98.1% pass rate). All 118 styling tests now pass; all 48 clip-path tests remain passing.
[0.7.5] - 2026-02-24
Added
- Height-Relative Clip-Path Mode: New clip-path scaling mode that scales shapes based on image height for consistent, aspect-ratio-aware sizing across different image proportions. Ideal for portrait images.
- Clip-Path Animation: Smooth clip-path transitions during focus/unfocus animations. Clip-path continuously updates each frame as dimensions animate, staying perfectly centered.
- Configurator Improvements: Height-relative mode now default in clip-path selector; improved indentation of mode control under Clip Path section.
Fixed
- Focused State Clip-Path: Fixed focused state to properly clear clip-path when explicitly set to 'none' or when focused styling doesn't define clipPath.
- Z-Index During Unfocus: Fixed z-index to remain high throughout unfocus animation, only resetting to original value after animation completes. Ensures unfocusing image stays on top while shrinking.
- Clip-Path Centering: Improved centered positioning calculation for height-relative mode, using actual animated element dimensions instead of calculated values.
Changed
- Default Clip-Path Mode: Changed default from 'percent' (responsive) to 'height-relative' (aspect-ratio aware) for better portrait image handling.
- Clip-Path Mode Labels: Simplified mode labels from "Percent (Responsive)" and "Height-Relative (Consistent)" to "Percent" and "Height-relative".
Documentation
- Updated parameters.md with detailed clip-path modes, examples, and animation behavior.
- Updated configurator.md with clip-path feature documentation.
- Updated types.md with ClipPathConfig interface and mode descriptions.
[0.7.4] - 2026-02-23
Fixed
- Focused state clip-path handling: Fixed
styleUtils.tsto properly handleclipPath="none"by usingclip-path: unset;instead of invalidclip-path: none;CSS value. This allows the focused state to properly clear clip-path from the default state. - Configurator clip-path config persistence: Fixed config builder in
configurator/index.htmlto include "none" as a valid clip-path override value in the generated JSON configuration. - Test fixture loader imports: Removed non-existent
/dist/loaders/all.jsimport fromtest/fixtures/static-basic.htmlsince loaders are already exported from the mainimage-cloud.jsfile. - Wave layout test threshold: Lowered horizontal distribution threshold from 200px to 150px to accommodate mobile viewport widths.
Removed
- Obsolete loader subpath tests: Removed 10 tests for deprecated loader split architecture (v0.6.x) that was reverted in v0.7.0. Tests included Loader Subpath Exports and Real-world Package Usage Pattern describe blocks.
Tests
- Test improvements: Fixed 39 failing tests, improving pass rate from 93% (649/700) to 98.4% (689/700).
- Added loader subpath exports to package.json: Added exports for
./loaders/static,./loaders/google-drive,./loaders/composite, and./loaders/allpointing to unified bundle (though separate loaders are no longer built).
[0.7.3] - 2026-02-22
Removed
- Removed unused
rendering.uistubs:showThumbnailsandthemeproperties from configuration types, defaults, and backlog. These features were never implemented and have been removed after review to keep the codebase clean.
Reviewed
- Skipped test review: Confirmed that the "spinner is visible during slow image loading" test (
test/e2e/loading-spinner.spec.ts:41) remains skipped due to timing unreliability. Other spinner tests provide adequate coverage;loading-spinner-slow.htmlis available for manual testing.
[0.7.2] - 2026-02-22
Changed
- Wave Layout Demo: Added "1 Row" option to wave layout selector and made it the default for better initial display of the wave algorithm
Fixed
- Layout Algorithms Demo: Fixed CSS selector in layout-algorithms.html that was looking for non-existent
.image-cloudclass combined with.fbn-ic-gallery. The.image-cloudclass is not applied by JavaScript and should not be in the CSS selector. - Layout Algorithms container height: Increased container height from 400px to 500px to provide adequate space for image layouts without excessive empty space
Removed
- Removed unnecessary class="image-cloud" attribute from all example files. This class is not used by the library (not referenced in JavaScript or CSS) and was cargo-cult code.
[0.7.1] - 2026-02-22
Fixed
- Vite build config: Removed stale external dependencies from rollupOptions that referenced non-existent loader subpath bundles (
@frybynite/image-cloud/loaders/static,google-drive,composite) from v0.6.0 loader-split approach. Build configuration now accurately reflects unified bundle architecture.
[0.7.0] - 2026-02-22
Changed
- Reverted loader-split architecture to unified bundle approach for stability and simplicity. After v0.6.0 attempted to split loaders into separate bundles for bundle size optimization, this reversion consolidates all loaders back into the main bundle.
- Removed LoaderRegistry pattern — loaders are now included in the main bundle and don't require dynamic registration via separate bundle imports
- Simplified API: Removed separate loader subpath exports (
@frybynite/image-cloud/loaders/static, etc.). Users now import only from main package:import { ImageCloud } from '@frybynite/image-cloud' - Build simplification: Removed separate vite build configurations for individual loader bundles. Single unified build now outputs main ESM, UMD, React, Vue, and Web Component variants
Removed
- Removed all references to separate loader bundle imports from documentation (README, PARAMETERS, LOADERS, API guides, examples)
- Removed "Bundle Size Optimization" section explaining the loader registry pattern
- Removed LoaderRegistry class and related infrastructure
Fixed
- Stability: Unified architecture eliminates module resolution complexity and circular dependency risks from loader-split approach
- All 589 tests passing with faster execution (4.1 minutes vs 11.5+ minutes in split architecture)
[0.6.5] - 2026-02-22
Fixed
- Loader Registry Pattern: Fixed critical issue where loader bundles were creating their own LoaderRegistry instances instead of using the shared instance from the main bundle. Now loaders properly register when imported, making all examples work on GitHub Pages. Export LoaderRegistry from main package and have loader bundles import from main package instead of relative paths.
[0.6.4] - 2026-02-22
Changed
- Example CDN URLs: Updated all example files to use
@0.6.3(latest version) for consistent and immediate CDN availability on GitHub Pages
[0.6.3] - 2026-02-22
Changed
- Example CDN URLs: Updated all example files to use
@0.6.2instead of@latestfor consistent and immediate CDN availability on GitHub Pages
[0.6.2] - 2026-02-22
Fixed
- Google Drive example: Restored API key and folder ID to make the example functional on GitHub Pages
[0.6.1] - 2026-02-22
Fixed
- GitHub action npm audit: Changed to only audit production dependencies, preventing dev-only vulnerabilities from blocking releases
- Example files on GitHub Pages: Added loader subpath imports to importmaps in all example HTML files so dynamic loader imports resolve to CDN URLs
- All 11 example files now work correctly when served from static hosts
[0.6.0] - 2026-02-21
Added
- Bundle size reduction: Loaders are now in separate npm subpath exports for optimal tree-shaking and bundle size control
- Main package:
@frybynite/image-cloud(~30KB gzipped, no loaders) - Static loader:
@frybynite/image-cloud/loaders/static(~2.3KB gzipped) - Google Drive loader:
@frybynite/image-cloud/loaders/google-drive(~1.8KB gzipped) - Composite loader:
@frybynite/image-cloud/loaders/composite(<1KB gzipped) - All-in-one:
@frybynite/image-cloud/loaders/all(~5KB gzipped) - Loader Registry Pattern: Loaders self-register when their bundles are imported via a centralized
LoaderRegistryclass - Comprehensive npm package import tests (18 tests) validating all export paths and usage patterns across browsers
- Demo fixture showing separate loader/layout bundle imports in action
- Updated documentation (README, PARAMETERS, LOADERS, API, examples) to reflect separate loader imports and bundle size benefits
Changed
- Breaking change: Loaders must now be imported separately. Users importing loaders must add
import '@frybynite/image-cloud/loaders/static'(or the loader they need) before using that loader.
[0.5.2] - 2026-02-18
Fixed
- Security: resolved 10 npm vulnerabilities — upgraded
vite-plugin-dtsto 5.0.0-beta.6, which includes patched dependencies (ajv ≥8.18.0, minimatch ≥10.2.1) to fix ReDoS vulnerabilities in dev dependencies. Reduces vulnerability count from 10 (4 high, 6 moderate) to 0.
[0.5.1] - 2026-02-19
Fixed
- ZoomEngine: wrong animation start position when interrupting mid-animation —
cancelAnimation()returned rawmatrix.e/fvalues (centering offset already baked in);buildDimensionZoomTransformthen added anothertranslate(-50%, -50%), doubling the centering and causing the reversed animation to start from an entirely wrong location. NewcaptureMidAnimationState()helper captures width/height and pure positional offset before cancelling, and commits them to inline styles to prevent visual snap. Affects Esc during zoom-in, arrow-key navigation during zoom-in, and all cross-animation redirect paths. - ZoomEngine: Esc pressed twice during unfocus restarts animation — second
unfocusImage()call while state was alreadyUNFOCUSINGfell through to the normal-unfocus path, cancelled the running animation, and restarted it from the fully-focused position. Added early-return guard forZoomState.UNFOCUSING.
[0.5.0] - 2026-02-14
Added
- React wrapper component (
@frybynite/image-cloud/react) —<ImageCloud>with forwardRef, useImperativeHandle for instance access, auto-reinit on prop changes - Vue 3 wrapper component (
@frybynite/image-cloud/vue) —<ImageCloud>using defineComponent + Composition API, deep watch for reinit - Web Component (
@frybynite/image-cloud/web-component) —<image-cloud>custom element withconfig,images,layoutobserved attributes, auto-registration, custom events - Subpath exports:
./react,./vue,./web-componentwith TypeScript declarations - Optional peer dependencies for React (>=18) and Vue (>=3.3)
- Example HTML files for each wrapper (
examples/react-example.html,vue-example.html,web-component-example.html) - Playwright e2e tests for Web Component (5 tests across chromium/mobile)
- Framework Wrappers section in parameters.md documentation
[0.4.2] - 2026-02-14
Removed
- Remove
animation.entry.timing.staggerconfig option (redundant withanimation.queue.intervalwhich already staggers image entry) - Remove stagger control from configurator
- Remove stagger from docs, field descriptions, and test fixtures
[0.4.1] - 2026-02-14
Removed
- Remove
failOnAllMissingfeature (unused stub in types, defaults, adapter, docs)
Fixed
- Fix two flaky image-counter e2e tests with proper animation-complete waits (replace
waitForTimeoutwithwaitForFunctionopacity checks)
[0.4.0] - 2026-02-14
Breaking Changes
- Rename
src/generators/directory tosrc/layouts/ - Rename all
*PlacementGeneratorclasses to*PlacementLayout(e.g.,RadialPlacementGenerator→RadialPlacementLayout) - Rename
PlacementGeneratorinterface toPlacementLayout - Export
WavePlacementLayout(previously missing from public exports)
Changed
- Internal field
generatorrenamed toplacementLayoutin LayoutEngine - Internal method
initGenerator()renamed toinitLayout()in LayoutEngine - Rename
docs/GENERATORS.mdtodocs/layouts.md - Rename
docs/api/generators.mdtodocs/api/layouts.md - Updated all documentation references to use "layouts" terminology
[0.3.7] - 2026-02-14
Breaking Changes
- Consolidate debug parameters under
config.debugnamespace; old paths (debug,layout.debugRadials,layout.debugCenters,config.loaders.debugLogging) removed - Remove
debugRadialsfeature entirely (type, layout code, configurator, docs)
Added
- "Config" accordion in configurator with Loaders and Debug sub-sections
- Expose shared loader config (
validateUrls,validationMethod,validationTimeout,allowedExtensions) in configurator - Field descriptions for
config.loaders.*options
Fixed
- Debug border application order bug where default styles overwrote debug borders
[0.3.6] - 2026-02-13
- Version bump release
[0.3.5] - 2026-02-13
- Add showImageCounter implementation plan and design doc
- Mark loading text issue as resolved in backlog
- Update backlog with rendering stub issues and spinner idea
[0.3.4] - 2026-02-13
- Version bump release
[0.3.3] - 2026-02-13
- Version bump release
[0.3.2] - 2026-02-13
- Fix data-path issue in configurator
- Documentation updates for data-path and structure proposal
[0.3.1] - 2026-02-13
- Refactor configurator to separate
data-desc-keyfromdata-pathattributes
[0.3.0] - 2026-02-07
Breaking Changes
- Redesign loader configuration API — loaders are now configured via a new structure (see loaders.md)
Other
- Clean up backlog — remove resolved items
[0.2.9] - 2026-02-07
- Add JSON source type to static loader
- Add URLs shorthand for static loader configuration
- Update CodeQL action to v4
[0.2.8] - 2026-02-02
- Add security scanning (CodeQL) to publish workflow
[0.2.7] - 2026-02-01
- Fix swipe gesture
touch-actionCSS for iframe compatibility
[0.2.6] - 2026-02-01
- Add swipe gesture navigation for focused images
- Mark auto-init export issue and invert option as completed in backlog
[0.2.5] - 2026-02-01
- Add invert filter control to configurator
- Update and reorder README examples sections
[0.2.4] - 2026-02-01
- Add banner image to README
- Add favicon and brand icons
- Fix multi-gallery test CSS override issue
- Update entry animations plan
[0.2.3] - 2026-02-01
- Add outline controls with visibility toggle to configurator
[0.2.2] - 2026-02-01
- Add custom shadow controls with per-state configuration to configurator
- Update CDN URLs to
@latestand mark packaging complete - Add Detailed Style Examples link to index page
[0.2.1] - 2026-01-31
- Fix example container height CSS
- Add cursor control to configurator
- Update documentation with new sizing configuration and responsive sizing mode
[0.2.0] - 2026-01-31
Breaking Changes
- Revised image sizing approach with responsive breakpoints
Other
- Auto-inject functional CSS; rename
gallery.csstoimage-cloud.css - Simplify configurator path labels for focus, entry animation, sizing, and rotation fields
- Update all examples to use jsDelivr CDN
[0.1.3] - 2026-01-29
- Remove debug
console.logstatements - Update examples to use Pexels images and jsDelivr CDN
[0.1.2] - 2026-01-29
- Fix npm publish workflow (
NODE_AUTH_TOKENrestore)
[0.1.1] - 2026-01-29
- Add API reference documentation
- Add test-published directory for visual deployment testing
- Fix npm publish authentication (OIDC and token-based)
[0.1.0] - 2026-01-29
Initial Release
- Interactive image cloud with animated scattered layouts and zoom effects
- Layout algorithms: radial, grid, spiral, cluster, wave, random
- Entry animations: bounce, elastic, wave paths; spin, settle, wobble rotations
- Entry scale animations: grow, shrink, pop, random modes
- Click-to-zoom with keyboard navigation (arrow keys, Enter/Space, Escape)
- State-based image styling (borders, shadows, filters for default/hover/focused)
- Image sources: static URLs, Google Drive folders, composite loaders
- Adaptive sizing based on container dimensions and image count
- Interactive configurator with live preview and JSON export
- CSS class prefix
fbn-ic-for library compatibility - Comprehensive Playwright E2E test suite
- npm package with ESM, UMD, and auto-init bundles
- CDN support via jsDelivr and unpkg
- Full TypeScript support with strict mode
- Zero runtime dependencies