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,700 @@
1
+ import {
2
+ InformationCircleIcon,
3
+ CheckCircleIcon,
4
+ ExclamationTriangleIcon,
5
+ XCircleIcon,
6
+ } from '@heroicons/vue/24/solid';
7
+
8
+ /**
9
+ * Конфигурация вариантов для компонентов
10
+ */
11
+ export const VARIANT_CONFIGS = {
12
+ // Для Alert/Toast и общих компонентов
13
+ default: {
14
+ bg: 'bg-slate-50',
15
+ text: 'text-slate-800', // Для Alert/Toast (используется в useVariantClasses)
16
+ border: 'border-slate-200',
17
+ icon: null,
18
+ iconColor: 'text-slate-500',
19
+ // Для тегов
20
+ tag: 'bg-slate-100 text-slate-800 border-slate-200',
21
+ // Для прогресс-бара
22
+ progress: 'bg-slate-800',
23
+ // Для divider
24
+ divider: 'border-slate-200',
25
+ // Для лоадера
26
+ loader: {
27
+ border: 'border-slate-300',
28
+ borderTop: 'border-t-slate-900',
29
+ text: 'text-slate-600',
30
+ },
31
+ // Для слайдера
32
+ slider: {
33
+ track: 'bg-slate-200',
34
+ thumb: 'bg-slate-900',
35
+ thumbHover: 'bg-slate-800',
36
+ tick: 'bg-slate-400',
37
+ text: 'text-slate-700',
38
+ textActive: 'text-slate-900',
39
+ textValue: 'text-slate-900',
40
+ },
41
+ },
42
+ slate: {
43
+ bg: 'bg-slate-50',
44
+ text: 'text-slate-800',
45
+ border: 'border-slate-200',
46
+ icon: null,
47
+ iconColor: 'text-slate-500',
48
+ // Для Checkbox
49
+ checkbox: {
50
+ unchecked: "border-slate-300 bg-white hover:border-slate-400",
51
+ checked: "border-slate-700 bg-slate-700 hover:bg-slate-600",
52
+ ring: "focus:ring-slate-900/10",
53
+ },
54
+ // Для Radio
55
+ radio: {
56
+ unchecked: "border-slate-300 bg-white hover:border-slate-400",
57
+ checked: "border-slate-700 bg-slate-50 hover:border-slate-600",
58
+ ring: "focus:ring-slate-900/10",
59
+ dot: "bg-slate-700",
60
+ },
61
+ // Для текста
62
+ text: 'text-slate-700',
63
+ // Для тегов
64
+ tag: 'bg-slate-100 text-slate-800 border-slate-200',
65
+ // Для прогресс-бара
66
+ progress: 'bg-slate-800',
67
+ // Для divider
68
+ divider: 'border-slate-200',
69
+ // Для лоадера
70
+ loader: {
71
+ border: 'border-slate-300',
72
+ borderTop: 'border-t-slate-700',
73
+ text: 'text-slate-700',
74
+ },
75
+ // Для слайдера
76
+ slider: {
77
+ track: 'bg-slate-200',
78
+ thumb: 'bg-slate-700',
79
+ thumbHover: 'bg-slate-600',
80
+ tick: 'bg-slate-400',
81
+ text: 'text-slate-700',
82
+ textActive: 'text-slate-900',
83
+ textValue: 'text-slate-900',
84
+ },
85
+ // Для toggle
86
+ toggle: {
87
+ checked: 'bg-slate-700',
88
+ unchecked: 'bg-slate-200',
89
+ ring: 'focus:ring-slate-700/10',
90
+ },
91
+ },
92
+ primary: {
93
+ bg: 'bg-slate-50',
94
+ text: 'text-slate-800',
95
+ border: 'border-slate-200',
96
+ icon: null,
97
+ iconColor: 'text-slate-500',
98
+ // Для Checkbox
99
+ checkbox: {
100
+ unchecked: "border-slate-300 bg-white hover:border-slate-400",
101
+ checked: "border-slate-900 bg-slate-900 hover:bg-slate-800",
102
+ ring: "focus:ring-slate-900/10",
103
+ },
104
+ // Для Radio
105
+ radio: {
106
+ unchecked: "border-slate-300 bg-white hover:border-slate-400",
107
+ checked: "border-slate-900 bg-slate-50 hover:border-slate-800",
108
+ ring: "focus:ring-slate-900/10",
109
+ dot: "bg-slate-900",
110
+ },
111
+ // Для текста
112
+ text: 'text-slate-900',
113
+ // Для тегов
114
+ tag: 'bg-blue-100 text-blue-800 border-blue-200',
115
+ // Для прогресс-бара
116
+ progress: 'bg-slate-800',
117
+ // Для divider
118
+ divider: 'border-slate-200',
119
+ // Для tooltip
120
+ tooltip: 'bg-slate-900 text-white',
121
+ // Для лоадера
122
+ loader: {
123
+ border: 'border-slate-300',
124
+ borderTop: 'border-t-slate-900',
125
+ text: 'text-slate-900',
126
+ },
127
+ // Для слайдера
128
+ slider: {
129
+ track: 'bg-slate-200',
130
+ thumb: 'bg-slate-900',
131
+ thumbHover: 'bg-slate-800',
132
+ tick: 'bg-slate-400',
133
+ text: 'text-slate-700',
134
+ textActive: 'text-slate-900',
135
+ textValue: 'text-slate-900',
136
+ },
137
+ // Для toggle
138
+ toggle: {
139
+ checked: 'bg-slate-900',
140
+ unchecked: 'bg-slate-200',
141
+ ring: 'focus:ring-slate-900/10',
142
+ },
143
+ },
144
+ info: {
145
+ bg: 'bg-blue-50',
146
+ text: 'text-blue-800',
147
+ border: 'border-blue-200',
148
+ icon: InformationCircleIcon,
149
+ iconColor: 'text-blue-500',
150
+ // Для Checkbox
151
+ checkbox: {
152
+ unchecked: "border-slate-300 bg-white hover:border-blue-400",
153
+ checked: "border-blue-600 bg-blue-600 hover:bg-blue-500",
154
+ ring: "focus:ring-blue-500/10",
155
+ },
156
+ // Для Radio
157
+ radio: {
158
+ unchecked: "border-slate-300 bg-white hover:border-blue-400",
159
+ checked: "border-blue-600 bg-blue-50 hover:border-blue-500",
160
+ ring: "focus:ring-blue-500/10",
161
+ dot: "bg-blue-600",
162
+ },
163
+ // Для текста
164
+ text: 'text-blue-700',
165
+ // Для тегов
166
+ tag: 'bg-cyan-100 text-cyan-800 border-cyan-200',
167
+ // Для прогресс-бара
168
+ progress: 'bg-blue-500',
169
+ // Для divider
170
+ divider: 'border-blue-200',
171
+ // Для tooltip
172
+ tooltip: 'bg-blue-600 text-white',
173
+ // Для лоадера
174
+ loader: {
175
+ border: 'border-blue-300',
176
+ borderTop: 'border-t-blue-600',
177
+ text: 'text-blue-700',
178
+ },
179
+ // Для слайдера
180
+ slider: {
181
+ track: 'bg-blue-200',
182
+ thumb: 'bg-blue-600',
183
+ thumbHover: 'bg-blue-500',
184
+ tick: 'bg-blue-400',
185
+ text: 'text-blue-700',
186
+ textActive: 'text-blue-900',
187
+ textValue: 'text-blue-900',
188
+ },
189
+ // Для toggle
190
+ toggle: {
191
+ checked: 'bg-blue-600',
192
+ unchecked: 'bg-slate-200',
193
+ ring: 'focus:ring-blue-500/10',
194
+ },
195
+ },
196
+ success: {
197
+ bg: 'bg-emerald-50',
198
+ text: 'text-emerald-800',
199
+ border: 'border-emerald-200',
200
+ icon: CheckCircleIcon,
201
+ iconColor: 'text-emerald-500',
202
+ // Для Checkbox
203
+ checkbox: {
204
+ unchecked: "border-slate-300 bg-white hover:border-emerald-400",
205
+ checked: "border-emerald-600 bg-emerald-600 hover:bg-emerald-500",
206
+ ring: "focus:ring-emerald-500/10",
207
+ },
208
+ // Для Radio
209
+ radio: {
210
+ unchecked: "border-slate-300 bg-white hover:border-emerald-400",
211
+ checked: "border-emerald-600 bg-emerald-50 hover:border-emerald-500",
212
+ ring: "focus:ring-emerald-500/10",
213
+ dot: "bg-emerald-600",
214
+ },
215
+ // Для текста
216
+ text: 'text-emerald-700',
217
+ // Для тегов
218
+ tag: 'bg-green-100 text-green-800 border-green-200',
219
+ // Для прогресс-бара
220
+ progress: 'bg-emerald-500',
221
+ // Для divider
222
+ divider: 'border-emerald-200',
223
+ // Для tooltip
224
+ tooltip: 'bg-emerald-600 text-white',
225
+ // Для лоадера
226
+ loader: {
227
+ border: 'border-emerald-300',
228
+ borderTop: 'border-t-emerald-600',
229
+ text: 'text-emerald-700',
230
+ },
231
+ // Для слайдера
232
+ slider: {
233
+ track: 'bg-emerald-200',
234
+ thumb: 'bg-emerald-600',
235
+ thumbHover: 'bg-emerald-500',
236
+ tick: 'bg-emerald-400',
237
+ text: 'text-emerald-700',
238
+ textActive: 'text-emerald-900',
239
+ textValue: 'text-emerald-900',
240
+ },
241
+ // Для toggle
242
+ toggle: {
243
+ checked: 'bg-emerald-600',
244
+ unchecked: 'bg-slate-200',
245
+ ring: 'focus:ring-emerald-500/10',
246
+ },
247
+ },
248
+ warning: {
249
+ bg: 'bg-amber-50',
250
+ text: 'text-amber-800',
251
+ border: 'border-amber-200',
252
+ icon: ExclamationTriangleIcon,
253
+ iconColor: 'text-amber-500',
254
+ // Для Checkbox
255
+ checkbox: {
256
+ unchecked: "border-slate-300 bg-white hover:border-amber-400",
257
+ checked: "border-amber-600 bg-amber-600 hover:bg-amber-500",
258
+ ring: "focus:ring-amber-500/10",
259
+ },
260
+ // Для Radio
261
+ radio: {
262
+ unchecked: "border-slate-300 bg-white hover:border-amber-400",
263
+ checked: "border-amber-600 bg-amber-50 hover:border-amber-500",
264
+ ring: "focus:ring-amber-500/10",
265
+ dot: "bg-amber-600",
266
+ },
267
+ // Для текста
268
+ text: 'text-amber-700',
269
+ // Для тегов
270
+ tag: 'bg-yellow-100 text-yellow-800 border-yellow-200',
271
+ // Для прогресс-бара
272
+ progress: 'bg-amber-500',
273
+ // Для divider
274
+ divider: 'border-amber-200',
275
+ // Для tooltip
276
+ tooltip: 'bg-amber-600 text-white',
277
+ // Для лоадера
278
+ loader: {
279
+ border: 'border-amber-300',
280
+ borderTop: 'border-t-amber-600',
281
+ text: 'text-amber-700',
282
+ },
283
+ // Для слайдера
284
+ slider: {
285
+ track: 'bg-amber-200',
286
+ thumb: 'bg-amber-600',
287
+ thumbHover: 'bg-amber-500',
288
+ tick: 'bg-amber-400',
289
+ text: 'text-amber-700',
290
+ textActive: 'text-amber-900',
291
+ textValue: 'text-amber-900',
292
+ },
293
+ // Для toggle
294
+ toggle: {
295
+ checked: 'bg-amber-600',
296
+ unchecked: 'bg-slate-200',
297
+ ring: 'focus:ring-amber-500/10',
298
+ },
299
+ },
300
+ danger: {
301
+ bg: 'bg-rose-50',
302
+ text: 'text-rose-800',
303
+ border: 'border-rose-200',
304
+ icon: XCircleIcon,
305
+ iconColor: 'text-rose-500',
306
+ // Для Checkbox
307
+ checkbox: {
308
+ unchecked: "border-slate-300 bg-white hover:border-rose-400",
309
+ checked: "border-rose-600 bg-rose-600 hover:bg-rose-500",
310
+ ring: "focus:ring-rose-500/10",
311
+ },
312
+ // Для Radio
313
+ radio: {
314
+ unchecked: "border-slate-300 bg-white hover:border-rose-400",
315
+ checked: "border-rose-600 bg-rose-50 hover:border-rose-500",
316
+ ring: "focus:ring-rose-500/10",
317
+ dot: "bg-rose-600",
318
+ },
319
+ // Для текста
320
+ text: 'text-rose-700',
321
+ // Для тегов
322
+ tag: 'bg-red-100 text-red-800 border-red-200',
323
+ // Для прогресс-бара
324
+ progress: 'bg-rose-500',
325
+ // Для divider
326
+ divider: 'border-rose-200',
327
+ // Для tooltip
328
+ tooltip: 'bg-rose-600 text-white',
329
+ // Для лоадера
330
+ loader: {
331
+ border: 'border-rose-300',
332
+ borderTop: 'border-t-rose-600',
333
+ text: 'text-rose-700',
334
+ },
335
+ // Для слайдера
336
+ slider: {
337
+ track: 'bg-rose-200',
338
+ thumb: 'bg-rose-600',
339
+ thumbHover: 'bg-rose-500',
340
+ tick: 'bg-rose-400',
341
+ text: 'text-rose-700',
342
+ textActive: 'text-rose-900',
343
+ textValue: 'text-rose-900',
344
+ },
345
+ // Для toggle
346
+ toggle: {
347
+ checked: 'bg-rose-600',
348
+ unchecked: 'bg-slate-200',
349
+ ring: 'focus:ring-rose-500/10',
350
+ },
351
+ },
352
+ // Специальные варианты для текста
353
+ muted: {
354
+ text: 'text-slate-500',
355
+ },
356
+ // Специальные варианты для divider
357
+ light: {
358
+ divider: 'border-slate-100',
359
+ },
360
+ dark: {
361
+ divider: 'border-slate-300',
362
+ // Для tooltip
363
+ tooltip: 'bg-slate-900 text-white',
364
+ },
365
+ // Специальные варианты для tooltip
366
+ tooltipLight: {
367
+ tooltip: 'bg-white text-slate-900 border border-slate-200 shadow-lg',
368
+ },
369
+ };
370
+
371
+ /**
372
+ * Возвращает классы для варианта
373
+ * @param {string} variant - info | success | warning | danger
374
+ * @returns {string} Tailwind CSS классы
375
+ */
376
+ export function useVariantClasses(variant) {
377
+ const config = VARIANT_CONFIGS[variant] || VARIANT_CONFIGS.info;
378
+ return `${config.bg} ${config.text} ${config.border}`;
379
+ }
380
+
381
+ /**
382
+ * Возвращает иконку для варианта
383
+ * @param {string} variant - info | success | warning | danger
384
+ * @returns {Component} Heroicon компонент
385
+ */
386
+ export function useVariantIcon(variant) {
387
+ const config = VARIANT_CONFIGS[variant] || VARIANT_CONFIGS.info;
388
+ return config.icon;
389
+ }
390
+
391
+ /**
392
+ * Возвращает полную конфигурацию варианта
393
+ * @param {string} variant - info | success | warning | danger
394
+ * @returns {Object} Конфигурация
395
+ */
396
+ export function useVariantConfig(variant) {
397
+ return VARIANT_CONFIGS[variant] || VARIANT_CONFIGS.info;
398
+ }
399
+
400
+ /**
401
+ * Возвращает классы для checkbox
402
+ * @param {string} color - slate | primary | success | danger | warning | info
403
+ * @returns {Object} { unchecked, checked, ring }
404
+ */
405
+ export function useVariantCheckbox(color) {
406
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.primary;
407
+ return config.checkbox || VARIANT_CONFIGS.primary.checkbox;
408
+ }
409
+
410
+ /**
411
+ * Возвращает классы для radio
412
+ * @param {string} color - slate | primary | success | danger | warning | info
413
+ * @returns {Object} { unchecked, checked, ring, dot }
414
+ */
415
+ export function useVariantRadio(color) {
416
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.primary;
417
+ return config.radio || VARIANT_CONFIGS.primary.radio;
418
+ }
419
+
420
+ /**
421
+ * Возвращает класс для текста
422
+ * @param {string} color - default | muted | primary | success | warning | danger
423
+ * @returns {string} Tailwind CSS класс
424
+ */
425
+ export function useVariantText(color) {
426
+ // Для default используем text-slate-700 вместо text-slate-800
427
+ if (color === 'default') {
428
+ return 'text-slate-700';
429
+ }
430
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.default;
431
+ return config.text || 'text-slate-700';
432
+ }
433
+
434
+ /**
435
+ * Возвращает классы для тега
436
+ * @param {string} color - default | primary | success | warning | danger | info
437
+ * @returns {string} Tailwind CSS классы
438
+ */
439
+ export function useVariantTag(color) {
440
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.default;
441
+ return config.tag || VARIANT_CONFIGS.default.tag;
442
+ }
443
+
444
+ /**
445
+ * Возвращает класс для прогресс-бара
446
+ * @param {string} color - default | success | warning | danger | info
447
+ * @returns {string} Tailwind CSS класс
448
+ */
449
+ export function useVariantProgress(color) {
450
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.default;
451
+ return config.progress || VARIANT_CONFIGS.default.progress;
452
+ }
453
+
454
+ /**
455
+ * Возвращает конфигурацию для лоадера
456
+ * @param {string} color - default | primary | success | warning | danger | info | slate
457
+ * @returns {Object} { border, borderTop, text }
458
+ */
459
+ export function useVariantLoader(color) {
460
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.default;
461
+ return config.loader || VARIANT_CONFIGS.default.loader;
462
+ }
463
+
464
+ /**
465
+ * Предопределенные классы для всех комбинаций толщины и цвета divider
466
+ */
467
+ const DIVIDER_BORDER_CLASSES = {
468
+ horizontal: {
469
+ thin: {
470
+ light: "border-t border-slate-100",
471
+ default: "border-t border-slate-200",
472
+ dark: "border-t border-slate-300",
473
+ },
474
+ default: {
475
+ light: "border-t border-slate-100",
476
+ default: "border-t border-slate-200",
477
+ dark: "border-t border-slate-300",
478
+ },
479
+ thick: {
480
+ light: "border-t-2 border-slate-100",
481
+ default: "border-t-2 border-slate-200",
482
+ dark: "border-t-2 border-slate-300",
483
+ },
484
+ },
485
+ vertical: {
486
+ thin: {
487
+ light: "border-l border-slate-100",
488
+ default: "border-l border-slate-200",
489
+ dark: "border-l border-slate-300",
490
+ },
491
+ default: {
492
+ light: "border-l border-slate-100",
493
+ default: "border-l border-slate-200",
494
+ dark: "border-l border-slate-300",
495
+ },
496
+ thick: {
497
+ light: "border-l-2 border-slate-100",
498
+ default: "border-l-2 border-slate-200",
499
+ dark: "border-l-2 border-slate-300",
500
+ },
501
+ },
502
+ };
503
+
504
+ /**
505
+ * Возвращает классы для divider с учетом ориентации, толщины и цвета
506
+ * @param {string} orientation - horizontal | vertical
507
+ * @param {string} thickness - thin | default | thick
508
+ * @param {string} color - light | default | dark
509
+ * @returns {string} Tailwind CSS классы
510
+ */
511
+ export function useVariantDividerBorder(orientation, thickness, color) {
512
+ const orientationKey = orientation === "vertical" ? "vertical" : "horizontal";
513
+ return DIVIDER_BORDER_CLASSES[orientationKey]?.[thickness]?.[color]
514
+ || DIVIDER_BORDER_CLASSES[orientationKey]?.default?.default
515
+ || "border-t border-slate-200";
516
+ }
517
+
518
+ /**
519
+ * Возвращает цвет для divider (только цвет, без border-)
520
+ * @param {string} color - light | default | dark
521
+ * @returns {string} Цвет для использования в border-{direction}-{color}
522
+ * @deprecated Используйте useVariantDividerBorder вместо этой функции
523
+ */
524
+ export function useVariantDivider(color) {
525
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.default;
526
+ const dividerClass = config.divider || VARIANT_CONFIGS.default.divider;
527
+ // Извлекаем цвет из класса (например, "border-slate-200" -> "slate-200")
528
+ const match = dividerClass.match(/border-(.+)/);
529
+ return match ? match[1] : 'slate-200';
530
+ }
531
+
532
+ /**
533
+ * Возвращает классы для tooltip
534
+ * @param {string} color - dark | light | primary | success | danger | warning | info
535
+ * @returns {string} Tailwind CSS классы
536
+ */
537
+ export function useVariantTooltip(color) {
538
+ if (color === 'light') {
539
+ return VARIANT_CONFIGS.tooltipLight?.tooltip || 'bg-white text-slate-900 border border-slate-200 shadow-lg';
540
+ }
541
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.dark;
542
+ return config.tooltip || VARIANT_CONFIGS.dark.tooltip;
543
+ }
544
+
545
+ /**
546
+ * Возвращает классы для позиционирования tooltip
547
+ * @param {string} position - top | bottom | left | right
548
+ * @returns {string} Tailwind CSS классы для позиционирования
549
+ */
550
+ export function useTooltipPosition(position = 'top') {
551
+ const positionClasses = {
552
+ top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',
553
+ bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',
554
+ left: 'right-full top-1/2 -translate-y-1/2 mr-2',
555
+ right: 'left-full top-1/2 -translate-y-1/2 ml-2',
556
+ };
557
+
558
+ return positionClasses[position] || positionClasses.top;
559
+ }
560
+
561
+ /**
562
+ * Возвращает классы для стрелки tooltip
563
+ * @param {string} position - top | bottom | left | right
564
+ * @param {string} color - dark | light | primary | success | danger | warning | info
565
+ * @returns {string} Tailwind CSS классы
566
+ */
567
+ export function useTooltipArrow(position, color) {
568
+ const baseClasses = 'absolute w-0 h-0 border-4';
569
+
570
+ // Все комбинации позиций и цветов
571
+ const arrowClasses = {
572
+ top: {
573
+ dark: 'top-full left-1/2 -translate-x-1/2 border-t-slate-900 border-l-transparent border-r-transparent border-b-transparent',
574
+ light: 'top-full left-1/2 -translate-x-1/2 border-t-white border-l-transparent border-r-transparent border-b-transparent',
575
+ primary: 'top-full left-1/2 -translate-x-1/2 border-t-slate-900 border-l-transparent border-r-transparent border-b-transparent',
576
+ info: 'top-full left-1/2 -translate-x-1/2 border-t-blue-600 border-l-transparent border-r-transparent border-b-transparent',
577
+ success: 'top-full left-1/2 -translate-x-1/2 border-t-emerald-600 border-l-transparent border-r-transparent border-b-transparent',
578
+ warning: 'top-full left-1/2 -translate-x-1/2 border-t-amber-600 border-l-transparent border-r-transparent border-b-transparent',
579
+ danger: 'top-full left-1/2 -translate-x-1/2 border-t-rose-600 border-l-transparent border-r-transparent border-b-transparent',
580
+ },
581
+ bottom: {
582
+ dark: 'bottom-full left-1/2 -translate-x-1/2 border-b-slate-900 border-l-transparent border-r-transparent border-t-transparent',
583
+ light: 'bottom-full left-1/2 -translate-x-1/2 border-b-white border-l-transparent border-r-transparent border-t-transparent',
584
+ primary: 'bottom-full left-1/2 -translate-x-1/2 border-b-slate-900 border-l-transparent border-r-transparent border-t-transparent',
585
+ info: 'bottom-full left-1/2 -translate-x-1/2 border-b-blue-600 border-l-transparent border-r-transparent border-t-transparent',
586
+ success: 'bottom-full left-1/2 -translate-x-1/2 border-b-emerald-600 border-l-transparent border-r-transparent border-t-transparent',
587
+ warning: 'bottom-full left-1/2 -translate-x-1/2 border-b-amber-600 border-l-transparent border-r-transparent border-t-transparent',
588
+ danger: 'bottom-full left-1/2 -translate-x-1/2 border-b-rose-600 border-l-transparent border-r-transparent border-t-transparent',
589
+ },
590
+ left: {
591
+ dark: 'left-full top-1/2 -translate-y-1/2 border-l-slate-900 border-t-transparent border-b-transparent border-r-transparent',
592
+ light: 'left-full top-1/2 -translate-y-1/2 border-l-white border-t-transparent border-b-transparent border-r-transparent',
593
+ primary: 'left-full top-1/2 -translate-y-1/2 border-l-slate-900 border-t-transparent border-b-transparent border-r-transparent',
594
+ info: 'left-full top-1/2 -translate-y-1/2 border-l-blue-600 border-t-transparent border-b-transparent border-r-transparent',
595
+ success: 'left-full top-1/2 -translate-y-1/2 border-l-emerald-600 border-t-transparent border-b-transparent border-r-transparent',
596
+ warning: 'left-full top-1/2 -translate-y-1/2 border-l-amber-600 border-t-transparent border-b-transparent border-r-transparent',
597
+ danger: 'left-full top-1/2 -translate-y-1/2 border-l-rose-600 border-t-transparent border-b-transparent border-r-transparent',
598
+ },
599
+ right: {
600
+ dark: 'right-full top-1/2 -translate-y-1/2 border-r-slate-900 border-t-transparent border-b-transparent border-l-transparent',
601
+ light: 'right-full top-1/2 -translate-y-1/2 border-r-white border-t-transparent border-b-transparent border-l-transparent',
602
+ primary: 'right-full top-1/2 -translate-y-1/2 border-r-slate-900 border-t-transparent border-b-transparent border-l-transparent',
603
+ info: 'right-full top-1/2 -translate-y-1/2 border-r-blue-600 border-t-transparent border-b-transparent border-l-transparent',
604
+ success: 'right-full top-1/2 -translate-y-1/2 border-r-emerald-600 border-t-transparent border-b-transparent border-l-transparent',
605
+ warning: 'right-full top-1/2 -translate-y-1/2 border-r-amber-600 border-t-transparent border-b-transparent border-l-transparent',
606
+ danger: 'right-full top-1/2 -translate-y-1/2 border-r-rose-600 border-t-transparent border-b-transparent border-l-transparent',
607
+ },
608
+ };
609
+
610
+ const colorKey = color || 'dark';
611
+ const positionKey = position || 'top';
612
+
613
+ return `${baseClasses} ${arrowClasses[positionKey]?.[colorKey] || arrowClasses.top.dark}`;
614
+ }
615
+
616
+ /**
617
+ * Возвращает конфигурацию для слайдера
618
+ * @param {string} variant - slate | primary | success | danger | warning | info | default
619
+ * @returns {Object} { track, thumb, thumbHover, tick, text, textActive, textValue }
620
+ */
621
+ export function useVariantSlider(variant) {
622
+ const config = VARIANT_CONFIGS[variant] || VARIANT_CONFIGS.primary;
623
+ return config.slider || VARIANT_CONFIGS.primary.slider;
624
+ }
625
+
626
+ /**
627
+ * Возвращает классы для toggle
628
+ * @param {string} color - slate | primary | success | danger | warning | info
629
+ * @param {boolean} checked - состояние toggle
630
+ * @returns {Object} { checked, unchecked, ring }
631
+ */
632
+ export function useVariantToggle(color, checked = false) {
633
+ const config = VARIANT_CONFIGS[color] || VARIANT_CONFIGS.slate;
634
+ const toggleConfig = config.toggle || VARIANT_CONFIGS.slate.toggle;
635
+
636
+ return {
637
+ checked: toggleConfig.checked,
638
+ unchecked: toggleConfig.unchecked,
639
+ ring: toggleConfig.ring,
640
+ current: checked ? toggleConfig.checked : toggleConfig.unchecked,
641
+ };
642
+ }
643
+
644
+ /**
645
+ * Возвращает классы для badge
646
+ * @param {string} variant - slate | success | warning | danger | info
647
+ * @returns {string} Tailwind CSS классы
648
+ */
649
+ export function useVariantBadge(variant) {
650
+ const badgeClasses = {
651
+ slate: "bg-slate-50 text-slate-700 border-slate-100",
652
+ success: "bg-emerald-50 text-emerald-700 border-emerald-100",
653
+ warning: "bg-amber-50 text-amber-700 border-amber-100",
654
+ danger: "bg-rose-50 text-rose-700 border-rose-100",
655
+ info: "bg-blue-50 text-blue-700 border-blue-100",
656
+ };
657
+
658
+ return badgeClasses[variant] || badgeClasses.slate;
659
+ }
660
+
661
+ /**
662
+ * Возвращает классы для button
663
+ * @param {string} variant - primary | secondary | ghost | outline | success | warning | danger | info | link | soft
664
+ * @returns {string} Tailwind CSS классы
665
+ */
666
+ export function useVariantButton(variant) {
667
+ const buttonClasses = {
668
+ // Основные варианты
669
+ primary: "bg-slate-800 text-white hover:bg-slate-700",
670
+ secondary: "bg-slate-200 text-slate-700 hover:bg-slate-300",
671
+ ghost: "text-slate-700 hover:bg-slate-100 bg-transparent",
672
+ outline: "border border-slate-200 text-slate-700 hover:border-slate-300 bg-white",
673
+ // Семантические варианты
674
+ success: "bg-emerald-600 text-white hover:bg-emerald-500",
675
+ warning: "bg-amber-600 text-white hover:bg-amber-500",
676
+ danger: "bg-rose-600 text-white hover:bg-rose-500",
677
+ info: "bg-blue-600 text-white hover:bg-blue-500",
678
+ // Дополнительные варианты
679
+ link: "text-blue-600 hover:text-blue-700 underline-offset-2 hover:underline bg-transparent",
680
+ soft: "bg-slate-50 text-slate-700 hover:bg-slate-100",
681
+ };
682
+
683
+ return buttonClasses[variant] || buttonClasses.primary;
684
+ }
685
+
686
+ /**
687
+ * Возвращает классы для dropdown item
688
+ * @param {string} variant - default | danger | success
689
+ * @returns {string} Tailwind CSS классы
690
+ */
691
+ export function useVariantDropdownItem(variant) {
692
+ const dropdownItemClasses = {
693
+ default: "text-slate-700 hover:bg-slate-50",
694
+ danger: "text-rose-600 hover:bg-rose-50",
695
+ success: "text-emerald-600 hover:bg-emerald-50",
696
+ };
697
+
698
+ return dropdownItemClasses[variant] || dropdownItemClasses.default;
699
+ }
700
+