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,385 @@
1
+ <template>
2
+ <div
3
+ :class="filterClasses"
4
+ data-component="DXDataFilter"
5
+ :data-grouping="grouping"
6
+ >
7
+ <!-- Заголовок -->
8
+ <div v-if="title || $slots.header" :class="headerClasses">
9
+ <slot name="header">
10
+ <h3 v-if="title" class="text-lg font-semibold text-slate-900">
11
+ {{ title }}
12
+ </h3>
13
+ </slot>
14
+ </div>
15
+
16
+ <!-- Группы фильтров -->
17
+ <div :class="filtersClasses">
18
+ <div
19
+ v-for="(group, groupIndex) in filterGroups"
20
+ :key="groupIndex"
21
+ :class="groupClasses"
22
+ >
23
+ <!-- Группировка AND/OR -->
24
+ <div v-if="groupIndex > 0" :class="groupingClasses">
25
+ <DXButton
26
+ :variant="grouping === 'AND' ? 'primary' : 'ghost'"
27
+ size="sm"
28
+ @click="toggleGrouping"
29
+ >
30
+ {{ grouping }}
31
+ </DXButton>
32
+ </div>
33
+
34
+ <!-- Фильтры в группе -->
35
+ <div :class="filtersInGroupClasses">
36
+ <div
37
+ v-for="(filter, filterIndex) in group"
38
+ :key="filter.id || filterIndex"
39
+ :class="filterItemClasses"
40
+ >
41
+ <!-- Удаление фильтра -->
42
+ <DXButton
43
+ v-if="removable"
44
+ variant="ghost"
45
+ size="sm"
46
+ @click="removeFilter(filter.id)"
47
+ >
48
+ <template #icon>
49
+ <DXIcon :icon="XMarkIcon" size="sm" />
50
+ </template>
51
+ </DXButton>
52
+
53
+ <!-- Определение фильтра -->
54
+ <div class="flex-1">
55
+ <label class="block text-sm font-medium text-slate-700 mb-1">
56
+ {{ filter.label || filterDefinitions[filter.id]?.label }}
57
+ </label>
58
+
59
+ <!-- Текстовый фильтр -->
60
+ <DXInput
61
+ v-if="filter.type === 'text' || !filter.type"
62
+ v-model="filter.value"
63
+ :placeholder="filter.placeholder || 'Введите значение'"
64
+ @update:model-value="handleFilterChange"
65
+ />
66
+
67
+ <!-- Числовой фильтр -->
68
+ <div v-else-if="filter.type === 'number'" class="flex gap-2">
69
+ <DXInput
70
+ v-model="filter.value.min"
71
+ type="number"
72
+ placeholder="От"
73
+ @update:model-value="handleFilterChange"
74
+ />
75
+ <DXInput
76
+ v-model="filter.value.max"
77
+ type="number"
78
+ placeholder="До"
79
+ @update:model-value="handleFilterChange"
80
+ />
81
+ </div>
82
+
83
+ <!-- Select фильтр -->
84
+ <DXSelect
85
+ v-else-if="filter.type === 'select'"
86
+ v-model="filter.value"
87
+ :options="filter.options || filterDefinitions[filter.id]?.options"
88
+ :placeholder="filter.placeholder || 'Выберите значение'"
89
+ @update:model-value="handleFilterChange"
90
+ />
91
+
92
+ <!-- Date фильтр -->
93
+ <DXDatePicker
94
+ v-else-if="filter.type === 'date'"
95
+ v-model="filter.value"
96
+ :range="filter.range"
97
+ @update:model-value="handleFilterChange"
98
+ />
99
+
100
+ <!-- Кастомный фильтр через slot -->
101
+ <slot
102
+ v-else
103
+ :name="`filter-${filter.type}`"
104
+ :filter="filter"
105
+ :filter-definition="filterDefinitions[filter.id]"
106
+ >
107
+ <p class="text-sm text-slate-500">
108
+ Используйте slot filter-{{ filter.type }} для кастомного фильтра
109
+ </p>
110
+ </slot>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </div>
116
+
117
+ <!-- Действия -->
118
+ <div v-if="$slots.actions || showActions" :class="actionsClasses">
119
+ <slot name="actions">
120
+ <DXButton variant="ghost" @click="handleReset">Сбросить</DXButton>
121
+ <DXButton variant="primary" @click="handleApply">Применить</DXButton>
122
+ </slot>
123
+ </div>
124
+ </div>
125
+ </template>
126
+
127
+ <script setup>
128
+ import { ref, computed, watch } from "vue";
129
+ import { useClassComposition } from "@/composables/useClassComposition";
130
+ import { useSpacing } from "@/composables/useSpacing";
131
+ import DXInput from "../DXInput/DXInput.vue";
132
+ import DXSelect from "../DXSelect/DXSelect.vue";
133
+ import DXDatePicker from "../DXDatePicker/DXDatePicker.vue";
134
+ import DXButton from "../../atoms/DXButton/DXButton.vue";
135
+ import DXIcon from "../../atoms/DXIcon/DXIcon.vue";
136
+ import { XMarkIcon } from "@heroicons/vue/24/outline";
137
+
138
+ const props = defineProps({
139
+ /**
140
+ * Активные фильтры (v-model)
141
+ * Формат: [{ id, type, value, label?, placeholder?, options?, range? }]
142
+ */
143
+ filters: {
144
+ type: Array,
145
+ required: true,
146
+ default: () => [],
147
+ },
148
+ /**
149
+ * Определения фильтров
150
+ * Формат: [{ id, label, type, options?, placeholder? }]
151
+ */
152
+ filterDefinitions: {
153
+ type: Array,
154
+ default: () => [],
155
+ },
156
+ /**
157
+ * Группировка условий: AND | OR
158
+ * @default 'AND'
159
+ */
160
+ grouping: {
161
+ type: String,
162
+ default: "AND",
163
+ validator: (v) => ["AND", "OR"].includes(v),
164
+ },
165
+ /**
166
+ * Заголовок фильтра
167
+ */
168
+ title: { type: String, default: "" },
169
+ /**
170
+ * Можно ли удалять фильтры
171
+ * @default true
172
+ */
173
+ removable: { type: Boolean, default: true },
174
+ /**
175
+ * Показывать кнопки действий
176
+ * @default true
177
+ */
178
+ showActions: { type: Boolean, default: true },
179
+ });
180
+
181
+ const emit = defineEmits([
182
+ "update:filters",
183
+ "apply",
184
+ "reset",
185
+ "filter-change",
186
+ "grouping-change",
187
+ ]);
188
+
189
+ const internalFilters = ref([...props.filters]);
190
+ const internalGrouping = ref(props.grouping);
191
+
192
+ /**
193
+ * Группы фильтров
194
+ *
195
+ * @description
196
+ * Разбивает фильтры на группы для отображения с группировкой AND/OR.
197
+ *
198
+ * @returns {Array} Массив групп фильтров
199
+ */
200
+ const filterGroups = computed(() => {
201
+ // Упрощенная логика: все фильтры в одной группе
202
+ // В реальной реализации можно разбивать на несколько групп
203
+ return [internalFilters.value];
204
+ });
205
+
206
+ /**
207
+ * Классы для контейнера фильтра
208
+ *
209
+ * @description
210
+ * Базовые классы для контейнера фильтра.
211
+ *
212
+ * @returns {Array} Массив классов
213
+ */
214
+ const filterClasses = computed(() =>
215
+ useClassComposition("w-full")
216
+ );
217
+
218
+ /**
219
+ * Классы для header
220
+ *
221
+ * @description
222
+ * Классы для секции заголовка.
223
+ *
224
+ * @returns {Array} Массив классов
225
+ */
226
+ const headerClasses = computed(() =>
227
+ useClassComposition("mb-4", useSpacing("md", "padding"))
228
+ );
229
+
230
+ /**
231
+ * Классы для контейнера фильтров
232
+ *
233
+ * @description
234
+ * Классы для контейнера с фильтрами.
235
+ *
236
+ * @returns {Array} Массив классов
237
+ */
238
+ const filtersClasses = computed(() =>
239
+ useClassComposition("space-y-4")
240
+ );
241
+
242
+ /**
243
+ * Классы для группы фильтров
244
+ *
245
+ * @description
246
+ * Классы для группы фильтров.
247
+ *
248
+ * @returns {Array} Массив классов
249
+ */
250
+ const groupClasses = computed(() =>
251
+ useClassComposition("space-y-2")
252
+ );
253
+
254
+ /**
255
+ * Классы для группировки AND/OR
256
+ *
257
+ * @description
258
+ * Классы для кнопки группировки.
259
+ *
260
+ * @returns {Array} Массив классов
261
+ */
262
+ const groupingClasses = computed(() =>
263
+ useClassComposition("flex items-center justify-center py-2")
264
+ );
265
+
266
+ /**
267
+ * Классы для фильтров в группе
268
+ *
269
+ * @description
270
+ * Классы для контейнера фильтров в группе.
271
+ *
272
+ * @returns {Array} Массив классов
273
+ */
274
+ const filtersInGroupClasses = computed(() =>
275
+ useClassComposition("space-y-3")
276
+ );
277
+
278
+ /**
279
+ * Классы для элемента фильтра
280
+ *
281
+ * @description
282
+ * Классы для каждого элемента фильтра.
283
+ *
284
+ * @returns {Array} Массив классов
285
+ */
286
+ const filterItemClasses = computed(() =>
287
+ useClassComposition("flex items-start gap-2")
288
+ );
289
+
290
+ /**
291
+ * Классы для секции действий
292
+ *
293
+ * @description
294
+ * Классы для секции с кнопками действий.
295
+ *
296
+ * @returns {Array} Массив классов
297
+ */
298
+ const actionsClasses = computed(() =>
299
+ useClassComposition(
300
+ "flex items-center justify-end gap-2 mt-4",
301
+ useSpacing("md", "padding")
302
+ )
303
+ );
304
+
305
+ /**
306
+ * Обработчик изменения фильтра
307
+ *
308
+ * @description
309
+ * Эмитит событие при изменении значения фильтра.
310
+ */
311
+ function handleFilterChange() {
312
+ emit("update:filters", [...internalFilters.value]);
313
+ emit("filter-change", [...internalFilters.value]);
314
+ }
315
+
316
+ /**
317
+ * Переключение группировки
318
+ *
319
+ * @description
320
+ * Переключает группировку между AND и OR.
321
+ */
322
+ function toggleGrouping() {
323
+ internalGrouping.value = internalGrouping.value === "AND" ? "OR" : "AND";
324
+ emit("grouping-change", internalGrouping.value);
325
+ }
326
+
327
+ /**
328
+ * Удаление фильтра
329
+ *
330
+ * @description
331
+ * Удаляет фильтр по ID.
332
+ *
333
+ * @param {string|number} filterId - ID фильтра
334
+ */
335
+ function removeFilter(filterId) {
336
+ internalFilters.value = internalFilters.value.filter(
337
+ (f) => f.id !== filterId
338
+ );
339
+ handleFilterChange();
340
+ }
341
+
342
+ /**
343
+ * Применение фильтров
344
+ *
345
+ * @description
346
+ * Эмитит событие применения фильтров.
347
+ */
348
+ function handleApply() {
349
+ emit("apply", {
350
+ filters: [...internalFilters.value],
351
+ grouping: internalGrouping.value,
352
+ });
353
+ }
354
+
355
+ /**
356
+ * Сброс фильтров
357
+ *
358
+ * @description
359
+ * Сбрасывает все фильтры.
360
+ */
361
+ function handleReset() {
362
+ internalFilters.value = [];
363
+ internalGrouping.value = "AND";
364
+ emit("reset");
365
+ emit("update:filters", []);
366
+ }
367
+
368
+ // Синхронизация с prop filters
369
+ watch(
370
+ () => props.filters,
371
+ (newFilters) => {
372
+ internalFilters.value = [...newFilters];
373
+ },
374
+ { deep: true }
375
+ );
376
+
377
+ // Синхронизация с prop grouping
378
+ watch(
379
+ () => props.grouping,
380
+ (newGrouping) => {
381
+ internalGrouping.value = newGrouping;
382
+ }
383
+ );
384
+ </script>
385
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXDataFilter.vue';
2
+
@@ -0,0 +1,42 @@
1
+ import DXDatePicker from './DXDatePicker.vue';
2
+ import { ref } from 'vue';
3
+
4
+ export default {
5
+ title: 'Molecules/DXDatePicker',
6
+ component: DXDatePicker,
7
+ tags: ['autodocs'],
8
+ };
9
+
10
+ export const Default = {
11
+ render: () => ({
12
+ components: { DXDatePicker },
13
+ setup() {
14
+ const date = ref('');
15
+ return { date };
16
+ },
17
+ template: '<DXDatePicker v-model="date" label="Date" />',
18
+ }),
19
+ };
20
+
21
+ export const WithValue = {
22
+ render: () => ({
23
+ components: { DXDatePicker },
24
+ setup() {
25
+ const date = ref('2024-01-15');
26
+ return { date };
27
+ },
28
+ template: '<DXDatePicker v-model="date" label="Selected Date" />',
29
+ }),
30
+ };
31
+
32
+ export const WithPlaceholder = {
33
+ render: () => ({
34
+ components: { DXDatePicker },
35
+ setup() {
36
+ const date = ref('');
37
+ return { date };
38
+ },
39
+ template: '<DXDatePicker v-model="date" label="Birth Date" placeholder="Select your birth date" />',
40
+ }),
41
+ };
42
+
@@ -0,0 +1,121 @@
1
+ <template>
2
+ <div class="w-full" data-component="DXDatePicker">
3
+ <label v-if="label" class="block text-sm text-slate-600 mb-1 font-medium">{{ label }}</label>
4
+ <div class="relative">
5
+ <input
6
+ :type="range ? 'text' : 'date'"
7
+ :value="displayValue"
8
+ :placeholder="placeholder"
9
+ :disabled="disabled"
10
+ class="w-full h-10 px-4 py-2.5 text-sm rounded-xl border border-slate-200 bg-white text-slate-700 transition-colors hover:border-slate-300 focus:outline-none focus:ring-2 focus:ring-slate-900/10 focus:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed disabled:bg-slate-50"
11
+ :readonly="range"
12
+ @change="!range && handleChange($event.target.value)"
13
+ @click="range && toggleCalendar()"
14
+ />
15
+ <svg class="absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-400 pointer-events-none" fill="none" stroke="currentColor" viewBox="0 0 24 24">
16
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
17
+ </svg>
18
+ </div>
19
+
20
+ <!-- Range Picker -->
21
+ <div v-if="range && showCalendar" class="absolute z-20 mt-2 p-4 bg-white border border-slate-200 rounded-xl shadow-lg">
22
+ <div class="space-y-3">
23
+ <div>
24
+ <label class="text-xs text-slate-600">От</label>
25
+ <input
26
+ type="date"
27
+ v-model="rangeStart"
28
+ class="w-full mt-1 px-3 py-2 text-sm border border-slate-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-slate-900/10"
29
+ />
30
+ </div>
31
+ <div>
32
+ <label class="text-xs text-slate-600">До</label>
33
+ <input
34
+ type="date"
35
+ v-model="rangeEnd"
36
+ class="w-full mt-1 px-3 py-2 text-sm border border-slate-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-slate-900/10"
37
+ />
38
+ </div>
39
+ <div class="flex gap-2">
40
+ <button
41
+ type="button"
42
+ class="flex-1 px-3 py-2 text-sm bg-slate-900 text-white rounded-lg hover:bg-slate-800"
43
+ @click="applyRange"
44
+ >
45
+ Применить
46
+ </button>
47
+ <button
48
+ type="button"
49
+ class="px-3 py-2 text-sm border border-slate-200 rounded-lg hover:bg-slate-50"
50
+ @click="showCalendar = false"
51
+ >
52
+ Отмена
53
+ </button>
54
+ </div>
55
+ </div>
56
+ </div>
57
+
58
+ <p v-if="helper" class="mt-1 text-xs text-slate-500">{{ helper }}</p>
59
+ </div>
60
+ </template>
61
+
62
+ <script setup>
63
+ import { ref, computed } from "vue";
64
+
65
+ const props = defineProps({
66
+ /** Значение (v-model) - строка или { start, end } для range */
67
+ modelValue: [String, Object],
68
+ /** Лейбл */
69
+ label: { type: String, default: "" },
70
+ /** Placeholder */
71
+ placeholder: { type: String, default: "" },
72
+ /** Вспомогательный текст */
73
+ helper: { type: String, default: "" },
74
+ /** Отключенное состояние */
75
+ disabled: { type: Boolean, default: false },
76
+ /** Режим диапазона */
77
+ range: { type: Boolean, default: false },
78
+ });
79
+
80
+ const emit = defineEmits(["update:modelValue"]);
81
+
82
+ const showCalendar = ref(false);
83
+ const rangeStart = ref("");
84
+ const rangeEnd = ref("");
85
+
86
+ const displayValue = computed(() => {
87
+ if (props.range && typeof props.modelValue === "object" && props.modelValue) {
88
+ const { start, end } = props.modelValue;
89
+ if (start && end) {
90
+ return `${formatDate(start)} - ${formatDate(end)}`;
91
+ }
92
+ return "";
93
+ }
94
+ return props.modelValue || "";
95
+ });
96
+
97
+ const formatDate = (dateStr) => {
98
+ if (!dateStr) return "";
99
+ const date = new Date(dateStr);
100
+ return date.toLocaleDateString("ru-RU");
101
+ };
102
+
103
+ const handleChange = (value) => emit("update:modelValue", value);
104
+
105
+ const toggleCalendar = () => {
106
+ if (props.disabled) return;
107
+ showCalendar.value = !showCalendar.value;
108
+ if (showCalendar.value && typeof props.modelValue === "object" && props.modelValue) {
109
+ rangeStart.value = props.modelValue.start || "";
110
+ rangeEnd.value = props.modelValue.end || "";
111
+ }
112
+ };
113
+
114
+ const applyRange = () => {
115
+ if (rangeStart.value && rangeEnd.value) {
116
+ emit("update:modelValue", { start: rangeStart.value, end: rangeEnd.value });
117
+ }
118
+ showCalendar.value = false;
119
+ };
120
+ </script>
121
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXDatePicker.vue';
2
+
@@ -0,0 +1,30 @@
1
+ <template>
2
+ <DXDivider
3
+ :color="color"
4
+ :thickness="thickness"
5
+ spacing="none"
6
+ orientation="horizontal"
7
+ data-component="DXDropdownDivider"
8
+ :data-color="color"
9
+ />
10
+ </template>
11
+
12
+ <script setup>
13
+ import DXDivider from '../../atoms/DXDivider/DXDivider.vue';
14
+
15
+ const props = defineProps({
16
+ /** Цвет разделителя: light | default | dark */
17
+ color: {
18
+ type: String,
19
+ default: 'default',
20
+ validator: (value) => ['default', 'light', 'dark'].includes(value)
21
+ },
22
+ /** Толщина: thin | default | thick */
23
+ thickness: {
24
+ type: String,
25
+ default: 'default',
26
+ validator: (value) => ['thin', 'default', 'thick'].includes(value)
27
+ }
28
+ });
29
+ </script>
30
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXDropdownDivider.vue';
2
+
@@ -0,0 +1,53 @@
1
+ import DXFileUpload from './DXFileUpload.vue';
2
+ import { ref } from 'vue';
3
+
4
+ export default {
5
+ title: 'Molecules/DXFileUpload',
6
+ component: DXFileUpload,
7
+ tags: ['autodocs'],
8
+ };
9
+
10
+ export const Default = {
11
+ render: () => ({
12
+ components: { DXFileUpload },
13
+ setup() {
14
+ const file = ref(null);
15
+ return { file };
16
+ },
17
+ template: '<DXFileUpload v-model="file" label="Upload file" />',
18
+ }),
19
+ };
20
+
21
+ export const Multiple = {
22
+ render: () => ({
23
+ components: { DXFileUpload },
24
+ setup() {
25
+ const files = ref([]);
26
+ return { files };
27
+ },
28
+ template: '<DXFileUpload v-model="files" label="Upload files" multiple />',
29
+ }),
30
+ };
31
+
32
+ export const ImagesOnly = {
33
+ render: () => ({
34
+ components: { DXFileUpload },
35
+ setup() {
36
+ const file = ref(null);
37
+ return { file };
38
+ },
39
+ template: '<DXFileUpload v-model="file" label="Upload image" accept="image/*" helper="PNG, JPG up to 5MB" />',
40
+ }),
41
+ };
42
+
43
+ export const Disabled = {
44
+ render: () => ({
45
+ components: { DXFileUpload },
46
+ setup() {
47
+ const file = ref(null);
48
+ return { file };
49
+ },
50
+ template: '<DXFileUpload v-model="file" label="Disabled upload" disabled />',
51
+ }),
52
+ };
53
+