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,245 @@
1
+ import { ref } from 'vue';
2
+ import DXSettingsPanel from './DXSettingsPanel.vue';
3
+
4
+ export default {
5
+ title: 'Organisms/DXSettingsPanel',
6
+ component: DXSettingsPanel,
7
+ tags: ['autodocs'],
8
+ parameters: {
9
+ docs: {
10
+ description: {
11
+ component: `
12
+ # DXSettingsPanel
13
+
14
+ Панель настроек с категориями, группами настроек и сохранением изменений.
15
+
16
+ ## Назначение
17
+
18
+ DXSettingsPanel предоставляет полнофункциональную панель настроек с поддержкой
19
+ категорий, групп настроек, различных типов полей и поиска.
20
+
21
+ ## Архитектура
22
+
23
+ ### Использует
24
+ - \`DXTabs\` - для категорий (в режиме tabs)
25
+ - \`DXInput\` - для текстовых полей
26
+ - \`DXSelect\` - для полей выбора
27
+ - \`DXToggle\` - для переключателей
28
+ - \`DXButton\` - для действий
29
+ - \`useClassComposition\` composable - для стилей
30
+ - \`useSpacing\` composable - для отступов
31
+
32
+ ### Используется в
33
+ - Настройки приложения
34
+ - Настройки профиля пользователя
35
+ - Конфигурация системы
36
+ - Панели администратора
37
+
38
+ ## Внутренняя логика
39
+
40
+ ### Макеты
41
+ - **tabs**: Категории в виде вкладок
42
+ - **sidebar**: Категории в боковой панели
43
+
44
+ ### Типы настроек
45
+ - **input**: Текстовое поле
46
+ - **select**: Поле выбора
47
+ - **toggle**: Переключатель
48
+
49
+ ### Поиск
50
+ При \`searchable={true}\` можно искать настройки по названию и описанию.
51
+
52
+ ## Особенности
53
+
54
+ ### Группировка
55
+ Настройки могут быть сгруппированы внутри категорий.
56
+
57
+ ### Валидация
58
+ Поддерживает валидацию через обработку событий.
59
+ `,
60
+ },
61
+ },
62
+ },
63
+ };
64
+
65
+ const defaultCategories = [
66
+ {
67
+ id: 'general',
68
+ label: 'Общие',
69
+ groups: [
70
+ {
71
+ title: 'Язык и регион',
72
+ settings: [
73
+ {
74
+ id: 'language',
75
+ label: 'Язык',
76
+ type: 'select',
77
+ options: [
78
+ { value: 'ru', label: 'Русский' },
79
+ { value: 'en', label: 'English' },
80
+ ],
81
+ },
82
+ {
83
+ id: 'timezone',
84
+ label: 'Часовой пояс',
85
+ type: 'select',
86
+ options: [
87
+ { value: 'Europe/Moscow', label: 'Москва (UTC+3)' },
88
+ { value: 'Europe/London', label: 'Лондон (UTC+0)' },
89
+ ],
90
+ },
91
+ ],
92
+ },
93
+ ],
94
+ },
95
+ {
96
+ id: 'notifications',
97
+ label: 'Уведомления',
98
+ groups: [
99
+ {
100
+ title: 'Типы уведомлений',
101
+ settings: [
102
+ {
103
+ id: 'emailNotifications',
104
+ label: 'Email уведомления',
105
+ type: 'toggle',
106
+ description: 'Получать уведомления на email',
107
+ },
108
+ {
109
+ id: 'pushNotifications',
110
+ label: 'Push уведомления',
111
+ type: 'toggle',
112
+ description: 'Получать push уведомления',
113
+ },
114
+ {
115
+ id: 'smsNotifications',
116
+ label: 'SMS уведомления',
117
+ type: 'toggle',
118
+ description: 'Получать SMS уведомления',
119
+ },
120
+ ],
121
+ },
122
+ ],
123
+ },
124
+ {
125
+ id: 'privacy',
126
+ label: 'Приватность',
127
+ groups: [
128
+ {
129
+ title: 'Настройки приватности',
130
+ settings: [
131
+ {
132
+ id: 'publicProfile',
133
+ label: 'Публичный профиль',
134
+ type: 'toggle',
135
+ description: 'Ваш профиль виден всем пользователям',
136
+ },
137
+ {
138
+ id: 'showEmail',
139
+ label: 'Показывать email',
140
+ type: 'toggle',
141
+ description: 'Показывать email в профиле',
142
+ },
143
+ ],
144
+ },
145
+ ],
146
+ },
147
+ ];
148
+
149
+ const defaultSettings = {
150
+ language: 'ru',
151
+ timezone: 'Europe/Moscow',
152
+ emailNotifications: true,
153
+ pushNotifications: false,
154
+ smsNotifications: false,
155
+ publicProfile: true,
156
+ showEmail: false,
157
+ };
158
+
159
+ export const Default = {
160
+ args: {
161
+ settings: defaultSettings,
162
+ categories: defaultCategories,
163
+ layout: 'tabs',
164
+ searchable: false,
165
+ },
166
+ parameters: {
167
+ docs: {
168
+ description: {
169
+ story: 'Базовая панель настроек с категориями в виде вкладок.',
170
+ },
171
+ },
172
+ },
173
+ render: (args) => ({
174
+ components: { DXSettingsPanel },
175
+ setup() {
176
+ const settings = ref(args.settings);
177
+ const handleSave = (data) => {
178
+ console.log('Настройки сохранены:', data);
179
+ settings.value = { ...data };
180
+ };
181
+ const handleReset = () => {
182
+ console.log('Настройки сброшены');
183
+ settings.value = { ...defaultSettings };
184
+ };
185
+ return { args, settings, handleSave, handleReset };
186
+ },
187
+ template: `
188
+ <DXSettingsPanel
189
+ v-model:settings="settings"
190
+ v-bind="args"
191
+ @save="handleSave"
192
+ @reset="handleReset"
193
+ />
194
+ `,
195
+ }),
196
+ };
197
+
198
+ export const WithSidebar = {
199
+ parameters: {
200
+ docs: {
201
+ description: {
202
+ story: 'Панель настроек с боковой панелью категорий.',
203
+ },
204
+ },
205
+ },
206
+ render: () => ({
207
+ components: { DXSettingsPanel },
208
+ setup() {
209
+ const settings = ref(defaultSettings);
210
+ return { settings, defaultCategories };
211
+ },
212
+ template: `
213
+ <DXSettingsPanel
214
+ v-model:settings="settings"
215
+ :categories="defaultCategories"
216
+ layout="sidebar"
217
+ />
218
+ `,
219
+ }),
220
+ };
221
+
222
+ export const WithSearch = {
223
+ parameters: {
224
+ docs: {
225
+ description: {
226
+ story: 'Панель настроек с поиском по настройкам.',
227
+ },
228
+ },
229
+ },
230
+ render: () => ({
231
+ components: { DXSettingsPanel },
232
+ setup() {
233
+ const settings = ref(defaultSettings);
234
+ return { settings, defaultCategories };
235
+ },
236
+ template: `
237
+ <DXSettingsPanel
238
+ v-model:settings="settings"
239
+ :categories="defaultCategories"
240
+ :searchable="true"
241
+ />
242
+ `,
243
+ }),
244
+ };
245
+
@@ -0,0 +1,454 @@
1
+ <template>
2
+ <div
3
+ :class="panelClasses"
4
+ data-component="DXSettingsPanel"
5
+ :data-searchable="searchable"
6
+ >
7
+ <!-- Search -->
8
+ <div v-if="searchable" :class="searchClasses">
9
+ <DXInput
10
+ v-model="searchQuery"
11
+ placeholder="Поиск настроек..."
12
+ :prefix-icon="MagnifyingGlassIcon"
13
+ />
14
+ </div>
15
+
16
+ <!-- Layout: Tabs or Sidebar -->
17
+ <div :class="layoutClasses">
18
+ <!-- Categories (Tabs or Sidebar) -->
19
+ <div v-if="layout === 'tabs'" class="mb-6">
20
+ <DXTabs v-model="activeCategory" :tabs="categoryTabs">
21
+ <template
22
+ v-for="category in categories"
23
+ :key="category.id"
24
+ #[`tab-${category.id}`]
25
+ >
26
+ <slot :name="`category-${category.id}`" :category="category" :settings="filteredSettings">
27
+ <div class="space-y-6">
28
+ <div
29
+ v-for="group in getCategoryGroups(category.id)"
30
+ :key="group.id || group.title"
31
+ class="space-y-4"
32
+ >
33
+ <h4 v-if="group.title" class="text-sm font-semibold text-slate-700">
34
+ {{ group.title }}
35
+ </h4>
36
+ <div class="space-y-3">
37
+ <slot
38
+ :name="`setting-${group.id || group.title}`"
39
+ :group="group"
40
+ :settings="filteredSettings"
41
+ >
42
+ <div
43
+ v-for="setting in group.settings"
44
+ :key="setting.id"
45
+ class="flex items-center justify-between"
46
+ >
47
+ <div class="flex-1">
48
+ <label class="text-sm font-medium text-slate-900">
49
+ {{ setting.label }}
50
+ </label>
51
+ <p v-if="setting.description" class="text-xs text-slate-500 mt-1">
52
+ {{ setting.description }}
53
+ </p>
54
+ </div>
55
+ <div class="ml-4">
56
+ <component
57
+ :is="getSettingComponent(setting.type)"
58
+ v-model="filteredSettings[setting.id]"
59
+ v-bind="getSettingProps(setting)"
60
+ @update:model-value="handleSettingChange(setting.id, $event)"
61
+ />
62
+ </div>
63
+ </div>
64
+ </slot>
65
+ </div>
66
+ </div>
67
+ </div>
68
+ </slot>
69
+ </template>
70
+ </DXTabs>
71
+ </div>
72
+
73
+ <div v-else-if="layout === 'sidebar'" class="flex gap-6">
74
+ <!-- Sidebar -->
75
+ <div :class="sidebarClasses">
76
+ <nav class="space-y-1">
77
+ <button
78
+ v-for="category in categories"
79
+ :key="category.id"
80
+ :class="categoryButtonClasses(category.id)"
81
+ @click="activeCategory = category.id"
82
+ >
83
+ {{ category.label }}
84
+ </button>
85
+ </nav>
86
+ </div>
87
+
88
+ <!-- Content -->
89
+ <div :class="contentClasses">
90
+ <div
91
+ v-for="category in categories"
92
+ :key="category.id"
93
+ v-show="activeCategory === category.id"
94
+ class="space-y-6"
95
+ >
96
+ <slot :name="`category-${category.id}`" :category="category" :settings="filteredSettings">
97
+ <div
98
+ v-for="group in getCategoryGroups(category.id)"
99
+ :key="group.id || group.title"
100
+ class="space-y-4"
101
+ >
102
+ <h4 v-if="group.title" class="text-sm font-semibold text-slate-700">
103
+ {{ group.title }}
104
+ </h4>
105
+ <div class="space-y-3">
106
+ <div
107
+ v-for="setting in group.settings"
108
+ :key="setting.id"
109
+ class="flex items-center justify-between"
110
+ >
111
+ <div class="flex-1">
112
+ <label class="text-sm font-medium text-slate-900">
113
+ {{ setting.label }}
114
+ </label>
115
+ <p v-if="setting.description" class="text-xs text-slate-500 mt-1">
116
+ {{ setting.description }}
117
+ </p>
118
+ </div>
119
+ <div class="ml-4">
120
+ <component
121
+ :is="getSettingComponent(setting.type)"
122
+ v-model="filteredSettings[setting.id]"
123
+ v-bind="getSettingProps(setting)"
124
+ @update:model-value="handleSettingChange(setting.id, $event)"
125
+ />
126
+ </div>
127
+ </div>
128
+ </div>
129
+ </div>
130
+ </slot>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ </div>
135
+
136
+ <!-- Actions -->
137
+ <div v-if="$slots.actions || showActions" :class="actionsClasses">
138
+ <slot name="actions">
139
+ <DXButton variant="ghost" @click="handleReset">Сбросить</DXButton>
140
+ <DXButton variant="primary" @click="handleSave">Сохранить</DXButton>
141
+ </slot>
142
+ </div>
143
+ </div>
144
+ </template>
145
+
146
+ <script setup>
147
+ import { ref, computed, watch } from "vue";
148
+ import { useClassComposition } from "@/composables/useClassComposition";
149
+ import { useSpacing } from "@/composables/useSpacing";
150
+ import DXInput from "../../molecules/DXInput/DXInput.vue";
151
+ import DXSelect from "../../molecules/DXSelect/DXSelect.vue";
152
+ import DXToggle from "../../atoms/DXToggle/DXToggle.vue";
153
+ import DXTabs from "../DXTabs/DXTabs.vue";
154
+ import DXButton from "../../atoms/DXButton/DXButton.vue";
155
+ import { MagnifyingGlassIcon } from "@heroicons/vue/24/outline";
156
+
157
+ const props = defineProps({
158
+ /**
159
+ * Настройки (v-model)
160
+ * Формат: { [settingId]: value }
161
+ */
162
+ settings: {
163
+ type: Object,
164
+ required: true,
165
+ default: () => ({}),
166
+ },
167
+ /**
168
+ * Категории настроек
169
+ * Формат: [{ id, label, groups?: [{ title, settings: [{ id, label, type, ... }] }] }]
170
+ */
171
+ categories: {
172
+ type: Array,
173
+ required: true,
174
+ default: () => [],
175
+ },
176
+ /**
177
+ * Поиск по настройкам
178
+ * @default false
179
+ */
180
+ searchable: { type: Boolean, default: false },
181
+ /**
182
+ * Макет: tabs | sidebar
183
+ * @default 'tabs'
184
+ */
185
+ layout: {
186
+ type: String,
187
+ default: "tabs",
188
+ validator: (v) => ["tabs", "sidebar"].includes(v),
189
+ },
190
+ /**
191
+ * Показывать кнопки действий
192
+ * @default true
193
+ */
194
+ showActions: { type: Boolean, default: true },
195
+ });
196
+
197
+ const emit = defineEmits([
198
+ "update:settings",
199
+ "save",
200
+ "reset",
201
+ "change",
202
+ "category-change",
203
+ ]);
204
+
205
+ const activeCategory = ref(props.categories[0]?.id || "");
206
+ const searchQuery = ref("");
207
+ const filteredSettings = ref({ ...props.settings });
208
+
209
+ /**
210
+ * Вкладки категорий
211
+ *
212
+ * @description
213
+ * Преобразует категории в формат для DXTabs.
214
+ *
215
+ * @returns {Array} Массив вкладок
216
+ */
217
+ const categoryTabs = computed(() => {
218
+ return props.categories.map((category) => ({
219
+ id: category.id,
220
+ label: category.label,
221
+ }));
222
+ });
223
+
224
+ /**
225
+ * Отфильтрованные настройки
226
+ *
227
+ * @description
228
+ * Фильтрует настройки по поисковому запросу.
229
+ *
230
+ * @returns {Object} Отфильтрованные настройки
231
+ */
232
+ const filteredSettingsComputed = computed(() => {
233
+ if (!props.searchable || !searchQuery.value.trim()) {
234
+ return filteredSettings.value;
235
+ }
236
+
237
+ const query = searchQuery.value.toLowerCase();
238
+ const filtered = {};
239
+
240
+ props.categories.forEach((category) => {
241
+ category.groups?.forEach((group) => {
242
+ group.settings?.forEach((setting) => {
243
+ if (
244
+ setting.label.toLowerCase().includes(query) ||
245
+ setting.description?.toLowerCase().includes(query)
246
+ ) {
247
+ filtered[setting.id] = filteredSettings.value[setting.id];
248
+ }
249
+ });
250
+ });
251
+ });
252
+
253
+ return filtered;
254
+ });
255
+
256
+ /**
257
+ * Классы для панели
258
+ *
259
+ * @description
260
+ * Базовые классы для панели настроек.
261
+ *
262
+ * @returns {Array} Массив классов
263
+ */
264
+ const panelClasses = computed(() =>
265
+ useClassComposition("w-full", useSpacing("md", "padding"))
266
+ );
267
+
268
+ /**
269
+ * Классы для поиска
270
+ *
271
+ * @description
272
+ * Классы для секции поиска.
273
+ *
274
+ * @returns {Array} Массив классов
275
+ */
276
+ const searchClasses = computed(() =>
277
+ useClassComposition("mb-6")
278
+ );
279
+
280
+ /**
281
+ * Классы для layout
282
+ *
283
+ * @description
284
+ * Классы для контейнера layout.
285
+ *
286
+ * @returns {Array} Массив классов
287
+ */
288
+ const layoutClasses = computed(() =>
289
+ useClassComposition("w-full")
290
+ );
291
+
292
+ /**
293
+ * Классы для sidebar
294
+ *
295
+ * @description
296
+ * Классы для боковой панели категорий.
297
+ *
298
+ * @returns {Array} Массив классов
299
+ */
300
+ const sidebarClasses = computed(() =>
301
+ useClassComposition("w-48 flex-shrink-0")
302
+ );
303
+
304
+ /**
305
+ * Классы для контента
306
+ *
307
+ * @description
308
+ * Классы для области контента.
309
+ *
310
+ * @returns {Array} Массив классов
311
+ */
312
+ const contentClasses = computed(() =>
313
+ useClassComposition("flex-1")
314
+ );
315
+
316
+ /**
317
+ * Классы для кнопки категории
318
+ *
319
+ * @description
320
+ * Классы для кнопки категории в sidebar.
321
+ *
322
+ * @param {string} categoryId - ID категории
323
+ * @returns {Array} Массив классов
324
+ */
325
+ function categoryButtonClasses(categoryId) {
326
+ return useClassComposition(
327
+ "w-full text-left px-4 py-2 rounded-lg text-sm font-medium transition-colors",
328
+ activeCategory.value === categoryId
329
+ ? "bg-slate-900 text-white"
330
+ : "text-slate-700 hover:bg-slate-100"
331
+ );
332
+ }
333
+
334
+ /**
335
+ * Классы для действий
336
+ *
337
+ * @description
338
+ * Классы для секции действий.
339
+ *
340
+ * @returns {Array} Массив классов
341
+ */
342
+ const actionsClasses = computed(() =>
343
+ useClassComposition("flex justify-end gap-2 mt-6 pt-6 border-t border-slate-200")
344
+ );
345
+
346
+ /**
347
+ * Получение групп категории
348
+ *
349
+ * @description
350
+ * Возвращает группы настроек для указанной категории.
351
+ *
352
+ * @param {string} categoryId - ID категории
353
+ * @returns {Array} Массив групп
354
+ */
355
+ function getCategoryGroups(categoryId) {
356
+ const category = props.categories.find((c) => c.id === categoryId);
357
+ return category?.groups || [];
358
+ }
359
+
360
+ /**
361
+ * Получение компонента для настройки
362
+ *
363
+ * @description
364
+ * Возвращает компонент для типа настройки.
365
+ *
366
+ * @param {string} type - Тип настройки
367
+ * @returns {Object} Компонент
368
+ */
369
+ function getSettingComponent(type) {
370
+ const components = {
371
+ input: DXInput,
372
+ select: DXSelect,
373
+ toggle: DXToggle,
374
+ };
375
+ return components[type] || DXInput;
376
+ }
377
+
378
+ /**
379
+ * Получение props для настройки
380
+ *
381
+ * @description
382
+ * Возвращает props для компонента настройки.
383
+ *
384
+ * @param {Object} setting - Объект настройки
385
+ * @returns {Object} Props
386
+ */
387
+ function getSettingProps(setting) {
388
+ const baseProps = {
389
+ placeholder: setting.placeholder,
390
+ disabled: setting.disabled,
391
+ };
392
+
393
+ if (setting.type === "select") {
394
+ return {
395
+ ...baseProps,
396
+ options: setting.options || [],
397
+ };
398
+ }
399
+
400
+ return baseProps;
401
+ }
402
+
403
+ /**
404
+ * Обработчик изменения настройки
405
+ *
406
+ * @description
407
+ * Обрабатывает изменение значения настройки.
408
+ *
409
+ * @param {string} settingId - ID настройки
410
+ * @param {any} value - Новое значение
411
+ */
412
+ function handleSettingChange(settingId, value) {
413
+ filteredSettings.value[settingId] = value;
414
+ emit("update:settings", { ...filteredSettings.value });
415
+ emit("change", { settingId, value });
416
+ }
417
+
418
+ /**
419
+ * Обработчик сохранения
420
+ *
421
+ * @description
422
+ * Эмитит событие сохранения настроек.
423
+ */
424
+ function handleSave() {
425
+ emit("save", { ...filteredSettings.value });
426
+ }
427
+
428
+ /**
429
+ * Обработчик сброса
430
+ *
431
+ * @description
432
+ * Сбрасывает настройки к значениям по умолчанию.
433
+ */
434
+ function handleReset() {
435
+ filteredSettings.value = { ...props.settings };
436
+ emit("reset");
437
+ emit("update:settings", { ...filteredSettings.value });
438
+ }
439
+
440
+ // Синхронизация с prop settings
441
+ watch(
442
+ () => props.settings,
443
+ (newSettings) => {
444
+ filteredSettings.value = { ...newSettings };
445
+ },
446
+ { deep: true }
447
+ );
448
+
449
+ // Синхронизация activeCategory
450
+ watch(activeCategory, (newCategory) => {
451
+ emit("category-change", newCategory);
452
+ });
453
+ </script>
454
+
@@ -0,0 +1,2 @@
1
+ export { default } from './DXSettingsPanel.vue';
2
+