poe-svelte-ui-lib 1.9.7 → 1.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Accordion/AccordionProps.svelte +6 -7
- package/dist/Accordion/README.md +1 -1
- package/dist/Button/ButtonProps.svelte +21 -21
- package/dist/Button/README.md +184 -0
- package/dist/Carousel/README.md +147 -0
- package/dist/ColorPicker/README.md +141 -0
- package/dist/CommonSnippets.svelte +3 -3
- package/dist/ComponentExample.svelte +11 -7
- package/dist/ComponentExample.svelte.d.ts +1 -0
- package/dist/FileAttach/README.md +172 -0
- package/dist/Graph/README.md +151 -0
- package/dist/Input/InputProps.svelte +5 -6
- package/dist/Input/README.md +0 -0
- package/dist/Joystick/JoystickProps.svelte +1 -1
- package/dist/Joystick/README.md +147 -0
- package/dist/Map/MapProps.svelte +2 -7
- package/dist/Map/README.md +152 -0
- package/dist/ProgressBar/ProgressBarProps.svelte +2 -0
- package/dist/ProgressBar/README.md +157 -0
- package/dist/Select/README.md +176 -0
- package/dist/Select/SelectProps.svelte +1 -1
- package/dist/Slider/README.md +177 -0
- package/dist/Slider/Slider.svelte +7 -0
- package/dist/Slider/SliderProps.svelte +3 -3
- package/dist/Switch/README.md +186 -0
- package/dist/Switch/SwitchProps.svelte +14 -22
- package/dist/Table/README.md +223 -0
- package/dist/Table/TableProps.svelte +38 -144
- package/dist/Tabs/README.md +181 -0
- package/dist/TextField/README.md +121 -0
- package/dist/Widget/README.md +196 -0
- package/dist/Widget/WidgetProps.svelte +1 -38
- package/dist/locales/translations.js +8 -0
- package/package.json +7 -5
|
@@ -95,10 +95,10 @@
|
|
|
95
95
|
<div class="flex items-start justify-center gap-8">
|
|
96
96
|
<div class="flex w-1/3 flex-col px-2">
|
|
97
97
|
<CommonSnippets snippet="Access" {component} {onPropertyChange} />
|
|
98
|
-
<CommonSnippets snippet="Label" {component} {onPropertyChange} />
|
|
99
|
-
<CommonSnippets snippet="LabelAlign" initialValue={initialAlign} {component} {onPropertyChange} />
|
|
100
98
|
</div>
|
|
101
99
|
<div class="flex w-1/3 flex-col px-2">
|
|
100
|
+
<CommonSnippets snippet="Label" {component} {onPropertyChange} />
|
|
101
|
+
<CommonSnippets snippet="LabelAlign" initialValue={initialAlign} {component} {onPropertyChange} />
|
|
102
102
|
<CommonSnippets
|
|
103
103
|
snippet="IconsLib"
|
|
104
104
|
initialValue={{
|
|
@@ -120,12 +120,12 @@
|
|
|
120
120
|
<div class="flex w-1/3 flex-col px-2">
|
|
121
121
|
<CommonSnippets snippet="Identificator" {component} {onPropertyChange} />
|
|
122
122
|
<CommonSnippets snippet="Access" {component} {onPropertyChange} />
|
|
123
|
-
|
|
123
|
+
<CommonSnippets snippet="WrapperClass" {component} {onPropertyChange} />
|
|
124
124
|
{@render AccordionSize()}
|
|
125
|
-
{@render AccordionIsOpen()}
|
|
126
125
|
</div>
|
|
127
126
|
<div class="flex w-1/3 flex-col px-2">
|
|
128
|
-
<CommonSnippets snippet="
|
|
127
|
+
<CommonSnippets snippet="Label" {component} {onPropertyChange} />
|
|
128
|
+
<CommonSnippets snippet="LabelClass" initialValue={initialAlign} {component} {onPropertyChange} />
|
|
129
129
|
<CommonSnippets
|
|
130
130
|
snippet="IconsLib"
|
|
131
131
|
initialValue={{
|
|
@@ -137,8 +137,7 @@
|
|
|
137
137
|
{component}
|
|
138
138
|
{onPropertyChange}
|
|
139
139
|
/>
|
|
140
|
-
|
|
141
|
-
<CommonSnippets snippet="LabelClass" initialValue={initialAlign} {component} {onPropertyChange} />
|
|
140
|
+
{@render AccordionIsOpen()}
|
|
142
141
|
</div>
|
|
143
142
|
<div class="flex w-1/3 flex-col items-center gap-2 px-2">
|
|
144
143
|
{@render AccordionBackgroundImage()}
|
package/dist/Accordion/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Описание
|
|
4
4
|
|
|
5
|
-
Аккордеон - это
|
|
5
|
+
Аккордеон - это UI-компонент, который позволяет скрывать и отображать содержимое в виде раскрывающегося блока. Компонент предоставляет возможность настройки внешнего вида, размеров, иконок, изображений фона и других параметров через систему пропсов.
|
|
6
6
|
|
|
7
7
|
## Пропсы
|
|
8
8
|
|
|
@@ -152,27 +152,6 @@
|
|
|
152
152
|
</div>
|
|
153
153
|
<div class="flex w-1/3 flex-col px-2">
|
|
154
154
|
{@render ButtonVariables()}
|
|
155
|
-
<CommonSnippets
|
|
156
|
-
snippet="IconsLib"
|
|
157
|
-
initialValue={{
|
|
158
|
-
name: $t("constructor.props.buttonIcon"),
|
|
159
|
-
icon: component.properties.content.icon,
|
|
160
|
-
updateProperty: (icon: string) => {
|
|
161
|
-
updateProperty("content.icon", icon as string, component, onPropertyChange)
|
|
162
|
-
if (component.properties.content.icon && !component.properties.content.name?.trim())
|
|
163
|
-
updateProperty("componentClass", twMerge((component.properties as UI.IButtonProps).componentClass, "w-fit"), component, onPropertyChange)
|
|
164
|
-
else if (!component.properties.content.icon && !component.properties.content.name?.trim())
|
|
165
|
-
updateProperty("componentClass", twMerge((component.properties as UI.IButtonProps).componentClass, "w-full"), component, onPropertyChange)
|
|
166
|
-
},
|
|
167
|
-
icons: { array: ICONS },
|
|
168
|
-
}}
|
|
169
|
-
{component}
|
|
170
|
-
{onPropertyChange}
|
|
171
|
-
/>
|
|
172
|
-
</div>
|
|
173
|
-
<div class="flex w-1/3 flex-col px-2">
|
|
174
|
-
{@render ButtonName()}
|
|
175
|
-
{@render ButtonHeight()}
|
|
176
155
|
<CommonSnippets
|
|
177
156
|
snippet="Colors"
|
|
178
157
|
initialValue={{
|
|
@@ -201,6 +180,27 @@
|
|
|
201
180
|
{onPropertyChange}
|
|
202
181
|
/>
|
|
203
182
|
</div>
|
|
183
|
+
<div class="flex w-1/3 flex-col px-2">
|
|
184
|
+
{@render ButtonName()}
|
|
185
|
+
<CommonSnippets
|
|
186
|
+
snippet="IconsLib"
|
|
187
|
+
initialValue={{
|
|
188
|
+
name: $t("constructor.props.buttonIcon"),
|
|
189
|
+
icon: component.properties.content.icon,
|
|
190
|
+
updateProperty: (icon: string) => {
|
|
191
|
+
updateProperty("content.icon", icon as string, component, onPropertyChange)
|
|
192
|
+
if (component.properties.content.icon && !component.properties.content.name?.trim())
|
|
193
|
+
updateProperty("componentClass", twMerge((component.properties as UI.IButtonProps).componentClass, "w-fit"), component, onPropertyChange)
|
|
194
|
+
else if (!component.properties.content.icon && !component.properties.content.name?.trim())
|
|
195
|
+
updateProperty("componentClass", twMerge((component.properties as UI.IButtonProps).componentClass, "w-full"), component, onPropertyChange)
|
|
196
|
+
},
|
|
197
|
+
icons: { array: ICONS },
|
|
198
|
+
}}
|
|
199
|
+
{component}
|
|
200
|
+
{onPropertyChange}
|
|
201
|
+
/>
|
|
202
|
+
{@render ButtonHeight()}
|
|
203
|
+
</div>
|
|
204
204
|
</div>
|
|
205
205
|
{:else}
|
|
206
206
|
<div class="relative flex flex-row items-start justify-center">
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Button Component
|
|
2
|
+
|
|
3
|
+
## Описание
|
|
4
|
+
|
|
5
|
+
Кнопка - это интерактивный UI-компонент, который предоставляет возможность выполнения действий при клике. Компонент поддерживает настройку внешнего вида, иконок, информационных подсказок, горячих клавиш и другие параметры через систему пропсов.
|
|
6
|
+
|
|
7
|
+
## Пропсы
|
|
8
|
+
|
|
9
|
+
| Название | Тип | По умолчанию | Описание |
|
|
10
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------ |
|
|
11
|
+
| id | string | crypto.randomUUID() | Уникальный идентификатор компонента |
|
|
12
|
+
| wrapperClass | string | "" | Дополнительные CSS-классы для обертки компонента |
|
|
13
|
+
| componentClass | string | "" | CSS-классы для стилизации самой кнопки |
|
|
14
|
+
| disabled | boolean | false | Состояние отключения кнопки |
|
|
15
|
+
| content | { name?: string; info?: { text: string; side: "top" \| "bottom" \| "left" \| "right" }; icon?: ConstructorOfATypedSvelteComponent \| string \| null } | { name: "", info: { text: "", side: "top" }, icon: null } | Настройки содержимого кнопки |
|
|
16
|
+
| keyBind | { key?: string; ctrlKey?: boolean; shiftKey?: boolean; altKey?: boolean; metaKey?: boolean; showHint?: boolean } | { showHint: true } | Настройки горячих клавиш для активации кнопки |
|
|
17
|
+
| onClick | () => void | undefined | Обработчик клика по кнопке |
|
|
18
|
+
|
|
19
|
+
### Вложенные типы
|
|
20
|
+
|
|
21
|
+
#### Content
|
|
22
|
+
|
|
23
|
+
| Название | Тип | По умолчанию | Описание |
|
|
24
|
+
| -------- | -------------------------------------------------------------- | ------------------------- | -------------------------------------------------------- |
|
|
25
|
+
| name | string | "" | Текст кнопки |
|
|
26
|
+
| info | { text: string; side: "top" \| "bottom" \| "left" \| "right" } | { text: "", side: "top" } | Информационная подсказка |
|
|
27
|
+
| icon | ConstructorOfATypedSvelteComponent \| string \| null | null | Иконка, отображаемая в кнопке (SVG строка или компонент) |
|
|
28
|
+
|
|
29
|
+
#### Info
|
|
30
|
+
|
|
31
|
+
| Название | Тип | По умолчанию | Описание |
|
|
32
|
+
| -------- | -------------------------------------- | ------------ | ------------------------------ |
|
|
33
|
+
| text | string | "" | Текст информационной подсказки |
|
|
34
|
+
| side | "top" \| "bottom" \| "left" \| "right" | "top" | Сторона отображения подсказки |
|
|
35
|
+
|
|
36
|
+
#### KeyBind
|
|
37
|
+
|
|
38
|
+
| Название | Тип | По умолчанию | Описание |
|
|
39
|
+
| -------- | ------- | ------------ | ------------------------------------------ |
|
|
40
|
+
| key | string | undefined | Клавиша для активации |
|
|
41
|
+
| ctrlKey | boolean | undefined | Требование нажатия Ctrl |
|
|
42
|
+
| shiftKey | boolean | undefined | Требование нажатия Shift |
|
|
43
|
+
| altKey | boolean | undefined | Требование нажатия Alt |
|
|
44
|
+
| metaKey | boolean | undefined | Требование нажатия Meta (Cmd на Mac) |
|
|
45
|
+
| showHint | boolean | true | Показывать ли подсказку о горячих клавишах |
|
|
46
|
+
|
|
47
|
+
## События
|
|
48
|
+
|
|
49
|
+
| Название | Тип | Описание |
|
|
50
|
+
| -------- | ---------- | ----------------------------------------------------------------------- |
|
|
51
|
+
| onClick | () => void | Срабатывает при клике по кнопке или при активации через горячую клавишу |
|
|
52
|
+
|
|
53
|
+
## Примеры
|
|
54
|
+
|
|
55
|
+
### Базовое использование
|
|
56
|
+
|
|
57
|
+
```svelte
|
|
58
|
+
<script>
|
|
59
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
60
|
+
|
|
61
|
+
const handleClick = () => {
|
|
62
|
+
console.log("Кнопка нажата!")
|
|
63
|
+
}
|
|
64
|
+
</script>
|
|
65
|
+
|
|
66
|
+
<UI.Button content={{ name: "Button 1" }} componentClass="bg-red" onClick={handleClick} />
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Кнопка с информацией и иконкой
|
|
70
|
+
|
|
71
|
+
```svelte
|
|
72
|
+
<script>
|
|
73
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
74
|
+
import IconGripVerticalDual from "./appIcons/IconGripVerticalDual.svelte"
|
|
75
|
+
|
|
76
|
+
const handleClick = () => {
|
|
77
|
+
console.log("Кнопка с иконкой нажата!")
|
|
78
|
+
}
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<UI.Button
|
|
82
|
+
content={{
|
|
83
|
+
name: "Button 2",
|
|
84
|
+
icon: IconGripVerticalDual,
|
|
85
|
+
info: { text: "Info for Icon Button", side: "right" },
|
|
86
|
+
}}
|
|
87
|
+
componentClass="bg-green h-12 rounded-3xl"
|
|
88
|
+
onClick={handleClick}
|
|
89
|
+
/>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Отключенная кнопка
|
|
93
|
+
|
|
94
|
+
```svelte
|
|
95
|
+
<script>
|
|
96
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<UI.Button content={{ name: "Button 3" }} componentClass="bg-blue" disabled={true} />
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Кнопка только с иконкой
|
|
103
|
+
|
|
104
|
+
```svelte
|
|
105
|
+
<script>
|
|
106
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
107
|
+
import IconGripHorizontalUp from "./appIcons/IconGripHorizontalUp.svelte"
|
|
108
|
+
|
|
109
|
+
const handleClick = () => {
|
|
110
|
+
console.log("Кнопка с иконкой нажата!")
|
|
111
|
+
}
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
<div class="flex h-10 items-center justify-around">
|
|
115
|
+
<UI.Button content={{ icon: IconGripHorizontalUp }} wrapperClass="w-20 h-10" componentClass="bg-purple rounded-full" onClick={handleClick} />
|
|
116
|
+
</div>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Внутренняя архитектура
|
|
120
|
+
|
|
121
|
+
### Реактивность
|
|
122
|
+
|
|
123
|
+
- Переменная `showInfo` управляет видимостью информационной подсказки
|
|
124
|
+
- Переменная `svgSize` вычисляет размеры SVG иконки на основе классов
|
|
125
|
+
- Объект `tooltipConfig` содержит конфигурацию позиционирования подсказок
|
|
126
|
+
|
|
127
|
+
### Сторы и зависимости
|
|
128
|
+
|
|
129
|
+
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
130
|
+
- Применяется переход `fly` из `svelte/transition` для анимации подсказки
|
|
131
|
+
- Используется `onMount` для подписки и отписки от глобальных событий клавиатуры
|
|
132
|
+
|
|
133
|
+
### Директивы
|
|
134
|
+
|
|
135
|
+
- `transition:fly` для анимации появления/скрытия информационной подсказки
|
|
136
|
+
- Обработчики `onmouseenter` и `onmouseleave` для показа/скрытия подсказки
|
|
137
|
+
- Обработчик `onclick` для активации кнопки
|
|
138
|
+
|
|
139
|
+
### Слоты
|
|
140
|
+
|
|
141
|
+
- Компонент не использует внешних слотов
|
|
142
|
+
|
|
143
|
+
## Конструктор свойств (ButtonProps.svelte)
|
|
144
|
+
|
|
145
|
+
### Описание
|
|
146
|
+
|
|
147
|
+
Компонент `ButtonProps.svelte` предоставляет визуальный интерфейс для редактирования свойств кнопки. Поддерживает два режима отображения: для конструктора и для редактирования.
|
|
148
|
+
|
|
149
|
+
### Пропсы конструктора
|
|
150
|
+
|
|
151
|
+
| Название | Тип | По умолчанию | Описание |
|
|
152
|
+
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
|
|
153
|
+
| component | UIComponent & { properties: Partial<IButtonProps> } | - | Объект компонента с его свойствами |
|
|
154
|
+
| onPropertyChange | (updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void | - | Коллбэк для обновления свойств компонента |
|
|
155
|
+
| forConstructor | boolean | true | Режим отображения (для конструктора или редактирования) |
|
|
156
|
+
|
|
157
|
+
### Особенности конструктора
|
|
158
|
+
|
|
159
|
+
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
160
|
+
- Включает модальное окно для выбора иконок из библиотеки
|
|
161
|
+
- Поддерживает настройку обработчика событий и аргументов
|
|
162
|
+
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
163
|
+
- Использует систему локализации через `$t('constructor.props.*')`
|
|
164
|
+
- Поддерживает валидацию вводимых данных через регулярные выражения
|
|
165
|
+
|
|
166
|
+
## Заметки
|
|
167
|
+
|
|
168
|
+
### Адаптивность
|
|
169
|
+
|
|
170
|
+
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
171
|
+
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
172
|
+
- Подсказки автоматически позиционируются в зависимости от стороны отображения
|
|
173
|
+
|
|
174
|
+
### Ограничения
|
|
175
|
+
|
|
176
|
+
- При использовании только иконки (без текста) кнопка становится прозрачной без фона
|
|
177
|
+
- Горячие клавиши регистрируются глобально и могут конфликтовать с другими компонентами
|
|
178
|
+
- Подсказки не поддерживают HTML-разметку, отображают только текст
|
|
179
|
+
|
|
180
|
+
### Производительность
|
|
181
|
+
|
|
182
|
+
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
183
|
+
- Обработчики клавиатуры удаляются при размонтировании компонента
|
|
184
|
+
- Используется эффективное объединение классов через `twMerge`
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Carousel Component
|
|
2
|
+
|
|
3
|
+
## Описание
|
|
4
|
+
|
|
5
|
+
Карусель - это интерактивный UI-компонент, который позволяет просматривать контент в виде прокручиваемой ленты с возможностью навигации по стрелкам.
|
|
6
|
+
|
|
7
|
+
## Пропсы
|
|
8
|
+
|
|
9
|
+
| Название | Тип | По умолчанию | Описание |
|
|
10
|
+
| ------------ | --------------------------------- | -------------------------------- | ----------------------------------------------------------- |
|
|
11
|
+
| id | string | crypto.randomUUID() | Уникальный идентификатор компонента |
|
|
12
|
+
| wrapperClass | string | "" | Дополнительные CSS-классы для обертки компонента |
|
|
13
|
+
| label | { name?: string; class?: string } | { name: "", class: "text-left" } | Настройки заголовка карусели |
|
|
14
|
+
| scrollValue | number | 200 | Значение прокрутки при нажатии на стрелки (в пикселях) |
|
|
15
|
+
| children | Snippet | undefined | Слот для содержимого, которое будет отображаться в карусели |
|
|
16
|
+
|
|
17
|
+
### Вложенные типы
|
|
18
|
+
|
|
19
|
+
#### Label
|
|
20
|
+
|
|
21
|
+
| Название | Тип | По умолчанию | Описание |
|
|
22
|
+
| -------- | ------ | ------------ | ------------------------------------------ |
|
|
23
|
+
| name | string | "" | Текст заголовка карусели |
|
|
24
|
+
| class | string | "text-left" | CSS-классы для стилизации текста заголовка |
|
|
25
|
+
|
|
26
|
+
## События
|
|
27
|
+
|
|
28
|
+
Компонент не генерирует специфические события.
|
|
29
|
+
|
|
30
|
+
## Примеры
|
|
31
|
+
|
|
32
|
+
### Базовое использование
|
|
33
|
+
|
|
34
|
+
```svelte
|
|
35
|
+
<script>
|
|
36
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<UI.Carousel scrollValue={200}>
|
|
40
|
+
<div class="w-90 min-w-90 h-20 bg-white p-2">
|
|
41
|
+
<div class="mr-2 flex flex-col items-end">
|
|
42
|
+
<h5 class="flex items-center whitespace-nowrap">COIV-REQE-J1U9-VCS7 |</h5>
|
|
43
|
+
<p class="flex w-fit text-sm whitespace-nowrap gap-0.5">10.00.000-00_00007C9E0000BDE300000718:B2</p>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="w-90 min-w-90 h-20 bg-white p-2">
|
|
47
|
+
<div class="mr-2 flex flex-col items-end">
|
|
48
|
+
<h5 class="flex items-center whitespace-nowrap">COIV-REQE-J1U9-VCS7 |</h5>
|
|
49
|
+
<p class="flex w-fit text-sm whitespace-nowrap gap-0.5">10.00.000-00_00007C9E0000BDE300000718:B2</p>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="w-90 min-w-90 h-20 bg-white p-2">
|
|
53
|
+
<div class="mr-2 flex flex-col items-end">
|
|
54
|
+
<h5 class="flex items-center whitespace-nowrap">COIV-REQE-J1U9-VCS7 |</h5>
|
|
55
|
+
<p class="flex w-fit text-sm whitespace-nowrap gap-0.5">10.00.000-00_00007C9E0000BDE300000718:B2</p>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</UI.Carousel>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### С заголовком
|
|
62
|
+
|
|
63
|
+
```svelte
|
|
64
|
+
<script>
|
|
65
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<UI.Carousel label={{ name: "Карусель с заголовком" }} scrollValue={300}>
|
|
69
|
+
<div class="w-80 min-w-80 h-24 bg-blue-100 p-3 rounded-lg">
|
|
70
|
+
<p>Элемент 1</p>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="w-80 min-w-80 h-24 bg-green-100 p-3 rounded-lg">
|
|
73
|
+
<p>Элемент 2</p>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="w-80 min-w-80 h-24 bg-yellow-100 p-3 rounded-lg">
|
|
76
|
+
<p>Элемент 3</p>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="w-80 min-w-80 h-24 bg-red-100 p-3 rounded-lg">
|
|
79
|
+
<p>Элемент 4</p>
|
|
80
|
+
</div>
|
|
81
|
+
</UI.Carousel>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### С настраиваемым классом обертки
|
|
85
|
+
|
|
86
|
+
```svelte
|
|
87
|
+
<script>
|
|
88
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
89
|
+
</script>
|
|
90
|
+
|
|
91
|
+
<UI.Carousel wrapperClass="my-4 mx-auto max-w-4xl" scrollValue={150}>
|
|
92
|
+
<div class="w-72 min-w-72 h-16 bg-purple-100 p-2 rounded-md">
|
|
93
|
+
<p>Контент 1</p>
|
|
94
|
+
</div>
|
|
95
|
+
<div class="w-72 min-w-72 h-16 bg-pink-100 p-2 rounded-md">
|
|
96
|
+
<p>Контент 2</p>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="w-72 min-w-72 h-16 bg-indigo-100 p-2 rounded-md">
|
|
99
|
+
<p>Контент 3</p>
|
|
100
|
+
</div>
|
|
101
|
+
</UI.Carousel>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Внутренняя архитектура
|
|
105
|
+
|
|
106
|
+
### Реактивность
|
|
107
|
+
|
|
108
|
+
- Переменная `carouselRef` хранит ссылку на DOM-элемент карусели
|
|
109
|
+
- Переменная `isAtStart` отслеживает, находится ли карусель в начале прокрутки
|
|
110
|
+
- Переменная `isAtEnd` отслеживает, находится ли карусель в конце прокрутки
|
|
111
|
+
- Функция `updateScrollState` обновляет состояния `isAtStart` и `isAtEnd` при прокрутке
|
|
112
|
+
|
|
113
|
+
### Сторы и зависимости
|
|
114
|
+
|
|
115
|
+
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
116
|
+
- Применяется переход `slide` из `svelte/transition` для анимации стрелок навигации
|
|
117
|
+
- Используется `ResizeObserver` для отслеживания изменений размера
|
|
118
|
+
|
|
119
|
+
### Директивы
|
|
120
|
+
|
|
121
|
+
- `bind:this={carouselRef}` для получения ссылки на элемент карусели
|
|
122
|
+
- `transition:slide` для анимации стрелок навигации
|
|
123
|
+
- `$effect` для установки и очистки обработчиков событий
|
|
124
|
+
|
|
125
|
+
### Слоты
|
|
126
|
+
|
|
127
|
+
- `children` - слот для содержимого, которое отображается внутри карусели
|
|
128
|
+
|
|
129
|
+
## Заметки
|
|
130
|
+
|
|
131
|
+
### Адаптивность
|
|
132
|
+
|
|
133
|
+
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
134
|
+
- Стрелки навигации автоматически скрываются при достижении начала или конца карусели
|
|
135
|
+
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
136
|
+
|
|
137
|
+
### Ограничения
|
|
138
|
+
|
|
139
|
+
- Для корректного отображения элементы внутри карусели должны иметь фиксированную ширину
|
|
140
|
+
- Компонент не поддерживает вертикальную прокрутку
|
|
141
|
+
- Значение `scrollValue` влияет на величину прокрутки при нажатии стрелок
|
|
142
|
+
|
|
143
|
+
### Производительность
|
|
144
|
+
|
|
145
|
+
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
146
|
+
- Обработчики событий и `ResizeObserver` корректно удаляются при размонтировании
|
|
147
|
+
- Используется эффективное объединение классов через `twMerge`
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# ColorPicker Component
|
|
2
|
+
|
|
3
|
+
## Описание
|
|
4
|
+
|
|
5
|
+
Палитра - это интерактивный UI-компонент, который позволяет выбирать цвета с помощью HSV-палитры и настройки яркости. Компонент поддерживает два режима работы: цветовой (HSV) и белый (градации серого), а также предоставляет превью цвета, его RGB и HEX значения.
|
|
6
|
+
|
|
7
|
+
## Пропсы
|
|
8
|
+
|
|
9
|
+
| Название | Тип | По умолчанию | Описание |
|
|
10
|
+
| ------------ | --------------------------------- | ----------------------- | ---------------------------------------------------------------- |
|
|
11
|
+
| id | string | crypto.randomUUID() | Уникальный идентификатор компонента |
|
|
12
|
+
| readonly | boolean | false | Режим только для чтения (без возможности изменения цвета) |
|
|
13
|
+
| wrapperClass | string | "" | Дополнительные CSS-классы для обертки компонента |
|
|
14
|
+
| label | { name?: string; class?: string } | { name: "", class: "" } | Настройки заголовка компонента |
|
|
15
|
+
| value | [number, number, number] | [0, 0, 0] | Начальное значение цвета в формате RGB (массив из 3 чисел 0-255) |
|
|
16
|
+
| onChange | () => void | () => {} | Обработчик изменения цвета |
|
|
17
|
+
|
|
18
|
+
### Вложенные типы
|
|
19
|
+
|
|
20
|
+
#### Label
|
|
21
|
+
|
|
22
|
+
| Название | Тип | По умолчанию | Описание |
|
|
23
|
+
| -------- | ------ | ------------ | ------------------------------------------ |
|
|
24
|
+
| name | string | "" | Текст заголовка компонента |
|
|
25
|
+
| class | string | "" | CSS-классы для стилизации текста заголовка |
|
|
26
|
+
|
|
27
|
+
## События
|
|
28
|
+
|
|
29
|
+
| Название | Тип | Описание |
|
|
30
|
+
| -------- | ---------------------------------- | ------------------------------------------------------------- |
|
|
31
|
+
| onChange | ([number, number, number]) => void | Срабатывает при изменении цвета, передает массив RGB значений |
|
|
32
|
+
|
|
33
|
+
## Примеры
|
|
34
|
+
|
|
35
|
+
### Базовое использование
|
|
36
|
+
|
|
37
|
+
```svelte
|
|
38
|
+
<script>
|
|
39
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
40
|
+
|
|
41
|
+
let selectedColor = [186, 25, 255]
|
|
42
|
+
|
|
43
|
+
const handleColorChange = (newColor) => {
|
|
44
|
+
selectedColor = newColor
|
|
45
|
+
console.log("Новый цвет:", newColor)
|
|
46
|
+
}
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<UI.ColorPicker label={{ name: "Выбор цвета из палитры" }} bind:value={selectedColor} onChange={handleColorChange} />
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### С начальным значением
|
|
53
|
+
|
|
54
|
+
```svelte
|
|
55
|
+
<script>
|
|
56
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
57
|
+
|
|
58
|
+
const handleColorChange = (newColor) => {
|
|
59
|
+
console.log("Цвет изменен:", newColor)
|
|
60
|
+
}
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<UI.ColorPicker value={[255, 100, 50]} onChange={handleColorChange} />
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Только для чтения
|
|
67
|
+
|
|
68
|
+
```svelte
|
|
69
|
+
<script>
|
|
70
|
+
import * as UI from "poe-svelte-ui-lib"
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
<UI.ColorPicker value={[0, 255, 128]} readonly={true} label={{ name: "Просмотр цвета" }} />
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Внутренняя архитектура
|
|
77
|
+
|
|
78
|
+
### Реактивность
|
|
79
|
+
|
|
80
|
+
- Переменная `hsv` хранит текущее значение цвета в формате HSV
|
|
81
|
+
- Переменные `huePointer`, `brightnessPointer` и `whiteValue` отслеживают положение слайдеров
|
|
82
|
+
- Переменная `mode` определяет текущий режим (hsv или white)
|
|
83
|
+
- Функция `hsvToRgb` конвертирует HSV в RGB формат
|
|
84
|
+
- `$effect` синхронизирует входное значение RGB с внутренним состоянием HSV
|
|
85
|
+
|
|
86
|
+
### Сторы и зависимости
|
|
87
|
+
|
|
88
|
+
- Используется стор `twMerge` для объединения Tailwind CSS классов
|
|
89
|
+
- Используются математические функции для конвертации цветовых пространств
|
|
90
|
+
|
|
91
|
+
### Директивы
|
|
92
|
+
|
|
93
|
+
- `bind:this` для получения ссылок на DOM-элементы
|
|
94
|
+
- Обработчики `onmousedown` для перетаскивания слайдеров
|
|
95
|
+
- `$derived` для вычисления цвета превью и HEX значения
|
|
96
|
+
|
|
97
|
+
### Слоты
|
|
98
|
+
|
|
99
|
+
- Компонент не использует внешних слотов
|
|
100
|
+
|
|
101
|
+
## Конструктор свойств (ColorPickerProps.svelte)
|
|
102
|
+
|
|
103
|
+
### Описание
|
|
104
|
+
|
|
105
|
+
Компонент `ColorPickerProps.svelte` предоставляет визуальный интерфейс для редактирования свойств компонента выбора цвета. Поддерживает два режима отображения: для конструктора и для редактирования.
|
|
106
|
+
|
|
107
|
+
### Пропсы конструктора
|
|
108
|
+
|
|
109
|
+
| Название | Тип | По умолчанию | Описание |
|
|
110
|
+
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
|
|
111
|
+
| component | UIComponent & { properties: Partial<IColorPickerProps> } | - | Объект компонента с его свойствами |
|
|
112
|
+
| onPropertyChange | (updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void | - | Коллбэк для обновления свойств компонента |
|
|
113
|
+
| forConstructor | boolean | true | Режим отображения (для конструктора или редактирования) |
|
|
114
|
+
|
|
115
|
+
### Особенности конструктора
|
|
116
|
+
|
|
117
|
+
- Предоставляет визуальные элементы управления для всех доступных свойств
|
|
118
|
+
- Поддерживает настройку начального цвета через три числовых поля (RGB)
|
|
119
|
+
- Использует общие сниппеты для настройки различных параметров
|
|
120
|
+
- Имеет различные наборы полей в зависимости от режима (`forConstructor`)
|
|
121
|
+
- Использует систему локализации через `$t('constructor.props.*')`
|
|
122
|
+
|
|
123
|
+
## Заметки
|
|
124
|
+
|
|
125
|
+
### Адаптивность
|
|
126
|
+
|
|
127
|
+
- Компонент использует Tailwind CSS для адаптивного дизайна
|
|
128
|
+
- Превью цвета автоматически изменяет цвет текста для лучшей читаемости
|
|
129
|
+
- Используются относительные единицы измерения для обеспечения масштабируемости
|
|
130
|
+
|
|
131
|
+
### Ограничения
|
|
132
|
+
|
|
133
|
+
- Входное значение `value` должно быть массивом из 3 чисел в диапазоне 0-255
|
|
134
|
+
- Компонент автоматически определяет режим (HSV/белый) на основе входного значения
|
|
135
|
+
- При работе в режиме белого цвета все три компонента RGB имеют одинаковое значение
|
|
136
|
+
|
|
137
|
+
### Производительность
|
|
138
|
+
|
|
139
|
+
- Компонент использует оптимизации Svelte для минимизации перерисовок
|
|
140
|
+
- Вычисления цветовых преобразований происходят только при необходимости
|
|
141
|
+
- Используется эффективное объединение классов через `twMerge`
|
|
@@ -212,14 +212,14 @@
|
|
|
212
212
|
<div class="flex">
|
|
213
213
|
<UI.Input
|
|
214
214
|
label={{ name: $t("constructor.props.min") }}
|
|
215
|
-
value={initialValue.number
|
|
215
|
+
value={initialValue.number?.minNum}
|
|
216
216
|
type="number"
|
|
217
217
|
readonly={initialValue.bitMode}
|
|
218
218
|
onUpdate={(value) => initialValue.updateProperty(value as number, "number.minNum")}
|
|
219
219
|
/>
|
|
220
220
|
<UI.Input
|
|
221
221
|
label={{ name: $t("constructor.props.max") }}
|
|
222
|
-
value={initialValue.number
|
|
222
|
+
value={initialValue.number?.maxNum}
|
|
223
223
|
type="number"
|
|
224
224
|
readonly={initialValue.bitMode}
|
|
225
225
|
onUpdate={(value) => initialValue.updateProperty(value as number, "number.maxNum")}
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
{#if component.type !== "ProgressBar"}
|
|
228
228
|
<UI.Input
|
|
229
229
|
label={{ name: $t("constructor.props.step") }}
|
|
230
|
-
value={initialValue.number
|
|
230
|
+
value={initialValue.number?.step}
|
|
231
231
|
type="number"
|
|
232
232
|
readonly={initialValue.bitMode}
|
|
233
233
|
onUpdate={(value) => initialValue.updateProperty(value as number, "number.step")}
|