startup-ui 0.12.0 → 1.0.1
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/AGENTS.md +18 -0
- package/CHANGELOG.md +39 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +21 -0
- package/README.md +54 -0
- package/dist/defaults.css +83 -0
- package/dist/index.css +1 -1
- package/dist/startup-ui.cjs.js +33 -586
- package/dist/startup-ui.cjs.js.map +1 -1
- package/dist/startup-ui.es.js +7157 -8837
- package/dist/startup-ui.es.js.map +1 -1
- package/dist/types/components/SActionIcon.d.ts +2 -1
- package/dist/types/components/SActionIcon.d.ts.map +1 -1
- package/dist/types/components/SCanvas.d.ts +0 -1
- package/dist/types/components/SCanvas.d.ts.map +1 -1
- package/dist/types/components/SCheckbox.d.ts.map +1 -1
- package/dist/types/components/SCheckboxGroup.d.ts +4 -0
- package/dist/types/components/SCheckboxGroup.d.ts.map +1 -1
- package/dist/types/components/SColumnSettings.d.ts +4 -4
- package/dist/types/components/SColumnSettings.d.ts.map +1 -1
- package/dist/types/components/SConfirm/SConfirm.d.ts +2 -0
- package/dist/types/components/SConfirm/SConfirm.d.ts.map +1 -1
- package/dist/types/components/SCopyText.d.ts.map +1 -1
- package/dist/types/components/SDatePicker.d.ts +3 -4
- package/dist/types/components/SDatePicker.d.ts.map +1 -1
- package/dist/types/components/SDialog.d.ts.map +1 -1
- package/dist/types/components/SFilterGroup.d.ts +3 -3
- package/dist/types/components/SFilterGroup.d.ts.map +1 -1
- package/dist/types/components/SFooter.d.ts.map +1 -1
- package/dist/types/components/SForm.d.ts.map +1 -1
- package/dist/types/components/SFormRow.d.ts.map +1 -1
- package/dist/types/components/SHtmlEditor.d.ts +20 -0
- package/dist/types/components/SHtmlEditor.d.ts.map +1 -1
- package/dist/types/components/SImagePreview.d.ts.map +1 -1
- package/dist/types/components/SInput.d.ts +9 -2
- package/dist/types/components/SInput.d.ts.map +1 -1
- package/dist/types/components/SMenu.d.ts +39 -0
- package/dist/types/components/SMenu.d.ts.map +1 -0
- package/dist/types/components/SNote.d.ts.map +1 -1
- package/dist/types/components/SPagination.d.ts.map +1 -1
- package/dist/types/components/SProgressbar.d.ts.map +1 -1
- package/dist/types/components/SRadio.d.ts.map +1 -1
- package/dist/types/components/SRadioGroup.d.ts +4 -0
- package/dist/types/components/SRadioGroup.d.ts.map +1 -1
- package/dist/types/components/SSelect.d.ts +6 -0
- package/dist/types/components/SSelect.d.ts.map +1 -1
- package/dist/types/components/SStatus.d.ts.map +1 -1
- package/dist/types/components/STable.d.ts +4 -4
- package/dist/types/components/STable.d.ts.map +1 -1
- package/dist/types/components/SToggle.d.ts.map +1 -1
- package/dist/types/components/STooltip.d.ts +0 -1
- package/dist/types/components/STooltip.d.ts.map +1 -1
- package/dist/types/components/STree.d.ts +11 -5
- package/dist/types/components/STree.d.ts.map +1 -1
- package/dist/types/components/SUpload.d.ts +5 -4
- package/dist/types/components/SUpload.d.ts.map +1 -1
- package/dist/types/components/SVerticalMenu.d.ts.map +1 -1
- package/dist/types/components/htmlEditor/contentStyle.d.ts +9 -0
- package/dist/types/components/htmlEditor/contentStyle.d.ts.map +1 -0
- package/dist/types/components/icons.d.ts +23 -0
- package/dist/types/components/icons.d.ts.map +1 -0
- package/dist/types/config.d.ts +49 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/global-components.d.ts +3 -6
- package/dist/types/global-components.d.ts.map +1 -1
- package/dist/types/index.d.ts +12 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/locale/index.d.ts +49 -0
- package/dist/types/locale/index.d.ts.map +1 -0
- package/dist/types/locale/messages/en-US.d.ts +4 -0
- package/dist/types/locale/messages/en-US.d.ts.map +1 -0
- package/dist/types/locale/messages/en.d.ts +4 -0
- package/dist/types/locale/messages/en.d.ts.map +1 -0
- package/dist/types/locale/messages/ru.d.ts +4 -0
- package/dist/types/locale/messages/ru.d.ts.map +1 -0
- package/dist/types/locale/types.d.ts +74 -0
- package/dist/types/locale/types.d.ts.map +1 -0
- package/dist/types/plugin.d.ts +2 -1
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/utils/deepMerge.d.ts +9 -0
- package/dist/types/utils/deepMerge.d.ts.map +1 -0
- package/dist/types/utils/options.d.ts +25 -0
- package/dist/types/utils/options.d.ts.map +1 -0
- package/llms/components/data/sfilter.md +194 -0
- package/llms/components/data/spagination.md +114 -0
- package/llms/components/data/stable.md +638 -0
- package/llms/components/data/stree.md +213 -0
- package/llms/components/forms/scheckbox.md +139 -0
- package/llms/components/forms/sdatepicker.md +161 -0
- package/llms/components/forms/sform.md +240 -0
- package/llms/components/forms/shtmleditor.md +143 -0
- package/llms/components/forms/sinput.md +165 -0
- package/llms/components/forms/sradio.md +164 -0
- package/llms/components/forms/sselect.md +149 -0
- package/llms/components/forms/sswitch.md +69 -0
- package/llms/components/forms/supload.md +189 -0
- package/llms/components/interfaces/sactionbar.md +40 -0
- package/llms/components/interfaces/sactionicon.md +126 -0
- package/llms/components/interfaces/salert.md +87 -0
- package/llms/components/interfaces/sbutton.md +167 -0
- package/llms/components/interfaces/scolumnsettings.md +204 -0
- package/llms/components/interfaces/sconfirm.md +57 -0
- package/llms/components/interfaces/scopytext.md +67 -0
- package/llms/components/interfaces/sdashboard.md +130 -0
- package/llms/components/interfaces/sdialog.md +158 -0
- package/llms/components/interfaces/simagepreview.md +98 -0
- package/llms/components/interfaces/snote.md +64 -0
- package/llms/components/interfaces/sprogressbar.md +48 -0
- package/llms/components/interfaces/sstat.md +79 -0
- package/llms/components/interfaces/sstatus.md +76 -0
- package/llms/components/interfaces/stag.md +70 -0
- package/llms/components/interfaces/stimeline.md +47 -0
- package/llms/components/interfaces/stoggle.md +120 -0
- package/llms/components/interfaces/stooltip.md +88 -0
- package/llms/components/template/scanvas.md +61 -0
- package/llms/components/template/smenu.md +88 -0
- package/llms/components/template/sverticalmenu.md +113 -0
- package/llms/llms.txt +49 -0
- package/package.json +37 -4
- package/dist/types/components/SDropdownMenu.d.ts +0 -39
- package/dist/types/components/SDropdownMenu.d.ts.map +0 -1
- package/dist/types/components/SHorizontalMenu.d.ts +0 -33
- package/dist/types/components/SHorizontalMenu.d.ts.map +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# SCopyText
|
|
2
|
+
|
|
3
|
+
Копируемый текст.
|
|
4
|
+
|
|
5
|
+
<SToggle title="В чем отличие от аналогов?">В популярных библиотеках элементов для Vue3 прямого аналога нет.</SToggle>
|
|
6
|
+
|
|
7
|
+
## Базовый пример
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<template>
|
|
11
|
+
<SCopyText>ABCD-EFGH-1234-5678</SCopyText>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script setup>
|
|
15
|
+
import { SCopyText } from 'startup-ui'
|
|
16
|
+
</script>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Внутристрочный пример
|
|
20
|
+
|
|
21
|
+
```vue
|
|
22
|
+
<template>
|
|
23
|
+
<SCopyText layout="inline">Секретный код для копирования</SCopyText> в обычном тексте.
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<script setup>
|
|
27
|
+
import { SCopyText } from 'startup-ui'
|
|
28
|
+
</script>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Копируем не то, что выводим
|
|
32
|
+
|
|
33
|
+
```vue
|
|
34
|
+
<template>
|
|
35
|
+
<SCopyText copytext="777">Секретный код: 777</SCopyText>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<script setup>
|
|
39
|
+
import { SCopyText } from 'startup-ui'
|
|
40
|
+
</script>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Интерфейс компонента
|
|
44
|
+
|
|
45
|
+
### Свойства (Props)
|
|
46
|
+
|
|
47
|
+
| Название | Тип | По умолчанию | Описание |
|
|
48
|
+
|----------|-----|--------------|----------|
|
|
49
|
+
| layout | `'input'` \| `'inline'` | `'input'` | Вид компонента. `'input'` — блок с рамкой, `'inline'` — текст с пунктирным подчёркиванием. |
|
|
50
|
+
| copytext | string | undefined | Строка, которая будет скопирована в буфер. Если не указана, копируется текст из слота. |
|
|
51
|
+
| size | `'small'` \| `'normal'` \| `'large'` | `'normal'` | Размер компонента. |
|
|
52
|
+
|
|
53
|
+
### Слоты (Slots)
|
|
54
|
+
|
|
55
|
+
| Название | Описание |
|
|
56
|
+
|----------|----------|
|
|
57
|
+
| default | Текстовое содержимое, отображаемое пользователю. |
|
|
58
|
+
|
|
59
|
+
<script setup lang="ts">
|
|
60
|
+
import SToggle from '../../../../packages/startup-ui/src/components/SToggle.vue';
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<style lang="scss">
|
|
64
|
+
.block .s-copytext {
|
|
65
|
+
max-width: 450px;
|
|
66
|
+
}
|
|
67
|
+
</style>
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# SDashboard > SDashboardItem
|
|
2
|
+
|
|
3
|
+
Дешборд блоков (как правило, удобно использовать для отчетов).
|
|
4
|
+
|
|
5
|
+
<SToggle title="В чем отличие от аналогов?">
|
|
6
|
+
В попурярных библиотеках компонентов для Vue3 прямого аналога нет.
|
|
7
|
+
</SToggle>
|
|
8
|
+
|
|
9
|
+
## Базовый пример
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<SDashboard>
|
|
14
|
+
<SDashboardItem title="Продажи">
|
|
15
|
+
Информация о продажах.
|
|
16
|
+
</SDashboardItem>
|
|
17
|
+
<SDashboardItem title="Списания за услуги">
|
|
18
|
+
Информация о стоимости услуг.
|
|
19
|
+
</SDashboardItem>
|
|
20
|
+
</SDashboard>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script setup>
|
|
24
|
+
import { SDashboard, SDashboardItem } from 'startup-ui'
|
|
25
|
+
</script>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Кастомный заголовок
|
|
29
|
+
|
|
30
|
+
Если текста не достаточно, то для заголовка можно использовать слот:
|
|
31
|
+
|
|
32
|
+
```vue
|
|
33
|
+
<SDashboard>
|
|
34
|
+
<SDashboardItem>
|
|
35
|
+
<template #title>
|
|
36
|
+
Продажи <STooltip>Только с подписанными актами</STooltip>
|
|
37
|
+
</template>
|
|
38
|
+
Информация о продажах.
|
|
39
|
+
</SDashboardItem>
|
|
40
|
+
</SDashboard>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Доп.элемент справа от заголовка
|
|
44
|
+
|
|
45
|
+
Справа от заголовка часто бывает сподручно разместить дополнительную ссылку или что-то ещё. Сделать это можно в слоте #extra:
|
|
46
|
+
|
|
47
|
+
```vue
|
|
48
|
+
<SDashboard>
|
|
49
|
+
<SDashboardItem title="Мой тариф">
|
|
50
|
+
<template #extra>
|
|
51
|
+
<a href="/docs/plans/">Как работают тарифы?</a>
|
|
52
|
+
</template>
|
|
53
|
+
Описание работы тарифов
|
|
54
|
+
</SDashboardItem>
|
|
55
|
+
</SDashboard>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Максимальная высота контента
|
|
59
|
+
|
|
60
|
+
Иногда динамически генерируемый контент внутри SDashboardItem может превращаться в длинную простыню. Чтобы не занимать большое пространство подобным блоком, такой контент можно ограничить по высоте, и в случае превышения в блоке появится свой внутренний горизонтальный скролл.
|
|
61
|
+
|
|
62
|
+
```vue
|
|
63
|
+
<template>
|
|
64
|
+
<SDashboard>
|
|
65
|
+
<SDashboardItem title="Регистрации пользователей" :max-content-height="300">
|
|
66
|
+
...
|
|
67
|
+
</SDashboardItem>
|
|
68
|
+
</SDashboard>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<script setup>
|
|
72
|
+
import { SDashboard, SDashboardItem } from 'startup-ui'
|
|
73
|
+
</script>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Цвета
|
|
77
|
+
|
|
78
|
+
По умолчанию блоки идут в самом светлом цвете акцента, но при необходимости можно использовать кастомные выделения цветом:
|
|
79
|
+
|
|
80
|
+
```vue
|
|
81
|
+
<template>
|
|
82
|
+
<SDashboard>
|
|
83
|
+
<SDashboardItem title="Обычный блок" />
|
|
84
|
+
<SDashboardItem gray title="Серый блок" />
|
|
85
|
+
<SDashboardItem green title="Зеленый блок" />
|
|
86
|
+
<SDashboardItem red title="Красный блок" />
|
|
87
|
+
</SDashboard>
|
|
88
|
+
</template>
|
|
89
|
+
|
|
90
|
+
<script setup>
|
|
91
|
+
import { SDashboard, SDashboardItem } from 'startup-ui'
|
|
92
|
+
</script>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Интерфейс компонента SDashboard
|
|
96
|
+
|
|
97
|
+
### Свойства (Props)
|
|
98
|
+
|
|
99
|
+
_Нет свойств. Это просто контейнер для обертки и автоматического позиционирования (flex/grid)._
|
|
100
|
+
|
|
101
|
+
## Интерфейс компонента SDashboardItem
|
|
102
|
+
|
|
103
|
+
### Свойства (Props)
|
|
104
|
+
|
|
105
|
+
| Название | Тип | По умолчанию | Описание |
|
|
106
|
+
|----------|-----|--------------|----------|
|
|
107
|
+
| title | string | undefined | Текстовый заголовок блока дашборда. |
|
|
108
|
+
| maxContentHeight | string \| number | undefined | Фиксированная максимальная высота контента (например, `300` или `'300px'`). При переполнении появится скролл. |
|
|
109
|
+
| gray | boolean | `false` | Применяет серый цвет фона. |
|
|
110
|
+
| green | boolean | `false` | Применяет светло-зеленый цвет фона. |
|
|
111
|
+
| red | boolean | `false` | Применяет светло-красный цвет фона. |
|
|
112
|
+
|
|
113
|
+
### Слоты (Slots)
|
|
114
|
+
|
|
115
|
+
| Название | Описание |
|
|
116
|
+
|----------|----------|
|
|
117
|
+
| default | Основное содержимое блока. |
|
|
118
|
+
| title | Заменяет строковый заголовок (`title`) на кастомный HTML/компоненты. |
|
|
119
|
+
| extra | Контейнер с правой стороны заголовка, полезен для ссылок или кнопок действий. |
|
|
120
|
+
|
|
121
|
+
<script setup lang="ts">
|
|
122
|
+
import SToggle from '../../../../packages/startup-ui/src/components/SToggle.vue';
|
|
123
|
+
</script>
|
|
124
|
+
|
|
125
|
+
<style lang="scss">
|
|
126
|
+
.s-dashboard {
|
|
127
|
+
color: var(--s-text);
|
|
128
|
+
margin-bottom: 0;
|
|
129
|
+
}
|
|
130
|
+
</style>
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# SDialog
|
|
2
|
+
|
|
3
|
+
Диалоговое окно.
|
|
4
|
+
|
|
5
|
+
## Базовый пример
|
|
6
|
+
|
|
7
|
+
```vue
|
|
8
|
+
<template>
|
|
9
|
+
<SDialog v-model="isShown" title="Войти в личный кабинет">
|
|
10
|
+
<SForm v-model="form" @submit.prevent="submit">
|
|
11
|
+
<SFormRow title="Логин" name="login">
|
|
12
|
+
<SInput />
|
|
13
|
+
</SFormRow>
|
|
14
|
+
<SFormRow title="Пароль" name="password">
|
|
15
|
+
<SInput type="password" />
|
|
16
|
+
</SFormRow>
|
|
17
|
+
<SButton>Войти</SButton>
|
|
18
|
+
</SForm>
|
|
19
|
+
</SDialog>
|
|
20
|
+
|
|
21
|
+
<SButton @click="isShown = true">Открыть окно</SButton>
|
|
22
|
+
</template>
|
|
23
|
+
<script setup>
|
|
24
|
+
import { ref } from 'vue'
|
|
25
|
+
|
|
26
|
+
const isShown = ref(false)
|
|
27
|
+
const form = ref({ login: '', password: '' })
|
|
28
|
+
|
|
29
|
+
function submit() {
|
|
30
|
+
isShown.value = false
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Фиксированная ширина
|
|
36
|
+
|
|
37
|
+
```vue
|
|
38
|
+
<template>
|
|
39
|
+
<SDialog v-model="isShown" title="Войти в личный кабинет" width="500px">
|
|
40
|
+
<SForm v-model="form" @submit.prevent="submit">
|
|
41
|
+
<SFormRow title="Логин" name="login">
|
|
42
|
+
<SInput />
|
|
43
|
+
</SFormRow>
|
|
44
|
+
<SFormRow title="Пароль" name="password">
|
|
45
|
+
<SInput type="password" />
|
|
46
|
+
</SFormRow>
|
|
47
|
+
<SButton>Войти</SButton>
|
|
48
|
+
</SForm>
|
|
49
|
+
</SDialog>
|
|
50
|
+
|
|
51
|
+
<SButton @click="isShown = true">Открыть окно</SButton>
|
|
52
|
+
</template>
|
|
53
|
+
<script setup>
|
|
54
|
+
import { ref } from 'vue'
|
|
55
|
+
|
|
56
|
+
const isShown = ref(false)
|
|
57
|
+
const form = ref({ login: '', password: '' })
|
|
58
|
+
|
|
59
|
+
function submit() {
|
|
60
|
+
isShown.value = false
|
|
61
|
+
}
|
|
62
|
+
</script>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Не-модальное окно
|
|
66
|
+
|
|
67
|
+
По умолчанию окно модальное (нельзя взаимодействовать с другими объектами при открытом окне). Но если нужно отключить модальность, это можно сделать вот так:
|
|
68
|
+
|
|
69
|
+
```vue
|
|
70
|
+
<template>
|
|
71
|
+
<SDialog v-model="isShown" title="Войти в личный кабинет" not-modal>
|
|
72
|
+
<SForm v-model="form" @submit.prevent="submit">
|
|
73
|
+
<SFormRow title="Логин" name="login">
|
|
74
|
+
<SInput />
|
|
75
|
+
</SFormRow>
|
|
76
|
+
<SFormRow title="Пароль" name="password">
|
|
77
|
+
<SInput type="password" />
|
|
78
|
+
</SFormRow>
|
|
79
|
+
<SButton>Войти</SButton>
|
|
80
|
+
</SForm>
|
|
81
|
+
</SDialog>
|
|
82
|
+
|
|
83
|
+
<SButton @click="isShown = true">Открыть окно</SButton>
|
|
84
|
+
</template>
|
|
85
|
+
<script setup>
|
|
86
|
+
import { ref } from 'vue'
|
|
87
|
+
|
|
88
|
+
const isShown = ref(false)
|
|
89
|
+
const form = ref({ login: '', password: '' })
|
|
90
|
+
|
|
91
|
+
function submit() {
|
|
92
|
+
isShown.value = false
|
|
93
|
+
}
|
|
94
|
+
</script>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Не закрывать по клику на оверлей
|
|
98
|
+
|
|
99
|
+
По умолчанию при клике на оверлей окно закрывается, если надо перехватывать-останавливать событие, то:
|
|
100
|
+
|
|
101
|
+
```vue
|
|
102
|
+
<template>
|
|
103
|
+
<SDialog v-model="isShown" title="Войти в личный кабинет" @overlay-click.stop.prevent>
|
|
104
|
+
<SForm v-model="form" @submit.prevent="submit">
|
|
105
|
+
<SFormRow title="Логин" name="login">
|
|
106
|
+
<SInput />
|
|
107
|
+
</SFormRow>
|
|
108
|
+
<SFormRow title="Пароль" name="password">
|
|
109
|
+
<SInput type="password" />
|
|
110
|
+
</SFormRow>
|
|
111
|
+
<SButton>Войти</SButton>
|
|
112
|
+
</SForm>
|
|
113
|
+
</SDialog>
|
|
114
|
+
|
|
115
|
+
<SButton @click="isShown = true">Открыть окно</SButton>
|
|
116
|
+
</template>
|
|
117
|
+
<script setup>
|
|
118
|
+
import { ref } from 'vue'
|
|
119
|
+
|
|
120
|
+
const isShown = ref(false)
|
|
121
|
+
const form = ref({ login: '', password: '' })
|
|
122
|
+
|
|
123
|
+
function submit() {
|
|
124
|
+
isShown.value = false
|
|
125
|
+
}
|
|
126
|
+
</script>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Интерфейс компонента
|
|
130
|
+
|
|
131
|
+
### Свойства (Props)
|
|
132
|
+
|
|
133
|
+
| Название | Тип | По умолчанию | Описание |
|
|
134
|
+
|----------|-----|--------------|----------|
|
|
135
|
+
| modelValue (v-model) | boolean | false | Управляет видимостью диалога. |
|
|
136
|
+
| title | string | undefined | Текст заголовка в шапке окна. |
|
|
137
|
+
| width | string | undefined | Кастомная ширина окна (например, `'500px'`, `'80vw'`). |
|
|
138
|
+
| notModal | boolean | false | Если `true`, убирает фоновый оверлей (не-модальное окно). |
|
|
139
|
+
|
|
140
|
+
### События (Events)
|
|
141
|
+
|
|
142
|
+
| Название | Параметры | Описание |
|
|
143
|
+
|----------|-----------|----------|
|
|
144
|
+
| update:modelValue | boolean | Срабатывает при изменении v-model. |
|
|
145
|
+
| overlay-click | — | Срабатывает при клике на фоновый оверлей. Окно закрывается, если не предотвращено (`.stop.prevent`). |
|
|
146
|
+
| hide | — | Срабатывает при закрытии окна (крестиком или кликом на оверлей). |
|
|
147
|
+
|
|
148
|
+
### Слоты (Slots)
|
|
149
|
+
|
|
150
|
+
| Название | Описание |
|
|
151
|
+
|----------|----------|
|
|
152
|
+
| default | Основное содержимое диалогового окна. |
|
|
153
|
+
|
|
154
|
+
<style lang="scss">
|
|
155
|
+
.s-dialog {
|
|
156
|
+
color: var(--s-text);
|
|
157
|
+
}
|
|
158
|
+
</style>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# SImagePreview
|
|
2
|
+
|
|
3
|
+
Картинка, которую можно посмотреть более детально в диалоговом окне.
|
|
4
|
+
|
|
5
|
+
## Базовый пример
|
|
6
|
+
|
|
7
|
+
Выводим картинку, которая увеличивается при клике.
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<template>
|
|
11
|
+
<div class="preview-container">
|
|
12
|
+
<SImagePreview src="/animals.webp" />
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script setup>
|
|
17
|
+
import { SImagePreview } from 'startup-ui'
|
|
18
|
+
</script>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Кастомное превью
|
|
22
|
+
|
|
23
|
+
Если первоначально до клика показывается другое изображение (напр.меньшего размера), то используем атрибут preview:
|
|
24
|
+
|
|
25
|
+
```vue
|
|
26
|
+
<template>
|
|
27
|
+
<div class="preview-container">
|
|
28
|
+
<SImagePreview preview="/nature.jpg" src="/animals.webp" />
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<script setup>
|
|
33
|
+
import { SImagePreview } from 'startup-ui'
|
|
34
|
+
</script>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Если нужно вставить кастомный контент, используем слот "preview":
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<div class="preview-container">
|
|
41
|
+
<SImagePreview src="/animals.webp">
|
|
42
|
+
<template #preview>
|
|
43
|
+
<img src="/nature.jpg" />
|
|
44
|
+
</template>
|
|
45
|
+
</SImagePreview>
|
|
46
|
+
</div>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Кастомная иконка увеличения
|
|
50
|
+
|
|
51
|
+
В icon-атрибуте указываем название иконки:
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<template>
|
|
55
|
+
<div class="preview-container">
|
|
56
|
+
<SImagePreview src="/animals.webp" icon="magnifying-glass-plus" />
|
|
57
|
+
</div>
|
|
58
|
+
</template>
|
|
59
|
+
|
|
60
|
+
<script setup>
|
|
61
|
+
import { SImagePreview } from 'startup-ui'
|
|
62
|
+
</script>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Если нужно вставить кастомный контент, используем слот "icon":
|
|
66
|
+
|
|
67
|
+
```vue
|
|
68
|
+
<div class="preview-container">
|
|
69
|
+
<SImagePreview src="/animals.webp" icon="magnifying-glass-plus">
|
|
70
|
+
<template #icon>
|
|
71
|
+
🔍
|
|
72
|
+
</template>
|
|
73
|
+
</SImagePreview>
|
|
74
|
+
</div>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Интерфейс компонента
|
|
78
|
+
|
|
79
|
+
### Свойства (Props)
|
|
80
|
+
|
|
81
|
+
| Название | Тип | По умолчанию | Описание |
|
|
82
|
+
|----------|-----|--------------|----------|
|
|
83
|
+
| src | string | undefined | URL полноразмерного изображения, показываемого в модальном окне. |
|
|
84
|
+
| preview | string | undefined | URL миниатюры. Если не указан, используется `src`. |
|
|
85
|
+
| icon | string \| string[] | `'magnifying-glass'` | Имя иконки FontAwesome для оверлея при наведении. |
|
|
86
|
+
|
|
87
|
+
### Слоты (Slots)
|
|
88
|
+
|
|
89
|
+
| Название | Описание |
|
|
90
|
+
|----------|----------|
|
|
91
|
+
| preview | Полностью заменяет стандартный элемент `<img>` миниатюры. |
|
|
92
|
+
| icon | Заменяет иконку увеличения, появляющуюся при наведении. |
|
|
93
|
+
|
|
94
|
+
<style lang="scss">
|
|
95
|
+
.preview-container {
|
|
96
|
+
max-width: 200px;
|
|
97
|
+
}
|
|
98
|
+
</style>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# SNote
|
|
2
|
+
|
|
3
|
+
Текстовая заметка.
|
|
4
|
+
|
|
5
|
+
<SToggle title="В чем отличие от аналогов?">
|
|
6
|
+
<p>В отличие от популярных библиотек компонентов для Vue3:</p>
|
|
7
|
+
<ol>
|
|
8
|
+
<li>Привязка к FontAwesome, который бесплатен и оптимально решает задачи иконок для стартапов.</li>
|
|
9
|
+
</ol>
|
|
10
|
+
</SToggle>
|
|
11
|
+
|
|
12
|
+
## Базовый пример
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<template>
|
|
16
|
+
<SNote>Стандартный стиль (основной цвет)</SNote>
|
|
17
|
+
<SNote gray>В сером цвете</SNote>
|
|
18
|
+
<SNote attention>Привлечение внимания</SNote>
|
|
19
|
+
<SNote success>Успешное действие</SNote>
|
|
20
|
+
<SNote error>Описание ошибки</SNote>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script setup>
|
|
24
|
+
import { SNote } from 'startup-ui'
|
|
25
|
+
</script>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## С иконкой и заголовком
|
|
29
|
+
|
|
30
|
+
```vue
|
|
31
|
+
<template>
|
|
32
|
+
<SNote icon="circle-info" title="В проекте ещё нет ключевиков">
|
|
33
|
+
<ol>
|
|
34
|
+
<li>Добавьте как можно больше запросов, заходы по которым из поиска приносят вам наибольший доход.</li>
|
|
35
|
+
<li>Сервис оценит конкуренцию, шанс выхода в топ и бюджет по каждому ключевику.</li>
|
|
36
|
+
</ol>
|
|
37
|
+
</SNote>
|
|
38
|
+
</template>
|
|
39
|
+
|
|
40
|
+
<script setup>
|
|
41
|
+
import { SNote } from 'startup-ui'
|
|
42
|
+
</script>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
В качестве иконок используются названия иконок font-awesome.
|
|
46
|
+
|
|
47
|
+
## Интерфейс компонента
|
|
48
|
+
|
|
49
|
+
### Свойства (Props)
|
|
50
|
+
|
|
51
|
+
| Название | Тип | По умолчанию | Описание |
|
|
52
|
+
|----------|-----|--------------|----------|
|
|
53
|
+
| icon | string \| string[] | undefined | Имя иконки FontAwesome для отображения рядом с заголовком |
|
|
54
|
+
| title | string | undefined | Текст заголовка, отображаемый сверху заметки |
|
|
55
|
+
| gray | boolean | false | Стилизует заметку с серым (нейтральным) фоном |
|
|
56
|
+
| attention | boolean | false | Стилизует заметку с желтым фоном (для предупреждений/внимания) |
|
|
57
|
+
| success | boolean | false | Стилизует заметку с зеленым фоном (для сообщений об успехе) |
|
|
58
|
+
| error | boolean | false | Стилизует заметку с красным фоном и границей (для ошибок) |
|
|
59
|
+
|
|
60
|
+
### Слоты (Slots)
|
|
61
|
+
|
|
62
|
+
| Название | Описание |
|
|
63
|
+
|----------|----------|
|
|
64
|
+
| default | Основное содержимое заметки. Поддерживает текст или HTML (абзацы, списки и т.д.) |
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SProgressBar
|
|
2
|
+
|
|
3
|
+
Полоска прогресса.
|
|
4
|
+
|
|
5
|
+
<SToggle title="В чем отличие от аналогов?">
|
|
6
|
+
<p>В отличие от популярных библиотек компонентов для Vue3:</p>
|
|
7
|
+
<ol>
|
|
8
|
+
<li>Есть лейбл-пояснение, формирующий ожидание пользователей, упрощенный до одного атрибута.</li>
|
|
9
|
+
</ol>
|
|
10
|
+
</SToggle>
|
|
11
|
+
|
|
12
|
+
## Базовый пример
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<template>
|
|
16
|
+
<SProgressBar :percentage="readyPercentage">Обновляем проект...</SProgressBar>
|
|
17
|
+
</template>
|
|
18
|
+
<script setup>
|
|
19
|
+
import { ref } from 'vue'
|
|
20
|
+
import { SProgressBar } from 'startup-ui'
|
|
21
|
+
|
|
22
|
+
const readyPercentage = ref(50)
|
|
23
|
+
</script>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Интерфейс компонента
|
|
27
|
+
|
|
28
|
+
### Свойства (Props)
|
|
29
|
+
|
|
30
|
+
| Название | Тип | По умолчанию | Описание |
|
|
31
|
+
|----------|-----|--------------|----------|
|
|
32
|
+
| percentage | number | undefined | Обязательный. Текущее значение прогресса от 0 до 100. |
|
|
33
|
+
|
|
34
|
+
### Слоты (Slots)
|
|
35
|
+
|
|
36
|
+
| Название | Описание |
|
|
37
|
+
|----------|----------|
|
|
38
|
+
| default | Текстовая метка, отображаемая рядом с полосой прогресса (например, «Обновляем проект...»). |
|
|
39
|
+
|
|
40
|
+
<script setup lang="ts">
|
|
41
|
+
import SToggle from '../../../../packages/startup-ui/src/components/SToggle.vue';
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<style lang="scss">
|
|
45
|
+
.s-progressbar {
|
|
46
|
+
color: var(--s-text);
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# SStat
|
|
2
|
+
|
|
3
|
+
Строка статистики, выровненная по заголовкам.
|
|
4
|
+
|
|
5
|
+
<SToggle title="В чем отличие от аналогов?">В популярных библиотеках компонентов для Vue3 прямого аналога нет.</SToggle>
|
|
6
|
+
|
|
7
|
+
## Базовый пример
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<template>
|
|
11
|
+
<SStat title="Кол-во платежей">112</SStat>
|
|
12
|
+
<SStat title="Сумма платежей">777 000 ₽</SStat>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script setup>
|
|
16
|
+
import { SStat } from 'startup-ui'
|
|
17
|
+
</script>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Кастомный заголовок
|
|
21
|
+
|
|
22
|
+
```vue
|
|
23
|
+
<SStat>
|
|
24
|
+
<template #title>
|
|
25
|
+
Сумма платежей <STooltip>За выбранный период</STooltip>
|
|
26
|
+
</template>
|
|
27
|
+
777 000 ₽
|
|
28
|
+
</SStat>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Модификаторы
|
|
32
|
+
|
|
33
|
+
С помощью логических (boolean) свойств можно изменить внешний вид строки:
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<template>
|
|
37
|
+
<!-- large — крупный текст значения -->
|
|
38
|
+
<SStat title="Выручка" large>777 000 ₽</SStat>
|
|
39
|
+
|
|
40
|
+
<!-- nowrap запрещает перенос текста, обрезая его многоточием -->
|
|
41
|
+
<SStat title="Описание" nowrap>Очень длинное описание, которое может не поместиться...</SStat>
|
|
42
|
+
|
|
43
|
+
<!-- wide выравнивает заголовок и значение по краям (space-between) -->
|
|
44
|
+
<SStat title="Элементы" wide>10</SStat>
|
|
45
|
+
</template>
|
|
46
|
+
|
|
47
|
+
<script setup>
|
|
48
|
+
import { SStat } from 'startup-ui'
|
|
49
|
+
</script>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Интерфейс компонента
|
|
53
|
+
|
|
54
|
+
### Свойства (Props)
|
|
55
|
+
|
|
56
|
+
| Название | Тип | По умолчанию | Описание |
|
|
57
|
+
|----------|-----|--------------|----------|
|
|
58
|
+
| title | string | undefined | Подпись для статистики. |
|
|
59
|
+
| value | string \| number | undefined | Альтернатива базовому слоту: передает значение статистики через атрибут. |
|
|
60
|
+
| nowrap | boolean | `false` | Запрещает перенос текста и использует многоточие для длинных значений. |
|
|
61
|
+
| large | boolean | `false` | Увеличивает размер шрифта и высоту строки для значения. |
|
|
62
|
+
| wide | boolean | `false` | Использует `justify-content: space-between`, чтобы прижать значение к правому краю. |
|
|
63
|
+
|
|
64
|
+
### Слоты (Slots)
|
|
65
|
+
|
|
66
|
+
| Название | Описание |
|
|
67
|
+
|----------|----------|
|
|
68
|
+
| default | Основное содержимое для значения статистики. Имеет приоритет над атрибутом `value`. |
|
|
69
|
+
| title | Для кастомного заголовка (например, с иконками или тултипами). Имеет приоритет над атрибутом `title`. |
|
|
70
|
+
|
|
71
|
+
<script setup lang="ts">
|
|
72
|
+
import SToggle from '../../../../packages/startup-ui/src/components/SToggle.vue';
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<style lang="scss" scoped>
|
|
76
|
+
.s-stat {
|
|
77
|
+
margin: 0;
|
|
78
|
+
}
|
|
79
|
+
</style>
|