dxd-style-code 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) 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 +14 -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/index.js +20 -0
  78. package/src/components/layout/DXBox/DXBox.stories.js +238 -0
  79. package/src/components/layout/DXBox/DXBox.vue +198 -0
  80. package/src/components/layout/DXBox/index.js +2 -0
  81. package/src/components/layout/DXContainer/DXContainer.stories.js +147 -0
  82. package/src/components/layout/DXContainer/DXContainer.vue +83 -0
  83. package/src/components/layout/DXContainer/index.js +2 -0
  84. package/src/components/layout/DXFlex/DXFlex.stories.js +210 -0
  85. package/src/components/layout/DXFlex/DXFlex.vue +149 -0
  86. package/src/components/layout/DXFlex/index.js +2 -0
  87. package/src/components/layout/DXGrid/DXGrid.stories.js +238 -0
  88. package/src/components/layout/DXGrid/DXGrid.vue +167 -0
  89. package/src/components/layout/DXGrid/index.js +2 -0
  90. package/src/components/layout/DXSpacer/DXSpacer.stories.js +187 -0
  91. package/src/components/layout/DXSpacer/DXSpacer.vue +102 -0
  92. package/src/components/layout/DXSpacer/index.js +2 -0
  93. package/src/components/layout/DXStack/DXStack.stories.js +199 -0
  94. package/src/components/layout/DXStack/DXStack.vue +140 -0
  95. package/src/components/layout/DXStack/index.js +2 -0
  96. package/src/components/layout/index.js +8 -0
  97. package/src/components/molecules/DXActionButtons/DXActionButtons.stories.js +288 -0
  98. package/src/components/molecules/DXActionButtons/DXActionButtons.vue +106 -0
  99. package/src/components/molecules/DXActionButtons/index.js +2 -0
  100. package/src/components/molecules/DXAlert/DXAlert.stories.js +70 -0
  101. package/src/components/molecules/DXAlert/DXAlert.vue +116 -0
  102. package/src/components/molecules/DXAlert/index.js +2 -0
  103. package/src/components/molecules/DXBaseTable/DXBaseTable.stories.js +433 -0
  104. package/src/components/molecules/DXBaseTable/DXBaseTable.vue +459 -0
  105. package/src/components/molecules/DXBaseTable/index.js +4 -0
  106. package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.stories.js +227 -0
  107. package/src/components/molecules/DXBreadcrumb/DXBreadcrumb.vue +96 -0
  108. package/src/components/molecules/DXBreadcrumb/index.js +2 -0
  109. package/src/components/molecules/DXButtonGroup/DXButtonGroup.stories.js +26 -0
  110. package/src/components/molecules/DXButtonGroup/DXButtonGroup.vue +78 -0
  111. package/src/components/molecules/DXButtonGroup/index.js +2 -0
  112. package/src/components/molecules/DXCloseButton/DXCloseButton.stories.js +53 -0
  113. package/src/components/molecules/DXCloseButton/DXCloseButton.vue +62 -0
  114. package/src/components/molecules/DXCloseButton/index.js +3 -0
  115. package/src/components/molecules/DXComboBox/DXComboBox.stories.js +62 -0
  116. package/src/components/molecules/DXComboBox/DXComboBox.vue +167 -0
  117. package/src/components/molecules/DXComboBox/index.js +2 -0
  118. package/src/components/molecules/DXCopyField/DXCopyField.stories.js +231 -0
  119. package/src/components/molecules/DXCopyField/DXCopyField.vue +75 -0
  120. package/src/components/molecules/DXCopyField/index.js +2 -0
  121. package/src/components/molecules/DXDataFilter/DXDataFilter.stories.js +275 -0
  122. package/src/components/molecules/DXDataFilter/DXDataFilter.vue +385 -0
  123. package/src/components/molecules/DXDataFilter/index.js +2 -0
  124. package/src/components/molecules/DXDatePicker/DXDatePicker.stories.js +42 -0
  125. package/src/components/molecules/DXDatePicker/DXDatePicker.vue +121 -0
  126. package/src/components/molecules/DXDatePicker/index.js +2 -0
  127. package/src/components/molecules/DXDropdownDivider/DXDropdownDivider.vue +30 -0
  128. package/src/components/molecules/DXDropdownDivider/index.js +2 -0
  129. package/src/components/molecules/DXFileUpload/DXFileUpload.stories.js +53 -0
  130. package/src/components/molecules/DXFileUpload/DXFileUpload.vue +199 -0
  131. package/src/components/molecules/DXFileUpload/index.js +2 -0
  132. package/src/components/molecules/DXFilterGroup/DXFilterGroup.stories.js +43 -0
  133. package/src/components/molecules/DXFilterGroup/DXFilterGroup.vue +43 -0
  134. package/src/components/molecules/DXFilterGroup/index.js +2 -0
  135. package/src/components/molecules/DXFormControl/DXFormControl.stories.js +69 -0
  136. package/src/components/molecules/DXFormControl/DXFormControl.vue +72 -0
  137. package/src/components/molecules/DXFormControl/index.js +2 -0
  138. package/src/components/molecules/DXInput/DXInput.stories.js +291 -0
  139. package/src/components/molecules/DXInput/DXInput.vue +156 -0
  140. package/src/components/molecules/DXInput/index.js +3 -0
  141. package/src/components/molecules/DXInputGroup/DXInputGroup.stories.js +228 -0
  142. package/src/components/molecules/DXInputGroup/DXInputGroup.vue +64 -0
  143. package/src/components/molecules/DXInputGroup/index.js +2 -0
  144. package/src/components/molecules/DXInputMask/DXInputMask.stories.js +53 -0
  145. package/src/components/molecules/DXInputMask/DXInputMask.vue +89 -0
  146. package/src/components/molecules/DXInputMask/index.js +2 -0
  147. package/src/components/molecules/DXMenu/DXMenu.stories.js +379 -0
  148. package/src/components/molecules/DXMenu/DXMenu.vue +331 -0
  149. package/src/components/molecules/DXMenu/README.md +479 -0
  150. package/src/components/molecules/DXMenu/index.js +2 -0
  151. package/src/components/molecules/DXPagination/DXPagination.stories.js +62 -0
  152. package/src/components/molecules/DXPagination/DXPagination.vue +123 -0
  153. package/src/components/molecules/DXPagination/index.js +2 -0
  154. package/src/components/molecules/DXPasswordInput/DXPasswordInput.stories.js +42 -0
  155. package/src/components/molecules/DXPasswordInput/DXPasswordInput.vue +74 -0
  156. package/src/components/molecules/DXPasswordInput/index.js +2 -0
  157. package/src/components/molecules/DXRadioCard/DXRadioCard.stories.js +60 -0
  158. package/src/components/molecules/DXRadioCard/DXRadioCard.vue +71 -0
  159. package/src/components/molecules/DXRadioCard/index.js +2 -0
  160. package/src/components/molecules/DXRadioGroup/DXRadioGroup.stories.js +297 -0
  161. package/src/components/molecules/DXRadioGroup/DXRadioGroup.vue +73 -0
  162. package/src/components/molecules/DXRadioGroup/index.js +2 -0
  163. package/src/components/molecules/DXRating/DXRating.stories.js +322 -0
  164. package/src/components/molecules/DXRating/DXRating.vue +402 -0
  165. package/src/components/molecules/DXRating/index.js +2 -0
  166. package/src/components/molecules/DXSearchBar/DXSearchBar.stories.js +357 -0
  167. package/src/components/molecules/DXSearchBar/DXSearchBar.vue +525 -0
  168. package/src/components/molecules/DXSearchBar/index.js +2 -0
  169. package/src/components/molecules/DXSearchSelect/DXSearchSelect.stories.js +50 -0
  170. package/src/components/molecules/DXSearchSelect/DXSearchSelect.vue +207 -0
  171. package/src/components/molecules/DXSearchSelect/index.js +2 -0
  172. package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.stories.js +326 -0
  173. package/src/components/molecules/DXSegmentedControl/DXSegmentedControl.vue +116 -0
  174. package/src/components/molecules/DXSegmentedControl/index.js +2 -0
  175. package/src/components/molecules/DXSelect/DXSelect.stories.js +259 -0
  176. package/src/components/molecules/DXSelect/DXSelect.vue +149 -0
  177. package/src/components/molecules/DXSelect/index.js +3 -0
  178. package/src/components/molecules/DXStatCard/DXStatCard.stories.js +335 -0
  179. package/src/components/molecules/DXStatCard/DXStatCard.vue +309 -0
  180. package/src/components/molecules/DXStatCard/index.js +2 -0
  181. package/src/components/molecules/DXTableFiltersPanel/DXTableFiltersPanel.vue +72 -0
  182. package/src/components/molecules/DXTableFiltersPanel/index.js +7 -0
  183. package/src/components/molecules/DXTablePagination/DXTablePagination.stories.js +236 -0
  184. package/src/components/molecules/DXTablePagination/DXTablePagination.vue +93 -0
  185. package/src/components/molecules/DXTablePagination/index.js +2 -0
  186. package/src/components/molecules/DXTableToolbar/DXTableToolbar.stories.js +271 -0
  187. package/src/components/molecules/DXTableToolbar/DXTableToolbar.vue +102 -0
  188. package/src/components/molecules/DXTableToolbar/index.js +2 -0
  189. package/src/components/molecules/DXTextarea/DXTextarea.stories.js +239 -0
  190. package/src/components/molecules/DXTextarea/DXTextarea.vue +158 -0
  191. package/src/components/molecules/DXTextarea/index.js +3 -0
  192. package/src/components/molecules/DXTimePicker/DXTimePicker.stories.js +282 -0
  193. package/src/components/molecules/DXTimePicker/DXTimePicker.vue +640 -0
  194. package/src/components/molecules/DXTimePicker/index.js +2 -0
  195. package/src/components/molecules/DXValidationIcon/DXValidationIcon.stories.js +60 -0
  196. package/src/components/molecules/DXValidationIcon/DXValidationIcon.vue +53 -0
  197. package/src/components/molecules/DXValidationIcon/index.js +3 -0
  198. package/src/components/molecules/index.js +34 -0
  199. package/src/components/organisms/DXAccordion/DXAccordion.stories.js +33 -0
  200. package/src/components/organisms/DXAccordion/DXAccordion.vue +104 -0
  201. package/src/components/organisms/DXAccordion/index.js +2 -0
  202. package/src/components/organisms/DXAppLayout/DXAppLayout.stories.js +689 -0
  203. package/src/components/organisms/DXAppLayout/DXAppLayout.vue +460 -0
  204. package/src/components/organisms/DXAppLayout/index.js +2 -0
  205. package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.stories.js +232 -0
  206. package/src/components/organisms/DXAuthenticationForm/DXAuthenticationForm.vue +458 -0
  207. package/src/components/organisms/DXAuthenticationForm/index.js +2 -0
  208. package/src/components/organisms/DXChartContainer/DXChartContainer.stories.js +286 -0
  209. package/src/components/organisms/DXChartContainer/DXChartContainer.vue +273 -0
  210. package/src/components/organisms/DXChartContainer/index.js +2 -0
  211. package/src/components/organisms/DXChatInterface/DXChatInterface.stories.js +164 -0
  212. package/src/components/organisms/DXChatInterface/DXChatInterface.vue +583 -0
  213. package/src/components/organisms/DXChatInterface/index.js +2 -0
  214. package/src/components/organisms/DXCommentSection/DXCommentSection.stories.js +173 -0
  215. package/src/components/organisms/DXCommentSection/DXCommentSection.vue +487 -0
  216. package/src/components/organisms/DXCommentSection/index.js +2 -0
  217. package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.stories.js +331 -0
  218. package/src/components/organisms/DXDashboardGrid/DXDashboardGrid.vue +309 -0
  219. package/src/components/organisms/DXDashboardGrid/index.js +2 -0
  220. package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.stories.js +271 -0
  221. package/src/components/organisms/DXDashboardWidget/DXDashboardWidget.vue +260 -0
  222. package/src/components/organisms/DXDashboardWidget/index.js +2 -0
  223. package/src/components/organisms/DXDataTable/DXDataTable.stories.js +247 -0
  224. package/src/components/organisms/DXDataTable/DXDataTable.vue +496 -0
  225. package/src/components/organisms/DXDataTable/index.js +2 -0
  226. package/src/components/organisms/DXDropdown/DXDropdown.stories.js +795 -0
  227. package/src/components/organisms/DXDropdown/DXDropdown.vue +238 -0
  228. package/src/components/organisms/DXDropdown/index.js +2 -0
  229. package/src/components/organisms/DXEmptyState/DXEmptyState.stories.js +37 -0
  230. package/src/components/organisms/DXEmptyState/DXEmptyState.vue +41 -0
  231. package/src/components/organisms/DXEmptyState/index.js +2 -0
  232. package/src/components/organisms/DXFormWizard/DXFormWizard.stories.js +378 -0
  233. package/src/components/organisms/DXFormWizard/DXFormWizard.vue +578 -0
  234. package/src/components/organisms/DXFormWizard/index.js +2 -0
  235. package/src/components/organisms/DXHeaderBar/DXHeaderBar.stories.js +448 -0
  236. package/src/components/organisms/DXHeaderBar/DXHeaderBar.vue +190 -0
  237. package/src/components/organisms/DXHeaderBar/index.js +2 -0
  238. package/src/components/organisms/DXMediaGallery/DXMediaGallery.stories.js +347 -0
  239. package/src/components/organisms/DXMediaGallery/DXMediaGallery.vue +422 -0
  240. package/src/components/organisms/DXMediaGallery/index.js +2 -0
  241. package/src/components/organisms/DXModal/DXModal.stories.js +138 -0
  242. package/src/components/organisms/DXModal/DXModal.vue +213 -0
  243. package/src/components/organisms/DXModal/index.js +2 -0
  244. package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.stories.js +183 -0
  245. package/src/components/organisms/DXNotificationCenter/DXNotificationCenter.vue +566 -0
  246. package/src/components/organisms/DXNotificationCenter/index.js +2 -0
  247. package/src/components/organisms/DXReportGenerator/DXReportGenerator.stories.js +199 -0
  248. package/src/components/organisms/DXReportGenerator/DXReportGenerator.vue +344 -0
  249. package/src/components/organisms/DXReportGenerator/index.js +2 -0
  250. package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.stories.js +245 -0
  251. package/src/components/organisms/DXSettingsPanel/DXSettingsPanel.vue +454 -0
  252. package/src/components/organisms/DXSettingsPanel/index.js +2 -0
  253. package/src/components/organisms/DXSidebar/DXSidebar.stories.js +316 -0
  254. package/src/components/organisms/DXSidebar/DXSidebar.vue +212 -0
  255. package/src/components/organisms/DXSidebar/index.js +2 -0
  256. package/src/components/organisms/DXSidebarMenu/DATA_STRUCTURE.md +299 -0
  257. package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.stories.js +729 -0
  258. package/src/components/organisms/DXSidebarMenu/DXSidebarMenu.vue +257 -0
  259. package/src/components/organisms/DXSidebarMenu/DXSidebarMenuItem.vue +249 -0
  260. package/src/components/organisms/DXSidebarMenu/README.md +333 -0
  261. package/src/components/organisms/DXSidebarMenu/index.js +3 -0
  262. package/src/components/organisms/DXTable/DXTable.stories.js +550 -0
  263. package/src/components/organisms/DXTable/DXTable.vue +324 -0
  264. package/src/components/organisms/DXTable/index.js +2 -0
  265. package/src/components/organisms/DXTabs/DXTabs.stories.js +407 -0
  266. package/src/components/organisms/DXTabs/DXTabs.vue +301 -0
  267. package/src/components/organisms/DXTabs/index.js +2 -0
  268. package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.stories.js +194 -0
  269. package/src/components/organisms/DXUserProfileCard/DXUserProfileCard.vue +403 -0
  270. package/src/components/organisms/DXUserProfileCard/index.js +2 -0
  271. package/src/components/organisms/DXWizard/DXWizard.stories.js +212 -0
  272. package/src/components/organisms/DXWizard/DXWizard.vue +615 -0
  273. package/src/components/organisms/DXWizard/index.js +2 -0
  274. package/src/components/organisms/index.js +25 -0
  275. package/src/components/typography/DXBlockquote/DXBlockquote.stories.js +33 -0
  276. package/src/components/typography/DXBlockquote/DXBlockquote.vue +44 -0
  277. package/src/components/typography/DXBlockquote/index.js +2 -0
  278. package/src/components/typography/DXCode/DXCode.stories.js +29 -0
  279. package/src/components/typography/DXCode/DXCode.vue +46 -0
  280. package/src/components/typography/DXCode/index.js +2 -0
  281. package/src/components/typography/DXHeading/DXHeading.stories.js +54 -0
  282. package/src/components/typography/DXHeading/DXHeading.vue +68 -0
  283. package/src/components/typography/DXHeading/index.js +2 -0
  284. package/src/components/typography/DXLabel/DXLabel.stories.js +40 -0
  285. package/src/components/typography/DXLabel/DXLabel.vue +49 -0
  286. package/src/components/typography/DXLabel/index.js +2 -0
  287. package/src/components/typography/DXList/DXList.stories.js +50 -0
  288. package/src/components/typography/DXList/DXList.vue +55 -0
  289. package/src/components/typography/DXList/index.js +2 -0
  290. package/src/components/typography/DXText/DXText.stories.js +47 -0
  291. package/src/components/typography/DXText/DXText.vue +67 -0
  292. package/src/components/typography/DXText/index.js +2 -0
  293. package/src/components/typography/index.js +8 -0
  294. package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.stories.js +335 -0
  295. package/src/components/utilities/DXAnimatePresence/DXAnimatePresence.vue +207 -0
  296. package/src/components/utilities/DXAnimatePresence/index.js +2 -0
  297. package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.stories.js +321 -0
  298. package/src/components/utilities/DXBreakpointProvider/DXBreakpointProvider.vue +158 -0
  299. package/src/components/utilities/DXBreakpointProvider/index.js +2 -0
  300. package/src/components/utilities/DXObserver/DXObserver.stories.js +324 -0
  301. package/src/components/utilities/DXObserver/DXObserver.vue +182 -0
  302. package/src/components/utilities/DXObserver/index.js +2 -0
  303. package/src/components/utilities/DXPortal/DXPortal.stories.js +267 -0
  304. package/src/components/utilities/DXPortal/DXPortal.vue +69 -0
  305. package/src/components/utilities/DXPortal/index.js +2 -0
  306. package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.stories.js +339 -0
  307. package/src/components/utilities/DXStaggeredAnimation/DXStaggeredAnimation.vue +155 -0
  308. package/src/components/utilities/DXStaggeredAnimation/index.js +2 -0
  309. package/src/components/utilities/DXThemeProvider/DXThemeProvider.stories.js +327 -0
  310. package/src/components/utilities/DXThemeProvider/DXThemeProvider.vue +227 -0
  311. package/src/components/utilities/DXThemeProvider/index.js +2 -0
  312. package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.stories.js +368 -0
  313. package/src/components/utilities/DXTransitionGroup/DXTransitionGroup.vue +212 -0
  314. package/src/components/utilities/DXTransitionGroup/index.js +2 -0
  315. package/src/components/utilities/index.js +9 -0
  316. package/src/composables/useAnimation.js +264 -0
  317. package/src/composables/useClassComposition.js +35 -0
  318. package/src/composables/useDataAttributes.js +83 -0
  319. package/src/composables/useMenu.js +88 -0
  320. package/src/composables/useSize.js +135 -0
  321. package/src/composables/useSpacing.js +37 -0
  322. package/src/composables/useTableColumns.js +88 -0
  323. package/src/composables/useTableData.js +82 -0
  324. package/src/composables/useTableFilter.js +158 -0
  325. package/src/composables/useTablePagination.js +89 -0
  326. package/src/composables/useTableSelection.js +77 -0
  327. package/src/composables/useTableSort.js +75 -0
  328. package/src/composables/useTabsScroll.js +88 -0
  329. package/src/composables/useVariant.js +700 -0
  330. package/src/index.js +86 -0
  331. package/src/styles/animations.css +171 -0
  332. package/src/styles/index.css +99 -0
  333. package/src/styles/tokens.js +123 -0
  334. package/src/utils/propTypes.js +77 -0
  335. package/src/utils/toggleButtonPresets.js +115 -0
@@ -0,0 +1,294 @@
1
+ import DXCheckbox from './DXCheckbox.vue';
2
+ import { ref } from 'vue';
3
+ import {
4
+ CheckIcon,
5
+ XMarkIcon,
6
+ MinusIcon,
7
+ HeartIcon,
8
+ StarIcon,
9
+ BoltIcon,
10
+ } from '@heroicons/vue/24/solid';
11
+
12
+ export default {
13
+ title: 'Atoms/DXCheckbox',
14
+ component: DXCheckbox,
15
+ tags: ['autodocs'],
16
+ argTypes: {
17
+ variant: {
18
+ control: 'select',
19
+ options: ['default', 'custom'],
20
+ description: 'Checkbox variant'
21
+ },
22
+ size: {
23
+ control: 'select',
24
+ options: ['xs', 'sm', 'md', 'lg', 'xl'],
25
+ description: 'Checkbox size'
26
+ },
27
+ shape: {
28
+ control: 'select',
29
+ options: ['square', 'circle'],
30
+ description: 'Shape for custom variant'
31
+ },
32
+ color: {
33
+ control: 'select',
34
+ options: ['slate', 'primary', 'success', 'danger', 'warning', 'info'],
35
+ description: 'Color for custom variant'
36
+ },
37
+ iconAnimation: {
38
+ control: 'select',
39
+ options: ['none', 'scale', 'wiggle'],
40
+ description: 'Icon animation'
41
+ },
42
+ },
43
+ };
44
+
45
+ // Default native checkbox
46
+ export const Default = {
47
+ render: () => ({
48
+ components: { DXCheckbox },
49
+ setup() {
50
+ const checked = ref(false);
51
+ return { checked };
52
+ },
53
+ template: '<DXCheckbox v-model="checked" label="Accept terms" />',
54
+ }),
55
+ };
56
+
57
+ // Checked state
58
+ export const Checked = {
59
+ render: () => ({
60
+ components: { DXCheckbox },
61
+ setup() {
62
+ const checked = ref(true);
63
+ return { checked };
64
+ },
65
+ template: '<DXCheckbox v-model="checked" label="Already checked" />',
66
+ }),
67
+ };
68
+
69
+ // Disabled
70
+ export const Disabled = {
71
+ render: () => ({
72
+ components: { DXCheckbox },
73
+ setup() {
74
+ const checked = ref(false);
75
+ return { checked };
76
+ },
77
+ template: '<DXCheckbox v-model="checked" label="Disabled checkbox" disabled />',
78
+ }),
79
+ };
80
+
81
+ // Sizes (default variant)
82
+ export const Sizes = {
83
+ render: () => ({
84
+ components: { DXCheckbox },
85
+ setup() {
86
+ const xs = ref(true);
87
+ const sm = ref(true);
88
+ const md = ref(true);
89
+ const lg = ref(true);
90
+ const xl = ref(true);
91
+ return { xs, sm, md, lg, xl };
92
+ },
93
+ template: `
94
+ <div class="space-y-4">
95
+ <div class="flex flex-col gap-2">
96
+ <p class="text-xs font-medium text-slate-500">Extra Small (12px)</p>
97
+ <DXCheckbox v-model="xs" size="xs" label="Extra small checkbox" />
98
+ </div>
99
+ <div class="flex flex-col gap-2">
100
+ <p class="text-xs font-medium text-slate-500">Small (16px)</p>
101
+ <DXCheckbox v-model="sm" size="sm" label="Small checkbox" />
102
+ </div>
103
+ <div class="flex flex-col gap-2">
104
+ <p class="text-xs font-medium text-slate-500">Medium (20px) - Default</p>
105
+ <DXCheckbox v-model="md" size="md" label="Medium checkbox (default)" />
106
+ </div>
107
+ <div class="flex flex-col gap-2">
108
+ <p class="text-xs font-medium text-slate-500">Large (24px)</p>
109
+ <DXCheckbox v-model="lg" size="lg" label="Large checkbox" />
110
+ </div>
111
+ <div class="flex flex-col gap-2">
112
+ <p class="text-xs font-medium text-slate-500">Extra Large (24px)</p>
113
+ <DXCheckbox v-model="xl" size="xl" label="Extra large checkbox" />
114
+ </div>
115
+ </div>
116
+ `,
117
+ }),
118
+ };
119
+
120
+ // Multiple checkboxes in a row (horizontal layout)
121
+ export const InlineLayout = {
122
+ render: () => ({
123
+ components: { DXCheckbox },
124
+ setup() {
125
+ const option1 = ref(true);
126
+ const option2 = ref(false);
127
+ const option3 = ref(true);
128
+ const option4 = ref(false);
129
+ return { option1, option2, option3, option4 };
130
+ },
131
+ template: `
132
+ <div>
133
+ <p class="text-sm font-medium text-slate-700 mb-2">Select options:</p>
134
+ <div class="flex flex-wrap items-center">
135
+ <DXCheckbox v-model="option1" label="Option 1" />
136
+ <DXCheckbox v-model="option2" label="Option 2" />
137
+ <DXCheckbox v-model="option3" label="Option 3" />
138
+ <DXCheckbox v-model="option4" label="Option 4" />
139
+ </div>
140
+ </div>
141
+ `,
142
+ }),
143
+ };
144
+
145
+ // Custom inline layout
146
+ export const CustomInlineLayout = {
147
+ render: () => ({
148
+ components: { DXCheckbox },
149
+ setup() {
150
+ const feature1 = ref(true);
151
+ const feature2 = ref(true);
152
+ const feature3 = ref(false);
153
+ const feature4 = ref(true);
154
+ return { feature1, feature2, feature3, feature4 };
155
+ },
156
+ template: `
157
+ <div>
158
+ <p class="text-sm font-medium text-slate-700 mb-2">Select features:</p>
159
+ <div class="flex flex-wrap items-center">
160
+ <DXCheckbox v-model="feature1" variant="custom" color="success" label="Feature A" />
161
+ <DXCheckbox v-model="feature2" variant="custom" color="info" label="Feature B" />
162
+ <DXCheckbox v-model="feature3" variant="custom" color="warning" label="Feature C" />
163
+ <DXCheckbox v-model="feature4" variant="custom" color="primary" label="Feature D" />
164
+ </div>
165
+ </div>
166
+ `,
167
+ }),
168
+ };
169
+
170
+ // Custom variants with different icons
171
+ export const CustomIcons = {
172
+ render: () => ({
173
+ components: { DXCheckbox },
174
+ setup() {
175
+ const defaultCheck = ref(true);
176
+ const xMark = ref(true);
177
+ const minus = ref(true);
178
+ const heart = ref(true);
179
+ return {
180
+ defaultCheck,
181
+ xMark,
182
+ minus,
183
+ heart,
184
+ XMarkIcon,
185
+ MinusIcon,
186
+ HeartIcon
187
+ };
188
+ },
189
+ template: `
190
+ <div class="space-y-4">
191
+ <div class="flex flex-col gap-2">
192
+ <p class="text-xs font-medium text-slate-500">Default check icon</p>
193
+ <DXCheckbox v-model="defaultCheck" variant="custom" label="Custom checkbox with check icon" />
194
+ </div>
195
+ <div class="flex flex-col gap-2">
196
+ <p class="text-xs font-medium text-slate-500">X mark icon</p>
197
+ <DXCheckbox v-model="xMark" variant="custom" :checked-icon="XMarkIcon" label="Mark as deleted" color="danger" />
198
+ </div>
199
+ <div class="flex flex-col gap-2">
200
+ <p class="text-xs font-medium text-slate-500">Minus icon (indeterminate style)</p>
201
+ <DXCheckbox v-model="minus" variant="custom" :checked-icon="MinusIcon" label="Partially selected" color="warning" />
202
+ </div>
203
+ <div class="flex flex-col gap-2">
204
+ <p class="text-xs font-medium text-slate-500">Heart icon (circle shape)</p>
205
+ <DXCheckbox v-model="heart" variant="custom" :checked-icon="HeartIcon" label="Add to favorites" color="danger" shape="circle" />
206
+ </div>
207
+ </div>
208
+ `,
209
+ }),
210
+ };
211
+
212
+ // All custom shapes
213
+ export const CustomShapes = {
214
+ render: () => ({
215
+ components: { DXCheckbox },
216
+ setup() {
217
+ const square = ref(true);
218
+ const circle = ref(true);
219
+ return { square, circle, CheckIcon };
220
+ },
221
+ template: `
222
+ <div class="space-y-3">
223
+ <DXCheckbox v-model="square" variant="custom" shape="square" label="Square (default)" />
224
+ <DXCheckbox v-model="circle" variant="custom" shape="circle" label="Circle" />
225
+ </div>
226
+ `,
227
+ }),
228
+ };
229
+
230
+ // All custom colors
231
+ export const CustomColors = {
232
+ render: () => ({
233
+ components: { DXCheckbox },
234
+ setup() {
235
+ const slate = ref(true);
236
+ const primary = ref(true);
237
+ const success = ref(true);
238
+ const danger = ref(true);
239
+ const warning = ref(true);
240
+ const info = ref(true);
241
+ return { slate, primary, success, danger, warning, info };
242
+ },
243
+ template: `
244
+ <div class="space-y-3">
245
+ <DXCheckbox v-model="slate" variant="custom" color="slate" label="Slate" />
246
+ <DXCheckbox v-model="primary" variant="custom" color="primary" label="Primary (default)" />
247
+ <DXCheckbox v-model="success" variant="custom" color="success" label="Success" />
248
+ <DXCheckbox v-model="danger" variant="custom" color="danger" label="Danger" />
249
+ <DXCheckbox v-model="warning" variant="custom" color="warning" label="Warning" />
250
+ <DXCheckbox v-model="info" variant="custom" color="info" label="Info" />
251
+ </div>
252
+ `,
253
+ }),
254
+ };
255
+
256
+ // Custom sizes
257
+ export const CustomSizes = {
258
+ render: () => ({
259
+ components: { DXCheckbox },
260
+ setup() {
261
+ const xs = ref(true);
262
+ const sm = ref(true);
263
+ const md = ref(true);
264
+ const lg = ref(true);
265
+ const xl = ref(true);
266
+ return { xs, sm, md, lg, xl };
267
+ },
268
+ template: `
269
+ <div class="space-y-4">
270
+ <div class="flex flex-col gap-2">
271
+ <p class="text-xs font-medium text-slate-500">Extra Small (12px)</p>
272
+ <DXCheckbox v-model="xs" variant="custom" size="xs" label="Extra small custom" />
273
+ </div>
274
+ <div class="flex flex-col gap-2">
275
+ <p class="text-xs font-medium text-slate-500">Small (16px)</p>
276
+ <DXCheckbox v-model="sm" variant="custom" size="sm" label="Small custom" />
277
+ </div>
278
+ <div class="flex flex-col gap-2">
279
+ <p class="text-xs font-medium text-slate-500">Medium (20px) - Default</p>
280
+ <DXCheckbox v-model="md" variant="custom" size="md" label="Medium custom" />
281
+ </div>
282
+ <div class="flex flex-col gap-2">
283
+ <p class="text-xs font-medium text-slate-500">Large (24px)</p>
284
+ <DXCheckbox v-model="lg" variant="custom" size="lg" label="Large custom" />
285
+ </div>
286
+ <div class="flex flex-col gap-2">
287
+ <p class="text-xs font-medium text-slate-500">Extra Large (24px)</p>
288
+ <DXCheckbox v-model="xl" variant="custom" size="xl" label="Extra large custom" />
289
+ </div>
290
+ </div>
291
+ `,
292
+ }),
293
+ };
294
+
@@ -0,0 +1,191 @@
1
+ <template>
2
+ <label
3
+ :class="labelClasses"
4
+ data-component="DXCheckbox"
5
+ :data-size="size"
6
+ :data-disabled="disabled"
7
+ :data-checked="isChecked"
8
+ :data-variant="variant"
9
+ :data-shape="shape"
10
+ @click="variant === 'custom' && !disabled && handleToggle(!isChecked)"
11
+ >
12
+ <!-- Нативный checkbox (default variant) -->
13
+ <input
14
+ v-if="variant === 'default'"
15
+ type="checkbox"
16
+ :checked="isChecked"
17
+ :value="value"
18
+ :disabled="disabled"
19
+ :class="inputClasses"
20
+ @change="handleChange"
21
+ />
22
+
23
+ <!-- Кастомный checkbox с иконками -->
24
+ <div
25
+ v-else
26
+ :class="customCheckboxClasses"
27
+ @click.stop="handleToggle(!isChecked)"
28
+ role="checkbox"
29
+ :aria-checked="isChecked"
30
+ :aria-disabled="disabled"
31
+ tabindex="0"
32
+ @keydown.space.prevent="handleToggle(!isChecked)"
33
+ >
34
+ <Transition v-bind="CHECKBOX_TRANSITION" mode="out-in">
35
+ <DXIcon
36
+ v-if="isChecked && iconToShow"
37
+ :icon="iconToShow"
38
+ :size="getIconSize(props.size)"
39
+ :animation="iconAnimation"
40
+ class="text-white absolute"
41
+ />
42
+ </Transition>
43
+ </div>
44
+
45
+ <span v-if="label" :class="labelTextClasses">
46
+ {{ label }}
47
+ </span>
48
+ </label>
49
+ </template>
50
+
51
+ <script setup>
52
+ import { computed } from "vue";
53
+ import { CheckIcon } from "@heroicons/vue/24/solid";
54
+ import { useSize } from "@/composables/useSize";
55
+ import { useVariantCheckbox } from "@/composables/useVariant";
56
+ import DXIcon from "../DXIcon/DXIcon.vue";
57
+
58
+ const props = defineProps({
59
+ /** Значение (v-model) - boolean или массив */
60
+ modelValue: { type: [Boolean, Array], default: false },
61
+ /** Значение для массива */
62
+ value: { type: [String, Number], default: undefined },
63
+ /** Текст лейбла */
64
+ label: { type: String, default: "" },
65
+ /** Отключенное состояние */
66
+ disabled: { type: Boolean, default: false },
67
+ /** Размер: xs | sm | md | lg | xl */
68
+ size: { type: String, default: "md" },
69
+ /** Вариант: default | custom */
70
+ variant: {
71
+ type: String,
72
+ default: "default",
73
+ validator: (value) => ['default', 'custom'].includes(value)
74
+ },
75
+ /** Иконка для checked состояния (для custom variant) */
76
+ checkedIcon: { type: [Object, Function], default: null },
77
+ /** Иконка для unchecked состояния (для custom variant) */
78
+ uncheckedIcon: { type: [Object, Function], default: null },
79
+ /** Форма кастомного checkbox: square | circle */
80
+ shape: {
81
+ type: String,
82
+ default: "square",
83
+ validator: (value) => ['square', 'circle'].includes(value)
84
+ },
85
+ /** Анимация иконки: none | scale | wiggle */
86
+ iconAnimation: {
87
+ type: String,
88
+ default: "scale",
89
+ validator: (value) => ['none', 'scale', 'wiggle'].includes(value)
90
+ },
91
+ /** Цвет для custom variant: slate | primary | success | danger | warning | info */
92
+ color: {
93
+ type: String,
94
+ default: "primary",
95
+ validator: (value) => ['slate', 'primary', 'success', 'danger', 'warning', 'info'].includes(value)
96
+ },
97
+ });
98
+
99
+ const emit = defineEmits(["update:modelValue"]);
100
+
101
+ // Transition configuration (Tailwind classes)
102
+ const CHECKBOX_TRANSITION = {
103
+ enterActiveClass: 'transition-opacity transition-transform duration-150 ease-out',
104
+ enterFromClass: 'opacity-0 scale-50',
105
+ enterToClass: 'opacity-100 scale-100',
106
+ leaveActiveClass: 'transition-opacity transition-transform duration-150 ease-in',
107
+ leaveFromClass: 'opacity-100 scale-100',
108
+ leaveToClass: 'opacity-0 scale-50',
109
+ };
110
+
111
+ const BASE_LABEL_CLASSES = "inline-flex items-center gap-2 cursor-pointer mr-4";
112
+ const BASE_INPUT_CLASSES = "rounded border-slate-300 text-slate-900 focus:ring-slate-900/10 focus:ring-2 transition flex-shrink-0";
113
+ const BASE_CUSTOM_CLASSES = "relative flex items-center justify-center border-2 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-1 flex-shrink-0";
114
+
115
+ const SHAPE_CLASSES = {
116
+ square: "rounded",
117
+ circle: "rounded-full",
118
+ };
119
+
120
+ // Icon size mapping: checkbox size -> icon size
121
+ const getIconSize = (size) => {
122
+ const map = { xs: 'xs', sm: 'xs', md: 'sm', lg: 'md', xl: 'md' };
123
+ return map[size] || 'sm';
124
+ };
125
+
126
+
127
+ const labelClasses = computed(() => [
128
+ BASE_LABEL_CLASSES,
129
+ { 'opacity-60 cursor-not-allowed': props.disabled }
130
+ ]);
131
+
132
+ const labelTextClasses = computed(() => [
133
+ useSize(props.size, 'text'),
134
+ 'text-slate-700 select-none'
135
+ ]);
136
+
137
+ const inputClasses = computed(() => [
138
+ BASE_INPUT_CLASSES,
139
+ useSize(props.size, 'checkbox')
140
+ ]);
141
+
142
+ const customCheckboxClasses = computed(() => {
143
+ const colorClasses = useVariantCheckbox(props.color);
144
+ return [
145
+ BASE_CUSTOM_CLASSES,
146
+ useSize(props.size, 'checkbox'),
147
+ SHAPE_CLASSES[props.shape],
148
+ {
149
+ [colorClasses.unchecked]: !isChecked.value && !props.disabled,
150
+ [colorClasses.checked]: isChecked.value && !props.disabled,
151
+ [colorClasses.ring]: !props.disabled,
152
+ 'opacity-50 cursor-not-allowed': props.disabled,
153
+ }
154
+ ];
155
+ });
156
+
157
+ const isChecked = computed(() => {
158
+ if (Array.isArray(props.modelValue)) {
159
+ return props.modelValue.includes(props.value);
160
+ }
161
+ return props.modelValue;
162
+ });
163
+
164
+ const iconToShow = computed(() =>
165
+ isChecked.value ? (props.checkedIcon || CheckIcon) : props.uncheckedIcon
166
+ );
167
+
168
+ const handleToggle = (newChecked) => {
169
+ if (props.disabled) return;
170
+
171
+ if (Array.isArray(props.modelValue)) {
172
+ const newValue = [...props.modelValue];
173
+ if (newChecked) {
174
+ if (!newValue.includes(props.value)) {
175
+ newValue.push(props.value);
176
+ }
177
+ } else {
178
+ const index = newValue.indexOf(props.value);
179
+ if (index > -1) newValue.splice(index, 1);
180
+ }
181
+ emit("update:modelValue", newValue);
182
+ } else {
183
+ emit("update:modelValue", newChecked);
184
+ }
185
+ };
186
+
187
+ const handleChange = (event) => {
188
+ handleToggle(event.target.checked);
189
+ };
190
+ </script>
191
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXCheckbox.vue';
2
+
@@ -0,0 +1,135 @@
1
+ import DXDivider from './DXDivider.vue';
2
+
3
+ export default {
4
+ title: 'Atoms/DXDivider',
5
+ component: DXDivider,
6
+ tags: ['autodocs'],
7
+ argTypes: {
8
+ orientation: {
9
+ control: { type: 'select' },
10
+ options: ['horizontal', 'vertical'],
11
+ description: 'Ориентация разделителя'
12
+ },
13
+ color: {
14
+ control: { type: 'select' },
15
+ options: ['light', 'default', 'dark'],
16
+ description: 'Цвет разделителя'
17
+ },
18
+ thickness: {
19
+ control: { type: 'select' },
20
+ options: ['thin', 'default', 'thick'],
21
+ description: 'Толщина разделителя'
22
+ },
23
+ spacing: {
24
+ control: { type: 'select' },
25
+ options: ['none', 'xs', 'sm', 'md', 'lg', 'xl'],
26
+ description: 'Отступы вокруг разделителя'
27
+ },
28
+ },
29
+ };
30
+
31
+ export const Default = {
32
+ args: {
33
+ orientation: 'horizontal',
34
+ color: 'default',
35
+ thickness: 'default',
36
+ spacing: 'md',
37
+ },
38
+ render: (args) => ({
39
+ components: { DXDivider },
40
+ setup() { return { args }; },
41
+ template: `
42
+ <div>
43
+ <p>Content above</p>
44
+ <DXDivider v-bind="args" />
45
+ <p>Content below</p>
46
+ </div>
47
+ `,
48
+ }),
49
+ };
50
+
51
+ export const WithText = {
52
+ render: () => ({
53
+ components: { DXDivider },
54
+ template: `
55
+ <div class="space-y-6">
56
+ <div>
57
+ <p>Section 1</p>
58
+ <DXDivider>OR</DXDivider>
59
+ <p>Section 2</p>
60
+ </div>
61
+ <div>
62
+ <p>Content above</p>
63
+ <DXDivider color="dark" thickness="thick">Continue</DXDivider>
64
+ <p>Content below</p>
65
+ </div>
66
+ </div>
67
+ `,
68
+ }),
69
+ };
70
+
71
+ export const Vertical = {
72
+ args: {
73
+ orientation: 'vertical',
74
+ color: 'default',
75
+ thickness: 'default',
76
+ spacing: 'md',
77
+ },
78
+ render: (args) => ({
79
+ components: { DXDivider },
80
+ setup() { return { args }; },
81
+ template: `
82
+ <div class="flex items-center h-12">
83
+ <span>Left</span>
84
+ <DXDivider v-bind="args" />
85
+ <span>Right</span>
86
+ </div>
87
+ `,
88
+ }),
89
+ };
90
+
91
+ export const Colors = {
92
+ render: () => ({
93
+ components: { DXDivider },
94
+ template: `
95
+ <div class="space-y-6">
96
+ <div>
97
+ <p class="text-sm text-slate-600 mb-2">Light</p>
98
+ <DXDivider color="light" />
99
+ </div>
100
+ <div>
101
+ <p class="text-sm text-slate-600 mb-2">Default</p>
102
+ <DXDivider color="default" />
103
+ </div>
104
+ <div>
105
+ <p class="text-sm text-slate-600 mb-2">Dark</p>
106
+ <DXDivider color="dark" />
107
+ </div>
108
+ </div>
109
+ `,
110
+ }),
111
+ };
112
+
113
+ export const Thickness = {
114
+ render: () => ({
115
+ components: { DXDivider },
116
+ template: `
117
+ <div class="space-y-6">
118
+ <div>
119
+ <p class="text-sm text-slate-600 mb-2">Thin</p>
120
+ <DXDivider thickness="thin" />
121
+ </div>
122
+ <div>
123
+ <p class="text-sm text-slate-600 mb-2">Default</p>
124
+ <DXDivider thickness="default" />
125
+ </div>
126
+ <div>
127
+ <p class="text-sm text-slate-600 mb-2">Thick</p>
128
+ <DXDivider thickness="thick" />
129
+ </div>
130
+ </div>
131
+ `,
132
+ }),
133
+ };
134
+
135
+
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <div
3
+ :class="dividerClasses"
4
+ data-component="DXDivider"
5
+ :data-orientation="props.orientation"
6
+ :data-color="props.color"
7
+ :data-thickness="props.thickness"
8
+ :data-spacing="props.spacing"
9
+ >
10
+ <!-- Горизонтальный divider с текстом -->
11
+ <div v-if="hasText && isHorizontal" class="flex items-center w-full">
12
+ <div :class="lineClasses" />
13
+ <span class="px-3 text-sm text-slate-500 whitespace-nowrap">
14
+ <slot />
15
+ </span>
16
+ <div :class="lineClasses" />
17
+ </div>
18
+ <!-- Горизонтальный divider без текста -->
19
+ <div v-else-if="isHorizontal" :class="lineClasses" />
20
+ <!-- Вертикальный divider -->
21
+ <div v-else :class="lineClasses" />
22
+ </div>
23
+ </template>
24
+
25
+ <script setup>
26
+ import { computed, useSlots } from "vue";
27
+ import { useSpacing } from "@/composables/useSpacing";
28
+ import { useVariantDividerBorder } from "@/composables/useVariant";
29
+
30
+ const props = defineProps({
31
+ /** Ориентация: horizontal | vertical */
32
+ orientation: { type: String, default: "horizontal" },
33
+ /** Цвет: light | default | dark */
34
+ color: { type: String, default: "default" },
35
+ /** Толщина: thin | default | thick */
36
+ thickness: { type: String, default: "default" },
37
+ /** Отступы: none | sm | md | lg */
38
+ spacing: { type: String, default: "md" },
39
+ });
40
+
41
+ const slots = useSlots();
42
+ const isHorizontal = computed(() => props.orientation === 'horizontal');
43
+ const hasText = computed(() => !!slots.default);
44
+
45
+ const dividerClasses = computed(() => [
46
+ props.orientation === "vertical" ? "inline-flex h-full" : "w-full",
47
+ props.orientation === "horizontal"
48
+ ? useSpacing(props.spacing, 'marginY')
49
+ : useSpacing(props.spacing, 'marginX'),
50
+ ]);
51
+
52
+ const lineClasses = computed(() => {
53
+ const borderClass = useVariantDividerBorder(
54
+ props.orientation,
55
+ props.thickness,
56
+ props.color
57
+ );
58
+
59
+ if (props.orientation === "vertical") {
60
+ // Вертикальный divider: нужна минимальная ширина и высота
61
+ return [
62
+ "h-full min-h-[1rem] w-0",
63
+ borderClass,
64
+ ];
65
+ } else {
66
+ // Горизонтальный divider: нужна минимальная высота и ширина
67
+ return [
68
+ "flex-1 min-w-[1rem] h-0",
69
+ borderClass,
70
+ ];
71
+ }
72
+ });
73
+ </script>
74
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXDivider.vue';
2
+