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,422 @@
1
+ <template>
2
+ <div
3
+ :class="galleryClasses"
4
+ data-component="DXMediaGallery"
5
+ :data-layout="layout"
6
+ :data-columns="columns"
7
+ :data-lightbox="lightbox"
8
+ >
9
+ <!-- Grid Layout -->
10
+ <DXGrid
11
+ v-if="layout === 'grid'"
12
+ :cols="columns"
13
+ :cols-sm="columnsSm"
14
+ :cols-md="columnsMd"
15
+ :cols-lg="columnsLg"
16
+ :gap="gap"
17
+ >
18
+ <div
19
+ v-for="(item, index) in items"
20
+ :key="item.id || index"
21
+ :class="itemClasses"
22
+ @click="handleItemClick(item, index)"
23
+ >
24
+ <slot name="item" :item="item" :index="index">
25
+ <DXObserver
26
+ v-if="lazy"
27
+ :threshold="0.1"
28
+ :once="true"
29
+ @intersect="handleIntersect(index)"
30
+ >
31
+ <div v-if="isItemVisible(index)" class="relative w-full h-full">
32
+ <img
33
+ v-if="item.type === 'image' || !item.type"
34
+ :src="item.thumbnail || item.src"
35
+ :alt="item.title || item.alt || 'Image'"
36
+ :class="imageClasses"
37
+ @error="handleImageError(index)"
38
+ />
39
+ <video
40
+ v-else-if="item.type === 'video'"
41
+ :src="item.src"
42
+ :poster="item.thumbnail"
43
+ :class="imageClasses"
44
+ controls
45
+ />
46
+ <div v-if="item.title || showOverlay" :class="overlayClasses">
47
+ <div v-if="item.title" class="text-white font-medium">
48
+ {{ item.title }}
49
+ </div>
50
+ </div>
51
+ </div>
52
+ <div v-else class="w-full h-full bg-slate-200 animate-pulse flex items-center justify-center">
53
+ <span class="text-slate-400 text-sm">Загрузка...</span>
54
+ </div>
55
+ </DXObserver>
56
+ <div v-else class="relative w-full h-full">
57
+ <img
58
+ v-if="item.type === 'image' || !item.type"
59
+ :src="item.thumbnail || item.src"
60
+ :alt="item.title || item.alt || 'Image'"
61
+ :class="imageClasses"
62
+ @error="handleImageError(index)"
63
+ />
64
+ <video
65
+ v-else-if="item.type === 'video'"
66
+ :src="item.src"
67
+ :poster="item.thumbnail"
68
+ :class="imageClasses"
69
+ controls
70
+ />
71
+ <div v-if="item.title || showOverlay" :class="overlayClasses">
72
+ <div v-if="item.title" class="text-white font-medium">
73
+ {{ item.title }}
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </slot>
78
+ </div>
79
+ </DXGrid>
80
+
81
+ <!-- List Layout -->
82
+ <div v-else-if="layout === 'list'" :class="listClasses">
83
+ <div
84
+ v-for="(item, index) in items"
85
+ :key="item.id || index"
86
+ :class="listItemClasses"
87
+ @click="handleItemClick(item, index)"
88
+ >
89
+ <slot name="item" :item="item" :index="index">
90
+ <img
91
+ v-if="item.type === 'image' || !item.type"
92
+ :src="item.thumbnail || item.src"
93
+ :alt="item.title || item.alt || 'Image'"
94
+ class="w-24 h-24 object-cover rounded-lg flex-shrink-0"
95
+ />
96
+ <div class="flex-1 ml-4">
97
+ <div v-if="item.title" class="font-medium text-slate-900">
98
+ {{ item.title }}
99
+ </div>
100
+ <div v-if="item.description" class="text-sm text-slate-500 mt-1">
101
+ {{ item.description }}
102
+ </div>
103
+ </div>
104
+ </slot>
105
+ </div>
106
+ </div>
107
+
108
+ <!-- Lightbox Modal -->
109
+ <DXModal
110
+ v-if="lightbox && selectedItem"
111
+ :open="showLightbox"
112
+ @close="closeLightbox"
113
+ size="xl"
114
+ >
115
+ <div class="relative">
116
+ <img
117
+ v-if="selectedItem.type === 'image' || !selectedItem.type"
118
+ :src="selectedItem.src"
119
+ :alt="selectedItem.title || selectedItem.alt || 'Image'"
120
+ class="w-full h-auto max-h-[80vh] object-contain"
121
+ />
122
+ <video
123
+ v-else-if="selectedItem.type === 'video'"
124
+ :src="selectedItem.src"
125
+ :poster="selectedItem.thumbnail"
126
+ class="w-full h-auto max-h-[80vh]"
127
+ controls
128
+ autoplay
129
+ />
130
+ <div v-if="selectedItem.title || selectedItem.description" class="mt-4">
131
+ <h3 v-if="selectedItem.title" class="text-lg font-semibold text-slate-900">
132
+ {{ selectedItem.title }}
133
+ </h3>
134
+ <p v-if="selectedItem.description" class="text-sm text-slate-600 mt-1">
135
+ {{ selectedItem.description }}
136
+ </p>
137
+ </div>
138
+ </div>
139
+
140
+ <!-- Навигация в lightbox -->
141
+ <div v-if="items.length > 1" class="absolute inset-y-0 left-0 flex items-center">
142
+ <DXButton
143
+ variant="ghost"
144
+ size="lg"
145
+ :disabled="selectedIndex === 0"
146
+ @click="previousItem"
147
+ >
148
+ <template #icon>
149
+ <DXIcon :icon="ChevronLeftIcon" size="lg" />
150
+ </template>
151
+ </DXButton>
152
+ </div>
153
+ <div v-if="items.length > 1" class="absolute inset-y-0 right-0 flex items-center">
154
+ <DXButton
155
+ variant="ghost"
156
+ size="lg"
157
+ :disabled="selectedIndex === items.length - 1"
158
+ @click="nextItem"
159
+ >
160
+ <template #icon>
161
+ <DXIcon :icon="ChevronRightIcon" size="lg" />
162
+ </template>
163
+ </DXButton>
164
+ </div>
165
+ </DXModal>
166
+ </div>
167
+ </template>
168
+
169
+ <script setup>
170
+ import { ref, computed } from "vue";
171
+ import { useClassComposition } from "@/composables/useClassComposition";
172
+ import { useSpacing } from "@/composables/useSpacing";
173
+ import DXGrid from "../../layout/DXGrid/DXGrid.vue";
174
+ import DXModal from "../DXModal/DXModal.vue";
175
+ import DXObserver from "../../utilities/DXObserver/DXObserver.vue";
176
+ import DXButton from "../../atoms/DXButton/DXButton.vue";
177
+ import DXIcon from "../../atoms/DXIcon/DXIcon.vue";
178
+ import { ChevronLeftIcon, ChevronRightIcon } from "@heroicons/vue/24/outline";
179
+
180
+ const props = defineProps({
181
+ /**
182
+ * Массив элементов галереи
183
+ * Формат: [{ id, src, thumbnail?, title?, description?, type?, alt? }]
184
+ */
185
+ items: {
186
+ type: Array,
187
+ required: true,
188
+ default: () => [],
189
+ },
190
+ /**
191
+ * Количество колонок для grid layout
192
+ * @default 3
193
+ */
194
+ columns: { type: Number, default: 3 },
195
+ /**
196
+ * Количество колонок на sm
197
+ */
198
+ columnsSm: { type: Number, default: null },
199
+ /**
200
+ * Количество колонок на md
201
+ */
202
+ columnsMd: { type: Number, default: null },
203
+ /**
204
+ * Количество колонок на lg
205
+ */
206
+ columnsLg: { type: Number, default: null },
207
+ /**
208
+ * Layout: grid | list
209
+ * @default 'grid'
210
+ */
211
+ layout: {
212
+ type: String,
213
+ default: "grid",
214
+ validator: (v) => ["grid", "list"].includes(v),
215
+ },
216
+ /**
217
+ * Отступ между элементами: none | xs | sm | md | lg | xl
218
+ * @default 'md'
219
+ */
220
+ gap: {
221
+ type: String,
222
+ default: "md",
223
+ validator: (v) => ["none", "xs", "sm", "md", "lg", "xl"].includes(v),
224
+ },
225
+ /**
226
+ * Показывать lightbox при клике
227
+ * @default true
228
+ */
229
+ lightbox: { type: Boolean, default: true },
230
+ /**
231
+ * Ленивая загрузка изображений
232
+ * @default false
233
+ */
234
+ lazy: { type: Boolean, default: false },
235
+ /**
236
+ * Показывать overlay с информацией
237
+ * @default false
238
+ */
239
+ showOverlay: { type: Boolean, default: false },
240
+ });
241
+
242
+ const emit = defineEmits(["item-click", "lightbox-open", "lightbox-close"]);
243
+
244
+ const showLightbox = ref(false);
245
+ const selectedItem = ref(null);
246
+ const selectedIndex = ref(0);
247
+ const visibleItems = ref(new Set());
248
+
249
+ /**
250
+ * Классы для контейнера галереи
251
+ *
252
+ * @description
253
+ * Базовые классы для контейнера галереи.
254
+ *
255
+ * @returns {Array} Массив классов
256
+ */
257
+ const galleryClasses = computed(() => useClassComposition("w-full"));
258
+
259
+ /**
260
+ * Классы для элемента галереи (grid)
261
+ *
262
+ * @description
263
+ * Классы для каждого элемента в grid layout.
264
+ *
265
+ * @returns {Array} Массив классов
266
+ */
267
+ const itemClasses = computed(() =>
268
+ useClassComposition(
269
+ "relative aspect-square overflow-hidden rounded-lg cursor-pointer transition-transform hover:scale-105",
270
+ props.lightbox && "group"
271
+ )
272
+ );
273
+
274
+ /**
275
+ * Классы для списка (list layout)
276
+ *
277
+ * @description
278
+ * Классы для контейнера списка.
279
+ *
280
+ * @returns {Array} Массив классов
281
+ */
282
+ const listClasses = computed(() =>
283
+ useClassComposition("space-y-2", useSpacing(props.gap, "gap"))
284
+ );
285
+
286
+ /**
287
+ * Классы для элемента списка
288
+ *
289
+ * @description
290
+ * Классы для каждого элемента в list layout.
291
+ *
292
+ * @returns {Array} Массив классов
293
+ */
294
+ const listItemClasses = computed(() =>
295
+ useClassComposition(
296
+ "flex items-center p-4 bg-white border border-slate-200 rounded-lg cursor-pointer hover:shadow-md transition-shadow",
297
+ props.lightbox && "group"
298
+ )
299
+ );
300
+
301
+ /**
302
+ * Классы для изображения
303
+ *
304
+ * @description
305
+ * Классы для изображения в элементе галереи.
306
+ *
307
+ * @returns {Array} Массив классов
308
+ */
309
+ const imageClasses = computed(() =>
310
+ useClassComposition("w-full h-full object-cover")
311
+ );
312
+
313
+ /**
314
+ * Классы для overlay
315
+ *
316
+ * @description
317
+ * Классы для overlay с информацией об элементе.
318
+ *
319
+ * @returns {Array} Массив классов
320
+ */
321
+ const overlayClasses = computed(() =>
322
+ useClassComposition(
323
+ "absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center p-4"
324
+ )
325
+ );
326
+
327
+ /**
328
+ * Проверяет, видим ли элемент (для lazy loading)
329
+ *
330
+ * @description
331
+ * Проверяет, был ли элемент загружен через lazy loading.
332
+ *
333
+ * @param {number} index - Индекс элемента
334
+ * @returns {boolean} true если элемент видим
335
+ */
336
+ function isItemVisible(index) {
337
+ return visibleItems.value.has(index);
338
+ }
339
+
340
+ /**
341
+ * Обработчик пересечения (для lazy loading)
342
+ *
343
+ * @description
344
+ * Отмечает элемент как видимый при пересечении с viewport.
345
+ *
346
+ * @param {number} index - Индекс элемента
347
+ */
348
+ function handleIntersect(index) {
349
+ visibleItems.value.add(index);
350
+ }
351
+
352
+ /**
353
+ * Обработчик ошибки загрузки изображения
354
+ *
355
+ * @description
356
+ * Обрабатывает ошибки загрузки изображения.
357
+ *
358
+ * @param {number} index - Индекс элемента
359
+ */
360
+ function handleImageError(index) {
361
+ console.warn(`DXMediaGallery: Ошибка загрузки изображения ${index}`);
362
+ }
363
+
364
+ /**
365
+ * Обработчик клика по элементу
366
+ *
367
+ * @description
368
+ * Обрабатывает клик по элементу галереи и открывает lightbox если включен.
369
+ *
370
+ * @param {Object} item - Элемент галереи
371
+ * @param {number} index - Индекс элемента
372
+ */
373
+ function handleItemClick(item, index) {
374
+ emit("item-click", item, index);
375
+
376
+ if (props.lightbox) {
377
+ selectedItem.value = item;
378
+ selectedIndex.value = index;
379
+ showLightbox.value = true;
380
+ emit("lightbox-open", item, index);
381
+ }
382
+ }
383
+
384
+ /**
385
+ * Закрытие lightbox
386
+ *
387
+ * @description
388
+ * Закрывает lightbox и эмитит событие.
389
+ */
390
+ function closeLightbox() {
391
+ showLightbox.value = false;
392
+ selectedItem.value = null;
393
+ emit("lightbox-close");
394
+ }
395
+
396
+ /**
397
+ * Переход к предыдущему элементу
398
+ *
399
+ * @description
400
+ * Переходит к предыдущему элементу в lightbox.
401
+ */
402
+ function previousItem() {
403
+ if (selectedIndex.value > 0) {
404
+ selectedIndex.value--;
405
+ selectedItem.value = props.items[selectedIndex.value];
406
+ }
407
+ }
408
+
409
+ /**
410
+ * Переход к следующему элементу
411
+ *
412
+ * @description
413
+ * Переходит к следующему элементу в lightbox.
414
+ */
415
+ function nextItem() {
416
+ if (selectedIndex.value < props.items.length - 1) {
417
+ selectedIndex.value++;
418
+ selectedItem.value = props.items[selectedIndex.value];
419
+ }
420
+ }
421
+ </script>
422
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXMediaGallery.vue';
2
+
@@ -0,0 +1,138 @@
1
+ import { ref } from 'vue';
2
+ import DXModal from './DXModal.vue';
3
+ import DXButton from '../../atoms/DXButton/DXButton.vue';
4
+
5
+ export default {
6
+ title: 'Organisms/DXModal',
7
+ component: DXModal,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ variant: {
11
+ control: 'select',
12
+ options: ['modal', 'fullscreen', 'sidebar-right', 'half-right'],
13
+ description: 'Тип модального окна',
14
+ },
15
+ width: {
16
+ control: 'select',
17
+ options: ['sm', 'md', 'lg', 'xl'],
18
+ description: 'Ширина (только для modal)',
19
+ },
20
+ closable: {
21
+ control: 'boolean',
22
+ description: 'Можно ли закрыть',
23
+ },
24
+ showModeSwitcher: {
25
+ control: 'boolean',
26
+ description: 'Показать переключатель режимов',
27
+ },
28
+ },
29
+ };
30
+
31
+ export const Default = {
32
+ render: (args) => ({
33
+ components: { DXModal, DXButton },
34
+ setup() {
35
+ const open = ref(false);
36
+ return { args, open };
37
+ },
38
+ template: `
39
+ <div>
40
+ <DXButton @click="open = true">Открыть модал</DXButton>
41
+ <DXModal v-bind="args" :open="open" @close="open = false">
42
+ <template #title>Заголовок</template>
43
+ <p>Контент модального окна. Здесь может быть любое содержимое.</p>
44
+ <template #actions>
45
+ <DXButton variant="ghost" @click="open = false">Отмена</DXButton>
46
+ <DXButton @click="open = false">Сохранить</DXButton>
47
+ </template>
48
+ </DXModal>
49
+ </div>
50
+ `,
51
+ }),
52
+ };
53
+
54
+ export const Sidebar = {
55
+ args: {
56
+ variant: 'sidebar-right',
57
+ },
58
+ render: (args) => ({
59
+ components: { DXModal, DXButton },
60
+ setup() {
61
+ const open = ref(false);
62
+ return { args, open };
63
+ },
64
+ template: `
65
+ <div>
66
+ <DXButton @click="open = true">Открыть сайдбар</DXButton>
67
+ <DXModal v-bind="args" :open="open" @close="open = false">
68
+ <template #title>Боковая панель</template>
69
+ <div class="space-y-4">
70
+ <p>Этот вариант отлично подходит для форм редактирования.</p>
71
+ <p>Контент может быть любой длины.</p>
72
+ </div>
73
+ <template #actions>
74
+ <DXButton variant="ghost" @click="open = false">Закрыть</DXButton>
75
+ </template>
76
+ </DXModal>
77
+ </div>
78
+ `,
79
+ }),
80
+ };
81
+
82
+ export const Fullscreen = {
83
+ args: {
84
+ variant: 'fullscreen',
85
+ },
86
+ render: (args) => ({
87
+ components: { DXModal, DXButton },
88
+ setup() {
89
+ const open = ref(false);
90
+ return { args, open };
91
+ },
92
+ template: `
93
+ <div>
94
+ <DXButton @click="open = true">Открыть на весь экран</DXButton>
95
+ <DXModal v-bind="args" :open="open" @close="open = false">
96
+ <template #title>Полноэкранный режим</template>
97
+ <p>Этот вариант занимает весь экран.</p>
98
+ <template #actions>
99
+ <DXButton @click="open = false">Закрыть</DXButton>
100
+ </template>
101
+ </DXModal>
102
+ </div>
103
+ `,
104
+ }),
105
+ };
106
+
107
+ export const WithModeSwitcher = {
108
+ args: {
109
+ showModeSwitcher: true,
110
+ },
111
+ render: (args) => ({
112
+ components: { DXModal, DXButton },
113
+ setup() {
114
+ const open = ref(false);
115
+ const variant = ref('modal');
116
+ return { args, open, variant };
117
+ },
118
+ template: `
119
+ <div>
120
+ <DXButton @click="open = true">Открыть с переключателем</DXButton>
121
+ <DXModal
122
+ v-bind="args"
123
+ :open="open"
124
+ :variant="variant"
125
+ @close="open = false"
126
+ @update:variant="variant = $event"
127
+ >
128
+ <template #title>Переключатель режимов</template>
129
+ <p>Используйте кнопки справа от заголовка для смены режима отображения.</p>
130
+ <template #actions>
131
+ <DXButton @click="open = false">Закрыть</DXButton>
132
+ </template>
133
+ </DXModal>
134
+ </div>
135
+ `,
136
+ }),
137
+ };
138
+