@indielayer/ui 1.3.0 → 1.5.0

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 (479) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -4
  3. package/docs/App.vue +25 -0
  4. package/docs/assets/css/hljs.css +302 -0
  5. package/docs/assets/css/tailwind.css +46 -0
  6. package/docs/assets/images/error.svg +1 -0
  7. package/docs/assets/images/logo.png +0 -0
  8. package/docs/assets/images/logo_mini.svg +10 -0
  9. package/docs/assets/images/logo_white.png +0 -0
  10. package/docs/assets/images/logo_word.svg +12 -0
  11. package/docs/assets/images/logo_word_dark.svg +12 -0
  12. package/docs/assets/images/photo1.jpeg +0 -0
  13. package/docs/assets/images/photo2.jpeg +0 -0
  14. package/docs/components/Cookies.vue +42 -0
  15. package/docs/components/common/CodePreview.vue +80 -0
  16. package/docs/components/common/CodeSnippet.vue +47 -0
  17. package/docs/components/common/CopyButton.vue +50 -0
  18. package/docs/components/common/DocumentPage.vue +285 -0
  19. package/docs/components/common/Indielayer-theme.json +702 -0
  20. package/docs/components/common/MultiSnippet.vue +26 -0
  21. package/docs/components/menu/DocsMenu.vue +96 -0
  22. package/docs/components/toolbar/PreToolbar.vue +16 -0
  23. package/docs/components/toolbar/Toolbar.vue +76 -0
  24. package/docs/components/toolbar/ToolbarColorToggle.vue +49 -0
  25. package/docs/icons.ts +61 -0
  26. package/docs/layouts/default.vue +33 -0
  27. package/docs/layouts/simple.vue +3 -0
  28. package/docs/main.ts +33 -0
  29. package/docs/pages/colors.vue +120 -0
  30. package/docs/pages/component/accordion/index.vue +29 -0
  31. package/docs/pages/component/accordion/usage.vue +30 -0
  32. package/docs/pages/component/alert/index.vue +29 -0
  33. package/docs/pages/component/alert/usage.vue +18 -0
  34. package/docs/pages/component/avatar/index.vue +43 -0
  35. package/docs/pages/component/avatar/size.vue +9 -0
  36. package/docs/pages/component/avatar/usage.vue +9 -0
  37. package/docs/pages/component/avatar/variants.vue +8 -0
  38. package/docs/pages/component/badge/index.vue +29 -0
  39. package/docs/pages/component/badge/usage.vue +50 -0
  40. package/docs/pages/component/breadcrumbs/index.vue +29 -0
  41. package/docs/pages/component/breadcrumbs/usage.vue +19 -0
  42. package/docs/pages/component/button/button-group.vue +22 -0
  43. package/docs/pages/component/button/icons.vue +9 -0
  44. package/docs/pages/component/button/index.vue +64 -0
  45. package/docs/pages/component/button/size.vue +9 -0
  46. package/docs/pages/component/button/states.vue +6 -0
  47. package/docs/pages/component/button/usage.vue +12 -0
  48. package/docs/pages/component/button/variants.vue +7 -0
  49. package/docs/pages/component/card/index.vue +29 -0
  50. package/docs/pages/component/card/usage.vue +6 -0
  51. package/docs/pages/component/carousel/index.vue +29 -0
  52. package/docs/pages/component/carousel/usage.vue +10 -0
  53. package/docs/pages/component/checkbox/index.vue +50 -0
  54. package/docs/pages/component/checkbox/size.vue +9 -0
  55. package/docs/pages/component/checkbox/states.vue +9 -0
  56. package/docs/pages/component/checkbox/usage.vue +15 -0
  57. package/docs/pages/component/checkbox/variants.vue +8 -0
  58. package/docs/pages/component/container/index.vue +29 -0
  59. package/docs/pages/component/container/usage.vue +3 -0
  60. package/docs/pages/component/divider/index.vue +43 -0
  61. package/docs/pages/component/divider/label.vue +12 -0
  62. package/docs/pages/component/divider/usage.vue +7 -0
  63. package/docs/pages/component/divider/vertical.vue +7 -0
  64. package/docs/pages/component/drawer/index.vue +29 -0
  65. package/docs/pages/component/drawer/usage.vue +56 -0
  66. package/docs/pages/component/form/index.vue +29 -0
  67. package/docs/pages/component/form/usage.vue +96 -0
  68. package/docs/pages/component/formGroup/index.vue +29 -0
  69. package/docs/pages/component/formGroup/usage.vue +47 -0
  70. package/docs/pages/component/icon/index.vue +36 -0
  71. package/docs/pages/component/icon/usage.vue +6 -0
  72. package/docs/pages/component/icon/variants.vue +14 -0
  73. package/docs/pages/component/image/index.vue +29 -0
  74. package/docs/pages/component/image/usage.vue +8 -0
  75. package/docs/pages/component/input/index.vue +50 -0
  76. package/docs/pages/component/input/size.vue +13 -0
  77. package/docs/pages/component/input/states.vue +12 -0
  78. package/docs/pages/component/input/usage.vue +14 -0
  79. package/docs/pages/component/input/variants.vue +18 -0
  80. package/docs/pages/component/link/index.vue +29 -0
  81. package/docs/pages/component/link/usage.vue +12 -0
  82. package/docs/pages/component/loader/index.vue +29 -0
  83. package/docs/pages/component/loader/usage.vue +7 -0
  84. package/docs/pages/component/menu/index.vue +29 -0
  85. package/docs/pages/component/menu/usage.vue +69 -0
  86. package/docs/pages/component/modal/composed.vue +71 -0
  87. package/docs/pages/component/modal/index.vue +36 -0
  88. package/docs/pages/component/modal/usage.vue +66 -0
  89. package/docs/pages/component/notifications/index.vue +29 -0
  90. package/docs/pages/component/notifications/usage.vue +56 -0
  91. package/docs/pages/component/pagination/index.vue +29 -0
  92. package/docs/pages/component/pagination/usage.vue +17 -0
  93. package/docs/pages/component/popover/index.vue +29 -0
  94. package/docs/pages/component/popover/usage.vue +21 -0
  95. package/docs/pages/component/progress/index.vue +36 -0
  96. package/docs/pages/component/progress/usage.vue +7 -0
  97. package/docs/pages/component/progress/variants.vue +18 -0
  98. package/docs/pages/component/radio/index.vue +50 -0
  99. package/docs/pages/component/radio/size.vue +15 -0
  100. package/docs/pages/component/radio/states.vue +13 -0
  101. package/docs/pages/component/radio/usage.vue +14 -0
  102. package/docs/pages/component/radio/variants.vue +39 -0
  103. package/docs/pages/component/scroll/horizontal.vue +14 -0
  104. package/docs/pages/component/scroll/index.vue +36 -0
  105. package/docs/pages/component/scroll/usage.vue +5 -0
  106. package/docs/pages/component/select/index.vue +43 -0
  107. package/docs/pages/component/select/states.vue +22 -0
  108. package/docs/pages/component/select/usage.vue +46 -0
  109. package/docs/pages/component/select/variants.vue +23 -0
  110. package/docs/pages/component/skeleton/index.vue +29 -0
  111. package/docs/pages/component/skeleton/usage.vue +10 -0
  112. package/docs/pages/component/slider/index.vue +29 -0
  113. package/docs/pages/component/slider/usage.vue +15 -0
  114. package/docs/pages/component/spacer/index.vue +29 -0
  115. package/docs/pages/component/spacer/usage.vue +8 -0
  116. package/docs/pages/component/spinner/index.vue +36 -0
  117. package/docs/pages/component/spinner/usage.vue +3 -0
  118. package/docs/pages/component/spinner/variants.vue +9 -0
  119. package/docs/pages/component/stepper/index.vue +29 -0
  120. package/docs/pages/component/stepper/usage.vue +21 -0
  121. package/docs/pages/component/table/index.vue +36 -0
  122. package/docs/pages/component/table/states.vue +28 -0
  123. package/docs/pages/component/table/usage.vue +107 -0
  124. package/docs/pages/component/tabs/index.vue +29 -0
  125. package/docs/pages/component/tabs/usage.vue +142 -0
  126. package/docs/pages/component/tag/index.vue +29 -0
  127. package/docs/pages/component/tag/usage.vue +27 -0
  128. package/docs/pages/component/textarea/index.vue +43 -0
  129. package/docs/pages/component/textarea/states.vue +13 -0
  130. package/docs/pages/component/textarea/usage.vue +19 -0
  131. package/docs/pages/component/textarea/variants.vue +15 -0
  132. package/docs/pages/component/toggle/index.vue +43 -0
  133. package/docs/pages/component/toggle/states.vue +13 -0
  134. package/docs/pages/component/toggle/usage.vue +12 -0
  135. package/docs/pages/component/toggle/variants.vue +15 -0
  136. package/docs/pages/component/tooltip/index.vue +29 -0
  137. package/docs/pages/component/tooltip/usage.vue +12 -0
  138. package/docs/pages/error.vue +6 -0
  139. package/docs/pages/icons.vue +101 -0
  140. package/docs/pages/index.vue +153 -0
  141. package/docs/pages/play.vue +7 -0
  142. package/docs/pages/typography.vue +91 -0
  143. package/docs/router/index.ts +77 -0
  144. package/lib/common/icons.d.ts +4 -1
  145. package/lib/common/icons.js +14 -11
  146. package/lib/components/accordion/Accordion.vue.d.ts +63 -0
  147. package/lib/components/accordion/Accordion.vue.js +40 -0
  148. package/lib/components/accordion/Accordion.vue2.js +4 -0
  149. package/lib/components/{collapse/Collapse.vue.d.ts → accordion/AccordionItem.vue.d.ts} +33 -18
  150. package/lib/components/accordion/AccordionItem.vue.js +140 -0
  151. package/lib/components/accordion/AccordionItem.vue2.js +4 -0
  152. package/lib/components/accordion/index.d.ts +4 -0
  153. package/lib/components/accordion/theme/Accordion.base.theme.d.ts +3 -0
  154. package/lib/components/accordion/theme/Accordion.base.theme.js +8 -0
  155. package/lib/components/accordion/theme/Accordion.carbon.theme.d.ts +3 -0
  156. package/lib/components/accordion/theme/Accordion.carbon.theme.js +5 -0
  157. package/lib/components/accordion/theme/AccordionItem.base.theme.d.ts +3 -0
  158. package/lib/components/accordion/theme/AccordionItem.base.theme.js +16 -0
  159. package/lib/components/accordion/theme/AccordionItem.carbon.theme.d.ts +3 -0
  160. package/lib/components/accordion/theme/AccordionItem.carbon.theme.js +5 -0
  161. package/lib/components/alert/theme/Alert.carbon.theme.js +39 -3
  162. package/lib/components/avatar/Avatar.vue.d.ts +2 -2
  163. package/lib/components/badge/Badge.vue.d.ts +2 -2
  164. package/lib/components/badge/Badge.vue.js +7 -7
  165. package/lib/components/breadcrumbs/theme/Breadcrumbs.base.theme.js +1 -1
  166. package/lib/components/button/Button.vue.d.ts +3 -3
  167. package/lib/components/button/ButtonGroup.vue.d.ts +3 -3
  168. package/lib/components/button/theme/Button.base.theme.js +7 -7
  169. package/lib/components/button/theme/Button.carbon.theme.js +1 -1
  170. package/lib/components/card/theme/Card.base.theme.js +1 -1
  171. package/lib/components/carousel/CarouselSlide.vue.d.ts +19 -8
  172. package/lib/components/carousel/CarouselSlide.vue.js +2 -2
  173. package/lib/components/carousel/CarouselSlide.vue2.js +25 -18
  174. package/lib/components/checkbox/Checkbox.vue.d.ts +25 -10
  175. package/lib/components/checkbox/Checkbox.vue2.js +106 -72
  176. package/lib/components/checkbox/theme/Checkbox.base.theme.js +38 -31
  177. package/lib/components/checkbox/theme/Checkbox.carbon.theme.js +38 -31
  178. package/lib/components/container/Container.vue.d.ts +13 -0
  179. package/lib/components/container/Container.vue.js +15 -11
  180. package/lib/components/container/theme/Container.base.theme.js +7 -4
  181. package/lib/components/divider/Divider.vue.js +14 -14
  182. package/lib/components/divider/theme/Divider.base.theme.js +2 -2
  183. package/lib/components/drawer/Drawer.vue.d.ts +4 -4
  184. package/lib/components/drawer/Drawer.vue.js +2 -2
  185. package/lib/components/drawer/theme/Drawer.base.theme.js +1 -1
  186. package/lib/components/form/Form.vue.d.ts +25 -2
  187. package/lib/components/form/Form.vue.js +67 -36
  188. package/lib/components/form/theme/Form.base.theme.js +7 -3
  189. package/lib/components/form/theme/Form.carbon.theme.js +10 -3
  190. package/lib/components/formGroup/FormGroup.vue.d.ts +135 -0
  191. package/lib/components/formGroup/FormGroup.vue.js +83 -0
  192. package/lib/components/formGroup/FormGroup.vue2.js +4 -0
  193. package/lib/components/formGroup/__tests__/FormGroup.spec.d.ts +1 -0
  194. package/lib/components/formGroup/index.d.ts +2 -0
  195. package/lib/components/formGroup/theme/FormGroup.base.theme.d.ts +3 -0
  196. package/lib/components/formGroup/theme/FormGroup.base.theme.js +11 -0
  197. package/lib/components/formGroup/theme/FormGroup.carbon.theme.d.ts +3 -0
  198. package/lib/components/formGroup/theme/FormGroup.carbon.theme.js +11 -0
  199. package/lib/components/icon/theme/Icon.base.theme.js +2 -2
  200. package/lib/components/icon/theme/Icon.carbon.theme.js +4 -4
  201. package/lib/components/index.d.ts +3 -1
  202. package/lib/components/index.js +102 -95
  203. package/lib/components/input/Input.vue.d.ts +15 -9
  204. package/lib/components/input/Input.vue.js +43 -42
  205. package/lib/components/input/theme/Input.base.theme.js +10 -10
  206. package/lib/components/input/theme/Input.carbon.theme.js +10 -10
  207. package/lib/components/inputFooter/theme/InputFooter.base.theme.js +3 -3
  208. package/lib/components/inputFooter/theme/InputFooter.carbon.theme.js +3 -3
  209. package/lib/components/label/Label.vue.d.ts +6 -3
  210. package/lib/components/label/Label.vue.js +26 -20
  211. package/lib/components/label/theme/Label.base.theme.js +1 -1
  212. package/lib/components/label/theme/Label.carbon.theme.js +8 -7
  213. package/lib/components/link/Link.vue.d.ts +1 -1
  214. package/lib/components/link/Link.vue.js +1 -1
  215. package/lib/components/link/Link.vue2.js +4 -4
  216. package/lib/components/link/theme/Link.base.theme.js +4 -4
  217. package/lib/components/link/theme/Link.carbon.theme.js +23 -3
  218. package/lib/components/loader/theme/Loader.base.theme.js +1 -1
  219. package/lib/components/loader/theme/Loader.carbon.theme.js +2 -2
  220. package/lib/components/menu/Menu.vue.d.ts +6 -5
  221. package/lib/components/menu/Menu.vue.js +44 -41
  222. package/lib/components/menu/MenuItem.vue.d.ts +4 -4
  223. package/lib/components/menu/MenuItem.vue.js +2 -2
  224. package/lib/components/menu/MenuItem.vue2.js +1 -1
  225. package/lib/components/menu/theme/MenuItem.base.theme.js +22 -32
  226. package/lib/components/modal/Modal.vue.d.ts +102 -3
  227. package/lib/components/modal/Modal.vue.js +157 -100
  228. package/lib/components/modal/theme/Modal.base.theme.js +15 -9
  229. package/lib/components/modal/theme/Modal.carbon.theme.js +27 -3
  230. package/lib/components/notifications/Notifications.vue.js +57 -54
  231. package/lib/components/notifications/theme/Notifications.base.theme.js +2 -2
  232. package/lib/components/notifications/theme/Notifications.carbon.theme.js +8 -3
  233. package/lib/components/pagination/Pagination.vue.js +27 -27
  234. package/lib/components/popover/Popover.vue.d.ts +16 -3
  235. package/lib/components/popover/Popover.vue.js +13 -8
  236. package/lib/components/popover/Popover.vue2.js +3 -2
  237. package/lib/components/popover/Popover.vue3.js +2 -3
  238. package/lib/components/popover/theme/PopoverContainer.base.theme.js +4 -4
  239. package/lib/components/popover/theme/PopoverContainer.carbon.theme.js +4 -4
  240. package/lib/components/progress/Progress.vue.js +11 -11
  241. package/lib/components/progress/theme/Progress.base.theme.js +10 -10
  242. package/lib/components/radio/Radio.vue.d.ts +20 -12
  243. package/lib/components/radio/Radio.vue2.js +81 -66
  244. package/lib/components/radio/theme/Radio.base.theme.js +34 -31
  245. package/lib/components/radio/theme/Radio.carbon.theme.js +33 -30
  246. package/lib/components/select/Select.vue.d.ts +29 -10
  247. package/lib/components/select/Select.vue.js +121 -119
  248. package/lib/components/select/theme/Select.base.theme.js +6 -6
  249. package/lib/components/select/theme/Select.carbon.theme.js +11 -11
  250. package/lib/components/skeleton/Skeleton.vue.d.ts +19 -1
  251. package/lib/components/skeleton/Skeleton.vue.js +25 -15
  252. package/lib/components/skeleton/theme/Skeleton.base.theme.js +7 -4
  253. package/lib/components/slider/Slider.vue.d.ts +15 -6
  254. package/lib/components/slider/Slider.vue.js +4 -5
  255. package/lib/components/slider/theme/Slider.carbon.theme.js +8 -8
  256. package/lib/components/spinner/Spinner.vue.d.ts +1 -1
  257. package/lib/components/spinner/Spinner.vue.js +16 -17
  258. package/lib/components/stepper/Stepper.vue.d.ts +137 -0
  259. package/lib/components/stepper/Stepper.vue.js +128 -0
  260. package/lib/components/stepper/Stepper.vue2.js +4 -0
  261. package/lib/components/stepper/__tests__/Stepper.spec.d.ts +1 -0
  262. package/lib/components/stepper/index.d.ts +2 -0
  263. package/lib/components/stepper/theme/Stepper.base.theme.d.ts +3 -0
  264. package/lib/components/stepper/theme/Stepper.base.theme.js +20 -0
  265. package/lib/components/stepper/theme/Stepper.carbon.theme.d.ts +3 -0
  266. package/lib/components/{collapse/theme/Collapse.carbon.theme.js → stepper/theme/Stepper.carbon.theme.js} +1 -1
  267. package/lib/components/tab/Tab.vue.d.ts +11 -5
  268. package/lib/components/tab/Tab.vue.js +72 -56
  269. package/lib/components/tab/TabGroup.vue.d.ts +1 -1
  270. package/lib/components/tab/TabGroup.vue.js +5 -5
  271. package/lib/components/tab/theme/Tab.base.theme.js +2 -1
  272. package/lib/components/tab/theme/Tab.carbon.theme.js +6 -5
  273. package/lib/components/tab/theme/TabGroup.base.theme.js +15 -15
  274. package/lib/components/tab/theme/TabGroup.carbon.theme.js +29 -3
  275. package/lib/components/table/Table.vue.d.ts +115 -9
  276. package/lib/components/table/Table.vue.js +188 -79
  277. package/lib/components/table/TableCell.vue.d.ts +4 -5
  278. package/lib/components/table/TableCell.vue.js +21 -22
  279. package/lib/components/table/TableHead.vue.d.ts +16 -0
  280. package/lib/components/table/TableHead.vue.js +21 -0
  281. package/lib/components/table/TableHead.vue2.js +4 -0
  282. package/lib/components/table/TableHeader.vue.d.ts +4 -0
  283. package/lib/components/table/TableHeader.vue.js +45 -54
  284. package/lib/components/table/TableRow.vue.d.ts +15 -1
  285. package/lib/components/table/TableRow.vue.js +21 -25
  286. package/lib/components/table/index.d.ts +4 -2
  287. package/lib/components/table/theme/Table.base.theme.js +6 -5
  288. package/lib/components/table/theme/Table.carbon.theme.js +11 -3
  289. package/lib/components/table/theme/TableCell.base.theme.js +3 -3
  290. package/lib/components/table/theme/TableCell.carbon.theme.js +9 -3
  291. package/lib/components/table/theme/TableHead.base.theme.d.ts +3 -0
  292. package/lib/components/table/theme/TableHead.base.theme.js +9 -0
  293. package/lib/components/table/theme/TableHead.carbon.theme.d.ts +3 -0
  294. package/lib/components/table/theme/TableHead.carbon.theme.js +9 -0
  295. package/lib/components/table/theme/TableHeader.base.theme.d.ts +3 -0
  296. package/lib/components/table/theme/TableHeader.base.theme.js +12 -0
  297. package/lib/components/table/theme/TableHeader.carbon.theme.d.ts +3 -0
  298. package/lib/components/table/theme/TableHeader.carbon.theme.js +12 -0
  299. package/lib/components/table/theme/TableRow.base.theme.d.ts +3 -0
  300. package/lib/components/table/theme/TableRow.base.theme.js +11 -0
  301. package/lib/components/table/theme/TableRow.carbon.theme.d.ts +3 -0
  302. package/lib/components/table/theme/TableRow.carbon.theme.js +11 -0
  303. package/lib/components/tag/Tag.vue.d.ts +3 -3
  304. package/lib/components/tag/Tag.vue.js +18 -18
  305. package/lib/components/tag/theme/Tag.base.theme.js +14 -13
  306. package/lib/components/tag/theme/Tag.carbon.theme.js +14 -14
  307. package/lib/components/textarea/Textarea.vue.d.ts +18 -8
  308. package/lib/components/textarea/Textarea.vue.js +44 -42
  309. package/lib/components/textarea/theme/Textarea.base.theme.js +6 -6
  310. package/lib/components/textarea/theme/Textarea.carbon.theme.js +6 -6
  311. package/lib/components/toggle/Toggle.vue.d.ts +15 -12
  312. package/lib/components/toggle/Toggle.vue.js +51 -53
  313. package/lib/components/toggle/theme/Toggle.base.theme.js +1 -1
  314. package/lib/components/tooltip/ToggleTip.vue.d.ts +14 -0
  315. package/lib/components/tooltip/ToggleTip.vue.js +29 -0
  316. package/lib/components/tooltip/ToggleTip.vue2.js +4 -0
  317. package/lib/components/tooltip/Tooltip.vue.d.ts +22 -3
  318. package/lib/components/tooltip/Tooltip.vue.js +26 -17
  319. package/lib/components/tooltip/__tests__/ToggleTip.spec.d.ts +1 -0
  320. package/lib/components/tooltip/index.d.ts +2 -0
  321. package/lib/composables/keys.d.ts +5 -1
  322. package/lib/composables/keys.js +8 -6
  323. package/lib/composables/useColors.js +9 -9
  324. package/lib/composables/useFocusTrap.d.ts +6 -0
  325. package/lib/composables/useFocusTrap.js +45 -0
  326. package/lib/composables/useInputtable.d.ts +7 -0
  327. package/lib/composables/useInputtable.js +64 -46
  328. package/lib/index.js +139 -129
  329. package/lib/index.umd.js +7 -3
  330. package/lib/nuxt.mjs +33 -0
  331. package/lib/nuxt.plugin.js +8 -0
  332. package/lib/tailwind.preset.js +40 -0
  333. package/lib/theme.d.ts +8 -2
  334. package/lib/themes/base/components.d.ts +7 -1
  335. package/lib/themes/base/components.js +98 -86
  336. package/lib/themes/base/index.js +3 -6
  337. package/lib/themes/base/styles.css.js +4 -0
  338. package/lib/themes/carbon/components.d.ts +7 -1
  339. package/lib/themes/carbon/components.js +98 -86
  340. package/lib/version.d.ts +1 -1
  341. package/lib/version.js +1 -1
  342. package/package.json +8 -2
  343. package/src/common/icons.ts +4 -1
  344. package/src/components/accordion/Accordion.vue +55 -0
  345. package/src/components/{collapse/Collapse.vue → accordion/AccordionItem.vue} +51 -32
  346. package/src/components/accordion/__tests__/Accordion.spec.ts +11 -0
  347. package/src/components/accordion/index.ts +4 -0
  348. package/src/components/accordion/theme/Accordion.base.theme.ts +9 -0
  349. package/src/components/accordion/theme/Accordion.carbon.theme.ts +7 -0
  350. package/src/components/accordion/theme/AccordionItem.base.theme.ts +38 -0
  351. package/src/components/accordion/theme/AccordionItem.carbon.theme.ts +7 -0
  352. package/src/components/alert/theme/Alert.carbon.theme.ts +54 -2
  353. package/src/components/badge/Badge.vue +1 -1
  354. package/src/components/breadcrumbs/theme/Breadcrumbs.base.theme.ts +1 -1
  355. package/src/components/button/theme/Button.base.theme.ts +2 -2
  356. package/src/components/button/theme/Button.carbon.theme.ts +1 -1
  357. package/src/components/card/theme/Card.base.theme.ts +1 -1
  358. package/src/components/carousel/CarouselSlide.vue +9 -4
  359. package/src/components/checkbox/Checkbox.vue +69 -20
  360. package/src/components/checkbox/theme/Checkbox.base.theme.ts +22 -8
  361. package/src/components/checkbox/theme/Checkbox.carbon.theme.ts +18 -4
  362. package/src/components/container/Container.vue +4 -0
  363. package/src/components/container/theme/Container.base.theme.ts +7 -1
  364. package/src/components/divider/Divider.vue +1 -1
  365. package/src/components/divider/theme/Divider.base.theme.ts +2 -2
  366. package/src/components/drawer/Drawer.vue +2 -2
  367. package/src/components/drawer/theme/Drawer.base.theme.ts +1 -1
  368. package/src/components/form/Form.vue +26 -5
  369. package/src/components/form/theme/Form.base.theme.ts +9 -1
  370. package/src/components/form/theme/Form.carbon.theme.ts +12 -2
  371. package/src/components/formGroup/FormGroup.vue +117 -0
  372. package/src/components/formGroup/__tests__/FormGroup.spec.ts +11 -0
  373. package/src/components/formGroup/index.ts +2 -0
  374. package/src/components/formGroup/theme/FormGroup.base.theme.ts +16 -0
  375. package/src/components/formGroup/theme/FormGroup.carbon.theme.ts +16 -0
  376. package/src/components/icon/theme/Icon.base.theme.ts +3 -3
  377. package/src/components/icon/theme/Icon.carbon.theme.ts +3 -4
  378. package/src/components/index.ts +3 -1
  379. package/src/components/input/Input.vue +5 -4
  380. package/src/components/input/theme/Input.base.theme.ts +5 -5
  381. package/src/components/input/theme/Input.carbon.theme.ts +6 -6
  382. package/src/components/inputFooter/theme/InputFooter.base.theme.ts +3 -3
  383. package/src/components/inputFooter/theme/InputFooter.carbon.theme.ts +3 -3
  384. package/src/components/label/Label.vue +4 -1
  385. package/src/components/label/theme/Label.base.theme.ts +1 -1
  386. package/src/components/label/theme/Label.carbon.theme.ts +9 -4
  387. package/src/components/link/Link.vue +1 -1
  388. package/src/components/link/theme/Link.carbon.theme.ts +23 -2
  389. package/src/components/loader/theme/Loader.base.theme.ts +1 -1
  390. package/src/components/loader/theme/Loader.carbon.theme.ts +2 -2
  391. package/src/components/menu/Menu.vue +11 -8
  392. package/src/components/menu/MenuItem.vue +1 -1
  393. package/src/components/menu/theme/MenuItem.base.theme.ts +32 -36
  394. package/src/components/modal/Modal.vue +117 -52
  395. package/src/components/modal/theme/Modal.base.theme.ts +31 -12
  396. package/src/components/modal/theme/Modal.carbon.theme.ts +55 -2
  397. package/src/components/notifications/Notifications.vue +6 -6
  398. package/src/components/notifications/theme/Notifications.base.theme.ts +2 -2
  399. package/src/components/notifications/theme/Notifications.carbon.theme.ts +12 -2
  400. package/src/components/pagination/Pagination.vue +3 -3
  401. package/src/components/popover/Popover.vue +77 -2
  402. package/src/components/popover/theme/PopoverContainer.base.theme.ts +1 -1
  403. package/src/components/popover/theme/PopoverContainer.carbon.theme.ts +1 -1
  404. package/src/components/progress/Progress.vue +1 -1
  405. package/src/components/progress/theme/Progress.base.theme.ts +2 -2
  406. package/src/components/radio/Radio.vue +39 -15
  407. package/src/components/radio/theme/Radio.base.theme.ts +15 -9
  408. package/src/components/radio/theme/Radio.carbon.theme.ts +14 -8
  409. package/src/components/select/Select.vue +17 -15
  410. package/src/components/select/theme/Select.base.theme.ts +8 -8
  411. package/src/components/select/theme/Select.carbon.theme.ts +9 -9
  412. package/src/components/skeleton/Skeleton.vue +18 -2
  413. package/src/components/skeleton/theme/Skeleton.base.theme.ts +8 -1
  414. package/src/components/slider/Slider.vue +2 -3
  415. package/src/components/slider/theme/Slider.carbon.theme.ts +1 -1
  416. package/src/components/spinner/Spinner.vue +2 -2
  417. package/src/components/stepper/Stepper.vue +153 -0
  418. package/src/components/{collapse/__tests__/Collapse.spec.ts → stepper/__tests__/Stepper.spec.ts} +3 -3
  419. package/src/components/stepper/index.ts +6 -0
  420. package/src/components/stepper/theme/Stepper.base.theme.ts +45 -0
  421. package/src/components/stepper/theme/Stepper.carbon.theme.ts +7 -0
  422. package/src/components/tab/Tab.vue +21 -7
  423. package/src/components/tab/TabGroup.vue +2 -2
  424. package/src/components/tab/theme/Tab.base.theme.ts +2 -0
  425. package/src/components/tab/theme/Tab.carbon.theme.ts +4 -2
  426. package/src/components/tab/theme/TabGroup.base.theme.ts +4 -4
  427. package/src/components/tab/theme/TabGroup.carbon.theme.ts +50 -2
  428. package/src/components/table/Table.vue +125 -27
  429. package/src/components/table/TableCell.vue +5 -6
  430. package/src/components/table/TableHead.vue +25 -0
  431. package/src/components/table/TableHeader.vue +35 -56
  432. package/src/components/table/TableRow.vue +19 -17
  433. package/src/components/table/index.ts +4 -2
  434. package/src/components/table/theme/Table.base.theme.ts +9 -7
  435. package/src/components/table/theme/Table.carbon.theme.ts +18 -2
  436. package/src/components/table/theme/TableCell.base.theme.ts +1 -1
  437. package/src/components/table/theme/TableCell.carbon.theme.ts +24 -2
  438. package/src/components/table/theme/TableHead.base.theme.ts +10 -0
  439. package/src/components/table/theme/TableHead.carbon.theme.ts +10 -0
  440. package/src/components/table/theme/TableHeader.base.theme.ts +28 -0
  441. package/src/components/table/theme/TableHeader.carbon.theme.ts +28 -0
  442. package/src/components/table/theme/TableRow.base.theme.ts +21 -0
  443. package/src/components/table/theme/TableRow.carbon.theme.ts +21 -0
  444. package/src/components/tag/Tag.vue +4 -4
  445. package/src/components/tag/theme/Tag.base.theme.ts +4 -4
  446. package/src/components/tag/theme/Tag.carbon.theme.ts +5 -6
  447. package/src/components/textarea/Textarea.vue +6 -4
  448. package/src/components/textarea/theme/Textarea.base.theme.ts +5 -4
  449. package/src/components/textarea/theme/Textarea.carbon.theme.ts +5 -5
  450. package/src/components/toggle/Toggle.vue +5 -7
  451. package/src/components/toggle/theme/Toggle.base.theme.ts +1 -1
  452. package/src/components/tooltip/ToggleTip.vue +31 -0
  453. package/src/components/tooltip/Tooltip.vue +14 -4
  454. package/src/components/tooltip/__tests__/ToggleTip.spec.ts +11 -0
  455. package/src/components/tooltip/index.ts +3 -0
  456. package/src/composables/keys.ts +5 -1
  457. package/src/composables/useColors.ts +1 -1
  458. package/src/composables/useFocusTrap.ts +106 -0
  459. package/src/composables/useInputtable.ts +32 -3
  460. package/src/theme.ts +14 -2
  461. package/src/themes/base/components.ts +7 -1
  462. package/src/themes/base/index.ts +0 -3
  463. package/src/themes/base/styles.css +4 -0
  464. package/src/themes/carbon/components.ts +7 -1
  465. package/src/version.ts +1 -1
  466. package/volar.d.ts +6 -1
  467. package/lib/components/collapse/Collapse.vue.js +0 -131
  468. package/lib/components/collapse/Collapse.vue2.js +0 -4
  469. package/lib/components/collapse/index.d.ts +0 -2
  470. package/lib/components/collapse/theme/Collapse.base.theme.d.ts +0 -3
  471. package/lib/components/collapse/theme/Collapse.base.theme.js +0 -10
  472. package/lib/components/collapse/theme/Collapse.carbon.theme.d.ts +0 -3
  473. package/lib/components/table/TableHead.d.ts +0 -2
  474. package/lib/components/table/TableHead.js +0 -19
  475. package/src/components/collapse/index.ts +0 -2
  476. package/src/components/collapse/theme/Collapse.base.theme.ts +0 -13
  477. package/src/components/collapse/theme/Collapse.carbon.theme.ts +0 -7
  478. package/src/components/table/TableHead.tsx +0 -14
  479. /package/lib/components/{collapse/__tests__/Collapse.spec.d.ts → accordion/__tests__/Accordion.spec.d.ts} +0 -0
@@ -19,7 +19,7 @@ const theme: TableCellTheme = {
19
19
  else if (props.verticalAlign === 'text-top') c.push('align-text-top')
20
20
  else if (props.verticalAlign === 'top') c.push('align-top')
21
21
 
22
- if (props.truncate && props.fixed) c.push('truncate')
22
+ if (props.truncate) c.push('truncate')
23
23
 
24
24
  return c
25
25
  },
@@ -1,7 +1,29 @@
1
1
  import type { TableCellTheme } from '../TableCell.vue'
2
2
 
3
- import BaseTheme from './TableCell.base.theme'
3
+ const theme: TableCellTheme = {
4
+ classes: {
5
+ wrapper: ({ props }) => {
6
+ const c = ['last:pr-0 px-3']
4
7
 
5
- const theme: TableCellTheme = BaseTheme
8
+ c.push(props.dense ? 'py-2' : 'py-4')
9
+
10
+ if (props.textAlign === 'left') c.push('text-left')
11
+ else if (props.textAlign === 'center') c.push('text-center')
12
+ else if (props.textAlign === 'right') c.push('text-right')
13
+ else if (props.textAlign === 'justify') c.push('text-justify')
14
+
15
+ if (props.verticalAlign === 'baseline') c.push('align-baseline')
16
+ else if (props.verticalAlign === 'bottom') c.push('align-bottom')
17
+ else if (props.verticalAlign === 'middle') c.push('align-middle')
18
+ else if (props.verticalAlign === 'text-bottom') c.push('align-text-bottom')
19
+ else if (props.verticalAlign === 'text-top') c.push('align-text-top')
20
+ else if (props.verticalAlign === 'top') c.push('align-top')
21
+
22
+ if (props.truncate) c.push('truncate')
23
+
24
+ return c
25
+ },
26
+ },
27
+ }
6
28
 
7
29
  export default theme
@@ -0,0 +1,10 @@
1
+ import type { TableHeadTheme } from '../TableHead.vue'
2
+
3
+ const theme: TableHeadTheme = {
4
+ classes: {
5
+ thead: 'align-bottom',
6
+ row: 'text-sm text-secondary-600 dark:text-secondary-400 border-b',
7
+ },
8
+ }
9
+
10
+ export default theme
@@ -0,0 +1,10 @@
1
+ import type { TableHeadTheme } from '../TableHead.vue'
2
+
3
+ const theme: TableHeadTheme = {
4
+ classes: {
5
+ thead: 'align-bottom',
6
+ row: 'text-secondary-900 dark:text-secondary-50',
7
+ },
8
+ }
9
+
10
+ export default theme
@@ -0,0 +1,28 @@
1
+ import type { TableHeaderTheme } from '../TableHeader.vue'
2
+
3
+ const theme: TableHeaderTheme = {
4
+ classes: {
5
+ th: ({ props }) => {
6
+ const classes = ['relative py-2 font-semibold tracking-widest uppercase text-xs px-3']
7
+
8
+ if (props.sortable) classes.push('cursor-pointer hover:text-secondary-800 dark:hover:text-secondary-300 transition-colors duration-150 ease-in-out')
9
+
10
+ if (props.stickyHeader) classes.push('sticky top-0')
11
+
12
+ if (props.textAlign === 'left') classes.push('text-left')
13
+ if (props.textAlign === 'right') classes.push('text-right')
14
+ if (props.textAlign === 'center') classes.push('text-center')
15
+ if (props.textAlign === 'justify') classes.push('text-justify')
16
+
17
+ return classes
18
+ },
19
+
20
+ sortIcon: ({ props }) => {
21
+ const classes = ['absolute stroke-2 w-3 h-3 top-2.5 right-0.5']
22
+
23
+ return classes
24
+ },
25
+ },
26
+ }
27
+
28
+ export default theme
@@ -0,0 +1,28 @@
1
+ import type { TableHeaderTheme } from '../TableHeader.vue'
2
+
3
+ const theme: TableHeaderTheme = {
4
+ classes: {
5
+ th: ({ props }) => {
6
+ const classes = ['relative py-3.5 font-semibold text-sm px-3 bg-secondary-200 dark:bg-secondary-700 select-none']
7
+
8
+ if (props.sortable) classes.push('cursor-pointer hover:bg-secondary-300 dark:hover:bg-secondary-600 transition-colors duration-150 ease-in-out pr-5')
9
+
10
+ if (props.stickyHeader) classes.push('sticky top-0')
11
+
12
+ if (props.textAlign === 'left') classes.push('text-left')
13
+ if (props.textAlign === 'right') classes.push('text-right')
14
+ if (props.textAlign === 'center') classes.push('text-center')
15
+ if (props.textAlign === 'justify') classes.push('text-justify')
16
+
17
+ return classes
18
+ },
19
+
20
+ sortIcon: ({ props }) => {
21
+ const classes = ['absolute stroke-2 w-4 h-4 top-4 right-2']
22
+
23
+ return classes
24
+ },
25
+ },
26
+ }
27
+
28
+ export default theme
@@ -0,0 +1,21 @@
1
+ import type { TableRowTheme } from '../TableRow.vue'
2
+
3
+ const theme: TableRowTheme = {
4
+ classes: {
5
+ row: ({ props }) => {
6
+ const classes = []
7
+
8
+ if (props.striped) {
9
+ classes.push('odd:bg-secondary-50 dark:odd:bg-secondary-800')
10
+ } else {
11
+ classes.push('border-b border-secondary-200 dark:border-secondary-700')
12
+ }
13
+
14
+ if (props.pointer) classes.push('hover:bg-secondary-50 dark:hover:bg-secondary-700 cursor-pointer')
15
+
16
+ return classes
17
+ },
18
+ },
19
+ }
20
+
21
+ export default theme
@@ -0,0 +1,21 @@
1
+ import type { TableRowTheme } from '../TableRow.vue'
2
+
3
+ const theme: TableRowTheme = {
4
+ classes: {
5
+ row: ({ props }) => {
6
+ const classes = []
7
+
8
+ if (props.striped) {
9
+ classes.push('odd:bg-secondary-50 dark:odd:bg-secondary-800')
10
+ } else {
11
+ classes.push('border-b border-secondary-200 dark:border-secondary-700')
12
+ }
13
+
14
+ if (props.pointer) classes.push('hover:bg-secondary-50 dark:hover:bg-secondary-600 cursor-pointer')
15
+
16
+ return classes
17
+ },
18
+ },
19
+ }
20
+
21
+ export default theme
@@ -13,7 +13,7 @@ const tagProps = {
13
13
 
14
14
  export type TagProps = ExtractPublicPropTypes<typeof tagProps>
15
15
 
16
- type InternalClasses = 'wrapper' | 'loadingWrapper'
16
+ type InternalClasses = 'wrapper'
17
17
  export interface TagTheme extends ThemeComponent<TagProps, InternalClasses> {}
18
18
 
19
19
  export default {
@@ -52,13 +52,13 @@ const { styles, classes, className } = useTheme('Tag', {}, props)
52
52
  <template>
53
53
  <component
54
54
  :is="tag"
55
- class="text-[color:var(--x-tag-text)] dark:text-[color:var(--x-tag-dark-text)] border-[color:var(--x-tag-border)"
55
+ class="text-[color:var(--x-tag-text)] dark:text-[color:var(--x-tag-dark-text)] border-[color:var(--x-tag-border)] dark:border-[color:var(--x-tag-dark-border)]"
56
56
  :style="styles"
57
57
  :class="
58
58
  [
59
59
  className,
60
60
  classes.wrapper,
61
- outlined ? 'border' : 'bg-[color:var(--x-tag-bg)]',
61
+ outlined ? 'border' : 'bg-[color:var(--x-tag-bg)] dark:bg-[color:var(--x-tag-dark-bg)]',
62
62
  rounded ? 'rounded-full' : 'rounded'
63
63
  ]"
64
64
  >
@@ -70,7 +70,7 @@ const { styles, classes, className } = useTheme('Tag', {}, props)
70
70
  <x-icon
71
71
  :size="closeIconSize"
72
72
  :icon="closeIcon"
73
- class="ml-1 cursor-pointer hover:text-gray-700 transition-colors duration-150"
73
+ class="ml-1.5 cursor-pointer hover:text-secondary-700 transition-colors duration-150"
74
74
  @click="(e: Event) => $emit('remove', e)"
75
75
  />
76
76
  </span>
@@ -13,19 +13,19 @@ const theme: TagTheme = {
13
13
 
14
14
  return c
15
15
  },
16
-
17
- loadingWrapper: 'absolute inset-0 flex items-center justify-center z-40 bg-gray-300 dark:bg-gray-600 rounded opacity-50',
18
16
  },
19
17
 
20
18
  styles: ({ colors, props, css }) => {
21
19
  const color = colors.getPalette(props.color)
22
20
 
23
21
  return css.variables({
24
- bg: color[100],
22
+ bg: color[200],
25
23
  text: color[800],
26
24
  border: color[800],
27
25
  dark: {
28
- text: props.outlined ? color[200] : color[800],
26
+ bg: color[800],
27
+ border: color[400],
28
+ text: props.outlined ? color[200] : color[100],
29
29
  },
30
30
  })
31
31
  },
@@ -5,15 +5,13 @@ const theme: TagTheme = {
5
5
  wrapper: ({ props }) => {
6
6
  let c = 'inline-flex items-center leading-none max-w-full '
7
7
 
8
- if (props.size === 'xs' || props.size === 'sm') c += ' px-2 py-1 text-xs'
8
+ if (props.size === 'xs' || props.size === 'sm') c += ' px-2 py-0.5 text-xs'
9
9
  else if (props.size === 'lg') c += ' px-4 py-3'
10
10
  else if (props.size === 'xl') c += ' px-5 py-5 text-lg'
11
- else c += ' px-3 py-2 text-sm'
11
+ else c += ' px-3 py-1 text-sm'
12
12
 
13
13
  return c
14
14
  },
15
-
16
- loadingWrapper: 'absolute inset-0 flex items-center justify-center z-40 bg-gray-300 dark:bg-gray-600 rounded opacity-50',
17
15
  },
18
16
 
19
17
  styles: ({ colors, props, css }) => {
@@ -24,8 +22,9 @@ const theme: TagTheme = {
24
22
  text: color[800],
25
23
  border: color[800],
26
24
  dark: {
27
- bg: color[700],
28
- text: props.outlined ? color[200] : color[800],
25
+ bg: color[800],
26
+ border: color[400],
27
+ text: props.outlined ? color[200] : color[100],
29
28
  },
30
29
  })
31
30
  },
@@ -3,8 +3,6 @@ const textareaProps = {
3
3
  ...useCommon.props(),
4
4
  ...useInteractive.props(),
5
5
  ...useInputtable.props(),
6
- helper: String,
7
- label: String,
8
6
  dir: {
9
7
  type: String,
10
8
  default: 'ltr',
@@ -21,6 +19,7 @@ const textareaProps = {
21
19
  adjustToText: Boolean,
22
20
  preventEnter: Boolean,
23
21
  block: Boolean,
22
+ resizable: Boolean,
24
23
  }
25
24
 
26
25
  export type TextareaProps = ExtractPublicPropTypes<typeof textareaProps>
@@ -91,6 +90,7 @@ const { focus, blur } = useInteractive(elRef)
91
90
 
92
91
  const {
93
92
  errorInternal,
93
+ hideFooterInternal,
94
94
  isInsideForm,
95
95
  inputListeners,
96
96
  reset,
@@ -115,15 +115,17 @@ defineExpose({ focus, blur, reset, validate, setError })
115
115
  className,
116
116
  classes.wrapper,
117
117
  ]"
118
+ :tooltip="tooltip"
118
119
  >
119
120
  <textarea
121
+ :id="id"
120
122
  ref="elRef"
121
123
  class=""
122
124
  :style="style"
123
125
  :class="[
124
126
  classes.input,
125
127
  errorInternal
126
- ? 'border-red-500 dark:border-red-400 focus:outline-red-500'
128
+ ? 'border-error-500 dark:border-error-400 focus:outline-error-500'
127
129
  : 'focus:outline-[color:var(--x-textarea-border)]',
128
130
  ]"
129
131
  :disabled="disabled"
@@ -142,6 +144,6 @@ defineExpose({ focus, blur, reset, validate, setError })
142
144
  @input="onInput"
143
145
  ></textarea>
144
146
 
145
- <x-input-footer v-if="!hideFooter" :error="errorInternal" :helper="helper"/>
147
+ <x-input-footer v-if="!hideFooterInternal" :error="errorInternal" :helper="helper"/>
146
148
  </x-label>
147
149
  </template>
@@ -5,9 +5,10 @@ const theme: TextareaTheme = {
5
5
  wrapper: '',
6
6
 
7
7
  input: ({ props, data }) => {
8
- const classes = ['resize-none appearance-none block w-full placeholder-gray-400 dark:placeholder-gray-500 outline-transparent outline outline-2 outline-offset-[-1px] transition duration-150 ease-in-out border-gray-300 dark:border-gray-700 border shadow-sm rounded-md']
8
+ const classes = ['appearance-none block w-full placeholder-secondary-400 dark:placeholder-secondary-500 outline-transparent outline outline-2 outline-offset-[-1px] transition duration-150 ease-in-out border-secondary-300 dark:border-secondary-700 border shadow-sm rounded-md']
9
9
 
10
- if (!data.errorInternal && !props.disabled) classes.push('hover:border-gray-400 dark:hover:border-gray-500')
10
+ if (!props.resizable) classes.push('resize-none')
11
+ if (!data.errorInternal && !props.disabled) classes.push('hover:border-secondary-400 dark:hover:border-secondary-500')
11
12
 
12
13
  if (props.size === 'xs') classes.push('px-2 py-1 text-xs')
13
14
  else if (props.size === 'sm') classes.push('px-2 py-2 text-sm')
@@ -16,8 +17,8 @@ const theme: TextareaTheme = {
16
17
  else classes.push('px-3 py-2')
17
18
 
18
19
  classes.push(props.disabled
19
- ? 'bg-gray-100 dark:bg-gray-900 text-gray-500 cursor-not-allowed'
20
- : 'bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200')
20
+ ? 'bg-secondary-100 dark:bg-secondary-700 text-secondary-400 dark:text-secondary-600 cursor-not-allowed'
21
+ : 'bg-white dark:bg-secondary-800 text-secondary-700 dark:text-secondary-200')
21
22
 
22
23
  return classes
23
24
  },
@@ -5,20 +5,20 @@ const theme: TextareaTheme = {
5
5
  wrapper: '',
6
6
 
7
7
  input: ({ props, data }) => {
8
- const classes = ['resize-none appearance-none block w-full placeholder-gray-400 dark:placeholder-gray-500 outline-transparent outline outline-2 outline-offset-[-1px] transition duration-150 ease-in-out border-gray-300 dark:border-gray-700 border-b text-sm px-4']
8
+ const classes = ['resize-none appearance-none block w-full placeholder-secondary-400 dark:placeholder-secondary-500 outline-transparent outline outline-2 outline-offset-[-1px] transition duration-150 ease-in-out border-secondary-300 dark:border-secondary-700 border-b text-sm px-4']
9
9
 
10
- if (!data.errorInternal && !props.disabled) classes.push('hover:border-gray-400 dark:hover:border-gray-500')
10
+ if (!data.errorInternal && !props.disabled) classes.push('hover:border-secondary-400 dark:hover:border-secondary-500')
11
11
 
12
12
  if (props.size === 'xs' || props.size === 'sm') classes.push('py-1.5')
13
13
  else if (props.size === 'lg' || props.size === 'xl') classes.push('py-3.5')
14
14
  else classes.push('py-2.5')
15
15
 
16
16
  if (props.disabled) {
17
- classes.push('bg-gray-100 dark:bg-gray-900 text-gray-300 cursor-not-allowed')
17
+ classes.push('bg-secondary-100 dark:bg-secondary-900 text-secondary-300 cursor-not-allowed')
18
18
  } else if (props.readonly) {
19
- classes.push('bg-white dark:bg-gray-900 text-gray-700')
19
+ classes.push('bg-white dark:bg-secondary-900 text-secondary-700')
20
20
  } else {
21
- classes.push('bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-200')
21
+ classes.push('bg-secondary-50 dark:bg-secondary-800 text-secondary-700 dark:text-secondary-200')
22
22
  }
23
23
 
24
24
  return classes
@@ -4,9 +4,6 @@ const toggleProps = {
4
4
  ...useColors.props('primary'),
5
5
  ...useInteractive.props(),
6
6
  ...useInputtable.props(),
7
- id: String,
8
- label: String,
9
- helper: String,
10
7
  glow: Boolean,
11
8
  }
12
9
 
@@ -53,6 +50,7 @@ const { focus, blur } = useInteractive(elRef)
53
50
 
54
51
  const {
55
52
  errorInternal,
53
+ hideFooterInternal,
56
54
  reset,
57
55
  validate,
58
56
  setError,
@@ -78,8 +76,8 @@ defineExpose({ focus, blur, reset, validate, setError })
78
76
  :style="styles"
79
77
  :class="{
80
78
  [`shadow-lg shadow-${color}-500/50`]: glow && modelValue,
81
- 'bg-gray-300 dark:bg-gray-500': !disabled && !checked && !loading,
82
- 'bg-gray-100 dark:bg-gray-700': disabled || loading,
79
+ 'bg-secondary-300 dark:bg-secondary-500': !disabled && !checked && !loading,
80
+ 'bg-secondary-100 dark:bg-secondary-700': disabled || loading,
83
81
  'bg-[color:var(--x-toggle-bg)] dark:bg-[color:var(--x-toggle-dark-bg)]': !disabled && checked,
84
82
  }"
85
83
  >
@@ -104,7 +102,7 @@ defineExpose({ focus, blur, reset, validate, setError })
104
102
  'translate-x-full': checked,
105
103
  'shadow': !disabled
106
104
  },
107
- disabled ? 'bg-gray-50 dark:bg-gray-800' : 'bg-white dark:bg-gray-800'
105
+ disabled ? 'bg-secondary-50 dark:bg-secondary-800' : 'bg-white dark:bg-secondary-800'
108
106
  ]"
109
107
  ></div>
110
108
  </div>
@@ -119,6 +117,6 @@ defineExpose({ focus, blur, reset, validate, setError })
119
117
  <x-spinner v-if="loading" :size="size" class="ml-1" />
120
118
  </div>
121
119
 
122
- <x-input-footer v-if="!hideFooter" :error="errorInternal" :helper="helper"/>
120
+ <x-input-footer v-if="!hideFooterInternal" :error="errorInternal" :helper="helper"/>
123
121
  </label>
124
122
  </template>
@@ -5,7 +5,7 @@ const theme: ToggleTheme = {
5
5
  wrapper: '',
6
6
 
7
7
  label: ({ props }) => {
8
- const c = 'font-medium text-gray-800 dark:text-gray-200'
8
+ const c = 'font-medium text-secondary-800 dark:text-secondary-200'
9
9
 
10
10
  if (props.size === 'xs') return c + ' text-xs'
11
11
  else if (props.size === 'sm') return c + ' text-sm'
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ const toggleTipProps = {
3
+ content: String,
4
+ icon: String,
5
+ }
6
+
7
+ export type ToggleTipProps = ExtractPublicPropTypes<typeof toggleTipProps>
8
+
9
+ export default { name: 'XToggleTip' }
10
+ </script>
11
+
12
+ <script setup lang="ts">
13
+ import { computed, type ExtractPublicPropTypes } from 'vue'
14
+ import XTooltip from './Tooltip.vue'
15
+ import XIcon from '../icon/Icon.vue'
16
+
17
+ import { infoIcon } from '../../common/icons'
18
+
19
+ const props = defineProps(toggleTipProps)
20
+
21
+ const computedIcon = computed(() => props.icon || infoIcon)
22
+ </script>
23
+
24
+ <template>
25
+ <x-tooltip placement="auto">
26
+ <x-icon :icon="computedIcon" class="text-secondary-500 dark:text-secondary-300 cursor-pointer" />
27
+ <template #tooltip>
28
+ <div v-html="content"></div>
29
+ </template>
30
+ </x-tooltip>
31
+ </template>
@@ -1,5 +1,12 @@
1
1
  <script lang="ts">
2
- const tooltipProps = {}
2
+ const tooltipProps = {
3
+ placement: {
4
+ type: String as PropType<PopoverPlacement>,
5
+ default: 'bottom',
6
+ },
7
+ }
8
+
9
+ export type PopoverPlacement = Placement
3
10
 
4
11
  export type TooltipProps = ExtractPublicPropTypes<typeof tooltipProps>
5
12
 
@@ -7,17 +14,20 @@ export default { name: 'XTooltip' }
7
14
  </script>
8
15
 
9
16
  <script setup lang="ts">
10
- import type { ExtractPublicPropTypes } from 'vue'
17
+ import type { ExtractPublicPropTypes, PropType } from 'vue'
11
18
  import XPopover from '../../components/popover/Popover.vue'
12
19
  import XPopoverContainer from '../../components/popover/PopoverContainer.vue'
20
+ import { type Placement } from 'floating-vue'
21
+
22
+ const props = defineProps(tooltipProps)
13
23
  </script>
14
24
 
15
25
  <template>
16
- <x-popover :triggers="['hover']" class="inline-block">
26
+ <x-popover :triggers="['hover', 'click']" class="inline-block" :hide-arrow="false" :placement="placement">
17
27
  <slot></slot>
18
28
  <template #content>
19
29
  <div class="dark">
20
- <x-popover-container class="p-2 text-white text-sm w-max max-w-xs">
30
+ <x-popover-container class="p-2 text-white text-xs w-max max-w-xs">
21
31
  <slot name="tooltip"></slot>
22
32
  </x-popover-container>
23
33
  </div>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import ToggleTip from '../ToggleTip.vue'
4
+
5
+ describe('ToggleTip', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(ToggleTip)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -1,2 +1,5 @@
1
1
  export { default as XTooltip } from './Tooltip.vue'
2
2
  export type { TooltipProps } from './Tooltip.vue'
3
+
4
+ export { default as XToggleTip } from './ToggleTip.vue'
5
+ export type { ToggleTipProps } from './ToggleTip.vue'
@@ -4,13 +4,17 @@ import type { TabGroupInjection } from '../components/tab/TabGroup.vue'
4
4
  import type { ButtonGroupInjection } from '../components/button/ButtonGroup.vue'
5
5
  import type { NotificationInjection } from '../components/notifications/Notifications.vue'
6
6
  import type { IconInjection } from '../components/icon/Icon.vue'
7
+ import type { FormGroupInjection } from '../components/formGroup'
8
+ import type { AccordionInjection } from '../components/accordion'
7
9
  import type { UIOptions } from '../create'
8
10
  import type { UITheme } from '../theme'
9
11
 
10
12
  export const injectOptionsKey = Symbol() as InjectionKey<UIOptions>
11
13
  export const injectThemeKey = Symbol() as InjectionKey<MaybeRef<UITheme>>
12
- export const injectTabKey = Symbol() as InjectionKey<TabGroupInjection>
14
+ export const injectTabGroupKey = Symbol() as InjectionKey<TabGroupInjection>
13
15
  export const injectFormKey = Symbol() as InjectionKey<FormInjection>
16
+ export const injectFormGroupKey = Symbol() as InjectionKey<FormGroupInjection>
14
17
  export const injectIconsKey = Symbol() as InjectionKey<IconInjection>
15
18
  export const injectButtonGroupKey = Symbol() as InjectionKey<ButtonGroupInjection>
16
19
  export const injectNotificationKey = Symbol() as InjectionKey<NotificationInjection>
20
+ export const injectAccordionKey = Symbol() as InjectionKey<AccordionInjection>
@@ -33,7 +33,7 @@ export interface ColorComposition {
33
33
  const colorCache: ColorLibrary = {}
34
34
 
35
35
  const defaultColors = {
36
- primary: tailwindColors.sky,
36
+ primary: tailwindColors.emerald,
37
37
  secondary: tailwindColors.slate,
38
38
  success: tailwindColors.green,
39
39
  warning: tailwindColors.yellow,
@@ -0,0 +1,106 @@
1
+ import type { ComponentPublicInstance } from 'vue'
2
+ import { onUnmounted, type MaybeRef, unref, nextTick } from 'vue'
3
+
4
+ const focusableQuery = 'button:not([tabindex="-1"]), [href], input, select, textarea, li, a, [tabindex]:not([tabindex="-1"])'
5
+
6
+ export function useFocusTrap() {
7
+ let focusable: HTMLElement[] = []
8
+ let observer: MutationObserver | null = null
9
+
10
+ let firstFocusableEl: HTMLElement | null = null
11
+ let lastFocusableEl: HTMLElement | null = null
12
+
13
+ async function initFocusTrap(targetRef: MaybeRef<HTMLElement | ComponentPublicInstance | null>) {
14
+ targetRef = unref(targetRef)
15
+
16
+ if (!targetRef) return
17
+
18
+ await nextTick()
19
+
20
+ getFocusableElements(targetRef)
21
+
22
+ if (firstFocusableEl) firstFocusableEl.focus()
23
+
24
+ document.addEventListener('keydown', handleKeydown)
25
+ observer = new MutationObserver(() => getFocusableElements(targetRef))
26
+
27
+ if ((targetRef as ComponentPublicInstance).$el) observer.observe((targetRef as ComponentPublicInstance).$el as Node, { childList: true, subtree: true })
28
+ else observer.observe(targetRef as Node, { childList: true, subtree: true })
29
+ }
30
+
31
+ function getFocusableElements(targetRef: MaybeRef<HTMLElement | ComponentPublicInstance | null>) {
32
+ if (targetRef === null) return
33
+
34
+ let elements
35
+
36
+ if ((targetRef as ComponentPublicInstance).$el) elements = (targetRef as ComponentPublicInstance)?.$el.querySelectorAll(focusableQuery)
37
+ else (targetRef as HTMLElement).querySelectorAll(focusableQuery)
38
+
39
+ focusable = Array.from(elements || []) as HTMLElement[]
40
+ firstFocusableEl = focusable[0] || null
41
+ lastFocusableEl = focusable[focusable.length - 1] || null
42
+ }
43
+
44
+ const handleKeydown = (event: KeyboardEvent) => {
45
+ if (event.key === 'Tab') {
46
+ const isShiftPressed = event.shiftKey
47
+ const currentEl = document.activeElement as HTMLElement | null
48
+
49
+ if (!currentEl) {
50
+ event.preventDefault()
51
+ focusable[0]?.focus()
52
+
53
+ return
54
+ }
55
+
56
+ const firstEl = focusable[0]
57
+ const lastEl = focusable[focusable.length - 1]
58
+
59
+ if (!isShiftPressed && currentEl === lastEl) {
60
+ event.preventDefault()
61
+ firstEl?.focus()
62
+ } else if (isShiftPressed && currentEl === firstEl) {
63
+ event.preventDefault()
64
+ lastEl?.focus()
65
+ }
66
+
67
+ } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {
68
+ event.preventDefault()
69
+ const currentEl = document.activeElement as HTMLElement
70
+ const index = focusable.indexOf(currentEl)
71
+ const previousEl = focusable[index - 1]
72
+
73
+ if (previousEl) {
74
+ previousEl.focus()
75
+ } else if (lastFocusableEl) {
76
+ lastFocusableEl.focus()
77
+ }
78
+
79
+ } else if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {
80
+ event.preventDefault()
81
+ const currentEl = document.activeElement as HTMLElement
82
+ const index = focusable.indexOf(currentEl)
83
+ const nextElement = focusable[index + 1]
84
+
85
+ if (nextElement) {
86
+ nextElement.focus()
87
+ } else if (firstFocusableEl) {
88
+ firstFocusableEl.focus()
89
+ }
90
+ }
91
+ }
92
+
93
+ const clearFocusTrap = () => {
94
+ document.removeEventListener('keydown', handleKeydown)
95
+ observer?.disconnect()
96
+ }
97
+
98
+ onUnmounted(() => {
99
+ clearFocusTrap()
100
+ })
101
+
102
+ return {
103
+ initFocusTrap,
104
+ clearFocusTrap,
105
+ }
106
+ }