Ilia Mashkov
4c9b9f631f
fix: minor type changes for fonts
2026-01-13 19:54:56 +03:00
Ilia Mashkov
5fcb381b11
chore(normalize): move font api responce normalization functions to lib
2026-01-13 19:53:26 +03:00
Ilia Mashkov
e098da2dbb
feat(filterManager): add debouced state support and move manager
2026-01-13 19:52:36 +03:00
Ilia Mashkov
1a76e9387a
feat(createDebouncedState): create helper for managing state with debounce
2026-01-13 19:51:41 +03:00
Ilia Mashkov
0f1eb489ed
feat: add query provider for Tanstack
2026-01-13 19:49:51 +03:00
Ilia Mashkov
6e8376b8fc
fix(arch): move unifiedFontStore context creation to Layout.svelte
...
- Moved unifiedFontStore creation from Page.svelte to Layout.svelte
- Layout now creates store instance and provides it via setContext()
- Page.svelte now receives store via getContext() instead of creating it
- Fixes context accessibility issue where FiltersSidebar and FontSearch
(siblings of Page) could not access the store
- All child components now share the same store instance at Layout level
This resolves the architectural issue where context only flows downward,
not sideways. All components (FiltersSidebar, FontSearch, Page) are now
children of Layout and can access the unifiedFontStore context.
2026-01-12 08:51:36 +03:00
Ilia Mashkov
d81af0a77b
feat: implement P0/P1 performance and code quality optimizations
...
P0 Performance Optimizations:
- Add debounced search (300ms) to reduce re-renders during typing
- Implement single-pass filter function for O(n) complexity
- Add TanStack Query cancellation before new requests
P1 Code Quality Optimizations:
- Add runtime type guards for filter validation
- Implement two derived values (filteredFonts + sortedFilteredFonts)
- Remove all 'as any[]' casts from filter bridge
- Add fast-path for default sorting (skip unnecessary operations)
New Utilities:
- debounce utility with 4 tests (all pass)
- filterUtils with 15 tests (all pass)
- typeGuards with 20 tests (all pass)
- Total: 39 new tests
Modified Files:
- unifiedFontStore.svelte.ts: Add debouncing, use filter/sort utilities
- filterBridge.svelte.ts: Type-safe validation with type guards
- unifiedFontStore.test.ts: Fix pre-existing bugs (missing async, duplicate imports)
Code Quality:
- 0 linting warnings/errors (oxlint)
- FSD compliant architecture (entity lib layer)
- Backward compatible store API
2026-01-11 14:49:21 +03:00
Ilia Mashkov
77de829b04
fix: types
2026-01-09 16:48:26 +03:00
Ilia Mashkov
7630802363
fix: minor changes in types
2026-01-09 16:20:25 +03:00
Ilia Mashkov
43175fd52a
feat(FontSearch): create FontSearch component with SearchBar and FontList with list virtualization
2026-01-09 16:20:00 +03:00
Ilia Mashkov
9598d8c3e4
feat(SearchBar): create SearchBar component with input and popover that contains search results
2026-01-09 16:19:22 +03:00
Ilia Mashkov
c863bea2dc
feat: create FontList component with use of VirtualList
2026-01-09 16:18:16 +03:00
Ilia Mashkov
ea1f46f780
feat(fontCollection): create font collection state manager
2026-01-09 16:17:49 +03:00
Ilia Mashkov
bdb67157fd
fix: rename file
2026-01-09 16:17:09 +03:00
Ilia Mashkov
e198e967ab
fix: minor changes in shadcn components import
2026-01-09 16:16:32 +03:00
Ilia Mashkov
e1af950442
chore: create index files for better import/export api
2026-01-09 16:14:38 +03:00
Ilia Mashkov
13509a4145
chore: add comments for types and constants
2026-01-09 16:13:47 +03:00
Ilia Mashkov
09111a7c61
fix: import/export
2026-01-09 16:13:02 +03:00
Ilia Mashkov
b13c0d268b
fix: import/export
2026-01-09 16:12:51 +03:00
Ilia Mashkov
1990860717
feat: add generic type for property value
2026-01-09 16:11:35 +03:00
Ilia Mashkov
6f7e863b13
fix: use proper types for fetching fonts
2026-01-09 16:09:56 +03:00
Ilia Mashkov
8ad29fd3a8
feat(FontCategory): separate types for font categories from different providers
2026-01-09 16:09:18 +03:00
Ilia Mashkov
de2688de5a
delete: delete stores
2026-01-09 16:08:19 +03:00
Ilia Mashkov
1ebab2d77b
feat: add data-testid attribute
Lint / Lint Code (push) Failing after 7m16s
Test / Svelte Checks (push) Failing after 7m8s
2026-01-08 13:15:02 +03:00
Ilia Mashkov
fc00717359
feat: test coverage of ComboControl and CheckboxFilter
2026-01-08 13:14:04 +03:00
Ilia Mashkov
36a326817d
feat: test coverage for utils
Lint / Lint Code (push) Failing after 7m20s
Test / Svelte Checks (push) Failing after 7m20s
2026-01-07 17:26:59 +03:00
Ilia Mashkov
f4c2a38873
fix: imports path
2026-01-07 16:54:19 +03:00
Ilia Mashkov
614d6b0673
fix: imports path
2026-01-07 16:54:12 +03:00
Ilia Mashkov
f26f56ddef
chore: move createVirtualizer
2026-01-07 16:53:44 +03:00
Ilia Mashkov
76f27a64b2
refactor(createTypographyControl): createControlStore rewrote to runes
2026-01-07 16:53:17 +03:00
Ilia Mashkov
baff3b9e27
refactor(createFilter): createFilterStore rewrote to runes
2026-01-07 16:52:17 +03:00
Ilia Mashkov
d15b90cfcb
feat: move buildQueryString to separate directory
2026-01-07 16:49:37 +03:00
Ilia Mashkov
893bb02459
feat: move buildQueryString to separate directory
2026-01-07 16:49:18 +03:00
Ilia Mashkov
f7b19bd97f
feat: move functions to separate files
2026-01-07 16:48:49 +03:00
Ilia Mashkov
2c4bfaba41
fix: rename file from .ts to .svelte.ts to support svelte runes
2026-01-07 14:27:25 +03:00
Ilia Mashkov
9fd98aca5d
refactor(createFilterStore): move from store pattern to svelte 5 runes usage
2026-01-07 14:26:37 +03:00
Ilia Mashkov
0692711726
fix: import/export paths
Lint / Lint Code (push) Failing after 7m18s
Test / Svelte Checks (push) Failing after 7m16s
2026-01-06 21:40:28 +03:00
Ilia Mashkov
86898bf83c
chore: move utils directory into shared/lib
2026-01-06 21:39:17 +03:00
Ilia Mashkov
1950cd4095
refactor(VirtualList): refactor VirtualList with modern svelte 5 patterns
2026-01-06 21:38:53 +03:00
Ilia Mashkov
7a9f7e238c
refactor(createVirtualizer): refactor createVirtualizerStore with modern svelte 5 patterns
2026-01-06 21:38:18 +03:00
Ilia Mashkov
1f19e964ca
fix: import/export paths
2026-01-06 21:36:29 +03:00
Ilia Mashkov
eb10d58128
chore: move store creators to separate directories
2026-01-06 21:35:49 +03:00
Ilia Mashkov
c78ab826a2
chore: move fetch directory into shared/lib
2026-01-06 21:35:16 +03:00
Ilia Mashkov
931a2df1ee
feat: test coverage for store creators
2026-01-06 21:34:05 +03:00
Ilia Mashkov
bea3f7ae7f
chore: move store creators to separate directories
2026-01-06 21:33:30 +03:00
Ilia Mashkov
d1f035a6ad
feat(api): create api calls for google fonts and fontshare
2026-01-06 21:31:25 +03:00
Ilia Mashkov
c0ccf4baff
refactor(virtual): use store pattern instead of hook, fix styling
...
Store Pattern Migration:
- Created createVirtualizerStore using Svelte stores (writable/derived)
- Replaced useVirtualList hook with createVirtualizerStore
- Matches existing store patterns (createFilterStore, createControlStore)
- More Svelte-idiomatic than React-inspired hook pattern
Component Refactoring:
- Renamed FontVirtualList.svelte → VirtualList.svelte
- Moved component from shared/virtual/ → shared/ui/
- Updated to use store pattern instead of hook
- Removed pixel values from style tags (uses Tailwind CSS)
- Height now configurable via Tailwind classes (e.g., 'h-96', 'h-[500px]')
- Props changed from shorthand {fonts} to explicit items prop
File Changes:
- Deleted: useVirtualList.ts (replaced by store pattern)
- Deleted: FontVirtualList.svelte (renamed and moved)
- Deleted: useVirtualList.test.ts (updated to test store pattern)
- Updated: README.md with store pattern usage examples
- Updated: index.ts with migration guide
- Created: createVirtualizerStore.ts in shared/store/
- Created: VirtualList.svelte in shared/ui/
- Created: createVirtualizerStore.test.ts
- Created: barrel exports (shared/store/index.ts, shared/ui/index.ts)
Styling Improvements:
- All pixel values removed from <style> tags
- Uses Tailwind CSS for all styling
- Responsive height via Tailwind classes or props
- Only inline styles for dynamic positioning (required for virtualization)
TypeScript & Testing:
- Full TypeScript support with generics
- All 33 tests passing
- Type checking passes
- Linting passes (minor warnings only)
Breaking Changes:
- Component name: FontVirtualList → VirtualList
- Component location: $shared/virtual → $shared/ui
- Hook removed: useVirtualList → createVirtualizerStore
- Props change: {fonts} shorthand → items prop
- Import changes: $shared/virtual → $shared/ui and $shared/store
Documentation:
- Updated README.md with store pattern examples
- Added migration guide in virtual/index.ts
- Documented breaking changes and migration steps
2026-01-06 18:56:30 +03:00
Ilia Mashkov
10b7457f21
refactor(virtual): use store pattern instead of hook, fix styling
...
Store Pattern Migration:
- Created createVirtualizerStore using Svelte stores (writable/derived)
- Replaced useVirtualList hook with createVirtualizerStore
- Matches existing store patterns (createFilterStore, createControlStore)
- More Svelte-idiomatic than React-inspired hook pattern
Component Refactoring:
- Renamed FontVirtualList.svelte → VirtualList.svelte
- Moved component from shared/virtual/ → shared/ui/
- Updated to use store pattern instead of hook
- Removed pixel values from style tags (uses Tailwind CSS)
- Height now configurable via Tailwind classes (e.g., 'h-96', 'h-[500px]')
- Props changed from shorthand {fonts} to explicit items prop
File Changes:
- Deleted: useVirtualList.ts (replaced by store pattern)
- Deleted: FontVirtualList.svelte (renamed and moved)
- Deleted: useVirtualList.test.ts (updated to test store pattern)
- Updated: README.md with store pattern usage examples
- Updated: index.ts with migration guide
- Created: createVirtualizerStore.ts in shared/store/
- Created: VirtualList.svelte in shared/ui/
- Created: createVirtualizerStore.test.ts
- Created: barrel exports (shared/store/index.ts, shared/ui/index.ts)
Styling Improvements:
- All pixel values removed from <style> tags
- Uses Tailwind CSS for all styling
- Responsive height via Tailwind classes or props
- Only inline styles for dynamic positioning (required for virtualization)
TypeScript & Testing:
- Full TypeScript support with generics
- All 33 tests passing
- Type checking passes
- Linting passes (minor warnings only)
Breaking Changes:
- Component name: FontVirtualList → VirtualList
- Component location: $shared/virtual → $shared/ui
- Hook removed: useVirtualList → createVirtualizerStore
- Props change: {fonts} shorthand → items prop
- Import changes: $shared/virtual → $shared/ui and $shared/store
Documentation:
- Updated README.md with store pattern examples
- Added migration guide in virtual/index.ts
- Documented breaking changes and migration steps
2026-01-06 18:55:07 +03:00
Ilia Mashkov
2c666646cb
style(font): fix lint warnings - remove unused imports and variables
...
- Removed unused FontFeatures, FontMetadata, FontProvider from normalize.ts imports
- Removed unused UnifiedFont from normalize.test.ts imports
- Removed unused FontSubset from store.ts imports
- Changed unused queryClient variables to void calls to suppress warnings
2026-01-06 15:24:34 +03:00
Ilia Mashkov
be14a62e83
refactor(font): split types into separate files for better maintainability
2026-01-06 15:23:08 +03:00