svelte-log-view 7.0.0 → 7.0.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-log-view",
3
- "version": "7.0.0",
3
+ "version": "7.0.1",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -51,7 +51,7 @@
51
51
  "playwright": "^1.57.0",
52
52
  "reader-line-iterator": "^1.2.3",
53
53
  "semantic-release": "^25.0.2",
54
- "svelte": "^5.46.0",
54
+ "svelte": "^5.46.1",
55
55
  "vite": "^7.3.0",
56
56
  "vite-plugin-compression2": "^2.4.0"
57
57
  },
@@ -6,7 +6,7 @@
6
6
  * line 2 | -> offsetEntries. |
7
7
  * ---------- |
8
8
  * | line 4 | | |
9
- * | line 5 | | -> visibleEntries. | -> maxBufferedEntries
9
+ * | line 5 | | -> numberOfVisibleEntries. | -> maxBufferedEntries
10
10
  * | line 5 | | |
11
11
  * ---------- |
12
12
  * line 6 /
@@ -14,20 +14,28 @@
14
14
 
15
15
  let {
16
16
  source /** data source */,
17
- visibleEntries = $bindable(24) /** number of rows in the dom */,
17
+ entries = $bindable([]),
18
18
  offsetEntries = $bindable(
19
19
  0
20
- ) /** number of rows from the top to the 1st. visible */,
20
+ ) /** number of entries from the top to the 1st. visible */,
21
21
  follow = $bindable(true),
22
22
  selected = $bindable(0),
23
- numberOfEntriesToFetch = 10 /** number of rows to fetch if we reach outside of the buffered area */,
23
+ numberOfEntriesToFetch = 10 /** number of entries to fetch if we reach outside of the buffered area */,
24
24
  maxBufferedEntries = 1024,
25
- row
25
+ entryElement
26
26
  } = $props();
27
27
 
28
- const entries = [];
29
- let visible = $state(entries);
30
- let content;
28
+ let contentHeight = $state();
29
+ let numberOfVisibleEntries = $derived.by(() => {
30
+ console.log("contentHeight",contentHeight);
31
+ const n = Math.ceil(contentHeight / entryHeight);
32
+ return n;
33
+ });
34
+
35
+ let visibleEntries = $derived.by(() => {
36
+ return entries.slice(offsetEntries, offsetEntries + numberOfVisibleEntries);
37
+ });
38
+ let entryHeight = 19.13;
31
39
 
32
40
  onDestroy(() => source.abort());
33
41
 
@@ -49,15 +57,6 @@
49
57
  if (entries.lenght >= maxBufferedEntries) {
50
58
  entries.shift();
51
59
  }
52
-
53
- if (entries.length <= visibleEntries) {
54
- visible = entries;
55
- } else {
56
- if (!follow) {
57
- visible = entries.slice(offsetEntries, visibleEntries);
58
- }
59
- }
60
-
61
60
  if (follow) {
62
61
  setSelected(entries.length - 1);
63
62
  current = entries[entries.length - 1];
@@ -71,7 +70,7 @@
71
70
 
72
71
  if (selected > entries.length - 1) {
73
72
  selected = entries.length - 1;
74
- offsetEntries = entries.length - visibleEntries;
73
+ offsetEntries = entries.length - numberOfVisibleEntries;
75
74
  }
76
75
 
77
76
  if (selected < 0) {
@@ -99,11 +98,14 @@
99
98
  offsetEntries = selected;
100
99
  }
101
100
 
102
- if (selected >= offsetEntries + visibleEntries) {
103
- offsetEntries = selected - visibleEntries + 1;
101
+ if (selected >= offsetEntries + numberOfVisibleEntries) {
102
+ offsetEntries = selected - numberOfVisibleEntries + 1;
104
103
  }
105
104
 
106
- visible = entries.slice(offsetEntries, offsetEntries + visibleEntries);
105
+ visibleEntries = entries.slice(
106
+ offsetEntries,
107
+ offsetEntries + numberOfVisibleEntries
108
+ );
107
109
  }
108
110
 
109
111
  function setFollow(flag) {
@@ -129,21 +131,21 @@
129
131
  break;
130
132
  case "PageUp":
131
133
  setFollow(false);
132
- setSelected(selected - visibleEntries);
134
+ setSelected(selected - numberOfVisibleEntries);
133
135
  break;
134
136
  case "PageDown":
135
137
  setFollow(false);
136
- setSelected(selected + visibleEntries);
137
- break;
138
- case "End":
139
- case "G":
140
- setFollow(false);
141
- setSelected(entries.length - 1);
138
+ setSelected(selected + numberOfVisibleEntries);
142
139
  break;
143
140
  case "Home":
144
141
  case "g":
145
142
  setFollow(false);
146
- setSelected(0);
143
+ setSelected(Number.MIN_SAFE_INTEGER + 1);
144
+ break;
145
+ case "End":
146
+ case "G":
147
+ setFollow(false);
148
+ setSelected(Number.MAX_SAFE_INTEGER - 1);
147
149
  break;
148
150
  case "f":
149
151
  setFollow(!follow);
@@ -153,15 +155,18 @@
153
155
 
154
156
  function onclick(event) {
155
157
  setFollow(false);
156
- const totalHeight = content.getBoundingClientRect().height;
157
- const rowHeight = totalHeight / visibleEntries;
158
- setSelected(offsetEntries + Math.floor(event.clientY / rowHeight));
158
+ setSelected(offsetEntries + Math.floor(event.clientY / entryHeight));
159
159
  }
160
160
  </script>
161
161
 
162
162
  <svelte:window {onkeydown} />
163
- <log-content {onclick} {onkeydown} bind:this={content} role="none">
164
- {#each visible as entry, i (i)}
165
- {@render row(entry, selected, offsetEntries + i, follow)}
163
+ <log-content
164
+ {onclick}
165
+ {onkeydown}
166
+ bind:clientHeight={contentHeight}
167
+ role="presentation"
168
+ >
169
+ {#each visibleEntries as entry, i (i)}
170
+ {@render entryElement(entry, selected, offsetEntries + i, follow)}
166
171
  {/each}
167
172
  </log-content>
package/src/log.css CHANGED
@@ -1,5 +1,6 @@
1
1
  log-content {
2
2
  position: relative;
3
- overflow-y: auto;
3
+ overflow-y: hidden;
4
4
  display: block;
5
+ min-height: 72px;
5
6
  }