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
|
@@ -5,6 +5,73 @@ export default {
|
|
|
5
5
|
title: 'Molecules/DXTablePagination',
|
|
6
6
|
component: DXTablePagination,
|
|
7
7
|
tags: ['autodocs'],
|
|
8
|
+
parameters: {
|
|
9
|
+
docs: {
|
|
10
|
+
description: {
|
|
11
|
+
component: `
|
|
12
|
+
# DXTablePagination
|
|
13
|
+
|
|
14
|
+
Компонент пагинации для таблиц с информацией о результатах и выбором размера страницы.
|
|
15
|
+
|
|
16
|
+
## Назначение
|
|
17
|
+
|
|
18
|
+
DXTablePagination предоставляет комплексную пагинацию для таблиц данных, объединяя
|
|
19
|
+
навигацию по страницам, информацию о количестве результатов и выбор размера страницы
|
|
20
|
+
в единый компонент.
|
|
21
|
+
|
|
22
|
+
## Архитектура
|
|
23
|
+
|
|
24
|
+
### Использует
|
|
25
|
+
- \`DXPagination\` - для навигации по страницам
|
|
26
|
+
- \`DXSelect\` - для выбора размера страницы
|
|
27
|
+
|
|
28
|
+
### Используется в
|
|
29
|
+
- \`DXTable\` - пагинация таблицы
|
|
30
|
+
- Таблицы данных с большим количеством записей
|
|
31
|
+
- Административные панели
|
|
32
|
+
|
|
33
|
+
## Внутренняя логика
|
|
34
|
+
|
|
35
|
+
### Информация о результатах
|
|
36
|
+
Отображается в формате "Показано X-Y из Z":
|
|
37
|
+
- \`from\` - номер первого элемента на странице
|
|
38
|
+
- \`to\` - номер последнего элемента на странице
|
|
39
|
+
- \`total\` - общее количество элементов
|
|
40
|
+
|
|
41
|
+
### Навигация по страницам
|
|
42
|
+
Использует \`DXPagination\` для навигации:
|
|
43
|
+
- \`currentPage\` - текущая страница (v-model)
|
|
44
|
+
- \`totalPages\` - общее количество страниц
|
|
45
|
+
|
|
46
|
+
### Выбор размера страницы
|
|
47
|
+
Использует \`DXSelect\` для выбора:
|
|
48
|
+
- \`pageSize\` - текущий размер страницы (v-model)
|
|
49
|
+
- \`pageSizeOptions\` - опции размера (по умолчанию [10, 25, 50, 100])
|
|
50
|
+
- Формат отображения: "N / стр"
|
|
51
|
+
|
|
52
|
+
### Размеры
|
|
53
|
+
Поддерживает 3 размера:
|
|
54
|
+
- **sm** - маленький (text-xs)
|
|
55
|
+
- **md** - средний (text-sm, по умолчанию)
|
|
56
|
+
- **lg** - большой (text-base)
|
|
57
|
+
|
|
58
|
+
## Особенности
|
|
59
|
+
|
|
60
|
+
### v-model
|
|
61
|
+
Поддерживает двустороннее связывание:
|
|
62
|
+
- \`v-model:currentPage\` - для текущей страницы
|
|
63
|
+
- \`v-model:pageSize\` - для размера страницы
|
|
64
|
+
|
|
65
|
+
### События
|
|
66
|
+
- \`@update:currentPage\` - изменение текущей страницы
|
|
67
|
+
- \`@update:pageSize\` - изменение размера страницы
|
|
68
|
+
|
|
69
|
+
### Адаптивность
|
|
70
|
+
Размер текста автоматически адаптируется к размеру компонента для единообразия.
|
|
71
|
+
`,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
8
75
|
};
|
|
9
76
|
|
|
10
77
|
// Default
|
|
@@ -6,6 +6,77 @@ export default {
|
|
|
6
6
|
title: 'Molecules/DXTableToolbar',
|
|
7
7
|
component: DXTableToolbar,
|
|
8
8
|
tags: ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: `
|
|
13
|
+
# DXTableToolbar
|
|
14
|
+
|
|
15
|
+
Компонент панели инструментов для таблиц с поддержкой поиска, переключения столбцов и кастомных действий.
|
|
16
|
+
|
|
17
|
+
## Назначение
|
|
18
|
+
|
|
19
|
+
DXTableToolbar предоставляет стандартизированную панель инструментов для таблиц данных.
|
|
20
|
+
Компонент объединяет поиск, информацию о выбранных элементах, переключение видимости столбцов
|
|
21
|
+
и слоты для кастомных действий.
|
|
22
|
+
|
|
23
|
+
## Архитектура
|
|
24
|
+
|
|
25
|
+
### Использует
|
|
26
|
+
- \`DXInput\` - для поисковой строки
|
|
27
|
+
- \`DXIcon\` - для иконок
|
|
28
|
+
- \`DXCheckbox\` - для переключения видимости столбцов
|
|
29
|
+
- \`DXDropdown\` - для меню переключения столбцов
|
|
30
|
+
|
|
31
|
+
### Используется в
|
|
32
|
+
- \`DXTable\` - панель инструментов таблицы
|
|
33
|
+
- Таблицы данных с поиском и фильтрацией
|
|
34
|
+
- Административные панели
|
|
35
|
+
|
|
36
|
+
## Внутренняя логика
|
|
37
|
+
|
|
38
|
+
### Поиск
|
|
39
|
+
При \`searchable={true}\`:
|
|
40
|
+
- Отображается поисковая строка с иконкой поиска
|
|
41
|
+
- Поддерживает v-model для двустороннего связывания
|
|
42
|
+
- Максимальная ширина: \`max-w-xs\`
|
|
43
|
+
|
|
44
|
+
### Информация о выборе
|
|
45
|
+
При \`selectedCount > 0\`:
|
|
46
|
+
- Отображается текст "Выбрано: N"
|
|
47
|
+
- Показывается слева от поиска
|
|
48
|
+
|
|
49
|
+
### Переключение столбцов
|
|
50
|
+
При \`columnToggle={true}\`:
|
|
51
|
+
- Отображается dropdown с чекбоксами для каждого столбца
|
|
52
|
+
- Каждый столбц имеет \`key\`, \`label\` и \`visible\` свойства
|
|
53
|
+
- При переключении эмитится событие \`toggle-column\` с ключом столбца
|
|
54
|
+
|
|
55
|
+
### Размеры
|
|
56
|
+
Поддерживает 3 размера:
|
|
57
|
+
- **sm** - маленький
|
|
58
|
+
- **md** - средний (по умолчанию)
|
|
59
|
+
- **lg** - большой
|
|
60
|
+
|
|
61
|
+
## Особенности
|
|
62
|
+
|
|
63
|
+
### Слоты
|
|
64
|
+
- **left** - кастомные элементы слева от поиска
|
|
65
|
+
- **right** - кастомные элементы справа (перед переключателем столбцов)
|
|
66
|
+
|
|
67
|
+
### События
|
|
68
|
+
- \`@update:searchQuery\` - изменение поискового запроса
|
|
69
|
+
- \`@toggle-column\` - переключение видимости столбца
|
|
70
|
+
|
|
71
|
+
### Структура столбцов
|
|
72
|
+
Столбцы передаются через массив объектов:
|
|
73
|
+
\`\`\`
|
|
74
|
+
[{ key: 'id', label: 'ID', visible: true }, ...]
|
|
75
|
+
\`\`\`
|
|
76
|
+
`,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
9
80
|
};
|
|
10
81
|
|
|
11
82
|
const sampleColumns = [
|
|
@@ -10,7 +10,93 @@ import {
|
|
|
10
10
|
export default {
|
|
11
11
|
title: 'Molecules/DXTextarea',
|
|
12
12
|
component: DXTextarea,
|
|
13
|
-
tags: ['autodocs'],
|
|
13
|
+
tags: ['autodocs', 'category:form'],
|
|
14
|
+
parameters: {
|
|
15
|
+
docs: {
|
|
16
|
+
description: {
|
|
17
|
+
component: `
|
|
18
|
+
# DXTextarea
|
|
19
|
+
|
|
20
|
+
Компонент многострочного текстового поля с поддержкой иконок, валидации, счетчика символов и интеграции с группами полей.
|
|
21
|
+
|
|
22
|
+
## Назначение
|
|
23
|
+
|
|
24
|
+
DXTextarea предоставляет стандартизированное многострочное текстовое поле для ввода длинных текстов.
|
|
25
|
+
Компонент поддерживает иконки, валидацию, ограничение длины, счетчик символов и автоматическую адаптацию
|
|
26
|
+
при использовании внутри DXInputGroup.
|
|
27
|
+
|
|
28
|
+
## Архитектура
|
|
29
|
+
|
|
30
|
+
### Использует
|
|
31
|
+
- \`DXFormLabel\` - для отображения лейбла, ошибок, вспомогательного текста и счетчика символов
|
|
32
|
+
- \`DXIconWrapper\` - для отображения иконок слева и справа
|
|
33
|
+
- \`useClassComposition\` composable - для объединения CSS классов
|
|
34
|
+
- \`provide/inject\` - для интеграции с DXInputGroup
|
|
35
|
+
|
|
36
|
+
### Используется в
|
|
37
|
+
- \`DXInputGroup\` - группы полей с аддонами
|
|
38
|
+
- Формы с длинными текстовыми полями
|
|
39
|
+
- Комментарии и описания
|
|
40
|
+
- Любые места, требующие многострочного ввода
|
|
41
|
+
|
|
42
|
+
## Внутренняя логика
|
|
43
|
+
|
|
44
|
+
### Интеграция с DXInputGroup
|
|
45
|
+
При использовании внутри \`DXInputGroup\`:
|
|
46
|
+
- Поле автоматически регистрируется в группе через \`provide/inject\`
|
|
47
|
+
- Размер синхронизируется с размером группы
|
|
48
|
+
- Состояние \`disabled\` наследуется от группы
|
|
49
|
+
- Состояние \`error\` синхронизируется с группой
|
|
50
|
+
- Border-radius адаптируется в зависимости от наличия аддонов слева/справа
|
|
51
|
+
|
|
52
|
+
### Иконки
|
|
53
|
+
- **prefixIcon**: Иконка слева от textarea (Heroicon компонент)
|
|
54
|
+
- **suffixIcon**: Иконка справа от textarea (Heroicon компонент)
|
|
55
|
+
- Иконки выравниваются по верху (\`verticalAlign="top"\`) для многострочного поля
|
|
56
|
+
|
|
57
|
+
### Счетчик символов
|
|
58
|
+
- При \`maxLength > 0\` и \`showCount={true}\` отображается счетчик символов
|
|
59
|
+
- Формат: "текущее / максимальное" (например, "150 / 500")
|
|
60
|
+
- Отображается через \`DXFormLabel\`
|
|
61
|
+
|
|
62
|
+
### Валидация
|
|
63
|
+
- При наличии \`error\` prop, поле получает красную рамку
|
|
64
|
+
- Текст ошибки отображается через \`DXFormLabel\`
|
|
65
|
+
- Состояние ошибки синхронизируется с \`DXInputGroup\`
|
|
66
|
+
|
|
67
|
+
## Особенности
|
|
68
|
+
|
|
69
|
+
### v-model
|
|
70
|
+
Полностью поддерживает двустороннее связывание через \`v-model\` для String значений.
|
|
71
|
+
|
|
72
|
+
### Количество строк
|
|
73
|
+
- Настраивается через \`rows\` prop (по умолчанию 4)
|
|
74
|
+
- Поле автоматически расширяется при вводе текста
|
|
75
|
+
|
|
76
|
+
### Ограничение длины
|
|
77
|
+
- При \`maxLength > 0\` ограничивает количество вводимых символов
|
|
78
|
+
- Нативный атрибут \`maxlength\` применяется к textarea
|
|
79
|
+
|
|
80
|
+
### Состояния
|
|
81
|
+
- **disabled** - отключает поле
|
|
82
|
+
- **error** - визуально выделяет ошибку (красная рамка)
|
|
83
|
+
- **required** - отмечает поле как обязательное
|
|
84
|
+
|
|
85
|
+
### Лейбл и вспомогательный текст
|
|
86
|
+
- \`label\` - отображается над полем
|
|
87
|
+
- \`helper\` - вспомогательный текст под полем
|
|
88
|
+
- \`error\` - текст ошибки (заменяет helper при наличии)
|
|
89
|
+
- \`showCount\` - показывать счетчик символов
|
|
90
|
+
|
|
91
|
+
### Нативный textarea
|
|
92
|
+
Компонент использует нативный HTML \`<textarea>\` элемент, что обеспечивает:
|
|
93
|
+
- Нативную доступность
|
|
94
|
+
- Работу с клавиатурой
|
|
95
|
+
- Автоматическое изменение размера
|
|
96
|
+
`,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
14
100
|
};
|
|
15
101
|
|
|
16
102
|
export const Default = {
|
|
@@ -3,7 +3,65 @@ import DXValidationIcon from './DXValidationIcon.vue';
|
|
|
3
3
|
export default {
|
|
4
4
|
title: 'Molecules/DXValidationIcon',
|
|
5
5
|
component: DXValidationIcon,
|
|
6
|
-
tags: ['autodocs'],
|
|
6
|
+
tags: ['autodocs', 'category:form'],
|
|
7
|
+
parameters: {
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: `
|
|
11
|
+
# DXValidationIcon
|
|
12
|
+
|
|
13
|
+
Компонент иконки валидации для отображения состояния валидации полей форм.
|
|
14
|
+
|
|
15
|
+
## Назначение
|
|
16
|
+
|
|
17
|
+
DXValidationIcon предоставляет стандартизированный способ отображения состояния валидации
|
|
18
|
+
через иконки. Компонент автоматически выбирает соответствующую иконку и цвет в зависимости
|
|
19
|
+
от состояния валидации.
|
|
20
|
+
|
|
21
|
+
## Архитектура
|
|
22
|
+
|
|
23
|
+
### Использует
|
|
24
|
+
- \`DXIcon\` - для отображения иконок
|
|
25
|
+
- Heroicons solid иконки - для различных состояний
|
|
26
|
+
|
|
27
|
+
### Используется в
|
|
28
|
+
- \`DXFormControl\` - для индикации валидации
|
|
29
|
+
- \`DXFormLabel\` - для иконок в сообщениях
|
|
30
|
+
- Любые поля форм, требующие визуальной индикации валидации
|
|
31
|
+
|
|
32
|
+
## Внутренняя логика
|
|
33
|
+
|
|
34
|
+
### Состояния
|
|
35
|
+
Поддерживает 4 состояния:
|
|
36
|
+
- **success** - успешная валидация (CheckCircleIcon, зеленый цвет)
|
|
37
|
+
- **error** - ошибка валидации (ExclamationCircleIcon, красный цвет)
|
|
38
|
+
- **warning** - предупреждение (ExclamationTriangleIcon, желтый цвет)
|
|
39
|
+
- **info** - информационное сообщение (InformationCircleIcon, синий цвет)
|
|
40
|
+
|
|
41
|
+
### Размеры
|
|
42
|
+
Поддерживает 3 размера:
|
|
43
|
+
- **sm** - маленький
|
|
44
|
+
- **md** - средний (по умолчанию)
|
|
45
|
+
- **lg** - большой
|
|
46
|
+
|
|
47
|
+
### Цвета
|
|
48
|
+
Каждое состояние имеет свой цвет:
|
|
49
|
+
- success → \`text-emerald-500\`
|
|
50
|
+
- error → \`text-rose-500\`
|
|
51
|
+
- warning → \`text-amber-500\`
|
|
52
|
+
- info → \`text-blue-500\`
|
|
53
|
+
|
|
54
|
+
## Особенности
|
|
55
|
+
|
|
56
|
+
### Анимация
|
|
57
|
+
Иконка использует анимацию \`scale\` для визуального эффекта при появлении.
|
|
58
|
+
|
|
59
|
+
### Иконки
|
|
60
|
+
Все иконки из библиотеки Heroicons solid для единообразия и четкости отображения.
|
|
61
|
+
`,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
7
65
|
argTypes: {
|
|
8
66
|
state: {
|
|
9
67
|
control: 'select',
|
|
@@ -4,7 +4,6 @@ export { default as DXAlert } from './DXAlert';
|
|
|
4
4
|
export { default as DXCloseButton } from './DXCloseButton';
|
|
5
5
|
export { default as DXDropdownDivider } from './DXDropdownDivider';
|
|
6
6
|
export { default as DXMenu } from './DXMenu';
|
|
7
|
-
export { default as DXBaseTable } from './DXBaseTable';
|
|
8
7
|
export { default as DXBreadcrumb } from './DXBreadcrumb';
|
|
9
8
|
export { default as DXButtonGroup } from './DXButtonGroup';
|
|
10
9
|
export { default as DXComboBox } from './DXComboBox';
|
|
@@ -4,6 +4,81 @@ export default {
|
|
|
4
4
|
title: 'Organisms/DXAccordion',
|
|
5
5
|
component: DXAccordion,
|
|
6
6
|
tags: ['autodocs'],
|
|
7
|
+
parameters: {
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: `
|
|
11
|
+
# DXAccordion
|
|
12
|
+
|
|
13
|
+
Компонент аккордеона для отображения раскрывающихся секций контента.
|
|
14
|
+
|
|
15
|
+
## Назначение
|
|
16
|
+
|
|
17
|
+
DXAccordion предоставляет способ организации контента в раскрывающиеся секции. Компонент
|
|
18
|
+
поддерживает одиночный и множественный режимы открытия, различные варианты оформления
|
|
19
|
+
и возможность задать изначально открытые секции.
|
|
20
|
+
|
|
21
|
+
## Архитектура
|
|
22
|
+
|
|
23
|
+
### Использует
|
|
24
|
+
- \`DXIcon\` - для иконок в заголовках и chevron
|
|
25
|
+
- \`useTransition\` composable - для анимации раскрытия/сворачивания
|
|
26
|
+
- \`useClassComposition\` composable - для стилей
|
|
27
|
+
|
|
28
|
+
### Используется в
|
|
29
|
+
- FAQ секции
|
|
30
|
+
- Настройки с категориями
|
|
31
|
+
- Раскрывающиеся списки
|
|
32
|
+
- Любые места, требующие организации контента в секции
|
|
33
|
+
|
|
34
|
+
## Внутренняя логика
|
|
35
|
+
|
|
36
|
+
### Структура элементов
|
|
37
|
+
Элементы передаются через массив объектов:
|
|
38
|
+
\`\`\`
|
|
39
|
+
[{ title: 'Title', content: 'Content', icon?: Icon }]
|
|
40
|
+
\`\`\`
|
|
41
|
+
|
|
42
|
+
Каждый элемент может содержать:
|
|
43
|
+
- \`title\` - заголовок секции (обязательно)
|
|
44
|
+
- \`content\` - содержимое секции (опционально, можно использовать слот)
|
|
45
|
+
- \`icon\` - иконка в заголовке (опционально)
|
|
46
|
+
|
|
47
|
+
### Режимы открытия
|
|
48
|
+
- **single** (по умолчанию): Только одна секция может быть открыта одновременно
|
|
49
|
+
- **multiple**: Несколько секций могут быть открыты одновременно
|
|
50
|
+
|
|
51
|
+
### Варианты оформления
|
|
52
|
+
- **default** (по умолчанию): Без дополнительного оформления
|
|
53
|
+
- **bordered**: Рамка вокруг всего аккордеона, скругление
|
|
54
|
+
- **separated**: Отступы между секциями
|
|
55
|
+
|
|
56
|
+
### Изначально открытые секции
|
|
57
|
+
Можно указать индексы изначально открытых секций через \`defaultOpen\` prop (массив индексов).
|
|
58
|
+
|
|
59
|
+
## Особенности
|
|
60
|
+
|
|
61
|
+
### Слоты
|
|
62
|
+
Для каждого элемента можно использовать именованный слот:
|
|
63
|
+
- \`item-0\` - для первого элемента
|
|
64
|
+
- \`item-1\` - для второго элемента
|
|
65
|
+
- И так далее
|
|
66
|
+
|
|
67
|
+
Это позволяет кастомизировать содержимое каждой секции.
|
|
68
|
+
|
|
69
|
+
### Анимация
|
|
70
|
+
Использует collapse transition для плавного раскрытия/сворачивания секций.
|
|
71
|
+
|
|
72
|
+
### Chevron
|
|
73
|
+
Каждая секция имеет иконку ChevronDownIcon справа, которая поворачивается при открытии.
|
|
74
|
+
|
|
75
|
+
### Доступность
|
|
76
|
+
- Использует \`aria-expanded\` для указания состояния секции
|
|
77
|
+
- Поддержка клавиатурной навигации
|
|
78
|
+
`,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
7
82
|
argTypes: {
|
|
8
83
|
variant: { control: { type: 'select' }, options: ['default', 'bordered', 'separated'] },
|
|
9
84
|
},
|
|
@@ -10,12 +10,14 @@ import DXDropdown from '../DXDropdown/DXDropdown.vue';
|
|
|
10
10
|
import DXInput from '../../molecules/DXInput/DXInput.vue';
|
|
11
11
|
import DXIcon from '../../atoms/DXIcon/DXIcon.vue';
|
|
12
12
|
import DXTabs from '../DXTabs/DXTabs.vue';
|
|
13
|
+
import DXHeading from '../../atoms/DXHeading/DXHeading.vue';
|
|
14
|
+
import DXText from '../../atoms/DXText/DXText.vue';
|
|
13
15
|
import { MagnifyingGlassIcon, BellIcon, Bars3Icon } from '@heroicons/vue/24/outline';
|
|
14
16
|
|
|
15
17
|
export default {
|
|
16
18
|
title: 'Organisms/DXAppLayout',
|
|
17
19
|
component: DXAppLayout,
|
|
18
|
-
tags: ['autodocs'],
|
|
20
|
+
tags: ['autodocs', 'category:navigation'],
|
|
19
21
|
parameters: {
|
|
20
22
|
layout: 'fullscreen',
|
|
21
23
|
docs: {
|
|
@@ -265,8 +267,8 @@ export const Default = {
|
|
|
265
267
|
</template>
|
|
266
268
|
<template #content>
|
|
267
269
|
<DXContainer>
|
|
268
|
-
<
|
|
269
|
-
<p
|
|
270
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Добро пожаловать</DXHeading>
|
|
271
|
+
<DXText tag="p" color="muted">Это основной контент страницы.</DXText>
|
|
270
272
|
</DXContainer>
|
|
271
273
|
</template>
|
|
272
274
|
</DXAppLayout>
|
|
@@ -335,8 +337,8 @@ export const WithFullHeader = {
|
|
|
335
337
|
</template>
|
|
336
338
|
<template #content>
|
|
337
339
|
<DXContainer>
|
|
338
|
-
<
|
|
339
|
-
<p
|
|
340
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Дашборд</DXHeading>
|
|
341
|
+
<DXText tag="p" color="muted">Основной контент страницы.</DXText>
|
|
340
342
|
</DXContainer>
|
|
341
343
|
</template>
|
|
342
344
|
</DXAppLayout>
|
|
@@ -373,8 +375,8 @@ export const OverlayMode = {
|
|
|
373
375
|
</template>
|
|
374
376
|
<template #content>
|
|
375
377
|
<DXContainer>
|
|
376
|
-
<
|
|
377
|
-
<p
|
|
378
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Overlay Mode</DXHeading>
|
|
379
|
+
<DXText tag="p" color="muted">Сайдбар накладывается поверх контента.</DXText>
|
|
378
380
|
</DXContainer>
|
|
379
381
|
</template>
|
|
380
382
|
</DXAppLayout>
|
|
@@ -409,8 +411,8 @@ export const PushMode = {
|
|
|
409
411
|
</template>
|
|
410
412
|
<template #content>
|
|
411
413
|
<DXContainer>
|
|
412
|
-
<
|
|
413
|
-
<p
|
|
414
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Push Mode</DXHeading>
|
|
415
|
+
<DXText tag="p" color="muted">Сайдбар сдвигает контент вправо.</DXText>
|
|
414
416
|
</DXContainer>
|
|
415
417
|
</template>
|
|
416
418
|
</DXAppLayout>
|
|
@@ -445,8 +447,8 @@ export const WithFooter = {
|
|
|
445
447
|
</template>
|
|
446
448
|
<template #content>
|
|
447
449
|
<DXContainer>
|
|
448
|
-
<
|
|
449
|
-
<p
|
|
450
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Контент</DXHeading>
|
|
451
|
+
<DXText tag="p" color="muted">Основной контент страницы.</DXText>
|
|
450
452
|
</DXContainer>
|
|
451
453
|
</template>
|
|
452
454
|
<template #footer>
|
|
@@ -495,8 +497,8 @@ export const CollapsibleSidebar = {
|
|
|
495
497
|
</template>
|
|
496
498
|
<template #content>
|
|
497
499
|
<DXContainer>
|
|
498
|
-
<
|
|
499
|
-
<p
|
|
500
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Коллапсируемый сайдбар</DXHeading>
|
|
501
|
+
<DXText tag="p" color="muted">Используйте кнопку в header для переключения состояния сайдбара.</DXText>
|
|
500
502
|
</DXContainer>
|
|
501
503
|
</template>
|
|
502
504
|
</DXAppLayout>
|
|
@@ -573,8 +575,8 @@ export const Minimal = {
|
|
|
573
575
|
</template>
|
|
574
576
|
<template #content>
|
|
575
577
|
<DXContainer>
|
|
576
|
-
<
|
|
577
|
-
<p
|
|
578
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Простое приложение</DXHeading>
|
|
579
|
+
<DXText tag="p" color="muted">Это минималистичный layout без sidebar и footer.</DXText>
|
|
578
580
|
</DXContainer>
|
|
579
581
|
</template>
|
|
580
582
|
</DXAppLayout>
|
|
@@ -613,14 +615,14 @@ export const Split = {
|
|
|
613
615
|
</template>
|
|
614
616
|
<template #content-left>
|
|
615
617
|
<div class="h-full bg-slate-50 p-4">
|
|
616
|
-
<
|
|
617
|
-
<p
|
|
618
|
+
<DXHeading level="2" size="lg" weight="semibold" class="mb-2">Левая панель</DXHeading>
|
|
619
|
+
<DXText tag="p" size="sm" color="muted">Здесь может быть редактор кода или файловый менеджер.</DXText>
|
|
618
620
|
</div>
|
|
619
621
|
</template>
|
|
620
622
|
<template #content-right>
|
|
621
623
|
<div class="h-full bg-white p-4">
|
|
622
|
-
<
|
|
623
|
-
<p
|
|
624
|
+
<DXHeading level="2" size="lg" weight="semibold" class="mb-2">Правая панель</DXHeading>
|
|
625
|
+
<DXText tag="p" size="sm" color="muted">Здесь может быть предпросмотр или результат.</DXText>
|
|
624
626
|
</div>
|
|
625
627
|
</template>
|
|
626
628
|
</DXAppLayout>
|
|
@@ -669,16 +671,16 @@ export const Tabbed = {
|
|
|
669
671
|
<template #content>
|
|
670
672
|
<DXContainer>
|
|
671
673
|
<div v-if="activeTab === 'dashboard'">
|
|
672
|
-
<
|
|
673
|
-
<p
|
|
674
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Дашборд</DXHeading>
|
|
675
|
+
<DXText tag="p" color="muted">Контент дашборда.</DXText>
|
|
674
676
|
</div>
|
|
675
677
|
<div v-else-if="activeTab === 'analytics'">
|
|
676
|
-
<
|
|
677
|
-
<p
|
|
678
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Аналитика</DXHeading>
|
|
679
|
+
<DXText tag="p" color="muted">Контент аналитики.</DXText>
|
|
678
680
|
</div>
|
|
679
681
|
<div v-else-if="activeTab === 'settings'">
|
|
680
|
-
<
|
|
681
|
-
<p
|
|
682
|
+
<DXHeading level="1" size="2xl" weight="bold" class="mb-4">Настройки</DXHeading>
|
|
683
|
+
<DXText tag="p" color="muted">Контент настроек.</DXText>
|
|
682
684
|
</div>
|
|
683
685
|
</DXContainer>
|
|
684
686
|
</template>
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
<!-- Header -->
|
|
8
8
|
<div v-if="showHeader || $slots.header" :class="headerClasses">
|
|
9
9
|
<slot name="header">
|
|
10
|
-
<
|
|
10
|
+
<DXHeading level="2" size="2xl" weight="bold" color="default" align="center">
|
|
11
11
|
{{ modeLabels[mode] }}
|
|
12
|
-
</
|
|
12
|
+
</DXHeading>
|
|
13
13
|
</slot>
|
|
14
14
|
</div>
|
|
15
15
|
|
|
@@ -42,9 +42,7 @@
|
|
|
42
42
|
/>
|
|
43
43
|
</DXFormControl>
|
|
44
44
|
<div class="flex items-center justify-between">
|
|
45
|
-
<DXCheckbox v-model="loginForm.remember"
|
|
46
|
-
Запомнить меня
|
|
47
|
-
</DXCheckbox>
|
|
45
|
+
<DXCheckbox v-model="loginForm.remember" size="sm" label="Запомнить меня" />
|
|
48
46
|
<DXLink
|
|
49
47
|
variant="link"
|
|
50
48
|
size="sm"
|
|
@@ -116,9 +114,7 @@
|
|
|
116
114
|
@update:model-value="clearError('confirmPassword')"
|
|
117
115
|
/>
|
|
118
116
|
</DXFormControl>
|
|
119
|
-
<DXCheckbox v-model="registerForm.agreeToTerms"
|
|
120
|
-
Я согласен с условиями использования
|
|
121
|
-
</DXCheckbox>
|
|
117
|
+
<DXCheckbox v-model="registerForm.agreeToTerms" size="sm" label="Я согласен с условиями использования" />
|
|
122
118
|
<DXButton
|
|
123
119
|
variant="primary"
|
|
124
120
|
:loading="loading"
|
|
@@ -222,6 +218,7 @@ import DXFormControl from "../../molecules/DXFormControl/DXFormControl.vue";
|
|
|
222
218
|
import DXButton from "../../atoms/DXButton/DXButton.vue";
|
|
223
219
|
import DXCheckbox from "../../atoms/DXCheckbox/DXCheckbox.vue";
|
|
224
220
|
import DXLink from "../../atoms/DXLink/DXLink.vue";
|
|
221
|
+
import DXHeading from "../../atoms/DXHeading/DXHeading.vue";
|
|
225
222
|
import DXAlert from "../../molecules/DXAlert/DXAlert.vue";
|
|
226
223
|
|
|
227
224
|
const props = defineProps({
|