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,795 @@
1
+ import DXDropdown from './DXDropdown.vue';
2
+ import DXDropdownItem from '../../atoms/DXDropdownItem/DXDropdownItem.vue';
3
+ import DXDropdownDivider from '../../molecules/DXDropdownDivider/DXDropdownDivider.vue';
4
+ import DXAvatar from '../../atoms/DXAvatar/DXAvatar.vue';
5
+ import DXBadge from '../../atoms/DXBadge/DXBadge.vue';
6
+ import DXButton from '../../atoms/DXButton/DXButton.vue';
7
+ import DXInput from '../../molecules/DXInput/DXInput.vue';
8
+ import DXIcon from '../../atoms/DXIcon/DXIcon.vue';
9
+ import {
10
+ UserIcon,
11
+ CogIcon,
12
+ BellIcon,
13
+ QuestionMarkCircleIcon,
14
+ ArrowRightOnRectangleIcon,
15
+ PencilIcon,
16
+ TrashIcon,
17
+ EyeIcon,
18
+ DocumentDuplicateIcon,
19
+ ArchiveBoxIcon,
20
+ ShareIcon,
21
+ HeartIcon,
22
+ FlagIcon,
23
+ LanguageIcon,
24
+ CheckCircleIcon,
25
+ ClockIcon,
26
+ XCircleIcon,
27
+ MagnifyingGlassIcon,
28
+ InboxIcon,
29
+ EnvelopeIcon,
30
+ FunnelIcon,
31
+ EllipsisVerticalIcon
32
+ } from '@heroicons/vue/24/outline';
33
+ import { ref } from 'vue';
34
+
35
+ export default {
36
+ title: 'Organisms/DXDropdown',
37
+ component: DXDropdown,
38
+ tags: ['autodocs'],
39
+ argTypes: {
40
+ position: {
41
+ control: 'select',
42
+ options: ['left', 'right', 'center'],
43
+ description: 'Позиционирование меню'
44
+ },
45
+ width: {
46
+ control: 'select',
47
+ options: ['sm', 'md', 'lg', 'xl', 'auto'],
48
+ description: 'Ширина меню'
49
+ },
50
+ variant: {
51
+ control: 'select',
52
+ options: ['default', 'minimal'],
53
+ description: 'Вариант оформления'
54
+ },
55
+ offset: {
56
+ control: 'number',
57
+ description: 'Отступ от trigger (px)'
58
+ },
59
+ },
60
+ };
61
+
62
+ // 1. Default - базовый пример
63
+ export const Default = {
64
+ render: () => ({
65
+ components: { DXDropdown, DXDropdownItem },
66
+ template: `
67
+ <DXDropdown>
68
+ <template #trigger>
69
+ <span>Открыть меню</span>
70
+ </template>
71
+ <DXDropdownItem>Профиль</DXDropdownItem>
72
+ <DXDropdownItem>Настройки</DXDropdownItem>
73
+ <DXDropdownItem>Выход</DXDropdownItem>
74
+ </DXDropdown>
75
+ `,
76
+ }),
77
+ };
78
+
79
+ // 2. WithIcons - пункты с иконками
80
+ export const WithIcons = {
81
+ render: () => ({
82
+ components: { DXDropdown, DXDropdownItem },
83
+ setup() {
84
+ return { UserIcon, CogIcon, ArrowRightOnRectangleIcon };
85
+ },
86
+ template: `
87
+ <DXDropdown>
88
+ <template #trigger>
89
+ <span>Меню с иконками</span>
90
+ </template>
91
+ <DXDropdownItem :icon="UserIcon">Профиль</DXDropdownItem>
92
+ <DXDropdownItem :icon="CogIcon">Настройки</DXDropdownItem>
93
+ <DXDropdownItem :icon="ArrowRightOnRectangleIcon" variant="danger">Выход</DXDropdownItem>
94
+ </DXDropdown>
95
+ `,
96
+ }),
97
+ };
98
+
99
+ // 3. WithDividers - группы с разделителями
100
+ export const WithDividers = {
101
+ render: () => ({
102
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider },
103
+ setup() {
104
+ return { PencilIcon, DocumentDuplicateIcon, ArchiveBoxIcon, ShareIcon, TrashIcon };
105
+ },
106
+ template: `
107
+ <DXDropdown>
108
+ <template #trigger>
109
+ <span>Действия</span>
110
+ </template>
111
+ <DXDropdownItem :icon="PencilIcon">Редактировать</DXDropdownItem>
112
+ <DXDropdownItem :icon="DocumentDuplicateIcon">Дублировать</DXDropdownItem>
113
+
114
+ <DXDropdownDivider />
115
+
116
+ <DXDropdownItem :icon="ArchiveBoxIcon">Архивировать</DXDropdownItem>
117
+ <DXDropdownItem :icon="ShareIcon">Поделиться</DXDropdownItem>
118
+
119
+ <DXDropdownDivider />
120
+
121
+ <DXDropdownItem :icon="TrashIcon" variant="danger">Удалить</DXDropdownItem>
122
+ </DXDropdown>
123
+ `,
124
+ }),
125
+ };
126
+
127
+ // 4. Positions - позиционирование
128
+ export const Positions = {
129
+ render: () => ({
130
+ components: { DXDropdown, DXDropdownItem },
131
+ template: `
132
+ <div class="flex gap-4 justify-center items-start p-8">
133
+ <DXDropdown position="left">
134
+ <template #trigger>
135
+ <span>Left</span>
136
+ </template>
137
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
138
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
139
+ <DXDropdownItem>Пункт 3</DXDropdownItem>
140
+ </DXDropdown>
141
+
142
+ <DXDropdown position="center">
143
+ <template #trigger>
144
+ <span>Center</span>
145
+ </template>
146
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
147
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
148
+ <DXDropdownItem>Пункт 3</DXDropdownItem>
149
+ </DXDropdown>
150
+
151
+ <DXDropdown position="right">
152
+ <template #trigger>
153
+ <span>Right (default)</span>
154
+ </template>
155
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
156
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
157
+ <DXDropdownItem>Пункт 3</DXDropdownItem>
158
+ </DXDropdown>
159
+ </div>
160
+ `,
161
+ }),
162
+ };
163
+
164
+ // 5. Sizes - разные ширины
165
+ export const Sizes = {
166
+ render: () => ({
167
+ components: { DXDropdown, DXDropdownItem },
168
+ template: `
169
+ <div class="flex gap-4 items-start p-8">
170
+ <DXDropdown width="sm">
171
+ <template #trigger>
172
+ <span>Small</span>
173
+ </template>
174
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
175
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
176
+ </DXDropdown>
177
+
178
+ <DXDropdown width="md">
179
+ <template #trigger>
180
+ <span>Medium</span>
181
+ </template>
182
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
183
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
184
+ </DXDropdown>
185
+
186
+ <DXDropdown width="lg">
187
+ <template #trigger>
188
+ <span>Large</span>
189
+ </template>
190
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
191
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
192
+ </DXDropdown>
193
+
194
+ <DXDropdown width="xl">
195
+ <template #trigger>
196
+ <span>Extra Large</span>
197
+ </template>
198
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
199
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
200
+ </DXDropdown>
201
+ </div>
202
+ `,
203
+ }),
204
+ };
205
+
206
+ // 6. UserProfileMenu - профиль пользователя
207
+ export const UserProfileMenu = {
208
+ render: () => ({
209
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider, DXAvatar },
210
+ setup() {
211
+ return {
212
+ UserIcon, CogIcon, BellIcon,
213
+ QuestionMarkCircleIcon, ArrowRightOnRectangleIcon
214
+ };
215
+ },
216
+ template: `
217
+ <DXDropdown position="right" width="md">
218
+ <template #trigger>
219
+ <DXAvatar size="sm" initials="JD" />
220
+ <span>John Doe</span>
221
+ </template>
222
+
223
+ <div class="p-3 border-b border-slate-100">
224
+ <div class="flex items-center gap-3">
225
+ <DXAvatar size="md" initials="JD" />
226
+ <div>
227
+ <p class="font-semibold text-sm">John Doe</p>
228
+ <p class="text-xs text-slate-500">john@example.com</p>
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ <DXDropdownItem :icon="UserIcon">Мой профиль</DXDropdownItem>
234
+ <DXDropdownItem :icon="CogIcon">Настройки</DXDropdownItem>
235
+ <DXDropdownItem :icon="BellIcon" badge="3" badge-variant="danger">
236
+ Уведомления
237
+ </DXDropdownItem>
238
+
239
+ <DXDropdownDivider />
240
+
241
+ <DXDropdownItem :icon="QuestionMarkCircleIcon">Помощь</DXDropdownItem>
242
+
243
+ <DXDropdownDivider />
244
+
245
+ <DXDropdownItem :icon="ArrowRightOnRectangleIcon" variant="danger">
246
+ Выйти
247
+ </DXDropdownItem>
248
+ </DXDropdown>
249
+ `,
250
+ }),
251
+ };
252
+
253
+ // 7. ActionsMenu - CRUD действия
254
+ export const ActionsMenu = {
255
+ render: () => ({
256
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider },
257
+ setup() {
258
+ return { EyeIcon, PencilIcon, DocumentDuplicateIcon, ShareIcon, TrashIcon };
259
+ },
260
+ template: `
261
+ <DXDropdown>
262
+ <template #trigger>
263
+ <span>Действия</span>
264
+ </template>
265
+
266
+ <DXDropdownItem :icon="EyeIcon">Просмотр</DXDropdownItem>
267
+ <DXDropdownItem :icon="PencilIcon">Редактировать</DXDropdownItem>
268
+ <DXDropdownItem :icon="DocumentDuplicateIcon">Дублировать</DXDropdownItem>
269
+
270
+ <DXDropdownDivider />
271
+
272
+ <DXDropdownItem :icon="ShareIcon">Поделиться</DXDropdownItem>
273
+
274
+ <DXDropdownDivider />
275
+
276
+ <DXDropdownItem :icon="TrashIcon" variant="danger">Удалить</DXDropdownItem>
277
+ </DXDropdown>
278
+ `,
279
+ }),
280
+ };
281
+
282
+ // 8. NotificationsList - уведомления
283
+ export const NotificationsList = {
284
+ render: () => ({
285
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider, DXBadge },
286
+ setup() {
287
+ return { BellIcon, InboxIcon, EnvelopeIcon };
288
+ },
289
+ template: `
290
+ <DXDropdown width="lg" position="right">
291
+ <template #trigger>
292
+ <div class="relative">
293
+ <DXBadge variant="danger" class="absolute -top-1 -right-1 z-10">3</DXBadge>
294
+ <BellIcon class="w-5 h-5" />
295
+ </div>
296
+ </template>
297
+
298
+ <div class="p-3 border-b border-slate-100">
299
+ <h3 class="font-semibold text-sm">Уведомления</h3>
300
+ </div>
301
+
302
+ <DXDropdownItem size="md">
303
+ <div class="flex flex-col gap-1">
304
+ <p class="font-medium text-sm">Новое сообщение</p>
305
+ <p class="text-xs text-slate-500">Получено 5 минут назад</p>
306
+ </div>
307
+ </DXDropdownItem>
308
+
309
+ <DXDropdownItem size="md">
310
+ <div class="flex flex-col gap-1">
311
+ <p class="font-medium text-sm">Комментарий к задаче</p>
312
+ <p class="text-xs text-slate-500">Получено 1 час назад</p>
313
+ </div>
314
+ </DXDropdownItem>
315
+
316
+ <DXDropdownItem size="md">
317
+ <div class="flex flex-col gap-1">
318
+ <p class="font-medium text-sm">Обновление системы</p>
319
+ <p class="text-xs text-slate-500">Получено 2 часа назад</p>
320
+ </div>
321
+ </DXDropdownItem>
322
+
323
+ <DXDropdownDivider />
324
+
325
+ <DXDropdownItem :icon="InboxIcon">Все уведомления</DXDropdownItem>
326
+ </DXDropdown>
327
+ `,
328
+ }),
329
+ };
330
+
331
+ // 9. LanguageSelector - выбор языка
332
+ export const LanguageSelector = {
333
+ render: () => ({
334
+ components: { DXDropdown, DXDropdownItem },
335
+ setup() {
336
+ const selected = ref('Русский');
337
+ return { selected, LanguageIcon };
338
+ },
339
+ template: `
340
+ <DXDropdown width="sm">
341
+ <template #trigger>
342
+ <LanguageIcon class="w-4 h-4" />
343
+ <span>{{ selected }}</span>
344
+ </template>
345
+
346
+ <DXDropdownItem @click="selected = 'Русский'">🇷🇺 Русский</DXDropdownItem>
347
+ <DXDropdownItem @click="selected = 'English'">🇬🇧 English</DXDropdownItem>
348
+ <DXDropdownItem @click="selected = 'Español'">🇪🇸 Español</DXDropdownItem>
349
+ <DXDropdownItem @click="selected = 'Français'">🇫🇷 Français</DXDropdownItem>
350
+ <DXDropdownItem @click="selected = 'Deutsch'">🇩🇪 Deutsch</DXDropdownItem>
351
+ </DXDropdown>
352
+ `,
353
+ }),
354
+ };
355
+
356
+ // 10. StatusSelector - выбор статуса
357
+ export const StatusSelector = {
358
+ render: () => ({
359
+ components: { DXDropdown, DXDropdownItem, DXBadge },
360
+ setup() {
361
+ const statuses = ref(['В работе', 'Завершено', 'Отменено', 'Ожидание']);
362
+ return { statuses, CheckCircleIcon, ClockIcon, XCircleIcon };
363
+ },
364
+ template: `
365
+ <DXDropdown width="md">
366
+ <template #trigger>
367
+ <span class="w-2 h-2 rounded-full bg-blue-500"></span>
368
+ <span>В работе</span>
369
+ </template>
370
+
371
+ <DXDropdownItem variant="success">
372
+ <span class="w-2 h-2 rounded-full bg-emerald-500 flex-shrink-0"></span>
373
+ <span class="flex-1">Завершено</span>
374
+ </DXDropdownItem>
375
+
376
+ <DXDropdownItem>
377
+ <span class="w-2 h-2 rounded-full bg-blue-500 flex-shrink-0"></span>
378
+ <span class="flex-1">В работе</span>
379
+ </DXDropdownItem>
380
+
381
+ <DXDropdownItem>
382
+ <span class="w-2 h-2 rounded-full bg-amber-500 flex-shrink-0"></span>
383
+ <span class="flex-1">Ожидание</span>
384
+ </DXDropdownItem>
385
+
386
+ <DXDropdownItem variant="danger">
387
+ <span class="w-2 h-2 rounded-full bg-rose-500 flex-shrink-0"></span>
388
+ <span class="flex-1">Отменено</span>
389
+ </DXDropdownItem>
390
+ </DXDropdown>
391
+ `,
392
+ }),
393
+ };
394
+
395
+ // 11. WithBadges - со счетчиками
396
+ export const WithBadges = {
397
+ render: () => ({
398
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider },
399
+ setup() {
400
+ return { InboxIcon, BellIcon, EnvelopeIcon, FlagIcon };
401
+ },
402
+ template: `
403
+ <DXDropdown width="md">
404
+ <template #trigger>
405
+ <span>Сообщения</span>
406
+ </template>
407
+ <DXDropdownItem :icon="InboxIcon" badge="12" badge-variant="slate">
408
+ Входящие
409
+ </DXDropdownItem>
410
+ <DXDropdownItem :icon="BellIcon" badge="3" badge-variant="danger">
411
+ Уведомления
412
+ </DXDropdownItem>
413
+ <DXDropdownItem :icon="EnvelopeIcon" badge="5" badge-variant="info">
414
+ Письма
415
+ </DXDropdownItem>
416
+ <DXDropdownItem :icon="FlagIcon" badge="1" badge-variant="warning">
417
+ Важные
418
+ </DXDropdownItem>
419
+ </DXDropdown>
420
+ `,
421
+ }),
422
+ };
423
+
424
+ // 12. NestedMenu - вложенное подменю (индикатор)
425
+ export const NestedMenu = {
426
+ render: () => ({
427
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider },
428
+ setup() {
429
+ return { ShareIcon, DocumentDuplicateIcon, ArchiveBoxIcon };
430
+ },
431
+ template: `
432
+ <DXDropdown>
433
+ <template #trigger>
434
+ <span>Файл</span>
435
+ </template>
436
+ <DXDropdownItem>Создать</DXDropdownItem>
437
+ <DXDropdownItem>Открыть</DXDropdownItem>
438
+
439
+ <DXDropdownDivider />
440
+
441
+ <DXDropdownItem :icon="ShareIcon" submenu>Поделиться</DXDropdownItem>
442
+ <DXDropdownItem :icon="DocumentDuplicateIcon">Дублировать</DXDropdownItem>
443
+
444
+ <DXDropdownDivider />
445
+
446
+ <DXDropdownItem :icon="ArchiveBoxIcon">Архивировать</DXDropdownItem>
447
+ </DXDropdown>
448
+ `,
449
+ }),
450
+ };
451
+
452
+ // 13. CustomContent - форма поиска
453
+ export const CustomContent = {
454
+ render: () => ({
455
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider, DXInput },
456
+ setup() {
457
+ const search = ref('');
458
+ return { search, MagnifyingGlassIcon };
459
+ },
460
+ template: `
461
+ <DXDropdown width="lg">
462
+ <template #trigger>
463
+ <MagnifyingGlassIcon class="w-4 h-4" />
464
+ <span>Поиск</span>
465
+ </template>
466
+
467
+ <div class="p-3">
468
+ <DXInput
469
+ v-model="search"
470
+ placeholder="Поиск..."
471
+ size="sm"
472
+ :prefix-icon="MagnifyingGlassIcon"
473
+ />
474
+ </div>
475
+
476
+ <DXDropdownDivider />
477
+
478
+ <div class="px-3 py-2">
479
+ <p class="text-xs font-semibold text-slate-500 mb-2">НЕДАВНИЕ</p>
480
+ </div>
481
+
482
+ <DXDropdownItem>Проект Alpha</DXDropdownItem>
483
+ <DXDropdownItem>Документация</DXDropdownItem>
484
+ <DXDropdownItem>Команда разработки</DXDropdownItem>
485
+ </DXDropdown>
486
+ `,
487
+ }),
488
+ };
489
+
490
+ // 14. MixedContent - смешанный контент
491
+ export const MixedContent = {
492
+ render: () => ({
493
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider, DXBadge, DXButton },
494
+ setup() {
495
+ return { HeartIcon, ShareIcon };
496
+ },
497
+ template: `
498
+ <DXDropdown width="md">
499
+ <template #trigger>
500
+ <span>Смешанный контент</span>
501
+ </template>
502
+
503
+ <div class="p-3 bg-slate-50">
504
+ <p class="text-sm font-medium">Premium функции</p>
505
+ <p class="text-xs text-slate-500 mt-1">Обновитесь до Pro</p>
506
+ </div>
507
+
508
+ <DXDropdownDivider />
509
+
510
+ <DXDropdownItem :icon="HeartIcon">Избранное</DXDropdownItem>
511
+ <DXDropdownItem :icon="ShareIcon">Поделиться</DXDropdownItem>
512
+
513
+ <DXDropdownDivider />
514
+
515
+ <div class="px-3 py-2">
516
+ <DXButton block size="sm" variant="primary">Обновить</DXButton>
517
+ </div>
518
+ </DXDropdown>
519
+ `,
520
+ }),
521
+ };
522
+
523
+ // 15. Disabled - отключенное состояние
524
+ export const Disabled = {
525
+ render: () => ({
526
+ components: { DXDropdown, DXDropdownItem },
527
+ template: `
528
+ <div class="flex gap-4">
529
+ <DXDropdown disabled>
530
+ <template #trigger>
531
+ <span>Отключен (dropdown)</span>
532
+ </template>
533
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
534
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
535
+ </DXDropdown>
536
+
537
+ <DXDropdown>
538
+ <template #trigger>
539
+ <span>С отключенными пунктами</span>
540
+ </template>
541
+ <DXDropdownItem>Активный пункт</DXDropdownItem>
542
+ <DXDropdownItem disabled>Отключенный пункт</DXDropdownItem>
543
+ <DXDropdownItem>Активный пункт</DXDropdownItem>
544
+ </DXDropdown>
545
+ </div>
546
+ `,
547
+ }),
548
+ };
549
+
550
+ // Bonus: Interactive example
551
+ export const Interactive = {
552
+ render: () => ({
553
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider },
554
+ setup() {
555
+ const handleAction = (action) => {
556
+ alert(`Выполнено: ${action}`);
557
+ };
558
+ return { handleAction, PencilIcon, TrashIcon, ShareIcon };
559
+ },
560
+ template: `
561
+ <DXDropdown>
562
+ <template #trigger>
563
+ <span>Кликните для теста</span>
564
+ </template>
565
+ <DXDropdownItem :icon="PencilIcon" @click="handleAction('Редактирование')">
566
+ Редактировать
567
+ </DXDropdownItem>
568
+ <DXDropdownItem :icon="ShareIcon" @click="handleAction('Поделиться')">
569
+ Поделиться
570
+ </DXDropdownItem>
571
+ <DXDropdownDivider />
572
+ <DXDropdownItem :icon="TrashIcon" variant="danger" @click="handleAction('Удаление')">
573
+ Удалить
574
+ </DXDropdownItem>
575
+ </DXDropdown>
576
+ `,
577
+ }),
578
+ };
579
+
580
+ // 16. WithoutChevronIcon - только иконка без стрелочки (используется для всех иконок)
581
+ export const WithoutChevronIcon = {
582
+ render: () => ({
583
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider, DXIcon },
584
+ setup() {
585
+ return {
586
+ EllipsisVerticalIcon,
587
+ PencilIcon,
588
+ TrashIcon,
589
+ EyeIcon,
590
+ FunnelIcon,
591
+ BellIcon,
592
+ CogIcon,
593
+ UserIcon,
594
+ ShareIcon,
595
+ HeartIcon
596
+ };
597
+ },
598
+ template: `
599
+ <div class="p-4 space-y-6">
600
+ <div>
601
+ <h3 class="text-sm font-semibold mb-2">Иконки без стрелочки</h3>
602
+ <p class="text-xs text-slate-600 mb-4">
603
+ Используйте этот паттерн для всех иконок без стрелочки. Иконка является триггером для открытия меню.
604
+ Не используйте button внутри trigger - просто иконка.
605
+ </p>
606
+
607
+ <div class="flex flex-wrap gap-6 items-center">
608
+ <!-- Пример 1: Три точки (действия) -->
609
+ <div>
610
+ <p class="text-xs text-slate-500 mb-2">Действия</p>
611
+ <DXDropdown :showChevron="false" position="right" width="auto" variant="minimal">
612
+ <template #trigger>
613
+ <DXIcon :icon="EllipsisVerticalIcon" size="md" class="cursor-pointer text-slate-600 hover:text-slate-900" />
614
+ </template>
615
+ <DXDropdownItem :icon="EyeIcon">Просмотр</DXDropdownItem>
616
+ <DXDropdownItem :icon="PencilIcon">Редактировать</DXDropdownItem>
617
+ <DXDropdownDivider />
618
+ <DXDropdownItem :icon="TrashIcon" variant="danger">Удалить</DXDropdownItem>
619
+ </DXDropdown>
620
+ </div>
621
+
622
+ <!-- Пример 2: Фильтр -->
623
+ <div>
624
+ <p class="text-xs text-slate-500 mb-2">Фильтр</p>
625
+ <DXDropdown :showChevron="false" position="bottom" width="auto" variant="minimal">
626
+ <template #trigger>
627
+ <DXIcon :icon="FunnelIcon" size="xs" class="cursor-pointer text-slate-400 hover:text-blue-600" />
628
+ </template>
629
+ <DXDropdownItem>Все</DXDropdownItem>
630
+ <DXDropdownItem>Активные</DXDropdownItem>
631
+ <DXDropdownItem>Неактивные</DXDropdownItem>
632
+ </DXDropdown>
633
+ </div>
634
+
635
+ <!-- Пример 3: Уведомления -->
636
+ <div>
637
+ <p class="text-xs text-slate-500 mb-2">Уведомления</p>
638
+ <DXDropdown :showChevron="false" position="right" width="auto" variant="minimal">
639
+ <template #trigger>
640
+ <div class="relative cursor-pointer">
641
+ <DXIcon :icon="BellIcon" size="md" class="text-slate-600 hover:text-slate-900" />
642
+ <span class="absolute -top-1 -right-1 w-2 h-2 bg-red-500 rounded-full"></span>
643
+ </div>
644
+ </template>
645
+ <DXDropdownItem>Новое сообщение</DXDropdownItem>
646
+ <DXDropdownItem>Комментарий</DXDropdownItem>
647
+ <DXDropdownItem>Обновление</DXDropdownItem>
648
+ </DXDropdown>
649
+ </div>
650
+
651
+ <!-- Пример 4: Настройки -->
652
+ <div>
653
+ <p class="text-xs text-slate-500 mb-2">Настройки</p>
654
+ <DXDropdown :showChevron="false" position="right" width="auto" variant="minimal">
655
+ <template #trigger>
656
+ <DXIcon :icon="CogIcon" size="md" class="cursor-pointer text-slate-600 hover:text-slate-900" />
657
+ </template>
658
+ <DXDropdownItem :icon="UserIcon">Профиль</DXDropdownItem>
659
+ <DXDropdownItem :icon="CogIcon">Настройки</DXDropdownItem>
660
+ <DXDropdownDivider />
661
+ <DXDropdownItem>Выход</DXDropdownItem>
662
+ </DXDropdown>
663
+ </div>
664
+
665
+ <!-- Пример 5: Поделиться -->
666
+ <div>
667
+ <p class="text-xs text-slate-500 mb-2">Поделиться</p>
668
+ <DXDropdown :showChevron="false" position="right" width="auto" variant="minimal">
669
+ <template #trigger>
670
+ <DXIcon :icon="ShareIcon" size="md" class="cursor-pointer text-slate-600 hover:text-slate-900" />
671
+ </template>
672
+ <DXDropdownItem>Email</DXDropdownItem>
673
+ <DXDropdownItem>Социальные сети</DXDropdownItem>
674
+ <DXDropdownItem>Скопировать ссылку</DXDropdownItem>
675
+ </DXDropdown>
676
+ </div>
677
+
678
+ <!-- Пример 6: Избранное -->
679
+ <div>
680
+ <p class="text-xs text-slate-500 mb-2">Избранное</p>
681
+ <DXDropdown :showChevron="false" position="right" width="auto" variant="minimal">
682
+ <template #trigger>
683
+ <DXIcon :icon="HeartIcon" size="md" class="cursor-pointer text-rose-500 hover:text-rose-600" />
684
+ </template>
685
+ <DXDropdownItem>Добавить в избранное</DXDropdownItem>
686
+ <DXDropdownItem>Удалить из избранного</DXDropdownItem>
687
+ </DXDropdown>
688
+ </div>
689
+ </div>
690
+ </div>
691
+ </div>
692
+ `,
693
+ }),
694
+ };
695
+
696
+ // 17. WithoutChevronText - только текст без стрелочки
697
+ export const WithoutChevronText = {
698
+ render: () => ({
699
+ components: { DXDropdown, DXDropdownItem },
700
+ setup() {
701
+ return { UserIcon, CogIcon, ArrowRightOnRectangleIcon };
702
+ },
703
+ template: `
704
+ <div class="p-4 space-y-4">
705
+ <div>
706
+ <h3 class="text-sm font-semibold mb-2">Только текст без стрелочки</h3>
707
+ <DXDropdown :showChevron="false">
708
+ <template #trigger>
709
+ <span class="text-slate-700 hover:text-slate-900 cursor-pointer">Меню</span>
710
+ </template>
711
+ <DXDropdownItem :icon="UserIcon">Профиль</DXDropdownItem>
712
+ <DXDropdownItem :icon="CogIcon">Настройки</DXDropdownItem>
713
+ <DXDropdownItem :icon="ArrowRightOnRectangleIcon" variant="danger">Выход</DXDropdownItem>
714
+ </DXDropdown>
715
+ </div>
716
+ </div>
717
+ `,
718
+ }),
719
+ };
720
+
721
+ // 18. WithoutChevronIconText - иконка + текст без стрелочки
722
+ export const WithoutChevronIconText = {
723
+ render: () => ({
724
+ components: { DXDropdown, DXDropdownItem, DXDropdownDivider, DXIcon },
725
+ setup() {
726
+ return { BellIcon, InboxIcon, EnvelopeIcon, FlagIcon };
727
+ },
728
+ template: `
729
+ <div class="p-4 space-y-4">
730
+ <div>
731
+ <h3 class="text-sm font-semibold mb-2">Иконка + текст без стрелочки</h3>
732
+ <DXDropdown :showChevron="false">
733
+ <template #trigger>
734
+ <div class="flex items-center gap-2">
735
+ <DXIcon :icon="BellIcon" size="sm" />
736
+ <span>Уведомления</span>
737
+ </div>
738
+ </template>
739
+ <DXDropdownItem :icon="InboxIcon" badge="12" badge-variant="slate">
740
+ Входящие
741
+ </DXDropdownItem>
742
+ <DXDropdownItem :icon="BellIcon" badge="3" badge-variant="danger">
743
+ Уведомления
744
+ </DXDropdownItem>
745
+ <DXDropdownItem :icon="EnvelopeIcon" badge="5" badge-variant="info">
746
+ Письма
747
+ </DXDropdownItem>
748
+ <DXDropdownItem :icon="FlagIcon" badge="1" badge-variant="warning">
749
+ Важные
750
+ </DXDropdownItem>
751
+ </DXDropdown>
752
+ </div>
753
+ </div>
754
+ `,
755
+ }),
756
+ };
757
+
758
+ // 19. Comparison - сравнение с и без стрелочки
759
+ export const Comparison = {
760
+ render: () => ({
761
+ components: { DXDropdown, DXDropdownItem },
762
+ template: `
763
+ <div class="p-4 space-y-6">
764
+ <div>
765
+ <h3 class="text-sm font-semibold mb-4">Сравнение: с стрелочкой и без</h3>
766
+ <div class="flex gap-4 items-center">
767
+ <div>
768
+ <p class="text-xs text-slate-500 mb-2">С стрелочкой (по умолчанию)</p>
769
+ <DXDropdown>
770
+ <template #trigger>
771
+ <span>Меню</span>
772
+ </template>
773
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
774
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
775
+ <DXDropdownItem>Пункт 3</DXDropdownItem>
776
+ </DXDropdown>
777
+ </div>
778
+
779
+ <div>
780
+ <p class="text-xs text-slate-500 mb-2">Без стрелочки</p>
781
+ <DXDropdown :showChevron="false">
782
+ <template #trigger>
783
+ <span>Меню</span>
784
+ </template>
785
+ <DXDropdownItem>Пункт 1</DXDropdownItem>
786
+ <DXDropdownItem>Пункт 2</DXDropdownItem>
787
+ <DXDropdownItem>Пункт 3</DXDropdownItem>
788
+ </DXDropdown>
789
+ </div>
790
+ </div>
791
+ </div>
792
+ </div>
793
+ `,
794
+ }),
795
+ };