Skip to content

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-published dependencies: @frybynite/image-cloud to ^0.11.1 and vite to ^7.0.0

[0.11.1] - 2026-03-08

Changed

  • Reorganized parameters.md with 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.md from the Layouts section
  • Added layout screenshot images to layouts.md for all 7 algorithms
  • Added scripts/screenshot-layouts.mjs utility 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
  • onBeforeImageLoad supports two modes: URL-only transform (zero overhead) and fetch mode (full RequestInit for auth headers, custom cache, credentials)
  • onGalleryReady provides total load duration
  • Entry animation hooks: onEntryStart, onEntryProgress (per-rAF, JS paths only), onEntryComplete
  • onEntryProgress fires on bounce, elastic, and wave paths; not on CSS-transitioned linear paths
  • Layout hook: onLayoutComplete — fires after layout algorithm runs, before images load; provides full ImageLayout[], 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 mouseWheel stub from public API (NavigationInteractionConfig in types.ts and defaults.ts) — unimplemented and never functional
  • Removed navigation.mouseWheel from docs/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/TouchEvent constructors (Chrome) with createEvent('Event') fallback for WebKit where new Touch() is an illegal constructor
  • Added test.use({ hasTouch: true }) to enable touch APIs in Chromium test contexts
  • Added 50ms delay between touchstart and touchmove to 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 calls init() in one await expression
  • Actionable error messages: missing container, no loaders, and missing data-config now include remediation guidance

[0.9.6] - 2026-03-03

Added

  • Tests: ImageFilter unit 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 of getAllowedExtensions().
  • Tests: requiresJSAnimation unit 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 after destroy(), that destroy() before init() 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 SharedLoaderConfig removal.

[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 as showImageCounter. Custom elements supported via prevButtonElement / nextButtonElement. Clicks use stopPropagation() to prevent accidental unfocus.
  • ui.showFocusOutline: Controls the gallery container's focus ring. Default false suppresses the browser's :focus outline and shows a subtle accent-coloured inset outline only while an image is focused. Set to true for 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.md updated with new ui rows and a focus outline customisation section.

Fixed

  • Hover styles after unfocus: When an image unfocuses and returns under the cursor, mouseenter does not re-fire (cursor never left). A requestAnimationFrame callback in onUnfocusComplete now re-applies hover styling if the cursor is still over the element.

Removed

  • SharedLoaderConfig removed from public exports (src/index.ts) — internal type, not intended for consumer use.

[0.9.3] - 2026-03-01

Added

  • ui top-level config key: Promoted rendering.ui to a top-level ui namespace. Old rendering.ui still 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.responsive namespace — was entirely unimplemented stubs (breakpoints.tablet, breakpoints.desktop, mobileDetection); removed from types, defaults, adapter, and docs. The rendering key is now fully gone from the config.
  • UIRenderingConfig type — replaced by UIConfig in the public API.

Changed

  • UIRenderingConfig renamed to UIConfig in 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 global document, 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.performance config 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 from PathAnimator.
  • layout.spacing.minGap — was defined but never read by any layout; removed from types, defaults, adapter, and docs.

Fixed

  • HoneycombPlacementLayout is now exported from the public API (was missing, inconsistent with other layout classes).
  • interaction-disable-dragging test fixture used wrong property name (disableDraggingdragging: false).

[0.9.1] - 2026-03-01

Added

  • interaction.disableDragging: New boolean option (default: false) that sets draggable="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.ts covering default, enabled, and explicit-false cases, with a dedicated fixture test/fixtures/interaction-disable-dragging.html.
  • Docs: interaction.disableDragging row added to parameters.md and tooltip added to field-descriptions.json.

[0.9.0] - 2026-02-26

Added

  • Idle Animation: New animation.idle configuration 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 with snap or fade style
  • spin — images continuously rotate clockwise or counter-clockwise
  • custom — user-supplied Web Animations API animation or teardown function
  • animation.idle.sync: 'random' staggers phases per image; 'together' uses a shared rAF loop to stamp identical currentTime on 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.idle section added to parameters.md and field-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: Added RadialAlgorithmConfig documentation 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.32.0.
  • Configurator: Added Tightness control for Radial layout.
  • Tests: Added layout-radial.spec.ts with 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 rows default corrected to 1 (was 3).
  • 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-gallery never matched (ImageCloud only adds fbn-ic-gallery); corrected to .fbn-ic-gallery and 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 proper width:height = 2:√3 proportions. Previous hexagon was ~15% too tall. Column-step ratio updated from 0.75 to √3/2 ≈ 0.866 to maintain edge-to-edge tiling.
  • Clip-path centering: calculateHeightRelativeClipPath now 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.2 to 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 in removeFocusedStyling().

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.ts to properly handle clipPath="none" by using clip-path: unset; instead of invalid clip-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.html to include "none" as a valid clip-path override value in the generated JSON configuration.
  • Test fixture loader imports: Removed non-existent /dist/loaders/all.js import from test/fixtures/static-basic.html since loaders are already exported from the main image-cloud.js file.
  • 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/all pointing to unified bundle (though separate loaders are no longer built).

[0.7.3] - 2026-02-22

Removed

  • Removed unused rendering.ui stubs: showThumbnails and theme properties 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.html is 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-cloud class combined with .fbn-ic-gallery. The .image-cloud class 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.2 instead of @latest for 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 LoaderRegistry class
  • 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-dts to 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-animationcancelAnimation() returned raw matrix.e/f values (centering offset already baked in); buildDimensionZoomTransform then added another translate(-50%, -50%), doubling the centering and causing the reversed animation to start from an entirely wrong location. New captureMidAnimationState() 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 already UNFOCUSING fell through to the normal-unfocus path, cancelled the running animation, and restarted it from the fully-focused position. Added early-return guard for ZoomState.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 with config, images, layout observed attributes, auto-registration, custom events
  • Subpath exports: ./react, ./vue, ./web-component with 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.stagger config option (redundant with animation.queue.interval which 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 failOnAllMissing feature (unused stub in types, defaults, adapter, docs)

Fixed

  • Fix two flaky image-counter e2e tests with proper animation-complete waits (replace waitForTimeout with waitForFunction opacity checks)

[0.4.0] - 2026-02-14

Breaking Changes

  • Rename src/generators/ directory to src/layouts/
  • Rename all *PlacementGenerator classes to *PlacementLayout (e.g., RadialPlacementGeneratorRadialPlacementLayout)
  • Rename PlacementGenerator interface to PlacementLayout
  • Export WavePlacementLayout (previously missing from public exports)

Changed

  • Internal field generator renamed to placementLayout in LayoutEngine
  • Internal method initGenerator() renamed to initLayout() in LayoutEngine
  • Rename docs/GENERATORS.md to docs/layouts.md
  • Rename docs/api/generators.md to docs/api/layouts.md
  • Updated all documentation references to use "layouts" terminology

[0.3.7] - 2026-02-14

Breaking Changes

  • Consolidate debug parameters under config.debug namespace; old paths (debug, layout.debugRadials, layout.debugCenters, config.loaders.debugLogging) removed
  • Remove debugRadials feature 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-key from data-path attributes

[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-action CSS 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 @latest and 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.css to image-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.log statements
  • Update examples to use Pexels images and jsDelivr CDN

[0.1.2] - 2026-01-29

  • Fix npm publish workflow (NODE_AUTH_TOKEN restore)

[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