poe-svelte-ui-lib 1.10.7 → 1.10.9
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/dist/Graph/Graph.svelte +4 -19
- package/dist/Switch/Switch.svelte +2 -2
- package/package.json +1 -1
package/dist/Graph/Graph.svelte
CHANGED
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
/* Константы и настройки — экспортируются для переиспользования в GraphProps.svelte (редактор конструктора) */
|
|
6
6
|
export const REFRESH_OPTIONS: IOption[] = [
|
|
7
7
|
{ id: "RefreshOption-AUTO", name: "AUTO", value: 0, class: "" },
|
|
8
|
-
{ id: "RefreshOption-10", name: "10", value: 10, class: "" },
|
|
9
|
-
{ id: "RefreshOption-25", name: "25", value: 25, class: "" },
|
|
10
8
|
{ id: "RefreshOption-50", name: "50", value: 50, class: "" },
|
|
11
9
|
{ id: "RefreshOption-100", name: "100", value: 100, class: "" },
|
|
12
10
|
{ id: "RefreshOption-250", name: "250", value: 250, class: "" },
|
|
@@ -32,8 +30,7 @@
|
|
|
32
30
|
historyData = [],
|
|
33
31
|
}: IGraphProps = $props()
|
|
34
32
|
|
|
35
|
-
/* Статический режим: historyData передан целиком с реальными timestamp (Unix-эпоха в мс)
|
|
36
|
-
компонент рисует весь массив разом, без интервалов/AUTO; streamingData/refreshRate игнорируются */
|
|
33
|
+
/* Статический режим: historyData передан целиком с реальными timestamp (Unix-эпоха в мс) */
|
|
37
34
|
const isHistoryMode = $derived(!!historyData && historyData.length > 0)
|
|
38
35
|
|
|
39
36
|
/* Состояние компонента */
|
|
@@ -44,19 +41,13 @@
|
|
|
44
41
|
let ctx: CanvasRenderingContext2D
|
|
45
42
|
let width = $state(600)
|
|
46
43
|
let height = $state(125)
|
|
47
|
-
|
|
48
|
-
/* selectedRefreshRate изначально берётся из пропа (сохраняется вместе с компонентом в конструкторе),
|
|
49
|
-
но остаётся локально переключаемым через Select ниже — присвоение этому $derived временно
|
|
50
|
-
переопределяет значение, пока не изменится refreshRate/isTest (проп) */
|
|
51
44
|
let selectedRefreshRate = $derived(isTest ? 50 : (refreshRate ?? 0))
|
|
52
45
|
const maxDataPoints = $derived(selectedRefreshRate == 0 ? 20 : 100)
|
|
53
46
|
const defaultColors = ["#3b82f6", "#ef4444", "#10b981", "#f59e0b", "#8b5cf6", "#ec4899"]
|
|
54
47
|
|
|
55
48
|
let previousValues: number[] = $state([])
|
|
56
49
|
|
|
57
|
-
/* Автомасштаб Y для живого режима: диапазон плавно "подъезжает" к фактическому min/max буфера
|
|
58
|
-
(±10% отступ), пересчитывается один раз за тик (не за кадр/mousemove) и сглаживается —
|
|
59
|
-
иначе ось дёргалась бы на каждый новый семпл */
|
|
50
|
+
/* Автомасштаб Y для живого режима: диапазон плавно "подъезжает" к фактическому min/max буфера (±10% отступ) */
|
|
60
51
|
let liveYRange = $state<{ min: number; max: number } | null>(null)
|
|
61
52
|
|
|
62
53
|
const computeAutoYRange = (values: number[]): { min: number; max: number } => {
|
|
@@ -122,8 +113,7 @@
|
|
|
122
113
|
initializeGraphData()
|
|
123
114
|
})
|
|
124
115
|
|
|
125
|
-
/* Статический режим: строим graphData один раз
|
|
126
|
-
x = реальный timestamp точки, "текущее" значение в панели Values — последняя (по времени) точка серии */
|
|
116
|
+
/* Статический режим: строим graphData один раз */
|
|
127
117
|
$effect(() => {
|
|
128
118
|
if (!isHistoryMode) return
|
|
129
119
|
const series = historyData.slice(0, 6).map((s, i) => {
|
|
@@ -140,12 +130,7 @@
|
|
|
140
130
|
drawAllGraphs()
|
|
141
131
|
})
|
|
142
132
|
|
|
143
|
-
/* Обработка входящих потоковых
|
|
144
|
-
ВАЖНО: streamingData читается только внутри колбэков setInterval (асинхронный контекст),
|
|
145
|
-
а не в теле $effect — иначе каждое новое сообщение (у нас до 10 Гц с устройства) делает
|
|
146
|
-
streamingData зависимостью эффекта, и он пересоздаёт таймер на каждый пакет: если Refresh
|
|
147
|
-
rate медленнее, чем частота входящих данных, setInterval убивается раньше, чем успевает
|
|
148
|
-
сработать хотя бы раз — график зависает. */
|
|
133
|
+
/* Обработка входящих потоковых данных */
|
|
149
134
|
let intervalId: ReturnType<typeof setInterval>
|
|
150
135
|
$effect(() => {
|
|
151
136
|
clearInterval(intervalId)
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
let checkedOptions: boolean[] = $derived(
|
|
25
25
|
(() => {
|
|
26
26
|
if (bitMode) {
|
|
27
|
-
return localOptions.map((option) =>
|
|
27
|
+
return localOptions.map((option) => (((value ?? 0) & (1 << (option?.value ?? 0))) >>> 0) === Math.pow(2, option.value ?? 0))
|
|
28
28
|
} else {
|
|
29
29
|
return [value == 1]
|
|
30
30
|
}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
const handleToggle = (index: number) => {
|
|
40
40
|
if (localOptions[index].disabled) return
|
|
41
|
-
value =
|
|
41
|
+
value = ((value ?? 0) ^ (1 << (bitMode ? (localOptions[index].value ?? 0) : 0))) >>> 0
|
|
42
42
|
|
|
43
43
|
onChange(value)
|
|
44
44
|
}
|