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
@@ -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: 'Molecules/DXBaseTable',
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 '../../organisms/DXDropdown/DXDropdown.vue';
257
+ import DXDropdown from '../DXDropdown/DXDropdown.vue';
258
258
  import DXDropdownItem from '../../atoms/DXDropdownItem/DXDropdownItem.vue';
259
- import DXDropdownDivider from '../DXDropdownDivider/DXDropdownDivider.vue';
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
- <h3 v-if="title" class="text-lg font-semibold text-slate-900">
12
+ <DXHeading v-if="title" level="3" size="lg" weight="semibold" color="default">
13
13
  {{ title }}
14
- </h3>
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 class="text-sm">Используйте slot "chart" для вашей библиотеки графиков</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
- <span
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
- </span>
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
  /**
@@ -4,7 +4,7 @@ import DXChatInterface from './DXChatInterface.vue';
4
4
  export default {
5
5
  title: 'Organisms/DXChatInterface',
6
6
  component: DXChatInterface,
7
- tags: ['autodocs'],
7
+ tags: ['autodocs', 'category:feedback'],
8
8
  parameters: {
9
9
  docs: {
10
10
  description: {
@@ -16,12 +16,12 @@
16
16
  size="md"
17
17
  />
18
18
  <div>
19
- <h3 class="font-semibold text-slate-900">
19
+ <DXHeading level="3" weight="semibold" color="default">
20
20
  {{ chatInfo?.name || "Чат" }}
21
- </h3>
22
- <p v-if="chatInfo?.status" class="text-xs text-slate-500">
21
+ </DXHeading>
22
+ <DXText v-if="chatInfo?.status" tag="p" size="xs" color="muted">
23
23
  {{ chatInfo.status }}
24
- </p>
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,
@@ -4,7 +4,7 @@ import DXCommentSection from './DXCommentSection.vue';
4
4
  export default {
5
5
  title: 'Organisms/DXCommentSection',
6
6
  component: DXCommentSection,
7
- tags: ['autodocs'],
7
+ tags: ['autodocs', 'category:feedback'],
8
8
  parameters: {
9
9
  docs: {
10
10
  description: {
@@ -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 class="font-semibold text-slate-900">
45
+ <DXText tag="span" weight="semibold" color="default">
46
46
  {{ comment.author?.name || "Аноним" }}
47
- </span>
48
- <span class="text-xs text-slate-500">
47
+ </DXText>
48
+ <DXText tag="span" size="xs" color="muted">
49
49
  {{ formatDate(comment.date) }}
50
- </span>
50
+ </DXText>
51
51
  </div>
52
- <div class="text-sm text-slate-700 mb-2">
52
+ <DXText tag="div" size="sm" color="default" class="mb-2">
53
53
  {{ comment.text }}
54
- </div>
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
- <h3 class="font-semibold mb-2">{{ widget.title || `Виджет ${widget.id}` }}</h3>
35
- <p class="text-sm text-slate-600">Используйте slot widget для кастомного контента</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
- <h3 v-if="title" class="text-lg font-semibold text-slate-900">
14
+ <DXHeading v-if="title" level="3" size="lg" weight="semibold" color="default">
15
15
  {{ title }}
16
- </h3>
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";
@@ -4,7 +4,7 @@ import DXDataTable from './DXDataTable.vue';
4
4
  export default {
5
5
  title: 'Organisms/DXDataTable',
6
6
  component: DXDataTable,
7
- tags: ['autodocs'],
7
+ tags: ['autodocs', 'category:data-display'],
8
8
  parameters: {
9
9
  docs: {
10
10
  description: {
@@ -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 class="text-base font-semibold text-slate-900">{{ title }}</p>
12
- <p v-if="description" class="text-sm text-slate-600">{{ description }}</p>
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 },