dxd-style-code 0.1.11 → 0.1.13
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/dxd-style-code.js +7470 -6336
- package/dist/dxd-style-code.umd.cjs +3 -3
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/components/atoms/DX/DX.stories.js +265 -0
- package/src/components/atoms/DX/DX.vue +80 -0
- package/src/components/atoms/DX/index.js +2 -0
- package/src/components/atoms/DXAvatar/DXAvatar.stories.js +1 -2
- package/src/components/atoms/DXBackdrop/DXBackdrop.stories.js +77 -1
- package/src/components/atoms/DXBadge/DXBadge.stories.js +83 -1
- package/src/components/atoms/DXBlockquote/DXBlockquote.stories.js +67 -1
- package/src/components/atoms/DXBox/DXBox.stories.js +1 -1
- package/src/components/atoms/DXBox/DXBox.vue +69 -2
- package/src/components/atoms/DXButton/DXButton.stories.js +94 -1
- package/src/components/atoms/DXButton/DXButton.vue +145 -11
- package/src/components/atoms/DXCard/DXCard.stories.js +72 -14
- package/src/components/atoms/DXCard/DXCard.vue +3 -4
- package/src/components/atoms/DXCheckbox/DXCheckbox.stories.js +85 -1
- package/src/components/atoms/DXCode/DXCode.stories.js +67 -1
- package/src/components/atoms/DXContainer/DXContainer.stories.js +1 -1
- package/src/components/atoms/DXContainer/DXContainer.vue +28 -1
- package/src/components/atoms/DXDivider/DXDivider.stories.js +84 -1
- package/src/components/atoms/DXFlex/DXFlex.stories.js +1 -1
- package/src/components/atoms/DXFlex/DXFlex.vue +57 -3
- package/src/components/atoms/DXFormLabel/DXFormLabel.stories.js +70 -1
- package/src/components/atoms/DXGrid/DXGrid.stories.js +1 -1
- package/src/components/atoms/DXHeading/DXHeading.stories.js +90 -1
- package/src/components/atoms/DXIcon/DXIcon.stories.js +74 -0
- package/src/components/atoms/DXIconWrapper/DXIconWrapper.stories.js +69 -0
- package/src/components/atoms/DXImage/DXImage.stories.js +483 -0
- package/src/components/atoms/DXImage/DXImage.vue +294 -0
- package/src/components/atoms/DXImage/index.js +2 -0
- package/src/components/atoms/DXInputAddon/DXInputAddon.stories.js +86 -1
- package/src/components/atoms/DXLabel/DXLabel.stories.js +62 -1
- package/src/components/atoms/DXLink/DXLink.stories.js +75 -10
- package/src/components/atoms/DXLink/DXLink.vue +59 -3
- package/src/components/atoms/DXList/DXList.stories.js +76 -1
- package/src/components/atoms/DXLoader/DXLoader.stories.js +75 -1
- package/src/components/atoms/DXNav/DXNav.stories.js +236 -0
- package/src/components/atoms/DXNav/DXNav.vue +114 -0
- package/src/components/atoms/DXNav/index.js +2 -0
- package/src/components/atoms/DXProgress/DXProgress.stories.js +76 -1
- package/src/components/atoms/DXRadio/DXRadio.stories.js +85 -1
- package/src/components/atoms/DXSkeleton/DXSkeleton.stories.js +59 -1
- package/src/components/atoms/DXSlider/DXSlider.stories.js +89 -0
- package/src/components/atoms/DXSpacer/DXSpacer.stories.js +1 -1
- package/src/components/atoms/DXStack/DXStack.stories.js +1 -1
- package/src/components/atoms/DXStack/DXStack.vue +5 -2
- package/src/components/atoms/DXTags/DXTags.stories.js +77 -0
- package/src/components/atoms/DXText/DXText.stories.js +83 -1
- package/src/components/atoms/DXToast/DXToast.stories.js +64 -1
- package/src/components/atoms/DXToggle/DXToggle.stories.js +84 -1
- package/src/components/atoms/DXToggleButton/DXToggleButton.stories.js +78 -1
- package/src/components/atoms/DXTooltip/DXTooltip.stories.js +98 -1
- package/src/components/atoms/index.js +3 -0
- package/src/components/molecules/DXActionButtons/DXActionButtons.stories.js +280 -77
- package/src/components/molecules/DXActionButtons/DXActionButtons.vue +31 -31
- package/src/components/molecules/DXAlert/DXAlert.stories.js +199 -1
- package/src/components/molecules/DXAlert/DXAlert.vue +35 -13
- package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.stories.js +125 -1
- package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.vue +22 -18
- package/src/components/molecules/DXButtonGroup/DXButtonGroup.stories.js +193 -6
- package/src/components/molecules/DXButtonGroup/DXButtonGroup.vue +39 -3
- package/src/components/molecules/DXCloseButton/DXCloseButton.stories.js +64 -1
- package/src/components/molecules/DXComboBox/DXComboBox.stories.js +66 -0
- package/src/components/molecules/DXCopyField/DXCopyField.stories.js +128 -1
- package/src/components/molecules/DXCopyField/DXCopyField.vue +60 -7
- package/src/components/molecules/DXDataFilter/DXDataFilter.vue +8 -6
- package/src/components/molecules/DXDatePicker/DXDatePicker.stories.js +58 -0
- package/src/components/molecules/DXFileUpload/DXFileUpload.stories.js +66 -0
- package/src/components/molecules/DXFilterGroup/DXFilterGroup.stories.js +61 -0
- package/src/components/molecules/DXFormControl/DXFormControl.stories.js +76 -0
- package/src/components/molecules/DXFormControl/DXFormControl.vue +9 -8
- package/src/components/molecules/DXInput/DXInput.stories.js +100 -1
- package/src/components/molecules/DXInputGroup/DXInputGroup.stories.js +89 -1
- package/src/components/molecules/DXInputMask/DXInputMask.stories.js +67 -0
- package/src/components/molecules/DXMenu/DXMenu.stories.js +111 -4
- package/src/components/molecules/DXMenu/DXMenu.vue +18 -5
- package/src/components/molecules/DXMenu/README.md +1 -1
- package/src/components/molecules/DXPagination/DXPagination.stories.js +105 -2
- package/src/components/molecules/DXPagination/DXPagination.vue +18 -33
- package/src/components/molecules/DXPasswordInput/DXPasswordInput.stories.js +67 -1
- package/src/components/molecules/DXRadioCard/DXRadioCard.stories.js +64 -0
- package/src/components/molecules/DXRadioGroup/DXRadioGroup.stories.js +84 -0
- package/src/components/molecules/DXRating/DXRating.stories.js +3 -2
- package/src/components/molecules/DXSearchBar/DXSearchBar.stories.js +1 -1
- package/src/components/molecules/DXSearchBar/DXSearchBar.vue +16 -12
- package/src/components/molecules/DXSearchSelect/DXSearchSelect.stories.js +71 -0
- package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.stories.js +74 -0
- package/src/components/molecules/DXSelect/DXSelect.stories.js +92 -1
- package/src/components/molecules/DXStatCard/DXStatCard.stories.js +1 -1
- package/src/components/molecules/DXStatCard/DXStatCard.vue +30 -26
- package/src/components/molecules/DXTableFiltersPanel/index.js +3 -0
- package/src/components/molecules/DXTablePagination/DXTablePagination.stories.js +67 -0
- package/src/components/molecules/DXTableToolbar/DXTableToolbar.stories.js +71 -0
- package/src/components/molecules/DXTextarea/DXTextarea.stories.js +87 -1
- package/src/components/molecules/DXTimePicker/DXTimePicker.stories.js +1 -1
- package/src/components/molecules/DXValidationIcon/DXValidationIcon.stories.js +59 -1
- package/src/components/molecules/index.js +0 -1
- package/src/components/organisms/DXAccordion/DXAccordion.stories.js +75 -0
- package/src/components/organisms/DXAppLayout/DXAppLayout.stories.js +27 -25
- package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.stories.js +0 -2
- package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.vue +5 -8
- package/src/components/{molecules → organisms}/DXBaseTable/DXBaseTable.stories.js +78 -1
- package/src/components/{molecules → organisms}/DXBaseTable/DXBaseTable.vue +2 -2
- package/src/components/organisms/DXChartContainer/DXChartContainer.stories.js +1 -1
- package/src/components/organisms/DXChartContainer/DXChartContainer.vue +10 -6
- package/src/components/organisms/DXChatInterface/DXChatInterface.stories.js +1 -1
- package/src/components/organisms/DXChatInterface/DXChatInterface.vue +6 -4
- package/src/components/organisms/DXCommentSection/DXCommentSection.stories.js +1 -1
- package/src/components/organisms/DXCommentSection/DXCommentSection.vue +7 -6
- package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.stories.js +1 -1
- package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.vue +4 -2
- package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.stories.js +1 -1
- package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.vue +3 -2
- package/src/components/organisms/DXDataTable/DXDataTable.stories.js +1 -1
- package/src/components/organisms/DXDropdown/DXDropdown.stories.js +84 -1
- package/src/components/organisms/DXEmptyState/DXEmptyState.stories.js +64 -0
- package/src/components/organisms/DXEmptyState/DXEmptyState.vue +4 -2
- package/src/components/organisms/DXHeaderBar/DXHeaderBar.stories.js +409 -3
- package/src/components/organisms/DXHeaderBar/DXHeaderBar.vue +261 -52
- package/src/components/organisms/DXMediaGallery/DXMediaGallery.stories.js +1 -1
- package/src/components/organisms/DXMediaGallery/DXMediaGallery.vue +6 -4
- package/src/components/organisms/DXModal/DXModal.stories.js +93 -1
- package/src/components/organisms/DXModal/DXModal.vue +3 -2
- package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.stories.js +1 -1
- package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.vue +2 -1
- package/src/components/organisms/DXReportGenerator/DXReportGenerator.vue +4 -3
- package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.vue +11 -8
- package/src/components/organisms/DXSidebar/DXSidebar.stories.js +1 -1
- package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.stories.js +104 -1
- package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.vue +14 -4
- package/src/components/organisms/DXSidebarMenu/README.md +3 -3
- package/src/components/organisms/DXTable/DXTable.stories.js +138 -11
- package/src/components/organisms/DXTable/DXTable.vue +1 -1
- package/src/components/organisms/DXTabs/DXTabs.stories.js +91 -1
- package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.stories.js +1 -1
- package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.vue +20 -18
- package/src/components/organisms/index.js +1 -0
- package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.stories.js +1 -1
- package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.stories.js +1 -1
- package/src/components/utilities/DXObserver/DXObserver.stories.js +1 -1
- package/src/components/utilities/DXPortal/DXPortal.stories.js +1 -1
- package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.stories.js +2 -2
- package/src/components/utilities/DXThemeProvider/DXThemeProvider.stories.js +1 -1
- package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.stories.js +1 -1
- package/src/composables/useSize.js +8 -1
- /package/src/components/{molecules → organisms}/DXBaseTable/index.js +0 -0
|
@@ -3,9 +3,86 @@ import DXBaseTable from './DXBaseTable.vue';
|
|
|
3
3
|
import DXBadge from '../../atoms/DXBadge/DXBadge.vue';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
title: '
|
|
6
|
+
title: 'Organisms/DXBaseTable',
|
|
7
7
|
component: DXBaseTable,
|
|
8
8
|
tags: ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: `
|
|
13
|
+
# DXBaseTable
|
|
14
|
+
|
|
15
|
+
Базовая таблица данных с поддержкой сортировки, кастомных ячеек и различных вариантов оформления.
|
|
16
|
+
|
|
17
|
+
## Назначение
|
|
18
|
+
|
|
19
|
+
DXBaseTable предоставляет базовую функциональность таблицы данных без расширенных функций
|
|
20
|
+
(фильтрация, пагинация, выбор). Используется как основа для DXTable или для простых таблиц,
|
|
21
|
+
требующих только сортировку и кастомное отображение ячеек.
|
|
22
|
+
|
|
23
|
+
## Архитектура
|
|
24
|
+
|
|
25
|
+
### Использует
|
|
26
|
+
- Нативные HTML таблицы (\`<table>\`, \`<thead>\`, \`<tbody>\`, \`<tr>\`, \`<td>\`, \`<th>\`)
|
|
27
|
+
- \`useClassComposition\` composable - для стилей
|
|
28
|
+
|
|
29
|
+
### Используется в
|
|
30
|
+
- \`DXTable\` - как базовая таблица
|
|
31
|
+
- Простые таблицы данных
|
|
32
|
+
- Таблицы без расширенных функций
|
|
33
|
+
|
|
34
|
+
## Внутренняя логика
|
|
35
|
+
|
|
36
|
+
### Структура колонок
|
|
37
|
+
Колонки определяются через массив объектов:
|
|
38
|
+
\`\`\`
|
|
39
|
+
[{
|
|
40
|
+
key: 'id',
|
|
41
|
+
label: 'ID',
|
|
42
|
+
sortable?: true,
|
|
43
|
+
width?: '80px',
|
|
44
|
+
align?: 'left' | 'center' | 'right'
|
|
45
|
+
}]
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
### Сортировка
|
|
49
|
+
При \`sortable={true}\` в колонке:
|
|
50
|
+
- Отображается иконка сортировки в заголовке
|
|
51
|
+
- При клике эмитится событие \`sort\` с информацией о колонке и направлении
|
|
52
|
+
- Сортировка должна обрабатываться родительским компонентом
|
|
53
|
+
|
|
54
|
+
### Кастомные ячейки
|
|
55
|
+
Можно использовать named slots для кастомного отображения ячеек:
|
|
56
|
+
- \`cell-{key}\` - кастомная ячейка для колонки (например, \`cell-status\`)
|
|
57
|
+
- \`header-{key}\` - кастомный заголовок для колонки
|
|
58
|
+
|
|
59
|
+
### Выравнивание
|
|
60
|
+
Каждая колонка может иметь свое выравнивание:
|
|
61
|
+
- **left** (по умолчанию) - по левому краю
|
|
62
|
+
- **center** - по центру
|
|
63
|
+
- **right** - по правому краю
|
|
64
|
+
|
|
65
|
+
### Ширина колонок
|
|
66
|
+
Можно указать фиксированную ширину колонки через \`width\` prop.
|
|
67
|
+
|
|
68
|
+
## Особенности
|
|
69
|
+
|
|
70
|
+
### События
|
|
71
|
+
- \`@sort\` - эмитится при клике на сортируемую колонку, передает \`{ column, direction }\`
|
|
72
|
+
|
|
73
|
+
### Варианты оформления
|
|
74
|
+
Поддерживает различные варианты оформления:
|
|
75
|
+
- **default** - стандартное оформление
|
|
76
|
+
- **bordered** - с рамками
|
|
77
|
+
- **striped** - с чередующимися строками
|
|
78
|
+
|
|
79
|
+
### Слоты
|
|
80
|
+
- **cell-{key}** - кастомная ячейка для колонки
|
|
81
|
+
- **header-{key}** - кастомный заголовок для колонки
|
|
82
|
+
`,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
9
86
|
};
|
|
10
87
|
|
|
11
88
|
// Sample data
|
|
@@ -254,9 +254,9 @@ import {
|
|
|
254
254
|
// Components
|
|
255
255
|
import DXIcon from '../../atoms/DXIcon/DXIcon.vue';
|
|
256
256
|
import DXCheckbox from '../../atoms/DXCheckbox/DXCheckbox.vue';
|
|
257
|
-
import DXDropdown from '
|
|
257
|
+
import DXDropdown from '../DXDropdown/DXDropdown.vue';
|
|
258
258
|
import DXDropdownItem from '../../atoms/DXDropdownItem/DXDropdownItem.vue';
|
|
259
|
-
import DXDropdownDivider from '
|
|
259
|
+
import DXDropdownDivider from '../../molecules/DXDropdownDivider/DXDropdownDivider.vue';
|
|
260
260
|
import DXLoader from '../../atoms/DXLoader/DXLoader.vue';
|
|
261
261
|
import DXSearchSelect from '../../molecules/DXSearchSelect/DXSearchSelect.vue';
|
|
262
262
|
|
|
@@ -6,7 +6,7 @@ import DXSelect from '../../molecules/DXSelect/DXSelect.vue';
|
|
|
6
6
|
export default {
|
|
7
7
|
title: 'Organisms/DXChartContainer',
|
|
8
8
|
component: DXChartContainer,
|
|
9
|
-
tags: ['autodocs'],
|
|
9
|
+
tags: ['autodocs', 'category:data-display'],
|
|
10
10
|
parameters: {
|
|
11
11
|
docs: {
|
|
12
12
|
description: {
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
<!-- Заголовок -->
|
|
10
10
|
<div v-if="title || $slots.header" :class="headerClasses">
|
|
11
11
|
<slot name="header">
|
|
12
|
-
<
|
|
12
|
+
<DXHeading v-if="title" level="3" size="lg" weight="semibold" color="default">
|
|
13
13
|
{{ title }}
|
|
14
|
-
</
|
|
14
|
+
</DXHeading>
|
|
15
15
|
</slot>
|
|
16
16
|
</div>
|
|
17
17
|
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
<div :class="chartClasses" :style="chartStyles">
|
|
35
35
|
<slot name="chart">
|
|
36
36
|
<div class="flex items-center justify-center h-full text-slate-400">
|
|
37
|
-
<p
|
|
37
|
+
<DXText tag="p" size="sm">Используйте slot "chart" для вашей библиотеки графиков</DXText>
|
|
38
38
|
</div>
|
|
39
39
|
</slot>
|
|
40
40
|
</div>
|
|
@@ -56,14 +56,16 @@
|
|
|
56
56
|
{ 'opacity-50': !item.visible },
|
|
57
57
|
]"
|
|
58
58
|
></div>
|
|
59
|
-
<
|
|
59
|
+
<DXText
|
|
60
|
+
tag="span"
|
|
61
|
+
size="sm"
|
|
62
|
+
color="default"
|
|
60
63
|
:class="[
|
|
61
|
-
'text-sm text-slate-700',
|
|
62
64
|
{ 'line-through opacity-50': !item.visible },
|
|
63
65
|
]"
|
|
64
66
|
>
|
|
65
67
|
{{ item.label }}
|
|
66
|
-
</
|
|
68
|
+
</DXText>
|
|
67
69
|
</div>
|
|
68
70
|
</div>
|
|
69
71
|
</slot>
|
|
@@ -77,6 +79,8 @@ import { useClassComposition } from "../../../composables/useClassComposition";
|
|
|
77
79
|
import { useSpacing } from "../../../composables/useSpacing";
|
|
78
80
|
import DXCard from "../../atoms/DXCard/DXCard.vue";
|
|
79
81
|
import DXSelect from "../../molecules/DXSelect/DXSelect.vue";
|
|
82
|
+
import DXHeading from "../../atoms/DXHeading/DXHeading.vue";
|
|
83
|
+
import DXText from "../../atoms/DXText/DXText.vue";
|
|
80
84
|
|
|
81
85
|
const props = defineProps({
|
|
82
86
|
/**
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
size="md"
|
|
17
17
|
/>
|
|
18
18
|
<div>
|
|
19
|
-
<
|
|
19
|
+
<DXHeading level="3" weight="semibold" color="default">
|
|
20
20
|
{{ chatInfo?.name || "Чат" }}
|
|
21
|
-
</
|
|
22
|
-
<
|
|
21
|
+
</DXHeading>
|
|
22
|
+
<DXText v-if="chatInfo?.status" tag="p" size="xs" color="muted">
|
|
23
23
|
{{ chatInfo.status }}
|
|
24
|
-
</
|
|
24
|
+
</DXText>
|
|
25
25
|
</div>
|
|
26
26
|
</div>
|
|
27
27
|
<slot name="header-actions" />
|
|
@@ -160,6 +160,8 @@ import { useSpacing } from "../../../composables/useSpacing";
|
|
|
160
160
|
import DXAvatar from "../../atoms/DXAvatar/DXAvatar.vue";
|
|
161
161
|
import DXButton from "../../atoms/DXButton/DXButton.vue";
|
|
162
162
|
import DXIcon from "../../atoms/DXIcon/DXIcon.vue";
|
|
163
|
+
import DXHeading from "../../atoms/DXHeading/DXHeading.vue";
|
|
164
|
+
import DXText from "../../atoms/DXText/DXText.vue";
|
|
163
165
|
import DXTextarea from "../../molecules/DXTextarea/DXTextarea.vue";
|
|
164
166
|
import {
|
|
165
167
|
PaperClipIcon,
|
|
@@ -42,16 +42,16 @@
|
|
|
42
42
|
/>
|
|
43
43
|
<div class="flex-1">
|
|
44
44
|
<div class="flex items-center gap-2 mb-1">
|
|
45
|
-
<span
|
|
45
|
+
<DXText tag="span" weight="semibold" color="default">
|
|
46
46
|
{{ comment.author?.name || "Аноним" }}
|
|
47
|
-
</
|
|
48
|
-
<span
|
|
47
|
+
</DXText>
|
|
48
|
+
<DXText tag="span" size="xs" color="muted">
|
|
49
49
|
{{ formatDate(comment.date) }}
|
|
50
|
-
</
|
|
50
|
+
</DXText>
|
|
51
51
|
</div>
|
|
52
|
-
<div
|
|
52
|
+
<DXText tag="div" size="sm" color="default" class="mb-2">
|
|
53
53
|
{{ comment.text }}
|
|
54
|
-
</
|
|
54
|
+
</DXText>
|
|
55
55
|
<div class="flex items-center gap-4">
|
|
56
56
|
<DXButton
|
|
57
57
|
v-if="showReactions"
|
|
@@ -128,6 +128,7 @@ import { useSpacing } from "../../../composables/useSpacing";
|
|
|
128
128
|
import DXTextarea from "../../molecules/DXTextarea/DXTextarea.vue";
|
|
129
129
|
import DXButton from "../../atoms/DXButton/DXButton.vue";
|
|
130
130
|
import DXAvatar from "../../atoms/DXAvatar/DXAvatar.vue";
|
|
131
|
+
import DXText from "../../atoms/DXText/DXText.vue";
|
|
131
132
|
import DXPagination from "../../molecules/DXPagination/DXPagination.vue";
|
|
132
133
|
|
|
133
134
|
const props = defineProps({
|
|
@@ -8,7 +8,7 @@ import { UserGroupIcon, ChartBarIcon, CurrencyDollarIcon } from '@heroicons/vue/
|
|
|
8
8
|
export default {
|
|
9
9
|
title: 'Organisms/DXDashboardGrid',
|
|
10
10
|
component: DXDashboardGrid,
|
|
11
|
-
tags: ['autodocs'],
|
|
11
|
+
tags: ['autodocs', 'category:data-display'],
|
|
12
12
|
parameters: {
|
|
13
13
|
docs: {
|
|
14
14
|
description: {
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
</div>
|
|
32
32
|
<slot name="widget" :widget="widget">
|
|
33
33
|
<div class="p-4 bg-white border border-slate-200 rounded-lg h-full">
|
|
34
|
-
<
|
|
35
|
-
<p
|
|
34
|
+
<DXHeading level="3" weight="semibold" class="mb-2">{{ widget.title || `Виджет ${widget.id}` }}</DXHeading>
|
|
35
|
+
<DXText tag="p" size="sm" color="muted">Используйте slot widget для кастомного контента</DXText>
|
|
36
36
|
</div>
|
|
37
37
|
</slot>
|
|
38
38
|
</div>
|
|
@@ -47,6 +47,8 @@ import { useClassComposition } from "../../../composables/useClassComposition";
|
|
|
47
47
|
import { useSpacing } from "../../../composables/useSpacing";
|
|
48
48
|
import { VueDraggableNext as vuedraggable } from "vue-draggable-next";
|
|
49
49
|
import DXIcon from "../../atoms/DXIcon/DXIcon.vue";
|
|
50
|
+
import DXHeading from "../../atoms/DXHeading/DXHeading.vue";
|
|
51
|
+
import DXText from "../../atoms/DXText/DXText.vue";
|
|
50
52
|
import { Bars3Icon } from "@heroicons/vue/24/outline";
|
|
51
53
|
|
|
52
54
|
const props = defineProps({
|
|
@@ -5,7 +5,7 @@ import { ChartBarIcon, CurrencyDollarIcon } from '@heroicons/vue/24/solid';
|
|
|
5
5
|
export default {
|
|
6
6
|
title: 'Organisms/DXDashboardWidget',
|
|
7
7
|
component: DXDashboardWidget,
|
|
8
|
-
tags: ['autodocs'],
|
|
8
|
+
tags: ['autodocs', 'category:data-display'],
|
|
9
9
|
parameters: {
|
|
10
10
|
docs: {
|
|
11
11
|
description: {
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
<div v-if="title || $slots.header || editable" :class="headerClasses">
|
|
12
12
|
<slot name="header">
|
|
13
13
|
<div class="flex items-center justify-between">
|
|
14
|
-
<
|
|
14
|
+
<DXHeading v-if="title" level="3" size="lg" weight="semibold" color="default">
|
|
15
15
|
{{ title }}
|
|
16
|
-
</
|
|
16
|
+
</DXHeading>
|
|
17
17
|
<div v-if="editable" class="flex items-center gap-2">
|
|
18
18
|
<DXButton
|
|
19
19
|
v-if="refreshable"
|
|
@@ -112,6 +112,7 @@ import { useSize } from "../../../composables/useSize";
|
|
|
112
112
|
import DXCard from "../../atoms/DXCard/DXCard.vue";
|
|
113
113
|
import DXButton from "../../atoms/DXButton/DXButton.vue";
|
|
114
114
|
import DXIcon from "../../atoms/DXIcon/DXIcon.vue";
|
|
115
|
+
import DXHeading from "../../atoms/DXHeading/DXHeading.vue";
|
|
115
116
|
import DXStatCard from "../../molecules/DXStatCard/DXStatCard.vue";
|
|
116
117
|
import DXChartContainer from "../DXChartContainer/DXChartContainer.vue";
|
|
117
118
|
import DXTable from "../DXTable/DXTable.vue";
|
|
@@ -35,7 +35,90 @@ import { ref } from 'vue';
|
|
|
35
35
|
export default {
|
|
36
36
|
title: 'Organisms/DXDropdown',
|
|
37
37
|
component: DXDropdown,
|
|
38
|
-
tags: ['autodocs'],
|
|
38
|
+
tags: ['autodocs', 'category:navigation'],
|
|
39
|
+
parameters: {
|
|
40
|
+
docs: {
|
|
41
|
+
description: {
|
|
42
|
+
component: `
|
|
43
|
+
# DXDropdown
|
|
44
|
+
|
|
45
|
+
Компонент выпадающего меню с поддержкой различных позиций, размеров и клавиатурной навигации.
|
|
46
|
+
|
|
47
|
+
## Назначение
|
|
48
|
+
|
|
49
|
+
DXDropdown предоставляет стандартизированный способ создания выпадающих меню с поддержкой
|
|
50
|
+
различных позиций, размеров, вариантов оформления и полной клавиатурной навигации. Компонент
|
|
51
|
+
автоматически управляет открытием/закрытием и позиционированием меню.
|
|
52
|
+
|
|
53
|
+
## Архитектура
|
|
54
|
+
|
|
55
|
+
### Использует
|
|
56
|
+
- \`DXIcon\` - для иконки chevron
|
|
57
|
+
- \`DXDropdownItem\` - для элементов меню (через slot)
|
|
58
|
+
- \`DXDropdownDivider\` - для разделителей (через slot)
|
|
59
|
+
- \`Transition\` - для анимации появления/исчезновения
|
|
60
|
+
|
|
61
|
+
### Используется в
|
|
62
|
+
- Меню действий
|
|
63
|
+
- Контекстные меню
|
|
64
|
+
- Выбор опций
|
|
65
|
+
- Навигационные меню
|
|
66
|
+
- Любые места, требующие выпадающего меню
|
|
67
|
+
|
|
68
|
+
## Внутренняя логика
|
|
69
|
+
|
|
70
|
+
### Позиционирование
|
|
71
|
+
Поддерживает 3 позиции:
|
|
72
|
+
- **left** - меню выравнивается по левому краю trigger
|
|
73
|
+
- **right** (по умолчанию) - меню выравнивается по правому краю trigger
|
|
74
|
+
- **center** - меню центрируется относительно trigger
|
|
75
|
+
|
|
76
|
+
### Ширина меню
|
|
77
|
+
Поддерживает 5 вариантов ширины:
|
|
78
|
+
- **sm** - маленькая ширина
|
|
79
|
+
- **md** - средняя ширина (по умолчанию)
|
|
80
|
+
- **lg** - большая ширина
|
|
81
|
+
- **xl** - очень большая ширина
|
|
82
|
+
- **auto** - автоматическая ширина по содержимому
|
|
83
|
+
|
|
84
|
+
### Варианты оформления
|
|
85
|
+
- **default** (по умолчанию): Стандартное оформление с рамкой и тенью
|
|
86
|
+
- **minimal**: Минималистичное оформление без рамки
|
|
87
|
+
|
|
88
|
+
### Управление состоянием
|
|
89
|
+
- Управляется внутренним состоянием \`open\`
|
|
90
|
+
- Автоматически закрывается при клике вне меню
|
|
91
|
+
- Поддерживает клавиатурную навигацию
|
|
92
|
+
|
|
93
|
+
### Клавиатурная навигация
|
|
94
|
+
- **ArrowDown/ArrowUp** - навигация по элементам меню
|
|
95
|
+
- **Escape** - закрытие меню
|
|
96
|
+
- **Enter** - выбор элемента (если поддерживается)
|
|
97
|
+
|
|
98
|
+
## Особенности
|
|
99
|
+
|
|
100
|
+
### Слоты
|
|
101
|
+
- **trigger** - элемент, при клике на который открывается меню (обязательно)
|
|
102
|
+
- **default** - содержимое меню (DXDropdownItem, DXDropdownDivider и т.д.)
|
|
103
|
+
|
|
104
|
+
### Chevron
|
|
105
|
+
При \`showChevron={true}\` (по умолчанию):
|
|
106
|
+
- Отображается иконка ChevronDownIcon справа от trigger
|
|
107
|
+
- Иконка поворачивается на 180° при открытии меню
|
|
108
|
+
|
|
109
|
+
### Отступ
|
|
110
|
+
Настраиваемый отступ от trigger через \`offset\` prop (по умолчанию 8px).
|
|
111
|
+
|
|
112
|
+
### Состояния
|
|
113
|
+
- **disabled** - отключает dropdown
|
|
114
|
+
- **open** - открытое состояние меню
|
|
115
|
+
|
|
116
|
+
### Анимация
|
|
117
|
+
Использует fade transition для плавного появления/исчезновения меню.
|
|
118
|
+
`,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
39
122
|
argTypes: {
|
|
40
123
|
position: {
|
|
41
124
|
control: 'select',
|
|
@@ -4,6 +4,70 @@ export default {
|
|
|
4
4
|
title: 'Organisms/DXEmptyState',
|
|
5
5
|
component: DXEmptyState,
|
|
6
6
|
tags: ['autodocs'],
|
|
7
|
+
parameters: {
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: `
|
|
11
|
+
# DXEmptyState
|
|
12
|
+
|
|
13
|
+
Компонент пустого состояния для отображения, когда нет данных или контента.
|
|
14
|
+
|
|
15
|
+
## Назначение
|
|
16
|
+
|
|
17
|
+
DXEmptyState предоставляет стандартизированный способ отображения пустого состояния
|
|
18
|
+
в интерфейсе. Компонент используется для информирования пользователя об отсутствии данных
|
|
19
|
+
и предоставления действий для заполнения контента.
|
|
20
|
+
|
|
21
|
+
## Архитектура
|
|
22
|
+
|
|
23
|
+
### Использует
|
|
24
|
+
- \`DXText\` - для заголовка и описания
|
|
25
|
+
- Динамический рендеринг иконки - для отображения иконки состояния
|
|
26
|
+
|
|
27
|
+
### Используется в
|
|
28
|
+
- Пустые списки и таблицы
|
|
29
|
+
- Пустые результаты поиска
|
|
30
|
+
- Пустые состояния после фильтрации
|
|
31
|
+
- Начальные состояния (когда пользователь еще ничего не создал)
|
|
32
|
+
- Любые места, требующие информирования об отсутствии данных
|
|
33
|
+
|
|
34
|
+
## Внутренняя логика
|
|
35
|
+
|
|
36
|
+
### Структура
|
|
37
|
+
Компонент состоит из:
|
|
38
|
+
1. **Иконка** - визуальный индикатор состояния (обязательно)
|
|
39
|
+
2. **Заголовок** - краткое описание состояния (обязательно)
|
|
40
|
+
3. **Описание** - подробное объяснение (опционально)
|
|
41
|
+
4. **Действие** - кнопка или ссылка для заполнения (через слот \`action\`)
|
|
42
|
+
|
|
43
|
+
### Анимация иконки
|
|
44
|
+
При \`animated={true}\`:
|
|
45
|
+
- Иконка получает медленную bounce анимацию
|
|
46
|
+
- Анимация длится 3.2 секунды и повторяется бесконечно
|
|
47
|
+
- Создает живой эффект для привлечения внимания
|
|
48
|
+
|
|
49
|
+
## Особенности
|
|
50
|
+
|
|
51
|
+
### Визуальное оформление
|
|
52
|
+
- Белый фон с рамкой и тенью
|
|
53
|
+
- Скругление \`rounded-3xl\`
|
|
54
|
+
- Padding \`p-8\` для пространства
|
|
55
|
+
- Центрирование контента
|
|
56
|
+
|
|
57
|
+
### Слоты
|
|
58
|
+
- **action** - кастомное действие (кнопка, ссылка и т.д.)
|
|
59
|
+
|
|
60
|
+
### Иконка
|
|
61
|
+
Иконка передается через \`icon\` prop (Heroicon компонент) и отображается размером 40×40px.
|
|
62
|
+
|
|
63
|
+
### Типичные сценарии использования
|
|
64
|
+
- "Нет элементов" - когда список пуст
|
|
65
|
+
- "Нет результатов" - когда поиск не дал результатов
|
|
66
|
+
- "Создайте первый элемент" - для начального состояния
|
|
67
|
+
`,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
7
71
|
};
|
|
8
72
|
|
|
9
73
|
export const Default = {
|
|
@@ -8,13 +8,15 @@
|
|
|
8
8
|
class="w-10 h-10 text-slate-500 mx-auto"
|
|
9
9
|
:class="animated && 'animate-bounce-slow'"
|
|
10
10
|
/>
|
|
11
|
-
<p
|
|
12
|
-
<
|
|
11
|
+
<DXText tag="p" size="md" weight="semibold" color="default">{{ title }}</DXText>
|
|
12
|
+
<DXText v-if="description" tag="p" size="sm" color="muted">{{ description }}</DXText>
|
|
13
13
|
<slot name="action" />
|
|
14
14
|
</div>
|
|
15
15
|
</template>
|
|
16
16
|
|
|
17
17
|
<script setup>
|
|
18
|
+
import DXText from "../../atoms/DXText/DXText.vue";
|
|
19
|
+
|
|
18
20
|
defineProps({
|
|
19
21
|
/** Иконка (компонент) */
|
|
20
22
|
icon: { type: [Object, Function], required: true },
|