poe-svelte-ui-lib 1.55.0 → 1.57.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/Table/README.md +1 -1
- package/dist/Table/Table.svelte +1 -1
- package/dist/WidgetDeviceInfo/README.md +1 -1
- package/dist/WidgetFileSystem/README.md +1 -1
- package/dist/WidgetHeader.svelte +7 -8
- package/dist/WidgetMap/README.md +1 -1
- package/dist/WidgetPFD/README.md +1 -1
- package/dist/WidgetRGBStrip/README.md +1 -1
- package/dist/WidgetStackInfo/README.md +1 -1
- package/dist/WidgetWiFi/README.md +1 -1
- package/dist/WidgetWiFi/WidgetWiFi.svelte +3 -3
- package/dist/hints.js +14 -7
- package/dist/locales/translations.js +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ npm install poe-svelte-ui-lib
|
|
|
57
57
|
|
|
58
58
|
**Поверхности — четыре ступени, заметные в обеих темах:** фон страницы `--bg-body` → панель `--back-color` → блок внутри панели `--container-color` → поле `--field-color` (в тёмной теме поле темнее блока — «утоплено»). Готовые рецепты — классы `ui-panel` (блок прямо на фоне страницы: карточка, шапка раздела, холст, область чата — заливка панели, волосяная рамка, лёгкая тень) и `ui-inset` (блок внутри панели: группа полей, шапка карточки, подложка сообщения). Отступы и скругление задаёт страница классами Tailwind. Панели не делаются полупрозрачными (`bg-(--back-color)/50` сливается с фоном): выпадающие меню и всплывающие блоки — `ui-panel` с тенью `--elevation-3`, свои сообщения в чатах — `--accent-soft`, чужие — `--container-color`.
|
|
59
59
|
|
|
60
|
-
**Подсказки смарт-виджетов** — `hints.ts`: у каждого виджета своя кнопка «?» в
|
|
60
|
+
**Подсказки смарт-виджетов** — `hints.ts`: у каждого виджета своя кнопка «?» в правом краю шапки (`WidgetHeader` с пропом `hints`), по умолчанию подсказки выключены, выбор оператора запоминается в браузере для виджетов этого типа (`hintsSetting("WidgetPFD")`, ключ `localStorage` `WidgetHints.<тип>`, пишется только по нажатию «?»), глобального переключателя нет. Элемент получает подсказку действием `use:hint={{ text, enabled: $hints }}` — всплывающее окно в стиле темы над элементом; тексты — в словаре библиотеки (`widget.*.hint.*`), только там, где смысл поля не очевиден.
|
|
61
61
|
|
|
62
62
|
**Предпросмотр темы** — вкладка «Тема» на главной витрины (`src/routes/ThemePreview.svelte`): палитра токенов и состояния, затем все компоненты и виджеты в порядке меню витрины — каждый тип в своём разделе с живыми демо-данными (графики, видео, полёт для PFD и карты), в конце типографика и Markdown; тема переключается кнопкой в шапке витрины. Правьте `theme.css` и смотрите результат там.
|
|
63
63
|
|
package/dist/Table/README.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
### Шапка
|
|
23
23
|
|
|
24
|
-
- Фон шапки — токен `--table-header-color`, по умолчанию `--
|
|
24
|
+
- Фон шапки — токен `--table-header-color`, по умолчанию мягкий акцент `--accent-soft`, текст шапки — в тон акценту. Внутри смарт-виджета он равен мягкому оттенку мастер-цвета (`widgetAccentStyle`), поэтому шапка перекрашивается вместе с виджетом.
|
|
25
25
|
- Когда у тела появляется полоса прокрутки, шапка сдвигается ровно на её фактическую ширину (`offsetWidth − clientWidth`, пересчёт при изменении строк и размеров) — столбцы шапки и строк совпадают. Для полос поверх содержимого (macOS) сдвиг 0.
|
|
26
26
|
|
|
27
27
|
### Адаптивность
|
package/dist/Table/Table.svelte
CHANGED
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
<div class="relative flex h-full w-full flex-col overflow-hidden rounded-[14px] border border-(--hairline-color) bg-(--back-color)">
|
|
260
260
|
<!-- Table Header -->
|
|
261
261
|
<div
|
|
262
|
-
class="grid border-b border-(--hairline-color) bg-[var(--table-header-color,var(--
|
|
262
|
+
class="grid border-b border-(--hairline-color) bg-[var(--table-header-color,var(--accent-soft))] text-[11px] font-bold tracking-[0.06em] text-[color-mix(in_srgb,var(--accent-color)_60%,var(--font-color))] uppercase"
|
|
263
263
|
style={`grid-template-columns: ${gridTemplate}; padding-right: ${scrollbarWidth}px;`}
|
|
264
264
|
>
|
|
265
265
|
{#each header as column, index (column)}
|
|
@@ -109,4 +109,4 @@
|
|
|
109
109
|
|
|
110
110
|
### Подсказки
|
|
111
111
|
|
|
112
|
-
Кнопка «?» в
|
|
112
|
+
Кнопка «?» в правом краю шапки включает и выключает подсказки этого виджета (по умолчанию выключены); выбор общий для всех `WidgetDeviceInfo` в браузере (`hintsSetting("WidgetDeviceInfo")`, `hints.ts`). Подсказка всплывает при наведении на поле, смысл которого не очевиден, — что это за значение и на что влияет.
|
|
@@ -118,4 +118,4 @@
|
|
|
118
118
|
|
|
119
119
|
### Подсказки
|
|
120
120
|
|
|
121
|
-
Кнопка «?» в
|
|
121
|
+
Кнопка «?» в правом краю шапки включает и выключает подсказки этого виджета (по умолчанию выключены); выбор общий для всех `WidgetFileSystem` в браузере (`hintsSetting("WidgetFileSystem")`, `hints.ts`). Подсказка всплывает при наведении на поле, смысл которого не очевиден, — что это за значение и на что влияет.
|
package/dist/WidgetHeader.svelte
CHANGED
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
const Icon = $derived(icon)
|
|
30
30
|
</script>
|
|
31
31
|
|
|
32
|
-
<!-- Фиксированная высота 32 px без переноса — свёрнутые виджеты одной высоты при любом содержимом справа; «?» —
|
|
32
|
+
<!-- Фиксированная высота 32 px без переноса — свёрнутые виджеты одной высоты при любом содержимом справа; «?» — в правом краю, после содержимого шапки -->
|
|
33
33
|
<div class="flex h-[32px] items-center justify-between gap-3">
|
|
34
34
|
<button
|
|
35
35
|
type="button"
|
|
36
|
-
class="flex min-w-0 cursor-pointer items-center gap-2 border-none bg-transparent p-0 text-left"
|
|
36
|
+
class="flex min-w-0 flex-1 cursor-pointer items-center gap-2 border-none bg-transparent p-0 text-left"
|
|
37
37
|
onclick={() => (collapsed = !collapsed)}
|
|
38
38
|
aria-expanded={!collapsed}
|
|
39
39
|
>
|
|
@@ -48,6 +48,11 @@
|
|
|
48
48
|
<ArrowIcon />
|
|
49
49
|
</span>
|
|
50
50
|
</button>
|
|
51
|
+
{#if right}
|
|
52
|
+
<div class="flex min-w-0 shrink-0 items-center justify-end">
|
|
53
|
+
{@render right()}
|
|
54
|
+
</div>
|
|
55
|
+
{/if}
|
|
51
56
|
{#if hints}
|
|
52
57
|
<button
|
|
53
58
|
type="button"
|
|
@@ -60,10 +65,4 @@
|
|
|
60
65
|
onclick={() => hints.update((on) => !on)}>?</button
|
|
61
66
|
>
|
|
62
67
|
{/if}
|
|
63
|
-
<div class="flex-1"></div>
|
|
64
|
-
{#if right}
|
|
65
|
-
<div class="flex min-w-0 shrink-0 items-center justify-end">
|
|
66
|
-
{@render right()}
|
|
67
|
-
</div>
|
|
68
|
-
{/if}
|
|
69
68
|
</div>
|
package/dist/WidgetMap/README.md
CHANGED
|
@@ -98,4 +98,4 @@ Telemetry_SendObject(g_telemetry_stream, g_mcfg.DevSN, "Data", dev, sizeof(dev)
|
|
|
98
98
|
|
|
99
99
|
### Подсказки
|
|
100
100
|
|
|
101
|
-
Кнопка «?» в
|
|
101
|
+
Кнопка «?» в правом краю шапки включает и выключает подсказки этого виджета (по умолчанию выключены); выбор общий для всех `WidgetMap` в браузере (`hintsSetting("WidgetMap")`, `hints.ts`). Подсказка всплывает при наведении на поле, смысл которого не очевиден, — что это за значение и на что влияет.
|
package/dist/WidgetPFD/README.md
CHANGED
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
- **Авиагоризонт** — небо и земля по крену и тангажу, лестница тангажа через 5°, дуга крена (10/20/30/45/60°), символ самолёта. Ориентация сглаживается между пакетами (Tween 120 мс).
|
|
71
71
|
- **Лента скорости** (слева, путевая над землёй) и **лента высоты** (справа, над точкой взлёта) с вариометром у края, **лента курса** (снизу): розовый ▲ — трек (куда аппарат реально движется, по `Vx`/`Vy`), зелёный ● — направление на точку взлёта.
|
|
72
72
|
- **Углы под лентами** — воздушная скорость (относительно воздуха, отличается от путевой на ветер) и вертикальная скорость (+ набор зелёным, − снижение оранжевым).
|
|
73
|
-
- **Подсказки** — наведите курсор на любой элемент прибора, строки состояния или значений: расшифровка появляется в информационной строке внизу горизонта: первая строка — величина, единица и текущее значение (обновляется, пока курсор стоит на месте), ниже по строке — что означают знаки, цвета и пороги. Элемент помечен `data-tip` с ключом, тексты собраны в `tips` в скрипте виджета, поэтому её не обрезают края и прокрутка. Без наведения в той же строке — последнее сообщение автопилота (10 с), наведение на неё показывает историю. Включаются и выключаются кнопкой «?» в шапке; выбор общий для всех PFD в браузере (`hintsSetting("WidgetPFD")` из `hints.ts`, ключ `localStorage` `
|
|
73
|
+
- **Подсказки** — наведите курсор на любой элемент прибора, строки состояния или значений: расшифровка появляется в информационной строке внизу горизонта: первая строка — величина, единица и текущее значение (обновляется, пока курсор стоит на месте), ниже по строке — что означают знаки, цвета и пороги. Элемент помечен `data-tip` с ключом, тексты собраны в `tips` в скрипте виджета, поэтому её не обрезают края и прокрутка. Без наведения в той же строке — последнее сообщение автопилота (10 с), наведение на неё показывает историю. Включаются и выключаются кнопкой «?» в шапке; выбор общий для всех PFD в браузере (`hintsSetting("WidgetPFD")` из `hints.ts`, ключ `localStorage` `WidgetHints.WidgetPFD`, по умолчанию выключены; прежний выбор `WidgetPFD.tips` переносится).
|
|
74
74
|
- **Под прибором** — группы «Маршрут» (точка, расстояние, боковое отклонение), «Дом» (расстояние и направление), «Трек», «Позиция» (координаты, MSL), «Воздух» (давление, температура); каждая величина показана один раз.
|
|
75
75
|
- **Метки целей** (бирюзовые) — целевая скорость и высота текущей точки на лентах, курс на точку ◆ на ленте курса; цель за пределами ленты прижимается к краю.
|
|
76
76
|
- **Сообщения автопилота** (`STATUSTEXT`) — в информационной строке внизу горизонта на 10 с, цвет по важности; история последних пяти — при наведении на строку.
|
|
@@ -81,4 +81,4 @@
|
|
|
81
81
|
|
|
82
82
|
### Подсказки
|
|
83
83
|
|
|
84
|
-
Кнопка «?» в
|
|
84
|
+
Кнопка «?» в правом краю шапки включает и выключает подсказки этого виджета (по умолчанию выключены); выбор общий для всех `WidgetRGBStrip` в браузере (`hintsSetting("WidgetRGBStrip")`, `hints.ts`). Подсказка всплывает при наведении на поле, смысл которого не очевиден, — что это за значение и на что влияет.
|
|
@@ -84,4 +84,4 @@
|
|
|
84
84
|
|
|
85
85
|
### Подсказки
|
|
86
86
|
|
|
87
|
-
Кнопка «?» в
|
|
87
|
+
Кнопка «?» в правом краю шапки включает и выключает подсказки этого виджета (по умолчанию выключены); выбор общий для всех `WidgetStackInfo` в браузере (`hintsSetting("WidgetStackInfo")`, `hints.ts`). Подсказка всплывает при наведении на поле, смысл которого не очевиден, — что это за значение и на что влияет.
|
|
@@ -100,4 +100,4 @@
|
|
|
100
100
|
|
|
101
101
|
### Подсказки
|
|
102
102
|
|
|
103
|
-
Кнопка «?» в
|
|
103
|
+
Кнопка «?» в правом краю шапки включает и выключает подсказки этого виджета (по умолчанию выключены); выбор общий для всех `WidgetWiFi` в браузере (`hintsSetting("WidgetWiFi")`, `hints.ts`). Подсказка всплывает при наведении на поле, смысл которого не очевиден, — что это за значение и на что влияет.
|
|
@@ -73,10 +73,10 @@
|
|
|
73
73
|
устройство и режим на нём меняется. STA+AP не предупреждаем: STA остаётся активным. */
|
|
74
74
|
let showAPWarning = $state(false)
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
let IP_MODE_OPTIONS: IOption<number>[] = $derived([
|
|
77
77
|
{ id: "dhcp", name: "DHCP", value: 0 },
|
|
78
|
-
{ id: "static", name: "
|
|
79
|
-
]
|
|
78
|
+
{ id: "static", name: $T("widget.wifi.static"), value: 1 },
|
|
79
|
+
])
|
|
80
80
|
let selectedIPMode = $derived(IP_MODE_OPTIONS.find((o) => o.value === cfg.StaticIP) ?? IP_MODE_OPTIONS[0])
|
|
81
81
|
|
|
82
82
|
const IP_REGEXP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
|
package/dist/hints.js
CHANGED
|
@@ -6,23 +6,30 @@ import { writable } from "svelte/store";
|
|
|
6
6
|
/* Прежние ключи хранения — выбор оператора переносится */
|
|
7
7
|
const LEGACY_KEYS = { WidgetPFD: "WidgetPFD.tips" };
|
|
8
8
|
const settings = new Map();
|
|
9
|
-
/* Настройка подсказок виджета:
|
|
9
|
+
/* Настройка подсказок виджета: выключены по умолчанию, одна на тип виджета; в браузер пишется только выбор оператора (нажатие «?»),
|
|
10
|
+
ключ WidgetHints.<тип> — прежние Hints.<тип> записывались автоматически при первом показе и выбором не являются, удаляются */
|
|
10
11
|
export const hintsSetting = (widget) => {
|
|
11
12
|
const cached = settings.get(widget);
|
|
12
13
|
if (cached)
|
|
13
14
|
return cached;
|
|
14
|
-
const storageKey = `
|
|
15
|
-
let initial =
|
|
15
|
+
const storageKey = `WidgetHints.${widget}`;
|
|
16
|
+
let initial = false;
|
|
16
17
|
try {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
if (typeof localStorage !== "undefined") {
|
|
19
|
+
localStorage.removeItem(`Hints.${widget}`);
|
|
20
|
+
const saved = localStorage.getItem(storageKey) ?? localStorage.getItem(LEGACY_KEYS[widget] ?? "");
|
|
21
|
+
if (saved !== null)
|
|
22
|
+
initial = saved === "1";
|
|
23
|
+
}
|
|
20
24
|
}
|
|
21
25
|
catch {
|
|
22
|
-
/* хранилище недоступно — подсказки
|
|
26
|
+
/* хранилище недоступно — подсказки выключены */
|
|
23
27
|
}
|
|
24
28
|
const store = writable(initial);
|
|
29
|
+
let first = true;
|
|
25
30
|
store.subscribe((on) => {
|
|
31
|
+
if (first)
|
|
32
|
+
return void (first = false);
|
|
26
33
|
if (!on)
|
|
27
34
|
hideHint();
|
|
28
35
|
try {
|
|
@@ -548,6 +548,7 @@ const translations = {
|
|
|
548
548
|
en: 'Auto polling — how often to request data from the device; "Refresh" — request now',
|
|
549
549
|
zh: "自动轮询——向设备请求数据的频率;“刷新”——立即请求",
|
|
550
550
|
},
|
|
551
|
+
"widget.wifi.static": { ru: "Статический", en: "Static", zh: "静态" },
|
|
551
552
|
"widget.wifi.hint.mode": {
|
|
552
553
|
ru: "Режим Wi-Fi: клиент — устройство подключается к роутеру, точка — создаёт свою сеть, оба — одновременно; выключено — Wi-Fi не работает",
|
|
553
554
|
en: "Wi-Fi mode: client — the device joins a router, access point — creates its own network, both — at once; off — Wi-Fi is disabled",
|