Skip to content

Conversation

@knowledgecode
Copy link
Owner

Summary

This release introduces significant API changes to Blokr v0.3.0, moving from a singleton pattern to a factory function pattern with support for element-specific event blocking.

Major Changes

  • Factory Function Pattern: blokr() now returns instances instead of being a singleton
  • Element-Specific Locks: Lock interactions for specific DOM elements with configurable scope
  • Scope Filtering: Block events inside, outside, or on target elements only
  • Options-Based API: Timeout and scope are now lock options, not global settings
  • Filter-Based Event Blocking: Replaces boolean flag with Set of filter functions

Key Features

  • ✅ Factory function with WeakMap-based instance caching
  • ✅ Scope filtering (inside, outside, self)
  • ✅ Per-lock timeout configuration
  • ✅ No reference counting
  • ✅ 45 tests passing (24 unit, 21 integration)

Breaking Changes

  • blokr.lock()blokr().lock()
  • blokr.unlock()blokr().unlock() (no abort parameter)
  • blokr.setTimeout(ms)blokr().lock({ timeout: ms })
  • UMD global name: window.Blokrwindow.blokr

Migration Guide

See README.md Migration from v0.2.x section for detailed migration instructions.

Testing

  • All 45 tests passing
  • Full TypeScript type support
  • Compatible with ES modules and UMD builds

Files Changed

  • Implementation: src/blokr.ts, src/lock.ts
  • Tests: tests/blokr.test.ts, tests/event-blocking.test.ts
  • Documentation: README.md
  • Configuration: package.json, .gitignore, eslint.config.js, tsconfig.json, vite.config.ts

- Update ESLint configuration with @stylistic/eslint-plugin
- Add tests directory to TypeScript include paths
- Adjust Vite build configuration for ES modules output
BREAKING CHANGES:
- Change from singleton object to factory function pattern
- Remove reference counting mechanism
- Replace setTimeout() method with lock() options parameter
- Remove unlock(abort) parameter
- Add scope filtering (inside, outside, self)
- Add element-specific locks with WeakMap caching

Implementation details:
- blokr.ts: Factory function returns cached instances per target
- lock.ts: Filter-based event blocking with Set of filter functions
- Add JSDoc comments for all public and internal methods
- Rewrite all tests to use factory function pattern
- Remove reference counting tests
- Remove setTimeout() method tests
- Remove unlock(abort) parameter tests
- Add factory behavior tests (instance caching)
- Add scope filtering tests (inside, outside, self)
- Add element-specific locking tests
- Add multiple independent locks tests

Test results: 45 tests passing (24 unit, 21 integration)
- Add breaking changes warning section
- Add "Why Blokr?" section comparing with CSS pointer-events
- Rewrite all API documentation for factory function pattern
- Add element-specific locking examples
- Add scope filtering usage examples
- Add CDN usage for ES Modules
- Add migration guide from v0.2.x
- Update limitations section
- Note UMD global name change: window.Blokr → window.blokr
- Update version to 0.3.0
- Add keywords: factory, scope, element, modal, overlay, pointer-events
- Update devDependencies to latest versions
- Regenerate package-lock.json
@knowledgecode knowledgecode merged commit a840471 into main Jan 4, 2026
2 checks passed
@knowledgecode knowledgecode deleted the develop branch January 4, 2026 03:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants