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,319 @@
1
+ import DXAvatar from './DXAvatar.vue';
2
+ import {
3
+ UserIcon,
4
+ HeartIcon,
5
+ StarIcon,
6
+ SparklesIcon,
7
+ RocketLaunchIcon,
8
+ } from '@heroicons/vue/24/solid';
9
+
10
+ export default {
11
+ title: 'Atoms/DXAvatar',
12
+ component: DXAvatar,
13
+ tags: ['autodocs'],
14
+ parameters: {
15
+ docs: {
16
+ description: {
17
+ component: `
18
+ # DXAvatar
19
+
20
+ Компонент аватара пользователя с поддержкой изображений, инициалов и иконок.
21
+
22
+ ## Назначение
23
+
24
+ DXAvatar - атомарный компонент для отображения аватаров пользователей.
25
+ Поддерживает изображения, инициалы или иконки с автоматическим fallback.
26
+
27
+ ## Архитектура
28
+
29
+ ### Использует
30
+ - \`useSize\` composable - для размеров аватара (xs, sm, md, lg, xl)
31
+ - \`DXIcon\` - для отображения иконок fallback
32
+ - \`UserIcon\` (Heroicons) - дефолтная иконка fallback
33
+
34
+ ### Используется в
35
+ - \`DXChatInterface\` - аватары в сообщениях
36
+ - Профили пользователей
37
+ - Списки пользователей
38
+ - Комментарии и отзывы
39
+
40
+ ## Внутренняя логика
41
+
42
+ ### Fallback система
43
+ Компонент использует трехуровневую систему fallback:
44
+ 1. **Изображение** - если указан \`src\` и загрузка успешна
45
+ 2. **Инициалы** - если нет изображения, но указаны \`initials\`
46
+ 3. **Иконка** - если нет ни изображения, ни инициалов (по умолчанию UserIcon)
47
+
48
+ ### Обработка ошибок изображения
49
+ - При ошибке загрузки изображения автоматически переключается на fallback
50
+ - Ошибка отслеживается через \`@error\` событие на \`<img>\`
51
+ - При изменении \`src\` ошибка сбрасывается для новой попытки загрузки
52
+
53
+ ### Размеры иконки
54
+ Размер иконки автоматически вычисляется на основе размера аватара:
55
+ - xs → sm
56
+ - sm → sm
57
+ - md → md
58
+ - lg → lg
59
+ - xl → xl
60
+
61
+ ### Анимации
62
+ - Поддержка анимаций иконки при hover: none, wiggle, scale, rotate
63
+ - Анимация scale на самом аватаре при hover (если iconAnimation !== 'none')
64
+
65
+ ## Особенности
66
+
67
+ ### Формы
68
+ - \`circle\` - круглая форма (по умолчанию)
69
+ - \`square\` - квадратная форма с закругленными углами
70
+
71
+ ### Кастомные иконки
72
+ Можно указать кастомную иконку через prop \`icon\`:
73
+ \`\`\`vue
74
+ <DXAvatar :icon="HeartIcon" />
75
+ \`\`\`
76
+
77
+ ### Инициалы
78
+ Инициалы автоматически преобразуются в uppercase:
79
+ \`\`\`vue
80
+ <DXAvatar initials="JD" /> <!-- Покажет "JD" -->
81
+ \`\`\`
82
+
83
+ ## Ограничения
84
+
85
+ - Инициалы должны быть короткими (1-3 символа) для лучшего отображения
86
+ - Изображения должны быть квадратными для правильного отображения
87
+ - При ошибке загрузки изображения автоматически переключается на fallback
88
+ `,
89
+ },
90
+ },
91
+ },
92
+ argTypes: {
93
+ src: {
94
+ control: { type: 'text' },
95
+ description: 'URL изображения аватара. При ошибке загрузки автоматически переключается на fallback.',
96
+ table: {
97
+ type: { summary: 'string' },
98
+ defaultValue: { summary: '""' },
99
+ category: 'Content',
100
+ },
101
+ },
102
+ alt: {
103
+ control: { type: 'text' },
104
+ description: 'Alt текст для изображения. Используется для доступности.',
105
+ table: {
106
+ type: { summary: 'string' },
107
+ defaultValue: { summary: '"Avatar"' },
108
+ category: 'Content',
109
+ },
110
+ },
111
+ initials: {
112
+ control: { type: 'text' },
113
+ description: 'Инициалы пользователя. Отображаются если нет изображения. Автоматически преобразуются в uppercase.',
114
+ table: {
115
+ type: { summary: 'string' },
116
+ defaultValue: { summary: '""' },
117
+ category: 'Content',
118
+ },
119
+ },
120
+ size: {
121
+ control: { type: 'select' },
122
+ options: ['xs', 'sm', 'md', 'lg', 'xl'],
123
+ description: 'Размер аватара. Влияет на размер контейнера, текста и иконки.',
124
+ table: {
125
+ type: { summary: 'string' },
126
+ defaultValue: { summary: '"md"' },
127
+ category: 'Appearance',
128
+ },
129
+ },
130
+ shape: {
131
+ control: { type: 'select' },
132
+ options: ['circle', 'square'],
133
+ description: 'Форма аватара. Circle - круглая, square - квадратная с закругленными углами.',
134
+ table: {
135
+ type: { summary: 'string' },
136
+ defaultValue: { summary: '"circle"' },
137
+ category: 'Appearance',
138
+ },
139
+ },
140
+ icon: {
141
+ control: false,
142
+ description: 'Кастомная иконка для fallback. Если не указана, используется UserIcon по умолчанию.',
143
+ table: {
144
+ type: { summary: 'Object | Function' },
145
+ defaultValue: { summary: 'null' },
146
+ category: 'Content',
147
+ },
148
+ },
149
+ iconAnimation: {
150
+ control: { type: 'select' },
151
+ options: ['none', 'wiggle', 'scale', 'rotate'],
152
+ description: 'Анимация иконки при hover. Также влияет на анимацию scale самого аватара.',
153
+ table: {
154
+ type: { summary: 'string' },
155
+ defaultValue: { summary: '"wiggle"' },
156
+ category: 'Appearance',
157
+ },
158
+ },
159
+ },
160
+ };
161
+
162
+ export const Default = {
163
+ args: { initials: 'JD' },
164
+ parameters: {
165
+ docs: {
166
+ description: {
167
+ story: 'Базовый аватар с инициалами. Инициалы автоматически преобразуются в uppercase и отображаются, если нет изображения.',
168
+ },
169
+ },
170
+ },
171
+ };
172
+
173
+ export const WithImage = {
174
+ args: { src: 'https://i.pravatar.cc/100', alt: 'User' },
175
+ parameters: {
176
+ docs: {
177
+ description: {
178
+ story: 'Аватар с изображением. При ошибке загрузки изображения автоматически переключается на fallback (инициалы или иконку).',
179
+ },
180
+ },
181
+ },
182
+ };
183
+
184
+ export const Sizes = {
185
+ parameters: {
186
+ docs: {
187
+ description: {
188
+ story: 'Все доступные размеры аватаров. Размер влияет на размер контейнера, текста иконки и инициалов.',
189
+ },
190
+ },
191
+ },
192
+ render: () => ({
193
+ components: { DXAvatar },
194
+ template: `
195
+ <div class="flex items-end gap-4">
196
+ <DXAvatar size="xs" initials="XS" />
197
+ <DXAvatar size="sm" initials="SM" />
198
+ <DXAvatar size="md" initials="MD" />
199
+ <DXAvatar size="lg" initials="LG" />
200
+ <DXAvatar size="xl" initials="XL" />
201
+ </div>
202
+ `,
203
+ }),
204
+ };
205
+
206
+ export const Shapes = {
207
+ parameters: {
208
+ docs: {
209
+ description: {
210
+ story: 'Две доступные формы аватара: circle (круглая) и square (квадратная с закругленными углами).',
211
+ },
212
+ },
213
+ },
214
+ render: () => ({
215
+ components: { DXAvatar },
216
+ template: `
217
+ <div class="flex gap-4">
218
+ <DXAvatar initials="CI" shape="circle" />
219
+ <DXAvatar initials="SQ" shape="square" />
220
+ </div>
221
+ `,
222
+ }),
223
+ };
224
+
225
+ export const WithCustomIcons = {
226
+ parameters: {
227
+ docs: {
228
+ description: {
229
+ story: 'Кастомные иконки для fallback. Можно использовать любую иконку из Heroicons. Если иконка не указана, используется UserIcon по умолчанию.',
230
+ },
231
+ },
232
+ },
233
+ render: () => ({
234
+ components: { DXAvatar },
235
+ setup() {
236
+ return { UserIcon, HeartIcon, StarIcon, SparklesIcon, RocketLaunchIcon };
237
+ },
238
+ template: `
239
+ <div class="flex gap-4">
240
+ <DXAvatar :icon="HeartIcon"/>
241
+ <DXAvatar :icon="StarIcon"/>
242
+ <DXAvatar :icon="SparklesIcon" shape="square"/>
243
+ <DXAvatar :icon="RocketLaunchIcon" shape="square"/>
244
+ </div>
245
+ `,
246
+ }),
247
+ };
248
+
249
+ export const FallbackScenarios = {
250
+ parameters: {
251
+ docs: {
252
+ description: {
253
+ story: 'Все варианты fallback системы: изображение (приоритет 1), инициалы (приоритет 2), дефолтная иконка UserIcon (приоритет 3), кастомная иконка (приоритет 3, если указана).',
254
+ },
255
+ },
256
+ },
257
+ render: () => ({
258
+ components: { DXAvatar },
259
+ setup() {
260
+ return { HeartIcon };
261
+ },
262
+ template: `
263
+ <div class="flex gap-4 items-center">
264
+ <div class="text-center">
265
+ <DXAvatar src="https://i.pravatar.cc/100" />
266
+ <p class="text-xs mt-2 text-slate-600">С изображением</p>
267
+ </div>
268
+ <div class="text-center">
269
+ <DXAvatar initials="AB" />
270
+ <p class="text-xs mt-2 text-slate-600">С инициалами</p>
271
+ </div>
272
+ <div class="text-center">
273
+ <DXAvatar />
274
+ <p class="text-xs mt-2 text-slate-600">Дефолтная иконка</p>
275
+ </div>
276
+ <div class="text-center">
277
+ <DXAvatar :icon="HeartIcon" />
278
+ <p class="text-xs mt-2 text-slate-600">Кастомная иконка</p>
279
+ </div>
280
+ </div>
281
+ `,
282
+ }),
283
+ };
284
+
285
+ export const WithAnimations = {
286
+ parameters: {
287
+ docs: {
288
+ description: {
289
+ story: 'Анимации иконки при hover. При iconAnimation !== "none" также применяется анимация scale на самом аватаре. Доступны варианты: none (без анимации), wiggle (тряска), scale (масштабирование), rotate (вращение).',
290
+ },
291
+ },
292
+ },
293
+ render: () => ({
294
+ components: { DXAvatar },
295
+ setup() {
296
+ return { UserIcon, HeartIcon, StarIcon, SparklesIcon };
297
+ },
298
+ template: `
299
+ <div class="flex gap-8 items-center">
300
+ <div class="text-center">
301
+ <DXAvatar :icon="UserIcon" icon-animation="none" size="lg" />
302
+ <p class="text-xs mt-2 text-slate-600">None</p>
303
+ </div>
304
+ <div class="text-center">
305
+ <DXAvatar :icon="HeartIcon" icon-animation="wiggle" size="lg" />
306
+ <p class="text-xs mt-2 text-slate-600">Wiggle</p>
307
+ </div>
308
+ <div class="text-center">
309
+ <DXAvatar :icon="StarIcon" icon-animation="scale" size="lg" />
310
+ <p class="text-xs mt-2 text-slate-600">Scale</p>
311
+ </div>
312
+ <div class="text-center">
313
+ <DXAvatar :icon="SparklesIcon" icon-animation="rotate" size="lg" />
314
+ <p class="text-xs mt-2 text-slate-600">Rotate</p>
315
+ </div>
316
+ </div>
317
+ `,
318
+ }),
319
+ };
@@ -0,0 +1,167 @@
1
+ <template>
2
+ <div
3
+ :class="avatarClasses"
4
+ data-component="DXAvatar"
5
+ :data-size="size"
6
+ :data-shape="shape"
7
+ >
8
+ <img
9
+ v-if="src && !imgError"
10
+ :src="src"
11
+ :alt="alt"
12
+ :class="imgClasses"
13
+ @error="imgError = true"
14
+ />
15
+ <span v-else-if="initials" :class="initialsClasses">
16
+ {{ initials }}
17
+ </span>
18
+ <DXIcon
19
+ v-else
20
+ :icon="fallbackIcon"
21
+ :size="iconSize"
22
+ :animation="iconAnimation"
23
+ :group-hover="iconAnimation !== 'none'"
24
+ :class="iconClasses"
25
+ />
26
+ </div>
27
+ </template>
28
+
29
+ <script setup>
30
+ import { ref, computed, watch } from "vue";
31
+ import { UserIcon } from "@heroicons/vue/24/solid";
32
+ import { useSize } from "@/composables/useSize";
33
+ import DXIcon from "../DXIcon/DXIcon.vue";
34
+
35
+ const props = defineProps({
36
+ /** URL изображения */
37
+ src: { type: String, default: "" },
38
+ /** Alt текст */
39
+ alt: { type: String, default: "Avatar" },
40
+ /** Инициалы (если нет изображения) */
41
+ initials: { type: String, default: "" },
42
+ /** Размер: xs | sm | md | lg | xl */
43
+ size: { type: String, default: "md" },
44
+ /** Форма: circle | square */
45
+ shape: { type: String, default: "circle" },
46
+ /** Кастомная иконка для fallback (по умолчанию UserIcon) */
47
+ icon: { type: [Object, Function], default: null },
48
+ /** Анимация иконки при hover: none | wiggle | scale | rotate */
49
+ iconAnimation: { type: String, default: "wiggle" },
50
+ });
51
+
52
+ /**
53
+ * Флаг ошибки загрузки изображения
54
+ *
55
+ * @description
56
+ * Отслеживает ошибки загрузки изображения через @error событие.
57
+ * При ошибке компонент автоматически переключается на fallback (инициалы или иконку).
58
+ */
59
+ const imgError = ref(false);
60
+
61
+ /**
62
+ * Сбрасывает ошибку при изменении src
63
+ *
64
+ * @description
65
+ * При изменении URL изображения сбрасывает флаг ошибки,
66
+ * чтобы новое изображение могло загрузиться. Это позволяет
67
+ * динамически менять изображение без необходимости пересоздания компонента.
68
+ */
69
+ watch(() => props.src, () => {
70
+ imgError.value = false;
71
+ });
72
+
73
+ const BASE_CLASSES = "relative inline-flex items-center justify-center overflow-hidden bg-slate-100 transition-transform group";
74
+
75
+ const IMG_CLASSES = "w-full h-full object-cover";
76
+
77
+ const INITIALS_BASE_CLASSES = "font-medium text-slate-600 uppercase";
78
+
79
+ const ICON_CLASSES = "text-slate-400";
80
+
81
+ const SHAPE_CLASSES = {
82
+ circle: "rounded-full",
83
+ square: "rounded-lg",
84
+ };
85
+
86
+ const INITIALS_SIZE_CLASSES = {
87
+ xs: "text-xs",
88
+ sm: "text-xs",
89
+ md: "text-sm",
90
+ lg: "text-base",
91
+ xl: "text-lg",
92
+ };
93
+
94
+ /**
95
+ * Классы для контейнера аватара
96
+ *
97
+ * @description
98
+ * Объединяет базовые классы, размер, форму и анимацию hover.
99
+ * Анимация scale применяется только если iconAnimation !== 'none'.
100
+ *
101
+ * @returns {Array} Массив классов для :class binding
102
+ */
103
+ const avatarClasses = computed(() => [
104
+ BASE_CLASSES,
105
+ useSize(props.size, 'avatar'),
106
+ SHAPE_CLASSES[props.shape] || SHAPE_CLASSES.circle,
107
+ { 'hover:scale-105': props.iconAnimation !== 'none' }
108
+ ]
109
+ );
110
+
111
+ const imgClasses = computed(() => IMG_CLASSES);
112
+
113
+ /**
114
+ * Классы для инициалов
115
+ *
116
+ * @description
117
+ * Объединяет базовые классы инициалов (font-medium, uppercase, цвет)
118
+ * с размерными классами на основе размера аватара.
119
+ *
120
+ * @returns {Array} Массив классов для инициалов
121
+ */
122
+ const initialsClasses = computed(() => [
123
+ INITIALS_BASE_CLASSES,
124
+ INITIALS_SIZE_CLASSES[props.size] || INITIALS_SIZE_CLASSES.md,
125
+ ]);
126
+
127
+ const iconClasses = computed(() => ICON_CLASSES);
128
+
129
+ /**
130
+ * Иконка для fallback
131
+ *
132
+ * @description
133
+ * Определяет какую иконку использовать для fallback:
134
+ * - Если указана кастомная иконка через prop icon → использует её
135
+ * - Если иконка не указана → использует UserIcon по умолчанию
136
+ *
137
+ * @returns {Object|Function} Компонент иконки (Heroicon)
138
+ */
139
+ const fallbackIcon = computed(() => props.icon || UserIcon);
140
+
141
+ const iconSizeMap = {
142
+ xs: "sm",
143
+ sm: "sm",
144
+ md: "md",
145
+ lg: "lg",
146
+ xl: "xl",
147
+ };
148
+
149
+ /**
150
+ * Размер иконки на основе размера аватара
151
+ *
152
+ * @description
153
+ * Вычисляет размер иконки fallback на основе размера аватара.
154
+ * Иконка всегда немного меньше аватара для визуального баланса.
155
+ *
156
+ * Маппинг размеров:
157
+ * - xs → sm
158
+ * - sm → sm
159
+ * - md → md
160
+ * - lg → lg
161
+ * - xl → xl
162
+ *
163
+ * @returns {string} Размер иконки: xs | sm | md | lg | xl
164
+ */
165
+ const iconSize = computed(() => iconSizeMap[props.size] || "md");
166
+ </script>
167
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXAvatar.vue';
2
+