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,615 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
:class="wizardClasses"
|
|
4
|
+
data-component="DXWizard"
|
|
5
|
+
:data-current-step="currentStep"
|
|
6
|
+
>
|
|
7
|
+
<!-- Progress Indicator -->
|
|
8
|
+
<div v-if="showProgress" :class="progressClasses">
|
|
9
|
+
<DXProgress
|
|
10
|
+
:value="progressValue"
|
|
11
|
+
:max="100"
|
|
12
|
+
:size="progressSize"
|
|
13
|
+
:show-label="showProgressLabel"
|
|
14
|
+
/>
|
|
15
|
+
<div v-if="showProgressLabel" class="mt-2 text-sm text-slate-600 text-center">
|
|
16
|
+
Шаг {{ currentStep }} из {{ steps.length }}
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<!-- Steps Indicator -->
|
|
21
|
+
<div v-if="showStepsIndicator" :class="stepsIndicatorClasses">
|
|
22
|
+
<div
|
|
23
|
+
v-for="(step, index) in steps"
|
|
24
|
+
:key="index"
|
|
25
|
+
:class="stepIndicatorClasses(index)"
|
|
26
|
+
>
|
|
27
|
+
<div
|
|
28
|
+
:class="stepCircleClasses(index)"
|
|
29
|
+
class="flex items-center justify-center rounded-full"
|
|
30
|
+
>
|
|
31
|
+
<DXIcon
|
|
32
|
+
v-if="isStepCompleted(index)"
|
|
33
|
+
:icon="CheckIcon"
|
|
34
|
+
size="sm"
|
|
35
|
+
class="text-white"
|
|
36
|
+
/>
|
|
37
|
+
<span v-else class="text-sm font-medium">{{ index + 1 }}</span>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="flex-1 ml-4">
|
|
40
|
+
<div class="text-sm font-medium text-slate-900">{{ step.title }}</div>
|
|
41
|
+
<div v-if="step.description" class="text-xs text-slate-500">
|
|
42
|
+
{{ step.description }}
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div
|
|
46
|
+
v-if="index < steps.length - 1"
|
|
47
|
+
:class="stepConnectorClasses(index)"
|
|
48
|
+
class="absolute left-5 top-10 w-0.5 h-full"
|
|
49
|
+
/>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- Step Content -->
|
|
54
|
+
<div :class="contentClasses">
|
|
55
|
+
<Transition :name="transitionName" mode="out-in">
|
|
56
|
+
<div :key="currentStep" class="w-full">
|
|
57
|
+
<slot
|
|
58
|
+
:name="`step-${currentStep}`"
|
|
59
|
+
:step="currentStepData"
|
|
60
|
+
:stepIndex="currentStep - 1"
|
|
61
|
+
:formData="wizardData"
|
|
62
|
+
:errors="stepErrors"
|
|
63
|
+
>
|
|
64
|
+
<div class="p-8 text-center text-slate-500">
|
|
65
|
+
<p>Шаг {{ currentStep }}: {{ currentStepData?.title }}</p>
|
|
66
|
+
<p class="text-sm mt-2">
|
|
67
|
+
Используйте slot step-{{ currentStep }} для контента
|
|
68
|
+
</p>
|
|
69
|
+
</div>
|
|
70
|
+
</slot>
|
|
71
|
+
</div>
|
|
72
|
+
</Transition>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<!-- Navigation -->
|
|
76
|
+
<div :class="navigationClasses">
|
|
77
|
+
<slot
|
|
78
|
+
name="navigation"
|
|
79
|
+
:canGoNext="canGoNext"
|
|
80
|
+
:canGoPrev="canGoPrev"
|
|
81
|
+
:goNext="goNext"
|
|
82
|
+
:goPrev="goPrev"
|
|
83
|
+
:goToStep="goToStep"
|
|
84
|
+
:currentStep="currentStep"
|
|
85
|
+
:totalSteps="steps.length"
|
|
86
|
+
:save="saveProgress"
|
|
87
|
+
:cancel="handleCancel"
|
|
88
|
+
>
|
|
89
|
+
<DXButton
|
|
90
|
+
v-if="currentStep > 1"
|
|
91
|
+
variant="ghost"
|
|
92
|
+
:disabled="loading"
|
|
93
|
+
@click="goPrev"
|
|
94
|
+
>
|
|
95
|
+
Назад
|
|
96
|
+
</DXButton>
|
|
97
|
+
<div class="flex-1"></div>
|
|
98
|
+
<DXButton
|
|
99
|
+
v-if="saveProgressEnabled"
|
|
100
|
+
variant="ghost"
|
|
101
|
+
:disabled="loading"
|
|
102
|
+
@click="saveProgress"
|
|
103
|
+
>
|
|
104
|
+
Сохранить прогресс
|
|
105
|
+
</DXButton>
|
|
106
|
+
<DXButton
|
|
107
|
+
v-if="currentStep < steps.length"
|
|
108
|
+
variant="primary"
|
|
109
|
+
:disabled="loading || !canGoNext"
|
|
110
|
+
@click="goNext"
|
|
111
|
+
>
|
|
112
|
+
Далее
|
|
113
|
+
</DXButton>
|
|
114
|
+
<DXButton
|
|
115
|
+
v-else
|
|
116
|
+
variant="success"
|
|
117
|
+
:disabled="loading || !canComplete"
|
|
118
|
+
@click="handleComplete"
|
|
119
|
+
>
|
|
120
|
+
Завершить
|
|
121
|
+
</DXButton>
|
|
122
|
+
</slot>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
</template>
|
|
126
|
+
|
|
127
|
+
<script setup>
|
|
128
|
+
import { ref, computed, watch, onMounted } from "vue";
|
|
129
|
+
import { useClassComposition } from "@/composables/useClassComposition";
|
|
130
|
+
import { useSpacing } from "@/composables/useSpacing";
|
|
131
|
+
import DXProgress from "../../atoms/DXProgress/DXProgress.vue";
|
|
132
|
+
import DXButton from "../../atoms/DXButton/DXButton.vue";
|
|
133
|
+
import DXIcon from "../../atoms/DXIcon/DXIcon.vue";
|
|
134
|
+
import { CheckIcon } from "@heroicons/vue/24/solid";
|
|
135
|
+
|
|
136
|
+
const props = defineProps({
|
|
137
|
+
/**
|
|
138
|
+
* Шаги мастера
|
|
139
|
+
* Формат: [{ title, description?, schema?, fields? }]
|
|
140
|
+
*/
|
|
141
|
+
steps: {
|
|
142
|
+
type: Array,
|
|
143
|
+
required: true,
|
|
144
|
+
},
|
|
145
|
+
/**
|
|
146
|
+
* Текущий шаг (начинается с 1)
|
|
147
|
+
* @default 1
|
|
148
|
+
*/
|
|
149
|
+
currentStep: {
|
|
150
|
+
type: Number,
|
|
151
|
+
default: 1,
|
|
152
|
+
},
|
|
153
|
+
/**
|
|
154
|
+
* Данные мастера (v-model)
|
|
155
|
+
*/
|
|
156
|
+
wizardData: {
|
|
157
|
+
type: Object,
|
|
158
|
+
default: () => ({}),
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* Ошибки валидации
|
|
162
|
+
* Формат: { [field]: 'error message' }
|
|
163
|
+
*/
|
|
164
|
+
validationErrors: {
|
|
165
|
+
type: Object,
|
|
166
|
+
default: () => ({}),
|
|
167
|
+
},
|
|
168
|
+
/**
|
|
169
|
+
* Разрешить пропуск шагов
|
|
170
|
+
* @default false
|
|
171
|
+
*/
|
|
172
|
+
allowSkip: { type: Boolean, default: false },
|
|
173
|
+
/**
|
|
174
|
+
* Сохранять прогресс
|
|
175
|
+
* @default false
|
|
176
|
+
*/
|
|
177
|
+
saveProgressEnabled: { type: Boolean, default: false },
|
|
178
|
+
/**
|
|
179
|
+
* Ключ для сохранения в localStorage
|
|
180
|
+
* @default 'dx-wizard-progress'
|
|
181
|
+
*/
|
|
182
|
+
storageKey: {
|
|
183
|
+
type: String,
|
|
184
|
+
default: "dx-wizard-progress",
|
|
185
|
+
},
|
|
186
|
+
/**
|
|
187
|
+
* Состояние загрузки
|
|
188
|
+
* @default false
|
|
189
|
+
*/
|
|
190
|
+
loading: { type: Boolean, default: false },
|
|
191
|
+
/**
|
|
192
|
+
* Показывать индикатор прогресса
|
|
193
|
+
* @default true
|
|
194
|
+
*/
|
|
195
|
+
showProgress: { type: Boolean, default: true },
|
|
196
|
+
/**
|
|
197
|
+
* Показывать метку прогресса
|
|
198
|
+
* @default true
|
|
199
|
+
*/
|
|
200
|
+
showProgressLabel: { type: Boolean, default: true },
|
|
201
|
+
/**
|
|
202
|
+
* Показывать индикатор шагов
|
|
203
|
+
* @default true
|
|
204
|
+
*/
|
|
205
|
+
showStepsIndicator: { type: Boolean, default: true },
|
|
206
|
+
/**
|
|
207
|
+
* Имя transition
|
|
208
|
+
* @default 'fade'
|
|
209
|
+
*/
|
|
210
|
+
transition: {
|
|
211
|
+
type: String,
|
|
212
|
+
default: "fade",
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
const emit = defineEmits([
|
|
217
|
+
"update:currentStep",
|
|
218
|
+
"update:wizardData",
|
|
219
|
+
"next",
|
|
220
|
+
"prev",
|
|
221
|
+
"complete",
|
|
222
|
+
"cancel",
|
|
223
|
+
"step-change",
|
|
224
|
+
"save-progress",
|
|
225
|
+
]);
|
|
226
|
+
|
|
227
|
+
const internalCurrentStep = ref(props.currentStep);
|
|
228
|
+
const internalWizardData = ref({ ...props.wizardData });
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Значение прогресса
|
|
232
|
+
*
|
|
233
|
+
* @description
|
|
234
|
+
* Вычисляет процент выполнения мастера.
|
|
235
|
+
*
|
|
236
|
+
* @returns {number} Процент прогресса
|
|
237
|
+
*/
|
|
238
|
+
const progressValue = computed(() => {
|
|
239
|
+
if (props.steps.length === 0) return 0;
|
|
240
|
+
return ((internalCurrentStep.value - 1) / props.steps.length) * 100;
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Размер прогресса
|
|
245
|
+
*
|
|
246
|
+
* @description
|
|
247
|
+
* Определяет размер прогресс-бара.
|
|
248
|
+
*
|
|
249
|
+
* @returns {'sm' | 'md' | 'lg'} Размер
|
|
250
|
+
*/
|
|
251
|
+
const progressSize = computed(() => "sm");
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Данные текущего шага
|
|
255
|
+
*
|
|
256
|
+
* @description
|
|
257
|
+
* Возвращает объект текущего шага.
|
|
258
|
+
*
|
|
259
|
+
* @returns {Object} Объект шага
|
|
260
|
+
*/
|
|
261
|
+
const currentStepData = computed(() => {
|
|
262
|
+
return props.steps[internalCurrentStep.value - 1] || {};
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Ошибки текущего шага
|
|
267
|
+
*
|
|
268
|
+
* @description
|
|
269
|
+
* Фильтрует ошибки валидации для текущего шага.
|
|
270
|
+
*
|
|
271
|
+
* @returns {Object} Объект ошибок
|
|
272
|
+
*/
|
|
273
|
+
const stepErrors = computed(() => {
|
|
274
|
+
const errors = {};
|
|
275
|
+
const currentStepFields =
|
|
276
|
+
currentStepData.value?.fields ||
|
|
277
|
+
Object.keys(internalWizardData.value);
|
|
278
|
+
for (const field of currentStepFields) {
|
|
279
|
+
if (props.validationErrors[field]) {
|
|
280
|
+
errors[field] = props.validationErrors[field];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return errors;
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Можно ли перейти к следующему шагу
|
|
288
|
+
*
|
|
289
|
+
* @description
|
|
290
|
+
* Проверяет, можно ли перейти к следующему шагу.
|
|
291
|
+
*
|
|
292
|
+
* @returns {boolean} true, если можно перейти
|
|
293
|
+
*/
|
|
294
|
+
const canGoNext = computed(() => {
|
|
295
|
+
if (props.allowSkip) return true;
|
|
296
|
+
return Object.keys(stepErrors.value).length === 0;
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Можно ли перейти к предыдущему шагу
|
|
301
|
+
*
|
|
302
|
+
* @description
|
|
303
|
+
* Проверяет, можно ли перейти к предыдущему шагу.
|
|
304
|
+
*
|
|
305
|
+
* @returns {boolean} true, если можно перейти
|
|
306
|
+
*/
|
|
307
|
+
const canGoPrev = computed(() => {
|
|
308
|
+
return internalCurrentStep.value > 1;
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Можно ли завершить мастер
|
|
313
|
+
*
|
|
314
|
+
* @description
|
|
315
|
+
* Проверяет, можно ли завершить мастер.
|
|
316
|
+
*
|
|
317
|
+
* @returns {boolean} true, если можно завершить
|
|
318
|
+
*/
|
|
319
|
+
const canComplete = computed(() => {
|
|
320
|
+
return Object.keys(props.validationErrors).length === 0;
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Имя transition
|
|
325
|
+
*
|
|
326
|
+
* @description
|
|
327
|
+
* Возвращает имя transition для анимации.
|
|
328
|
+
*
|
|
329
|
+
* @returns {string} Имя transition
|
|
330
|
+
*/
|
|
331
|
+
const transitionName = computed(() => props.transition);
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Классы для мастера
|
|
335
|
+
*
|
|
336
|
+
* @description
|
|
337
|
+
* Базовые классы для мастера.
|
|
338
|
+
*
|
|
339
|
+
* @returns {Array} Массив классов
|
|
340
|
+
*/
|
|
341
|
+
const wizardClasses = computed(() =>
|
|
342
|
+
useClassComposition("w-full", useSpacing("md", "padding"))
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Классы для прогресса
|
|
347
|
+
*
|
|
348
|
+
* @description
|
|
349
|
+
* Классы для секции прогресса.
|
|
350
|
+
*
|
|
351
|
+
* @returns {Array} Массив классов
|
|
352
|
+
*/
|
|
353
|
+
const progressClasses = computed(() =>
|
|
354
|
+
useClassComposition("mb-6")
|
|
355
|
+
);
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Классы для индикатора шагов
|
|
359
|
+
*
|
|
360
|
+
* @description
|
|
361
|
+
* Классы для индикатора шагов.
|
|
362
|
+
*
|
|
363
|
+
* @returns {Array} Массив классов
|
|
364
|
+
*/
|
|
365
|
+
const stepsIndicatorClasses = computed(() =>
|
|
366
|
+
useClassComposition("mb-8 relative")
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Классы для индикатора шага
|
|
371
|
+
*
|
|
372
|
+
* @description
|
|
373
|
+
* Классы для отдельного индикатора шага.
|
|
374
|
+
*
|
|
375
|
+
* @param {number} index - Индекс шага
|
|
376
|
+
* @returns {Array} Массив классов
|
|
377
|
+
*/
|
|
378
|
+
function stepIndicatorClasses(index) {
|
|
379
|
+
return useClassComposition(
|
|
380
|
+
"flex items-center relative mb-6",
|
|
381
|
+
index === internalCurrentStep.value - 1 ? "text-slate-900" : "text-slate-500"
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Классы для круга шага
|
|
387
|
+
*
|
|
388
|
+
* @description
|
|
389
|
+
* Классы для круга индикатора шага.
|
|
390
|
+
*
|
|
391
|
+
* @param {number} index - Индекс шага
|
|
392
|
+
* @returns {string} Tailwind CSS классы
|
|
393
|
+
*/
|
|
394
|
+
function stepCircleClasses(index) {
|
|
395
|
+
const stepIndex = index + 1;
|
|
396
|
+
if (stepIndex < internalCurrentStep.value) {
|
|
397
|
+
return "w-10 h-10 bg-green-500 text-white";
|
|
398
|
+
} else if (stepIndex === internalCurrentStep.value) {
|
|
399
|
+
return "w-10 h-10 bg-blue-500 text-white";
|
|
400
|
+
} else {
|
|
401
|
+
return "w-10 h-10 bg-slate-200 text-slate-500";
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Классы для соединителя шагов
|
|
407
|
+
*
|
|
408
|
+
* @description
|
|
409
|
+
* Классы для линии между шагами.
|
|
410
|
+
*
|
|
411
|
+
* @param {number} index - Индекс шага
|
|
412
|
+
* @returns {string} Tailwind CSS классы
|
|
413
|
+
*/
|
|
414
|
+
function stepConnectorClasses(index) {
|
|
415
|
+
const stepIndex = index + 1;
|
|
416
|
+
if (stepIndex < internalCurrentStep.value) {
|
|
417
|
+
return "bg-green-500";
|
|
418
|
+
} else {
|
|
419
|
+
return "bg-slate-200";
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Классы для контента
|
|
425
|
+
*
|
|
426
|
+
* @description
|
|
427
|
+
* Классы для секции контента шага.
|
|
428
|
+
*
|
|
429
|
+
* @returns {Array} Массив классов
|
|
430
|
+
*/
|
|
431
|
+
const contentClasses = computed(() =>
|
|
432
|
+
useClassComposition("min-h-[300px]")
|
|
433
|
+
);
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Классы для навигации
|
|
437
|
+
*
|
|
438
|
+
* @description
|
|
439
|
+
* Классы для секции навигации.
|
|
440
|
+
*
|
|
441
|
+
* @returns {Array} Массив классов
|
|
442
|
+
*/
|
|
443
|
+
const navigationClasses = computed(() =>
|
|
444
|
+
useClassComposition("flex items-center justify-between gap-4 mt-8 pt-6 border-t border-slate-200")
|
|
445
|
+
);
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Проверка, завершен ли шаг
|
|
449
|
+
*
|
|
450
|
+
* @description
|
|
451
|
+
* Проверяет, завершен ли указанный шаг.
|
|
452
|
+
*
|
|
453
|
+
* @param {number} index - Индекс шага
|
|
454
|
+
* @returns {boolean} true, если шаг завершен
|
|
455
|
+
*/
|
|
456
|
+
function isStepCompleted(index) {
|
|
457
|
+
return index + 1 < internalCurrentStep.value;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Переход к следующему шагу
|
|
462
|
+
*
|
|
463
|
+
* @description
|
|
464
|
+
* Переходит к следующему шагу, если это возможно.
|
|
465
|
+
*/
|
|
466
|
+
function goNext() {
|
|
467
|
+
if (internalCurrentStep.value < props.steps.length && canGoNext.value) {
|
|
468
|
+
internalCurrentStep.value++;
|
|
469
|
+
emit("update:currentStep", internalCurrentStep.value);
|
|
470
|
+
emit("next", internalCurrentStep.value);
|
|
471
|
+
emit("step-change", internalCurrentStep.value);
|
|
472
|
+
saveProgressIfEnabled();
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Переход к предыдущему шагу
|
|
478
|
+
*
|
|
479
|
+
* @description
|
|
480
|
+
* Переходит к предыдущему шагу.
|
|
481
|
+
*/
|
|
482
|
+
function goPrev() {
|
|
483
|
+
if (internalCurrentStep.value > 1) {
|
|
484
|
+
internalCurrentStep.value--;
|
|
485
|
+
emit("update:currentStep", internalCurrentStep.value);
|
|
486
|
+
emit("prev", internalCurrentStep.value);
|
|
487
|
+
emit("step-change", internalCurrentStep.value);
|
|
488
|
+
saveProgressIfEnabled();
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Переход к указанному шагу
|
|
494
|
+
*
|
|
495
|
+
* @description
|
|
496
|
+
* Переходит к указанному шагу.
|
|
497
|
+
*
|
|
498
|
+
* @param {number} step - Номер шага
|
|
499
|
+
*/
|
|
500
|
+
function goToStep(step) {
|
|
501
|
+
if (step >= 1 && step <= props.steps.length) {
|
|
502
|
+
internalCurrentStep.value = step;
|
|
503
|
+
emit("update:currentStep", internalCurrentStep.value);
|
|
504
|
+
emit("step-change", internalCurrentStep.value);
|
|
505
|
+
saveProgressIfEnabled();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Сохранение прогресса
|
|
511
|
+
*
|
|
512
|
+
* @description
|
|
513
|
+
* Сохраняет прогресс мастера в localStorage.
|
|
514
|
+
*/
|
|
515
|
+
function saveProgress() {
|
|
516
|
+
const progress = {
|
|
517
|
+
currentStep: internalCurrentStep.value,
|
|
518
|
+
wizardData: { ...internalWizardData.value },
|
|
519
|
+
};
|
|
520
|
+
localStorage.setItem(props.storageKey, JSON.stringify(progress));
|
|
521
|
+
emit("save-progress", progress);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Сохранение прогресса если включено
|
|
526
|
+
*
|
|
527
|
+
* @description
|
|
528
|
+
* Сохраняет прогресс автоматически, если включено.
|
|
529
|
+
*/
|
|
530
|
+
function saveProgressIfEnabled() {
|
|
531
|
+
if (props.saveProgressEnabled) {
|
|
532
|
+
saveProgress();
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Обработчик завершения
|
|
538
|
+
*
|
|
539
|
+
* @description
|
|
540
|
+
* Эмитит событие завершения мастера.
|
|
541
|
+
*/
|
|
542
|
+
function handleComplete() {
|
|
543
|
+
if (canComplete.value) {
|
|
544
|
+
emit("complete", {
|
|
545
|
+
wizardData: { ...internalWizardData.value },
|
|
546
|
+
currentStep: internalCurrentStep.value,
|
|
547
|
+
});
|
|
548
|
+
// Очищаем сохраненный прогресс
|
|
549
|
+
if (props.saveProgressEnabled) {
|
|
550
|
+
localStorage.removeItem(props.storageKey);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Обработчик отмены
|
|
557
|
+
*
|
|
558
|
+
* @description
|
|
559
|
+
* Эмитит событие отмены мастера.
|
|
560
|
+
*/
|
|
561
|
+
function handleCancel() {
|
|
562
|
+
emit("cancel");
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// Загрузка сохраненного прогресса при монтировании
|
|
566
|
+
onMounted(() => {
|
|
567
|
+
if (props.saveProgressEnabled) {
|
|
568
|
+
const saved = localStorage.getItem(props.storageKey);
|
|
569
|
+
if (saved) {
|
|
570
|
+
try {
|
|
571
|
+
const progress = JSON.parse(saved);
|
|
572
|
+
if (progress.currentStep) {
|
|
573
|
+
internalCurrentStep.value = progress.currentStep;
|
|
574
|
+
emit("update:currentStep", internalCurrentStep.value);
|
|
575
|
+
}
|
|
576
|
+
if (progress.wizardData) {
|
|
577
|
+
internalWizardData.value = { ...progress.wizardData };
|
|
578
|
+
emit("update:wizardData", { ...internalWizardData.value });
|
|
579
|
+
}
|
|
580
|
+
} catch (e) {
|
|
581
|
+
console.warn("Не удалось загрузить сохраненный прогресс:", e);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
// Синхронизация с prop currentStep
|
|
588
|
+
watch(
|
|
589
|
+
() => props.currentStep,
|
|
590
|
+
(newStep) => {
|
|
591
|
+
if (newStep !== internalCurrentStep.value) {
|
|
592
|
+
internalCurrentStep.value = newStep;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
);
|
|
596
|
+
|
|
597
|
+
// Синхронизация с prop wizardData
|
|
598
|
+
watch(
|
|
599
|
+
() => props.wizardData,
|
|
600
|
+
(newData) => {
|
|
601
|
+
internalWizardData.value = { ...newData };
|
|
602
|
+
},
|
|
603
|
+
{ deep: true }
|
|
604
|
+
);
|
|
605
|
+
|
|
606
|
+
// Синхронизация internalWizardData с prop
|
|
607
|
+
watch(
|
|
608
|
+
internalWizardData,
|
|
609
|
+
(newData) => {
|
|
610
|
+
emit("update:wizardData", { ...newData });
|
|
611
|
+
},
|
|
612
|
+
{ deep: true }
|
|
613
|
+
);
|
|
614
|
+
</script>
|
|
615
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Organism components - complex UI structures
|
|
2
|
+
export { default as DXAccordion } from './DXAccordion';
|
|
3
|
+
export { default as DXAppLayout } from './DXAppLayout';
|
|
4
|
+
export { default as DXAuthenticationForm } from './DXAuthenticationForm';
|
|
5
|
+
export { default as DXChartContainer } from './DXChartContainer';
|
|
6
|
+
export { default as DXChatInterface } from './DXChatInterface';
|
|
7
|
+
export { default as DXCommentSection } from './DXCommentSection';
|
|
8
|
+
export { default as DXDataTable } from './DXDataTable';
|
|
9
|
+
export { default as DXDropdown } from './DXDropdown';
|
|
10
|
+
export { default as DXEmptyState } from './DXEmptyState';
|
|
11
|
+
export { default as DXFormWizard } from './DXFormWizard';
|
|
12
|
+
export { default as DXDashboardGrid } from './DXDashboardGrid';
|
|
13
|
+
export { default as DXDashboardWidget } from './DXDashboardWidget';
|
|
14
|
+
export { default as DXHeaderBar } from './DXHeaderBar';
|
|
15
|
+
export { default as DXMediaGallery } from './DXMediaGallery';
|
|
16
|
+
export { default as DXNotificationCenter } from './DXNotificationCenter';
|
|
17
|
+
export { default as DXModal } from './DXModal';
|
|
18
|
+
export { default as DXReportGenerator } from './DXReportGenerator';
|
|
19
|
+
export { default as DXSettingsPanel } from './DXSettingsPanel';
|
|
20
|
+
export { default as DXSidebar } from './DXSidebar';
|
|
21
|
+
export { default as DXSidebarMenu, DXSidebarMenuItem } from './DXSidebarMenu';
|
|
22
|
+
export { default as DXTable } from './DXTable';
|
|
23
|
+
export { default as DXTabs } from './DXTabs';
|
|
24
|
+
export { default as DXUserProfileCard } from './DXUserProfileCard';
|
|
25
|
+
export { default as DXWizard } from './DXWizard';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import DXBlockquote from './DXBlockquote.vue';
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Typography/DXBlockquote',
|
|
5
|
+
component: DXBlockquote,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
argTypes: {
|
|
8
|
+
variant: { control: { type: 'select' }, options: ['default', 'bordered', 'highlighted'] },
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const Default = {
|
|
13
|
+
args: { cite: 'Стив Джобс' },
|
|
14
|
+
render: (args) => ({
|
|
15
|
+
components: { DXBlockquote },
|
|
16
|
+
setup() { return { args }; },
|
|
17
|
+
template: '<DXBlockquote v-bind="args">Дизайн — это не только то, как что-то выглядит и ощущается. Дизайн — это то, как что-то работает.</DXBlockquote>',
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const Variants = {
|
|
22
|
+
render: () => ({
|
|
23
|
+
components: { DXBlockquote },
|
|
24
|
+
template: `
|
|
25
|
+
<div class="space-y-6">
|
|
26
|
+
<DXBlockquote variant="default">Default variant without border</DXBlockquote>
|
|
27
|
+
<DXBlockquote variant="bordered">Bordered variant with left border</DXBlockquote>
|
|
28
|
+
<DXBlockquote variant="highlighted">Highlighted variant with background</DXBlockquote>
|
|
29
|
+
</div>
|
|
30
|
+
`,
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
|