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.
@@ -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 один раз (и заново при каждой смене historyData) —
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) => Math.abs((value ?? 0) & (1 << (option?.value ?? 0))) == Math.pow(2, option.value ?? 0))
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 = Math.abs((value ?? 0) ^ (1 << (bitMode ? (localOptions[index].value ?? 0) : 0)))
41
+ value = ((value ?? 0) ^ (1 << (bitMode ? (localOptions[index].value ?? 0) : 0))) >>> 0
42
42
 
43
43
  onChange(value)
44
44
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poe-svelte-ui-lib",
3
- "version": "1.10.7",
3
+ "version": "1.10.9",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {