poe-svelte-ui-lib 1.41.0 → 1.42.0
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/README.md +1 -1
- package/dist/Accordion/README.md +0 -8
- package/dist/Button/README.md +0 -12
- package/dist/Carousel/README.md +0 -5
- package/dist/Divider/README.md +0 -4
- package/dist/FileAttach/README.md +0 -12
- package/dist/Graph/README.md +0 -9
- package/dist/Input/README.md +0 -18
- package/dist/Joystick/README.md +0 -12
- package/dist/PeriodChart/README.md +0 -4
- package/dist/ProgressBar/README.md +0 -15
- package/dist/Select/README.md +0 -12
- package/dist/Slider/README.md +0 -12
- package/dist/Switch/README.md +0 -12
- package/dist/Table/README.md +0 -8
- package/dist/Tabs/README.md +0 -8
- package/dist/TextField/README.md +0 -18
- package/dist/VideoViewer/README.md +0 -7
- package/dist/Widget/README.md +0 -12
- package/dist/WidgetMap/README.md +17 -17
- package/dist/WidgetMap/WidgetMap.svelte +5 -5
- package/dist/WidgetMap/WidgetMapProps.svelte +1 -1
- package/dist/WidgetPFD/README.md +4 -2
- package/dist/WidgetPFD/WidgetPFD.svelte +95 -21
- package/dist/locales/translations.js +9 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ npm install poe-svelte-ui-lib
|
|
|
26
26
|
/* дальше — только собственные отличия приложения, например :root { min-width: 640px; } */
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
**Предпросмотр темы** — страница «Тема» витрины (`src/routes/components/theme`): один и тот же интерфейс облака (шапка устройства, палитра токенов, кнопки во всех ролях, поля, таблица, виджеты, типографика, Markdown)
|
|
29
|
+
**Предпросмотр темы** — страница «Тема» витрины (`src/routes/components/theme`): один и тот же интерфейс облака (шапка устройства, палитра токенов, кнопки во всех ролях, поля, таблица, виджеты, типографика, Markdown) на одной странице; тема переключается глобально кнопкой в шапке витрины. Правьте `theme.css` и смотрите результат там.
|
|
30
30
|
|
|
31
31
|
Текст в Markdown, таблицы и код переносятся по ширине контейнера — горизонтальной прокрутки быть не должно, только вертикальная. Markdown рендерится с `breaks: true` (как в облаке), поэтому абзац и пункт списка пишутся одной строкой — ручной перенос внутри абзаца превращается в разрыв строки.
|
|
32
32
|
|
package/dist/Accordion/README.md
CHANGED
|
@@ -16,9 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
### Адаптивность
|
|
18
18
|
|
|
19
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
20
19
|
- Сетка содержимого адаптируется под размеры экрана (sm:p-3)
|
|
21
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
22
20
|
|
|
23
21
|
### Ограничения
|
|
24
22
|
|
|
@@ -28,9 +26,7 @@
|
|
|
28
26
|
|
|
29
27
|
### Производительность
|
|
30
28
|
|
|
31
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
32
29
|
- Содержимое аккордеона рендерится только при его открытии (`{#if isOpen}`)
|
|
33
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
34
30
|
|
|
35
31
|
## Пропсы
|
|
36
32
|
|
|
@@ -119,11 +115,8 @@
|
|
|
119
115
|
|
|
120
116
|
### Особенности конструктора
|
|
121
117
|
|
|
122
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
123
118
|
- Включает модальное окно для выбора иконок из библиотеки
|
|
124
119
|
- Поддерживает загрузку изображений для фона
|
|
125
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
126
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
127
120
|
- Поддерживает валидацию числовых значений (min/max) для размеров
|
|
128
121
|
|
|
129
122
|
### Что настраивается
|
|
@@ -140,7 +133,6 @@
|
|
|
140
133
|
|
|
141
134
|
### Сторы и зависимости
|
|
142
135
|
|
|
143
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
144
136
|
- Применяется переход `slide` из `svelte/transition` для анимации открытия/закрытия
|
|
145
137
|
|
|
146
138
|
### Директивы
|
package/dist/Button/README.md
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
|
|
22
22
|
### Адаптивность
|
|
23
23
|
|
|
24
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
25
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
26
24
|
- Подсказки автоматически позиционируются в зависимости от стороны отображения
|
|
27
25
|
|
|
28
26
|
### Ограничения
|
|
@@ -33,9 +31,7 @@
|
|
|
33
31
|
|
|
34
32
|
### Производительность
|
|
35
33
|
|
|
36
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
37
34
|
- Обработчики клавиатуры удаляются при размонтировании компонента
|
|
38
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
39
35
|
|
|
40
36
|
## Пропсы
|
|
41
37
|
|
|
@@ -148,11 +144,8 @@
|
|
|
148
144
|
|
|
149
145
|
### Особенности конструктора
|
|
150
146
|
|
|
151
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
152
147
|
- Включает модальное окно для выбора иконок из библиотеки
|
|
153
148
|
- Поддерживает настройку обработчика событий и аргументов
|
|
154
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
155
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
156
149
|
- Поддерживает валидацию вводимых данных через регулярные выражения
|
|
157
150
|
|
|
158
151
|
### Что настраивается
|
|
@@ -169,7 +162,6 @@
|
|
|
169
162
|
|
|
170
163
|
### Сторы и зависимости
|
|
171
164
|
|
|
172
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
173
165
|
- Применяется переход `fly` из `svelte/transition` для анимации подсказки
|
|
174
166
|
- Используется `onMount` для подписки и отписки от глобальных событий клавиатуры
|
|
175
167
|
|
|
@@ -178,7 +170,3 @@
|
|
|
178
170
|
- `transition:fly` для анимации появления/скрытия информационной подсказки
|
|
179
171
|
- Обработчики `onmouseenter` и `onmouseleave` для показа/скрытия подсказки
|
|
180
172
|
- Обработчик `onclick` для активации кнопки
|
|
181
|
-
|
|
182
|
-
### Слоты
|
|
183
|
-
|
|
184
|
-
- Компонент не использует внешних слотов
|
package/dist/Carousel/README.md
CHANGED
|
@@ -12,9 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
### Адаптивность
|
|
14
14
|
|
|
15
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
16
15
|
- Стрелки навигации автоматически скрываются при достижении начала или конца карусели
|
|
17
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
18
16
|
|
|
19
17
|
### Ограничения
|
|
20
18
|
|
|
@@ -24,9 +22,7 @@
|
|
|
24
22
|
|
|
25
23
|
### Производительность
|
|
26
24
|
|
|
27
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
28
25
|
- Обработчики событий и `ResizeObserver` корректно удаляются при размонтировании
|
|
29
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
30
26
|
|
|
31
27
|
## Пропсы
|
|
32
28
|
|
|
@@ -129,7 +125,6 @@
|
|
|
129
125
|
|
|
130
126
|
### Сторы и зависимости
|
|
131
127
|
|
|
132
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
133
128
|
- Применяется переход `slide` из `svelte/transition` для анимации стрелок навигации
|
|
134
129
|
- Используется `ResizeObserver` для отслеживания изменений размера
|
|
135
130
|
|
package/dist/Divider/README.md
CHANGED
|
@@ -21,9 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
### Адаптивность
|
|
23
23
|
|
|
24
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
25
24
|
- Изображения масштабируются с учетом режима (cover/contain)
|
|
26
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
27
25
|
|
|
28
26
|
### Ограничения
|
|
29
27
|
|
|
@@ -33,9 +31,7 @@
|
|
|
33
31
|
|
|
34
32
|
### Производительность
|
|
35
33
|
|
|
36
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
37
34
|
- URL предварительного просмотра создаются только при необходимости
|
|
38
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
39
35
|
|
|
40
36
|
## Пропсы
|
|
41
37
|
|
|
@@ -143,11 +139,8 @@
|
|
|
143
139
|
|
|
144
140
|
### Особенности конструктора
|
|
145
141
|
|
|
146
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
147
142
|
- Поддерживает настройку типа компонента (файл или изображение)
|
|
148
143
|
- Включает настройки размеров и режима отображения для изображений
|
|
149
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
150
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
151
144
|
|
|
152
145
|
### Что настраивается
|
|
153
146
|
|
|
@@ -164,7 +157,6 @@
|
|
|
164
157
|
|
|
165
158
|
### Сторы и зависимости
|
|
166
159
|
|
|
167
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
168
160
|
- Используется `URL.createObjectURL` для мгновенного превью выбранного файла — предыдущий blob-URL отзывается через `URL.revokeObjectURL` перед созданием нового и при размонтировании компонента
|
|
169
161
|
|
|
170
162
|
### Директивы
|
|
@@ -172,7 +164,3 @@
|
|
|
172
164
|
- `bind:currentImage` для двусторонней привязки текущего изображения
|
|
173
165
|
- Обработчик `onchange` для отслеживания изменения файла
|
|
174
166
|
- Обработчик `onclick` для активации выбора файла
|
|
175
|
-
|
|
176
|
-
### Слоты
|
|
177
|
-
|
|
178
|
-
- Компонент не использует внешних слотов
|
package/dist/Graph/README.md
CHANGED
|
@@ -22,9 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
### Адаптивность
|
|
24
24
|
|
|
25
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
26
25
|
- График автоматически масштабируется под размер контейнера
|
|
27
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
28
26
|
|
|
29
27
|
### Ограничения
|
|
30
28
|
|
|
@@ -35,7 +33,6 @@
|
|
|
35
33
|
|
|
36
34
|
### Производительность
|
|
37
35
|
|
|
38
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
39
36
|
- Используется Canvas API для эффективной отрисовки графиков
|
|
40
37
|
- Автоматическая очистка точек при превышении лимита для предотвращения утечки памяти
|
|
41
38
|
|
|
@@ -159,8 +156,6 @@
|
|
|
159
156
|
- Предоставляет визуальные элементы управления для всех доступных свойств, включая `refreshRate` (`constructor.props.refreshrate`) через `Select` с теми же вариантами, что и на самом графике (`REFRESH_OPTIONS` из `Graph.svelte`)
|
|
160
157
|
- Поддерживает настройку переменной для отображения
|
|
161
158
|
- Включает переключатель для режима тестирования
|
|
162
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
163
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
164
159
|
|
|
165
160
|
### Что настраивается
|
|
166
161
|
|
|
@@ -190,7 +185,3 @@
|
|
|
190
185
|
- `bind:this` для получения ссылок на DOM-элементы (container, canvas)
|
|
191
186
|
- `$effect` для обработки изменений данных и настроек
|
|
192
187
|
- `onMount` для инициализации данных графика
|
|
193
|
-
|
|
194
|
-
### Слоты
|
|
195
|
-
|
|
196
|
-
- Компонент не использует внешних слотов
|
package/dist/Input/README.md
CHANGED
|
@@ -21,11 +21,6 @@
|
|
|
21
21
|
- Неверный ввод (длина, диапазон, выражение валидации) подсвечивается и не отправляется
|
|
22
22
|
- «Только чтение» — поле для отображения с кнопкой копирования
|
|
23
23
|
|
|
24
|
-
### Адаптивность
|
|
25
|
-
|
|
26
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
27
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
28
|
-
|
|
29
24
|
### Ограничения
|
|
30
25
|
|
|
31
26
|
- Для типа `password` кнопка копирования недоступна
|
|
@@ -33,11 +28,6 @@
|
|
|
33
28
|
- Числовые значения автоматически округляются (до 5 знаков после запятой) для устранения ошибок плавающей точки
|
|
34
29
|
- Подсказки не поддерживают HTML-разметку, отображают только текст
|
|
35
30
|
|
|
36
|
-
### Производительность
|
|
37
|
-
|
|
38
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
39
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
40
|
-
|
|
41
31
|
## Пропсы
|
|
42
32
|
|
|
43
33
|
| Название | Тип | По умолчанию | Описание |
|
|
@@ -157,12 +147,9 @@
|
|
|
157
147
|
|
|
158
148
|
### Особенности конструктора
|
|
159
149
|
|
|
160
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
161
150
|
- Поддерживает выбор типа поля: текст, пароль, число, многострочный текст, битовая маска
|
|
162
151
|
- Включает библиотеку готовых регулярных выражений для валидации (модальное окно с выбором шаблона)
|
|
163
152
|
- Для типа `bitMode` позволяет задать диапазон битов слайдером; `number.maxNum` рассчитывается автоматически
|
|
164
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
165
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
166
153
|
- Поддерживает валидацию вводимых данных через регулярные выражения
|
|
167
154
|
|
|
168
155
|
### Что настраивается
|
|
@@ -183,7 +170,6 @@
|
|
|
183
170
|
|
|
184
171
|
### Сторы и зависимости
|
|
185
172
|
|
|
186
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
187
173
|
- Используется компонент `InfoIcon` для отображения иконки информационной подсказки
|
|
188
174
|
- Применяется переход `fly` из `svelte/transition` для анимации подсказки и `fade` для индикации копирования
|
|
189
175
|
|
|
@@ -194,7 +180,3 @@
|
|
|
194
180
|
- `onkeydown` блокирует ввод символа `.` для типа `number`
|
|
195
181
|
- `onclick` для кнопок инкремента/декремента (типы `number`/`bitMode`), кнопки копирования и кнопки показа пароля
|
|
196
182
|
- `onmouseenter`/`onmouseleave` для показа/скрытия информационной подсказки
|
|
197
|
-
|
|
198
|
-
### Слоты
|
|
199
|
-
|
|
200
|
-
- Компонент не использует внешних слотов
|
package/dist/Joystick/README.md
CHANGED
|
@@ -23,9 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
### Адаптивность
|
|
25
25
|
|
|
26
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
27
26
|
- Джойстик автоматически масштабируется под размер контейнера
|
|
28
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
29
27
|
|
|
30
28
|
### Ограничения
|
|
31
29
|
|
|
@@ -35,9 +33,7 @@
|
|
|
35
33
|
|
|
36
34
|
### Производительность
|
|
37
35
|
|
|
38
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
39
36
|
- Чувствительность управляется дискретными значениями для предотвращения чрезмерной нагрузки
|
|
40
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
41
37
|
|
|
42
38
|
## Пропсы
|
|
43
39
|
|
|
@@ -118,11 +114,8 @@
|
|
|
118
114
|
|
|
119
115
|
### Особенности конструктора
|
|
120
116
|
|
|
121
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
122
117
|
- Поддерживает настройку осей управления (названия, диапазоны значений)
|
|
123
118
|
- Включает настройки чувствительности и иконки центральной кнопки
|
|
124
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
125
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
126
119
|
|
|
127
120
|
### Что настраивается
|
|
128
121
|
|
|
@@ -140,7 +133,6 @@
|
|
|
140
133
|
|
|
141
134
|
### Сторы и зависимости
|
|
142
135
|
|
|
143
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
144
136
|
- Используются тригонометрические функции для расчета позиций элементов джойстика
|
|
145
137
|
|
|
146
138
|
### Директивы
|
|
@@ -148,7 +140,3 @@
|
|
|
148
140
|
- `bind:value` для двусторонней привязки значений осей
|
|
149
141
|
- `$effect` для обработки изменений чувствительности и значений
|
|
150
142
|
- `onmouseenter` и `onmouseleave` для визуальной обратной связи при наведении
|
|
151
|
-
|
|
152
|
-
### Слоты
|
|
153
|
-
|
|
154
|
-
- Компонент не использует внешних слотов
|
|
@@ -21,9 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
### Адаптивность
|
|
23
23
|
|
|
24
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
25
24
|
- Индикаторы автоматически масштабируются под размер контейнера
|
|
26
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
27
25
|
|
|
28
26
|
### Ограничения
|
|
29
27
|
|
|
@@ -33,9 +31,7 @@
|
|
|
33
31
|
|
|
34
32
|
### Производительность
|
|
35
33
|
|
|
36
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
37
34
|
- Значения нормализуются для предотвращения некорректного отображения
|
|
38
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
39
35
|
|
|
40
36
|
## Пропсы
|
|
41
37
|
|
|
@@ -125,11 +121,8 @@
|
|
|
125
121
|
|
|
126
122
|
### Особенности конструктора
|
|
127
123
|
|
|
128
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
129
124
|
- Поддерживает добавление и удаление элементов индикатора
|
|
130
125
|
- Включает настройки типа, диапазона значений и единиц измерения
|
|
131
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
132
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
133
126
|
|
|
134
127
|
### Что настраивается
|
|
135
128
|
|
|
@@ -145,15 +138,7 @@
|
|
|
145
138
|
- Функция `progressPercent` вычисляет процент заполнения индикатора
|
|
146
139
|
- Функция `roundToClean` округляет числа для отображения
|
|
147
140
|
|
|
148
|
-
### Сторы и зависимости
|
|
149
|
-
|
|
150
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
151
|
-
|
|
152
141
|
### Директивы
|
|
153
142
|
|
|
154
143
|
- `$derived` для вычисления минимального и максимального значений
|
|
155
144
|
- `#each` для отображения нескольких элементов индикатора
|
|
156
|
-
|
|
157
|
-
### Слоты
|
|
158
|
-
|
|
159
|
-
- Компонент не использует внешних слотов
|
package/dist/Select/README.md
CHANGED
|
@@ -23,9 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
### Адаптивность
|
|
25
25
|
|
|
26
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
27
26
|
- Выпадающий список автоматически позиционируется относительно родителя
|
|
28
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
29
27
|
|
|
30
28
|
### Ограничения
|
|
31
29
|
|
|
@@ -35,9 +33,7 @@
|
|
|
35
33
|
|
|
36
34
|
### Производительность
|
|
37
35
|
|
|
38
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
39
36
|
- Фильтрация опций выполняется только при изменении поискового запроса
|
|
40
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
41
37
|
|
|
42
38
|
## Пропсы
|
|
43
39
|
|
|
@@ -162,11 +158,8 @@
|
|
|
162
158
|
|
|
163
159
|
### Особенности конструктора
|
|
164
160
|
|
|
165
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
166
161
|
- Поддерживает настройку типа отображения, значения и мультивыбора
|
|
167
162
|
- Включает управление списком опций с возможностью добавления/удаления
|
|
168
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
169
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
170
163
|
|
|
171
164
|
### Что настраивается
|
|
172
165
|
|
|
@@ -184,7 +177,6 @@
|
|
|
184
177
|
|
|
185
178
|
### Сторы и зависимости
|
|
186
179
|
|
|
187
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
188
180
|
- Применяется переход `slide` из `svelte/transition` для анимации выпадающего списка
|
|
189
181
|
|
|
190
182
|
### Директивы
|
|
@@ -192,7 +184,3 @@
|
|
|
192
184
|
- `bind:value` для двусторонней привязки значения
|
|
193
185
|
- `transition:slide` для анимации выпадающего списка
|
|
194
186
|
- `onMount` и `onDestroy` для управления слушателями событий клика
|
|
195
|
-
|
|
196
|
-
### Слоты
|
|
197
|
-
|
|
198
|
-
- Компонент не использует внешних слотов
|
package/dist/Slider/README.md
CHANGED
|
@@ -20,9 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
### Адаптивность
|
|
22
22
|
|
|
23
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
24
23
|
- Слайдер автоматически масштабируется под размер контейнера
|
|
25
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
26
24
|
|
|
27
25
|
### Ограничения
|
|
28
26
|
|
|
@@ -32,9 +30,7 @@
|
|
|
32
30
|
|
|
33
31
|
### Производительность
|
|
34
32
|
|
|
35
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
36
33
|
- Значения нормализуются для предотвращения некорректного отображения
|
|
37
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
38
34
|
|
|
39
35
|
## Пропсы
|
|
40
36
|
|
|
@@ -146,11 +142,8 @@
|
|
|
146
142
|
|
|
147
143
|
### Особенности конструктора
|
|
148
144
|
|
|
149
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
150
145
|
- Поддерживает настройку типа слайдера (одиночный или диапазонный)
|
|
151
146
|
- Включает настройки диапазона значений и шага
|
|
152
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
153
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
154
147
|
|
|
155
148
|
### Что настраивается
|
|
156
149
|
|
|
@@ -168,7 +161,6 @@
|
|
|
168
161
|
|
|
169
162
|
### Сторы и зависимости
|
|
170
163
|
|
|
171
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
172
164
|
- Используется `navigator.userAgent` для определения типа устройства для корректного отображения слайдера
|
|
173
165
|
|
|
174
166
|
### Директивы
|
|
@@ -176,7 +168,3 @@
|
|
|
176
168
|
- `bind:value` для двусторонней привязки значений слайдера
|
|
177
169
|
- `$effect` для синхронизации значений при изменении входных данных
|
|
178
170
|
- `oninput` для обработки изменения значений через пользовательский ввод
|
|
179
|
-
|
|
180
|
-
### Слоты
|
|
181
|
-
|
|
182
|
-
- Компонент не использует внешних слотов
|
package/dist/Switch/README.md
CHANGED
|
@@ -20,9 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
### Адаптивность
|
|
22
22
|
|
|
23
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
24
23
|
- Переключатели автоматически масштабируются под размер контейнера
|
|
25
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
26
24
|
|
|
27
25
|
### Ограничения
|
|
28
26
|
|
|
@@ -32,9 +30,7 @@
|
|
|
32
30
|
|
|
33
31
|
### Производительность
|
|
34
32
|
|
|
35
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
36
33
|
- Битовые операции выполняются эффективно для управления состоянием
|
|
37
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
38
34
|
|
|
39
35
|
## Пропсы
|
|
40
36
|
|
|
@@ -163,11 +159,8 @@
|
|
|
163
159
|
|
|
164
160
|
### Особенности конструктора
|
|
165
161
|
|
|
166
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
167
162
|
- Поддерживает настройку типа переключателя, режима битов и подписей
|
|
168
163
|
- Включает управление списком опций с возможностью добавления/удаления
|
|
169
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
170
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
171
164
|
|
|
172
165
|
### Что настраивается
|
|
173
166
|
|
|
@@ -185,7 +178,6 @@
|
|
|
185
178
|
|
|
186
179
|
### Сторы и зависимости
|
|
187
180
|
|
|
188
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
189
181
|
- Применяется переход `fly` из `svelte/transition` для анимации подсказки
|
|
190
182
|
|
|
191
183
|
### Директивы
|
|
@@ -193,7 +185,3 @@
|
|
|
193
185
|
- `bind:value` для двусторонней привязки значения
|
|
194
186
|
- `transition:fly` для анимации информационной подсказки
|
|
195
187
|
- `$effect` для инициализации значения при его отсутствии
|
|
196
|
-
|
|
197
|
-
### Слоты
|
|
198
|
-
|
|
199
|
-
- Компонент не использует внешних слотов
|
package/dist/Table/README.md
CHANGED
|
@@ -26,9 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
### Адаптивность
|
|
28
28
|
|
|
29
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
30
29
|
- Таблица автоматически адаптируется под размеры контейнера
|
|
31
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
32
30
|
- Размер текста строк задаётся CSS-переменной `--table-font-size` на любом родителе (по умолчанию `13px`), например `style="--table-font-size: 11.5px"` — так потребитель меняет масштаб данных без правки компонента
|
|
33
31
|
|
|
34
32
|
### Ограничения
|
|
@@ -39,9 +37,7 @@
|
|
|
39
37
|
|
|
40
38
|
### Производительность
|
|
41
39
|
|
|
42
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
43
40
|
- Буферизация данных позволяет эффективно отображать большие объемы информации
|
|
44
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
45
41
|
|
|
46
42
|
## Пропсы
|
|
47
43
|
|
|
@@ -235,11 +231,8 @@
|
|
|
235
231
|
|
|
236
232
|
### Особенности конструктора
|
|
237
233
|
|
|
238
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
239
234
|
- Поддерживает настройку столбцов таблицы с различными типами содержимого
|
|
240
235
|
- Включает настройки буфера данных, обводки и автопрокрутки
|
|
241
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
242
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
243
236
|
|
|
244
237
|
### Что настраивается
|
|
245
238
|
|
|
@@ -257,7 +250,6 @@
|
|
|
257
250
|
|
|
258
251
|
### Сторы и зависимости
|
|
259
252
|
|
|
260
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
261
253
|
- Используются переходы `fade`, `fly`, `slide` из `svelte/transition` для анимаций
|
|
262
254
|
- Используется `onMount` для инициализации обработчиков прокрутки
|
|
263
255
|
|
package/dist/Tabs/README.md
CHANGED
|
@@ -15,9 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
### Адаптивность
|
|
17
17
|
|
|
18
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
19
18
|
- Вкладки автоматически адаптируются под размер контейнера
|
|
20
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
21
19
|
|
|
22
20
|
### Ограничения
|
|
23
21
|
|
|
@@ -27,8 +25,6 @@
|
|
|
27
25
|
|
|
28
26
|
### Производительность
|
|
29
27
|
|
|
30
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
31
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
32
28
|
- Содержимое вкладок рендерится только при активации соответствующей вкладки
|
|
33
29
|
|
|
34
30
|
## Пропсы
|
|
@@ -145,11 +141,8 @@
|
|
|
145
141
|
|
|
146
142
|
### Особенности конструктора
|
|
147
143
|
|
|
148
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
149
144
|
- Поддерживает настройку позиционирования иконки и текста
|
|
150
145
|
- Включает управление списком вкладок с возможностью добавления/удаления
|
|
151
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
152
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
153
146
|
|
|
154
147
|
### Что настраивается
|
|
155
148
|
|
|
@@ -166,7 +159,6 @@
|
|
|
166
159
|
|
|
167
160
|
### Сторы и зависимости
|
|
168
161
|
|
|
169
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
170
162
|
- Используется `optionsStore` для получения цветовых опций
|
|
171
163
|
|
|
172
164
|
### Директивы
|
package/dist/TextField/README.md
CHANGED
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
### Адаптивность
|
|
16
16
|
|
|
17
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
18
17
|
- Текст автоматически адаптируется под размер контейнера
|
|
19
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
20
18
|
|
|
21
19
|
### Ограничения
|
|
22
20
|
|
|
@@ -24,11 +22,6 @@
|
|
|
24
22
|
- При использовании фона применяется стандартное оформление с закругленными углами
|
|
25
23
|
- Текст всегда выравнивается по центру
|
|
26
24
|
|
|
27
|
-
### Производительность
|
|
28
|
-
|
|
29
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
30
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
31
|
-
|
|
32
25
|
## Пропсы
|
|
33
26
|
|
|
34
27
|
| Название | Тип | По умолчанию | Описание |
|
|
@@ -94,11 +87,8 @@
|
|
|
94
87
|
|
|
95
88
|
### Особенности конструктора
|
|
96
89
|
|
|
97
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
98
90
|
- Поддерживает настройку размера текста и цвета
|
|
99
91
|
- Включает настройки оформления (жирный, курсив, фон)
|
|
100
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
101
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
102
92
|
|
|
103
93
|
### Что настраивается
|
|
104
94
|
|
|
@@ -113,15 +103,7 @@
|
|
|
113
103
|
- Объект `textSize` определяет CSS-классы для различных размеров текста
|
|
114
104
|
- Переменная `background` управляет отображением фонового оформления
|
|
115
105
|
|
|
116
|
-
### Сторы и зависимости
|
|
117
|
-
|
|
118
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
119
|
-
|
|
120
106
|
### Директивы
|
|
121
107
|
|
|
122
108
|
- `twMerge` для объединения классов обертки и текста
|
|
123
109
|
- `$props()` для получения пропсов компонента
|
|
124
|
-
|
|
125
|
-
### Слоты
|
|
126
|
-
|
|
127
|
-
- Компонент не использует внешних слотов
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
|
|
33
33
|
### Производительность
|
|
34
34
|
|
|
35
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
36
35
|
- Поток камеры и обработчики корректно останавливаются/отписываются при размонтировании (`stopStream`, очистка `setInterval`)
|
|
37
36
|
- `object URL` для кадров в режиме `remote` создаётся и отзывается на каждый кадр, чтобы избежать утечек памяти при длительной работе
|
|
38
37
|
|
|
@@ -132,7 +131,6 @@
|
|
|
132
131
|
- Предоставляет переключатель видимости селектора устройств (`showSelect`)
|
|
133
132
|
- Поле для `streamKey` отображается только при выбранном режиме `source="remote"`
|
|
134
133
|
- В режиме редактирования (`forConstructor={false}`) дополнительно доступны идентификатор, класс обёртки и заголовок через `CommonSnippets`
|
|
135
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
136
134
|
|
|
137
135
|
### Что настраивается
|
|
138
136
|
|
|
@@ -148,7 +146,6 @@
|
|
|
148
146
|
|
|
149
147
|
### Сторы и зависимости
|
|
150
148
|
|
|
151
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
152
149
|
- Применяется переход `slide`-подобной анимации через `svelte/transition` в дочерних компонентах (`Select`), сама карточка использует условный рендеринг без переходов
|
|
153
150
|
- Используется `onMount` для инициализации списка устройств и запроса доступа к камере (только в режиме `camera`), а также для остановки потока при размонтировании
|
|
154
151
|
- Используется `$effect` с `setInterval` (1 сек) для периодического опроса `getDevices` и обновления списка камер (актуально при подключении/отключении устройств "на лету")
|
|
@@ -159,7 +156,3 @@
|
|
|
159
156
|
- `bind:this={videoElement}` для прямого доступа к DOM-элементу `<video>` и привязки к нему `MediaStream`
|
|
160
157
|
- Условные блоки `{#if isRemote}` / `{:else}` разделяют разметку камеры и удалённого режима
|
|
161
158
|
- Обработчик `onclick` на кнопке повтора для повторного запроса доступа к камере при ошибке
|
|
162
|
-
|
|
163
|
-
### Слоты
|
|
164
|
-
|
|
165
|
-
- Компонент не использует внешних слотов
|
package/dist/Widget/README.md
CHANGED
|
@@ -22,9 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
### Адаптивность
|
|
24
24
|
|
|
25
|
-
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
26
25
|
- Виджет автоматически адаптируется под размер контейнера
|
|
27
|
-
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
28
26
|
|
|
29
27
|
### Ограничения
|
|
30
28
|
|
|
@@ -34,8 +32,6 @@
|
|
|
34
32
|
|
|
35
33
|
### Производительность
|
|
36
34
|
|
|
37
|
-
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
38
|
-
- Используется эффективное объединение классов через `twMerge`
|
|
39
35
|
- Циклическое переключение иконок останавливается при размонтировании компонента
|
|
40
36
|
|
|
41
37
|
## Пропсы
|
|
@@ -173,11 +169,8 @@
|
|
|
173
169
|
|
|
174
170
|
### Особенности конструктора
|
|
175
171
|
|
|
176
|
-
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
177
172
|
- Поддерживает настройку типа управления (ввод, слайдер, переключатель)
|
|
178
173
|
- Включает настройки числового диапазона и иконок
|
|
179
|
-
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
180
|
-
- Использует систему локализации через `$T('constructor.props.*')`
|
|
181
174
|
|
|
182
175
|
### Что настраивается
|
|
183
176
|
|
|
@@ -196,7 +189,6 @@
|
|
|
196
189
|
|
|
197
190
|
### Сторы и зависимости
|
|
198
191
|
|
|
199
|
-
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
200
192
|
- Используется `window.setInterval` для циклического переключения иконок
|
|
201
193
|
|
|
202
194
|
### Директивы
|
|
@@ -204,7 +196,3 @@
|
|
|
204
196
|
- `bind:value` для двусторонней привязки значения
|
|
205
197
|
- `$effect` для синхронизации значений и состояний
|
|
206
198
|
- `onUpdate` для обработки изменения значения
|
|
207
|
-
|
|
208
|
-
### Слоты
|
|
209
|
-
|
|
210
|
-
- Компонент не использует внешних слотов
|
package/dist/WidgetMap/README.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Назначение
|
|
4
4
|
|
|
5
|
-
Карта
|
|
5
|
+
Карта объектов в реальном времени: положение, курс и траектория каждого объекта.
|
|
6
6
|
|
|
7
7
|
> **Размеры.** Ширина — 100% контейнера (в конструкторе — ширина ячейки сетки); высота карты задаётся пропом `height` (px), в сетке конструктора виджет занимает одну строку. Мастер-цвет (`componentClass`) перекрашивает шапку.
|
|
8
8
|
|
|
9
9
|
## Пакет данных
|
|
10
10
|
|
|
11
|
-
- Поля групп устройства, по группе на
|
|
11
|
+
- Поля групп устройства, по группе на объект: по умолчанию `MAV`, несколько — через пробел (`MAV GNSS`); привязывать переменные не нужно
|
|
12
12
|
- Поток телеметрии: координаты — раз в 0.5–1 с, имя и серийный номер — реже
|
|
13
13
|
- Только отображение, ничего не отправляет
|
|
14
14
|
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
1. **Устройство** шлёт поля группы в поток телеметрии (`Telemetry_SendObject`, ключ `Data`) — облако и WebApp раскладывают их в переменные `<ModSN>|<группа>.<ключ>`. Координаты — раз в 0.5–1 с, имя и серийный номер — реже (раз в несколько секунд) отдельным кадром: буфер `Telemetry_SendObject` — 512 байт, строки его быстро съедают.
|
|
18
18
|
2. **В конструкторе** добавьте «Карту» из смарт-виджетов и перечислите группы через пробел (`MAV` или `MAV GNSS`). Переменные привязывать не нужно — виджет сам берёт ключи из таблицы ниже.
|
|
19
|
-
3. **Оператор** поверх карты включает траекторию, выбирает число её точек и таймаут маркеров. Кнопка
|
|
20
|
-
4. **Клик по маркеру** открывает карточку
|
|
19
|
+
3. **Оператор** поверх карты включает траекторию, выбирает число её точек и таймаут маркеров. Кнопка **«Показать все»** в шапке виджета вписывает все видимые объекты в экран (один объект — приближение к нему). Сама карта вид не меняет — объектов может быть много.
|
|
20
|
+
4. **Клик по маркеру** открывает карточку объекта: имя, группа, координаты, высота, курс, спутники, серийный номер; кнопки «Копировать» (всё в буфер обмена) и «Скрыть» (до следующего обновления объекта).
|
|
21
21
|
|
|
22
22
|
```c
|
|
23
23
|
/* Прошивка: группа MAV — те же ключи читает и WidgetPFD, одна отправка кормит оба виджета */
|
|
@@ -34,26 +34,26 @@ Telemetry_SendObject(g_telemetry_stream, g_mcfg.DevSN, "Data", dev, sizeof(dev)
|
|
|
34
34
|
|
|
35
35
|
## Ключи
|
|
36
36
|
|
|
37
|
-
| Ключ | Описание
|
|
38
|
-
| --------- |
|
|
39
|
-
| `Lat` | число, °: широта, обязательный; `Lat` и `Lon` = 0 — нет фикса,
|
|
40
|
-
| `Lon` | число, °: долгота, обязательный
|
|
41
|
-
| `Alt` | число, м: высота
|
|
42
|
-
| `Heading` | число, 0–360°: курс, поворачивает маркер
|
|
43
|
-
| `Sat` | число спутников
|
|
44
|
-
| `DevName` | строка: имя
|
|
45
|
-
| `DevSN` | строка: серийный номер
|
|
37
|
+
| Ключ | Описание |
|
|
38
|
+
| --------- | --------------------------------------------------------------------------------- |
|
|
39
|
+
| `Lat` | число, °: широта, обязательный; `Lat` и `Lon` = 0 — нет фикса, объект не рисуется |
|
|
40
|
+
| `Lon` | число, °: долгота, обязательный |
|
|
41
|
+
| `Alt` | число, м: высота |
|
|
42
|
+
| `Heading` | число, 0–360°: курс, поворачивает маркер |
|
|
43
|
+
| `Sat` | число спутников |
|
|
44
|
+
| `DevName` | строка: имя объекта, подпись маркера; без него — имя группы |
|
|
45
|
+
| `DevSN` | строка: серийный номер |
|
|
46
46
|
|
|
47
47
|
## Особенности
|
|
48
48
|
|
|
49
|
-
Смарт-виджет «Карта» — положение
|
|
49
|
+
Смарт-виджет «Карта» — положение объектов на карте MapLibre с траекториями. Каждый объект — одна **группа полей** устройства (префикс, например `MAV`); виджет показывает сразу несколько групп, например `MAV GNSS` — автопилот и собственный GNSS-приёмник модуля. Только отображение: ничего не отправляет и не знает про DeviceStore/WebSocket. Заменяет удалённый компонент `Map`.
|
|
50
50
|
|
|
51
51
|
### Поведение
|
|
52
52
|
|
|
53
|
-
- **Свежесть.**
|
|
53
|
+
- **Свежесть.** Объект зелёный, пока его значения менялись за таймаут; без изменений — красный; ещё через таймаут скрывается до новых данных.
|
|
54
54
|
- **Траектория** — точка добавляется только при смене координат (курс и высота могут обновляться чаще позиции).
|
|
55
55
|
- **Только 2D** — наклон (3D) запрещён; правой кнопкой мыши карта только поворачивается, кнопка-компас под зумом возвращает её на север.
|
|
56
|
-
- **Шапка** — сколько
|
|
56
|
+
- **Шапка** — сколько объектов на связи из заданных: зелёный — все, серый — часть, красный — ни одного.
|
|
57
57
|
- Карта светлая/тёмная по ближайшему предку `.dark`/`.light` (как токены `theme.css`), пересчёт по событию `ThemeChange`.
|
|
58
58
|
|
|
59
59
|
## Пропсы
|
|
@@ -63,7 +63,7 @@ Telemetry_SendObject(g_telemetry_stream, g_mcfg.DevSN, "Data", dev, sizeof(dev)
|
|
|
63
63
|
| `wrapperClass` | `string` | `""` | CSS-классы обёртки |
|
|
64
64
|
| `componentClass` | `string` | `""` | «Мастер-цвет» виджета — роль вида `"bg-blue"` |
|
|
65
65
|
| `label` | `{ name?: string }` | `{ name: "Карта" }` | Заголовок карточки |
|
|
66
|
-
| `groups` | `string[]` | `["MAV"]` | Префиксы групп полей — по
|
|
66
|
+
| `groups` | `string[]` | `["MAV"]` | Префиксы групп полей — по объекту на группу |
|
|
67
67
|
| `value` | `Record<string, Partial<IWidgetMapData>>` | `undefined` | Значения по группам: `{ MAV: { Lat, Lon, ... }, GNSS: {...} }` |
|
|
68
68
|
| `keys` | `Partial<Record<keyof IWidgetMapData, string>>` | `undefined` | Переопределение имён ключей (применяет GUIPreview) |
|
|
69
69
|
| `height` | `number` | `400` | Высота карты, px |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<!-- $lib/WidgetMap/WidgetMap.svelte — смарт-виджет «Карта»:
|
|
1
|
+
<!-- $lib/WidgetMap/WidgetMap.svelte — смарт-виджет «Карта»: объекты из групп полей устройства (по умолчанию MAV) с полями
|
|
2
2
|
Lat/Lon/Alt/Heading/Sat/DevName/DevSN (см. IWidgetMapData), каждая группа — свой маркер и своя траектория. Только отображение:
|
|
3
3
|
ничего не отправляет и не знает про DeviceStore/WebSocket. Траекторию, длину трека и таймаут маркеров оператор
|
|
4
|
-
переключает прямо поверх карты,
|
|
4
|
+
переключает прямо поверх карты, «Показать все» — кнопка в шапке; вид карта сама не меняет — объектов может быть много. -->
|
|
5
5
|
<script lang="ts">
|
|
6
6
|
import { onMount, untrack } from "svelte"
|
|
7
7
|
import { slide } from "svelte/transition"
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
let isCopied = $state(false)
|
|
70
70
|
let isDarkMode = $state(false)
|
|
71
71
|
|
|
72
|
-
/*
|
|
72
|
+
/* Объект обновляется только при реальной смене значений — свежесть считается от последнего изменения, а не от перерисовки */
|
|
73
73
|
$effect(() => {
|
|
74
74
|
for (const group of groupList) {
|
|
75
75
|
const v = value?.[group]
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
const isFresh = (b: Board) => now - b.lastChange < markerTimeout
|
|
121
121
|
let freshCount = $derived(visibleBoards.filter(isFresh).length)
|
|
122
122
|
|
|
123
|
-
/* Вписывает в экран все видимые
|
|
123
|
+
/* Вписывает в экран все видимые объекты, один объект — приближение к нему */
|
|
124
124
|
const fitAllBoards = () => {
|
|
125
125
|
if (!mapInstance || visibleBoards.length === 0) return
|
|
126
126
|
if (visibleBoards.length === 1) return mapInstance.flyTo({ center: [visibleBoards[0].lon, visibleBoards[0].lat], zoom: 16 })
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
<UI.Button
|
|
184
184
|
wrapperClass="w-auto"
|
|
185
185
|
componentClass="bg-transparent px-3"
|
|
186
|
-
content={{ icon: FitIcon, name: $T("constructor.props.map.fitAll") }}
|
|
186
|
+
content={{ icon: FitIcon, name: $T("constructor.props.map.fitAll"), info: { text: $T("constructor.props.map.fitAllHint"), side: "bottom" } }}
|
|
187
187
|
disabled={collapsed || visibleBoards.length === 0}
|
|
188
188
|
onClick={fitAllBoards}
|
|
189
189
|
/>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- $lib/WidgetMap/WidgetMapProps.svelte — панель пропсов конструктора для WidgetMap: заголовок, группы полей
|
|
2
|
-
(каждая —
|
|
2
|
+
(каждая — объект), мастер-цвет, высота карты, иконка маркера и начальные значения переключателей оператора. -->
|
|
3
3
|
<script lang="ts">
|
|
4
4
|
import { T } from "../locales/i18n"
|
|
5
5
|
import * as UI from ".."
|
package/dist/WidgetPFD/README.md
CHANGED
|
@@ -53,8 +53,10 @@
|
|
|
53
53
|
|
|
54
54
|
- **Строка состояния** — ARMED/DISARMED, режим полёта (название по типу аппарата: самолёт, коптер, наземный), GPS (тип фиксации и спутники), батарея (В, А, %), расстояние и пеленг на точку взлёта.
|
|
55
55
|
- **Авиагоризонт** — небо и земля по крену и тангажу, лестница тангажа через 5°, дуга крена (10/20/30/45/60°), символ самолёта. Ориентация сглаживается между пакетами (Tween 120 мс).
|
|
56
|
-
- **Лента скорости** (слева, путевая
|
|
57
|
-
-
|
|
56
|
+
- **Лента скорости** (слева, путевая над землёй) и **лента высоты** (справа, над точкой взлёта) с вариометром у края, **лента курса** (снизу): розовый ▲ — трек (куда аппарат реально движется, по `Vx`/`Vy`), зелёный ● — направление на точку взлёта.
|
|
57
|
+
- **Углы под лентами** — воздушная скорость (относительно воздуха, отличается от путевой на ветер) и вертикальная скорость (+ набор зелёным, − снижение оранжевым).
|
|
58
|
+
- **Подсказки** — наведите курсор на любой элемент прибора, строки состояния или значений: всплывающая подсказка с расшифровкой и текущим значением (элементы помечены `data-tip`).
|
|
59
|
+
- **Под прибором** — легенда трека и направления на дом с градусами, координаты, высота над уровнем моря, давление, температура.
|
|
58
60
|
- **Нет данных** — если пакеты не приходили дольше `limits.staleMs` (по умолчанию 2 с), прибор перечёркивается и помечается «НЕТ ДАННЫХ»; в шапке всегда виден возраст данных.
|
|
59
61
|
- **Узкая ячейка** (уже 440 px) — ленты скорости и высоты заменяются числами поверх горизонта.
|
|
60
62
|
|
|
@@ -204,6 +204,17 @@
|
|
|
204
204
|
const uid = crypto.randomUUID().slice(0, 8)
|
|
205
205
|
|
|
206
206
|
const fmt = (v: number, digits = 1) => (Number.isFinite(v) ? v.toFixed(digits) : "—")
|
|
207
|
+
const signed = (v: number) => `${v >= 0 ? "+" : ""}${fmt(v)}`
|
|
208
|
+
|
|
209
|
+
/* Всплывающая подсказка: элементы прибора и строк помечены data-tip, одна подсказка следует за курсором */
|
|
210
|
+
let tip: { text: string; x: number; y: number } | null = $state(null)
|
|
211
|
+
const onTip = (e: PointerEvent) => {
|
|
212
|
+
const host = e.currentTarget as HTMLElement
|
|
213
|
+
const el = (e.target as Element | null)?.closest("[data-tip]")
|
|
214
|
+
if (!el) return (tip = null)
|
|
215
|
+
const r = host.getBoundingClientRect()
|
|
216
|
+
tip = { text: el.getAttribute("data-tip") ?? "", x: Math.min(Math.max(e.clientX - r.left, 90), r.width - 90), y: e.clientY - r.top }
|
|
217
|
+
}
|
|
207
218
|
const fmtDistance = (m: number) => (m >= 1000 ? `${(m / 1000).toFixed(2)} км` : `${Math.round(m)} м`)
|
|
208
219
|
const fmtAge = (s: number) => (Number.isFinite(s) ? `${s.toFixed(1)} с` : "нет связи")
|
|
209
220
|
</script>
|
|
@@ -219,21 +230,31 @@
|
|
|
219
230
|
</WidgetHeader>
|
|
220
231
|
|
|
221
232
|
{#if !collapsed}
|
|
222
|
-
<div
|
|
233
|
+
<div
|
|
234
|
+
class="relative flex flex-col gap-2"
|
|
235
|
+
transition:slide={{ duration: 150 }}
|
|
236
|
+
bind:clientWidth={width}
|
|
237
|
+
onpointermove={onTip}
|
|
238
|
+
onpointerleave={() => (tip = null)}
|
|
239
|
+
role="presentation"
|
|
240
|
+
>
|
|
223
241
|
<!-- Строка состояния -->
|
|
224
242
|
<div
|
|
225
243
|
class="flex flex-wrap items-center gap-x-4 gap-y-1 rounded-[10px] border border-(--hairline-color) bg-(--back-color) px-3 py-2 text-[12px] font-semibold tabular-nums"
|
|
226
244
|
>
|
|
227
|
-
<span
|
|
228
|
-
|
|
245
|
+
<span
|
|
246
|
+
class="rounded-md px-1.5 py-0.5 {armed ? 'bg-(--red-color) text-white' : 'bg-(--container-color) text-(--muted-color)'}"
|
|
247
|
+
data-tip={armed ? "Двигатели взведены — аппарат готов к полёту" : "Двигатели не взведены"}>{armed ? "ARMED" : "DISARMED"}</span
|
|
248
|
+
>
|
|
249
|
+
<span data-tip="Режим полёта автопилота">{modeName}</span>
|
|
250
|
+
<span class={fix < 3 ? "text-(--orange-color)" : ""} data-tip="Тип фиксации GPS · число спутников; меньше 3D — позиция неточная"
|
|
251
|
+
>GPS {FIX[fix] ?? fix} · {num(value?.Sat)}</span
|
|
229
252
|
>
|
|
230
|
-
<span
|
|
231
|
-
<span class={fix < 3 ? "text-(--orange-color)" : ""}>GPS {FIX[fix] ?? fix} · {num(value?.Sat)}</span>
|
|
232
|
-
<span class={battLow ? "text-(--red-color)" : ""}>
|
|
253
|
+
<span class={battLow ? "text-(--red-color)" : ""} data-tip="Батарея: напряжение · ток · остаток заряда">
|
|
233
254
|
{fmt(num(value?.BV))} В{battCurrent >= 0 ? ` · ${fmt(battCurrent)} А` : ""}{battRem >= 0 ? ` · ${battRem}%` : ""}
|
|
234
255
|
</span>
|
|
235
256
|
{#if home}
|
|
236
|
-
<span>Дом {fmtDistance(home.distance)} · {Math.round(home.bearing)}°</span>
|
|
257
|
+
<span data-tip="Точка взлёта: расстояние · направление на неё">Дом {fmtDistance(home.distance)} · {Math.round(home.bearing)}°</span>
|
|
237
258
|
{/if}
|
|
238
259
|
</div>
|
|
239
260
|
|
|
@@ -247,7 +268,7 @@
|
|
|
247
268
|
</defs>
|
|
248
269
|
|
|
249
270
|
<!-- Авиагоризонт -->
|
|
250
|
-
<g clip-path="url(#pfd-horizon-{uid})">
|
|
271
|
+
<g clip-path="url(#pfd-horizon-{uid})" data-tip="Авиагоризонт: крен {fmt(roll.current)}°, тангаж {fmt(pitch.current)}°">
|
|
251
272
|
<g transform="rotate({-roll.current} {CX} {CY}) translate(0 {pitch.current * PPD})">
|
|
252
273
|
<rect x={CX - 600} y={CY - 1000} width="1200" height="1000" fill="#3a86c8" />
|
|
253
274
|
<rect x={CX - 600} y={CY} width="1200" height="1000" fill="#8a5a2b" />
|
|
@@ -274,7 +295,10 @@
|
|
|
274
295
|
{@const b = arcPoint(t, ROLL_R + (t % 30 === 0 ? 12 : 7))}
|
|
275
296
|
<line x1={a.x} y1={a.y} x2={b.x} y2={b.y} stroke="#fff" stroke-width="1.5" />
|
|
276
297
|
{/each}
|
|
277
|
-
<g
|
|
298
|
+
<g
|
|
299
|
+
transform="rotate({-roll.current} {CX} {CY})"
|
|
300
|
+
data-tip="Указатель крена: {fmt(roll.current)}°{limits?.bankMax !== undefined ? `, предел ±${limits.bankMax}°` : ''}"
|
|
301
|
+
>
|
|
278
302
|
<polygon
|
|
279
303
|
points="{CX},{CY - ROLL_R + 2} {CX - 7},{CY - ROLL_R + 14} {CX + 7},{CY - ROLL_R + 14}"
|
|
280
304
|
fill={limits?.bankMax !== undefined && Math.abs(roll.current) > limits.bankMax ? "#ef4444" : "#facc15"}
|
|
@@ -303,7 +327,12 @@
|
|
|
303
327
|
|
|
304
328
|
{#if !compact}
|
|
305
329
|
<!-- Лента скорости (путевая), красные зоны вне speedMin/speedMax -->
|
|
306
|
-
<g
|
|
330
|
+
<g
|
|
331
|
+
clip-path="url(#pfd-speed-{uid})"
|
|
332
|
+
data-tip="Путевая скорость (над землёй, по GPS): {fmt(gs)} м/с{limits?.speedMin !== undefined || limits?.speedMax !== undefined
|
|
333
|
+
? ' — красное: вне допустимого диапазона'
|
|
334
|
+
: ''}"
|
|
335
|
+
>
|
|
307
336
|
<rect x="0" y="0" width="70" height={HH} fill="#000" fill-opacity="0.72" />
|
|
308
337
|
{#if limits?.speedMin !== undefined}
|
|
309
338
|
{@const y = CY - (limits.speedMin - gs) * SPEED_PPU}
|
|
@@ -322,12 +351,15 @@
|
|
|
322
351
|
<rect x="4" y={CY - 14} width="58" height="28" rx="4" fill="#000" stroke="var(--accent-color)" stroke-width="1.5" />
|
|
323
352
|
<text x="33" y={CY + 6} fill="#fff" font-size="15" font-weight="600" text-anchor="middle">{fmt(gs)}</text>
|
|
324
353
|
<rect x="0" y="0" width="70" height="20" rx="8" fill="#000" />
|
|
325
|
-
<
|
|
326
|
-
<text x="35" y="14" fill="#fff" font-size="10" text-anchor="middle" fill-opacity="0.7">GS м/с</text>
|
|
327
|
-
<text x="35" y={HH - 6} fill="#fff" font-size="11" text-anchor="middle">AS {fmt(as)}</text>
|
|
354
|
+
<text x="35" y="14" fill="#fff" font-size="10" text-anchor="middle" fill-opacity="0.7">СКОР м/с</text>
|
|
328
355
|
|
|
329
356
|
<!-- Лента высоты над точкой взлёта, красная зона выше altMax; вариометр справа -->
|
|
330
|
-
<g
|
|
357
|
+
<g
|
|
358
|
+
clip-path="url(#pfd-alt-{uid})"
|
|
359
|
+
data-tip="Высота над точкой взлёта: {Math.round(alt)} м; полоса у края — вертикальная скорость{limits?.altMax !== undefined
|
|
360
|
+
? ', красное — выше предела'
|
|
361
|
+
: ''}"
|
|
362
|
+
>
|
|
331
363
|
<rect x={VW - 70} y="0" width="70" height={HH} fill="#000" fill-opacity="0.72" />
|
|
332
364
|
{#if limits?.altMax !== undefined}
|
|
333
365
|
{@const y = CY - (limits.altMax - alt) * ALT_PPU}
|
|
@@ -343,13 +375,30 @@
|
|
|
343
375
|
<rect x={VW - 66} y={CY - 14} width="58" height="28" rx="4" fill="#000" stroke="var(--accent-color)" stroke-width="1.5" />
|
|
344
376
|
<text x={VW - 37} y={CY + 6} fill="#fff" font-size="15" font-weight="600" text-anchor="middle">{Math.round(alt)}</text>
|
|
345
377
|
<rect x={VW - 70} y="0" width="70" height="20" rx="8" fill="#000" />
|
|
346
|
-
<
|
|
347
|
-
|
|
348
|
-
|
|
378
|
+
<text x={VW - 35} y="14" fill="#fff" font-size="10" text-anchor="middle" fill-opacity="0.7">ВЫС м</text>
|
|
379
|
+
|
|
380
|
+
<!-- Углы под лентами: воздушная и вертикальная скорость -->
|
|
381
|
+
<g data-tip="Воздушная скорость — относительно воздуха; отличается от путевой на ветер">
|
|
382
|
+
<rect x="0" y={HH + 6} width={HX - 6} height="44" rx="8" fill="#000" fill-opacity="0.72" />
|
|
383
|
+
<text x={(HX - 6) / 2} y={HH + 21} fill="#fff" fill-opacity="0.7" font-size="9" text-anchor="middle">ВОЗД. СКОР</text>
|
|
384
|
+
<text x={(HX - 6) / 2} y={HH + 41} fill="#fff" font-size="14" font-weight="600" text-anchor="middle">{fmt(as)}</text>
|
|
385
|
+
</g>
|
|
386
|
+
<g data-tip="Вертикальная скорость: + набор высоты, − снижение, м/с">
|
|
387
|
+
<rect x={HX + HW + 6} y={HH + 6} width={VW - HX - HW - 6} height="44" rx="8" fill="#000" fill-opacity="0.72" />
|
|
388
|
+
<text x={(HX + HW + 6 + VW) / 2} y={HH + 21} fill="#fff" fill-opacity="0.7" font-size="9" text-anchor="middle">ВЕРТ. СКОР</text>
|
|
389
|
+
<text
|
|
390
|
+
x={(HX + HW + 6 + VW) / 2}
|
|
391
|
+
y={HH + 41}
|
|
392
|
+
fill={climb > 0.2 ? "#22c55e" : climb < -0.2 ? "#f97316" : "#fff"}
|
|
393
|
+
font-size="14"
|
|
394
|
+
font-weight="600"
|
|
395
|
+
text-anchor="middle">{signed(climb)}</text
|
|
396
|
+
>
|
|
397
|
+
</g>
|
|
349
398
|
{/if}
|
|
350
399
|
|
|
351
400
|
<!-- Лента курса: трек (розовый), направление на дом (зелёный) -->
|
|
352
|
-
<g clip-path="url(#pfd-hdg-{uid})">
|
|
401
|
+
<g clip-path="url(#pfd-hdg-{uid})" data-tip="Курс — куда направлен нос аппарата: {Math.round(wrap360(heading.current))}°">
|
|
353
402
|
<rect x={HX} y={HH + 6} width={HW} height="44" fill="#000" fill-opacity="0.72" />
|
|
354
403
|
{#each hdgTicks as d (d)}
|
|
355
404
|
{@const x = CX + hdgOffset(d)}
|
|
@@ -358,11 +407,21 @@
|
|
|
358
407
|
{/each}
|
|
359
408
|
{#if track !== null}
|
|
360
409
|
{@const x = CX + hdgOffset(track)}
|
|
361
|
-
<polygon
|
|
410
|
+
<polygon
|
|
411
|
+
points="{x},{HH + 8} {x - 6},{HH + 18} {x + 6},{HH + 18}"
|
|
412
|
+
fill="#ec4899"
|
|
413
|
+
data-tip="Трек — куда аппарат реально движется над землёй (по скоростям на север и восток): {Math.round(track)}°"
|
|
414
|
+
/>
|
|
362
415
|
{/if}
|
|
363
416
|
{#if home}
|
|
364
417
|
{@const x = CX + hdgOffset(home.bearing)}
|
|
365
|
-
<circle
|
|
418
|
+
<circle
|
|
419
|
+
cx={x}
|
|
420
|
+
cy={HH + 44}
|
|
421
|
+
r="4"
|
|
422
|
+
fill="#22c55e"
|
|
423
|
+
data-tip="Направление на точку взлёта: {Math.round(home.bearing)}°, {fmtDistance(home.distance)}"
|
|
424
|
+
/>
|
|
366
425
|
{/if}
|
|
367
426
|
</g>
|
|
368
427
|
<rect x={CX - 26} y={HH + 20} width="52" height="24" rx="4" fill="#000" stroke="var(--accent-color)" stroke-width="1.5" />
|
|
@@ -382,12 +441,27 @@
|
|
|
382
441
|
{/if}
|
|
383
442
|
</svg>
|
|
384
443
|
|
|
444
|
+
{#if tip}
|
|
445
|
+
<div
|
|
446
|
+
class="pointer-events-none absolute z-10 max-w-64 -translate-x-1/2 -translate-y-full rounded-lg border border-(--hairline-color) bg-(--back-color) px-2.5 py-1.5 text-[12px] text-(--font-color) shadow-(--elevation-2)"
|
|
447
|
+
style="left: {tip.x}px; top: {tip.y - 10}px"
|
|
448
|
+
>
|
|
449
|
+
{tip.text}
|
|
450
|
+
</div>
|
|
451
|
+
{/if}
|
|
452
|
+
|
|
385
453
|
<!-- Значения под прибором -->
|
|
386
454
|
<div
|
|
387
455
|
class="flex flex-wrap gap-x-5 gap-y-1 rounded-[10px] border border-(--hairline-color) bg-(--back-color) px-3 py-2 text-[12px] whitespace-nowrap tabular-nums"
|
|
388
456
|
>
|
|
457
|
+
{#if track !== null}<span data-tip="Направление движения над землёй"
|
|
458
|
+
><span style="color:#ec4899">▲</span> <span class="text-(--muted-color)">Трек</span> {Math.round(track)}°</span
|
|
459
|
+
>{/if}
|
|
460
|
+
{#if home}<span data-tip="Направление на точку взлёта"
|
|
461
|
+
><span style="color:#22c55e">●</span> <span class="text-(--muted-color)">Дом</span> {Math.round(home.bearing)}°</span
|
|
462
|
+
>{/if}
|
|
389
463
|
<span><span class="text-(--muted-color)">Координаты</span> {lat ? `${lat.toFixed(6)}, ${lon.toFixed(6)}` : "—"}</span>
|
|
390
|
-
<span><span class="text-(--muted-color)">Высота MSL</span> {Math.round(altMsl)} м</span>
|
|
464
|
+
<span data-tip="Высота над уровнем моря"><span class="text-(--muted-color)">Высота MSL</span> {Math.round(altMsl)} м</span>
|
|
391
465
|
<span><span class="text-(--muted-color)">Давление</span> {fmt(num(value?.Press))} гПа</span>
|
|
392
466
|
<span><span class="text-(--muted-color)">Температура</span> {fmt(num(value?.Temp))} °C</span>
|
|
393
467
|
</div>
|
|
@@ -119,14 +119,14 @@ const translations = {
|
|
|
119
119
|
"🎯 **用途**\n控制可寻址灯带:颜色、效果、速度以及灯带本身的参数。\n\n📦 **数据包**\n- `RGB_Strip` 驱动的 `LST` 分组字段(可通过设置中的前缀更改),无需绑定变量\n- 颜色、效果和速度立即发送\n- 「硬件」区块在本地编辑,点击「保存」一次性发送 —— 灯带重启\n\n🔑 **键**\n- `Color` —— 数组 `[R, G, B, W]`,0–255;`W` 仅用于 SK6812\n- `Effect` —— 数字:`0` 静态、`1` 彩虹、`2` 呼吸、`3` 调色板、`4` 彗星、`5` 闪烁、`6` 火焰、`7` 跑马灯\n- `Speed` —— 0–10 的数字(非线性),`0` —— 暂停\n- `Count` —— LED 数量,1–`MaxCount`\n- `Model` —— 数字:`0` WS2812、`1` SK6812(RGBW)、`2` WS2811\n- `Order` —— 颜色顺序:`0` GRB、`1` RGB、`2` BRG、`3` RBG、`4` GBR、`5` BGR\n- `MaxCount` —— 数字:固件中的容量,只读\n\n✨ **特点**\n- 彩虹、调色板和火焰不使用颜色\n- 颜色不对(红色变绿色)—— 更改顺序:WS2812 通常为 GRB,部分 WS2811 为 RGB 或 BRG\n- 数据引脚和传输方式(RMT/SPI)在固件中设定\n\n⚙️ **设置**\n- 分组前缀(ID)、主色",
|
|
120
120
|
],
|
|
121
121
|
"component.info.WidgetPFD": [
|
|
122
|
-
"🎯 **Назначение**\nПилотажный дисплей (PFD) — главный прибор контроля полёта: пространственное положение, скорость, высота, курс и состояние систем.\n\n📦 **Пакет данных**\n- Поля группы `MAV` — телеметрия автопилота MAVLink (меняется префиксом в настройках), привязывать переменные не нужно\n- Поток телеметрии: `Roll`, `Pitch`, `Heading` — ~20 раз в секунду, остальное — 1–2 раза в секунду\n- Только отображение, ничего не отправляет\n\n🔑 **Ключи**\n- `Roll`, `Pitch` — числа, °: крен (вправо +) и тангаж (вверх +)\n- `Heading` — число, 0–360°: курс\n- `GSpeed`, `ASpeed` — числа, м/с: путевая и воздушная скорость\n- `Alt` — число, м: высота над точкой взлёта; `AltMSL` — над уровнем моря\n- `Climb` — число, м/с: вертикальная скорость (вверх +)\n- `Lat`, `Lon` — числа, °: координаты\n- `Vx`, `Vy` — числа, м/с: скорость на север и восток — для трека\n- `Fix` — число: тип фиксации GPS, `0`–`1` нет, `2` 2D, `3` 3D, `4`–`6` DGPS/RTK; `Sat` — число спутников\n- `BV` — В; `BC` — А (`-1` не измеряется); `BRem` — % (`-1` неизвестно)\n- `Mode` — число: режим автопилота; `VType` — тип аппарата (по нему — названия режимов); `Armed` — `1` взведён\n- `HomeLat`, `HomeLon` — числа, °: точка взлёта, `0` — неизвестна\n- `Press` — гПа, `Temp` — °C\n\n✨ **Особенности**\n- Ориентация сглаживается между пакетами\n-
|
|
123
|
-
'🎯 **Purpose**\nPrimary flight display (PFD) — the main flight instrument: attitude, speed, altitude, heading and system status.\n\n📦 **Data packet**\n- Fields of the `MAV` group — MAVLink autopilot telemetry (changed by the prefix in settings), no variable binding needed\n- Telemetry stream: `Roll`, `Pitch`, `Heading` ~20 times a second, the rest 1–2 times a second\n- Display only, sends nothing\n\n🔑 **Keys**\n- `Roll`, `Pitch` — numbers, °: bank (right +) and pitch (up +)\n- `Heading` — number, 0–360°: heading\n- `GSpeed`, `ASpeed` — numbers, m/s: ground speed and airspeed\n- `Alt` — number, m: altitude above home; `AltMSL` — above sea level\n- `Climb` — number, m/s: vertical speed (up +)\n- `Lat`, `Lon` — numbers, °: coordinates\n- `Vx`, `Vy` — numbers, m/s: north and east velocity — for the track\n- `Fix` — number: GPS fix type, `0`–`1` none, `2` 2D, `3` 3D, `4`–`6` DGPS/RTK; `Sat` — satellite count\n- `BV` — V; `BC` — A (`-1` not measured); `BRem` — % (`-1` unknown)\n- `Mode` — number: autopilot mode; `VType` — vehicle type (mode names depend on it); `Armed` — `1` armed\n- `HomeLat`, `HomeLon` — numbers, °: home position, `0` — unknown\n- `Press` — hPa, `Temp` — °C\n\n✨ **Features**\n- Attitude is smoothed between packets\n-
|
|
124
|
-
"🎯 **用途**\n主飞行显示器(PFD)—— 飞行监控的主要仪表:姿态、速度、高度、航向和系统状态。\n\n📦 **数据包**\n- `MAV` 分组的字段 —— MAVLink 自驾仪遥测(可通过设置中的前缀更改),无需绑定变量\n- 遥测流:`Roll`、`Pitch`、`Heading` 约每秒 20 次,其余每秒 1–2 次\n- 仅显示,不发送任何数据\n\n🔑 **键**\n- `Roll`、`Pitch` —— 数字,°:坡度(向右 +)和俯仰(向上 +)\n- `Heading` —— 数字,0–360°:航向\n- `GSpeed`、`ASpeed` —— 数字,m/s:地速和空速\n- `Alt` —— 数字,m:相对起飞点高度;`AltMSL` —— 海拔高度\n- `Climb` —— 数字,m/s:升降速度(向上 +)\n- `Lat`、`Lon` —— 数字,°:坐标\n- `Vx`、`Vy` —— 数字,m/s:向北和向东的速度 —— 用于航迹\n- `Fix` —— 数字:GPS 定位类型,`0`–`1` 无、`2` 2D、`3` 3D、`4`–`6` DGPS/RTK;`Sat` —— 卫星数\n- `BV` —— V;`BC` —— A(`-1` 未测量);`BRem` —— %(`-1` 未知)\n- `Mode` —— 数字:自驾仪模式;`VType` —— 机型(决定模式名称);`Armed` —— `1` 已解锁\n- `HomeLat`、`HomeLon` —— 数字,°:起飞点,`0` —— 未知\n- `Press` —— hPa,`Temp` —— °C\n\n✨ **特点**\n- 数据包之间的姿态经过平滑\n-
|
|
122
|
+
"🎯 **Назначение**\nПилотажный дисплей (PFD) — главный прибор контроля полёта: пространственное положение, скорость, высота, курс и состояние систем.\n\n📦 **Пакет данных**\n- Поля группы `MAV` — телеметрия автопилота MAVLink (меняется префиксом в настройках), привязывать переменные не нужно\n- Поток телеметрии: `Roll`, `Pitch`, `Heading` — ~20 раз в секунду, остальное — 1–2 раза в секунду\n- Только отображение, ничего не отправляет\n\n🔑 **Ключи**\n- `Roll`, `Pitch` — числа, °: крен (вправо +) и тангаж (вверх +)\n- `Heading` — число, 0–360°: курс\n- `GSpeed`, `ASpeed` — числа, м/с: путевая и воздушная скорость\n- `Alt` — число, м: высота над точкой взлёта; `AltMSL` — над уровнем моря\n- `Climb` — число, м/с: вертикальная скорость (вверх +)\n- `Lat`, `Lon` — числа, °: координаты\n- `Vx`, `Vy` — числа, м/с: скорость на север и восток — для трека\n- `Fix` — число: тип фиксации GPS, `0`–`1` нет, `2` 2D, `3` 3D, `4`–`6` DGPS/RTK; `Sat` — число спутников\n- `BV` — В; `BC` — А (`-1` не измеряется); `BRem` — % (`-1` неизвестно)\n- `Mode` — число: режим автопилота; `VType` — тип аппарата (по нему — названия режимов); `Armed` — `1` взведён\n- `HomeLat`, `HomeLon` — числа, °: точка взлёта, `0` — неизвестна\n- `Press` — гПа, `Temp` — °C\n\n✨ **Особенности**\n- Ориентация сглаживается между пакетами\n- Наведите курсор на любой элемент прибора или строки — всплывающая подсказка с расшифровкой и текущим значением\n- Углы под лентами: воздушная скорость (относительно воздуха) и вертикальная скорость (+ набор, − снижение)\n- Розовый ▲ на ленте курса — трек: куда аппарат реально движется над землёй (по `Vx`, `Vy`); зелёный ● — направление на точку взлёта; легенда с градусами — под прибором\n- Нет данных дольше заданного времени — прибор перечёркнут и помечен «НЕТ ДАННЫХ»\n- В узкой ячейке ленты скорости и высоты заменяются числами поверх горизонта\n- Ключи `Lat`, `Lon`, `Alt`, `Heading`, `Sat` общие с «Картой» — одна группа питает оба виджета\n\n⚙️ **Настройки**\n- Префикс группы (ID), мастер-цвет\n- Границы: мин./макс. скорость и макс. высота — красные зоны на лентах; предельный крен — красная дуга; низкий заряд; время до «НЕТ ДАННЫХ»",
|
|
123
|
+
'🎯 **Purpose**\nPrimary flight display (PFD) — the main flight instrument: attitude, speed, altitude, heading and system status.\n\n📦 **Data packet**\n- Fields of the `MAV` group — MAVLink autopilot telemetry (changed by the prefix in settings), no variable binding needed\n- Telemetry stream: `Roll`, `Pitch`, `Heading` ~20 times a second, the rest 1–2 times a second\n- Display only, sends nothing\n\n🔑 **Keys**\n- `Roll`, `Pitch` — numbers, °: bank (right +) and pitch (up +)\n- `Heading` — number, 0–360°: heading\n- `GSpeed`, `ASpeed` — numbers, m/s: ground speed and airspeed\n- `Alt` — number, m: altitude above home; `AltMSL` — above sea level\n- `Climb` — number, m/s: vertical speed (up +)\n- `Lat`, `Lon` — numbers, °: coordinates\n- `Vx`, `Vy` — numbers, m/s: north and east velocity — for the track\n- `Fix` — number: GPS fix type, `0`–`1` none, `2` 2D, `3` 3D, `4`–`6` DGPS/RTK; `Sat` — satellite count\n- `BV` — V; `BC` — A (`-1` not measured); `BRem` — % (`-1` unknown)\n- `Mode` — number: autopilot mode; `VType` — vehicle type (mode names depend on it); `Armed` — `1` armed\n- `HomeLat`, `HomeLon` — numbers, °: home position, `0` — unknown\n- `Press` — hPa, `Temp` — °C\n\n✨ **Features**\n- Attitude is smoothed between packets\n- Hover any instrument element or row item — a tooltip with its meaning and current value\n- Corners under the tapes: airspeed (relative to the air) and vertical speed (+ climb, − descent)\n- Magenta ▲ on the heading tape is the track: where the vehicle actually moves over the ground (from `Vx`, `Vy`); green ● — direction to home; a legend with degrees is below the instrument\n- No data for longer than the set time — the instrument is crossed out and marked "NO DATA"\n- In a narrow cell the speed and altitude tapes become numbers over the horizon\n- Keys `Lat`, `Lon`, `Alt`, `Heading`, `Sat` are shared with the "Map" — one group feeds both widgets\n\n⚙️ **Settings**\n- Group prefix (ID), master color\n- Limits: min/max speed and max altitude — red bands on the tapes; bank limit — red arc; low battery; time until "NO DATA"',
|
|
124
|
+
"🎯 **用途**\n主飞行显示器(PFD)—— 飞行监控的主要仪表:姿态、速度、高度、航向和系统状态。\n\n📦 **数据包**\n- `MAV` 分组的字段 —— MAVLink 自驾仪遥测(可通过设置中的前缀更改),无需绑定变量\n- 遥测流:`Roll`、`Pitch`、`Heading` 约每秒 20 次,其余每秒 1–2 次\n- 仅显示,不发送任何数据\n\n🔑 **键**\n- `Roll`、`Pitch` —— 数字,°:坡度(向右 +)和俯仰(向上 +)\n- `Heading` —— 数字,0–360°:航向\n- `GSpeed`、`ASpeed` —— 数字,m/s:地速和空速\n- `Alt` —— 数字,m:相对起飞点高度;`AltMSL` —— 海拔高度\n- `Climb` —— 数字,m/s:升降速度(向上 +)\n- `Lat`、`Lon` —— 数字,°:坐标\n- `Vx`、`Vy` —— 数字,m/s:向北和向东的速度 —— 用于航迹\n- `Fix` —— 数字:GPS 定位类型,`0`–`1` 无、`2` 2D、`3` 3D、`4`–`6` DGPS/RTK;`Sat` —— 卫星数\n- `BV` —— V;`BC` —— A(`-1` 未测量);`BRem` —— %(`-1` 未知)\n- `Mode` —— 数字:自驾仪模式;`VType` —— 机型(决定模式名称);`Armed` —— `1` 已解锁\n- `HomeLat`、`HomeLon` —— 数字,°:起飞点,`0` —— 未知\n- `Press` —— hPa,`Temp` —— °C\n\n✨ **特点**\n- 数据包之间的姿态经过平滑\n- 将鼠标悬停在仪表或行中的任意元素上 —— 显示含义和当前值的提示\n- 速度带和高度带下方的角落:空速(相对空气)和升降速度(+ 爬升、− 下降)\n- 航向带上的粉色 ▲ 为航迹:载具相对地面的实际运动方向(由 `Vx`、`Vy` 计算);绿色 ● —— 起飞点方向;仪表下方有带角度的图例\n- 超过设定时间无数据 —— 仪表被划叉并标记「无数据」\n- 在窄单元格中,速度带和高度带变为地平线上的数字\n- 键 `Lat`、`Lon`、`Alt`、`Heading`、`Sat` 与「地图」通用 —— 一个分组同时供两个组件使用\n\n⚙️ **设置**\n- 分组前缀(ID)、主色\n- 限值:最小/最大速度和最大高度 —— 速度带和高度带上的红色区域;最大坡度 —— 红色弧线;低电量;「无数据」前的时间",
|
|
125
125
|
],
|
|
126
126
|
"component.info.WidgetMap": [
|
|
127
|
-
"🎯 **Назначение**\nКарта
|
|
128
|
-
'🎯 **Purpose**\nA real-time map of
|
|
129
|
-
"🎯 **用途**\n
|
|
127
|
+
"🎯 **Назначение**\nКарта объектов в реальном времени: положение, курс и траектория каждого объекта.\n\n📦 **Пакет данных**\n- Поля групп устройства, по группе на объект: по умолчанию `MAV`, несколько — через пробел (`MAV GNSS`); привязывать переменные не нужно\n- Поток телеметрии: координаты — раз в 0.5–1 с, имя и серийный номер — реже\n- Только отображение, ничего не отправляет\n\n🔑 **Ключи**\n- `Lat` — число, °: широта, обязательный; `Lat` и `Lon` = 0 — нет фикса, объект не рисуется\n- `Lon` — число, °: долгота, обязательный\n- `Alt` — число, м: высота\n- `Heading` — число, 0–360°: курс, поворачивает маркер\n- `Sat` — число спутников\n- `DevName` — строка: имя объекта, подпись маркера; без него — имя группы\n- `DevSN` — строка: серийный номер\n\n✨ **Особенности**\n- Ключи общие с «Пилотажным дисплеем» и «Об устройстве» — один пакет питает несколько виджетов\n- Клик по объекту — карточка со всеми значениями, кнопки «Копировать» и «Скрыть»\n- Траекторию, число её точек и таймаут маркеров оператор переключает на карте; объект без новых данных краснеет, ещё через таймаут скрывается\n- «Показать все» в шапке вписывает объекты в экран; сама карта вид не меняет\n- В шапке — сколько объектов на связи из заданных\n- Только 2D: правой кнопкой мыши карта поворачивается, компас под зумом возвращает её на север\n\n⚙️ **Настройки**\n- Группы полей, мастер-цвет\n- Высота карты `S`/`M`/`L`/`XL`, иконка маркера\n- Начальные значения: траектория и число её точек",
|
|
128
|
+
'🎯 **Purpose**\nA real-time map of objects: position, heading and track of each object.\n\n📦 **Data packet**\n- Device field groups, one group per object: `MAV` by default, several separated by spaces (`MAV GNSS`); no variable binding needed\n- Telemetry stream: coordinates every 0.5–1 s, name and serial number less often\n- Display only, sends nothing\n\n🔑 **Keys**\n- `Lat` — number, °: latitude, required; `Lat` and `Lon` = 0 — no fix, the object is not drawn\n- `Lon` — number, °: longitude, required\n- `Alt` — number, m: altitude\n- `Heading` — number, 0–360°: heading, rotates the marker\n- `Sat` — satellite count\n- `DevName` — string: object name, the marker label; without it — the group name\n- `DevSN` — string: serial number\n\n✨ **Features**\n- Keys are shared with the "Flight display" and "Device info" — one packet feeds several widgets\n- Click an object — a card with all values, "Copy" and "Hide" buttons\n- The operator switches the track, its point count and marker timeout on the map; an object without new data turns red, after one more timeout it is hidden\n- "Show all" in the header fits all objects into view; the map never moves by itself\n- The header shows how many of the configured objects are online\n- 2D only: the right mouse button rotates the map, the compass under the zoom returns it to north\n\n⚙️ **Settings**\n- Field groups, master color\n- Map height `S`/`M`/`L`/`XL`, marker icon\n- Defaults: track and its point count',
|
|
129
|
+
"🎯 **用途**\n实时对象地图:每个对象的位置、航向和轨迹。\n\n📦 **数据包**\n- 设备字段分组,每个分组一个对象:默认 `MAV`,多个用空格分隔(`MAV GNSS`);无需绑定变量\n- 遥测流:坐标每 0.5–1 秒一次,名称和序列号频率更低\n- 仅显示,不发送任何数据\n\n🔑 **键**\n- `Lat` —— 数字,°:纬度,必需;`Lat` 和 `Lon` 为 0 —— 无定位,不绘制对象\n- `Lon` —— 数字,°:经度,必需\n- `Alt` —— 数字,m:高度\n- `Heading` —— 数字,0–360°:航向,旋转标记\n- `Sat` —— 卫星数\n- `DevName` —— 字符串:对象名称,标记标签;缺省时为分组名\n- `DevSN` —— 字符串:序列号\n\n✨ **特点**\n- 键与「主飞行显示器」和「设备信息」通用 —— 一个数据包可供多个组件使用\n- 点击对象 —— 显示所有值的卡片,带「复制」和「隐藏」按钮\n- 操作员在地图上切换轨迹、轨迹点数和标记超时;无新数据的对象变红,再过一个超时后隐藏\n- 标题栏中的「显示全部」将对象纳入视野;地图本身不会自动移动\n- 标题栏显示已配置对象中在线的数量\n- 仅 2D:按住鼠标右键旋转地图,缩放按钮下方的指南针将其恢复为正北\n\n⚙️ **设置**\n- 字段分组、主色\n- 地图高度 `S`/`M`/`L`/`XL`、标记图标\n- 默认值:轨迹及其点数",
|
|
130
130
|
],
|
|
131
131
|
"component.info.WidgetStackInfo": [
|
|
132
132
|
'🎯 **Назначение**\nОтладка прошивки: свободная память и запас стека задач.\n\n📦 **Пакет данных**\n- Один объект `StackInfo` из ответа на `GET StackInfo`, привязывать переменные не нужно\n- Запрос — кнопкой «Обновить» или автоопросом\n\n🔑 **Ключи**\n- `Heap` — массив `[{ "Name", "Total", "Free", "MinFree" }]`, байт: кучи памяти, `MinFree` — минимум свободного с момента старта\n- `Tasks` — массив `[{ "Name", "State", "Prio", "Core", "FreeMin" }]`: задачи; `State` — `0` выполняется, `1` готова, `2` ждёт, `3` приостановлена, `4` удалена; `Core` — ядро (только ESP32, `-1` без привязки); `FreeMin` — минимальный запас стека, байт\n\n✨ **Особенности**\n- Светлая часть полосы кучи — пик занятости\n- Задачи отсортированы по запасу стека — самые рискованные сверху\n- Свёрнутый виджет не опрашивает устройство\n\n⚙️ **Настройки**\n- Порог запаса стека: меньше порога — красным, меньше удвоенного — оранжевым\n- Автоопрос: выкл / 1 / 5 / 10 с; мастер-цвет',
|
|
@@ -346,8 +346,9 @@ const translations = {
|
|
|
346
346
|
"constructor.props.multiselect": ["Мультивыбор", "Multi-select", "多选"],
|
|
347
347
|
"constructor.props.access": ["Доступ (не для владельца)", "Access (non-owner)", "访问权限(非所有者)"],
|
|
348
348
|
"constructor.props.map.timeout": ["Таймаут маркеров:", "Marker timeout:", "标记超时:"],
|
|
349
|
-
"constructor.props.map.boards": ["
|
|
350
|
-
"constructor.props.map.
|
|
349
|
+
"constructor.props.map.boards": ["Объектов на связи", "Objects online", "在线对象"],
|
|
350
|
+
"constructor.props.map.fitAllHint": ["Вписать все объекты в экран", "Fit all objects into view", "将所有对象纳入视野"],
|
|
351
|
+
"constructor.props.map.fitAll": ["Показать все", "Show all", "显示全部"],
|
|
351
352
|
"constructor.props.map.track": ["Траектория", "Track", "轨迹"],
|
|
352
353
|
"constructor.props.map.trackLength": ["Точек в траектории:", "Points in track:", "轨迹点数:"],
|
|
353
354
|
"constructor.props.joystick.pitch.axe": ["Ocь ⮃", "Pitch axis ⮃", "俯仰轴 ⮃"],
|