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
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div :class="flexClasses" data-component="DXFlex">
2
+ <div :class="flexClasses" data-component="DXFlex" :data-height="height" :data-shrink="shrink">
3
3
  <slot />
4
4
  </div>
5
5
  </template>
@@ -22,6 +22,10 @@ const props = defineProps({
22
22
  gap: { type: String, default: "md" },
23
23
  /** Inline flex */
24
24
  inline: { type: Boolean, default: false },
25
+ /** Высота: full | auto | fit */
26
+ height: { type: String, default: null },
27
+ /** Flex shrink: 0 | 1 | auto */
28
+ shrink: { type: [String, Boolean], default: null },
25
29
  });
26
30
 
27
31
  const BASE_CLASSES = "";
@@ -125,12 +129,60 @@ const gapClass = computed(() => {
125
129
  return useSize(props.gap, 'spacing') || 'gap-4';
126
130
  });
127
131
 
132
+ /**
133
+ * Классы высоты
134
+ *
135
+ * @description
136
+ * Определяет высоту flex контейнера.
137
+ * Используется для растягивания контейнера на всю высоту родителя.
138
+ *
139
+ * @returns {string|null} Tailwind CSS класс для высоты или null
140
+ */
141
+ const heightClass = computed(() => {
142
+ if (!props.height) return null;
143
+
144
+ const heightClasses = {
145
+ full: "h-full",
146
+ auto: "h-auto",
147
+ fit: "h-fit",
148
+ };
149
+
150
+ return heightClasses[props.height] || null;
151
+ });
152
+
153
+ /**
154
+ * Классы flex-shrink
155
+ *
156
+ * @description
157
+ * Определяет поведение сжатия элемента в flex контейнере.
158
+ * Используется для предотвращения сжатия элементов (shrink-0) или управления им.
159
+ *
160
+ * @returns {string|null} Tailwind CSS класс для flex-shrink или null
161
+ */
162
+ const shrinkClass = computed(() => {
163
+ if (props.shrink === null || props.shrink === undefined) return null;
164
+
165
+ // Если передан boolean, true = shrink-0, false = shrink
166
+ if (typeof props.shrink === 'boolean') {
167
+ return props.shrink ? "shrink-0" : "shrink";
168
+ }
169
+
170
+ // Если передан string
171
+ const shrinkClasses = {
172
+ "0": "shrink-0",
173
+ "1": "shrink",
174
+ auto: "shrink",
175
+ };
176
+
177
+ return shrinkClasses[props.shrink] || null;
178
+ });
179
+
128
180
  /**
129
181
  * Все классы для flex компонента
130
182
  *
131
183
  * @description
132
184
  * Объединяет все классы flex контейнера (базовый класс, направление,
133
- * выравнивание, перенос, отступы) с использованием useClassComposition.
185
+ * выравнивание, перенос, отступы, высота, shrink) с использованием useClassComposition.
134
186
  *
135
187
  * @returns {Array} Массив классов для применения к элементу
136
188
  */
@@ -142,7 +194,9 @@ const flexClasses = computed(() =>
142
194
  justifyClass.value,
143
195
  alignClass.value,
144
196
  wrapClass.value,
145
- gapClass.value
197
+ gapClass.value,
198
+ heightClass.value,
199
+ shrinkClass.value
146
200
  )
147
201
  );
148
202
  </script>
@@ -3,7 +3,76 @@ import DXFormLabel from './DXFormLabel.vue';
3
3
  export default {
4
4
  title: 'Atoms/DXFormLabel',
5
5
  component: DXFormLabel,
6
- tags: ['autodocs'],
6
+ tags: ['autodocs', 'category:form'],
7
+ parameters: {
8
+ docs: {
9
+ description: {
10
+ component: `
11
+ # DXFormLabel
12
+
13
+ Компонент обертки для полей форм с поддержкой лейбла, ошибок, вспомогательного текста и счетчика символов.
14
+
15
+ ## Назначение
16
+
17
+ DXFormLabel предоставляет комплексную обертку для полей форм, объединяя лейбл, поле ввода,
18
+ сообщения об ошибках, вспомогательный текст, сообщения об успехе и счетчик символов в единый компонент.
19
+
20
+ ## Архитектура
21
+
22
+ ### Использует
23
+ - \`DXIcon\` - для иконок валидации (ошибка, успех)
24
+
25
+ ### Используется в
26
+ - \`DXInput\` - обертка для полей ввода
27
+ - \`DXSelect\` - обертка для выпадающих списков
28
+ - \`DXTextarea\` - обертка для многострочных полей
29
+ - Любые поля форм, требующие полную структуру с лейблом и сообщениями
30
+
31
+ ## Внутренняя логика
32
+
33
+ ### Структура
34
+ Компонент состоит из:
35
+ 1. **Лейбл** - отображается над полем (если указан \`label\`)
36
+ 2. **Счетчик символов** - отображается справа от лейбла (если \`showCount={true}\`)
37
+ 3. **Поле** - слот для input/textarea/select
38
+ 4. **Сообщение об ошибке** - отображается под полем (если указан \`error\`)
39
+ 5. **Вспомогательный текст** - отображается под полем (если нет ошибки и указан \`helper\`)
40
+ 6. **Сообщение об успехе** - отображается под полем (если нет ошибки и указан \`success\`)
41
+
42
+ ### Приоритет сообщений
43
+ Приоритет отображения сообщений:
44
+ 1. Ошибка (если есть) - всегда показывается
45
+ 2. Успех (если нет ошибки) - показывается вместо helper
46
+ 3. Helper (если нет ошибки и успеха) - показывается как вспомогательный текст
47
+
48
+ ### Счетчик символов
49
+ При \`showCount={true}\` и указанном \`maxLength\`:
50
+ - Отображается в формате "текущее / максимальное" (например, "150 / 500")
51
+ - Показывается справа от лейбла
52
+
53
+ ### Иконки валидации
54
+ При \`showValidationIcon={true}\` (по умолчанию):
55
+ - Иконка ошибки (ExclamationCircleIcon) для сообщений об ошибке
56
+ - Иконка успеха (CheckCircleIcon) для сообщений об успехе
57
+
58
+ ## Особенности
59
+
60
+ ### Обязательное поле
61
+ При \`required={true}\` автоматически добавляется красная звездочка (*) справа от лейбла.
62
+
63
+ ### Валидация
64
+ Компонент поддерживает три состояния валидации:
65
+ - **error** - ошибка (красный цвет, иконка)
66
+ - **success** - успех (зеленый цвет, иконка)
67
+ - **helper** - вспомогательный текст (серый цвет)
68
+
69
+ ### Слоты
70
+ - **default** - поле ввода (input/textarea/select)
71
+ - **label** - кастомный лейбл (если нужно)
72
+ `,
73
+ },
74
+ },
75
+ },
7
76
  argTypes: {
8
77
  label: {
9
78
  control: 'text',
@@ -3,7 +3,7 @@ import DXGrid from './DXGrid.vue';
3
3
  export default {
4
4
  title: 'Atoms/DXGrid',
5
5
  component: DXGrid,
6
- tags: ['autodocs'],
6
+ tags: ['autodocs', 'category:layout'],
7
7
  parameters: {
8
8
  docs: {
9
9
  description: {
@@ -3,7 +3,96 @@ import DXHeading from './DXHeading.vue';
3
3
  export default {
4
4
  title: 'Atoms/DXHeading',
5
5
  component: DXHeading,
6
- tags: ['autodocs'],
6
+ tags: ['autodocs', 'category:typography'],
7
+ parameters: {
8
+ docs: {
9
+ description: {
10
+ component: `
11
+ # DXHeading
12
+
13
+ Компонент заголовка с поддержкой уровней (h1-h6), размеров, весов и цветов.
14
+
15
+ ## Назначение
16
+
17
+ DXHeading предоставляет стандартизированный способ создания заголовков с настраиваемыми параметрами
18
+ типографики. Компонент автоматически рендерится как соответствующий HTML тег (h1-h6) для семантической
19
+ правильности и SEO.
20
+
21
+ ## Архитектура
22
+
23
+ ### Использует
24
+ - Динамический рендеринг HTML тегов - для семантической правильности
25
+ - \`useSize\` composable - для унификации размеров (опционально)
26
+
27
+ ### Используется в
28
+ - Заголовки страниц и разделов
29
+ - Заголовки карточек
30
+ - Заголовки форм
31
+ - Любые места, требующие семантических заголовков
32
+
33
+ ## Внутренняя логика
34
+
35
+ ### Уровни заголовков
36
+ Поддерживает 6 уровней через \`level\` prop:
37
+ - **1** - h1 (самый важный, самый крупный)
38
+ - **2** - h2
39
+ - **3** - h3
40
+ - **4** - h4
41
+ - **5** - h5
42
+ - **6** - h6 (наименее важный, самый маленький)
43
+
44
+ ### Размеры
45
+ Поддерживает 8 размеров (независимо от level):
46
+ - **xs** - очень маленький
47
+ - **sm** - маленький
48
+ - **md** - средний
49
+ - **lg** - большой
50
+ - **xl** - очень большой
51
+ - **2xl** - extra large
52
+ - **3xl** - 3x large
53
+ - **4xl** - 4x large
54
+
55
+ ### Веса шрифта
56
+ Поддерживает 4 веса:
57
+ - **normal** - обычный вес
58
+ - **medium** - средний вес
59
+ - **semibold** - полужирный (по умолчанию для заголовков)
60
+ - **bold** - жирный
61
+
62
+ ### Цвета
63
+ Поддерживает 6 цветовых вариантов:
64
+ - **default** - цвет по умолчанию (text-slate-900)
65
+ - **muted** - приглушенный цвет (text-slate-600)
66
+ - **primary** - основной цвет
67
+ - **success** - зеленый цвет
68
+ - **warning** - желтый цвет
69
+ - **danger** - красный цвет
70
+
71
+ ## Особенности
72
+
73
+ ### Семантика
74
+ Компонент автоматически рендерится как соответствующий HTML тег (h1-h6) на основе \`level\` prop:
75
+ - \`level={1}\` → \`<h1>\`
76
+ - \`level={2}\` → \`<h2>\`
77
+ - И так далее
78
+
79
+ Это важно для:
80
+ - SEO (поисковые системы понимают иерархию заголовков)
81
+ - Доступности (скринридеры используют заголовки для навигации)
82
+ - Семантической правильности HTML
83
+
84
+ ### Независимость level и size
85
+ Уровень заголовка (\`level\`) и его визуальный размер (\`size\`) независимы:
86
+ - Можно использовать h1 с маленьким размером
87
+ - Можно использовать h3 с большим размером
88
+ - Это позволяет разделять семантику и визуальное представление
89
+
90
+ ### Кастомные классы
91
+ Поддерживает \`class\` prop для добавления дополнительных CSS классов.
92
+ `,
93
+ },
94
+ },
95
+ },
7
96
  argTypes: {
8
97
  level: { control: { type: 'select' }, options: [1, 2, 3, 4, 5, 6] },
9
98
  size: { control: { type: 'select' }, options: ['xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl'] },
@@ -20,6 +20,80 @@ export default {
20
20
  title: 'Atoms/DXIcon',
21
21
  component: DXIcon,
22
22
  tags: ['autodocs'],
23
+ parameters: {
24
+ docs: {
25
+ description: {
26
+ component: `
27
+ # DXIcon
28
+
29
+ Компонент иконки для отображения Heroicons с поддержкой размеров и анимаций.
30
+
31
+ ## Назначение
32
+
33
+ DXIcon предоставляет стандартизированный способ отображения иконок из библиотеки Heroicons.
34
+ Компонент поддерживает различные размеры, анимации при наведении и интеграцию с group-hover эффектами.
35
+
36
+ ## Архитектура
37
+
38
+ ### Использует
39
+ - Heroicons компоненты - библиотека иконок (outline и solid варианты)
40
+ - \`useSize\` composable - для унификации размеров (xs, sm, md, lg, xl)
41
+ - \`useAnimation\` composable - для анимаций при hover
42
+
43
+ ### Используется в
44
+ - \`DXButton\` - иконки в кнопках
45
+ - \`DXInput\` - иконки в полях ввода
46
+ - \`DXMenu\` - иконки в меню
47
+ - \`DXBadge\` - иконки в бейджах
48
+ - \`DXAvatar\` - иконки fallback
49
+ - Любые места, требующие отображения иконок
50
+
51
+ ## Внутренняя логика
52
+
53
+ ### Размеры
54
+ Поддерживает 5 размеров:
55
+ - **xs** - очень маленький
56
+ - **sm** - маленький
57
+ - **md** - средний (по умолчанию)
58
+ - **lg** - большой
59
+ - **xl** - очень большой
60
+
61
+ ### Анимации
62
+ Поддерживает 4 типа анимаций при hover:
63
+ - **none** (по умолчанию) - без анимации
64
+ - **wiggle** - тряска (wiggle animation)
65
+ - **scale** - увеличение (scale 1.1)
66
+ - **rotate** - поворот на 90 градусов
67
+
68
+ ### Group Hover
69
+ При \`groupHover={true}\`:
70
+ - Анимация срабатывает при наведении на родительский элемент с классом \`group\`
71
+ - Полезно для анимации иконок в кнопках, ссылках и других интерактивных элементах
72
+
73
+ ## Особенности
74
+
75
+ ### Heroicons
76
+ Компонент работает с Heroicons компонентами:
77
+ - **Outline** - контурные иконки (24/outline)
78
+ - **Solid** - закрашенные иконки (24/solid)
79
+
80
+ ### Кастомные классы
81
+ Поддерживает \`class\` prop для добавления дополнительных CSS классов:
82
+ - Цвета (text-blue-500, text-rose-500 и т.д.)
83
+ - Позиционирование
84
+ - Другие стили
85
+
86
+ ### Динамический рендеринг
87
+ Использует \`<component :is="icon">\` для динамического рендеринга Heroicon компонента.
88
+
89
+ ### Производительность
90
+ - Минимальный overhead
91
+ - CSS анимации для плавности
92
+ - Transition для плавных переходов
93
+ `,
94
+ },
95
+ },
96
+ },
23
97
  argTypes: {
24
98
  size: {
25
99
  control: 'select',
@@ -5,6 +5,75 @@ export default {
5
5
  title: 'Atoms/DXIconWrapper',
6
6
  component: DXIconWrapper,
7
7
  tags: ['autodocs'],
8
+ parameters: {
9
+ docs: {
10
+ description: {
11
+ component: `
12
+ # DXIconWrapper
13
+
14
+ Компонент обертки для позиционирования иконок внутри полей ввода и других элементов.
15
+
16
+ ## Назначение
17
+
18
+ DXIconWrapper предоставляет стандартизированный способ позиционирования иконок внутри
19
+ полей ввода, textarea и других элементов. Компонент автоматически размещает иконку
20
+ слева или справа с правильными отступами и выравниванием.
21
+
22
+ ## Архитектура
23
+
24
+ ### Использует
25
+ - \`DXIcon\` - для отображения иконок
26
+ - \`useClassComposition\` composable - для объединения CSS классов
27
+ - \`useCustomDataAttributes\` composable - для data-атрибутов
28
+
29
+ ### Используется в
30
+ - \`DXInput\` - для иконок prefix/suffix
31
+ - \`DXTextarea\` - для иконок prefix/suffix
32
+ - \`DXSelect\` - для иконок prefix
33
+ - Любые элементы, требующие иконки внутри
34
+
35
+ ## Внутренняя логика
36
+
37
+ ### Позиционирование
38
+ - **left** (по умолчанию): Иконка слева (\`left-3\`)
39
+ - **right**: Иконка справа (\`right-3\`)
40
+
41
+ ### Вертикальное выравнивание
42
+ - **center** (по умолчанию): По центру (\`top-1/2 -translate-y-1/2\`)
43
+ - **top**: По верху (\`top-3\`) - полезно для textarea
44
+
45
+ ### Размеры иконок
46
+ Поддерживает 4 размера:
47
+ - **xs** - очень маленький
48
+ - **sm** - маленький (по умолчанию)
49
+ - **md** - средний
50
+ - **lg** - большой
51
+
52
+ ### Анимации
53
+ Поддерживает те же анимации, что и DXIcon:
54
+ - **none** (по умолчанию) - без анимации
55
+ - **wiggle** - тряска
56
+ - **scale** - масштабирование
57
+ - **rotate** - вращение
58
+
59
+ ## Особенности
60
+
61
+ ### Абсолютное позиционирование
62
+ Компонент использует абсолютное позиционирование, поэтому родительский элемент
63
+ должен иметь \`position: relative\`.
64
+
65
+ ### Pointer events
66
+ Использует \`pointer-events-none\` чтобы не блокировать взаимодействие с полем ввода.
67
+
68
+ ### Слоты
69
+ Поддерживает default slot для кастомных элементов вместо иконки.
70
+
71
+ ### Кастомные классы
72
+ Поддерживает \`iconClass\` prop для добавления дополнительных CSS классов к иконке.
73
+ `,
74
+ },
75
+ },
76
+ },
8
77
  argTypes: {
9
78
  position: {
10
79
  control: 'select',