free-coding-models 0.2.14 → 0.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ---
4
4
 
5
+ ## 0.2.15
6
+
7
+ ### Changed
8
+ - **Changelog scrolling experience**: Circular wrap-around scrolling in changelog details (N key) — up at the top now wraps to the bottom, down at the bottom wraps to the top. PageUp/PageDown also wrap for seamless infinite browsing, just like the main TUI list navigation. Home/End still jump to absolute first/last positions for quick access.
9
+
10
+ ---
11
+
5
12
  ## 0.2.14
6
13
 
7
14
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "free-coding-models",
3
- "version": "0.2.14",
3
+ "version": "0.2.15",
4
4
  "description": "Find the fastest coding LLM models in seconds — ping free models from multiple providers, pick the best one for OpenCode, Cursor, or any AI coding assistant.",
5
5
  "keywords": [
6
6
  "nvidia",
@@ -852,10 +852,31 @@ export function createKeyHandler(ctx) {
852
852
  const viewportRows = Math.max(1, state.terminalRows || 1)
853
853
  const maxScrollOffset = Math.max(0, totalChangelogLines - viewportRows)
854
854
 
855
- if (key.name === 'up') { state.changelogScrollOffset = Math.max(0, state.changelogScrollOffset - 1); return }
856
- if (key.name === 'down') { state.changelogScrollOffset = Math.min(maxScrollOffset, state.changelogScrollOffset + 1); return }
857
- if (key.name === 'pageup') { state.changelogScrollOffset = Math.max(0, state.changelogScrollOffset - pageStep); return }
858
- if (key.name === 'pagedown') { state.changelogScrollOffset = Math.min(maxScrollOffset, state.changelogScrollOffset + pageStep); return }
855
+ // 📖 Circular wrap-around scrolling: up at top bottom, down at bottom top
856
+ if (key.name === 'up') {
857
+ state.changelogScrollOffset = state.changelogScrollOffset > 0
858
+ ? state.changelogScrollOffset - 1
859
+ : maxScrollOffset
860
+ return
861
+ }
862
+ if (key.name === 'down') {
863
+ state.changelogScrollOffset = state.changelogScrollOffset < maxScrollOffset
864
+ ? state.changelogScrollOffset + 1
865
+ : 0
866
+ return
867
+ }
868
+ if (key.name === 'pageup') {
869
+ state.changelogScrollOffset = state.changelogScrollOffset >= pageStep
870
+ ? state.changelogScrollOffset - pageStep
871
+ : maxScrollOffset - (pageStep - state.changelogScrollOffset - 1)
872
+ return
873
+ }
874
+ if (key.name === 'pagedown') {
875
+ state.changelogScrollOffset = state.changelogScrollOffset + pageStep <= maxScrollOffset
876
+ ? state.changelogScrollOffset + pageStep
877
+ : (state.changelogScrollOffset + pageStep - maxScrollOffset - 1)
878
+ return
879
+ }
859
880
  if (key.name === 'home') { state.changelogScrollOffset = 0; return }
860
881
  if (key.name === 'end') { state.changelogScrollOffset = maxScrollOffset; return }
861
882
  }