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.
Files changed (148) hide show
  1. package/dist/dxd-style-code.js +7470 -6336
  2. package/dist/dxd-style-code.umd.cjs +3 -3
  3. package/dist/style.css +1 -1
  4. package/package.json +2 -2
  5. package/src/components/atoms/DX/DX.stories.js +265 -0
  6. package/src/components/atoms/DX/DX.vue +80 -0
  7. package/src/components/atoms/DX/index.js +2 -0
  8. package/src/components/atoms/DXAvatar/DXAvatar.stories.js +1 -2
  9. package/src/components/atoms/DXBackdrop/DXBackdrop.stories.js +77 -1
  10. package/src/components/atoms/DXBadge/DXBadge.stories.js +83 -1
  11. package/src/components/atoms/DXBlockquote/DXBlockquote.stories.js +67 -1
  12. package/src/components/atoms/DXBox/DXBox.stories.js +1 -1
  13. package/src/components/atoms/DXBox/DXBox.vue +69 -2
  14. package/src/components/atoms/DXButton/DXButton.stories.js +94 -1
  15. package/src/components/atoms/DXButton/DXButton.vue +145 -11
  16. package/src/components/atoms/DXCard/DXCard.stories.js +72 -14
  17. package/src/components/atoms/DXCard/DXCard.vue +3 -4
  18. package/src/components/atoms/DXCheckbox/DXCheckbox.stories.js +85 -1
  19. package/src/components/atoms/DXCode/DXCode.stories.js +67 -1
  20. package/src/components/atoms/DXContainer/DXContainer.stories.js +1 -1
  21. package/src/components/atoms/DXContainer/DXContainer.vue +28 -1
  22. package/src/components/atoms/DXDivider/DXDivider.stories.js +84 -1
  23. package/src/components/atoms/DXFlex/DXFlex.stories.js +1 -1
  24. package/src/components/atoms/DXFlex/DXFlex.vue +57 -3
  25. package/src/components/atoms/DXFormLabel/DXFormLabel.stories.js +70 -1
  26. package/src/components/atoms/DXGrid/DXGrid.stories.js +1 -1
  27. package/src/components/atoms/DXHeading/DXHeading.stories.js +90 -1
  28. package/src/components/atoms/DXIcon/DXIcon.stories.js +74 -0
  29. package/src/components/atoms/DXIconWrapper/DXIconWrapper.stories.js +69 -0
  30. package/src/components/atoms/DXImage/DXImage.stories.js +483 -0
  31. package/src/components/atoms/DXImage/DXImage.vue +294 -0
  32. package/src/components/atoms/DXImage/index.js +2 -0
  33. package/src/components/atoms/DXInputAddon/DXInputAddon.stories.js +86 -1
  34. package/src/components/atoms/DXLabel/DXLabel.stories.js +62 -1
  35. package/src/components/atoms/DXLink/DXLink.stories.js +75 -10
  36. package/src/components/atoms/DXLink/DXLink.vue +59 -3
  37. package/src/components/atoms/DXList/DXList.stories.js +76 -1
  38. package/src/components/atoms/DXLoader/DXLoader.stories.js +75 -1
  39. package/src/components/atoms/DXNav/DXNav.stories.js +236 -0
  40. package/src/components/atoms/DXNav/DXNav.vue +114 -0
  41. package/src/components/atoms/DXNav/index.js +2 -0
  42. package/src/components/atoms/DXProgress/DXProgress.stories.js +76 -1
  43. package/src/components/atoms/DXRadio/DXRadio.stories.js +85 -1
  44. package/src/components/atoms/DXSkeleton/DXSkeleton.stories.js +59 -1
  45. package/src/components/atoms/DXSlider/DXSlider.stories.js +89 -0
  46. package/src/components/atoms/DXSpacer/DXSpacer.stories.js +1 -1
  47. package/src/components/atoms/DXStack/DXStack.stories.js +1 -1
  48. package/src/components/atoms/DXStack/DXStack.vue +5 -2
  49. package/src/components/atoms/DXTags/DXTags.stories.js +77 -0
  50. package/src/components/atoms/DXText/DXText.stories.js +83 -1
  51. package/src/components/atoms/DXToast/DXToast.stories.js +64 -1
  52. package/src/components/atoms/DXToggle/DXToggle.stories.js +84 -1
  53. package/src/components/atoms/DXToggleButton/DXToggleButton.stories.js +78 -1
  54. package/src/components/atoms/DXTooltip/DXTooltip.stories.js +98 -1
  55. package/src/components/atoms/index.js +3 -0
  56. package/src/components/molecules/DXActionButtons/DXActionButtons.stories.js +280 -77
  57. package/src/components/molecules/DXActionButtons/DXActionButtons.vue +31 -31
  58. package/src/components/molecules/DXAlert/DXAlert.stories.js +199 -1
  59. package/src/components/molecules/DXAlert/DXAlert.vue +35 -13
  60. package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.stories.js +125 -1
  61. package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.vue +22 -18
  62. package/src/components/molecules/DXButtonGroup/DXButtonGroup.stories.js +193 -6
  63. package/src/components/molecules/DXButtonGroup/DXButtonGroup.vue +39 -3
  64. package/src/components/molecules/DXCloseButton/DXCloseButton.stories.js +64 -1
  65. package/src/components/molecules/DXComboBox/DXComboBox.stories.js +66 -0
  66. package/src/components/molecules/DXCopyField/DXCopyField.stories.js +128 -1
  67. package/src/components/molecules/DXCopyField/DXCopyField.vue +60 -7
  68. package/src/components/molecules/DXDataFilter/DXDataFilter.vue +8 -6
  69. package/src/components/molecules/DXDatePicker/DXDatePicker.stories.js +58 -0
  70. package/src/components/molecules/DXFileUpload/DXFileUpload.stories.js +66 -0
  71. package/src/components/molecules/DXFilterGroup/DXFilterGroup.stories.js +61 -0
  72. package/src/components/molecules/DXFormControl/DXFormControl.stories.js +76 -0
  73. package/src/components/molecules/DXFormControl/DXFormControl.vue +9 -8
  74. package/src/components/molecules/DXInput/DXInput.stories.js +100 -1
  75. package/src/components/molecules/DXInputGroup/DXInputGroup.stories.js +89 -1
  76. package/src/components/molecules/DXInputMask/DXInputMask.stories.js +67 -0
  77. package/src/components/molecules/DXMenu/DXMenu.stories.js +111 -4
  78. package/src/components/molecules/DXMenu/DXMenu.vue +18 -5
  79. package/src/components/molecules/DXMenu/README.md +1 -1
  80. package/src/components/molecules/DXPagination/DXPagination.stories.js +105 -2
  81. package/src/components/molecules/DXPagination/DXPagination.vue +18 -33
  82. package/src/components/molecules/DXPasswordInput/DXPasswordInput.stories.js +67 -1
  83. package/src/components/molecules/DXRadioCard/DXRadioCard.stories.js +64 -0
  84. package/src/components/molecules/DXRadioGroup/DXRadioGroup.stories.js +84 -0
  85. package/src/components/molecules/DXRating/DXRating.stories.js +3 -2
  86. package/src/components/molecules/DXSearchBar/DXSearchBar.stories.js +1 -1
  87. package/src/components/molecules/DXSearchBar/DXSearchBar.vue +16 -12
  88. package/src/components/molecules/DXSearchSelect/DXSearchSelect.stories.js +71 -0
  89. package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.stories.js +74 -0
  90. package/src/components/molecules/DXSelect/DXSelect.stories.js +92 -1
  91. package/src/components/molecules/DXStatCard/DXStatCard.stories.js +1 -1
  92. package/src/components/molecules/DXStatCard/DXStatCard.vue +30 -26
  93. package/src/components/molecules/DXTableFiltersPanel/index.js +3 -0
  94. package/src/components/molecules/DXTablePagination/DXTablePagination.stories.js +67 -0
  95. package/src/components/molecules/DXTableToolbar/DXTableToolbar.stories.js +71 -0
  96. package/src/components/molecules/DXTextarea/DXTextarea.stories.js +87 -1
  97. package/src/components/molecules/DXTimePicker/DXTimePicker.stories.js +1 -1
  98. package/src/components/molecules/DXValidationIcon/DXValidationIcon.stories.js +59 -1
  99. package/src/components/molecules/index.js +0 -1
  100. package/src/components/organisms/DXAccordion/DXAccordion.stories.js +75 -0
  101. package/src/components/organisms/DXAppLayout/DXAppLayout.stories.js +27 -25
  102. package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.stories.js +0 -2
  103. package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.vue +5 -8
  104. package/src/components/{molecules → organisms}/DXBaseTable/DXBaseTable.stories.js +78 -1
  105. package/src/components/{molecules → organisms}/DXBaseTable/DXBaseTable.vue +2 -2
  106. package/src/components/organisms/DXChartContainer/DXChartContainer.stories.js +1 -1
  107. package/src/components/organisms/DXChartContainer/DXChartContainer.vue +10 -6
  108. package/src/components/organisms/DXChatInterface/DXChatInterface.stories.js +1 -1
  109. package/src/components/organisms/DXChatInterface/DXChatInterface.vue +6 -4
  110. package/src/components/organisms/DXCommentSection/DXCommentSection.stories.js +1 -1
  111. package/src/components/organisms/DXCommentSection/DXCommentSection.vue +7 -6
  112. package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.stories.js +1 -1
  113. package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.vue +4 -2
  114. package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.stories.js +1 -1
  115. package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.vue +3 -2
  116. package/src/components/organisms/DXDataTable/DXDataTable.stories.js +1 -1
  117. package/src/components/organisms/DXDropdown/DXDropdown.stories.js +84 -1
  118. package/src/components/organisms/DXEmptyState/DXEmptyState.stories.js +64 -0
  119. package/src/components/organisms/DXEmptyState/DXEmptyState.vue +4 -2
  120. package/src/components/organisms/DXHeaderBar/DXHeaderBar.stories.js +409 -3
  121. package/src/components/organisms/DXHeaderBar/DXHeaderBar.vue +261 -52
  122. package/src/components/organisms/DXMediaGallery/DXMediaGallery.stories.js +1 -1
  123. package/src/components/organisms/DXMediaGallery/DXMediaGallery.vue +6 -4
  124. package/src/components/organisms/DXModal/DXModal.stories.js +93 -1
  125. package/src/components/organisms/DXModal/DXModal.vue +3 -2
  126. package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.stories.js +1 -1
  127. package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.vue +2 -1
  128. package/src/components/organisms/DXReportGenerator/DXReportGenerator.vue +4 -3
  129. package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.vue +11 -8
  130. package/src/components/organisms/DXSidebar/DXSidebar.stories.js +1 -1
  131. package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.stories.js +104 -1
  132. package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.vue +14 -4
  133. package/src/components/organisms/DXSidebarMenu/README.md +3 -3
  134. package/src/components/organisms/DXTable/DXTable.stories.js +138 -11
  135. package/src/components/organisms/DXTable/DXTable.vue +1 -1
  136. package/src/components/organisms/DXTabs/DXTabs.stories.js +91 -1
  137. package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.stories.js +1 -1
  138. package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.vue +20 -18
  139. package/src/components/organisms/index.js +1 -0
  140. package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.stories.js +1 -1
  141. package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.stories.js +1 -1
  142. package/src/components/utilities/DXObserver/DXObserver.stories.js +1 -1
  143. package/src/components/utilities/DXPortal/DXPortal.stories.js +1 -1
  144. package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.stories.js +2 -2
  145. package/src/components/utilities/DXThemeProvider/DXThemeProvider.stories.js +1 -1
  146. package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.stories.js +1 -1
  147. package/src/composables/useSize.js +8 -1
  148. /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 = {
@@ -4,7 +4,7 @@ import DXTimePicker from './DXTimePicker.vue';
4
4
  export default {
5
5
  title: 'Molecules/DXTimePicker',
6
6
  component: DXTimePicker,
7
- tags: ['autodocs'],
7
+ tags: ['autodocs', 'category:form'],
8
8
  parameters: {
9
9
  docs: {
10
10
  description: {
@@ -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
- <h1 class="text-2xl font-bold mb-4">Добро пожаловать</h1>
269
- <p class="text-slate-600">Это основной контент страницы.</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
- <h1 class="text-2xl font-bold mb-4">Дашборд</h1>
339
- <p class="text-slate-600">Основной контент страницы.</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
- <h1 class="text-2xl font-bold mb-4">Overlay Mode</h1>
377
- <p class="text-slate-600">Сайдбар накладывается поверх контента.</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
- <h1 class="text-2xl font-bold mb-4">Push Mode</h1>
413
- <p class="text-slate-600">Сайдбар сдвигает контент вправо.</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
- <h1 class="text-2xl font-bold mb-4">Контент</h1>
449
- <p class="text-slate-600">Основной контент страницы.</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
- <h1 class="text-2xl font-bold mb-4">Коллапсируемый сайдбар</h1>
499
- <p class="text-slate-600">Используйте кнопку в header для переключения состояния сайдбара.</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
- <h1 class="text-2xl font-bold mb-4">Простое приложение</h1>
577
- <p class="text-slate-600">Это минималистичный layout без sidebar и footer.</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
- <h2 class="text-lg font-semibold mb-2">Левая панель</h2>
617
- <p class="text-sm text-slate-600">Здесь может быть редактор кода или файловый менеджер.</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
- <h2 class="text-lg font-semibold mb-2">Правая панель</h2>
623
- <p class="text-sm text-slate-600">Здесь может быть предпросмотр или результат.</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
- <h1 class="text-2xl font-bold mb-4">Дашборд</h1>
673
- <p class="text-slate-600">Контент дашборда.</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
- <h1 class="text-2xl font-bold mb-4">Аналитика</h1>
677
- <p class="text-slate-600">Контент аналитики.</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
- <h1 class="text-2xl font-bold mb-4">Настройки</h1>
681
- <p class="text-slate-600">Контент настроек.</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>
@@ -9,8 +9,6 @@ export default {
9
9
  docs: {
10
10
  description: {
11
11
  component: `
12
- # DXAuthenticationForm
13
-
14
12
  Готовая форма аутентификации (логин/регистрация) с валидацией и обработкой ошибок.
15
13
 
16
14
  ## Назначение
@@ -7,9 +7,9 @@
7
7
  <!-- Header -->
8
8
  <div v-if="showHeader || $slots.header" :class="headerClasses">
9
9
  <slot name="header">
10
- <h2 class="text-2xl font-bold text-slate-900 text-center">
10
+ <DXHeading level="2" size="2xl" weight="bold" color="default" align="center">
11
11
  {{ modeLabels[mode] }}
12
- </h2>
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({