dxd-style-code 0.1.7 → 0.1.9
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 +11974 -3725
- package/dist/dxd-style-code.umd.cjs +10 -1
- package/dist/style.css +1 -1
- package/package.json +14 -6
- package/src/components/atoms/DXAvatar/DXAvatar.stories.js +319 -0
- package/src/components/atoms/DXAvatar/DXAvatar.vue +167 -0
- package/src/components/atoms/DXAvatar/index.js +2 -0
- package/src/components/atoms/DXBackdrop/DXBackdrop.stories.js +341 -0
- package/src/components/atoms/DXBackdrop/DXBackdrop.vue +102 -0
- package/src/components/atoms/DXBackdrop/index.js +2 -0
- package/src/components/atoms/DXBadge/DXBadge.stories.js +239 -0
- package/src/components/atoms/DXBadge/DXBadge.vue +45 -0
- package/src/components/atoms/DXBadge/index.js +2 -0
- package/src/components/atoms/DXButton/DXButton.stories.js +178 -0
- package/src/components/atoms/DXButton/DXButton.vue +84 -0
- package/src/components/atoms/DXButton/index.js +2 -0
- package/src/components/atoms/DXCard/DXCard.stories.js +133 -0
- package/src/components/atoms/DXCard/DXCard.vue +46 -0
- package/src/components/atoms/DXCard/index.js +2 -0
- package/src/components/atoms/DXCheckbox/DXCheckbox.stories.js +294 -0
- package/src/components/atoms/DXCheckbox/DXCheckbox.vue +191 -0
- package/src/components/atoms/DXCheckbox/index.js +2 -0
- package/src/components/atoms/DXDivider/DXDivider.stories.js +135 -0
- package/src/components/atoms/DXDivider/DXDivider.vue +74 -0
- package/src/components/atoms/DXDivider/index.js +2 -0
- package/src/components/atoms/DXDropdownItem/DXDropdownItem.vue +116 -0
- package/src/components/atoms/DXDropdownItem/index.js +2 -0
- package/src/components/atoms/DXFormLabel/DXFormLabel.stories.js +194 -0
- package/src/components/atoms/DXFormLabel/DXFormLabel.vue +94 -0
- package/src/components/atoms/DXFormLabel/index.js +2 -0
- package/src/components/atoms/DXIcon/DXIcon.stories.js +156 -0
- package/src/components/atoms/DXIcon/DXIcon.vue +102 -0
- package/src/components/atoms/DXIcon/index.js +3 -0
- package/src/components/atoms/DXIconWrapper/DXIconWrapper.stories.js +237 -0
- package/src/components/atoms/DXIconWrapper/DXIconWrapper.vue +79 -0
- package/src/components/atoms/DXIconWrapper/index.js +2 -0
- package/src/components/atoms/DXInputAddon/DXInputAddon.stories.js +230 -0
- package/src/components/atoms/DXInputAddon/DXInputAddon.vue +64 -0
- package/src/components/atoms/DXInputAddon/index.js +2 -0
- package/src/components/atoms/DXLink/DXLink.stories.js +475 -0
- package/src/components/atoms/DXLink/DXLink.vue +229 -0
- package/src/components/atoms/DXLink/index.js +2 -0
- package/src/components/atoms/DXLoader/DXLoader.stories.js +280 -0
- package/src/components/atoms/DXLoader/DXLoader.vue +78 -0
- package/src/components/atoms/DXLoader/index.js +2 -0
- package/src/components/atoms/DXProgress/DXProgress.stories.js +312 -0
- package/src/components/atoms/DXProgress/DXProgress.vue +85 -0
- package/src/components/atoms/DXProgress/index.js +2 -0
- package/src/components/atoms/DXQuote/DXQuote.stories.js +255 -0
- package/src/components/atoms/DXQuote/DXQuote.vue +97 -0
- package/src/components/atoms/DXQuote/index.js +2 -0
- package/src/components/atoms/DXRadio/DXRadio.stories.js +277 -0
- package/src/components/atoms/DXRadio/DXRadio.vue +144 -0
- package/src/components/atoms/DXRadio/index.js +2 -0
- package/src/components/atoms/DXSkeleton/DXSkeleton.stories.js +50 -0
- package/src/components/atoms/DXSkeleton/DXSkeleton.vue +19 -0
- package/src/components/atoms/DXSkeleton/index.js +2 -0
- package/src/components/atoms/DXSlider/DXSlider.stories.js +522 -0
- package/src/components/atoms/DXSlider/DXSlider.vue +338 -0
- package/src/components/atoms/DXSlider/index.js +2 -0
- package/src/components/atoms/DXTags/DXTags.stories.js +206 -0
- package/src/components/atoms/DXTags/DXTags.vue +111 -0
- package/src/components/atoms/DXTags/index.js +2 -0
- package/src/components/atoms/DXToast/DXToast.stories.js +40 -0
- package/src/components/atoms/DXToast/DXToast.vue +32 -0
- package/src/components/atoms/DXToast/index.js +2 -0
- package/src/components/atoms/DXToggle/DXToggle.stories.js +143 -0
- package/src/components/atoms/DXToggle/DXToggle.vue +142 -0
- package/src/components/atoms/DXToggle/index.js +2 -0
- package/src/components/atoms/DXToggleButton/DXToggleButton.stories.js +513 -0
- package/src/components/atoms/DXToggleButton/DXToggleButton.vue +140 -0
- package/src/components/atoms/DXToggleButton/index.js +2 -0
- package/src/components/atoms/DXTooltip/DXTooltip.stories.js +243 -0
- package/src/components/atoms/DXTooltip/DXTooltip.vue +151 -0
- package/src/components/atoms/DXTooltip/index.js +2 -0
- package/src/components/atoms/index.js +24 -0
- package/src/components/index.js +20 -0
- package/src/components/layout/DXBox/DXBox.stories.js +238 -0
- package/src/components/layout/DXBox/DXBox.vue +198 -0
- package/src/components/layout/DXBox/index.js +2 -0
- package/src/components/layout/DXContainer/DXContainer.stories.js +147 -0
- package/src/components/layout/DXContainer/DXContainer.vue +83 -0
- package/src/components/layout/DXContainer/index.js +2 -0
- package/src/components/layout/DXFlex/DXFlex.stories.js +210 -0
- package/src/components/layout/DXFlex/DXFlex.vue +149 -0
- package/src/components/layout/DXFlex/index.js +2 -0
- package/src/components/layout/DXGrid/DXGrid.stories.js +238 -0
- package/src/components/layout/DXGrid/DXGrid.vue +167 -0
- package/src/components/layout/DXGrid/index.js +2 -0
- package/src/components/layout/DXSpacer/DXSpacer.stories.js +187 -0
- package/src/components/layout/DXSpacer/DXSpacer.vue +102 -0
- package/src/components/layout/DXSpacer/index.js +2 -0
- package/src/components/layout/DXStack/DXStack.stories.js +199 -0
- package/src/components/layout/DXStack/DXStack.vue +140 -0
- package/src/components/layout/DXStack/index.js +2 -0
- package/src/components/layout/index.js +8 -0
- package/src/components/molecules/DXActionButtons/DXActionButtons.stories.js +288 -0
- package/src/components/molecules/DXActionButtons/DXActionButtons.vue +106 -0
- package/src/components/molecules/DXActionButtons/index.js +2 -0
- package/src/components/molecules/DXAlert/DXAlert.stories.js +70 -0
- package/src/components/molecules/DXAlert/DXAlert.vue +116 -0
- package/src/components/molecules/DXAlert/index.js +2 -0
- package/src/components/molecules/DXBaseTable/DXBaseTable.stories.js +433 -0
- package/src/components/molecules/DXBaseTable/DXBaseTable.vue +459 -0
- package/src/components/molecules/DXBaseTable/index.js +4 -0
- package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.stories.js +227 -0
- package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.vue +96 -0
- package/src/components/molecules/DXBreadcrumb/index.js +2 -0
- package/src/components/molecules/DXButtonGroup/DXButtonGroup.stories.js +26 -0
- package/src/components/molecules/DXButtonGroup/DXButtonGroup.vue +78 -0
- package/src/components/molecules/DXButtonGroup/index.js +2 -0
- package/src/components/molecules/DXCloseButton/DXCloseButton.stories.js +53 -0
- package/src/components/molecules/DXCloseButton/DXCloseButton.vue +62 -0
- package/src/components/molecules/DXCloseButton/index.js +3 -0
- package/src/components/molecules/DXComboBox/DXComboBox.stories.js +62 -0
- package/src/components/molecules/DXComboBox/DXComboBox.vue +167 -0
- package/src/components/molecules/DXComboBox/index.js +2 -0
- package/src/components/molecules/DXCopyField/DXCopyField.stories.js +231 -0
- package/src/components/molecules/DXCopyField/DXCopyField.vue +75 -0
- package/src/components/molecules/DXCopyField/index.js +2 -0
- package/src/components/molecules/DXDataFilter/DXDataFilter.stories.js +275 -0
- package/src/components/molecules/DXDataFilter/DXDataFilter.vue +385 -0
- package/src/components/molecules/DXDataFilter/index.js +2 -0
- package/src/components/molecules/DXDatePicker/DXDatePicker.stories.js +42 -0
- package/src/components/molecules/DXDatePicker/DXDatePicker.vue +121 -0
- package/src/components/molecules/DXDatePicker/index.js +2 -0
- package/src/components/molecules/DXDropdownDivider/DXDropdownDivider.vue +30 -0
- package/src/components/molecules/DXDropdownDivider/index.js +2 -0
- package/src/components/molecules/DXFileUpload/DXFileUpload.stories.js +53 -0
- package/src/components/molecules/DXFileUpload/DXFileUpload.vue +199 -0
- package/src/components/molecules/DXFileUpload/index.js +2 -0
- package/src/components/molecules/DXFilterGroup/DXFilterGroup.stories.js +43 -0
- package/src/components/molecules/DXFilterGroup/DXFilterGroup.vue +43 -0
- package/src/components/molecules/DXFilterGroup/index.js +2 -0
- package/src/components/molecules/DXFormControl/DXFormControl.stories.js +69 -0
- package/src/components/molecules/DXFormControl/DXFormControl.vue +72 -0
- package/src/components/molecules/DXFormControl/index.js +2 -0
- package/src/components/molecules/DXInput/DXInput.stories.js +291 -0
- package/src/components/molecules/DXInput/DXInput.vue +156 -0
- package/src/components/molecules/DXInput/index.js +3 -0
- package/src/components/molecules/DXInputGroup/DXInputGroup.stories.js +228 -0
- package/src/components/molecules/DXInputGroup/DXInputGroup.vue +64 -0
- package/src/components/molecules/DXInputGroup/index.js +2 -0
- package/src/components/molecules/DXInputMask/DXInputMask.stories.js +53 -0
- package/src/components/molecules/DXInputMask/DXInputMask.vue +89 -0
- package/src/components/molecules/DXInputMask/index.js +2 -0
- package/src/components/molecules/DXMenu/DXMenu.stories.js +379 -0
- package/src/components/molecules/DXMenu/DXMenu.vue +331 -0
- package/src/components/molecules/DXMenu/README.md +479 -0
- package/src/components/molecules/DXMenu/index.js +2 -0
- package/src/components/molecules/DXPagination/DXPagination.stories.js +62 -0
- package/src/components/molecules/DXPagination/DXPagination.vue +123 -0
- package/src/components/molecules/DXPagination/index.js +2 -0
- package/src/components/molecules/DXPasswordInput/DXPasswordInput.stories.js +42 -0
- package/src/components/molecules/DXPasswordInput/DXPasswordInput.vue +74 -0
- package/src/components/molecules/DXPasswordInput/index.js +2 -0
- package/src/components/molecules/DXRadioCard/DXRadioCard.stories.js +60 -0
- package/src/components/molecules/DXRadioCard/DXRadioCard.vue +71 -0
- package/src/components/molecules/DXRadioCard/index.js +2 -0
- package/src/components/molecules/DXRadioGroup/DXRadioGroup.stories.js +297 -0
- package/src/components/molecules/DXRadioGroup/DXRadioGroup.vue +73 -0
- package/src/components/molecules/DXRadioGroup/index.js +2 -0
- package/src/components/molecules/DXRating/DXRating.stories.js +322 -0
- package/src/components/molecules/DXRating/DXRating.vue +402 -0
- package/src/components/molecules/DXRating/index.js +2 -0
- package/src/components/molecules/DXSearchBar/DXSearchBar.stories.js +357 -0
- package/src/components/molecules/DXSearchBar/DXSearchBar.vue +525 -0
- package/src/components/molecules/DXSearchBar/index.js +2 -0
- package/src/components/molecules/DXSearchSelect/DXSearchSelect.stories.js +50 -0
- package/src/components/molecules/DXSearchSelect/DXSearchSelect.vue +207 -0
- package/src/components/molecules/DXSearchSelect/index.js +2 -0
- package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.stories.js +326 -0
- package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.vue +116 -0
- package/src/components/molecules/DXSegmentedControl/index.js +2 -0
- package/src/components/molecules/DXSelect/DXSelect.stories.js +259 -0
- package/src/components/molecules/DXSelect/DXSelect.vue +149 -0
- package/src/components/molecules/DXSelect/index.js +3 -0
- package/src/components/molecules/DXStatCard/DXStatCard.stories.js +335 -0
- package/src/components/molecules/DXStatCard/DXStatCard.vue +309 -0
- package/src/components/molecules/DXStatCard/index.js +2 -0
- package/src/components/molecules/DXTableFiltersPanel/DXTableFiltersPanel.vue +72 -0
- package/src/components/molecules/DXTableFiltersPanel/index.js +7 -0
- package/src/components/molecules/DXTablePagination/DXTablePagination.stories.js +236 -0
- package/src/components/molecules/DXTablePagination/DXTablePagination.vue +93 -0
- package/src/components/molecules/DXTablePagination/index.js +2 -0
- package/src/components/molecules/DXTableToolbar/DXTableToolbar.stories.js +271 -0
- package/src/components/molecules/DXTableToolbar/DXTableToolbar.vue +102 -0
- package/src/components/molecules/DXTableToolbar/index.js +2 -0
- package/src/components/molecules/DXTextarea/DXTextarea.stories.js +239 -0
- package/src/components/molecules/DXTextarea/DXTextarea.vue +158 -0
- package/src/components/molecules/DXTextarea/index.js +3 -0
- package/src/components/molecules/DXTimePicker/DXTimePicker.stories.js +282 -0
- package/src/components/molecules/DXTimePicker/DXTimePicker.vue +640 -0
- package/src/components/molecules/DXTimePicker/index.js +2 -0
- package/src/components/molecules/DXValidationIcon/DXValidationIcon.stories.js +60 -0
- package/src/components/molecules/DXValidationIcon/DXValidationIcon.vue +53 -0
- package/src/components/molecules/DXValidationIcon/index.js +3 -0
- package/src/components/molecules/index.js +34 -0
- package/src/components/organisms/DXAccordion/DXAccordion.stories.js +33 -0
- package/src/components/organisms/DXAccordion/DXAccordion.vue +104 -0
- package/src/components/organisms/DXAccordion/index.js +2 -0
- package/src/components/organisms/DXAppLayout/DXAppLayout.stories.js +689 -0
- package/src/components/organisms/DXAppLayout/DXAppLayout.vue +460 -0
- package/src/components/organisms/DXAppLayout/index.js +2 -0
- package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.stories.js +232 -0
- package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.vue +458 -0
- package/src/components/organisms/DXAuthenticationForm/index.js +2 -0
- package/src/components/organisms/DXChartContainer/DXChartContainer.stories.js +286 -0
- package/src/components/organisms/DXChartContainer/DXChartContainer.vue +273 -0
- package/src/components/organisms/DXChartContainer/index.js +2 -0
- package/src/components/organisms/DXChatInterface/DXChatInterface.stories.js +164 -0
- package/src/components/organisms/DXChatInterface/DXChatInterface.vue +583 -0
- package/src/components/organisms/DXChatInterface/index.js +2 -0
- package/src/components/organisms/DXCommentSection/DXCommentSection.stories.js +173 -0
- package/src/components/organisms/DXCommentSection/DXCommentSection.vue +487 -0
- package/src/components/organisms/DXCommentSection/index.js +2 -0
- package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.stories.js +331 -0
- package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.vue +309 -0
- package/src/components/organisms/DXDashboardGrid/index.js +2 -0
- package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.stories.js +271 -0
- package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.vue +260 -0
- package/src/components/organisms/DXDashboardWidget/index.js +2 -0
- package/src/components/organisms/DXDataTable/DXDataTable.stories.js +247 -0
- package/src/components/organisms/DXDataTable/DXDataTable.vue +496 -0
- package/src/components/organisms/DXDataTable/index.js +2 -0
- package/src/components/organisms/DXDropdown/DXDropdown.stories.js +795 -0
- package/src/components/organisms/DXDropdown/DXDropdown.vue +238 -0
- package/src/components/organisms/DXDropdown/index.js +2 -0
- package/src/components/organisms/DXEmptyState/DXEmptyState.stories.js +37 -0
- package/src/components/organisms/DXEmptyState/DXEmptyState.vue +41 -0
- package/src/components/organisms/DXEmptyState/index.js +2 -0
- package/src/components/organisms/DXFormWizard/DXFormWizard.stories.js +378 -0
- package/src/components/organisms/DXFormWizard/DXFormWizard.vue +578 -0
- package/src/components/organisms/DXFormWizard/index.js +2 -0
- package/src/components/organisms/DXHeaderBar/DXHeaderBar.stories.js +448 -0
- package/src/components/organisms/DXHeaderBar/DXHeaderBar.vue +190 -0
- package/src/components/organisms/DXHeaderBar/index.js +2 -0
- package/src/components/organisms/DXMediaGallery/DXMediaGallery.stories.js +347 -0
- package/src/components/organisms/DXMediaGallery/DXMediaGallery.vue +422 -0
- package/src/components/organisms/DXMediaGallery/index.js +2 -0
- package/src/components/organisms/DXModal/DXModal.stories.js +138 -0
- package/src/components/organisms/DXModal/DXModal.vue +213 -0
- package/src/components/organisms/DXModal/index.js +2 -0
- package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.stories.js +183 -0
- package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.vue +566 -0
- package/src/components/organisms/DXNotificationCenter/index.js +2 -0
- package/src/components/organisms/DXReportGenerator/DXReportGenerator.stories.js +199 -0
- package/src/components/organisms/DXReportGenerator/DXReportGenerator.vue +344 -0
- package/src/components/organisms/DXReportGenerator/index.js +2 -0
- package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.stories.js +245 -0
- package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.vue +454 -0
- package/src/components/organisms/DXSettingsPanel/index.js +2 -0
- package/src/components/organisms/DXSidebar/DXSidebar.stories.js +316 -0
- package/src/components/organisms/DXSidebar/DXSidebar.vue +212 -0
- package/src/components/organisms/DXSidebar/index.js +2 -0
- package/src/components/organisms/DXSidebarMenu/DATA_STRUCTURE.md +299 -0
- package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.stories.js +729 -0
- package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.vue +257 -0
- package/src/components/organisms/DXSidebarMenu/DXSidebarMenuItem.vue +249 -0
- package/src/components/organisms/DXSidebarMenu/README.md +333 -0
- package/src/components/organisms/DXSidebarMenu/index.js +3 -0
- package/src/components/organisms/DXTable/DXTable.stories.js +550 -0
- package/src/components/organisms/DXTable/DXTable.vue +324 -0
- package/src/components/organisms/DXTable/index.js +2 -0
- package/src/components/organisms/DXTabs/DXTabs.stories.js +407 -0
- package/src/components/organisms/DXTabs/DXTabs.vue +301 -0
- package/src/components/organisms/DXTabs/index.js +2 -0
- package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.stories.js +194 -0
- package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.vue +403 -0
- package/src/components/organisms/DXUserProfileCard/index.js +2 -0
- package/src/components/organisms/DXWizard/DXWizard.stories.js +212 -0
- package/src/components/organisms/DXWizard/DXWizard.vue +615 -0
- package/src/components/organisms/DXWizard/index.js +2 -0
- package/src/components/organisms/index.js +25 -0
- package/src/components/typography/DXBlockquote/DXBlockquote.stories.js +33 -0
- package/src/components/typography/DXBlockquote/DXBlockquote.vue +44 -0
- package/src/components/typography/DXBlockquote/index.js +2 -0
- package/src/components/typography/DXCode/DXCode.stories.js +29 -0
- package/src/components/typography/DXCode/DXCode.vue +46 -0
- package/src/components/typography/DXCode/index.js +2 -0
- package/src/components/typography/DXHeading/DXHeading.stories.js +54 -0
- package/src/components/typography/DXHeading/DXHeading.vue +68 -0
- package/src/components/typography/DXHeading/index.js +2 -0
- package/src/components/typography/DXLabel/DXLabel.stories.js +40 -0
- package/src/components/typography/DXLabel/DXLabel.vue +49 -0
- package/src/components/typography/DXLabel/index.js +2 -0
- package/src/components/typography/DXList/DXList.stories.js +50 -0
- package/src/components/typography/DXList/DXList.vue +55 -0
- package/src/components/typography/DXList/index.js +2 -0
- package/src/components/typography/DXText/DXText.stories.js +47 -0
- package/src/components/typography/DXText/DXText.vue +67 -0
- package/src/components/typography/DXText/index.js +2 -0
- package/src/components/typography/index.js +8 -0
- package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.stories.js +335 -0
- package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.vue +207 -0
- package/src/components/utilities/DXAnimatePresence/index.js +2 -0
- package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.stories.js +321 -0
- package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.vue +158 -0
- package/src/components/utilities/DXBreakpointProvider/index.js +2 -0
- package/src/components/utilities/DXObserver/DXObserver.stories.js +324 -0
- package/src/components/utilities/DXObserver/DXObserver.vue +182 -0
- package/src/components/utilities/DXObserver/index.js +2 -0
- package/src/components/utilities/DXPortal/DXPortal.stories.js +267 -0
- package/src/components/utilities/DXPortal/DXPortal.vue +69 -0
- package/src/components/utilities/DXPortal/index.js +2 -0
- package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.stories.js +339 -0
- package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.vue +155 -0
- package/src/components/utilities/DXStaggeredAnimation/index.js +2 -0
- package/src/components/utilities/DXThemeProvider/DXThemeProvider.stories.js +327 -0
- package/src/components/utilities/DXThemeProvider/DXThemeProvider.vue +227 -0
- package/src/components/utilities/DXThemeProvider/index.js +2 -0
- package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.stories.js +368 -0
- package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.vue +212 -0
- package/src/components/utilities/DXTransitionGroup/index.js +2 -0
- package/src/components/utilities/index.js +9 -0
- package/src/composables/useAnimation.js +264 -0
- package/src/composables/useClassComposition.js +35 -0
- package/src/composables/useDataAttributes.js +83 -0
- package/src/composables/useMenu.js +88 -0
- package/src/composables/useSize.js +135 -0
- package/src/composables/useSpacing.js +37 -0
- package/src/composables/useTableColumns.js +88 -0
- package/src/composables/useTableData.js +82 -0
- package/src/composables/useTableFilter.js +158 -0
- package/src/composables/useTablePagination.js +89 -0
- package/src/composables/useTableSelection.js +77 -0
- package/src/composables/useTableSort.js +75 -0
- package/src/composables/useTabsScroll.js +88 -0
- package/src/composables/useVariant.js +700 -0
- package/src/index.js +86 -0
- package/src/styles/animations.css +171 -0
- package/src/styles/index.css +99 -0
- package/src/styles/tokens.js +123 -0
- package/src/utils/propTypes.js +77 -0
- package/src/utils/toggleButtonPresets.js +115 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
2
|
+
import DXUserProfileCard from './DXUserProfileCard.vue';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Organisms/DXUserProfileCard',
|
|
6
|
+
component: DXUserProfileCard,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {
|
|
9
|
+
docs: {
|
|
10
|
+
description: {
|
|
11
|
+
component: `
|
|
12
|
+
# DXUserProfileCard
|
|
13
|
+
|
|
14
|
+
Карточка профиля пользователя с информацией, действиями и настройками.
|
|
15
|
+
|
|
16
|
+
## Назначение
|
|
17
|
+
|
|
18
|
+
DXUserProfileCard предоставляет карточку профиля пользователя с отображением
|
|
19
|
+
аватара, основной информации, статистики, badges и действий.
|
|
20
|
+
|
|
21
|
+
## Архитектура
|
|
22
|
+
|
|
23
|
+
### Использует
|
|
24
|
+
- \`DXCard\` - как базовый контейнер
|
|
25
|
+
- \`DXAvatar\` - для аватара
|
|
26
|
+
- \`DXButton\` - для действий
|
|
27
|
+
- \`DXBadge\` - для badges
|
|
28
|
+
- \`useSize\` composable - для размеров
|
|
29
|
+
- \`useClassComposition\` composable - для стилей
|
|
30
|
+
|
|
31
|
+
### Используется в
|
|
32
|
+
- Профили пользователей
|
|
33
|
+
- Карточки в списках пользователей
|
|
34
|
+
- Виджеты профиля
|
|
35
|
+
- Панели управления профилем
|
|
36
|
+
|
|
37
|
+
## Внутренняя логика
|
|
38
|
+
|
|
39
|
+
### Размеры
|
|
40
|
+
Поддерживает размеры: sm, md, lg.
|
|
41
|
+
|
|
42
|
+
### Статистика
|
|
43
|
+
Отображает статистику пользователя (посты, подписчики, подписки и т.д.).
|
|
44
|
+
|
|
45
|
+
### Badges
|
|
46
|
+
Поддерживает отображение badges для статусов пользователя.
|
|
47
|
+
|
|
48
|
+
## Особенности
|
|
49
|
+
|
|
50
|
+
### Слоты
|
|
51
|
+
- **avatar**: Кастомный аватар
|
|
52
|
+
- **info**: Кастомная информация
|
|
53
|
+
- **stats**: Кастомная статистика
|
|
54
|
+
- **badges**: Кастомные badges
|
|
55
|
+
- **actions**: Кастомные действия
|
|
56
|
+
|
|
57
|
+
### Кликабельность
|
|
58
|
+
При \`clickable={true}\` карточка становится кликабельной.
|
|
59
|
+
`,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const defaultUser = {
|
|
66
|
+
id: 1,
|
|
67
|
+
name: 'John Doe',
|
|
68
|
+
role: 'Senior Developer',
|
|
69
|
+
bio: 'Passionate about web development and design',
|
|
70
|
+
avatar: '/avatar.jpg',
|
|
71
|
+
stats: {
|
|
72
|
+
posts: 125,
|
|
73
|
+
followers: 1250,
|
|
74
|
+
following: 340,
|
|
75
|
+
},
|
|
76
|
+
badges: [
|
|
77
|
+
{ id: 1, label: 'Верифицирован', variant: 'success' },
|
|
78
|
+
{ id: 2, label: 'Премиум', variant: 'info' },
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const Default = {
|
|
83
|
+
args: {
|
|
84
|
+
user: defaultUser,
|
|
85
|
+
showActions: true,
|
|
86
|
+
showStats: true,
|
|
87
|
+
},
|
|
88
|
+
parameters: {
|
|
89
|
+
docs: {
|
|
90
|
+
description: {
|
|
91
|
+
story: 'Базовая карточка профиля с аватаром, информацией, статистикой и действиями.',
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
render: (args) => ({
|
|
96
|
+
components: { DXUserProfileCard },
|
|
97
|
+
setup() {
|
|
98
|
+
return { args };
|
|
99
|
+
},
|
|
100
|
+
template: `
|
|
101
|
+
<div class="max-w-sm">
|
|
102
|
+
<DXUserProfileCard v-bind="args" />
|
|
103
|
+
</div>
|
|
104
|
+
`,
|
|
105
|
+
}),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export const WithActions = {
|
|
109
|
+
parameters: {
|
|
110
|
+
docs: {
|
|
111
|
+
description: {
|
|
112
|
+
story: 'Карточка профиля с действиями (написать, редактировать).',
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
render: () => ({
|
|
117
|
+
components: { DXUserProfileCard },
|
|
118
|
+
setup() {
|
|
119
|
+
const user = ref(defaultUser);
|
|
120
|
+
const handleEdit = () => {
|
|
121
|
+
console.log('Редактирование профиля');
|
|
122
|
+
};
|
|
123
|
+
const handleMessage = () => {
|
|
124
|
+
console.log('Отправка сообщения');
|
|
125
|
+
};
|
|
126
|
+
return { user, handleEdit, handleMessage };
|
|
127
|
+
},
|
|
128
|
+
template: `
|
|
129
|
+
<div class="max-w-sm">
|
|
130
|
+
<DXUserProfileCard
|
|
131
|
+
:user="user"
|
|
132
|
+
:show-actions="true"
|
|
133
|
+
:editable="true"
|
|
134
|
+
@edit="handleEdit"
|
|
135
|
+
@message="handleMessage"
|
|
136
|
+
/>
|
|
137
|
+
</div>
|
|
138
|
+
`,
|
|
139
|
+
}),
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
export const Clickable = {
|
|
143
|
+
parameters: {
|
|
144
|
+
docs: {
|
|
145
|
+
description: {
|
|
146
|
+
story: 'Кликабельная карточка профиля.',
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
render: () => ({
|
|
151
|
+
components: { DXUserProfileCard },
|
|
152
|
+
setup() {
|
|
153
|
+
const user = ref(defaultUser);
|
|
154
|
+
const handleClick = () => {
|
|
155
|
+
console.log('Клик по карточке:', user.value);
|
|
156
|
+
};
|
|
157
|
+
return { user, handleClick };
|
|
158
|
+
},
|
|
159
|
+
template: `
|
|
160
|
+
<div class="max-w-sm">
|
|
161
|
+
<DXUserProfileCard
|
|
162
|
+
:user="user"
|
|
163
|
+
:clickable="true"
|
|
164
|
+
@click="handleClick"
|
|
165
|
+
/>
|
|
166
|
+
</div>
|
|
167
|
+
`,
|
|
168
|
+
}),
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export const DifferentSizes = {
|
|
172
|
+
parameters: {
|
|
173
|
+
docs: {
|
|
174
|
+
description: {
|
|
175
|
+
story: 'Карточки профиля разных размеров.',
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
render: () => ({
|
|
180
|
+
components: { DXUserProfileCard },
|
|
181
|
+
setup() {
|
|
182
|
+
const user = ref(defaultUser);
|
|
183
|
+
return { user };
|
|
184
|
+
},
|
|
185
|
+
template: `
|
|
186
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
187
|
+
<DXUserProfileCard :user="user" size="sm" />
|
|
188
|
+
<DXUserProfileCard :user="user" size="md" />
|
|
189
|
+
<DXUserProfileCard :user="user" size="lg" />
|
|
190
|
+
</div>
|
|
191
|
+
`,
|
|
192
|
+
}),
|
|
193
|
+
};
|
|
194
|
+
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<DXCard
|
|
3
|
+
:class="cardClasses"
|
|
4
|
+
:variant="cardVariant"
|
|
5
|
+
:padding="padding"
|
|
6
|
+
data-component="DXUserProfileCard"
|
|
7
|
+
:data-size="size"
|
|
8
|
+
:data-clickable="clickable"
|
|
9
|
+
@click="handleClick"
|
|
10
|
+
>
|
|
11
|
+
<!-- Avatar -->
|
|
12
|
+
<div v-if="$slots.avatar || user?.avatar" :class="avatarClasses">
|
|
13
|
+
<slot name="avatar">
|
|
14
|
+
<DXAvatar
|
|
15
|
+
:src="user?.avatar"
|
|
16
|
+
:name="user?.name"
|
|
17
|
+
:size="avatarSize"
|
|
18
|
+
/>
|
|
19
|
+
</slot>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- Info -->
|
|
23
|
+
<div :class="infoClasses">
|
|
24
|
+
<slot name="info">
|
|
25
|
+
<h3 v-if="user?.name" :class="nameClasses">
|
|
26
|
+
{{ user.name }}
|
|
27
|
+
</h3>
|
|
28
|
+
<p v-if="user?.role" :class="roleClasses">
|
|
29
|
+
{{ user.role }}
|
|
30
|
+
</p>
|
|
31
|
+
<p v-if="user?.bio" :class="bioClasses">
|
|
32
|
+
{{ user.bio }}
|
|
33
|
+
</p>
|
|
34
|
+
</slot>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<!-- Stats -->
|
|
38
|
+
<div v-if="$slots.stats || (user?.stats && showStats)" :class="statsClasses">
|
|
39
|
+
<slot name="stats">
|
|
40
|
+
<div class="flex items-center gap-4">
|
|
41
|
+
<div
|
|
42
|
+
v-for="(value, key) in user?.stats"
|
|
43
|
+
:key="key"
|
|
44
|
+
class="text-center"
|
|
45
|
+
>
|
|
46
|
+
<div :class="statValueClasses">{{ value }}</div>
|
|
47
|
+
<div :class="statLabelClasses">{{ getStatLabel(key) }}</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</slot>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- Badges -->
|
|
54
|
+
<div v-if="$slots.badges || (user?.badges && user.badges.length > 0)" :class="badgesClasses">
|
|
55
|
+
<slot name="badges">
|
|
56
|
+
<div class="flex flex-wrap gap-2">
|
|
57
|
+
<DXBadge
|
|
58
|
+
v-for="badge in user?.badges"
|
|
59
|
+
:key="badge.id || badge"
|
|
60
|
+
:variant="badge.variant || 'default'"
|
|
61
|
+
:size="badgeSize"
|
|
62
|
+
>
|
|
63
|
+
{{ badge.label || badge }}
|
|
64
|
+
</DXBadge>
|
|
65
|
+
</div>
|
|
66
|
+
</slot>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<!-- Actions -->
|
|
70
|
+
<div v-if="($slots.actions || showActions) && !clickable" :class="actionsClasses">
|
|
71
|
+
<slot name="actions">
|
|
72
|
+
<DXButton
|
|
73
|
+
v-if="showActions"
|
|
74
|
+
variant="primary"
|
|
75
|
+
size="sm"
|
|
76
|
+
@click="handleMessage"
|
|
77
|
+
>
|
|
78
|
+
Написать
|
|
79
|
+
</DXButton>
|
|
80
|
+
<DXButton
|
|
81
|
+
v-if="showActions && editable"
|
|
82
|
+
variant="ghost"
|
|
83
|
+
size="sm"
|
|
84
|
+
@click="handleEdit"
|
|
85
|
+
>
|
|
86
|
+
Редактировать
|
|
87
|
+
</DXButton>
|
|
88
|
+
</slot>
|
|
89
|
+
</div>
|
|
90
|
+
</DXCard>
|
|
91
|
+
</template>
|
|
92
|
+
|
|
93
|
+
<script setup>
|
|
94
|
+
import { computed } from "vue";
|
|
95
|
+
import { useClassComposition } from "@/composables/useClassComposition";
|
|
96
|
+
import { useSize } from "@/composables/useSize";
|
|
97
|
+
import DXCard from "../../atoms/DXCard/DXCard.vue";
|
|
98
|
+
import DXAvatar from "../../atoms/DXAvatar/DXAvatar.vue";
|
|
99
|
+
import DXButton from "../../atoms/DXButton/DXButton.vue";
|
|
100
|
+
import DXBadge from "../../atoms/DXBadge/DXBadge.vue";
|
|
101
|
+
|
|
102
|
+
const props = defineProps({
|
|
103
|
+
/**
|
|
104
|
+
* Данные пользователя
|
|
105
|
+
* Формат: { name, role?, bio?, avatar?, stats?, badges? }
|
|
106
|
+
*/
|
|
107
|
+
user: {
|
|
108
|
+
type: Object,
|
|
109
|
+
required: true,
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* Показывать действия
|
|
113
|
+
* @default true
|
|
114
|
+
*/
|
|
115
|
+
showActions: { type: Boolean, default: true },
|
|
116
|
+
/**
|
|
117
|
+
* Можно редактировать
|
|
118
|
+
* @default false
|
|
119
|
+
*/
|
|
120
|
+
editable: { type: Boolean, default: false },
|
|
121
|
+
/**
|
|
122
|
+
* Показывать статистику
|
|
123
|
+
* @default true
|
|
124
|
+
*/
|
|
125
|
+
showStats: { type: Boolean, default: true },
|
|
126
|
+
/**
|
|
127
|
+
* Размер карточки: sm | md | lg
|
|
128
|
+
* @default 'md'
|
|
129
|
+
*/
|
|
130
|
+
size: {
|
|
131
|
+
type: String,
|
|
132
|
+
default: "md",
|
|
133
|
+
validator: (v) => ["sm", "md", "lg"].includes(v),
|
|
134
|
+
},
|
|
135
|
+
/**
|
|
136
|
+
* Кликабельная карточка
|
|
137
|
+
* @default false
|
|
138
|
+
*/
|
|
139
|
+
clickable: { type: Boolean, default: false },
|
|
140
|
+
/**
|
|
141
|
+
* Вариант DXCard
|
|
142
|
+
* @default 'default'
|
|
143
|
+
*/
|
|
144
|
+
cardVariant: {
|
|
145
|
+
type: String,
|
|
146
|
+
default: "default",
|
|
147
|
+
validator: (v) => ["default", "bordered", "elevated", "flat"].includes(v),
|
|
148
|
+
},
|
|
149
|
+
/**
|
|
150
|
+
* Padding для DXCard
|
|
151
|
+
* @default 'md'
|
|
152
|
+
*/
|
|
153
|
+
padding: {
|
|
154
|
+
type: String,
|
|
155
|
+
default: "md",
|
|
156
|
+
validator: (v) => ["none", "xs", "sm", "md", "lg", "xl"].includes(v),
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
const emit = defineEmits(["click", "edit", "message"]);
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Размер аватара
|
|
164
|
+
*
|
|
165
|
+
* @description
|
|
166
|
+
* Определяет размер аватара в зависимости от размера карточки.
|
|
167
|
+
*
|
|
168
|
+
* @returns {'xs' | 'sm' | 'md' | 'lg' | 'xl'} Размер аватара
|
|
169
|
+
*/
|
|
170
|
+
const avatarSize = computed(() => {
|
|
171
|
+
const sizeMap = {
|
|
172
|
+
sm: "md",
|
|
173
|
+
md: "lg",
|
|
174
|
+
lg: "xl",
|
|
175
|
+
};
|
|
176
|
+
return sizeMap[props.size] || "lg";
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Размер badge
|
|
181
|
+
*
|
|
182
|
+
* @description
|
|
183
|
+
* Определяет размер badge в зависимости от размера карточки.
|
|
184
|
+
*
|
|
185
|
+
* @returns {'sm' | 'md'} Размер badge
|
|
186
|
+
*/
|
|
187
|
+
const badgeSize = computed(() => {
|
|
188
|
+
return props.size === "sm" ? "sm" : "md";
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Классы для карточки
|
|
193
|
+
*
|
|
194
|
+
* @description
|
|
195
|
+
* Базовые классы для карточки профиля.
|
|
196
|
+
*
|
|
197
|
+
* @returns {Array} Массив классов
|
|
198
|
+
*/
|
|
199
|
+
const cardClasses = computed(() =>
|
|
200
|
+
useClassComposition(
|
|
201
|
+
"w-full",
|
|
202
|
+
props.clickable ? "cursor-pointer hover:border-slate-300 transition-all" : ""
|
|
203
|
+
)
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Классы для аватара
|
|
208
|
+
*
|
|
209
|
+
* @description
|
|
210
|
+
* Классы для секции аватара.
|
|
211
|
+
*
|
|
212
|
+
* @returns {Array} Массив классов
|
|
213
|
+
*/
|
|
214
|
+
const avatarClasses = computed(() =>
|
|
215
|
+
useClassComposition("flex justify-center mb-4")
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Классы для информации
|
|
220
|
+
*
|
|
221
|
+
* @description
|
|
222
|
+
* Классы для секции информации о пользователе.
|
|
223
|
+
*
|
|
224
|
+
* @returns {Array} Массив классов
|
|
225
|
+
*/
|
|
226
|
+
const infoClasses = computed(() =>
|
|
227
|
+
useClassComposition("text-center mb-4")
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Классы для имени
|
|
232
|
+
*
|
|
233
|
+
* @description
|
|
234
|
+
* Классы для имени пользователя.
|
|
235
|
+
*
|
|
236
|
+
* @returns {string} Tailwind CSS классы
|
|
237
|
+
*/
|
|
238
|
+
const nameClasses = computed(() => {
|
|
239
|
+
const sizeMap = {
|
|
240
|
+
sm: "text-lg font-semibold text-slate-900",
|
|
241
|
+
md: "text-xl font-semibold text-slate-900",
|
|
242
|
+
lg: "text-2xl font-semibold text-slate-900",
|
|
243
|
+
};
|
|
244
|
+
return sizeMap[props.size] || sizeMap.md;
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Классы для роли
|
|
249
|
+
*
|
|
250
|
+
* @description
|
|
251
|
+
* Классы для роли пользователя.
|
|
252
|
+
*
|
|
253
|
+
* @returns {string} Tailwind CSS классы
|
|
254
|
+
*/
|
|
255
|
+
const roleClasses = computed(() => {
|
|
256
|
+
const sizeMap = {
|
|
257
|
+
sm: "text-sm text-slate-600 mt-1",
|
|
258
|
+
md: "text-base text-slate-600 mt-1",
|
|
259
|
+
lg: "text-lg text-slate-600 mt-1",
|
|
260
|
+
};
|
|
261
|
+
return sizeMap[props.size] || sizeMap.md;
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Классы для биографии
|
|
266
|
+
*
|
|
267
|
+
* @description
|
|
268
|
+
* Классы для биографии пользователя.
|
|
269
|
+
*
|
|
270
|
+
* @returns {string} Tailwind CSS классы
|
|
271
|
+
*/
|
|
272
|
+
const bioClasses = computed(() => {
|
|
273
|
+
const sizeMap = {
|
|
274
|
+
sm: "text-xs text-slate-500 mt-2",
|
|
275
|
+
md: "text-sm text-slate-500 mt-2",
|
|
276
|
+
lg: "text-base text-slate-500 mt-2",
|
|
277
|
+
};
|
|
278
|
+
return sizeMap[props.size] || sizeMap.md;
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Классы для статистики
|
|
283
|
+
*
|
|
284
|
+
* @description
|
|
285
|
+
* Классы для секции статистики.
|
|
286
|
+
*
|
|
287
|
+
* @returns {Array} Массив классов
|
|
288
|
+
*/
|
|
289
|
+
const statsClasses = computed(() =>
|
|
290
|
+
useClassComposition("mb-4 pt-4 border-t border-slate-200")
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Классы для значения статистики
|
|
295
|
+
*
|
|
296
|
+
* @description
|
|
297
|
+
* Классы для значения статистики.
|
|
298
|
+
*
|
|
299
|
+
* @returns {string} Tailwind CSS классы
|
|
300
|
+
*/
|
|
301
|
+
const statValueClasses = computed(() => {
|
|
302
|
+
const sizeMap = {
|
|
303
|
+
sm: "text-lg font-semibold text-slate-900",
|
|
304
|
+
md: "text-xl font-semibold text-slate-900",
|
|
305
|
+
lg: "text-2xl font-semibold text-slate-900",
|
|
306
|
+
};
|
|
307
|
+
return sizeMap[props.size] || sizeMap.md;
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Классы для метки статистики
|
|
312
|
+
*
|
|
313
|
+
* @description
|
|
314
|
+
* Классы для метки статистики.
|
|
315
|
+
*
|
|
316
|
+
* @returns {string} Tailwind CSS классы
|
|
317
|
+
*/
|
|
318
|
+
const statLabelClasses = computed(() => {
|
|
319
|
+
const sizeMap = {
|
|
320
|
+
sm: "text-xs text-slate-500 mt-1",
|
|
321
|
+
md: "text-sm text-slate-500 mt-1",
|
|
322
|
+
lg: "text-base text-slate-500 mt-1",
|
|
323
|
+
};
|
|
324
|
+
return sizeMap[props.size] || sizeMap.md;
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Классы для badges
|
|
329
|
+
*
|
|
330
|
+
* @description
|
|
331
|
+
* Классы для секции badges.
|
|
332
|
+
*
|
|
333
|
+
* @returns {Array} Массив классов
|
|
334
|
+
*/
|
|
335
|
+
const badgesClasses = computed(() =>
|
|
336
|
+
useClassComposition("mb-4 flex justify-center")
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Классы для действий
|
|
341
|
+
*
|
|
342
|
+
* @description
|
|
343
|
+
* Классы для секции действий.
|
|
344
|
+
*
|
|
345
|
+
* @returns {Array} Массив классов
|
|
346
|
+
*/
|
|
347
|
+
const actionsClasses = computed(() =>
|
|
348
|
+
useClassComposition("flex justify-center gap-2")
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Получение метки статистики
|
|
353
|
+
*
|
|
354
|
+
* @description
|
|
355
|
+
* Возвращает метку для ключа статистики.
|
|
356
|
+
*
|
|
357
|
+
* @param {string} key - Ключ статистики
|
|
358
|
+
* @returns {string} Метка
|
|
359
|
+
*/
|
|
360
|
+
function getStatLabel(key) {
|
|
361
|
+
const labels = {
|
|
362
|
+
posts: "Постов",
|
|
363
|
+
followers: "Подписчиков",
|
|
364
|
+
following: "Подписок",
|
|
365
|
+
views: "Просмотров",
|
|
366
|
+
likes: "Лайков",
|
|
367
|
+
};
|
|
368
|
+
return labels[key] || key;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Обработчик клика
|
|
373
|
+
*
|
|
374
|
+
* @description
|
|
375
|
+
* Эмитит событие клика по карточке.
|
|
376
|
+
*/
|
|
377
|
+
function handleClick() {
|
|
378
|
+
if (props.clickable) {
|
|
379
|
+
emit("click", props.user);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Обработчик редактирования
|
|
385
|
+
*
|
|
386
|
+
* @description
|
|
387
|
+
* Эмитит событие редактирования профиля.
|
|
388
|
+
*/
|
|
389
|
+
function handleEdit() {
|
|
390
|
+
emit("edit", props.user);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Обработчик сообщения
|
|
395
|
+
*
|
|
396
|
+
* @description
|
|
397
|
+
* Эмитит событие отправки сообщения.
|
|
398
|
+
*/
|
|
399
|
+
function handleMessage() {
|
|
400
|
+
emit("message", props.user);
|
|
401
|
+
}
|
|
402
|
+
</script>
|
|
403
|
+
|