poe-svelte-ui-lib 1.16.1 → 1.16.2

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.
@@ -6,20 +6,20 @@
6
6
 
7
7
  ## Пропсы
8
8
 
9
- | Название | Тип | По умолчанию | Описание |
10
- | --- | --- | --- | --- |
11
- | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
- | `isOpen` | `boolean` | `false` | Состояние открытия/закрытия аккордеона |
13
- | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
14
- | `size` | `object` | `-` | Размеры сетки содержимого (количество колонок и строк) |
15
- | `size.height` | `number` | `1` | Количество строк в сетке содержимого |
16
- | `size.width` | `number` | `1` | Количество колонок в сетке содержимого |
17
- | `label` | `object` | `-` | Настройки заголовка аккордеона |
18
- | `label.name` | `string` | `""` | Текст заголовка аккордеона |
19
- | `label.class` | `string` | `"text-left"` | CSS-классы для стилизации текста заголовка |
20
- | `label.icon` | `ConstructorOfATypedSvelteComponent \| string \| null` | `null` | Иконка, отображаемая в заголовке (SVG строка или компонент) |
21
- | `children` | `Snippet` | `undefined` | Слот для содержимого, которое будет отображаться при открытии |
22
- | `image` | `string` | `""` | URL изображения для фона содержимого аккордеона |
9
+ | Название | Тип | По умолчанию | Описание |
10
+ | -------------- | ------------------------------------------------------ | --------------------- | ------------------------------------------------------------- |
11
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
+ | `isOpen` | `boolean` | `false` | Состояние открытия/закрытия аккордеона |
13
+ | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
14
+ | `size` | `object` | `-` | Размеры сетки содержимого (количество колонок и строк) |
15
+ | `size.height` | `number` | `1` | Количество строк в сетке содержимого |
16
+ | `size.width` | `number` | `1` | Количество колонок в сетке содержимого |
17
+ | `label` | `object` | `-` | Настройки заголовка аккордеона |
18
+ | `label.name` | `string` | `""` | Текст заголовка аккордеона |
19
+ | `label.class` | `string` | `"text-left"` | CSS-классы для стилизации текста заголовка |
20
+ | `label.icon` | `ConstructorOfATypedSvelteComponent \| string \| null` | `null` | Иконка, отображаемая в заголовке (SVG строка или компонент) |
21
+ | `children` | `Snippet` | `undefined` | Слот для содержимого, которое будет отображаться при открытии |
22
+ | `image` | `string` | `""` | URL изображения для фона содержимого аккордеона |
23
23
 
24
24
  ## События
25
25
 
@@ -105,11 +105,11 @@
105
105
 
106
106
  ### Пропсы конструктора
107
107
 
108
- | Название | Тип | По умолчанию | Описание |
109
- | --- | --- | --- | --- |
110
- | `component` | `UIComponent & { properties: Partial<IAccordionProps> }` | `-` | Объект компонента с его свойствами |
111
- | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
112
- | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
108
+ | Название | Тип | По умолчанию | Описание |
109
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
110
+ | `component` | `UIComponent & { properties: Partial<IAccordionProps> }` | `-` | Объект компонента с его свойствами |
111
+ | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
112
+ | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
113
113
 
114
114
  ### Особенности конструктора
115
115
 
@@ -6,32 +6,32 @@
6
6
 
7
7
  ## Пропсы
8
8
 
9
- | Название | Тип | По умолчанию | Описание |
10
- | --- | --- | --- | --- |
11
- | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
- | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
- | `componentClass` | `string` | `""` | CSS-классы для стилизации самой кнопки |
14
- | `disabled` | `boolean` | `false` | Состояние отключения кнопки |
15
- | `content` | `object` | `undefined` | Настройки содержимого кнопки |
16
- | `content.name` | `string` | `""` | Текст кнопки |
17
- | `content.info` | `object` | `undefined` | Информационная подсказка |
18
- | `content.info.text` | `string` | `""` | Текст информационной подсказки |
19
- | `content.info.side` | `"top" \| "bottom" \| "left" \| "right"` | `"top"` | Сторона отображения подсказки |
20
- | `content.icon` | `ConstructorOfATypedSvelteComponent \| string \| null` | `null` | Иконка, отображаемая в кнопке (SVG строка или Svelte-компонент); без `content.name` и с заданной иконкой кнопка рендерится как круглая без фона |
21
- | `keyBind` | `object` | `{ showHint: true }` | Настройки горячих клавиш для активации кнопки |
22
- | `keyBind.key` | `string` | `undefined` | Клавиша для активации |
23
- | `keyBind.ctrlKey` | `boolean` | `undefined` | Требование нажатия Ctrl |
24
- | `keyBind.shiftKey` | `boolean` | `undefined` | Требование нажатия Shift |
25
- | `keyBind.altKey` | `boolean` | `undefined` | Требование нажатия Alt |
26
- | `keyBind.metaKey` | `boolean` | `undefined` | Требование нажатия Meta (Cmd на Mac) |
27
- | `keyBind.showHint` | `boolean` | `true` | Показывать ли подсказку о горячих клавишах |
28
- | `onClick` | `() => void` | `undefined` | Обработчик клика по кнопке |
9
+ | Название | Тип | По умолчанию | Описание |
10
+ | ------------------- | ------------------------------------------------------ | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
11
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
+ | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
+ | `componentClass` | `string` | `""` | CSS-классы для стилизации самой кнопки |
14
+ | `disabled` | `boolean` | `false` | Состояние отключения кнопки |
15
+ | `content` | `object` | `undefined` | Настройки содержимого кнопки |
16
+ | `content.name` | `string` | `""` | Текст кнопки |
17
+ | `content.info` | `object` | `undefined` | Информационная подсказка |
18
+ | `content.info.text` | `string` | `""` | Текст информационной подсказки |
19
+ | `content.info.side` | `"top" \| "bottom" \| "left" \| "right"` | `"top"` | Сторона отображения подсказки |
20
+ | `content.icon` | `ConstructorOfATypedSvelteComponent \| string \| null` | `null` | Иконка, отображаемая в кнопке (SVG строка или Svelte-компонент); без `content.name` и с заданной иконкой кнопка рендерится как круглая без фона |
21
+ | `keyBind` | `object` | `{ showHint: true }` | Настройки горячих клавиш для активации кнопки |
22
+ | `keyBind.key` | `string` | `undefined` | Клавиша для активации |
23
+ | `keyBind.ctrlKey` | `boolean` | `undefined` | Требование нажатия Ctrl |
24
+ | `keyBind.shiftKey` | `boolean` | `undefined` | Требование нажатия Shift |
25
+ | `keyBind.altKey` | `boolean` | `undefined` | Требование нажатия Alt |
26
+ | `keyBind.metaKey` | `boolean` | `undefined` | Требование нажатия Meta (Cmd на Mac) |
27
+ | `keyBind.showHint` | `boolean` | `true` | Показывать ли подсказку о горячих клавишах |
28
+ | `onClick` | `() => void` | `undefined` | Обработчик клика по кнопке |
29
29
 
30
30
  ## События
31
31
 
32
- | Название | Тип | Описание |
33
- | --- | --- | --- |
34
- | onClick | () => void | Срабатывает при клике по кнопке или при активации через горячую клавишу |
32
+ | Название | Тип | Описание |
33
+ | -------- | ---------- | ----------------------------------------------------------------------- |
34
+ | onClick | () => void | Срабатывает при клике по кнопке или при активации через горячую клавишу |
35
35
 
36
36
  ## Примеры
37
37
 
@@ -131,11 +131,11 @@
131
131
 
132
132
  ### Пропсы конструктора
133
133
 
134
- | Название | Тип | По умолчанию | Описание |
135
- | --- | --- | --- | --- |
136
- | `component` | `UIComponent & { properties: Partial<IButtonProps> }` | `-` | Объект компонента с его свойствами |
137
- | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
138
- | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
134
+ | Название | Тип | По умолчанию | Описание |
135
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
136
+ | `component` | `UIComponent & { properties: Partial<IButtonProps> }` | `-` | Объект компонента с его свойствами |
137
+ | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
138
+ | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
139
139
 
140
140
  ### Особенности конструктора
141
141
 
@@ -6,15 +6,15 @@
6
6
 
7
7
  ## Пропсы
8
8
 
9
- | Название | Тип | По умолчанию | Описание |
10
- | --- | --- | --- | --- |
11
- | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
- | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
- | `label` | `object` | `-` | Настройки заголовка карусели |
14
- | `label.name` | `string` | `""` | Текст заголовка карусели |
15
- | `label.class` | `string` | `"text-left"` | CSS-классы для стилизации текста заголовка |
16
- | `scrollValue` | `number` | `200` | Значение прокрутки при нажатии на стрелки (в пикселях) |
17
- | `children` | `Snippet` | `undefined` | Слот для содержимого, которое будет отображаться в карусели |
9
+ | Название | Тип | По умолчанию | Описание |
10
+ | -------------- | --------- | --------------------- | ----------------------------------------------------------- |
11
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
+ | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
+ | `label` | `object` | `-` | Настройки заголовка карусели |
14
+ | `label.name` | `string` | `""` | Текст заголовка карусели |
15
+ | `label.class` | `string` | `"text-left"` | CSS-классы для стилизации текста заголовка |
16
+ | `scrollValue` | `number` | `200` | Значение прокрутки при нажатии на стрелки (в пикселях) |
17
+ | `children` | `Snippet` | `undefined` | Слот для содержимого, которое будет отображаться в карусели |
18
18
 
19
19
  ## События
20
20
 
@@ -6,21 +6,21 @@
6
6
 
7
7
  ## Пропсы
8
8
 
9
- | Название | Тип | По умолчанию | Описание |
10
- | --- | --- | --- | --- |
11
- | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
- | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
- | `label` | `object` | `-` | Настройки заголовка компонента |
14
- | `label.name` | `string` | `""` | Текст заголовка компонента |
15
- | `label.class` | `string` | `""` | CSS-классы для стилизации текста заголовка |
16
- | `value` | `number[]` | `[0, 0, 0]` | Текущее значение цвета в формате RGB-массива (3 числа 0-255) |
17
- | `readonly` | `boolean` | `false` | Режим только для чтения (без возможности изменения цвета) |
18
- | `onChange` | `(value: number[]) => void` | `() => {}` | Обработчик изменения цвета |
9
+ | Название | Тип | По умолчанию | Описание |
10
+ | -------------- | --------------------------- | --------------------- | ------------------------------------------------------------ |
11
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
+ | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
+ | `label` | `object` | `-` | Настройки заголовка компонента |
14
+ | `label.name` | `string` | `""` | Текст заголовка компонента |
15
+ | `label.class` | `string` | `""` | CSS-классы для стилизации текста заголовка |
16
+ | `value` | `number[]` | `[0, 0, 0]` | Текущее значение цвета в формате RGB-массива (3 числа 0-255) |
17
+ | `readonly` | `boolean` | `false` | Режим только для чтения (без возможности изменения цвета) |
18
+ | `onChange` | `(value: number[]) => void` | `() => {}` | Обработчик изменения цвета |
19
19
 
20
20
  ## События
21
21
 
22
- | Название | Тип | Описание |
23
- | --- | --- | --- |
22
+ | Название | Тип | Описание |
23
+ | -------- | ---------------------------------- | ------------------------------------------------------------- |
24
24
  | onChange | ([number, number, number]) => void | Срабатывает при изменении цвета, передает массив RGB значений |
25
25
 
26
26
  ## Примеры
@@ -99,11 +99,11 @@
99
99
 
100
100
  ### Пропсы конструктора
101
101
 
102
- | Название | Тип | По умолчанию | Описание |
103
- | --- | --- | --- | --- |
104
- | `component` | `UIComponent & { properties: Partial<IColorPickerProps> }` | `-` | Объект компонента с его свойствами |
105
- | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
106
- | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
102
+ | Название | Тип | По умолчанию | Описание |
103
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
104
+ | `component` | `UIComponent & { properties: Partial<IColorPickerProps> }` | `-` | Объект компонента с его свойствами |
105
+ | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
106
+ | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
107
107
 
108
108
  ### Особенности конструктора
109
109
 
@@ -3,15 +3,16 @@
3
3
  import { twMerge } from "tailwind-merge"
4
4
  import type { IDividerProps } from "../types"
5
5
 
6
- let { id = crypto.randomUUID(), wrapperClass = "", type = "line", size = 16, anchor = "center" }: IDividerProps = $props()
6
+ let { id = crypto.randomUUID(), wrapperClass = "", type = "line", size = "base", width = 2, color = "bg-max", anchor = "center" }: IDividerProps = $props()
7
7
 
8
8
  const anchorClass = { top: "justify-start", center: "justify-center", bottom: "justify-end" } as const
9
+ const sizeIndent = { small: 4, base: 8, large: 16, huge: 24, massive: 32 } as const
9
10
  </script>
10
11
 
11
12
  <div id={`${id}-${crypto.randomUUID().slice(0, 6)}`} class={twMerge(`flex h-full w-full flex-col ${anchorClass[anchor]}`, wrapperClass)}>
12
- <div class="flex w-full items-center" style="height: {size}px;">
13
+ <div class="w-full" style="padding-block: {sizeIndent[size]}px;">
13
14
  {#if type === "line"}
14
- <div class="w-full border-t border-(--bg-color)"></div>
15
+ <div class={twMerge("w-full rounded-full", color)} style="height: {width}px;"></div>
15
16
  {/if}
16
17
  </div>
17
18
  </div>
@@ -18,6 +18,8 @@
18
18
 
19
19
  let currentType = $derived($optionsStore.DIVIDER_TYPE_OPTIONS.find((t) => t.value === component.properties.type))
20
20
  let currentAnchor = $derived($optionsStore.DIVIDER_ANCHOR_OPTIONS.find((a) => a.value === component.properties.anchor))
21
+ let currentSize = $derived($optionsStore.TEXTFIELD_SIZE_OPTIONS.find((s) => s.value === component.properties.size))
22
+ let currentColor = $derived($optionsStore.COLOR_OPTIONS.find((c) => c.value === component.properties.color))
21
23
  </script>
22
24
 
23
25
  {#snippet DividerType()}
@@ -41,26 +43,50 @@
41
43
  {/snippet}
42
44
 
43
45
  {#snippet DividerSize()}
44
- <UI.Input
46
+ <UI.Select
45
47
  label={{ name: $T("constructor.props.size") }}
46
- value={component.properties.size}
47
- onUpdate={(value) => updateProperty("size", value as number, component, onPropertyChange)}
48
- number={{ minNum: 0, maxNum: 200, step: 1 }}
48
+ type="buttons"
49
+ value={currentSize}
50
+ options={$optionsStore.TEXTFIELD_SIZE_OPTIONS}
51
+ onUpdate={(item) => updateProperty("size", (item as UI.IOption).value as string, component, onPropertyChange)}
52
+ />
53
+ {/snippet}
54
+
55
+ {#snippet DividerWidth()}
56
+ <UI.Input
57
+ label={{ name: $T("constructor.props.divider.width") }}
58
+ value={component.properties.width}
59
+ onUpdate={(value) => updateProperty("width", value as number, component, onPropertyChange)}
60
+ number={{ minNum: 1, maxNum: 20, step: 1 }}
49
61
  type="number"
50
62
  />
51
63
  {/snippet}
52
64
 
65
+ {#snippet DividerColor()}
66
+ <CommonSnippets
67
+ snippet="Colors"
68
+ initialValue={{
69
+ color: currentColor,
70
+ updateProperty: (option: UI.IOption) => updateProperty("color", option.value as string, component, onPropertyChange),
71
+ }}
72
+ {component}
73
+ {onPropertyChange}
74
+ />
75
+ {/snippet}
76
+
53
77
  {#if forConstructor}
54
78
  <div class="flex items-start justify-center gap-8">
55
79
  <div class="flex w-1/3 flex-col px-2">
56
80
  <CommonSnippets snippet="Access" {component} {onPropertyChange} />
81
+ {@render DividerType()}
57
82
  </div>
58
83
  <div class="flex w-1/3 flex-col px-2">
59
- {@render DividerType()}
60
84
  {@render DividerAnchor()}
85
+ {@render DividerSize()}
61
86
  </div>
62
87
  <div class="flex w-1/3 flex-col px-2">
63
- {@render DividerSize()}
88
+ {@render DividerWidth()}
89
+ {@render DividerColor()}
64
90
  </div>
65
91
  </div>
66
92
  {:else}
@@ -73,9 +99,11 @@
73
99
  <div class="flex w-1/3 flex-col px-2">
74
100
  {@render DividerType()}
75
101
  {@render DividerAnchor()}
102
+ {@render DividerSize()}
76
103
  </div>
77
104
  <div class="flex w-1/3 flex-col px-2">
78
- {@render DividerSize()}
105
+ {@render DividerWidth()}
106
+ {@render DividerColor()}
79
107
  </div>
80
108
  </div>
81
109
  {/if}
@@ -0,0 +1,110 @@
1
+ # Divider Component
2
+
3
+ ## Описание
4
+
5
+ Разделитель — UI-компонент для визуального и/или пространственного разделения элементов, расположенных друг под другом в конструкторе интерфейса. Занимает столько места по высоте, сколько выделено ему в сетке (аналогично `Map`/`VideoViewer` — компонент реально резервирует указанную высоту, а не сжимается по контенту). Поддерживает два режима: видимая полоса или чистый отступ без линии, настраиваемую толщину и цвет полосы, размер внутреннего отступа и привязку полосы к верху/центру/низу выделенной области.
6
+
7
+ ## Пропсы
8
+
9
+ | Название | Тип | По умолчанию | Описание |
10
+ | -------------- | ----------------------------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
11
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
+ | `wrapperClass` | `string` | `""` | CSS-классы для обёртки компонента |
13
+ | `type` | `"line" \| "empty"` | `"line"` | `line` — видимая полоса, `empty` — чистый отступ без полосы |
14
+ | `size` | `"small" \| "base" \| "large" \| "huge" \| "massive"` | `"base"` | Величина внутреннего отступа вокруг полосы (`small`=4px, `base`=8px, `large`=16px, `huge`=24px, `massive`=32px) |
15
+ | `width` | `number` | `2` | Толщина полосы в пикселях (применяется только при `type="line"`) |
16
+ | `color` | `string` | `"bg-max"` | Класс цвета полосы из общей палитры (`bg-max`, `bg-red`, `bg-yellow`, `bg-green`, `bg-blue`, `bg-purple`, `bg-gray`) |
17
+ | `anchor` | `"top" \| "center" \| "bottom"` | `"center"` | Положение полосы внутри выделенной компоненту высоты сетки |
18
+
19
+ ## События
20
+
21
+ Компонент не генерирует специфические события.
22
+
23
+ ## Примеры
24
+
25
+ ### Полоса по центру
26
+
27
+ ```svelte
28
+ <script>
29
+ import * as UI from "poe-svelte-ui-lib"
30
+ </script>
31
+
32
+ <UI.Divider type="line" size="base" width={2} color="bg-max" anchor="center" />
33
+ ```
34
+
35
+ ### Толстая цветная полоса у верха области
36
+
37
+ ```svelte
38
+ <script>
39
+ import * as UI from "poe-svelte-ui-lib"
40
+ </script>
41
+
42
+ <UI.Divider type="line" size="large" width={4} color="bg-blue" anchor="top" />
43
+ ```
44
+
45
+ ### Чистый отступ без полосы
46
+
47
+ ```svelte
48
+ <script>
49
+ import * as UI from "poe-svelte-ui-lib"
50
+ </script>
51
+
52
+ <UI.Divider type="empty" size="massive" />
53
+ ```
54
+
55
+ ## Внутренняя архитектура
56
+
57
+ ### Реактивность
58
+
59
+ - Объект `anchorClass` определяет CSS-классы `justify-*` для положения полосы (`top`/`center`/`bottom`)
60
+ - Объект `sizeIndent` определяет отступ в пикселях для каждого из пяти именованных размеров
61
+
62
+ ### Сторы и зависимости
63
+
64
+ - Используется `twMerge` для объединения Tailwind CSS классов
65
+
66
+ ### Директивы
67
+
68
+ - `twMerge` для объединения классов обёртки и полосы
69
+ - `$props()` для получения пропсов компонента
70
+
71
+ ### Слоты
72
+
73
+ - Компонент не использует внешних слотов
74
+
75
+ ## Конструктор свойств (DividerProps.svelte)
76
+
77
+ ### Описание
78
+
79
+ Компонент `DividerProps.svelte` предоставляет визуальный интерфейс для редактирования свойств разделителя. Поддерживает два режима отображения: для конструктора и для редактирования.
80
+
81
+ ### Пропсы конструктора
82
+
83
+ | Название | Тип | По умолчанию | Описание |
84
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
85
+ | `component` | `UIComponent & { properties: Partial<IDividerProps> }` | `-` | Объект компонента с его свойствами |
86
+ | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
87
+ | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
88
+
89
+ ### Особенности конструктора
90
+
91
+ - `type`/`anchor` — выбор через кнопки (`UI.Select type="buttons"`)
92
+ - `size` — переиспользует набор опций `TEXTFIELD_SIZE_OPTIONS` (тот же пятиступенчатый набор, что у `TextField`)
93
+ - `color` — переиспользует общий сниппет `CommonSnippets snippet="Colors"`, но привязан к собственному свойству `color`, а не к `wrapperClass`
94
+ - `width` — числовой ввод (1-20 px)
95
+
96
+ ## Заметки
97
+
98
+ ### Адаптивность
99
+
100
+ - Ширина полосы всегда 100% ширины выделенной области, толщина и отступ настраиваются отдельно
101
+ - Используется Tailwind CSS, относительные единицы для отступа заданы в px намеренно — величина отступа не должна зависеть от корневого размера шрифта потребляющего приложения
102
+
103
+ ### Ограничения
104
+
105
+ - Отступ (`size`) ограничен пятью именованными вариантами, как и у `TextField`
106
+ - В превью (`GUIPreview.svelte`) компонент всегда получает явную высоту по размеру сетки (как `Map`/`VideoViewer`) — без этого пустая ячейка без компонента схлопывается почти в ноль, так как сетка превью не резервирует высоту неиспользуемых строк
107
+
108
+ ### Производительность
109
+
110
+ - Компонент не содержит состояния и внутренних эффектов, перерисовывается только при изменении пропсов
@@ -6,28 +6,28 @@
6
6
 
7
7
  ## Пропсы
8
8
 
9
- | Название | Тип | По умолчанию | Описание |
10
- | --- | --- | --- | --- |
11
- | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
- | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
- | `label` | `object` | `-` | Настройки заголовка компонента |
14
- | `label.name` | `string` | `""` | Текст заголовка компонента |
15
- | `label.class` | `string` | `""` | CSS-классы для стилизации текста заголовка |
16
- | `type` | `"file" \| "image"` | `"file"` | Тип компонента (файл или изображение) |
17
- | `accept` | `string` | `"*/*"` | MIME-типы файлов, которые можно выбрать |
18
- | `imageSize` | `object` | `-` | Настройки отображения изображения |
19
- | `imageSize.height` | `string` | `"10rem"` | Высота области отображения изображения |
20
- | `imageSize.width` | `string` | `"10rem"` | Ширина области отображения изображения |
21
- | `imageSize.fitMode` | `"cover" \| "contain"` | `"cover"` | Режим масштабирования изображения |
22
- | `imageSize.form` | `"square" \| "circle"` | `"square"` | Форма области отображения изображения |
23
- | `disabled` | `boolean` | `false` | Состояние отключения компонента |
24
- | `currentImage` | `string \| null` | `""` | Текущее изображение (для связывания) |
25
- | `onChange` | `(event: Event, file: File \| null) => void` | `() => {}` | Обработчик изменения файла |
9
+ | Название | Тип | По умолчанию | Описание |
10
+ | ------------------- | -------------------------------------------- | --------------------- | ------------------------------------------------ |
11
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
12
+ | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
13
+ | `label` | `object` | `-` | Настройки заголовка компонента |
14
+ | `label.name` | `string` | `""` | Текст заголовка компонента |
15
+ | `label.class` | `string` | `""` | CSS-классы для стилизации текста заголовка |
16
+ | `type` | `"file" \| "image"` | `"file"` | Тип компонента (файл или изображение) |
17
+ | `accept` | `string` | `"*/*"` | MIME-типы файлов, которые можно выбрать |
18
+ | `imageSize` | `object` | `-` | Настройки отображения изображения |
19
+ | `imageSize.height` | `string` | `"10rem"` | Высота области отображения изображения |
20
+ | `imageSize.width` | `string` | `"10rem"` | Ширина области отображения изображения |
21
+ | `imageSize.fitMode` | `"cover" \| "contain"` | `"cover"` | Режим масштабирования изображения |
22
+ | `imageSize.form` | `"square" \| "circle"` | `"square"` | Форма области отображения изображения |
23
+ | `disabled` | `boolean` | `false` | Состояние отключения компонента |
24
+ | `currentImage` | `string \| null` | `""` | Текущее изображение (для связывания) |
25
+ | `onChange` | `(event: Event, file: File \| null) => void` | `() => {}` | Обработчик изменения файла |
26
26
 
27
27
  ## События
28
28
 
29
- | Название | Тип | Описание |
30
- | --- | --- | --- |
29
+ | Название | Тип | Описание |
30
+ | -------- | ------------------------------------------ | ------------------------------------------------------------------------------------------- |
31
31
  | onChange | (event: Event, file: File \| null) => void | Срабатывает при выборе файла, передает событие и выбранный файл (или null если файл удален) |
32
32
 
33
33
  ## Примеры
@@ -125,11 +125,11 @@
125
125
 
126
126
  ### Пропсы конструктора
127
127
 
128
- | Название | Тип | По умолчанию | Описание |
129
- | --- | --- | --- | --- |
130
- | `component` | `UIComponent & { properties: Partial<IFileAttachProps> }` | `-` | Объект компонента с его свойствами |
131
- | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
132
- | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
128
+ | Название | Тип | По умолчанию | Описание |
129
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
130
+ | `component` | `UIComponent & { properties: Partial<IFileAttachProps> }` | `-` | Объект компонента с его свойствами |
131
+ | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
132
+ | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
133
133
 
134
134
  ### Особенности конструктора
135
135
 
@@ -13,24 +13,24 @@
13
13
 
14
14
  ## Пропсы
15
15
 
16
- | Название | Тип | По умолчанию | Описание |
17
- | --- | --- | --- | --- |
18
- | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
19
- | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
20
- | `label` | `object` | `-` | Настройки заголовка компонента |
21
- | `label.name` | `string` | `""` | Текст заголовка компонента |
22
- | `label.class` | `string` | `""` | CSS-классы для стилизации текста заголовка |
23
- | `streamingData` | `object` | `-` | Потоковые данные для живого режима |
24
- | `streamingData.data` | `{ name: string; value: number }[] \| null` | `[]` | Массив данных для отображения. Режим AUTO (`refreshRate: 0`) определяет появление новых данных сравнением самих значений с предыдущим пакетом, а не по временной метке |
25
- | `streamingData.data[].name` | `string` | `-` | Имя серии |
26
- | `streamingData.data[].value` | `number` | `-` | Текущее значение серии |
27
- | `isTest` | `boolean` | `false` | Режим тестирования (генерация случайных данных); также форсирует `refreshRate` = 50мс |
28
- | `refreshRate` | `number` | `0` | Интервал отрисовки точки в живом режиме, мс. `0` = **AUTO** — точка рисуется, когда значения реально изменились (без таймера) |
29
- | `historyData` | `IGraphHistorySeries[]` | `[]` | Готовый исторический ряд — если задан (непустой), включает статический режим (см. ниже) |
30
- | `historyData[].name` | `string` | `-` | Имя серии (отображается в подписи и в таблице значений) |
31
- | `historyData[].points` | `IGraphHistoryPoint[]` | `-` | Точки серии |
32
- | `historyData[].points[].value` | `number` | `-` | Значение точки |
33
- | `historyData[].points[].timestamp` | `number` | `-` | Unix-эпоха в миллисекундах (как `Date.now()`). Точки сортируются компонентом по `timestamp` при построении графика — исходный порядок в массиве не важен |
16
+ | Название | Тип | По умолчанию | Описание |
17
+ | ---------------------------------- | ------------------------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
18
+ | `id` | `string` | `crypto.randomUUID()` | Уникальный идентификатор компонента |
19
+ | `wrapperClass` | `string` | `""` | Дополнительные CSS-классы для обертки компонента |
20
+ | `label` | `object` | `-` | Настройки заголовка компонента |
21
+ | `label.name` | `string` | `""` | Текст заголовка компонента |
22
+ | `label.class` | `string` | `""` | CSS-классы для стилизации текста заголовка |
23
+ | `streamingData` | `object` | `-` | Потоковые данные для живого режима |
24
+ | `streamingData.data` | `{ name: string; value: number }[] \| null` | `[]` | Массив данных для отображения. Режим AUTO (`refreshRate: 0`) определяет появление новых данных сравнением самих значений с предыдущим пакетом, а не по временной метке |
25
+ | `streamingData.data[].name` | `string` | `-` | Имя серии |
26
+ | `streamingData.data[].value` | `number` | `-` | Текущее значение серии |
27
+ | `isTest` | `boolean` | `false` | Режим тестирования (генерация случайных данных); также форсирует `refreshRate` = 50мс |
28
+ | `refreshRate` | `number` | `0` | Интервал отрисовки точки в живом режиме, мс. `0` = **AUTO** — точка рисуется, когда значения реально изменились (без таймера) |
29
+ | `historyData` | `IGraphHistorySeries[]` | `[]` | Готовый исторический ряд — если задан (непустой), включает статический режим (см. ниже) |
30
+ | `historyData[].name` | `string` | `-` | Имя серии (отображается в подписи и в таблице значений) |
31
+ | `historyData[].points` | `IGraphHistoryPoint[]` | `-` | Точки серии |
32
+ | `historyData[].points[].value` | `number` | `-` | Значение точки |
33
+ | `historyData[].points[].timestamp` | `number` | `-` | Unix-эпоха в миллисекундах (как `Date.now()`). Точки сортируются компонентом по `timestamp` при построении графика — исходный порядок в массиве не важен |
34
34
 
35
35
  `refreshRate` относится только к живому режиму и сохраняется вместе с компонентом при сборке интерфейса в конструкторе (редактируется через `GraphProps.svelte`, см. ниже) — это стартовое значение при монтировании; остаётся переключаемым "на лету" прямо на самом графике через встроенный `Select`. В статическом режиме (`historyData`) этот селект скрыт, так как не имеет эффекта.
36
36
 
@@ -149,11 +149,11 @@
149
149
 
150
150
  ### Пропсы конструктора
151
151
 
152
- | Название | Тип | По умолчанию | Описание |
153
- | --- | --- | --- | --- |
154
- | `component` | `UIComponent & { properties: Partial<IGraphProps> }` | `-` | Объект компонента с его свойствами |
155
- | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
156
- | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
152
+ | Название | Тип | По умолчанию | Описание |
153
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------- |
154
+ | `component` | `UIComponent & { properties: Partial<IGraphProps> }` | `-` | Объект компонента с его свойствами |
155
+ | `onPropertyChange` | `(updates: Partial<{ properties?: string \| object; name?: string; access?: string; eventHandler?: IUIComponentHandler }>) => void` | `-` | Коллбэк для обновления свойств компонента |
156
+ | `forConstructor` | `boolean` | `true` | Режим отображения (для конструктора или редактирования) |
157
157
 
158
158
  ### Особенности конструктора
159
159