@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
@@ -2,30 +2,44 @@ import type { CheckboxTheme } from '../Checkbox.vue'
2
2
 
3
3
  const theme: CheckboxTheme = {
4
4
  classes: {
5
- wrapper: 'inline-block relative cursor-pointer align-middle',
5
+ wrapper: ({ data }) => {
6
+ const classes = ['inline-block relative cursor-pointer align-middle']
7
+
8
+ if (data.isInsideForm && !data.isInsideFormGroup) classes.push('mb-3')
9
+
10
+ return classes
11
+ },
6
12
 
7
13
  box: ({ props }) => {
8
- const classes = ['rounded flex justify-center items-center shrink-0 border-2 border-[color:var(--x-checkbox-border)] bg-[color:var(--x-checkbox-bg)] dark:border-[color:var(--x-checkbox-dark-border)] dark:bg-[color:var(--x-checkbox-dark-bg)]']
14
+ const classes = ['rounded flex justify-center items-center shrink-0 border border-[color:var(--x-checkbox-border)] bg-[color:var(--x-checkbox-bg)] dark:border-[color:var(--x-checkbox-dark-border)] dark:bg-[color:var(--x-checkbox-dark-bg)]']
9
15
 
10
- if (props.size === 'xs' || props.size === 'sm') classes.push('h-4 w-4')
16
+ if (props.size === 'lg') classes.push('h-5 w-5')
11
17
  else if (props.size === 'xl') classes.push('h-6 w-6')
12
- else classes.push('h-5 w-5')
18
+ else classes.push('h-4 w-4')
19
+
20
+ return classes
21
+ },
22
+
23
+ content: ({ props }) => {
24
+ const classes = ['flex items-baseline']
25
+
26
+ if (props.disabled) classes.push('cursor-not-allowed')
13
27
 
14
28
  return classes
15
29
  },
16
30
 
17
31
  icon: ({ props }) => {
18
- const classes = ['fill-current text-white dark:text-gray-900']
32
+ const classes = ['fill-current text-white']
19
33
 
20
- if (props.size === 'xs' || props.size === 'sm') classes.push('h-2 w-2')
34
+ if (props.size === 'lg') classes.push('h-3 w-3')
21
35
  else if (props.size === 'xl') classes.push('h-4 w-4')
22
- else classes.push('h-3 w-3')
36
+ else classes.push('h-2.5 w-2.5')
23
37
 
24
38
  return classes
25
39
  },
26
40
 
27
41
  label: ({ props }) => {
28
- const classes = ['inline-block font-medium text-gray-800 dark:text-gray-200 pl-2']
42
+ const classes = ['inline-block font-medium text-secondary-800 dark:text-secondary-200 pl-2']
29
43
 
30
44
  if (props.size === 'xs') classes.push('text-xs')
31
45
  else if (props.size === 'sm') classes.push('text-sm')
@@ -2,10 +2,16 @@ import type { CheckboxTheme } from '../Checkbox.vue'
2
2
 
3
3
  const theme: CheckboxTheme = {
4
4
  classes: {
5
- wrapper: 'inline-block relative cursor-pointer align-middle',
5
+ wrapper: ({ data }) => {
6
+ const classes = ['inline-block relative cursor-pointer align-middle']
7
+
8
+ if (data.isInsideForm && !data.isInsideFormGroup) classes.push('mb-8')
9
+
10
+ return classes
11
+ },
6
12
 
7
13
  box: ({ props }) => {
8
- const classes = ['rounded-sm flex justify-center items-center shrink-0 border border-[color:var(--x-checkbox-border)] bg-[color:var(--x-checkbox-bg)] dark:border-[color:var(--x-checkbox-dark-border)] dark:bg-[color:var(--x-checkbox-dark-bg)]']
14
+ const classes = ['rounded-sm flex justify-center items-center shrink-0 border border-[color:var(--x-checkbox-border)] bg-[color:var(--x-checkbox-bg)] dark:border-[color:var(--x-checkbox-dark-border)] dark:bg-[color:var(--x-checkbox-dark-bg)] mt-0.5']
9
15
 
10
16
  if (props.size === 'xs' || props.size === 'sm') classes.push('h-3 w-3')
11
17
  else if (props.size === 'xl') classes.push('h-5 w-5')
@@ -14,8 +20,16 @@ const theme: CheckboxTheme = {
14
20
  return classes
15
21
  },
16
22
 
23
+ content: ({ props }) => {
24
+ const classes = ['flex']
25
+
26
+ if (props.disabled) classes.push('cursor-not-allowed')
27
+
28
+ return classes
29
+ },
30
+
17
31
  icon: ({ props }) => {
18
- const classes = ['fill-current text-white dark:text-gray-900']
32
+ const classes = ['fill-current text-white dark:text-secondary-900']
19
33
 
20
34
  if (props.size === 'xs' || props.size === 'sm') classes.push('h-2 w-2')
21
35
  else if (props.size === 'xl') classes.push('h-3.5 w-3.5')
@@ -25,7 +39,7 @@ const theme: CheckboxTheme = {
25
39
  },
26
40
 
27
41
  label: ({ props }) => {
28
- const classes = ['inline-block text-gray-800 dark:text-gray-200 pl-2 text-sm']
42
+ const classes = ['text-secondary-800 dark:text-secondary-200 pl-2 text-sm']
29
43
 
30
44
  if (props.size === 'xs') classes.push('text-xs')
31
45
  else if (props.size === 'sm') classes.push('text-sm')
@@ -4,6 +4,10 @@ const containerProps = {
4
4
  type: String,
5
5
  default: 'div',
6
6
  },
7
+ fluid: {
8
+ type: Boolean,
9
+ default: false,
10
+ },
7
11
  }
8
12
 
9
13
  export type ContainerProps = ExtractPublicPropTypes<typeof containerProps>
@@ -2,7 +2,13 @@ import type { ContainerTheme } from '../Container.vue'
2
2
 
3
3
  const theme: ContainerTheme = {
4
4
  classes: {
5
- wrapper: 'max-w-screen-2xl mx-auto px-4 md:px-8',
5
+ wrapper: ({ props }) => {
6
+ const classes = ['px-4 md:px-6']
7
+
8
+ if (!props.fluid) classes.push('max-w-screen-lg mx-auto')
9
+
10
+ return classes
11
+ },
6
12
  },
7
13
  }
8
14
 
@@ -40,7 +40,7 @@ const { styles, classes, className } = useTheme('Divider', {}, props)
40
40
  ></div>
41
41
  <div
42
42
  v-if="label"
43
- class="font-medium text-sm text-gray-600 dark:text-gray-300"
43
+ class="font-medium text-sm text-secondary-600 dark:text-secondary-300"
44
44
  :class="[
45
45
  classes.label,
46
46
  {
@@ -4,9 +4,9 @@ const theme: DividerTheme = {
4
4
  classes: {
5
5
  wrapper: ({ props }) => `flex justify-center items-center ${props.vertical ? 'h-full flex-col' : 'w-full'}`,
6
6
 
7
- label: 'font-medium text-sm text-gray-600 dark:text-gray-300',
7
+ label: 'font-medium text-sm text-secondary-600 dark:text-secondary-300',
8
8
 
9
- line: 'bg-gray-200 dark:bg-slate-700 flex-grow',
9
+ line: 'bg-secondary-200 dark:bg-secondary-700 flex-grow',
10
10
  },
11
11
  }
12
12
 
@@ -155,7 +155,7 @@ function onEnter(el: Element, done: () => void) {
155
155
  }
156
156
  el.addEventListener('transitionend', done)
157
157
  setTimeout(() => {
158
- if (props.backdrop) el.classList.add('bg-gray-500/30')
158
+ if (props.backdrop) el.classList.add('bg-slate-500/30')
159
159
  if (props.position === 'top') (el as HTMLElement).style.top = '0'
160
160
  else if (props.position === 'bottom') (el as HTMLElement).style.bottom = '0'
161
161
  else if (props.position === 'left') (el as HTMLElement).style.left = '0'
@@ -168,7 +168,7 @@ function onBeforeLeave(el: Element) {}
168
168
  function onLeave(el: Element, done: () => void) {
169
169
  el.addEventListener('transitionend', done)
170
170
  setTimeout(() => {
171
- if (props.backdrop) el.classList.remove('bg-gray-500/30')
171
+ if (props.backdrop) el.classList.remove('bg-slate-500/30')
172
172
  if (props.position === 'top') (el as HTMLElement).style.top = `-${props.height}px`
173
173
  else if (props.position === 'bottom') (el as HTMLElement).style.bottom = `-${props.height}px`
174
174
  else if (props.position === 'left') (el as HTMLElement).style.left = `-${props.width}px`
@@ -2,7 +2,7 @@ import type { DrawerTheme } from '../Drawer.vue'
2
2
 
3
3
  const theme: DrawerTheme = {
4
4
  classes: {
5
- wrapper: 'flex flex-col max-h-full bg-white dark:bg-gray-800',
5
+ wrapper: 'flex flex-col max-h-full bg-white dark:bg-secondary-800',
6
6
 
7
7
  backdrop: 'duration-150 ease-in-out',
8
8
  },
@@ -13,6 +13,12 @@ const formProps = {
13
13
  type: [Array, Object] as PropType<[FormError[], FormError]>,
14
14
  default: () => ([]),
15
15
  },
16
+ title: String,
17
+ description: String,
18
+ hasFooter: {
19
+ type: Boolean,
20
+ default: true,
21
+ },
16
22
  }
17
23
 
18
24
  export type FormProps = ExtractPublicPropTypes<typeof formProps>
@@ -35,12 +41,11 @@ export type FormInput = {
35
41
  setError: (val: string) => void;
36
42
  }
37
43
 
38
- type InternalClasses = 'wrapper'
44
+ type InternalClasses = 'wrapper' | 'content' | 'title' | 'description' | 'footer'
39
45
  export interface FormTheme extends ThemeComponent<FormProps, InternalClasses> {}
40
46
 
41
47
  export default {
42
48
  name: 'XForm',
43
- inheritAttrs: false,
44
49
  }
45
50
  </script>
46
51
 
@@ -73,8 +78,10 @@ provide(injectFormKey, {
73
78
  isInsideForm: true,
74
79
  })
75
80
 
76
- onMounted(() => {
77
- if (props.autoFocus && inputs && inputs.length > 0) inputs[0].focus()
81
+ onMounted(async () => {
82
+ if (props.autoFocus && inputs && inputs.length > 0) {
83
+ setTimeout(inputs[0].focus, 50)
84
+ }
78
85
  })
79
86
 
80
87
  watch(() => props.errors, (errors) => {
@@ -131,8 +138,22 @@ const { styles, classes, className } = useTheme('Form', {}, props)
131
138
  ]"
132
139
  @submit="submit"
133
140
  >
134
- <fieldset :disabled="disabled">
141
+ <slot name="header">
142
+ <div v-if="title || description" class="mb-6">
143
+ <p v-if="title" :class="classes.title">{{ title }}</p>
144
+ <p v-if="description" :class="classes.description">{{ description }}</p>
145
+ </div>
146
+ </slot>
147
+
148
+ <fieldset :disabled="disabled" :class="classes.content">
135
149
  <slot></slot>
136
150
  </fieldset>
151
+
152
+ <slot v-if="hasFooter" name="footer">
153
+ <div :class="classes.footer">
154
+ <slot name="primary-action"></slot>
155
+ <slot name="secondary-action"></slot>
156
+ </div>
157
+ </slot>
137
158
  </form>
138
159
  </template>
@@ -2,7 +2,15 @@ import type { FormTheme } from '../Form.vue'
2
2
 
3
3
  const theme: FormTheme = {
4
4
  classes: {
5
- wrapper: '',
5
+ wrapper: 'relative',
6
+
7
+ content: '',
8
+
9
+ title: 'text-xl mb-1',
10
+
11
+ description: 'text-secondary-500',
12
+
13
+ footer: 'space-x-4 mt-4',
6
14
  },
7
15
  }
8
16
 
@@ -1,7 +1,17 @@
1
1
  import type { FormTheme } from '../Form.vue'
2
2
 
3
- import BaseTheme from './Form.base.theme'
3
+ const theme: FormTheme = {
4
+ classes: {
5
+ wrapper: 'relative',
4
6
 
5
- const theme: FormTheme = BaseTheme
7
+ content: 'grid',
8
+
9
+ title: 'text-xl mb-1',
10
+
11
+ description: 'text-secondary-500',
12
+
13
+ footer: 'grid grid-cols-2 gap-4 lg:flex mt-8',
14
+ },
15
+ }
6
16
 
7
17
  export default theme
@@ -0,0 +1,117 @@
1
+ <script lang="ts">
2
+ const formGroupProps = {
3
+ ...useInteractive.props(),
4
+ ...useInputtable.props(),
5
+ vertical: {
6
+ type: Boolean,
7
+ default: false,
8
+ },
9
+ }
10
+
11
+ export type FormGroupProps = ExtractPublicPropTypes<typeof formGroupProps>
12
+
13
+ export type FormGroupInjection = {
14
+ registerInputGroup: (name: string, focus: () => void) => void;
15
+ unregisterInputGroup: (name: string) => void;
16
+ setValue: (val: string | number | string[] | number[]) => void;
17
+ value: MaybeRef<string | number | string[] | number[] | null | undefined>;
18
+ isInsideFormGroup: boolean;
19
+ }
20
+
21
+ export type FormGroupInput = {
22
+ name: string;
23
+ focus: () => void;
24
+ }
25
+
26
+ type InternalClasses = 'wrapper'
27
+ export interface FormGroupTheme extends ThemeComponent<FormGroupProps, InternalClasses> {}
28
+
29
+ export default {
30
+ name: 'XFormGroup',
31
+ }
32
+ </script>
33
+
34
+ <script setup lang="ts">
35
+ import { provide, computed, type ExtractPublicPropTypes, type MaybeRef } from 'vue'
36
+ import { useTheme, type ThemeComponent } from '../../composables/useTheme'
37
+ import { useInteractive } from '../../composables/useInteractive'
38
+ import { useInputtable } from '../../composables/useInputtable'
39
+ import { injectFormGroupKey } from '../../composables/keys'
40
+
41
+ import XLabel from '../label/Label.vue'
42
+ import XInputFooter from '../inputFooter/InputFooter.vue'
43
+
44
+ const props = defineProps(formGroupProps)
45
+
46
+ const inputs: FormGroupInput[] = []
47
+
48
+ const value = computed<string | number | string[] | number[]>(() => {
49
+ if (typeof props.modelValue === 'string') return props.modelValue
50
+ if (typeof props.modelValue === 'number') return props.modelValue
51
+ if (Array.isArray(props.modelValue)) return props.modelValue
52
+
53
+ return ''
54
+ })
55
+
56
+ provide(injectFormGroupKey, {
57
+ registerInputGroup: (name: string, focus: () => void) => {
58
+ inputs.push({ name, focus })
59
+ },
60
+ unregisterInputGroup: (name: string) => {
61
+ const index = inputs.findIndex((i) => i.name === name)
62
+
63
+ inputs.splice(index, 1)
64
+ },
65
+ setValue: (val) => {
66
+ emit('update:modelValue', val)
67
+ },
68
+ isInsideFormGroup: true,
69
+ value,
70
+ })
71
+
72
+ function focus() {
73
+ inputs[0]?.focus()
74
+ }
75
+
76
+ const emit = defineEmits(useInputtable.emits())
77
+
78
+ const {
79
+ errorInternal,
80
+ isInsideForm,
81
+ isFirstValidation,
82
+ reset,
83
+ validate,
84
+ setError,
85
+ } = useInputtable(props, { focus, emit })
86
+
87
+ const listeners = {
88
+ change: (event: Event) => {
89
+ if (props.validateOnInput && !isFirstValidation.value) validate(props.modelValue)
90
+ },
91
+ }
92
+
93
+ const { styles, classes, className } = useTheme('FormGroup', {}, props, { errorInternal })
94
+
95
+ defineExpose({ focus, blur, reset, validate, setError })
96
+ </script>
97
+
98
+ <template>
99
+ <x-label
100
+ tag="fieldset"
101
+ :style="styles"
102
+ :disabled="disabled"
103
+ :required="required"
104
+ :is-inside-form="isInsideForm"
105
+ :label="label"
106
+ :class="[
107
+ className,
108
+ ]"
109
+ :tooltip="tooltip"
110
+ v-on="listeners"
111
+ >
112
+ <div :class="classes.wrapper">
113
+ <slot></slot>
114
+ </div>
115
+ <x-input-footer v-if="!hideFooter" :error="errorInternal" :helper="helper"/>
116
+ </x-label>
117
+ </template>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import FormGroup from '../FormGroup.vue'
4
+
5
+ describe('FormGroup', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(FormGroup)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -0,0 +1,2 @@
1
+ export { default as XFormGroup } from './FormGroup.vue'
2
+ export type { FormGroupProps, FormGroupInjection, FormGroupInput, FormGroupTheme } from './FormGroup.vue'
@@ -0,0 +1,16 @@
1
+ import type { FormGroupTheme } from '../FormGroup.vue'
2
+
3
+ const theme: FormGroupTheme = {
4
+ classes: {
5
+ wrapper: ({ props }) => {
6
+ const classes = ['']
7
+
8
+ if (!props.vertical) classes.push('flex gap-4')
9
+ else classes.push('grid gap-1')
10
+
11
+ return classes
12
+ },
13
+ },
14
+ }
15
+
16
+ export default theme
@@ -0,0 +1,16 @@
1
+ import type { FormGroupTheme } from '../FormGroup.vue'
2
+
3
+ const theme: FormGroupTheme = {
4
+ classes: {
5
+ wrapper: ({ props }) => {
6
+ const classes = ['']
7
+
8
+ if (!props.vertical) classes.push('flex gap-4')
9
+ else classes.push('grid gap-3')
10
+
11
+ return classes
12
+ },
13
+ },
14
+ }
15
+
16
+ export default theme
@@ -3,14 +3,14 @@ import type { IconTheme } from '../Icon.vue'
3
3
  const theme: IconTheme = {
4
4
  classes: {
5
5
  wrapper: ({ props }) => {
6
- const classes = 'inline'
6
+ const classes = 'inline shrink-0'
7
7
 
8
8
  if (props.size === 'xs') return classes + ' h-3 w-3'
9
9
  else if (props.size === 'sm') return classes + ' h-4 w-4'
10
10
  else if (props.size === 'lg') return classes + ' h-6 w-6'
11
- else if (props.size === 'xl') return classes + ' h-9 w-9'
11
+ else if (props.size === 'xl') return classes + ' h-7 w-7'
12
12
 
13
- return classes + ' h-5 w-5'
13
+ return classes + ' h-4 w-4'
14
14
  },
15
15
  },
16
16
  }
@@ -3,12 +3,11 @@ import type { IconTheme } from '../Icon.vue'
3
3
  const theme: IconTheme = {
4
4
  classes: {
5
5
  wrapper: ({ props }) => {
6
- const classes = 'inline'
6
+ const classes = 'inline shrink-0'
7
7
 
8
8
  if (props.size === 'xs') return classes + ' h-3 w-3'
9
- else if (props.size === 'sm') return classes + ' h-4 w-4'
10
- else if (props.size === 'lg') return classes + ' h-6 w-6'
11
- else if (props.size === 'xl') return classes + ' h-9 w-9'
9
+ else if (props.size === 'lg') return classes + ' h-5 w-5'
10
+ else if (props.size === 'xl') return classes + ' h-8 w-8'
12
11
 
13
12
  return classes + ' h-4 w-4'
14
13
  },
@@ -1,3 +1,4 @@
1
+ export * from './accordion'
1
2
  export * from './alert'
2
3
  export * from './avatar'
3
4
  export * from './badge'
@@ -6,11 +7,11 @@ export * from './button'
6
7
  export * from './card'
7
8
  export * from './carousel'
8
9
  export * from './checkbox'
9
- export * from './collapse'
10
10
  export * from './container'
11
11
  export * from './divider'
12
12
  export * from './drawer'
13
13
  export * from './form'
14
+ export * from './formGroup'
14
15
  export * from './icon'
15
16
  export * from './image'
16
17
  export * from './input'
@@ -31,6 +32,7 @@ export * from './skeleton'
31
32
  export * from './slider'
32
33
  export * from './spacer'
33
34
  export * from './spinner'
35
+ export * from './stepper'
34
36
  export * from './tab'
35
37
  export * from './table'
36
38
  export * from './tag'
@@ -8,8 +8,6 @@ const inputProps = {
8
8
  type: Boolean,
9
9
  default: true,
10
10
  },
11
- helper: String,
12
- label: String,
13
11
  dir: {
14
12
  type: String as PropType<'ltr' | 'rtl'>,
15
13
  default: 'ltr',
@@ -91,6 +89,7 @@ const { focus, blur } = useInteractive(elRef)
91
89
 
92
90
  const {
93
91
  errorInternal,
92
+ hideFooterInternal,
94
93
  isInsideForm,
95
94
  inputListeners,
96
95
  reset,
@@ -115,6 +114,7 @@ defineExpose({ focus, blur, reset, validate, setError })
115
114
  className,
116
115
  classes.wrapper,
117
116
  ]"
117
+ :tooltip="tooltip"
118
118
  >
119
119
  <div class="relative">
120
120
  <slot name="prefix">
@@ -128,13 +128,14 @@ defineExpose({ focus, blur, reset, validate, setError })
128
128
  </slot>
129
129
 
130
130
  <input
131
+ :id="id"
131
132
  ref="elRef"
132
133
  :class="[
133
134
  classes.input,
134
135
  type === 'password' ? 'pr-10' : '',
135
136
  // error
136
137
  errorInternal
137
- ? 'border-red-500 dark:border-red-400 focus:outline-red-500'
138
+ ? 'border-error-500 dark:border-error-400 focus:outline-error-500'
138
139
  : 'focus:outline-[color:var(--x-input-border)]',
139
140
  {
140
141
  '!pl-10': iconLeft,
@@ -176,6 +177,6 @@ defineExpose({ focus, blur, reset, validate, setError })
176
177
  </slot>
177
178
  </div>
178
179
 
179
- <x-input-footer v-if="!hideFooter" :error="errorInternal" :helper="helper"/>
180
+ <x-input-footer v-if="!hideFooterInternal" :error="errorInternal" :helper="helper"/>
180
181
  </x-label>
181
182
  </template>
@@ -5,9 +5,9 @@ const theme: InputTheme = {
5
5
  wrapper: '',
6
6
 
7
7
  input: ({ props, data }) => {
8
- const classes = ['appearance-none block w-full placeholder-gray-400 dark:placeholder-gray-500 outline-transparent outline outline-2 outline-offset-[-1px] transition-all 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-all 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 (!data.errorInternal && !props.disabled) classes.push('hover:border-secondary-400 dark:hover:border-secondary-500')
11
11
 
12
12
  if (props.size === 'xs') classes.push('px-2 py-1 text-xs')
13
13
  else if (props.size === 'sm') classes.push('px-2 py-2 text-sm')
@@ -16,13 +16,13 @@ const theme: InputTheme = {
16
16
  else classes.push('px-3 py-2')
17
17
 
18
18
  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')
19
+ ? 'bg-secondary-100 dark:bg-secondary-700 text-secondary-400 dark:text-secondary-600 cursor-not-allowed'
20
+ : 'bg-white dark:bg-secondary-800 text-secondary-700 dark:text-secondary-200')
21
21
 
22
22
  return classes
23
23
  },
24
24
 
25
- icon: 'text-gray-600 dark:text-gray-300 absolute my-auto inset-y-0',
25
+ icon: 'text-secondary-600 dark:text-secondary-300 absolute my-auto inset-y-0',
26
26
  },
27
27
 
28
28
  styles: ({ colors, props, css }) => {
@@ -5,26 +5,26 @@ const theme: InputTheme = {
5
5
  wrapper: '',
6
6
 
7
7
  input: ({ props, data }) => {
8
- const classes = ['appearance-none block w-full placeholder-gray-400 dark:placeholder-gray-500 outline-transparent outline outline-2 outline-offset-[-1px] transition-all duration-150 ease-in-out border-gray-300 dark:border-gray-700 border-b text-sm px-4']
8
+ const classes = ['appearance-none block w-full placeholder-secondary-400 dark:placeholder-secondary-500 outline-transparent outline outline-2 outline-offset-[-1px] transition-all 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
25
25
  },
26
26
 
27
- icon: 'text-gray-600 dark:text-gray-300 absolute my-auto inset-y-0',
27
+ icon: 'text-secondary-600 dark:text-secondary-300 absolute my-auto inset-y-0',
28
28
  },
29
29
 
30
30
  styles: ({ colors, props, css }) => {
@@ -2,9 +2,9 @@ import type { InputFooterTheme } from '../InputFooter.vue'
2
2
 
3
3
  const theme: InputFooterTheme = {
4
4
  classes: {
5
- wrapper: 'min-h-[1rem] text-sm mt-1',
6
- helperText: 'text-gray-500 dark:text-gray-400',
7
- errorText: 'text-red-500 dark:text-red-400',
5
+ wrapper: 'min-h-[1.3rem] text-xs mt-1',
6
+ helperText: 'text-secondary-500 dark:text-secondary-400',
7
+ errorText: 'text-error-500 dark:text-error-400',
8
8
  },
9
9
  }
10
10
 
@@ -2,9 +2,9 @@ import type { InputFooterTheme } from '../InputFooter.vue'
2
2
 
3
3
  const theme: InputFooterTheme = {
4
4
  classes: {
5
- wrapper: 'min-h-[1rem] text-xs mt-1',
6
- helperText: 'text-gray-500 dark:text-gray-400',
7
- errorText: 'text-red-500 dark:text-red-400',
5
+ wrapper: 'text-xs mt-1',
6
+ helperText: 'text-secondary-500 dark:text-secondary-400',
7
+ errorText: 'text-error-500 dark:text-error-400',
8
8
  },
9
9
  }
10
10