Ilia Mashkov
0c59262a59
refactor: extract magic constants — wave 4 (UX timings + physics)
...
Name throttle/debounce intervals, spring presets, and layout paddings
that were inline numeric literals:
- VirtualList: VISIBLE_CHANGE_THROTTLE_MS (150), NEAR_BOTTOM_THROTTLE_MS
(200), JUMP_THROTTLE_MS (200)
- SampleList: CHECK_POSITION_THROTTLE_MS (100)
- SliderArea: SLIDER_SPRING_CONFIG ({stiffness: 0.2, damping: 0.7}),
SLIDER_PERSIST_DEBOUNCE_MS (100), SLIDER_PADDING_MOBILE_PX (48),
SLIDER_PADDING_DESKTOP_PX (96)
- FontVirtualList: TOUCH_DEBOUNCE_MS (150)
- createPerspectiveManager: PERSPECTIVE_SPRING_CONFIG ({stiffness: 0.2,
damping: 0.8})
No behavior changes — values preserved exactly.
2026-05-24 21:13:46 +03:00
Ilia Mashkov
f92577608a
refactor(Font): use pretext layout() directly in row size resolver
...
createFontRowSizeResolver was reaching into TextLayoutEngine, which
internally called pretext's heavy layoutWithLines and then walked
per-grapheme cursors to build chars arrays. The resolver discarded all
that work and used only totalHeight.
Replace with direct prepare + layout from @chenglou/pretext — pretext
docs explicitly recommend layout() (not layoutWithLines) for the resize
hot path: pure arithmetic on cached segment widths, no canvas calls, no
string allocations.
Test spies on TextLayoutEngine.prototype.layout migrated to vi.mock-ed
pretext layout (pretext's ESM exports are frozen — vi.spyOn fails with
"Cannot redefine property").
TextLayoutEngine marked @deprecated since it has no remaining
consumers; slated for removal after a release cycle.
2026-05-24 20:12:48 +03:00
Ilia Mashkov
728380498b
refactor(Font): rename fontStore and appliedFontsManager
...
Both names were vague or overloaded:
- fontStore / FontStore -> fontCatalogStore / FontCatalogStore
Three font-related stores live in this slice; the new name names the
paginated catalog specifically.
- appliedFontsManager / AppliedFontsManager -> fontLifecycleManager /
FontLifecycleManager
"Applied" collided with the filter-side appliedFilterStore (different
meaning). The class actually orchestrates a load-use-evict lifecycle
with FontBufferCache + FontEvictionPolicy + FontLoadQueue
collaborators, so "Manager" is justified. Companion types file moved
alongside (appliedFonts.ts -> fontLifecycle.ts).
Directories, file basenames, factory (createFontStore ->
createFontCatalogStore), and the AppliedFontsManagerDeps interface all
renamed. All consumers (ComparisonView, SampleList, FontList,
FontApplicator, FontVirtualList, FilterAndSortFonts bindings,
createFontRowSizeResolver, mocks) updated.
2026-05-24 20:00:43 +03:00
Ilia Mashkov
54087b7b2a
feat: replace clsx with cn util
2026-04-23 14:59:32 +03:00
Ilia Mashkov
2c579a3336
feat(shared): add cn utility for tailwind-aware class merging
2026-04-23 14:59:32 +03:00
Ilia Mashkov
2803bcd22c
fix(createVirtualizer): add window check to resolve the ReferenceError
2026-04-23 14:16:06 +03:00
Ilia Mashkov
a801903fd3
feat(FontList): use getSkeletonWidth utility for skeleton row widths
2026-04-22 09:02:32 +03:00
Ilia Mashkov
836b83f75d
style: apply new dprint rules to CharacterComparisonEngine
2026-04-20 11:06:54 +03:00
Ilia Mashkov
141126530d
fix(ComparisonView): fix character morphing thresholds and add tracking support
2026-04-20 10:52:28 +03:00
Ilia Mashkov
af05443763
chore(storybook): purge unused Providers props
2026-04-18 11:02:34 +03:00
Ilia Mashkov
8a93c7b545
chore: purge shadcn from codebase. Replace with bits-ui components and other tools
2026-04-17 13:37:44 +03:00
Ilia Mashkov
fb1d2765d0
chore: purge TooltipProvider
2026-04-17 13:20:01 +03:00
Ilia Mashkov
12e8bc0a89
chore: enforce brackets for if clause and for/while loops
2026-04-17 13:05:36 +03:00
Ilia Mashkov
cfaff46d59
chore: follow the general comments style
2026-04-17 12:14:55 +03:00
Ilia Mashkov
0a489a8adc
fix(BaseQueryStore): use QueryObserverOptions instead of QueryOptions
...
Workflow / build (pull_request) Successful in 58s
Workflow / publish (pull_request) Has been skipped
QueryOptions has queryKey as optional; QueryObserverOptions requires it,
matching what QueryObserver.constructor and setOptions actually expect.
2026-04-15 22:37:30 +03:00
Ilia Mashkov
10f4781a67
test: enrich coverage for queryKeys, BaseQueryStore, and BatchFontStore
...
- queryKeys: add mutation-safety test for batch(), key hierarchy tests
(list/batch/detail keys rooted in their parent base keys), and
unique-key test for different detail IDs
- BaseQueryStore: add initial-state test (data undefined, isError false
before any fetch resolves)
- BatchFontStore: add FontResponseError type assertion on malformed
response, null error assertion on success, and setIds([]) disables
query and returns empty fonts without triggering a fetch
2026-04-15 15:59:01 +03:00
Ilia Mashkov
8e88d1b7cf
feat: add BaseQueryStore for reactive query observers
2026-04-15 12:19:25 +03:00
Ilia Mashkov
46b9db1db3
feat: export ItemSizeResolver type and document reactive estimateSize contract
2026-04-12 19:43:44 +03:00
Ilia Mashkov
4b017a83bb
fix: add missing JSDoc, return types, and as-any comments to layout engines
2026-04-12 09:51:36 +03:00
Ilia Mashkov
338ca9b4fd
feat: export TextLayoutEngine and CharacterComparisonEngine from shared helpers index
...
Remove deleted createCharacterComparison exports and benchmark.
2026-04-11 16:44:49 +03:00
Ilia Mashkov
5977e0a0dc
fix: correct advances null-check in CharacterComparisonEngine and remove unused TextLayoutEngine dep
2026-04-11 16:14:28 +03:00
Ilia Mashkov
2b0d8470e5
test: fix CharacterComparisonEngine tests — correct env directive, canvas mock, and full spec coverage
2026-04-11 16:14:24 +03:00
Ilia Mashkov
351ee9fd52
docs: add inline documentation to TextLayoutEngine
2026-04-11 16:10:01 +03:00
Ilia Mashkov
a526a51af8
test: fix TextLayoutEngine tests — correct jsdom directive placement and canvas mock setup
...
fix: correct grapheme-width fallback in TextLayoutEngine for null breakableFitAdvances
2026-04-11 15:48:52 +03:00
Ilia Mashkov
fcde78abad
test: add canvas mock helper for pretext-based engine tests
2026-04-11 15:48:47 +03:00
Ilia Mashkov
bc4ab58644
fix(buildQueryString): change the way the searchParams built
2026-04-03 16:08:15 +03:00
Ilia Mashkov
13818d5844
refactor(shared): update utilities, API layer, and types
2026-03-02 22:19:13 +03:00
Ilia Mashkov
ac73fd5044
refactor(helpers): modernize reactive helpers and add tests
2026-03-02 22:18:59 +03:00
Ilia Mashkov
80feda41a3
feat(createResponsiveManager): rewrote ifs to switch case
2026-02-27 18:35:40 +03:00
Ilia Mashkov
3a813b019b
chore: rename
2026-02-27 13:00:58 +03:00
Ilia Mashkov
da79dd2e35
feat: storybook cases and mocks
2026-02-19 13:58:12 +03:00
Ilia Mashkov
d15b2ffe3f
test(createVirtualizer): test coverage for virtual list logic
2026-02-18 20:54:34 +03:00
Ilia Mashkov
51ea8a9902
test(smoothScroll): cast mock to the proper type
2026-02-18 20:40:00 +03:00
Ilia Mashkov
e81cadb32a
feat(smoothScroll): cover smoothScroll util with unit tests
2026-02-18 20:20:24 +03:00
Ilia Mashkov
1c3908f89e
test(createPersistentStore): cover createPersistentStore helper with unit tests
2026-02-18 20:19:47 +03:00
Ilia Mashkov
206e609a2d
test(createEntityStore): cover createEntityStore helper with unit tests
2026-02-18 20:19:26 +03:00
Ilia Mashkov
ff71d1c8c9
test(splitArray): add unit tests for splitArray util
2026-02-18 20:18:18 +03:00
Ilia Mashkov
24ca2f6c41
test(throttle): add unit tests for throttle util
2026-02-18 20:17:33 +03:00
Ilia Mashkov
0f6a4d6587
chore: add/delete imports/exports
2026-02-18 17:35:53 +03:00
Ilia Mashkov
f356851d97
chore: remove lenis package
2026-02-18 16:53:40 +03:00
Ilia Mashkov
ad6e1da292
fix(ComparisonSlider): change the way width is calculated to avoid transform:scale issues
2026-02-16 15:30:00 +03:00
Ilia Mashkov
bee529dff8
fix(createVirtualizer): fix scroll issues that make scroll position jump when new page of fonts loads. Add some optimizations e.g. common ResizeObserver
2026-02-16 14:14:06 +03:00
Ilia Mashkov
1031b96ec5
chore: add exports/imports
2026-02-15 23:03:09 +03:00
Ilia Mashkov
4fdc99a15a
feat(createPerspectiveManager): create perspective manager to work with perspective, moving objects along the z axis
2026-02-15 23:02:49 +03:00
Ilia Mashkov
9e74a2c2c6
feat(createCharacterComparison): create type CharacterComparison and export it
2026-02-15 23:01:43 +03:00
Ilia Mashkov
8b02333c01
feat(createVirtualizer): slidthly improve batching with version trigger
2026-02-12 11:23:27 +03:00
Ilia Mashkov
08d474289b
chore: add export/import
2026-02-12 10:30:43 +03:00
Ilia Mashkov
2e6fc0e858
feat(throttle): add tohrottling util
2026-02-12 10:29:52 +03:00
Ilia Mashkov
173816b5c0
feat(lenis): add smooth scroll solution
2026-02-12 10:29:08 +03:00
Ilia Mashkov
a5b9238306
chore: add export/import
2026-02-10 21:15:52 +03:00