dxd-style-code 0.1.11 → 0.1.12
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 +2 -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
|
@@ -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
|
-
* выравнивание, перенос,
|
|
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,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',
|