poe-svelte-ui-lib 1.38.2 → 1.40.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.
Files changed (42) hide show
  1. package/README.md +13 -1
  2. package/dist/Accordion/README.md +51 -38
  3. package/dist/Button/README.md +57 -40
  4. package/dist/Carousel/README.md +28 -24
  5. package/dist/CommonSnippets.svelte +1 -4
  6. package/dist/Divider/README.md +40 -30
  7. package/dist/FileAttach/README.md +57 -39
  8. package/dist/Graph/README.md +61 -50
  9. package/dist/Input/README.md +64 -44
  10. package/dist/Joystick/README.md +60 -40
  11. package/dist/PeriodChart/README.md +73 -59
  12. package/dist/ProgressBar/README.md +56 -38
  13. package/dist/Select/README.md +60 -40
  14. package/dist/Slider/README.md +57 -40
  15. package/dist/Switch/README.md +57 -40
  16. package/dist/Table/README.md +66 -48
  17. package/dist/Tabs/README.md +52 -40
  18. package/dist/TextField/README.md +47 -35
  19. package/dist/VideoViewer/README.md +58 -42
  20. package/dist/Widget/README.md +60 -40
  21. package/dist/WidgetDeviceInfo/README.md +32 -7
  22. package/dist/WidgetFileSystem/README.md +40 -16
  23. package/dist/WidgetMap/README.md +43 -28
  24. package/dist/WidgetMap/WidgetMap.svelte +1 -0
  25. package/dist/WidgetMap/mapWrapper/MapLibre.svelte +4 -0
  26. package/dist/WidgetMap/mapWrapper/MapLibre.svelte.d.ts +1 -0
  27. package/dist/WidgetPFD/README.md +48 -16
  28. package/dist/{ColorPicker → WidgetRGBStrip}/ColorPicker.svelte +10 -2
  29. package/dist/WidgetRGBStrip/ColorPicker.svelte.d.ts +14 -0
  30. package/dist/WidgetRGBStrip/README.md +37 -11
  31. package/dist/WidgetRGBStrip/WidgetRGBStrip.svelte +2 -1
  32. package/dist/WidgetStackInfo/README.md +35 -14
  33. package/dist/WidgetWiFi/README.md +29 -6
  34. package/dist/index.d.ts +1 -3
  35. package/dist/index.js +0 -2
  36. package/dist/locales/translations.js +72 -77
  37. package/dist/types.d.ts +4 -15
  38. package/package.json +1 -1
  39. package/dist/ColorPicker/ColorPicker.svelte.d.ts +0 -4
  40. package/dist/ColorPicker/ColorPickerProps.svelte +0 -91
  41. package/dist/ColorPicker/ColorPickerProps.svelte.d.ts +0 -16
  42. package/dist/ColorPicker/README.md +0 -134
package/README.md CHANGED
@@ -59,7 +59,19 @@ npm install poe-svelte-ui-lib
59
59
 
60
60
  **Витрина повторяет конструктор DevCloud:** слева компонент и код (прижат к низу), справа панель свойств шириной `24rem` с тем же оформлением, что в облаке, — переполнение подписей видно сразу. Кнопка (i) в шапке панели открывает описание компонента.
61
61
 
62
- **Описания компонентов (i)** — ключи `component.info.<Тип>` в `src/lib/locales/translations.ts` (ru/en/zh, Markdown). Один источник для витрины и конструктора DevCloud: облако показывает кнопку (i) у любого компонента, для которого есть описание. Добавляя компонент, допишите и описание: для чего он, какую переменную устройства показывает, что и когда отправляет, главные настройки и ограничения.
62
+ **Описания компонентов (i)** — ключи `component.info.<Тип>` в `src/lib/locales/translations.ts` (ru/en/zh, Markdown). Один источник для витрины и конструктора DevCloud: облако показывает кнопку (i) у любого компонента, для которого есть описание. Добавляя компонент, допишите описание строго по шаблону — разделы всегда в этом порядке, неприменимые опускаются:
63
+
64
+ | Раздел | Что писать |
65
+ | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
66
+ | `🎯 **Назначение**` | 1–2 фразы: что это и когда применять |
67
+ | `📦 **Пакет данных**` | откуда данные (переменная, группа полей, объект ответа), каким пакетом и как часто их слать, что и когда компонент отправляет сам или «только отображение»; не связан с устройством — так и написать |
68
+ | `🔑 **Ключи**` | по пункту на ключ: `` `Ключ` — тип, единицы, смысл``, обязательность; у простых компонентов — формат значения переменной |
69
+ | `✨ **Особенности**` | поведение, ограничения, советы, связь с другими компонентами |
70
+ | `⚙️ **Настройки**` | что меняется в панели свойств |
71
+
72
+ Пункты — списком `- `, без вложенных списков; имена ключей и значения — в обратных кавычках; одинаковые для нескольких виджетов ключи (`Lat`, `Lon`, `DevName`...) описываются одинаково.
73
+
74
+ **README компонента** (`src/lib/<Компонент>/README.md`, вкладка «Инфо» витрины) — развёрнутая документация для разработчика. Первые разделы повторяют описание (i) и не должны ему противоречить, дальше идут разработческие: `## Назначение` (плюс заметка о размерах) → `## Пакет данных` (плюс `### Протокол устройства` / пример кода прошивки) → `## Ключи` (таблица «Ключ / Описание», те же формулировки, что в (i)) → `## Особенности` (поведение, ограничения) → `## Пропсы` (таблица «Название / Тип / По умолчанию / Описание», колбэки — `### Колбэки`) → `## Примеры` (Svelte) → `## Конструктор свойств (<Компонент>Props.svelte)` → `## Внутреннее устройство`.
63
75
 
64
76
  **Иконки вариантов панелей свойств** — `src/lib/libIcons/propsIcons.ts` (контурные SVG 24×24 строками), подставляются в `IOption.icon` в `options.ts`.
65
77
 
@@ -1,8 +1,36 @@
1
1
  # Accordion Component
2
2
 
3
- ## Описание
3
+ ## Назначение
4
4
 
5
- Аккордеон - это UI-компонент, который позволяет скрывать и отображать содержимое в виде раскрывающегося блока. Компонент предоставляет возможность настройки внешнего вида, размеров, иконок, изображений фона и других параметров через систему пропсов.
5
+ Сворачиваемый блок для группировки компонентов: настройки, диагностика, редко используемые разделы.
6
+
7
+ ## Пакет данных
8
+
9
+ Не связан с устройством — сам ничего не читает и не отправляет.
10
+
11
+ ## Особенности
12
+
13
+ - Перетащите компоненты внутрь — у аккордеона своя сетка, её размер задаётся при создании и ресайзе
14
+ - Заголовок с иконкой открывает и закрывает содержимое
15
+ - По высоте занимает одну строку сетки и растягивается по содержимому
16
+
17
+ ### Адаптивность
18
+
19
+ - Компонент использует Tailwind CSS для адаптивного дизайна
20
+ - Сетка содержимого адаптируется под размеры экрана (sm:p-3)
21
+ - Используются относительные единицы измерения для обеспечения масштабируемости
22
+
23
+ ### Ограничения
24
+
25
+ - При использовании изображения фона высота строк сетки устанавливается в `minmax(6.5rem, auto)` вместо `auto`
26
+ - Необходимо убедиться, что переданный компонент иконки является валидным Svelte компонентом или SVG строкой
27
+ - Размеры сетки должны быть положительными числами (по умолчанию 1x1)
28
+
29
+ ### Производительность
30
+
31
+ - Компонент использует оптимизации Svelte для минимизации перерисовок
32
+ - Содержимое аккордеона рендерится только при его открытии (`{#if isOpen}`)
33
+ - Используется эффективное объединение классов через `twMerge`
6
34
 
7
35
  ## Пропсы
8
36
 
@@ -21,7 +49,7 @@
21
49
  | `children` | `Snippet` | `undefined` | Слот для содержимого, которое будет отображаться при открытии |
22
50
  | `image` | `string` | `""` | URL изображения для фона содержимого аккордеона |
23
51
 
24
- ## События
52
+ ### Колбэки
25
53
 
26
54
  Компонент не генерирует специфические события, но использует встроенную функцию `toggle()` для переключения состояния открытия/закрытия при клике на кнопку заголовка.
27
55
 
@@ -75,28 +103,6 @@
75
103
  </UI.Accordion>
76
104
  ```
77
105
 
78
- ## Внутренняя архитектура
79
-
80
- ### Реактивность
81
-
82
- - Переменная `isOpen` является реактивной и управляет состоянием отображения содержимого
83
- - Функция `toggle()` изменяет состояние `isOpen`, вызывая повторный рендеринг компонента
84
-
85
- ### Сторы и зависимости
86
-
87
- - Используется стор `twMerge` для объединения Tailwind CSS классов
88
- - Применяется переход `slide` из `svelte/transition` для анимации открытия/закрытия
89
-
90
- ### Директивы
91
-
92
- - `transition:slide` для анимации открытия/закрытия содержимого
93
- - `@render children` для отображения переданного содержимого
94
- - `bind:isOpen` в конструкторе свойств для двусторонней привязки состояния
95
-
96
- ### Слоты
97
-
98
- - `children` - слот для содержимого, которое отображается внутри аккордеона при его открытии
99
-
100
106
  ## Конструктор свойств (AccordionProps.svelte)
101
107
 
102
108
  ### Описание
@@ -120,22 +126,29 @@
120
126
  - Использует систему локализации через `$T('constructor.props.*')`
121
127
  - Поддерживает валидацию числовых значений (min/max) для размеров
122
128
 
123
- ## Заметки
129
+ ### Что настраивается
124
130
 
125
- ### Адаптивность
131
+ - Заголовок, иконка, «Открыт по умолчанию» — состояние при загрузке интерфейса
132
+ - Картинка фона — изображение под содержимым (например схема устройства), поверх неё располагаются компоненты
126
133
 
127
- - Компонент использует Tailwind CSS для адаптивного дизайна
128
- - Сетка содержимого адаптируется под размеры экрана (sm:p-3)
129
- - Используются относительные единицы измерения для обеспечения масштабируемости
134
+ ## Внутреннее устройство
130
135
 
131
- ### Ограничения
136
+ ### Реактивность
132
137
 
133
- - При использовании изображения фона высота строк сетки устанавливается в `minmax(6.5rem, auto)` вместо `auto`
134
- - Необходимо убедиться, что переданный компонент иконки является валидным Svelte компонентом или SVG строкой
135
- - Размеры сетки должны быть положительными числами (по умолчанию 1x1)
138
+ - Переменная `isOpen` является реактивной и управляет состоянием отображения содержимого
139
+ - Функция `toggle()` изменяет состояние `isOpen`, вызывая повторный рендеринг компонента
136
140
 
137
- ### Производительность
141
+ ### Сторы и зависимости
138
142
 
139
- - Компонент использует оптимизации Svelte для минимизации перерисовок
140
- - Содержимое аккордеона рендерится только при его открытии (`{#if isOpen}`)
141
- - Используется эффективное объединение классов через `twMerge`
143
+ - Используется стор `twMerge` для объединения Tailwind CSS классов
144
+ - Применяется переход `slide` из `svelte/transition` для анимации открытия/закрытия
145
+
146
+ ### Директивы
147
+
148
+ - `transition:slide` для анимации открытия/закрытия содержимого
149
+ - `@render children` для отображения переданного содержимого
150
+ - `bind:isOpen` в конструкторе свойств для двусторонней привязки состояния
151
+
152
+ ### Слоты
153
+
154
+ - `children` - слот для содержимого, которое отображается внутри аккордеона при его открытии
@@ -1,8 +1,41 @@
1
1
  # Button Component
2
2
 
3
- ## Описание
3
+ ## Назначение
4
4
 
5
- Кнопка - это интерактивный UI-компонент, который предоставляет возможность выполнения действий при клике. Компонент поддерживает настройку внешнего вида, иконок, информационных подсказок, горячих клавиш и другие параметры через систему пропсов.
5
+ Отправляет команду на устройство по нажатию.
6
+
7
+ ## Пакет данных
8
+
9
+ - По нажатию уходит пакет **Заголовок** + **Аргумент**, например `SET` + `Restart`
10
+ - **Переменные** — текущие значения других компонентов кладутся в тот же пакет: так делается кнопка «Сохранить» для полей с аргументом `NoSend`
11
+ - **Фиксированное значение** (JSON) — отправляется как есть вместо переменных, например `{"Mode": 2}`
12
+ - Значение с устройства кнопка не показывает
13
+
14
+ ## Ключи
15
+
16
+ | Ключ | Описание |
17
+ | -------------- | ------------------------------------------------------------------------------------------- |
18
+ | `<переменные>` | имена через пробел (имя переменной не содержит пробелов), например `CFG.StaSSID CFG.StaPSK` |
19
+
20
+ ## Особенности
21
+
22
+ ### Адаптивность
23
+
24
+ - Компонент использует Tailwind CSS для адаптивного дизайна
25
+ - Используются относительные единицы измерения для обеспечения масштабируемости
26
+ - Подсказки автоматически позиционируются в зависимости от стороны отображения
27
+
28
+ ### Ограничения
29
+
30
+ - При использовании только иконки (без текста) кнопка становится прозрачной без фона
31
+ - Горячие клавиши регистрируются глобально и могут конфликтовать с другими компонентами
32
+ - Подсказки не поддерживают HTML-разметку, отображают только текст
33
+
34
+ ### Производительность
35
+
36
+ - Компонент использует оптимизации Svelte для минимизации перерисовок
37
+ - Обработчики клавиатуры удаляются при размонтировании компонента
38
+ - Используется эффективное объединение классов через `twMerge`
6
39
 
7
40
  ## Пропсы
8
41
 
@@ -27,7 +60,7 @@
27
60
  | `keyBind.showHint` | `boolean` | `true` | Показывать ли подсказку о горячих клавишах |
28
61
  | `onClick` | `() => void` | `undefined` | Обработчик клика по кнопке |
29
62
 
30
- ## События
63
+ ### Колбэки
31
64
 
32
65
  | Название | Тип | Описание |
33
66
  | -------- | ---------- | ----------------------------------------------------------------------- |
@@ -99,30 +132,6 @@
99
132
  </div>
100
133
  ```
101
134
 
102
- ## Внутренняя архитектура
103
-
104
- ### Реактивность
105
-
106
- - Переменная `showInfo` управляет видимостью информационной подсказки
107
- - Переменная `svgSize` вычисляет размеры SVG иконки на основе классов
108
- - Объект `tooltipConfig` содержит конфигурацию позиционирования подсказок
109
-
110
- ### Сторы и зависимости
111
-
112
- - Используется стор `twMerge` для объединения Tailwind CSS классов
113
- - Применяется переход `fly` из `svelte/transition` для анимации подсказки
114
- - Используется `onMount` для подписки и отписки от глобальных событий клавиатуры
115
-
116
- ### Директивы
117
-
118
- - `transition:fly` для анимации появления/скрытия информационной подсказки
119
- - Обработчики `onmouseenter` и `onmouseleave` для показа/скрытия подсказки
120
- - Обработчик `onclick` для активации кнопки
121
-
122
- ### Слоты
123
-
124
- - Компонент не использует внешних слотов
125
-
126
135
  ## Конструктор свойств (ButtonProps.svelte)
127
136
 
128
137
  ### Описание
@@ -146,22 +155,30 @@
146
155
  - Использует систему локализации через `$T('constructor.props.*')`
147
156
  - Поддерживает валидацию вводимых данных через регулярные выражения
148
157
 
149
- ## Заметки
158
+ ### Что настраивается
150
159
 
151
- ### Адаптивность
160
+ - Текст, иконка, цвет, подсказка при наведении
152
161
 
153
- - Компонент использует Tailwind CSS для адаптивного дизайна
154
- - Используются относительные единицы измерения для обеспечения масштабируемости
155
- - Подсказки автоматически позиционируются в зависимости от стороны отображения
162
+ ## Внутреннее устройство
156
163
 
157
- ### Ограничения
164
+ ### Реактивность
158
165
 
159
- - При использовании только иконки (без текста) кнопка становится прозрачной без фона
160
- - Горячие клавиши регистрируются глобально и могут конфликтовать с другими компонентами
161
- - Подсказки не поддерживают HTML-разметку, отображают только текст
166
+ - Переменная `showInfo` управляет видимостью информационной подсказки
167
+ - Переменная `svgSize` вычисляет размеры SVG иконки на основе классов
168
+ - Объект `tooltipConfig` содержит конфигурацию позиционирования подсказок
162
169
 
163
- ### Производительность
170
+ ### Сторы и зависимости
164
171
 
165
- - Компонент использует оптимизации Svelte для минимизации перерисовок
166
- - Обработчики клавиатуры удаляются при размонтировании компонента
167
- - Используется эффективное объединение классов через `twMerge`
172
+ - Используется стор `twMerge` для объединения Tailwind CSS классов
173
+ - Применяется переход `fly` из `svelte/transition` для анимации подсказки
174
+ - Используется `onMount` для подписки и отписки от глобальных событий клавиатуры
175
+
176
+ ### Директивы
177
+
178
+ - `transition:fly` для анимации появления/скрытия информационной подсказки
179
+ - Обработчики `onmouseenter` и `onmouseleave` для показа/скрытия подсказки
180
+ - Обработчик `onclick` для активации кнопки
181
+
182
+ ### Слоты
183
+
184
+ - Компонент не использует внешних слотов
@@ -1,8 +1,32 @@
1
1
  # Carousel Component
2
2
 
3
- ## Описание
3
+ ## Назначение
4
4
 
5
- Карусель - это интерактивный UI-компонент, который позволяет просматривать контент в виде прокручиваемой ленты с возможностью навигации по стрелкам.
5
+ Прокручиваемая лента карточек с навигацией стрелками — в GUIPreview облака и WebApp переключает модули устройства.
6
+
7
+ ## Пакет данных
8
+
9
+ Не связан с устройством — содержимое передаётся снаружи.
10
+
11
+ ## Особенности
12
+
13
+ ### Адаптивность
14
+
15
+ - Компонент использует Tailwind CSS для адаптивного дизайна
16
+ - Стрелки навигации автоматически скрываются при достижении начала или конца карусели
17
+ - Используются относительные единицы измерения для обеспечения масштабируемости
18
+
19
+ ### Ограничения
20
+
21
+ - Для корректного отображения элементы внутри карусели должны иметь фиксированную ширину
22
+ - Компонент не поддерживает вертикальную прокрутку
23
+ - Значение `scrollValue` влияет на величину прокрутки при нажатии стрелок
24
+
25
+ ### Производительность
26
+
27
+ - Компонент использует оптимизации Svelte для минимизации перерисовок
28
+ - Обработчики событий и `ResizeObserver` корректно удаляются при размонтировании
29
+ - Используется эффективное объединение классов через `twMerge`
6
30
 
7
31
  ## Пропсы
8
32
 
@@ -16,7 +40,7 @@
16
40
  | `scrollValue` | `number` | `200` | Значение прокрутки при нажатии на стрелки (в пикселях) |
17
41
  | `children` | `Snippet` | `undefined` | Слот для содержимого, которое будет отображаться в карусели |
18
42
 
19
- ## События
43
+ ### Колбэки
20
44
 
21
45
  Компонент не принимает коллбэк-пропсы и не генерирует событий.
22
46
 
@@ -94,7 +118,7 @@
94
118
  </UI.Carousel>
95
119
  ```
96
120
 
97
- ## Внутренняя архитектура
121
+ ## Внутреннее устройство
98
122
 
99
123
  ### Реактивность
100
124
 
@@ -118,23 +142,3 @@
118
142
  ### Слоты
119
143
 
120
144
  - `children` - слот для содержимого, которое отображается внутри карусели
121
-
122
- ## Заметки
123
-
124
- ### Адаптивность
125
-
126
- - Компонент использует Tailwind CSS для адаптивного дизайна
127
- - Стрелки навигации автоматически скрываются при достижении начала или конца карусели
128
- - Используются относительные единицы измерения для обеспечения масштабируемости
129
-
130
- ### Ограничения
131
-
132
- - Для корректного отображения элементы внутри карусели должны иметь фиксированную ширину
133
- - Компонент не поддерживает вертикальную прокрутку
134
- - Значение `scrollValue` влияет на величину прокрутки при нажатии стрелок
135
-
136
- ### Производительность
137
-
138
- - Компонент использует оптимизации Svelte для минимизации перерисовок
139
- - Обработчики событий и `ResizeObserver` корректно удаляются при размонтировании
140
- - Используется эффективное объединение классов через `twMerge`
@@ -94,7 +94,6 @@
94
94
  | UI.IAccordionProps
95
95
  | UI.IInputProps
96
96
  | UI.ISwitchProps
97
- | UI.IColorPickerProps
98
97
  | UI.ISliderProps
99
98
  | UI.IGraphProps
100
99
  | UI.ITableProps<object>
@@ -120,7 +119,6 @@
120
119
  | UI.IAccordionProps
121
120
  | UI.IInputProps
122
121
  | UI.ISwitchProps
123
- | UI.IColorPickerProps
124
122
  | UI.ISliderProps
125
123
  | UI.IGraphProps
126
124
  | UI.ITableProps<object>
@@ -143,7 +141,6 @@
143
141
  | UI.IAccordionProps
144
142
  | UI.IInputProps
145
143
  | UI.ISwitchProps
146
- | UI.IColorPickerProps
147
144
  | UI.ISliderProps
148
145
  | UI.IGraphProps
149
146
  | UI.ITableProps<object>
@@ -195,7 +192,7 @@
195
192
  {#snippet Readonly()}
196
193
  <UI.Switch
197
194
  label={{ name: $T("constructor.props.readonly") }}
198
- value={Number((component.properties as UI.IColorPickerProps | UI.IInputProps | UI.IJoystickProps | UI.IWidgetProps).readonly)}
195
+ value={Number((component.properties as UI.IInputProps | UI.IJoystickProps | UI.IWidgetProps).readonly)}
199
196
  options={[{ id: crypto.randomUUID(), value: 0, class: "" }]}
200
197
  onChange={(value) => updateProperty("readonly", value, component, onPropertyChange)}
201
198
  />
@@ -1,8 +1,27 @@
1
1
  # Divider Component
2
2
 
3
- ## Описание
3
+ ## Назначение
4
4
 
5
- Разделитель — UI-компонент для визуального и/или пространственного разделения элементов, расположенных друг под другом в конструкторе интерфейса. Занимает столько места по высоте, сколько выделено ему в сетке (аналогично `Map`/`VideoViewer` — компонент реально резервирует указанную высоту, а не сжимается по контенту). Поддерживает два режима: видимая полоса или чистый отступ без линии, настраиваемую толщину и цвет полосы, и привязку полосы к верху/центру/низу выделенной области. Величина зазора вокруг полосы регулируется не отдельным пропсом, а высотой самого компонента в сетке конструктора.
5
+ Визуально разделяет группы компонентов.
6
+
7
+ ## Пакет данных
8
+
9
+ Не связан с устройством.
10
+
11
+ ## Особенности
12
+
13
+ ### Адаптивность
14
+
15
+ - Ширина полосы всегда 100% ширины выделенной области, толщина настраивается отдельно
16
+ - Величина зазора вокруг полосы не выделена в отдельный пропс намеренно — компонент всегда занимает полную высоту, выделенную ему в сетке конструктора (см. Ограничения), поэтому нужный зазор достигается изменением высоты самого компонента, а `anchor` определяет положение полосы внутри этой высоты
17
+
18
+ ### Ограничения
19
+
20
+ - В превью (`GUIPreview.svelte`) компонент всегда получает явную высоту по размеру сетки (как `Map`/`VideoViewer`) — без этого пустая ячейка без компонента схлопывается почти в ноль, так как сетка превью не резервирует высоту неиспользуемых строк
21
+
22
+ ### Производительность
23
+
24
+ - Компонент не содержит состояния и внутренних эффектов, перерисовывается только при изменении пропсов
6
25
 
7
26
  ## Пропсы
8
27
 
@@ -15,7 +34,7 @@
15
34
  | `color` | `string` | `""` | Класс цвета полосы из общей палитры (`bg-max`, `bg-red`, `bg-yellow`, `bg-green`, `bg-blue`, `bg-purple`, `bg-gray`); при пустом значении полоса красится в нейтральный `--hairline-color`, при заданном `bg-*` — в `--bg-color` (как в `Button.svelte`) |
16
35
  | `anchor` | `"top" \| "center" \| "bottom"` | `"center"` | Положение полосы внутри выделенной компоненту высоты сетки |
17
36
 
18
- ## События
37
+ ### Колбэки
19
38
 
20
39
  Компонент не генерирует специфические события.
21
40
 
@@ -51,25 +70,6 @@
51
70
  <UI.Divider type="empty" />
52
71
  ```
53
72
 
54
- ## Внутренняя архитектура
55
-
56
- ### Реактивность
57
-
58
- - Объект `anchorClass` определяет CSS-классы `justify-*` для положения полосы (`top`/`center`/`bottom`)
59
-
60
- ### Сторы и зависимости
61
-
62
- - Используется `twMerge` для объединения Tailwind CSS классов
63
-
64
- ### Директивы
65
-
66
- - `twMerge` для объединения классов обёртки и полосы
67
- - `$props()` для получения пропсов компонента
68
-
69
- ### Слоты
70
-
71
- - Компонент не использует внешних слотов
72
-
73
73
  ## Конструктор свойств (DividerProps.svelte)
74
74
 
75
75
  ### Описание
@@ -90,17 +90,27 @@
90
90
  - `color` — переиспользует общий сниппет `CommonSnippets snippet="Colors"`, но привязан к собственному свойству `color`, а не к `wrapperClass`
91
91
  - `width` — числовой ввод (1-20 px)
92
92
 
93
- ## Заметки
93
+ ### Что настраивается
94
94
 
95
- ### Адаптивность
95
+ - Тип: **линия** или **пустое место** (отступ без линии)
96
+ - Привязка: линия сверху, по центру или снизу ячейки
97
+ - Цвет и толщина линии
96
98
 
97
- - Ширина полосы всегда 100% ширины выделенной области, толщина настраивается отдельно
98
- - Величина зазора вокруг полосы не выделена в отдельный пропс намеренно — компонент всегда занимает полную высоту, выделенную ему в сетке конструктора (см. Ограничения), поэтому нужный зазор достигается изменением высоты самого компонента, а `anchor` определяет положение полосы внутри этой высоты
99
+ ## Внутреннее устройство
99
100
 
100
- ### Ограничения
101
+ ### Реактивность
101
102
 
102
- - В превью (`GUIPreview.svelte`) компонент всегда получает явную высоту по размеру сетки (как `Map`/`VideoViewer`) — без этого пустая ячейка без компонента схлопывается почти в ноль, так как сетка превью не резервирует высоту неиспользуемых строк
103
+ - Объект `anchorClass` определяет CSS-классы `justify-*` для положения полосы (`top`/`center`/`bottom`)
103
104
 
104
- ### Производительность
105
+ ### Сторы и зависимости
105
106
 
106
- - Компонент не содержит состояния и внутренних эффектов, перерисовывается только при изменении пропсов
107
+ - Используется `twMerge` для объединения Tailwind CSS классов
108
+
109
+ ### Директивы
110
+
111
+ - `twMerge` для объединения классов обёртки и полосы
112
+ - `$props()` для получения пропсов компонента
113
+
114
+ ### Слоты
115
+
116
+ - Компонент не использует внешних слотов
@@ -1,8 +1,41 @@
1
1
  # FileAttach Component
2
2
 
3
- ## Описание
3
+ ## Назначение
4
4
 
5
- Прикрепление файла - это UI-компонент, который позволяет пользователям выбирать файлы или изображения с их устройства. Компонент поддерживает два режима работы: для обычных файлов и для изображений с предварительным просмотром.
5
+ Закачивает выбранный файл в файловую систему устройства.
6
+
7
+ ## Пакет данных
8
+
9
+ - После выбора файл уходит частями командой `SET FS`: `UploadStart` → `UploadChunk` → `UploadDone`
10
+ - Файлы с устройства компонент не показывает
11
+
12
+ ## Ключи
13
+
14
+ | Ключ | Описание |
15
+ | ------ | ------------------------------------------------------- |
16
+ | `Name` | имя файла, не длиннее 31 символа (ограничение прошивки) |
17
+
18
+ ## Особенности
19
+
20
+ - Для списка файлов, удаления и прогресса закачки используйте виджет «Файловая система»
21
+
22
+ ### Адаптивность
23
+
24
+ - Компонент использует Tailwind CSS для адаптивного дизайна
25
+ - Изображения масштабируются с учетом режима (cover/contain)
26
+ - Используются относительные единицы измерения для обеспечения масштабируемости
27
+
28
+ ### Ограничения
29
+
30
+ - При работе с изображениями компонент автоматически создает URL предварительного просмотра
31
+ - Принимаемые MIME-типы определяются строкой `accept`, которая должна соответствовать спецификации HTML
32
+ - Для изображений поддерживается только предварительный просмотр, сохранение происходит через обработчик
33
+
34
+ ### Производительность
35
+
36
+ - Компонент использует оптимизации Svelte для минимизации перерисовок
37
+ - URL предварительного просмотра создаются только при необходимости
38
+ - Используется эффективное объединение классов через `twMerge`
6
39
 
7
40
  ## Пропсы
8
41
 
@@ -25,7 +58,7 @@
25
58
  | `currentImage` | `string \| null` | `""` | Текущее изображение (для связывания) |
26
59
  | `onChange` | `(event: Event, file: File \| null) => void` | `() => {}` | Обработчик изменения файла |
27
60
 
28
- ## События
61
+ ### Колбэки
29
62
 
30
63
  | Название | Тип | Описание |
31
64
  | -------- | ------------------------------------------ | ------------------------------------------------------------------------------------------- |
@@ -94,29 +127,6 @@
94
127
  />
95
128
  ```
96
129
 
97
- ## Внутренняя архитектура
98
-
99
- ### Реактивность
100
-
101
- - Переменная `previewUrl` вычисляет URL для предварительного просмотра изображения (из `currentImage` или из только что выбранного файла)
102
- - Переменная `fileName` хранит имя выбранного файла
103
- - Объект `ID` генерирует уникальный идентификатор для элемента ввода
104
-
105
- ### Сторы и зависимости
106
-
107
- - Используется стор `twMerge` для объединения Tailwind CSS классов
108
- - Используется `URL.createObjectURL` для мгновенного превью выбранного файла — предыдущий blob-URL отзывается через `URL.revokeObjectURL` перед созданием нового и при размонтировании компонента
109
-
110
- ### Директивы
111
-
112
- - `bind:currentImage` для двусторонней привязки текущего изображения
113
- - Обработчик `onchange` для отслеживания изменения файла
114
- - Обработчик `onclick` для активации выбора файла
115
-
116
- ### Слоты
117
-
118
- - Компонент не использует внешних слотов
119
-
120
130
  ## Конструктор свойств (FileAttachProps.svelte)
121
131
 
122
132
  ### Описание
@@ -139,22 +149,30 @@
139
149
  - Имеет различные наборы полей в зависимости от режима (`forConstructor`)
140
150
  - Использует систему локализации через `$T('constructor.props.*')`
141
151
 
142
- ## Заметки
152
+ ### Что настраивается
143
153
 
144
- ### Адаптивность
154
+ - Вид: **Файл** — кнопка с именем выбранного файла; **Изображение** — квадратное превью, картинка сразу показывается локально
155
+ - «Допустимые файлы» (`accept`) — фильтр в окне выбора, например `.bin, .pem`
145
156
 
146
- - Компонент использует Tailwind CSS для адаптивного дизайна
147
- - Изображения масштабируются с учетом режима (cover/contain)
148
- - Используются относительные единицы измерения для обеспечения масштабируемости
157
+ ## Внутреннее устройство
149
158
 
150
- ### Ограничения
159
+ ### Реактивность
151
160
 
152
- - При работе с изображениями компонент автоматически создает URL предварительного просмотра
153
- - Принимаемые MIME-типы определяются строкой `accept`, которая должна соответствовать спецификации HTML
154
- - Для изображений поддерживается только предварительный просмотр, сохранение происходит через обработчик
161
+ - Переменная `previewUrl` вычисляет URL для предварительного просмотра изображения (из `currentImage` или из только что выбранного файла)
162
+ - Переменная `fileName` хранит имя выбранного файла
163
+ - Объект `ID` генерирует уникальный идентификатор для элемента ввода
155
164
 
156
- ### Производительность
165
+ ### Сторы и зависимости
157
166
 
158
- - Компонент использует оптимизации Svelte для минимизации перерисовок
159
- - URL предварительного просмотра создаются только при необходимости
160
- - Используется эффективное объединение классов через `twMerge`
167
+ - Используется стор `twMerge` для объединения Tailwind CSS классов
168
+ - Используется `URL.createObjectURL` для мгновенного превью выбранного файла — предыдущий blob-URL отзывается через `URL.revokeObjectURL` перед созданием нового и при размонтировании компонента
169
+
170
+ ### Директивы
171
+
172
+ - `bind:currentImage` для двусторонней привязки текущего изображения
173
+ - Обработчик `onchange` для отслеживания изменения файла
174
+ - Обработчик `onclick` для активации выбора файла
175
+
176
+ ### Слоты
177
+
178
+ - Компонент не использует внешних слотов