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.
Files changed (334) hide show
  1. package/dist/dxd-style-code.js +11974 -3725
  2. package/dist/dxd-style-code.umd.cjs +10 -1
  3. package/dist/style.css +1 -1
  4. package/package.json +13 -6
  5. package/src/components/atoms/DXAvatar/DXAvatar.stories.js +319 -0
  6. package/src/components/atoms/DXAvatar/DXAvatar.vue +167 -0
  7. package/src/components/atoms/DXAvatar/index.js +2 -0
  8. package/src/components/atoms/DXBackdrop/DXBackdrop.stories.js +341 -0
  9. package/src/components/atoms/DXBackdrop/DXBackdrop.vue +102 -0
  10. package/src/components/atoms/DXBackdrop/index.js +2 -0
  11. package/src/components/atoms/DXBadge/DXBadge.stories.js +239 -0
  12. package/src/components/atoms/DXBadge/DXBadge.vue +45 -0
  13. package/src/components/atoms/DXBadge/index.js +2 -0
  14. package/src/components/atoms/DXButton/DXButton.stories.js +178 -0
  15. package/src/components/atoms/DXButton/DXButton.vue +84 -0
  16. package/src/components/atoms/DXButton/index.js +2 -0
  17. package/src/components/atoms/DXCard/DXCard.stories.js +133 -0
  18. package/src/components/atoms/DXCard/DXCard.vue +46 -0
  19. package/src/components/atoms/DXCard/index.js +2 -0
  20. package/src/components/atoms/DXCheckbox/DXCheckbox.stories.js +294 -0
  21. package/src/components/atoms/DXCheckbox/DXCheckbox.vue +191 -0
  22. package/src/components/atoms/DXCheckbox/index.js +2 -0
  23. package/src/components/atoms/DXDivider/DXDivider.stories.js +135 -0
  24. package/src/components/atoms/DXDivider/DXDivider.vue +74 -0
  25. package/src/components/atoms/DXDivider/index.js +2 -0
  26. package/src/components/atoms/DXDropdownItem/DXDropdownItem.vue +116 -0
  27. package/src/components/atoms/DXDropdownItem/index.js +2 -0
  28. package/src/components/atoms/DXFormLabel/DXFormLabel.stories.js +194 -0
  29. package/src/components/atoms/DXFormLabel/DXFormLabel.vue +94 -0
  30. package/src/components/atoms/DXFormLabel/index.js +2 -0
  31. package/src/components/atoms/DXIcon/DXIcon.stories.js +156 -0
  32. package/src/components/atoms/DXIcon/DXIcon.vue +102 -0
  33. package/src/components/atoms/DXIcon/index.js +3 -0
  34. package/src/components/atoms/DXIconWrapper/DXIconWrapper.stories.js +237 -0
  35. package/src/components/atoms/DXIconWrapper/DXIconWrapper.vue +79 -0
  36. package/src/components/atoms/DXIconWrapper/index.js +2 -0
  37. package/src/components/atoms/DXInputAddon/DXInputAddon.stories.js +230 -0
  38. package/src/components/atoms/DXInputAddon/DXInputAddon.vue +64 -0
  39. package/src/components/atoms/DXInputAddon/index.js +2 -0
  40. package/src/components/atoms/DXLink/DXLink.stories.js +475 -0
  41. package/src/components/atoms/DXLink/DXLink.vue +229 -0
  42. package/src/components/atoms/DXLink/index.js +2 -0
  43. package/src/components/atoms/DXLoader/DXLoader.stories.js +280 -0
  44. package/src/components/atoms/DXLoader/DXLoader.vue +78 -0
  45. package/src/components/atoms/DXLoader/index.js +2 -0
  46. package/src/components/atoms/DXProgress/DXProgress.stories.js +312 -0
  47. package/src/components/atoms/DXProgress/DXProgress.vue +85 -0
  48. package/src/components/atoms/DXProgress/index.js +2 -0
  49. package/src/components/atoms/DXQuote/DXQuote.stories.js +255 -0
  50. package/src/components/atoms/DXQuote/DXQuote.vue +97 -0
  51. package/src/components/atoms/DXQuote/index.js +2 -0
  52. package/src/components/atoms/DXRadio/DXRadio.stories.js +277 -0
  53. package/src/components/atoms/DXRadio/DXRadio.vue +144 -0
  54. package/src/components/atoms/DXRadio/index.js +2 -0
  55. package/src/components/atoms/DXSkeleton/DXSkeleton.stories.js +50 -0
  56. package/src/components/atoms/DXSkeleton/DXSkeleton.vue +19 -0
  57. package/src/components/atoms/DXSkeleton/index.js +2 -0
  58. package/src/components/atoms/DXSlider/DXSlider.stories.js +522 -0
  59. package/src/components/atoms/DXSlider/DXSlider.vue +338 -0
  60. package/src/components/atoms/DXSlider/index.js +2 -0
  61. package/src/components/atoms/DXTags/DXTags.stories.js +206 -0
  62. package/src/components/atoms/DXTags/DXTags.vue +111 -0
  63. package/src/components/atoms/DXTags/index.js +2 -0
  64. package/src/components/atoms/DXToast/DXToast.stories.js +40 -0
  65. package/src/components/atoms/DXToast/DXToast.vue +32 -0
  66. package/src/components/atoms/DXToast/index.js +2 -0
  67. package/src/components/atoms/DXToggle/DXToggle.stories.js +143 -0
  68. package/src/components/atoms/DXToggle/DXToggle.vue +142 -0
  69. package/src/components/atoms/DXToggle/index.js +2 -0
  70. package/src/components/atoms/DXToggleButton/DXToggleButton.stories.js +513 -0
  71. package/src/components/atoms/DXToggleButton/DXToggleButton.vue +140 -0
  72. package/src/components/atoms/DXToggleButton/index.js +2 -0
  73. package/src/components/atoms/DXTooltip/DXTooltip.stories.js +243 -0
  74. package/src/components/atoms/DXTooltip/DXTooltip.vue +151 -0
  75. package/src/components/atoms/DXTooltip/index.js +2 -0
  76. package/src/components/atoms/index.js +24 -0
  77. package/src/components/layout/DXBox/DXBox.stories.js +238 -0
  78. package/src/components/layout/DXBox/DXBox.vue +198 -0
  79. package/src/components/layout/DXBox/index.js +2 -0
  80. package/src/components/layout/DXContainer/DXContainer.stories.js +147 -0
  81. package/src/components/layout/DXContainer/DXContainer.vue +83 -0
  82. package/src/components/layout/DXContainer/index.js +2 -0
  83. package/src/components/layout/DXFlex/DXFlex.stories.js +210 -0
  84. package/src/components/layout/DXFlex/DXFlex.vue +149 -0
  85. package/src/components/layout/DXFlex/index.js +2 -0
  86. package/src/components/layout/DXGrid/DXGrid.stories.js +238 -0
  87. package/src/components/layout/DXGrid/DXGrid.vue +167 -0
  88. package/src/components/layout/DXGrid/index.js +2 -0
  89. package/src/components/layout/DXSpacer/DXSpacer.stories.js +187 -0
  90. package/src/components/layout/DXSpacer/DXSpacer.vue +102 -0
  91. package/src/components/layout/DXSpacer/index.js +2 -0
  92. package/src/components/layout/DXStack/DXStack.stories.js +199 -0
  93. package/src/components/layout/DXStack/DXStack.vue +140 -0
  94. package/src/components/layout/DXStack/index.js +2 -0
  95. package/src/components/layout/index.js +8 -0
  96. package/src/components/molecules/DXActionButtons/DXActionButtons.stories.js +288 -0
  97. package/src/components/molecules/DXActionButtons/DXActionButtons.vue +106 -0
  98. package/src/components/molecules/DXActionButtons/index.js +2 -0
  99. package/src/components/molecules/DXAlert/DXAlert.stories.js +70 -0
  100. package/src/components/molecules/DXAlert/DXAlert.vue +116 -0
  101. package/src/components/molecules/DXAlert/index.js +2 -0
  102. package/src/components/molecules/DXBaseTable/DXBaseTable.stories.js +433 -0
  103. package/src/components/molecules/DXBaseTable/DXBaseTable.vue +459 -0
  104. package/src/components/molecules/DXBaseTable/index.js +4 -0
  105. package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.stories.js +227 -0
  106. package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.vue +96 -0
  107. package/src/components/molecules/DXBreadcrumb/index.js +2 -0
  108. package/src/components/molecules/DXButtonGroup/DXButtonGroup.stories.js +26 -0
  109. package/src/components/molecules/DXButtonGroup/DXButtonGroup.vue +78 -0
  110. package/src/components/molecules/DXButtonGroup/index.js +2 -0
  111. package/src/components/molecules/DXCloseButton/DXCloseButton.stories.js +53 -0
  112. package/src/components/molecules/DXCloseButton/DXCloseButton.vue +62 -0
  113. package/src/components/molecules/DXCloseButton/index.js +3 -0
  114. package/src/components/molecules/DXComboBox/DXComboBox.stories.js +62 -0
  115. package/src/components/molecules/DXComboBox/DXComboBox.vue +167 -0
  116. package/src/components/molecules/DXComboBox/index.js +2 -0
  117. package/src/components/molecules/DXCopyField/DXCopyField.stories.js +231 -0
  118. package/src/components/molecules/DXCopyField/DXCopyField.vue +75 -0
  119. package/src/components/molecules/DXCopyField/index.js +2 -0
  120. package/src/components/molecules/DXDataFilter/DXDataFilter.stories.js +275 -0
  121. package/src/components/molecules/DXDataFilter/DXDataFilter.vue +385 -0
  122. package/src/components/molecules/DXDataFilter/index.js +2 -0
  123. package/src/components/molecules/DXDatePicker/DXDatePicker.stories.js +42 -0
  124. package/src/components/molecules/DXDatePicker/DXDatePicker.vue +121 -0
  125. package/src/components/molecules/DXDatePicker/index.js +2 -0
  126. package/src/components/molecules/DXDropdownDivider/DXDropdownDivider.vue +30 -0
  127. package/src/components/molecules/DXDropdownDivider/index.js +2 -0
  128. package/src/components/molecules/DXFileUpload/DXFileUpload.stories.js +53 -0
  129. package/src/components/molecules/DXFileUpload/DXFileUpload.vue +199 -0
  130. package/src/components/molecules/DXFileUpload/index.js +2 -0
  131. package/src/components/molecules/DXFilterGroup/DXFilterGroup.stories.js +43 -0
  132. package/src/components/molecules/DXFilterGroup/DXFilterGroup.vue +43 -0
  133. package/src/components/molecules/DXFilterGroup/index.js +2 -0
  134. package/src/components/molecules/DXFormControl/DXFormControl.stories.js +69 -0
  135. package/src/components/molecules/DXFormControl/DXFormControl.vue +72 -0
  136. package/src/components/molecules/DXFormControl/index.js +2 -0
  137. package/src/components/molecules/DXInput/DXInput.stories.js +291 -0
  138. package/src/components/molecules/DXInput/DXInput.vue +156 -0
  139. package/src/components/molecules/DXInput/index.js +3 -0
  140. package/src/components/molecules/DXInputGroup/DXInputGroup.stories.js +228 -0
  141. package/src/components/molecules/DXInputGroup/DXInputGroup.vue +64 -0
  142. package/src/components/molecules/DXInputGroup/index.js +2 -0
  143. package/src/components/molecules/DXInputMask/DXInputMask.stories.js +53 -0
  144. package/src/components/molecules/DXInputMask/DXInputMask.vue +89 -0
  145. package/src/components/molecules/DXInputMask/index.js +2 -0
  146. package/src/components/molecules/DXMenu/DXMenu.stories.js +379 -0
  147. package/src/components/molecules/DXMenu/DXMenu.vue +331 -0
  148. package/src/components/molecules/DXMenu/README.md +479 -0
  149. package/src/components/molecules/DXMenu/index.js +2 -0
  150. package/src/components/molecules/DXPagination/DXPagination.stories.js +62 -0
  151. package/src/components/molecules/DXPagination/DXPagination.vue +123 -0
  152. package/src/components/molecules/DXPagination/index.js +2 -0
  153. package/src/components/molecules/DXPasswordInput/DXPasswordInput.stories.js +42 -0
  154. package/src/components/molecules/DXPasswordInput/DXPasswordInput.vue +74 -0
  155. package/src/components/molecules/DXPasswordInput/index.js +2 -0
  156. package/src/components/molecules/DXRadioCard/DXRadioCard.stories.js +60 -0
  157. package/src/components/molecules/DXRadioCard/DXRadioCard.vue +71 -0
  158. package/src/components/molecules/DXRadioCard/index.js +2 -0
  159. package/src/components/molecules/DXRadioGroup/DXRadioGroup.stories.js +297 -0
  160. package/src/components/molecules/DXRadioGroup/DXRadioGroup.vue +73 -0
  161. package/src/components/molecules/DXRadioGroup/index.js +2 -0
  162. package/src/components/molecules/DXRating/DXRating.stories.js +322 -0
  163. package/src/components/molecules/DXRating/DXRating.vue +402 -0
  164. package/src/components/molecules/DXRating/index.js +2 -0
  165. package/src/components/molecules/DXSearchBar/DXSearchBar.stories.js +357 -0
  166. package/src/components/molecules/DXSearchBar/DXSearchBar.vue +525 -0
  167. package/src/components/molecules/DXSearchBar/index.js +2 -0
  168. package/src/components/molecules/DXSearchSelect/DXSearchSelect.stories.js +50 -0
  169. package/src/components/molecules/DXSearchSelect/DXSearchSelect.vue +207 -0
  170. package/src/components/molecules/DXSearchSelect/index.js +2 -0
  171. package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.stories.js +326 -0
  172. package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.vue +116 -0
  173. package/src/components/molecules/DXSegmentedControl/index.js +2 -0
  174. package/src/components/molecules/DXSelect/DXSelect.stories.js +259 -0
  175. package/src/components/molecules/DXSelect/DXSelect.vue +149 -0
  176. package/src/components/molecules/DXSelect/index.js +3 -0
  177. package/src/components/molecules/DXStatCard/DXStatCard.stories.js +335 -0
  178. package/src/components/molecules/DXStatCard/DXStatCard.vue +309 -0
  179. package/src/components/molecules/DXStatCard/index.js +2 -0
  180. package/src/components/molecules/DXTableFiltersPanel/DXTableFiltersPanel.vue +72 -0
  181. package/src/components/molecules/DXTableFiltersPanel/index.js +7 -0
  182. package/src/components/molecules/DXTablePagination/DXTablePagination.stories.js +236 -0
  183. package/src/components/molecules/DXTablePagination/DXTablePagination.vue +93 -0
  184. package/src/components/molecules/DXTablePagination/index.js +2 -0
  185. package/src/components/molecules/DXTableToolbar/DXTableToolbar.stories.js +271 -0
  186. package/src/components/molecules/DXTableToolbar/DXTableToolbar.vue +102 -0
  187. package/src/components/molecules/DXTableToolbar/index.js +2 -0
  188. package/src/components/molecules/DXTextarea/DXTextarea.stories.js +239 -0
  189. package/src/components/molecules/DXTextarea/DXTextarea.vue +158 -0
  190. package/src/components/molecules/DXTextarea/index.js +3 -0
  191. package/src/components/molecules/DXTimePicker/DXTimePicker.stories.js +282 -0
  192. package/src/components/molecules/DXTimePicker/DXTimePicker.vue +640 -0
  193. package/src/components/molecules/DXTimePicker/index.js +2 -0
  194. package/src/components/molecules/DXValidationIcon/DXValidationIcon.stories.js +60 -0
  195. package/src/components/molecules/DXValidationIcon/DXValidationIcon.vue +53 -0
  196. package/src/components/molecules/DXValidationIcon/index.js +3 -0
  197. package/src/components/molecules/index.js +34 -0
  198. package/src/components/organisms/DXAccordion/DXAccordion.stories.js +33 -0
  199. package/src/components/organisms/DXAccordion/DXAccordion.vue +104 -0
  200. package/src/components/organisms/DXAccordion/index.js +2 -0
  201. package/src/components/organisms/DXAppLayout/DXAppLayout.stories.js +689 -0
  202. package/src/components/organisms/DXAppLayout/DXAppLayout.vue +460 -0
  203. package/src/components/organisms/DXAppLayout/index.js +2 -0
  204. package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.stories.js +232 -0
  205. package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.vue +458 -0
  206. package/src/components/organisms/DXAuthenticationForm/index.js +2 -0
  207. package/src/components/organisms/DXChartContainer/DXChartContainer.stories.js +286 -0
  208. package/src/components/organisms/DXChartContainer/DXChartContainer.vue +273 -0
  209. package/src/components/organisms/DXChartContainer/index.js +2 -0
  210. package/src/components/organisms/DXChatInterface/DXChatInterface.stories.js +164 -0
  211. package/src/components/organisms/DXChatInterface/DXChatInterface.vue +583 -0
  212. package/src/components/organisms/DXChatInterface/index.js +2 -0
  213. package/src/components/organisms/DXCommentSection/DXCommentSection.stories.js +173 -0
  214. package/src/components/organisms/DXCommentSection/DXCommentSection.vue +487 -0
  215. package/src/components/organisms/DXCommentSection/index.js +2 -0
  216. package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.stories.js +331 -0
  217. package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.vue +309 -0
  218. package/src/components/organisms/DXDashboardGrid/index.js +2 -0
  219. package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.stories.js +271 -0
  220. package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.vue +260 -0
  221. package/src/components/organisms/DXDashboardWidget/index.js +2 -0
  222. package/src/components/organisms/DXDataTable/DXDataTable.stories.js +247 -0
  223. package/src/components/organisms/DXDataTable/DXDataTable.vue +496 -0
  224. package/src/components/organisms/DXDataTable/index.js +2 -0
  225. package/src/components/organisms/DXDropdown/DXDropdown.stories.js +795 -0
  226. package/src/components/organisms/DXDropdown/DXDropdown.vue +238 -0
  227. package/src/components/organisms/DXDropdown/index.js +2 -0
  228. package/src/components/organisms/DXEmptyState/DXEmptyState.stories.js +37 -0
  229. package/src/components/organisms/DXEmptyState/DXEmptyState.vue +41 -0
  230. package/src/components/organisms/DXEmptyState/index.js +2 -0
  231. package/src/components/organisms/DXFormWizard/DXFormWizard.stories.js +378 -0
  232. package/src/components/organisms/DXFormWizard/DXFormWizard.vue +578 -0
  233. package/src/components/organisms/DXFormWizard/index.js +2 -0
  234. package/src/components/organisms/DXHeaderBar/DXHeaderBar.stories.js +448 -0
  235. package/src/components/organisms/DXHeaderBar/DXHeaderBar.vue +190 -0
  236. package/src/components/organisms/DXHeaderBar/index.js +2 -0
  237. package/src/components/organisms/DXMediaGallery/DXMediaGallery.stories.js +347 -0
  238. package/src/components/organisms/DXMediaGallery/DXMediaGallery.vue +422 -0
  239. package/src/components/organisms/DXMediaGallery/index.js +2 -0
  240. package/src/components/organisms/DXModal/DXModal.stories.js +138 -0
  241. package/src/components/organisms/DXModal/DXModal.vue +213 -0
  242. package/src/components/organisms/DXModal/index.js +2 -0
  243. package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.stories.js +183 -0
  244. package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.vue +566 -0
  245. package/src/components/organisms/DXNotificationCenter/index.js +2 -0
  246. package/src/components/organisms/DXReportGenerator/DXReportGenerator.stories.js +199 -0
  247. package/src/components/organisms/DXReportGenerator/DXReportGenerator.vue +344 -0
  248. package/src/components/organisms/DXReportGenerator/index.js +2 -0
  249. package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.stories.js +245 -0
  250. package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.vue +454 -0
  251. package/src/components/organisms/DXSettingsPanel/index.js +2 -0
  252. package/src/components/organisms/DXSidebar/DXSidebar.stories.js +316 -0
  253. package/src/components/organisms/DXSidebar/DXSidebar.vue +212 -0
  254. package/src/components/organisms/DXSidebar/index.js +2 -0
  255. package/src/components/organisms/DXSidebarMenu/DATA_STRUCTURE.md +299 -0
  256. package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.stories.js +729 -0
  257. package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.vue +257 -0
  258. package/src/components/organisms/DXSidebarMenu/DXSidebarMenuItem.vue +249 -0
  259. package/src/components/organisms/DXSidebarMenu/README.md +333 -0
  260. package/src/components/organisms/DXSidebarMenu/index.js +3 -0
  261. package/src/components/organisms/DXTable/DXTable.stories.js +550 -0
  262. package/src/components/organisms/DXTable/DXTable.vue +324 -0
  263. package/src/components/organisms/DXTable/index.js +2 -0
  264. package/src/components/organisms/DXTabs/DXTabs.stories.js +407 -0
  265. package/src/components/organisms/DXTabs/DXTabs.vue +301 -0
  266. package/src/components/organisms/DXTabs/index.js +2 -0
  267. package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.stories.js +194 -0
  268. package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.vue +403 -0
  269. package/src/components/organisms/DXUserProfileCard/index.js +2 -0
  270. package/src/components/organisms/DXWizard/DXWizard.stories.js +212 -0
  271. package/src/components/organisms/DXWizard/DXWizard.vue +615 -0
  272. package/src/components/organisms/DXWizard/index.js +2 -0
  273. package/src/components/organisms/index.js +25 -0
  274. package/src/components/typography/DXBlockquote/DXBlockquote.stories.js +33 -0
  275. package/src/components/typography/DXBlockquote/DXBlockquote.vue +44 -0
  276. package/src/components/typography/DXBlockquote/index.js +2 -0
  277. package/src/components/typography/DXCode/DXCode.stories.js +29 -0
  278. package/src/components/typography/DXCode/DXCode.vue +46 -0
  279. package/src/components/typography/DXCode/index.js +2 -0
  280. package/src/components/typography/DXHeading/DXHeading.stories.js +54 -0
  281. package/src/components/typography/DXHeading/DXHeading.vue +68 -0
  282. package/src/components/typography/DXHeading/index.js +2 -0
  283. package/src/components/typography/DXLabel/DXLabel.stories.js +40 -0
  284. package/src/components/typography/DXLabel/DXLabel.vue +49 -0
  285. package/src/components/typography/DXLabel/index.js +2 -0
  286. package/src/components/typography/DXList/DXList.stories.js +50 -0
  287. package/src/components/typography/DXList/DXList.vue +55 -0
  288. package/src/components/typography/DXList/index.js +2 -0
  289. package/src/components/typography/DXText/DXText.stories.js +47 -0
  290. package/src/components/typography/DXText/DXText.vue +67 -0
  291. package/src/components/typography/DXText/index.js +2 -0
  292. package/src/components/typography/index.js +8 -0
  293. package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.stories.js +335 -0
  294. package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.vue +207 -0
  295. package/src/components/utilities/DXAnimatePresence/index.js +2 -0
  296. package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.stories.js +321 -0
  297. package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.vue +158 -0
  298. package/src/components/utilities/DXBreakpointProvider/index.js +2 -0
  299. package/src/components/utilities/DXObserver/DXObserver.stories.js +324 -0
  300. package/src/components/utilities/DXObserver/DXObserver.vue +182 -0
  301. package/src/components/utilities/DXObserver/index.js +2 -0
  302. package/src/components/utilities/DXPortal/DXPortal.stories.js +267 -0
  303. package/src/components/utilities/DXPortal/DXPortal.vue +69 -0
  304. package/src/components/utilities/DXPortal/index.js +2 -0
  305. package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.stories.js +339 -0
  306. package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.vue +155 -0
  307. package/src/components/utilities/DXStaggeredAnimation/index.js +2 -0
  308. package/src/components/utilities/DXThemeProvider/DXThemeProvider.stories.js +327 -0
  309. package/src/components/utilities/DXThemeProvider/DXThemeProvider.vue +227 -0
  310. package/src/components/utilities/DXThemeProvider/index.js +2 -0
  311. package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.stories.js +368 -0
  312. package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.vue +212 -0
  313. package/src/components/utilities/DXTransitionGroup/index.js +2 -0
  314. package/src/components/utilities/index.js +9 -0
  315. package/src/composables/useAnimation.js +264 -0
  316. package/src/composables/useClassComposition.js +35 -0
  317. package/src/composables/useDataAttributes.js +83 -0
  318. package/src/composables/useMenu.js +88 -0
  319. package/src/composables/useSize.js +135 -0
  320. package/src/composables/useSpacing.js +37 -0
  321. package/src/composables/useTableColumns.js +88 -0
  322. package/src/composables/useTableData.js +82 -0
  323. package/src/composables/useTableFilter.js +158 -0
  324. package/src/composables/useTablePagination.js +89 -0
  325. package/src/composables/useTableSelection.js +77 -0
  326. package/src/composables/useTableSort.js +75 -0
  327. package/src/composables/useTabsScroll.js +88 -0
  328. package/src/composables/useVariant.js +700 -0
  329. package/src/index.js +86 -0
  330. package/src/styles/animations.css +171 -0
  331. package/src/styles/index.css +99 -0
  332. package/src/styles/tokens.js +123 -0
  333. package/src/utils/propTypes.js +77 -0
  334. package/src/utils/toggleButtonPresets.js +115 -0
@@ -0,0 +1,88 @@
1
+ import { ref, computed } from 'vue';
2
+
3
+ /**
4
+ * Composable для управления столбцами таблицы
5
+ */
6
+ export function useTableColumns(props, emit) {
7
+ // Скрытые столбцы (по ключу)
8
+ const hiddenColumns = ref([]);
9
+
10
+ // Видимые столбцы
11
+ const visibleColumns = computed(() => {
12
+ return props.columns.filter(col => !hiddenColumns.value.includes(col.key));
13
+ });
14
+
15
+ // Все столбцы с информацией о видимости
16
+ const columnsWithVisibility = computed(() => {
17
+ return props.columns.map(col => ({
18
+ ...col,
19
+ visible: !hiddenColumns.value.includes(col.key),
20
+ }));
21
+ });
22
+
23
+ // Переключить видимость столбца
24
+ const toggleColumn = (key) => {
25
+ const index = hiddenColumns.value.indexOf(key);
26
+ if (index > -1) {
27
+ hiddenColumns.value.splice(index, 1);
28
+ } else {
29
+ hiddenColumns.value.push(key);
30
+ }
31
+
32
+ emit('column-toggle', {
33
+ column: key,
34
+ visible: index > -1,
35
+ hiddenColumns: [...hiddenColumns.value]
36
+ });
37
+ };
38
+
39
+ // Показать столбец
40
+ const showColumn = (key) => {
41
+ const index = hiddenColumns.value.indexOf(key);
42
+ if (index > -1) {
43
+ hiddenColumns.value.splice(index, 1);
44
+ emit('column-show', key);
45
+ }
46
+ };
47
+
48
+ // Скрыть столбец
49
+ const hideColumn = (key) => {
50
+ if (!hiddenColumns.value.includes(key)) {
51
+ hiddenColumns.value.push(key);
52
+ emit('column-hide', key);
53
+ }
54
+ };
55
+
56
+ // Показать все столбцы
57
+ const showAllColumns = () => {
58
+ hiddenColumns.value = [];
59
+ emit('columns-show-all');
60
+ };
61
+
62
+ // Скрыть все столбцы кроме обязательных
63
+ const hideAllColumns = (exceptKeys = []) => {
64
+ hiddenColumns.value = props.columns
65
+ .filter(col => !exceptKeys.includes(col.key))
66
+ .map(col => col.key);
67
+ emit('columns-hide-all');
68
+ };
69
+
70
+ // Сбросить к дефолтным
71
+ const resetColumns = () => {
72
+ hiddenColumns.value = [];
73
+ emit('columns-reset');
74
+ };
75
+
76
+ return {
77
+ hiddenColumns,
78
+ visibleColumns,
79
+ columnsWithVisibility,
80
+ toggleColumn,
81
+ showColumn,
82
+ hideColumn,
83
+ showAllColumns,
84
+ hideAllColumns,
85
+ resetColumns,
86
+ };
87
+ }
88
+
@@ -0,0 +1,82 @@
1
+ import { ref, watch } from 'vue';
2
+
3
+ /**
4
+ * Composable для управления данными таблицы
5
+ * Поддержка локального и API режимов
6
+ */
7
+ export function useTableData(props, emit) {
8
+ const localData = ref([]);
9
+ const loading = ref(false);
10
+ const error = ref(null);
11
+
12
+ // Локальный режим - копируем данные из props
13
+ const loadLocalData = () => {
14
+ localData.value = [...props.data];
15
+ };
16
+
17
+ // API режим - загрузка данных с сервера
18
+ const loadApiData = async (params = {}) => {
19
+ if (!props.apiUrl) {
20
+ error.value = 'API URL не указан';
21
+ return;
22
+ }
23
+
24
+ loading.value = true;
25
+ error.value = null;
26
+
27
+ try {
28
+ const queryParams = new URLSearchParams({
29
+ ...props.apiParams,
30
+ ...params,
31
+ }).toString();
32
+
33
+ const url = `${props.apiUrl}${queryParams ? `?${queryParams}` : ''}`;
34
+
35
+ const response = await fetch(url, {
36
+ method: props.apiMethod || 'GET',
37
+ headers: {
38
+ 'Content-Type': 'application/json',
39
+ },
40
+ });
41
+
42
+ if (!response.ok) {
43
+ throw new Error(`HTTP error! status: ${response.status}`);
44
+ }
45
+
46
+ const data = await response.json();
47
+ localData.value = Array.isArray(data) ? data : data.data || [];
48
+
49
+ emit('data-loaded', localData.value);
50
+ } catch (err) {
51
+ error.value = err.message;
52
+ emit('error', err);
53
+ } finally {
54
+ loading.value = false;
55
+ }
56
+ };
57
+
58
+ // Загрузка данных в зависимости от режима
59
+ const loadData = (params) => {
60
+ if (props.mode === 'api') {
61
+ return loadApiData(params);
62
+ } else {
63
+ loadLocalData();
64
+ return Promise.resolve();
65
+ }
66
+ };
67
+
68
+ // Следим за изменениями в props.data для локального режима
69
+ watch(() => props.data, () => {
70
+ if (props.mode === 'local') {
71
+ loadLocalData();
72
+ }
73
+ }, { immediate: true, deep: true });
74
+
75
+ return {
76
+ localData,
77
+ loading,
78
+ error,
79
+ loadData,
80
+ };
81
+ }
82
+
@@ -0,0 +1,158 @@
1
+ import { ref, computed } from 'vue';
2
+
3
+ /**
4
+ * Composable для фильтрации данных таблицы
5
+ */
6
+ export function useTableFilter(data, props, emit, sourceData = null) {
7
+ const filters = ref({});
8
+ const searchQuery = ref('');
9
+
10
+ // Исходные данные для сбора опций фильтра (если не переданы, используем data)
11
+ const sourceDataForOptions = sourceData || data;
12
+
13
+ // Фильтрованные данные
14
+ const filteredData = computed(() => {
15
+ let result = [...data.value];
16
+
17
+ // Глобальный поиск
18
+ if (searchQuery.value && props.searchable) {
19
+ const query = searchQuery.value.toLowerCase();
20
+ result = result.filter(row => {
21
+ return props.columns.some(col => {
22
+ const value = row[col.key];
23
+ return value != null && String(value).toLowerCase().includes(query);
24
+ });
25
+ });
26
+ }
27
+
28
+ // Фильтрация по столбцам
29
+ if (props.filterable && Object.keys(filters.value).length > 0) {
30
+ result = result.filter(row => {
31
+ return Object.entries(filters.value).every(([column, filterValue]) => {
32
+ // Пустое значение = показать все
33
+ if (!filterValue || filterValue === '') return true;
34
+
35
+ const cellValue = row[column];
36
+
37
+ // Точное совпадение для select-based фильтров
38
+ return cellValue === filterValue;
39
+ });
40
+ });
41
+ }
42
+
43
+ return result;
44
+ });
45
+
46
+ // Применить фильтр для столбца
47
+ const applyFilter = (column, value) => {
48
+ if (value) {
49
+ filters.value[column] = value;
50
+ } else {
51
+ delete filters.value[column];
52
+ }
53
+
54
+ emit('filter', { column, value, filters: { ...filters.value } });
55
+ };
56
+
57
+ // Очистить все фильтры
58
+ const clearFilters = () => {
59
+ filters.value = {};
60
+ searchQuery.value = '';
61
+ emit('filter-clear');
62
+ };
63
+
64
+ // Очистить фильтр столбца
65
+ const clearColumnFilter = (column) => {
66
+ delete filters.value[column];
67
+ emit('filter', { column, value: null, filters: { ...filters.value } });
68
+ };
69
+
70
+ // Собрать уникальные значения для столбца (из исходных данных)
71
+ const getUniqueColumnValues = (columnKey) => {
72
+ const uniqueValues = new Set();
73
+ sourceDataForOptions.value.forEach(row => {
74
+ const value = row[columnKey];
75
+ if (value != null && value !== '') {
76
+ uniqueValues.add(value);
77
+ }
78
+ });
79
+
80
+ return Array.from(uniqueValues)
81
+ .sort()
82
+ .map(value => ({
83
+ value: value,
84
+ label: String(value),
85
+ }));
86
+ };
87
+
88
+ // Получить опции фильтра для столбца
89
+ const getFilterOptions = (column) => {
90
+ // Приоритет явным filterOptions
91
+ if (column.filterOptions && Array.isArray(column.filterOptions)) {
92
+ // Добавляем опцию "Все" в начало, если её нет
93
+ const hasAllOption = column.filterOptions.some(opt => opt.value === '' || opt.value === null);
94
+ if (!hasAllOption) {
95
+ return [
96
+ { value: '', label: 'Все' },
97
+ ...column.filterOptions
98
+ ];
99
+ }
100
+ return column.filterOptions;
101
+ }
102
+
103
+ // Иначе собираем из данных
104
+ const uniqueValues = getUniqueColumnValues(column.key);
105
+ // Добавляем опцию "Все" в начало
106
+ return [
107
+ { value: '', label: 'Все' },
108
+ ...uniqueValues
109
+ ];
110
+ };
111
+
112
+ // Получить список активных фильтров с метаданными
113
+ const activeFilters = computed(() => {
114
+ if (!props.filterable || Object.keys(filters.value).length === 0) {
115
+ return [];
116
+ }
117
+
118
+ return Object.entries(filters.value)
119
+ .map(([columnKey, filterValue]) => {
120
+ if (!filterValue || filterValue === '') return null;
121
+
122
+ // Найти колонку
123
+ const column = props.columns.find(col => col.key === columnKey);
124
+ if (!column) return null;
125
+
126
+ // Найти label для значения
127
+ const filterOptions = getFilterOptions(column);
128
+ const option = filterOptions.find(opt => opt.value === filterValue);
129
+ const valueLabel = option ? option.label : String(filterValue);
130
+
131
+ return {
132
+ column: columnKey,
133
+ columnLabel: column.label,
134
+ value: filterValue,
135
+ valueLabel: valueLabel,
136
+ };
137
+ })
138
+ .filter(Boolean);
139
+ });
140
+
141
+ // Количество активных фильтров
142
+ const activeFiltersCount = computed(() => {
143
+ return activeFilters.value.length;
144
+ });
145
+
146
+ return {
147
+ filters,
148
+ searchQuery,
149
+ filteredData,
150
+ applyFilter,
151
+ clearFilters,
152
+ clearColumnFilter,
153
+ getFilterOptions,
154
+ activeFilters,
155
+ activeFiltersCount,
156
+ };
157
+ }
158
+
@@ -0,0 +1,89 @@
1
+ import { ref, computed, watch } from 'vue';
2
+
3
+ /**
4
+ * Composable для пагинации данных таблицы
5
+ */
6
+ export function useTablePagination(data, props, emit) {
7
+ const currentPage = ref(1);
8
+ const pageSize = ref(props.defaultPageSize || 10);
9
+
10
+ // Общее количество страниц
11
+ const totalPages = computed(() => {
12
+ if (!props.paginated || data.value.length === 0) return 1;
13
+ return Math.ceil(data.value.length / pageSize.value);
14
+ });
15
+
16
+ // Пагинированные данные
17
+ const paginatedData = computed(() => {
18
+ if (!props.paginated) {
19
+ return data.value;
20
+ }
21
+
22
+ const start = (currentPage.value - 1) * pageSize.value;
23
+ const end = start + pageSize.value;
24
+ return data.value.slice(start, end);
25
+ });
26
+
27
+ // Информация о пагинации
28
+ const paginationInfo = computed(() => {
29
+ const total = data.value.length;
30
+ if (total === 0) {
31
+ return { from: 0, to: 0, total: 0 };
32
+ }
33
+
34
+ const from = (currentPage.value - 1) * pageSize.value + 1;
35
+ const to = Math.min(currentPage.value * pageSize.value, total);
36
+
37
+ return { from, to, total };
38
+ });
39
+
40
+ // Переход на страницу
41
+ const goToPage = (page) => {
42
+ if (page < 1 || page > totalPages.value) return;
43
+ currentPage.value = page;
44
+ emit('page-change', currentPage.value);
45
+ };
46
+
47
+ // Следующая страница
48
+ const nextPage = () => {
49
+ if (currentPage.value < totalPages.value) {
50
+ currentPage.value++;
51
+ emit('page-change', currentPage.value);
52
+ }
53
+ };
54
+
55
+ // Предыдущая страница
56
+ const previousPage = () => {
57
+ if (currentPage.value > 1) {
58
+ currentPage.value--;
59
+ emit('page-change', currentPage.value);
60
+ }
61
+ };
62
+
63
+ // Изменение размера страницы
64
+ const changePageSize = (newSize) => {
65
+ pageSize.value = newSize;
66
+ currentPage.value = 1; // Сброс на первую страницу
67
+ emit('page-size-change', pageSize.value);
68
+ };
69
+
70
+ // Сброс на первую страницу при изменении данных
71
+ watch(() => data.value.length, () => {
72
+ if (currentPage.value > totalPages.value) {
73
+ currentPage.value = Math.max(1, totalPages.value);
74
+ }
75
+ });
76
+
77
+ return {
78
+ currentPage,
79
+ pageSize,
80
+ totalPages,
81
+ paginatedData,
82
+ paginationInfo,
83
+ goToPage,
84
+ nextPage,
85
+ previousPage,
86
+ changePageSize,
87
+ };
88
+ }
89
+
@@ -0,0 +1,77 @@
1
+ import { ref, computed } from 'vue';
2
+
3
+ /**
4
+ * Composable для выделения строк таблицы
5
+ */
6
+ export function useTableSelection(data, props, emit) {
7
+ const selectedRows = ref([]);
8
+
9
+ // Все ли строки выбраны
10
+ const allSelected = computed(() => {
11
+ if (data.value.length === 0) return false;
12
+ return selectedRows.value.length === data.value.length;
13
+ });
14
+
15
+ // Некоторые строки выбраны (для indeterminate состояния)
16
+ const someSelected = computed(() => {
17
+ return selectedRows.value.length > 0 && selectedRows.value.length < data.value.length;
18
+ });
19
+
20
+ // Проверка выбрана ли строка
21
+ const isSelected = (id) => {
22
+ return selectedRows.value.includes(id);
23
+ };
24
+
25
+ // Переключение выделения строки
26
+ const toggleRow = (id) => {
27
+ const index = selectedRows.value.indexOf(id);
28
+ if (index > -1) {
29
+ selectedRows.value.splice(index, 1);
30
+ } else {
31
+ selectedRows.value.push(id);
32
+ }
33
+
34
+ emit('row-select', { id, selected: index === -1, selectedRows: [...selectedRows.value] });
35
+ };
36
+
37
+ // Выбрать все строки
38
+ const selectAll = () => {
39
+ if (allSelected.value) {
40
+ selectedRows.value = [];
41
+ emit('select-all', { selected: false, selectedRows: [] });
42
+ } else {
43
+ selectedRows.value = data.value.map(row => row.id);
44
+ emit('select-all', { selected: true, selectedRows: [...selectedRows.value] });
45
+ }
46
+ };
47
+
48
+ // Очистить выделение
49
+ const clearSelection = () => {
50
+ selectedRows.value = [];
51
+ emit('selection-clear');
52
+ };
53
+
54
+ // Выбрать определенные строки
55
+ const selectRows = (ids) => {
56
+ selectedRows.value = [...ids];
57
+ emit('selection-change', [...selectedRows.value]);
58
+ };
59
+
60
+ // Получить выбранные объекты данных
61
+ const getSelectedRowsData = () => {
62
+ return data.value.filter(row => selectedRows.value.includes(row.id));
63
+ };
64
+
65
+ return {
66
+ selectedRows,
67
+ allSelected,
68
+ someSelected,
69
+ isSelected,
70
+ toggleRow,
71
+ selectAll,
72
+ clearSelection,
73
+ selectRows,
74
+ getSelectedRowsData,
75
+ };
76
+ }
77
+
@@ -0,0 +1,75 @@
1
+ import { ref, computed } from 'vue';
2
+
3
+ /**
4
+ * Composable для сортировки данных таблицы
5
+ */
6
+ export function useTableSort(data, props, emit) {
7
+ const sortBy = ref(props.defaultSort?.column || null);
8
+ const sortDirection = ref(props.defaultSort?.direction || 'asc');
9
+
10
+ // Сортированные данные
11
+ const sortedData = computed(() => {
12
+ if (!sortBy.value || !props.sortable) {
13
+ return data.value;
14
+ }
15
+
16
+ const sorted = [...data.value].sort((a, b) => {
17
+ const aVal = a[sortBy.value];
18
+ const bVal = b[sortBy.value];
19
+
20
+ // Обработка null/undefined
21
+ if (aVal == null) return 1;
22
+ if (bVal == null) return -1;
23
+
24
+ // Числовая сортировка
25
+ if (typeof aVal === 'number' && typeof bVal === 'number') {
26
+ return sortDirection.value === 'asc' ? aVal - bVal : bVal - aVal;
27
+ }
28
+
29
+ // Строковая сортировка (case-insensitive)
30
+ const aStr = String(aVal).toLowerCase();
31
+ const bStr = String(bVal).toLowerCase();
32
+
33
+ if (sortDirection.value === 'asc') {
34
+ return aStr.localeCompare(bStr);
35
+ } else {
36
+ return bStr.localeCompare(aStr);
37
+ }
38
+ });
39
+
40
+ return sorted;
41
+ });
42
+
43
+ // Переключение сортировки
44
+ const toggleSort = (column) => {
45
+ if (sortBy.value === column) {
46
+ // Циклическая смена: asc -> desc -> null
47
+ if (sortDirection.value === 'asc') {
48
+ sortDirection.value = 'desc';
49
+ } else if (sortDirection.value === 'desc') {
50
+ sortBy.value = null;
51
+ sortDirection.value = 'asc';
52
+ }
53
+ } else {
54
+ sortBy.value = column;
55
+ sortDirection.value = 'asc';
56
+ }
57
+
58
+ emit('sort', { column: sortBy.value, direction: sortDirection.value });
59
+ };
60
+
61
+ // Сброс сортировки
62
+ const resetSort = () => {
63
+ sortBy.value = props.defaultSort?.column || null;
64
+ sortDirection.value = props.defaultSort?.direction || 'asc';
65
+ };
66
+
67
+ return {
68
+ sortBy,
69
+ sortDirection,
70
+ sortedData,
71
+ toggleSort,
72
+ resetSort,
73
+ };
74
+ }
75
+
@@ -0,0 +1,88 @@
1
+ import { ref, onMounted, onBeforeUnmount } from 'vue';
2
+
3
+ /**
4
+ * Composable для управления прокруткой табов
5
+ * @param {Ref} containerRef - ссылка на контейнер с табами
6
+ * @param {Ref} showScrollButtons - показывать ли кнопки прокрутки
7
+ */
8
+ export function useTabsScroll(containerRef, showScrollButtons) {
9
+ const canScrollLeft = ref(false);
10
+ const canScrollRight = ref(false);
11
+
12
+ /**
13
+ * Обновить состояние возможности прокрутки
14
+ */
15
+ const updateScrollState = () => {
16
+ if (!containerRef.value) return;
17
+
18
+ const { scrollLeft, scrollWidth, clientWidth } = containerRef.value;
19
+ canScrollLeft.value = scrollLeft > 0;
20
+ canScrollRight.value = scrollLeft + clientWidth < scrollWidth - 1; // -1 для погрешности
21
+ };
22
+
23
+ /**
24
+ * Прокрутка влево
25
+ */
26
+ const scrollLeft = () => {
27
+ if (containerRef.value) {
28
+ containerRef.value.scrollBy({ left: -200, behavior: 'smooth' });
29
+ }
30
+ };
31
+
32
+ /**
33
+ * Прокрутка вправо
34
+ */
35
+ const scrollRight = () => {
36
+ if (containerRef.value) {
37
+ containerRef.value.scrollBy({ left: 200, behavior: 'smooth' });
38
+ }
39
+ };
40
+
41
+ /**
42
+ * Прокрутка к активному табу
43
+ */
44
+ const scrollToActiveTab = () => {
45
+ if (!containerRef.value) return;
46
+
47
+ const activeTab = containerRef.value.querySelector('.tab-btn.active');
48
+ if (activeTab) {
49
+ activeTab.scrollIntoView({
50
+ behavior: 'smooth',
51
+ block: 'nearest',
52
+ inline: 'center',
53
+ });
54
+ }
55
+ };
56
+
57
+ let scrollHandler = null;
58
+
59
+ onMounted(() => {
60
+ if (containerRef.value && showScrollButtons.value) {
61
+ scrollHandler = () => updateScrollState();
62
+ containerRef.value.addEventListener('scroll', scrollHandler);
63
+
64
+ // Инициализация состояния
65
+ setTimeout(updateScrollState, 0);
66
+
67
+ // Обновление при ресайзе окна
68
+ window.addEventListener('resize', updateScrollState);
69
+ }
70
+ });
71
+
72
+ onBeforeUnmount(() => {
73
+ if (containerRef.value && scrollHandler) {
74
+ containerRef.value.removeEventListener('scroll', scrollHandler);
75
+ window.removeEventListener('resize', updateScrollState);
76
+ }
77
+ });
78
+
79
+ return {
80
+ canScrollLeft,
81
+ canScrollRight,
82
+ scrollLeft,
83
+ scrollRight,
84
+ scrollToActiveTab,
85
+ updateScrollState,
86
+ };
87
+ }
88
+