dxd-style-code 0.1.7 → 0.1.8
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 +13 -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/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,286 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
2
|
+
import DXChartContainer from './DXChartContainer.vue';
|
|
3
|
+
import DXButton from '../../atoms/DXButton/DXButton.vue';
|
|
4
|
+
import DXSelect from '../../molecules/DXSelect/DXSelect.vue';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: 'Organisms/DXChartContainer',
|
|
8
|
+
component: DXChartContainer,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
parameters: {
|
|
11
|
+
docs: {
|
|
12
|
+
description: {
|
|
13
|
+
component: `
|
|
14
|
+
# DXChartContainer
|
|
15
|
+
|
|
16
|
+
Контейнер для графиков с легендой, контролами и настройками отображения.
|
|
17
|
+
|
|
18
|
+
## Назначение
|
|
19
|
+
|
|
20
|
+
DXChartContainer предоставляет UI-обертку для графиков различных библиотек (Chart.js, ApexCharts, ECharts и т.д.).
|
|
21
|
+
Включает легенду, контролы и структуру для размещения графика.
|
|
22
|
+
|
|
23
|
+
## Архитектура
|
|
24
|
+
|
|
25
|
+
### Использует
|
|
26
|
+
- \`DXCard\` - как базовый контейнер
|
|
27
|
+
- \`DXSelect\` - для выбора типа графика
|
|
28
|
+
- \`DXButton\` - для контролов
|
|
29
|
+
- \`useClassComposition\` composable - для стилей
|
|
30
|
+
- \`useSpacing\` composable - для отступов
|
|
31
|
+
|
|
32
|
+
### Используется в
|
|
33
|
+
- \`DXDashboardWidget\` - для виджетов с графиками
|
|
34
|
+
- Отчеты с графиками
|
|
35
|
+
- Дашборды с аналитикой
|
|
36
|
+
|
|
37
|
+
## Внутренняя логика
|
|
38
|
+
|
|
39
|
+
### Слоты
|
|
40
|
+
- **chart**: Основной слот для размещения графика (обязателен)
|
|
41
|
+
- **header**: Слот для кастомного заголовка
|
|
42
|
+
- **controls**: Слот для кастомных контролов
|
|
43
|
+
- **legend**: Слот для кастомной легенды
|
|
44
|
+
|
|
45
|
+
### Легенда
|
|
46
|
+
Легенда поддерживает переключение видимости серий через клик.
|
|
47
|
+
|
|
48
|
+
### Контролы
|
|
49
|
+
Можно добавить кастомные контролы через slot или использовать встроенный селект типов графиков.
|
|
50
|
+
|
|
51
|
+
## Особенности
|
|
52
|
+
|
|
53
|
+
### Независимость от библиотек
|
|
54
|
+
Компонент не зависит от конкретной библиотеки графиков. Пользователь сам подключает библиотеку в slot "chart".
|
|
55
|
+
|
|
56
|
+
### Гибкость
|
|
57
|
+
Все элементы (заголовок, контролы, легенда) можно кастомизировать через slots.
|
|
58
|
+
`,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
argTypes: {
|
|
63
|
+
type: {
|
|
64
|
+
control: 'text',
|
|
65
|
+
description: 'Тип графика (для информации, не влияет на рендеринг).',
|
|
66
|
+
table: {
|
|
67
|
+
type: { summary: 'string' },
|
|
68
|
+
defaultValue: { summary: 'line' },
|
|
69
|
+
category: 'Content',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
legend: {
|
|
73
|
+
control: 'boolean',
|
|
74
|
+
description: 'Показывать легенду.',
|
|
75
|
+
table: {
|
|
76
|
+
type: { summary: 'boolean' },
|
|
77
|
+
defaultValue: { summary: 'true' },
|
|
78
|
+
category: 'Display',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
controls: {
|
|
82
|
+
control: 'boolean',
|
|
83
|
+
description: 'Показывать контролы.',
|
|
84
|
+
table: {
|
|
85
|
+
type: { summary: 'boolean' },
|
|
86
|
+
defaultValue: { summary: 'false' },
|
|
87
|
+
category: 'Display',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
height: {
|
|
91
|
+
control: 'text',
|
|
92
|
+
description: 'Высота графика.',
|
|
93
|
+
table: {
|
|
94
|
+
type: { summary: 'string' },
|
|
95
|
+
defaultValue: { summary: '400px' },
|
|
96
|
+
category: 'Display',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export const Default = {
|
|
103
|
+
args: {
|
|
104
|
+
title: 'График продаж',
|
|
105
|
+
legend: true,
|
|
106
|
+
controls: false,
|
|
107
|
+
},
|
|
108
|
+
parameters: {
|
|
109
|
+
docs: {
|
|
110
|
+
description: {
|
|
111
|
+
story: 'Базовый контейнер графика с заголовком и легендой. Используйте slot "chart" для вашей библиотеки графиков.',
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
render: (args) => ({
|
|
116
|
+
components: { DXChartContainer },
|
|
117
|
+
setup() {
|
|
118
|
+
const legendData = ref([
|
|
119
|
+
{ label: 'Продажи', color: 'bg-blue-500', visible: true },
|
|
120
|
+
{ label: 'Затраты', color: 'bg-red-500', visible: true },
|
|
121
|
+
]);
|
|
122
|
+
|
|
123
|
+
return { args, legendData };
|
|
124
|
+
},
|
|
125
|
+
template: `
|
|
126
|
+
<DXChartContainer v-bind="args" :legend-data="legendData">
|
|
127
|
+
<template #chart>
|
|
128
|
+
<div class="flex items-center justify-center h-full bg-slate-50 rounded-lg border-2 border-dashed border-slate-300">
|
|
129
|
+
<p class="text-slate-500 text-sm">Ваш график здесь</p>
|
|
130
|
+
</div>
|
|
131
|
+
</template>
|
|
132
|
+
</DXChartContainer>
|
|
133
|
+
`,
|
|
134
|
+
}),
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const WithControls = {
|
|
138
|
+
parameters: {
|
|
139
|
+
docs: {
|
|
140
|
+
description: {
|
|
141
|
+
story: 'Контейнер с контролами для выбора типа графика.',
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
render: () => ({
|
|
146
|
+
components: { DXChartContainer, DXSelect, DXButton },
|
|
147
|
+
setup() {
|
|
148
|
+
const chartType = ref('line');
|
|
149
|
+
const chartTypes = ref([
|
|
150
|
+
{ value: 'line', label: 'Линейный' },
|
|
151
|
+
{ value: 'bar', label: 'Столбчатый' },
|
|
152
|
+
{ value: 'pie', label: 'Круговой' },
|
|
153
|
+
]);
|
|
154
|
+
|
|
155
|
+
const handleChartTypeChange = (newType) => {
|
|
156
|
+
console.log('Тип графика изменен:', newType);
|
|
157
|
+
chartType.value = newType;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const handleExport = () => {
|
|
161
|
+
console.log('Экспорт графика');
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
return { chartType, chartTypes, handleChartTypeChange, handleExport };
|
|
165
|
+
},
|
|
166
|
+
template: `
|
|
167
|
+
<DXChartContainer
|
|
168
|
+
title="График продаж"
|
|
169
|
+
:type="chartType"
|
|
170
|
+
:controls="true"
|
|
171
|
+
:chart-types="chartTypes"
|
|
172
|
+
@chart-type-change="handleChartTypeChange"
|
|
173
|
+
@export="handleExport"
|
|
174
|
+
>
|
|
175
|
+
<template #chart>
|
|
176
|
+
<div class="flex items-center justify-center h-full bg-slate-50 rounded-lg border-2 border-dashed border-slate-300">
|
|
177
|
+
<p class="text-slate-500 text-sm">График типа: {{ chartType }}</p>
|
|
178
|
+
</div>
|
|
179
|
+
</template>
|
|
180
|
+
<template #controls>
|
|
181
|
+
<DXButton variant="ghost" size="sm" @click="handleExport">
|
|
182
|
+
Экспорт
|
|
183
|
+
</DXButton>
|
|
184
|
+
</template>
|
|
185
|
+
</DXChartContainer>
|
|
186
|
+
`,
|
|
187
|
+
}),
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
export const WithLegend = {
|
|
191
|
+
parameters: {
|
|
192
|
+
docs: {
|
|
193
|
+
description: {
|
|
194
|
+
story: 'Контейнер с интерактивной легендой. Клик по элементу легенды переключает его видимость.',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
render: () => ({
|
|
199
|
+
components: { DXChartContainer },
|
|
200
|
+
setup() {
|
|
201
|
+
const legendData = ref([
|
|
202
|
+
{ label: 'Продажи', color: 'bg-blue-500', visible: true },
|
|
203
|
+
{ label: 'Затраты', color: 'bg-red-500', visible: true },
|
|
204
|
+
{ label: 'Прибыль', color: 'bg-green-500', visible: true },
|
|
205
|
+
]);
|
|
206
|
+
|
|
207
|
+
const handleLegendToggle = ({ index, visible }) => {
|
|
208
|
+
console.log('Легенда переключена:', index, visible);
|
|
209
|
+
legendData.value[index].visible = visible;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
return { legendData, handleLegendToggle };
|
|
213
|
+
},
|
|
214
|
+
template: `
|
|
215
|
+
<DXChartContainer
|
|
216
|
+
title="График продаж"
|
|
217
|
+
:legend="true"
|
|
218
|
+
:legend-data="legendData"
|
|
219
|
+
@legend-toggle="handleLegendToggle"
|
|
220
|
+
>
|
|
221
|
+
<template #chart>
|
|
222
|
+
<div class="flex items-center justify-center h-full bg-slate-50 rounded-lg border-2 border-dashed border-slate-300">
|
|
223
|
+
<p class="text-slate-500 text-sm">График с легендой</p>
|
|
224
|
+
</div>
|
|
225
|
+
</template>
|
|
226
|
+
</DXChartContainer>
|
|
227
|
+
`,
|
|
228
|
+
}),
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
export const CustomHeight = {
|
|
232
|
+
parameters: {
|
|
233
|
+
docs: {
|
|
234
|
+
description: {
|
|
235
|
+
story: 'Контейнер с кастомной высотой графика.',
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
render: () => ({
|
|
240
|
+
components: { DXChartContainer },
|
|
241
|
+
setup() {
|
|
242
|
+
return {};
|
|
243
|
+
},
|
|
244
|
+
template: `
|
|
245
|
+
<DXChartContainer
|
|
246
|
+
title="Высокий график"
|
|
247
|
+
height="600px"
|
|
248
|
+
>
|
|
249
|
+
<template #chart>
|
|
250
|
+
<div class="flex items-center justify-center h-full bg-slate-50 rounded-lg border-2 border-dashed border-slate-300">
|
|
251
|
+
<p class="text-slate-500 text-sm">Высота: 600px</p>
|
|
252
|
+
</div>
|
|
253
|
+
</template>
|
|
254
|
+
</DXChartContainer>
|
|
255
|
+
`,
|
|
256
|
+
}),
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
export const WithoutLegend = {
|
|
260
|
+
parameters: {
|
|
261
|
+
docs: {
|
|
262
|
+
description: {
|
|
263
|
+
story: 'Контейнер без легенды.',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
render: () => ({
|
|
268
|
+
components: { DXChartContainer },
|
|
269
|
+
setup() {
|
|
270
|
+
return {};
|
|
271
|
+
},
|
|
272
|
+
template: `
|
|
273
|
+
<DXChartContainer
|
|
274
|
+
title="График без легенды"
|
|
275
|
+
:legend="false"
|
|
276
|
+
>
|
|
277
|
+
<template #chart>
|
|
278
|
+
<div class="flex items-center justify-center h-full bg-slate-50 rounded-lg border-2 border-dashed border-slate-300">
|
|
279
|
+
<p class="text-slate-500 text-sm">График без легенды</p>
|
|
280
|
+
</div>
|
|
281
|
+
</template>
|
|
282
|
+
</DXChartContainer>
|
|
283
|
+
`,
|
|
284
|
+
}),
|
|
285
|
+
};
|
|
286
|
+
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<DXCard
|
|
3
|
+
:class="containerClasses"
|
|
4
|
+
:variant="cardVariant"
|
|
5
|
+
:padding="padding"
|
|
6
|
+
data-component="DXChartContainer"
|
|
7
|
+
:data-type="type"
|
|
8
|
+
>
|
|
9
|
+
<!-- Заголовок -->
|
|
10
|
+
<div v-if="title || $slots.header" :class="headerClasses">
|
|
11
|
+
<slot name="header">
|
|
12
|
+
<h3 v-if="title" class="text-lg font-semibold text-slate-900">
|
|
13
|
+
{{ title }}
|
|
14
|
+
</h3>
|
|
15
|
+
</slot>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<!-- Контролы -->
|
|
19
|
+
<div v-if="controls || $slots.controls" :class="controlsClasses">
|
|
20
|
+
<slot name="controls">
|
|
21
|
+
<div class="flex items-center gap-2">
|
|
22
|
+
<DXSelect
|
|
23
|
+
v-if="chartTypes && chartTypes.length > 0"
|
|
24
|
+
v-model="internalChartType"
|
|
25
|
+
:options="chartTypes"
|
|
26
|
+
size="sm"
|
|
27
|
+
@update:model-value="handleChartTypeChange"
|
|
28
|
+
/>
|
|
29
|
+
</div>
|
|
30
|
+
</slot>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<!-- График -->
|
|
34
|
+
<div :class="chartClasses" :style="chartStyles">
|
|
35
|
+
<slot name="chart">
|
|
36
|
+
<div class="flex items-center justify-center h-full text-slate-400">
|
|
37
|
+
<p class="text-sm">Используйте slot "chart" для вашей библиотеки графиков</p>
|
|
38
|
+
</div>
|
|
39
|
+
</slot>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- Легенда -->
|
|
43
|
+
<div v-if="legend && (legendData || $slots.legend)" :class="legendClasses">
|
|
44
|
+
<slot name="legend">
|
|
45
|
+
<div class="flex flex-wrap items-center gap-4">
|
|
46
|
+
<div
|
|
47
|
+
v-for="(item, index) in legendData"
|
|
48
|
+
:key="index"
|
|
49
|
+
:class="legendItemClasses"
|
|
50
|
+
@click="toggleLegendItem(index)"
|
|
51
|
+
>
|
|
52
|
+
<div
|
|
53
|
+
:class="[
|
|
54
|
+
'w-3 h-3 rounded-full',
|
|
55
|
+
item.color || 'bg-slate-400',
|
|
56
|
+
{ 'opacity-50': !item.visible },
|
|
57
|
+
]"
|
|
58
|
+
></div>
|
|
59
|
+
<span
|
|
60
|
+
:class="[
|
|
61
|
+
'text-sm text-slate-700',
|
|
62
|
+
{ 'line-through opacity-50': !item.visible },
|
|
63
|
+
]"
|
|
64
|
+
>
|
|
65
|
+
{{ item.label }}
|
|
66
|
+
</span>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</slot>
|
|
70
|
+
</div>
|
|
71
|
+
</DXCard>
|
|
72
|
+
</template>
|
|
73
|
+
|
|
74
|
+
<script setup>
|
|
75
|
+
import { ref, computed, watch } from "vue";
|
|
76
|
+
import { useClassComposition } from "@/composables/useClassComposition";
|
|
77
|
+
import { useSpacing } from "@/composables/useSpacing";
|
|
78
|
+
import DXCard from "../../atoms/DXCard/DXCard.vue";
|
|
79
|
+
import DXSelect from "../../molecules/DXSelect/DXSelect.vue";
|
|
80
|
+
|
|
81
|
+
const props = defineProps({
|
|
82
|
+
/**
|
|
83
|
+
* Тип графика (для информации, не влияет на рендеринг)
|
|
84
|
+
*/
|
|
85
|
+
type: { type: String, default: "line" },
|
|
86
|
+
/**
|
|
87
|
+
* Данные графика (передаются в slot для использования библиотекой)
|
|
88
|
+
*/
|
|
89
|
+
data: { type: Object, default: () => ({}) },
|
|
90
|
+
/**
|
|
91
|
+
* Опции графика (передаются в slot для использования библиотекой)
|
|
92
|
+
*/
|
|
93
|
+
options: { type: Object, default: () => ({}) },
|
|
94
|
+
/**
|
|
95
|
+
* Заголовок графика
|
|
96
|
+
*/
|
|
97
|
+
title: { type: String, default: "" },
|
|
98
|
+
/**
|
|
99
|
+
* Показывать легенду
|
|
100
|
+
* @default true
|
|
101
|
+
*/
|
|
102
|
+
legend: { type: Boolean, default: true },
|
|
103
|
+
/**
|
|
104
|
+
* Данные легенды
|
|
105
|
+
* Формат: [{ label, color, visible }]
|
|
106
|
+
*/
|
|
107
|
+
legendData: {
|
|
108
|
+
type: Array,
|
|
109
|
+
default: () => [],
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* Показывать контролы
|
|
113
|
+
* @default false
|
|
114
|
+
*/
|
|
115
|
+
controls: { type: Boolean, default: false },
|
|
116
|
+
/**
|
|
117
|
+
* Типы графиков для селекта
|
|
118
|
+
* Формат: [{ value, label }]
|
|
119
|
+
*/
|
|
120
|
+
chartTypes: {
|
|
121
|
+
type: Array,
|
|
122
|
+
default: () => [],
|
|
123
|
+
},
|
|
124
|
+
/**
|
|
125
|
+
* Высота графика
|
|
126
|
+
*/
|
|
127
|
+
height: { type: String, default: "400px" },
|
|
128
|
+
/**
|
|
129
|
+
* Вариант DXCard
|
|
130
|
+
* @default 'default'
|
|
131
|
+
*/
|
|
132
|
+
cardVariant: {
|
|
133
|
+
type: String,
|
|
134
|
+
default: "default",
|
|
135
|
+
validator: (v) => ["default", "bordered", "elevated", "flat"].includes(v),
|
|
136
|
+
},
|
|
137
|
+
/**
|
|
138
|
+
* Padding для DXCard
|
|
139
|
+
* @default 'md'
|
|
140
|
+
*/
|
|
141
|
+
padding: {
|
|
142
|
+
type: String,
|
|
143
|
+
default: "md",
|
|
144
|
+
validator: (v) => ["none", "xs", "sm", "md", "lg", "xl"].includes(v),
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
const emit = defineEmits(["export", "legend-toggle", "chart-type-change"]);
|
|
149
|
+
|
|
150
|
+
const internalChartType = ref(props.type);
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Классы для контейнера
|
|
154
|
+
*
|
|
155
|
+
* @description
|
|
156
|
+
* Базовые классы для контейнера графика.
|
|
157
|
+
*
|
|
158
|
+
* @returns {Array} Массив классов
|
|
159
|
+
*/
|
|
160
|
+
const containerClasses = computed(() => useClassComposition("w-full"));
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Классы для header
|
|
164
|
+
*
|
|
165
|
+
* @description
|
|
166
|
+
* Классы для секции заголовка.
|
|
167
|
+
*
|
|
168
|
+
* @returns {Array} Массив классов
|
|
169
|
+
*/
|
|
170
|
+
const headerClasses = computed(() =>
|
|
171
|
+
useClassComposition("mb-4")
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Классы для контролов
|
|
176
|
+
*
|
|
177
|
+
* @description
|
|
178
|
+
* Классы для секции контролов.
|
|
179
|
+
*
|
|
180
|
+
* @returns {Array} Массив классов
|
|
181
|
+
*/
|
|
182
|
+
const controlsClasses = computed(() =>
|
|
183
|
+
useClassComposition("mb-4 flex items-center justify-end gap-2")
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Классы для области графика
|
|
188
|
+
*
|
|
189
|
+
* @description
|
|
190
|
+
* Классы для области отображения графика.
|
|
191
|
+
*
|
|
192
|
+
* @returns {Array} Массив классов
|
|
193
|
+
*/
|
|
194
|
+
const chartClasses = computed(() =>
|
|
195
|
+
useClassComposition("w-full relative")
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Стили для области графика
|
|
200
|
+
*
|
|
201
|
+
* @description
|
|
202
|
+
* Инлайн стили для высоты графика.
|
|
203
|
+
*
|
|
204
|
+
* @returns {Object} Объект стилей
|
|
205
|
+
*/
|
|
206
|
+
const chartStyles = computed(() => ({
|
|
207
|
+
height: props.height,
|
|
208
|
+
minHeight: props.height,
|
|
209
|
+
}));
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Классы для легенды
|
|
213
|
+
*
|
|
214
|
+
* @description
|
|
215
|
+
* Классы для секции легенды.
|
|
216
|
+
*
|
|
217
|
+
* @returns {Array} Массив классов
|
|
218
|
+
*/
|
|
219
|
+
const legendClasses = computed(() =>
|
|
220
|
+
useClassComposition("mt-4 pt-4 border-t border-slate-200")
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Классы для элемента легенды
|
|
225
|
+
*
|
|
226
|
+
* @description
|
|
227
|
+
* Классы для каждого элемента легенды.
|
|
228
|
+
*
|
|
229
|
+
* @returns {Array} Массив классов
|
|
230
|
+
*/
|
|
231
|
+
const legendItemClasses = computed(() =>
|
|
232
|
+
useClassComposition(
|
|
233
|
+
"flex items-center gap-2 cursor-pointer hover:opacity-80 transition-opacity"
|
|
234
|
+
)
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Переключение видимости элемента легенды
|
|
239
|
+
*
|
|
240
|
+
* @description
|
|
241
|
+
* Переключает видимость элемента легенды и эмитит событие.
|
|
242
|
+
*
|
|
243
|
+
* @param {number} index - Индекс элемента легенды
|
|
244
|
+
*/
|
|
245
|
+
function toggleLegendItem(index) {
|
|
246
|
+
if (props.legendData && props.legendData[index]) {
|
|
247
|
+
const item = props.legendData[index];
|
|
248
|
+
item.visible = !item.visible;
|
|
249
|
+
emit("legend-toggle", { index, item, visible: item.visible });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Обработчик изменения типа графика
|
|
255
|
+
*
|
|
256
|
+
* @description
|
|
257
|
+
* Обрабатывает изменение типа графика через селект.
|
|
258
|
+
*
|
|
259
|
+
* @param {string} newType - Новый тип графика
|
|
260
|
+
*/
|
|
261
|
+
function handleChartTypeChange(newType) {
|
|
262
|
+
emit("chart-type-change", newType);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Синхронизация с prop type
|
|
266
|
+
watch(
|
|
267
|
+
() => props.type,
|
|
268
|
+
(newType) => {
|
|
269
|
+
internalChartType.value = newType;
|
|
270
|
+
}
|
|
271
|
+
);
|
|
272
|
+
</script>
|
|
273
|
+
|