@caipira/tamandua 0.0.1 → 0.0.3

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 (523) hide show
  1. package/README.md +4 -0
  2. package/dist/account-BJGxzbeL.js +5 -0
  3. package/dist/alert-octagon-D8wznooU.js +4 -0
  4. package/dist/alert-octagon-outline-fM2QVbyq.js +5 -0
  5. package/dist/archive-DDuuzVUo.js +5 -0
  6. package/dist/archive-outline-BT6uCRX5.js +5 -0
  7. package/dist/arrow-left-CVipcGWo.js +5 -0
  8. package/dist/arrow-right-DHFo5L72.js +5 -0
  9. package/dist/bank-lwoR1P6d.js +5 -0
  10. package/dist/bank-outline-wy0O9ni0.js +5 -0
  11. package/dist/camera-BXoPauop.js +5 -0
  12. package/dist/cards-outline-B0no8Z63.js +5 -0
  13. package/dist/cards-variant-CU6V8mdM.js +5 -0
  14. package/dist/cart-outline-C99s8OpS.js +4 -0
  15. package/dist/chart-box-outline-C9ymwfIH.js +5 -0
  16. package/dist/chart-box-tyepg_QH.js +5 -0
  17. package/dist/check-circle-C3Kf7DnE.js +5 -0
  18. package/dist/check-circle-outline-B4zmPfuc.js +5 -0
  19. package/dist/check-iUT-FuWa.js +5 -0
  20. package/dist/checkbox-TojXdFTq.js +5 -0
  21. package/dist/checkbox-dark-D_btgwCX.js +5 -0
  22. package/dist/checkbox-indeterminate-CtbmyFkw.js +5 -0
  23. package/dist/checkbox-indeterminate-dark-CSrkJBRG.js +5 -0
  24. package/dist/chevron-down-CJLshITY.js +5 -0
  25. package/dist/chevron-left-n_sGCmlG.js +5 -0
  26. package/dist/chevron-right-C8uLqjmq.js +5 -0
  27. package/dist/chevron-up-b6VdQM8S.js +5 -0
  28. package/dist/circle-DhoEDuC5.js +5 -0
  29. package/dist/clock-BqMI2OIG.js +5 -0
  30. package/dist/close-DemH4JAO.js +5 -0
  31. package/dist/close-circle-Bsf9_pUR.js +4 -0
  32. package/dist/close-circle-outline-CUXfYV4M.js +5 -0
  33. package/dist/cog-Dd9I6z5D.js +5 -0
  34. package/dist/color-fill-DWx77G0p.js +5 -0
  35. package/dist/components/Avatar/Avatar.story.d.ts +9 -0
  36. package/dist/components/Avatar/Avatar.vue.d.ts +58 -0
  37. package/dist/components/Avatar/index.d.ts +6 -0
  38. package/dist/components/Backdrop/Backdrop.vue.d.ts +33 -0
  39. package/dist/components/Backdrop/index.d.ts +6 -0
  40. package/dist/components/Button/Button.story.d.ts +70 -0
  41. package/dist/components/Button/Button.vue.d.ts +153 -0
  42. package/dist/components/Button/index.d.ts +6 -0
  43. package/dist/components/ButtonCopy/ButtonCopy.vue.d.ts +32 -0
  44. package/dist/components/ButtonCopy/index.d.ts +6 -0
  45. package/dist/components/Drawer/Drawer.vue.d.ts +67 -0
  46. package/dist/components/Drawer/index.d.ts +6 -0
  47. package/dist/components/Dropdown/Dropdown.vue.d.ts +117 -0
  48. package/dist/components/Dropdown/index.d.ts +6 -0
  49. package/dist/components/EventListener/EventListener.vue.d.ts +6 -0
  50. package/dist/components/FileDrop/FileDrop.vue.d.ts +40 -0
  51. package/dist/components/FileDrop/index.d.ts +6 -0
  52. package/dist/components/Form/Form.spec.d.ts +1 -0
  53. package/dist/components/Form/Form.vue.d.ts +111 -0
  54. package/dist/components/Form/index.d.ts +6 -0
  55. package/dist/components/FormItem/FormItem.vue.d.ts +41 -0
  56. package/dist/components/FormItem/index.d.ts +6 -0
  57. package/dist/components/GraphyEmpty/GraphyEmpty.vue.d.ts +23 -0
  58. package/dist/components/GraphyEmpty/index.d.ts +6 -0
  59. package/dist/components/GraphyLabel/GraphyLabel.vue.d.ts +43 -0
  60. package/dist/components/GraphyLabel/index.d.ts +6 -0
  61. package/dist/components/GraphyPrice/GraphyPrice.story.d.ts +6 -0
  62. package/dist/components/GraphyPrice/GraphyPrice.vue.d.ts +45 -0
  63. package/dist/components/GraphyPrice/index.d.ts +6 -0
  64. package/dist/components/GraphySubtitle/GraphySubtitle.vue.d.ts +31 -0
  65. package/dist/components/GraphySubtitle/index.d.ts +6 -0
  66. package/dist/components/GraphyTitle/GraphyTitle.vue.d.ts +15 -0
  67. package/dist/components/GraphyTitle/index.d.ts +6 -0
  68. package/dist/components/Icon/Icon.vue.d.ts +40 -0
  69. package/dist/components/Icon/index.d.ts +6 -0
  70. package/dist/components/IconButton/IconButton.vue.d.ts +153 -0
  71. package/dist/components/IconButton/index.d.ts +6 -0
  72. package/dist/components/InputAvatar/InputAvatar.vue.d.ts +19 -0
  73. package/dist/components/InputAvatar/index.d.ts +6 -0
  74. package/dist/components/InputCheckbox/InputCheckbox.vue.d.ts +52 -0
  75. package/dist/components/InputCheckbox/index.d.ts +6 -0
  76. package/dist/components/InputColor/InputColor.vue.d.ts +40 -0
  77. package/dist/components/InputColor/index.d.ts +6 -0
  78. package/dist/components/InputDate/InputDate.story.d.ts +6 -0
  79. package/dist/components/InputDate/InputDate.vue.d.ts +23 -0
  80. package/dist/components/InputDate/index.d.ts +6 -0
  81. package/dist/components/InputMultiplier/InputMultiplier.vue.d.ts +41 -0
  82. package/dist/components/InputMultiplier/index.d.ts +6 -0
  83. package/dist/components/InputMultiplier/input-multiplier.story.d.ts +19 -0
  84. package/dist/components/InputMultiplier/types.d.ts +15 -0
  85. package/dist/components/InputPassword/InputPassword.vue.d.ts +68 -0
  86. package/dist/components/InputPassword/index.d.ts +6 -0
  87. package/dist/components/InputPhone/InputPhone.vue.d.ts +40 -0
  88. package/dist/components/InputPhone/index.d.ts +6 -0
  89. package/dist/components/InputPrice/InputPrice.vue.d.ts +39 -0
  90. package/dist/components/InputPrice/index.d.ts +6 -0
  91. package/dist/components/InputRadio/InputRadio.vue.d.ts +17 -0
  92. package/dist/components/InputRadio/InputRadioGroup.story.d.ts +7 -0
  93. package/dist/components/InputRadio/InputRadioGroup.vue.d.ts +44 -0
  94. package/dist/components/InputRadio/index.d.ts +7 -0
  95. package/dist/components/InputSelect/InputSelect.story.d.ts +6 -0
  96. package/dist/components/InputSelect/InputSelect.vue.d.ts +116 -0
  97. package/dist/components/InputSelect/index.d.ts +6 -0
  98. package/dist/components/InputSwitch/InputSwitch.story.d.ts +29 -0
  99. package/dist/components/InputSwitch/InputSwitch.vue.d.ts +40 -0
  100. package/dist/components/InputSwitch/index.d.ts +6 -0
  101. package/dist/components/InputText/InputText.vue.d.ts +60 -0
  102. package/dist/components/InputText/index.d.ts +6 -0
  103. package/dist/components/InputTextarea/InputTextarea.vue.d.ts +50 -0
  104. package/dist/components/InputTextarea/index.d.ts +6 -0
  105. package/dist/components/LineChart/LineChart.vue.d.ts +17 -0
  106. package/dist/components/LineChart/index.d.ts +6 -0
  107. package/dist/components/Modal/Modal.vue.d.ts +70 -0
  108. package/dist/components/Modal/index.d.ts +6 -0
  109. package/dist/components/ModalForm/ModalForm.vue.d.ts +53 -0
  110. package/dist/components/ModalForm/index.d.ts +6 -0
  111. package/dist/components/Pagination/Pagination.story.d.ts +5 -0
  112. package/dist/components/Pagination/Pagination.vue.d.ts +50 -0
  113. package/dist/components/Pagination/index.d.ts +6 -0
  114. package/dist/components/PieChart/PieChart.vue.d.ts +17 -0
  115. package/dist/components/PieChart/index.d.ts +6 -0
  116. package/dist/components/Popconfirm/Popconfirm.vue.d.ts +49 -0
  117. package/dist/components/Popconfirm/index.d.ts +6 -0
  118. package/dist/components/Popover/Popover.vue.d.ts +68 -0
  119. package/dist/components/Popover/index.d.ts +6 -0
  120. package/dist/components/ProgressCircle/ProgressCircle.story.d.ts +5 -0
  121. package/dist/components/ProgressCircle/ProgressCircle.vue.d.ts +56 -0
  122. package/dist/components/ProgressCircle/index.d.ts +6 -0
  123. package/dist/components/ProgressLine/ProgressLine.story.d.ts +5 -0
  124. package/dist/components/ProgressLine/ProgressLine.vue.d.ts +75 -0
  125. package/dist/components/ProgressLine/index.d.ts +6 -0
  126. package/dist/components/SensitiveInfo/SensitiveInfo.vue.d.ts +22 -0
  127. package/dist/components/SensitiveInfo/index.d.ts +6 -0
  128. package/dist/components/Tab/Tab.vue.d.ts +36 -0
  129. package/dist/components/Tab/index.d.ts +6 -0
  130. package/dist/components/Table/Table.story.d.ts +5 -0
  131. package/dist/components/Table/Table.vue.d.ts +97 -0
  132. package/dist/components/Table/index.d.ts +6 -0
  133. package/dist/components/Table/types.d.ts +13 -0
  134. package/dist/components/Tag/Tag.vue.d.ts +54 -0
  135. package/dist/components/Tag/index.d.ts +6 -0
  136. package/dist/components/Tag/types.d.ts +14 -0
  137. package/dist/components/Toast/Toast.vue.d.ts +21 -0
  138. package/dist/components/Toast/index.d.ts +6 -0
  139. package/dist/components/index.d.ts +43 -0
  140. package/dist/components/plugins.d.ts +45 -0
  141. package/dist/composables/index.d.ts +2 -0
  142. package/dist/composables/useBreakpoints.d.ts +5 -0
  143. package/dist/composables/useRender.d.ts +3 -0
  144. package/dist/copy-D-Dqxp8h.js +5 -0
  145. package/dist/credit-card-B3VjoUad.js +5 -0
  146. package/dist/credit-card-plus-TUZq5Zi0.js +4 -0
  147. package/dist/currency-BuSji4qA.js +5 -0
  148. package/dist/database-CNG_l2Or.js +5 -0
  149. package/dist/dots-grid-BhRGZg1t.js +5 -0
  150. package/dist/dots-vertical-nYIDxlT1.js +5 -0
  151. package/dist/email-open-outline-NlRAK8vu.js +5 -0
  152. package/dist/email-outline-v-beMKo_.js +5 -0
  153. package/dist/enums/app.d.ts +5 -0
  154. package/dist/enums/form.d.ts +23 -0
  155. package/dist/enums/index.d.ts +3 -0
  156. package/{enums/ui.ts → dist/enums/ui.d.ts} +16 -30
  157. package/dist/eye-C7_UM0rn.js +5 -0
  158. package/dist/eye-off-Dq2WOPSG.js +5 -0
  159. package/dist/file-document-plus-outline-C_GeG8ak.js +5 -0
  160. package/dist/filmstrip-Dg66xHap.js +4 -0
  161. package/dist/filter-07gM0IrM.js +5 -0
  162. package/dist/form/convertors.d.ts +3 -0
  163. package/dist/form/crud.d.ts +27 -0
  164. package/dist/form/form-data-transformers.d.ts +4 -0
  165. package/dist/form/form-transformer.d.ts +7 -0
  166. package/dist/form/form-value-transformers.d.ts +8 -0
  167. package/dist/form/form.test.d.ts +1 -0
  168. package/dist/form/json-transformers.d.ts +4 -0
  169. package/dist/fullscreen-daZRwm-1.js +5 -0
  170. package/dist/fullscreen-exit-DvHy2f8E.js +5 -0
  171. package/dist/group-B1HQcmCl.js +5 -0
  172. package/dist/i18n.d.ts +15 -0
  173. package/dist/image-C-DY_SfK.js +5 -0
  174. package/dist/image-album-DVl72ioK.js +5 -0
  175. package/dist/image-album-outline-oiPipPnp.js +5 -0
  176. package/dist/image-outline-CLpFyr7w.js +5 -0
  177. package/dist/index.d.ts +5 -0
  178. package/dist/info-outline-Mn6Hjz_K.js +5 -0
  179. package/dist/key-B8iEXxGx.js +5 -0
  180. package/dist/key-chain-D-8-GrU2.js +5 -0
  181. package/dist/key-variant-DViBRFAJ.js +5 -0
  182. package/dist/listbox-outline-BBriTS-r.js +5 -0
  183. package/dist/loading-E4eFmVsP.js +5 -0
  184. package/dist/lock-Nv-e-b24.js +5 -0
  185. package/dist/lock-outline-K2LxC2b6.js +5 -0
  186. package/dist/logout-BHwFpuou.js +5 -0
  187. package/dist/menu-down-B4Fy5IG1.js +4 -0
  188. package/dist/menu-left-D8G3frKt.js +4 -0
  189. package/dist/menu-pq7WWaJu.js +5 -0
  190. package/dist/menu-right-CMt4thJ2.js +4 -0
  191. package/dist/minus-CSCkQnOm.js +5 -0
  192. package/dist/minus-circle-D_N5NZW-.js +5 -0
  193. package/dist/minus-circle-outline-B-x6EXPD.js +5 -0
  194. package/dist/moon-Bhm_ZTV6.js +5 -0
  195. package/dist/open-in-new-C2Btl_1k.js +5 -0
  196. package/dist/pencil-BETebgXX.js +5 -0
  197. package/dist/people-BUW1DRzH.js +5 -0
  198. package/dist/piggy-bank-outline-5cDQNrSU.js +5 -0
  199. package/dist/plugins/register-component.d.ts +4 -0
  200. package/dist/plus-circle-Cl0YprEp.js +5 -0
  201. package/dist/plus-circle-outline-C-kkX0ke.js +5 -0
  202. package/dist/plus-sbcOm60H.js +5 -0
  203. package/dist/qrcode-scan-CpLrVFw_.js +5 -0
  204. package/dist/radio-DkjVAhsO.js +5 -0
  205. package/dist/radio-dark-Cr5v17AF.js +5 -0
  206. package/dist/refresh-DPlMWd1M.js +5 -0
  207. package/dist/save-BmMH4S8b.js +4 -0
  208. package/dist/search-Co2MwWOK.js +5 -0
  209. package/dist/services/clipboard.d.ts +2 -0
  210. package/dist/services/date.d.ts +16 -0
  211. package/dist/services/password.d.ts +7 -0
  212. package/dist/services/ui.d.ts +9 -0
  213. package/dist/spotlight-TNyCQzOY.js +4 -0
  214. package/dist/store-outline-B-fuVZzv.js +5 -0
  215. package/dist/style.css +1 -0
  216. package/dist/sun-BWKjCEHH.js +5 -0
  217. package/dist/swap-CNbqKTl0.js +5 -0
  218. package/dist/swap-horizontal-DociZUG2.js +5 -0
  219. package/dist/swap-left-Bd2DOgf3.js +5 -0
  220. package/dist/swap-right-D0VYxBDb.js +5 -0
  221. package/dist/system-theme-Cez6mSv_.js +5 -0
  222. package/dist/tag-outline-Ce_qOxif.js +5 -0
  223. package/dist/tamandua.js +15370 -0
  224. package/dist/trash-can-CKPtMqSf.js +5 -0
  225. package/dist/trash-can-outline-DjtqZHOC.js +5 -0
  226. package/{types/address.ts → dist/types/address.d.ts} +0 -5
  227. package/{types/api.ts → dist/types/api.d.ts} +0 -4
  228. package/{types/common.ts → dist/types/common.d.ts} +0 -1
  229. package/{types/form.ts → dist/types/form.d.ts} +37 -67
  230. package/dist/types/index.d.ts +5 -0
  231. package/{types/ui.ts → dist/types/ui.d.ts} +11 -16
  232. package/{types/website.ts → dist/types/website.d.ts} +0 -1
  233. package/dist/upload-CKfrBexU.js +5 -0
  234. package/dist/user-circle-D102n1FB.js +5 -0
  235. package/dist/vite.config.d.mts +2 -0
  236. package/dist/vitest.setup.d.ts +1 -0
  237. package/dist/zip-box-C10560VY.js +5 -0
  238. package/package.json +17 -6
  239. package/.editorconfig +0 -12
  240. package/.prettierrc +0 -5
  241. package/.storybook/main.ts +0 -25
  242. package/.storybook/preview-body.html +0 -3
  243. package/.storybook/preview.ts +0 -24
  244. package/App.vue +0 -1
  245. package/Dockerfile +0 -21
  246. package/assets/icons/account.svg +0 -1
  247. package/assets/icons/alert-octagon-outline.svg +0 -1
  248. package/assets/icons/alert-octagon.svg +0 -1
  249. package/assets/icons/archive-outline.svg +0 -1
  250. package/assets/icons/archive.svg +0 -1
  251. package/assets/icons/arrow-left.svg +0 -1
  252. package/assets/icons/arrow-right.svg +0 -1
  253. package/assets/icons/bank-outline.svg +0 -1
  254. package/assets/icons/bank.svg +0 -1
  255. package/assets/icons/camera.svg +0 -1
  256. package/assets/icons/cards-outline.svg +0 -1
  257. package/assets/icons/cards-variant.svg +0 -1
  258. package/assets/icons/cart-outline.svg +0 -1
  259. package/assets/icons/chart-box-outline.svg +0 -1
  260. package/assets/icons/chart-box.svg +0 -1
  261. package/assets/icons/check-circle-outline.svg +0 -1
  262. package/assets/icons/check-circle.svg +0 -1
  263. package/assets/icons/check.svg +0 -1
  264. package/assets/icons/checkbox-dark.svg +0 -1
  265. package/assets/icons/checkbox-indeterminate-dark.svg +0 -1
  266. package/assets/icons/checkbox-indeterminate.svg +0 -1
  267. package/assets/icons/checkbox.svg +0 -1
  268. package/assets/icons/chevron-down.svg +0 -1
  269. package/assets/icons/chevron-left.svg +0 -1
  270. package/assets/icons/chevron-right.svg +0 -1
  271. package/assets/icons/chevron-up.svg +0 -1
  272. package/assets/icons/circle.svg +0 -1
  273. package/assets/icons/clock.svg +0 -1
  274. package/assets/icons/close-circle-outline.svg +0 -1
  275. package/assets/icons/close-circle.svg +0 -1
  276. package/assets/icons/close.svg +0 -1
  277. package/assets/icons/cog.svg +0 -1
  278. package/assets/icons/color-fill.svg +0 -1
  279. package/assets/icons/copy.svg +0 -1
  280. package/assets/icons/credit-card-plus.svg +0 -1
  281. package/assets/icons/credit-card.svg +0 -1
  282. package/assets/icons/currency.svg +0 -1
  283. package/assets/icons/database.svg +0 -1
  284. package/assets/icons/dots-grid.svg +0 -1
  285. package/assets/icons/dots-vertical.svg +0 -1
  286. package/assets/icons/email-open-outline.svg +0 -1
  287. package/assets/icons/email-outline.svg +0 -1
  288. package/assets/icons/eye-off.svg +0 -1
  289. package/assets/icons/eye.svg +0 -1
  290. package/assets/icons/file-document-plus-outline.svg +0 -1
  291. package/assets/icons/filmstrip.svg +0 -1
  292. package/assets/icons/filter.svg +0 -1
  293. package/assets/icons/fullscreen-exit.svg +0 -1
  294. package/assets/icons/fullscreen.svg +0 -1
  295. package/assets/icons/group.svg +0 -1
  296. package/assets/icons/image-album-outline.svg +0 -1
  297. package/assets/icons/image-album.svg +0 -1
  298. package/assets/icons/image-outline.svg +0 -1
  299. package/assets/icons/image.svg +0 -1
  300. package/assets/icons/info-outline.svg +0 -1
  301. package/assets/icons/key-chain.svg +0 -1
  302. package/assets/icons/key-variant.svg +0 -1
  303. package/assets/icons/key.svg +0 -1
  304. package/assets/icons/listbox-outline.svg +0 -1
  305. package/assets/icons/loading.svg +0 -1
  306. package/assets/icons/lock-outline.svg +0 -1
  307. package/assets/icons/lock.svg +0 -1
  308. package/assets/icons/logout.svg +0 -1
  309. package/assets/icons/menu-down.svg +0 -1
  310. package/assets/icons/menu-left.svg +0 -1
  311. package/assets/icons/menu-right.svg +0 -1
  312. package/assets/icons/menu.svg +0 -1
  313. package/assets/icons/minus-circle-outline.svg +0 -1
  314. package/assets/icons/minus-circle.svg +0 -1
  315. package/assets/icons/minus.svg +0 -1
  316. package/assets/icons/moon.svg +0 -1
  317. package/assets/icons/open-in-new.svg +0 -1
  318. package/assets/icons/pencil.svg +0 -1
  319. package/assets/icons/people.svg +0 -1
  320. package/assets/icons/piggy-bank-outline.svg +0 -1
  321. package/assets/icons/plus-circle-outline.svg +0 -1
  322. package/assets/icons/plus-circle.svg +0 -1
  323. package/assets/icons/plus.svg +0 -1
  324. package/assets/icons/qrcode-scan.svg +0 -1
  325. package/assets/icons/radio-dark.svg +0 -1
  326. package/assets/icons/radio.svg +0 -1
  327. package/assets/icons/refresh.svg +0 -1
  328. package/assets/icons/save.svg +0 -1
  329. package/assets/icons/search.svg +0 -1
  330. package/assets/icons/spotlight.svg +0 -1
  331. package/assets/icons/store-outline.svg +0 -1
  332. package/assets/icons/sun.svg +0 -1
  333. package/assets/icons/swap-horizontal.svg +0 -1
  334. package/assets/icons/swap-left.svg +0 -1
  335. package/assets/icons/swap-right.svg +0 -1
  336. package/assets/icons/swap.svg +0 -1
  337. package/assets/icons/system-theme.svg +0 -1
  338. package/assets/icons/tag-outline.svg +0 -1
  339. package/assets/icons/trash-can-outline.svg +0 -1
  340. package/assets/icons/trash-can.svg +0 -1
  341. package/assets/icons/upload.svg +0 -1
  342. package/assets/icons/user-circle.svg +0 -1
  343. package/assets/icons/zip-box.svg +0 -1
  344. package/assets/images/fs/apk.svg +0 -11
  345. package/assets/images/fs/bmp.svg +0 -7
  346. package/assets/images/fs/css.svg +0 -8
  347. package/assets/images/fs/doc.svg +0 -9
  348. package/assets/images/fs/docx.svg +0 -9
  349. package/assets/images/fs/folder-adwaita.svg +0 -8
  350. package/assets/images/fs/folder-black.svg +0 -8
  351. package/assets/images/fs/folder-brown.svg +0 -8
  352. package/assets/images/fs/folder-grey.svg +0 -8
  353. package/assets/images/fs/folder-nordic.svg +0 -8
  354. package/assets/images/fs/folder-orange.svg +0 -8
  355. package/assets/images/fs/folder-palebrown.svg +0 -8
  356. package/assets/images/fs/folder-paleorange.svg +0 -8
  357. package/assets/images/fs/folder-teal.svg +0 -8
  358. package/assets/images/fs/folder-white.svg +0 -8
  359. package/assets/images/fs/folder-yellow.svg +0 -8
  360. package/assets/images/fs/gif.svg +0 -7
  361. package/assets/images/fs/go.svg +0 -9
  362. package/assets/images/fs/ics.svg +0 -24
  363. package/assets/images/fs/iso.svg +0 -10
  364. package/assets/images/fs/jpeg.svg +0 -7
  365. package/assets/images/fs/jpg.svg +0 -7
  366. package/assets/images/fs/js.svg +0 -9
  367. package/assets/images/fs/json.svg +0 -9
  368. package/assets/images/fs/lua.svg +0 -9
  369. package/assets/images/fs/m4v.svg +0 -7
  370. package/assets/images/fs/md.svg +0 -10
  371. package/assets/images/fs/mov.svg +0 -7
  372. package/assets/images/fs/mp3.svg +0 -9
  373. package/assets/images/fs/mp4.svg +0 -7
  374. package/assets/images/fs/pdf.svg +0 -9
  375. package/assets/images/fs/pgp.svg +0 -8
  376. package/assets/images/fs/php.svg +0 -9
  377. package/assets/images/fs/png.svg +0 -7
  378. package/assets/images/fs/ppt.svg +0 -9
  379. package/assets/images/fs/py.svg +0 -9
  380. package/assets/images/fs/rar.svg +0 -20
  381. package/assets/images/fs/rpm.svg +0 -7
  382. package/assets/images/fs/rs.svg +0 -9
  383. package/assets/images/fs/sh.svg +0 -9
  384. package/assets/images/fs/tar.svg +0 -20
  385. package/assets/images/fs/txt.svg +0 -8
  386. package/assets/images/fs/unknown.svg +0 -8
  387. package/assets/images/fs/xls.svg +0 -9
  388. package/assets/images/fs/xlsx.svg +0 -9
  389. package/assets/images/fs/xml.svg +0 -8
  390. package/assets/images/fs/yaml.svg +0 -9
  391. package/assets/images/fs/zip.svg +0 -20
  392. package/components/Avatar/Avatar.story.ts +0 -55
  393. package/components/Avatar/Avatar.vue +0 -82
  394. package/components/Avatar/index.ts +0 -12
  395. package/components/Backdrop/Backdrop.vue +0 -27
  396. package/components/Backdrop/index.ts +0 -12
  397. package/components/Button/Button.story.ts +0 -74
  398. package/components/Button/Button.vue +0 -230
  399. package/components/Button/index.ts +0 -12
  400. package/components/ButtonCopy/ButtonCopy.vue +0 -61
  401. package/components/ButtonCopy/index.ts +0 -12
  402. package/components/Drawer/Drawer.vue +0 -102
  403. package/components/Drawer/index.ts +0 -12
  404. package/components/Dropdown/Dropdown.vue +0 -258
  405. package/components/Dropdown/index.ts +0 -12
  406. package/components/EventListener/EventListener.vue +0 -12
  407. package/components/FileDrop/FileDrop.vue +0 -116
  408. package/components/FileDrop/index.ts +0 -12
  409. package/components/Form/Form.spec.ts +0 -72
  410. package/components/Form/Form.vue +0 -134
  411. package/components/Form/index.ts +0 -12
  412. package/components/FormItem/FormItem.vue +0 -85
  413. package/components/FormItem/index.ts +0 -12
  414. package/components/GraphyEmpty/GraphyEmpty.vue +0 -16
  415. package/components/GraphyEmpty/index.ts +0 -12
  416. package/components/GraphyLabel/GraphyLabel.vue +0 -34
  417. package/components/GraphyLabel/index.ts +0 -12
  418. package/components/GraphyPrice/GraphyPrice.story.ts +0 -37
  419. package/components/GraphyPrice/GraphyPrice.vue +0 -65
  420. package/components/GraphyPrice/index.ts +0 -12
  421. package/components/GraphySubtitle/GraphySubtitle.vue +0 -22
  422. package/components/GraphySubtitle/index.ts +0 -12
  423. package/components/GraphyTitle/GraphyTitle.vue +0 -13
  424. package/components/GraphyTitle/index.ts +0 -12
  425. package/components/Icon/Icon.vue +0 -84
  426. package/components/Icon/index.ts +0 -12
  427. package/components/IconButton/IconButton.vue +0 -168
  428. package/components/IconButton/index.ts +0 -12
  429. package/components/InputAvatar/InputAvatar.vue +0 -63
  430. package/components/InputAvatar/index.ts +0 -12
  431. package/components/InputCheckbox/InputCheckbox.vue +0 -77
  432. package/components/InputCheckbox/index.ts +0 -12
  433. package/components/InputColor/InputColor.vue +0 -54
  434. package/components/InputColor/index.ts +0 -12
  435. package/components/InputDate/InputDate.story.ts +0 -15
  436. package/components/InputDate/InputDate.vue +0 -368
  437. package/components/InputDate/index.ts +0 -12
  438. package/components/InputMultiplier/InputMultiplier.vue +0 -144
  439. package/components/InputMultiplier/index.ts +0 -12
  440. package/components/InputPassword/InputPassword.vue +0 -168
  441. package/components/InputPassword/index.ts +0 -12
  442. package/components/InputPhone/InputPhone.vue +0 -125
  443. package/components/InputPhone/index.ts +0 -12
  444. package/components/InputPrice/InputPrice.vue +0 -96
  445. package/components/InputPrice/index.ts +0 -12
  446. package/components/InputRadio/InputRadio.vue +0 -41
  447. package/components/InputRadio/InputRadioGroup.story.ts +0 -24
  448. package/components/InputRadio/InputRadioGroup.vue +0 -48
  449. package/components/InputRadio/index.ts +0 -14
  450. package/components/InputSelect/InputSelect.story.ts +0 -87
  451. package/components/InputSelect/InputSelect.vue +0 -507
  452. package/components/InputSelect/index.ts +0 -12
  453. package/components/InputSwitch/InputSwitch.story.ts +0 -34
  454. package/components/InputSwitch/InputSwitch.vue +0 -82
  455. package/components/InputSwitch/index.ts +0 -12
  456. package/components/InputText/InputText.vue +0 -62
  457. package/components/InputText/index.ts +0 -12
  458. package/components/InputTextarea/InputTextarea.vue +0 -64
  459. package/components/InputTextarea/index.ts +0 -12
  460. package/components/LineChart/LineChart.vue +0 -14
  461. package/components/LineChart/index.ts +0 -12
  462. package/components/Modal/Modal.vue +0 -106
  463. package/components/Modal/index.ts +0 -12
  464. package/components/ModalForm/ModalForm.vue +0 -141
  465. package/components/ModalForm/index.ts +0 -12
  466. package/components/Pagination/Pagination.story.ts +0 -15
  467. package/components/Pagination/Pagination.vue +0 -138
  468. package/components/Pagination/index.ts +0 -12
  469. package/components/PieChart/PieChart.vue +0 -14
  470. package/components/PieChart/index.ts +0 -12
  471. package/components/Popconfirm/Popconfirm.vue +0 -80
  472. package/components/Popconfirm/index.ts +0 -12
  473. package/components/Popover/Popover.vue +0 -133
  474. package/components/Popover/index.ts +0 -12
  475. package/components/ProgressCircle/ProgressCircle.story.ts +0 -31
  476. package/components/ProgressCircle/ProgressCircle.vue +0 -82
  477. package/components/ProgressCircle/index.ts +0 -12
  478. package/components/ProgressLine/ProgressLine.story.ts +0 -27
  479. package/components/ProgressLine/ProgressLine.vue +0 -104
  480. package/components/ProgressLine/index.ts +0 -12
  481. package/components/SensitiveInfo/SensitiveInfo.vue +0 -18
  482. package/components/SensitiveInfo/index.ts +0 -12
  483. package/components/Tab/Tab.vue +0 -58
  484. package/components/Tab/index.ts +0 -12
  485. package/components/Table/Table.story.ts +0 -32
  486. package/components/Table/Table.vue +0 -318
  487. package/components/Table/index.ts +0 -12
  488. package/components/Tag/Tag.vue +0 -73
  489. package/components/Tag/index.ts +0 -12
  490. package/components/Toast/Toast.vue +0 -75
  491. package/components/Toast/index.ts +0 -12
  492. package/components/index.ts +0 -43
  493. package/components/plugins.ts +0 -89
  494. package/composables/index.ts +0 -2
  495. package/composables/useBreakpoints.ts +0 -30
  496. package/composables/useRender.ts +0 -29
  497. package/entrypoint.sh +0 -19
  498. package/enums/app.ts +0 -5
  499. package/enums/form.ts +0 -25
  500. package/env.d.ts +0 -8
  501. package/i18n.ts +0 -20
  502. package/index.css +0 -383
  503. package/index.html +0 -22
  504. package/index.ts +0 -14
  505. package/main.ts +0 -31
  506. package/plugins/register-component.ts +0 -5
  507. package/postcss.config.js +0 -6
  508. package/services/clipboard.ts +0 -5
  509. package/services/date.ts +0 -27
  510. package/services/form/crud.ts +0 -109
  511. package/services/form/form-data-transformers.ts +0 -148
  512. package/services/form/form-json-transformers.ts +0 -91
  513. package/services/form/form-transformer.ts +0 -54
  514. package/services/form/form-value-transformers.ts +0 -35
  515. package/services/form/form.test.ts +0 -98
  516. package/services/form/form.ts +0 -80
  517. package/services/password.ts +0 -309
  518. package/services/ui.ts +0 -43
  519. package/tailwind.config.js +0 -16
  520. package/tsconfig.json +0 -23
  521. package/types/index.ts +0 -5
  522. package/vite.config.mts +0 -38
  523. package/vitest.setup.ts +0 -21
@@ -1,230 +0,0 @@
1
- <script lang="ts" setup>
2
- import {
3
- ButtonType,
4
- ElementSize,
5
- ElementShape,
6
- Icon as EIcon,
7
- ElementVariant,
8
- } from "@/enums/ui";
9
-
10
- import uiService from "@/services/ui";
11
- import { computed, ref, getCurrentInstance } from "vue";
12
-
13
- import Icon from "@/components/Icon/Icon.vue";
14
-
15
- defineOptions({ name: "TButton" });
16
-
17
- export type ButtonProps = {
18
- to?: any;
19
- icon?: `${EIcon}`;
20
- href?: string;
21
- type?: `${ButtonType}`;
22
- size?: `${ElementSize}`;
23
- label?: string;
24
- shape?: `${ElementShape}`;
25
- target?: string;
26
- variant?: `${ElementVariant}`;
27
- multiple?: boolean;
28
- isOutline?: boolean;
29
- isDisabled?: boolean;
30
- injectStyle?: { icon: string };
31
- disableStyle?: boolean;
32
- };
33
-
34
- const props = withDefaults(defineProps<ButtonProps>(), {
35
- href: "",
36
- type: ButtonType.BUTTON,
37
- size: ElementSize.DEFAULT,
38
- label: "",
39
- shape: ElementShape.ROUNDED,
40
- target: undefined,
41
- variant: ElementVariant.DEFAULT,
42
- multiple: false,
43
- isOutline: false,
44
- isDisabled: false,
45
- injectStyle: () => ({ icon: "" }),
46
- disableStyle: false,
47
- });
48
-
49
- const emit = defineEmits<{
50
- (e: "upload", val: FileList): void;
51
- }>();
52
-
53
- const instance = getCurrentInstance();
54
- const fileInput = ref<HTMLInputElement>();
55
- const iconReference = ref<InstanceType<typeof Icon> | null>(null);
56
-
57
- const link = computed<string | undefined>(() => {
58
- return props.href ? props.href : undefined;
59
- });
60
-
61
- const shadowType = computed<string | undefined>(() => {
62
- switch (props.type) {
63
- case ButtonType.LINK:
64
- return undefined;
65
- case ButtonType.FILE:
66
- return "button";
67
- default:
68
- return props.type;
69
- }
70
- });
71
-
72
- const value = computed<string | undefined>(() => {
73
- return props.type === ButtonType.SUBMIT ? props.label : undefined;
74
- });
75
-
76
- const element = computed<string>(() => {
77
- switch (props.type) {
78
- case ButtonType.SUBMIT:
79
- return "input";
80
- case ButtonType.LINK:
81
- return "a";
82
- case ButtonType.ROUTER_LINK:
83
- return "router-link";
84
- default:
85
- return "button";
86
- }
87
- });
88
-
89
- const onClick = (e: MouseEvent): void => {
90
- if (instance && uiService.isPopoverActivator(instance)) {
91
- uiService.onPopoverActivatorClick(e, instance);
92
- }
93
-
94
- if (props.type === ButtonType.SUBMIT) {
95
- e.preventDefault();
96
- }
97
-
98
- if (props.type === ButtonType.FILE) {
99
- fileInput.value?.click();
100
- }
101
- };
102
-
103
- const onFileChange = (e: Event) => {
104
- e.stopPropagation();
105
-
106
- const element: HTMLInputElement = e.target as HTMLInputElement;
107
- const files: FileList | null = element.files;
108
-
109
- if (!files || !files.length) {
110
- return;
111
- }
112
-
113
- emit("upload", files);
114
- };
115
-
116
- defineExpose({ iconReference });
117
- </script>
118
-
119
- <template>
120
- <component
121
- :is="element"
122
- :type="shadowType"
123
- :href="link"
124
- :value="value"
125
- :to="props.to"
126
- :disabled="props.isDisabled"
127
- :target="props.target"
128
- :class="{
129
- 'font-bold': !props.disableStyle,
130
- 'opacity-50': props.isDisabled,
131
-
132
- // Padding
133
- 'px-1 py-0':
134
- !props.disableStyle && props.size === ElementSize.EXTRA_SMALL,
135
- 'px-4 h-9': !props.disableStyle && props.size === ElementSize.SMALL,
136
- 'px-4 py-2 h-10':
137
- !props.disableStyle && props.size === ElementSize.DEFAULT,
138
-
139
- // Border
140
- border: props.isOutline,
141
-
142
- // Shape
143
- 'rounded-full': props.shape === ElementShape.CIRCLE,
144
- 'input-roundness': props.shape === ElementShape.ROUNDED,
145
-
146
- // Cursor
147
- 'cursor-pointer': !props.isDisabled,
148
- 'cursor-not-allowed': props.isDisabled,
149
-
150
- // Default color
151
- 'border-caipira-primary-inverted fill-caipira-primary-inverted':
152
- props.variant === ElementVariant.DEFAULT,
153
- 'bg-transparent color-caipira-primary-inverted hover:bg-caipira-primary-inverted hover:color-caipira-primary hover:fill-white':
154
- props.variant === ElementVariant.DEFAULT && props.isOutline,
155
- 'bg-caipira-primary-inverted color-caipira-primary':
156
- props.variant === ElementVariant.DEFAULT && !props.isOutline,
157
-
158
- // Primary color
159
- 'fill-caipira-primary': props.variant === ElementVariant.PRIMARY,
160
- 'bg-transparent border-caipira-blue color-caipira-blue hover:bg-caipira-blue hover:color-caipira-primary hover:fill-white':
161
- props.variant === ElementVariant.PRIMARY && props.isOutline,
162
- 'bg-caipira-blue color-caipira-primary':
163
- props.variant === ElementVariant.PRIMARY && !props.isOutline,
164
-
165
- // Success color
166
- 'fill-caipira-green': props.variant === ElementVariant.SUCCESS,
167
- 'bg-transparent border-caipira-green color-caipira-green hover:bg-caipira-green hover:color-caipira-primary hover:fill-white':
168
- props.variant === ElementVariant.SUCCESS && props.isOutline,
169
- 'bg-caipira-green color-caipira-primary':
170
- props.variant === ElementVariant.SUCCESS && !props.isOutline,
171
-
172
- // Warning color
173
- 'fill-caipira-yellow': props.variant === ElementVariant.WARNING,
174
- 'bg-transparent border-caipira-yellow color-caipira-yellow hover:bg-caipira-yellow hover:color-caipira-primary hover:fill-white':
175
- props.variant === ElementVariant.WARNING && props.isOutline,
176
- 'bg-caipira-yellow color-caipira-primary':
177
- props.variant === ElementVariant.WARNING && !props.isOutline,
178
-
179
- // Danger color
180
- 'fill-caipira-red': props.variant === ElementVariant.DANGER,
181
- 'bg-transparent border-caipira-red color-caipira-red hover:bg-caipira-red hover:color-caipira-primary hover:fill-white':
182
- props.variant === ElementVariant.DANGER && props.isOutline,
183
- 'bg-caipira-red color-caipira-primary':
184
- props.variant === ElementVariant.DANGER && !props.isOutline,
185
-
186
- // Transparent color
187
- 'transparent-button': props.variant === ElementVariant.TRANSPARENT,
188
- }"
189
- class="input-outline inline-flex items-center"
190
- role="button"
191
- @click="onClick"
192
- >
193
- <slot />
194
- <t-icon
195
- v-if="props.icon"
196
- ref="iconReference"
197
- :size="props.size"
198
- :icon="props.icon"
199
- :is-outline="props.isOutline"
200
- :class="{
201
- [props.injectStyle.icon]: true,
202
- }"
203
- />
204
- <span
205
- v-if="props.label && props.type !== ButtonType.SUBMIT"
206
- :class="{
207
- 'ml-2': !!props.icon,
208
- 'text-lg': props.size === ElementSize.LARGE,
209
- 'text-sm': props.size === ElementSize.SMALL,
210
- 'text-xs': props.size === ElementSize.EXTRA_SMALL,
211
- }"
212
- class="whitespace-nowrap"
213
- >{{ props.label }}</span
214
- >
215
- <input
216
- v-if="props.type === 'file'"
217
- :multiple="props.multiple"
218
- @change="onFileChange"
219
- type="file"
220
- ref="fileInput"
221
- class="hidden"
222
- />
223
- </component>
224
- </template>
225
-
226
- <style scoped>
227
- .transparent-button:hover {
228
- background-color: rgb(from var(--caipira-primary) r g b / 45%);
229
- }
230
- </style>
@@ -1,12 +0,0 @@
1
- import type { App, Plugin } from "vue";
2
- import registerComponent from "@/plugins/register-component";
3
-
4
- import Button from "./Button.vue";
5
-
6
- export default {
7
- install(app: App) {
8
- registerComponent(app, Button);
9
- },
10
- } as Plugin;
11
-
12
- export { Button };
@@ -1,61 +0,0 @@
1
- <template>
2
- <t-icon-button
3
- :is-disabled="isLoading || props.isDisabled"
4
- icon="copy"
5
- size="xs"
6
- ref="buttonRef"
7
- @click="onCopy"
8
- />
9
- </template>
10
-
11
- <script lang="ts" setup>
12
- import { ref } from "vue";
13
- import { gsap } from "gsap";
14
- import copyToClipboard from "@/services/clipboard";
15
-
16
- import UiButton from "@/components/Button/Button.vue";
17
-
18
- defineOptions({ name: "TButtonCopy" });
19
-
20
- const buttonRef = ref<InstanceType<typeof UiButton> | null>(null);
21
- const isLoading = ref<boolean>(false);
22
-
23
- type Text = (() => Promise<string>) | string;
24
-
25
- const props = withDefaults(
26
- defineProps<{
27
- text: Text;
28
- isDisabled?: boolean;
29
- }>(),
30
- {
31
- isDisabled: false,
32
- },
33
- );
34
-
35
- const onCopy = async (e: MouseEvent) => {
36
- isLoading.value = true;
37
-
38
- e.stopPropagation();
39
-
40
- const text =
41
- typeof props.text === "function" ? await props.text() : props.text;
42
- const copyElement = buttonRef.value?.iconReference?.reference;
43
-
44
- await copyToClipboard(text);
45
-
46
- if (copyElement) {
47
- gsap.to(copyElement, {
48
- scale: 4,
49
- yoyo: true,
50
- opacity: 0,
51
- duration: 0.2,
52
- ease: "power3.easeInOut",
53
- onComplete: () => {
54
- gsap.set(copyElement, { opacity: 1, scale: 1 });
55
- },
56
- });
57
- }
58
-
59
- isLoading.value = false;
60
- };
61
- </script>
@@ -1,12 +0,0 @@
1
- import type { App, Plugin } from "vue";
2
- import registerComponent from "@/plugins/register-component";
3
-
4
- import ButtonCopy from "./ButtonCopy.vue";
5
-
6
- export default {
7
- install(app: App) {
8
- registerComponent(app, ButtonCopy);
9
- },
10
- } as Plugin;
11
-
12
- export { ButtonCopy };
@@ -1,102 +0,0 @@
1
- <script lang="ts" setup>
2
- import { onMounted, ref } from "vue";
3
-
4
- import Backdrop from "@/components/Backdrop/Backdrop.vue";
5
-
6
- defineOptions({ name: "TDrawer" });
7
-
8
- const props = withDefaults(
9
- defineProps<{
10
- title?: string;
11
- style?: { footer: string };
12
- direction?: "rtl" | "ltr";
13
- showHeader?: boolean;
14
- }>(),
15
- {
16
- title: "",
17
- style: () => ({
18
- footer: "",
19
- }),
20
- direction: "rtl",
21
- showHeader: true,
22
- },
23
- );
24
-
25
- const emit = defineEmits<{
26
- (e: "closed"): void;
27
- }>();
28
-
29
- const modal = ref<InstanceType<typeof HTMLElement> | null>(null);
30
-
31
- const onClose = (e: MouseEvent | KeyboardEvent) => {
32
- e.stopPropagation();
33
-
34
- emit("closed");
35
- };
36
-
37
- onMounted(() => {
38
- modal.value?.focus();
39
- });
40
- </script>
41
-
42
- <template>
43
- <div
44
- class="fixed inset-0 flex items-center z-10"
45
- tabindex="0"
46
- ref="modal"
47
- @keyup.esc="onClose"
48
- >
49
- <Backdrop @click="onClose" />
50
- <div
51
- class="w-[38rem] absolute inset-y-0 z-20 flex flex-col bg-caipira-primary drawer"
52
- :class="{
53
- 'right-0 drop-shadow-lg': props.direction === 'ltr',
54
- 'left-0': props.direction === 'rtl',
55
- }"
56
- >
57
- <div
58
- v-if="props.showHeader"
59
- class="flex justify-between items-center p-4 border-b border-color"
60
- >
61
- <div v-if="$slots.header">
62
- <slot name="header" />
63
- </div>
64
- <span
65
- v-else
66
- class="inline-block text-base"
67
- >
68
- {{ props.title }}
69
- </span>
70
- <t-icon
71
- icon="close"
72
- role="button"
73
- @click="onClose"
74
- size="sm"
75
- />
76
- </div>
77
- <div
78
- class="flex flex-col flex-1 relative overflow-y-auto scrollbar"
79
- >
80
- <slot />
81
- </div>
82
- <div
83
- v-if="$slots.footer"
84
- class="p-4 border-t border-color"
85
- :class="{
86
- [style.footer]: true,
87
- }"
88
- >
89
- <slot name="footer" />
90
- </div>
91
- </div>
92
- </div>
93
- </template>
94
-
95
- <style scoped>
96
- .drawer {
97
- box-shadow:
98
- rgba(0, 0, 0, 0.2) 0px 8px 10px -5px,
99
- rgba(0, 0, 0, 0.14) 0px 16px 24px 2px,
100
- rgba(0, 0, 0, 0.12) 0px 6px 30px 5px;
101
- }
102
- </style>
@@ -1,12 +0,0 @@
1
- import type { App, Plugin } from "vue";
2
- import registerComponent from "@/plugins/register-component";
3
-
4
- import Drawer from "./Drawer.vue";
5
-
6
- export default {
7
- install(app: App) {
8
- registerComponent(app, Drawer);
9
- },
10
- } as Plugin;
11
-
12
- export { Drawer };
@@ -1,258 +0,0 @@
1
- <script lang="ts" setup>
2
- import { SelectOption } from "@/types/form";
3
-
4
- import { getCurrentInstance, ref } from "vue";
5
-
6
- export interface SelectEvent {
7
- index: number;
8
- option: SelectOption;
9
- hold: boolean;
10
- }
11
-
12
- defineOptions({ name: "TDropdown" });
13
-
14
- const props = withDefaults(
15
- defineProps<{
16
- items?: SelectOption[];
17
- owner?: string;
18
- multiple?: boolean;
19
- isVisible?: boolean;
20
-
21
- optionMarginClass?: string;
22
- optionPaddingClass?: string;
23
- optionRoundnessClass?: string;
24
- wrapperRoundnessClass?: string;
25
- wrapperPaddingClass?: string;
26
- }>(),
27
- {
28
- items: () => [],
29
- multiple: false,
30
- isVisible: false,
31
-
32
- optionMarginClass: "",
33
- optionPaddingClass: "py-2 px-2",
34
- optionRoundnessClass: "",
35
- wrapperRoundnessClass: "rounded-md",
36
- wrapperPaddingClass: "",
37
- },
38
- );
39
-
40
- const emit = defineEmits<{
41
- (e: "change", val: SelectEvent): void;
42
- (e: "end-reached"): void;
43
- (e: "created", val: ReturnType<typeof getCurrentInstance>): void;
44
- }>();
45
-
46
- const current = ref<number>(-1);
47
- const listRef = ref<InstanceType<typeof HTMLUListElement> | null>(null);
48
- const itemRefs = ref<InstanceType<typeof HTMLUListElement>[]>([]);
49
- const movementSource = ref<"mouse" | "keyboard">("keyboard");
50
-
51
- const onSelect = (
52
- index: number = current.value,
53
- option: SelectOption = props.items[index],
54
- event: MouseEvent | undefined = undefined,
55
- ) => {
56
- event?.stopPropagation();
57
-
58
- emit("change", {
59
- index,
60
- option,
61
- hold: event?.ctrlKey ?? false,
62
- });
63
-
64
- if (option.action) {
65
- option.action();
66
- }
67
- };
68
-
69
- const listen = (e: KeyboardEvent) => {
70
- if (!props.isVisible) {
71
- return false;
72
- }
73
-
74
- e.preventDefault();
75
-
76
- movementSource.value = "keyboard";
77
-
78
- switch (e.key) {
79
- case "ArrowUp":
80
- case "ArrowDown":
81
- return move(e);
82
- case "Enter":
83
- return onSelect();
84
- }
85
- };
86
-
87
- const move = (e: KeyboardEvent) => {
88
- const down = e.key === "ArrowDown";
89
- const amountOfItems = props.items.length;
90
-
91
- let newIndex = current.value;
92
-
93
- const isNotAnOption = (): boolean => {
94
- if (!props.items[newIndex]) {
95
- return false;
96
- }
97
-
98
- return (
99
- "isGroupLabel" in props.items[newIndex] &&
100
- (props.items[newIndex].isGroupLabel as boolean)
101
- );
102
- };
103
-
104
- const increase = () => {
105
- if (newIndex === amountOfItems - 1) {
106
- newIndex = 0; // If at the last item, jump to the first item
107
- } else {
108
- newIndex++; // Move to the next item
109
- }
110
- };
111
-
112
- const decrease = () => {
113
- if (newIndex === 0) {
114
- newIndex = amountOfItems - 1; // If at the first item, jump to the last item
115
- } else {
116
- newIndex--; // Move to the previous item
117
- }
118
- };
119
-
120
- if (down) {
121
- do increase();
122
- while (isNotAnOption());
123
- } else {
124
- do decrease();
125
- while (isNotAnOption());
126
- }
127
-
128
- if (newIndex > -1 && newIndex < amountOfItems) {
129
- current.value = newIndex;
130
- }
131
-
132
- const ul = listRef.value as HTMLElement;
133
- const li = itemRefs.value[current.value] as HTMLUListElement;
134
- const liPos = li.offsetTop;
135
- const liHeight = li.offsetHeight;
136
- const ulHeight = ul.offsetHeight;
137
- const scroll = ul.scrollTop;
138
-
139
- let height = 0;
140
-
141
- li.focus();
142
-
143
- if (liPos === 0 || scroll === 0) {
144
- height = liPos - ulHeight + liHeight;
145
- } else if (down && liPos + liHeight > ulHeight + scroll) {
146
- height = scroll + liHeight;
147
- } else if (!down && liPos < scroll) {
148
- height = scroll - liHeight;
149
- } else {
150
- return true;
151
- }
152
-
153
- ul.scroll({ top: height });
154
-
155
- return true;
156
- };
157
-
158
- const onScrollEnd = (e: MouseEvent) => {
159
- const el = e.target as HTMLElement;
160
- const li = itemRefs.value[0] as HTMLElement;
161
-
162
- if (!el || !li) {
163
- return;
164
- }
165
-
166
- if (el.scrollTop + el.clientHeight + li.offsetHeight >= el.scrollHeight) {
167
- emit("end-reached");
168
- }
169
- };
170
-
171
- defineExpose({ move });
172
- </script>
173
-
174
- <template>
175
- <ul
176
- ref="listRef"
177
- role="listbox"
178
- class="text-left max-h-60 min-w-[12rem] z-10 overflow-y-auto scrollbar select-none floatable"
179
- :class="[props.wrapperRoundnessClass, props.wrapperPaddingClass]"
180
- @scrollend="onScrollEnd"
181
- @mousemove="() => (movementSource = 'mouse')"
182
- @keydown="listen"
183
- >
184
- <!-- Empty placeholder -->
185
- <li
186
- v-if="items.length === 0"
187
- role="option"
188
- aria-disabled="true"
189
- class="whitespace-nowrap text-gray-400"
190
- :class="[
191
- props.optionPaddingClass,
192
- props.optionMarginClass,
193
- props.optionRoundnessClass,
194
- ]"
195
- >
196
- Nothing here
197
- </li>
198
-
199
- <template
200
- v-else
201
- v-for="(option, i) in items"
202
- :key="i"
203
- >
204
- <!-- Group label -->
205
- <li
206
- v-if="option.isGroupLabel"
207
- class="text-xs font-bold tracking-wider text-neutral-600"
208
- :class="[
209
- props.optionPaddingClass,
210
- props.optionMarginClass,
211
- props.optionRoundnessClass,
212
- ]"
213
- ref="itemRefs"
214
- >
215
- {{ option.label }}
216
- </li>
217
-
218
- <!-- Dropdown item -->
219
- <li
220
- v-else
221
- :class="{
222
- 'bg-hover': i === current && movementSource === 'keyboard',
223
- 'hover:bg-hover': movementSource === 'mouse',
224
- [props.optionMarginClass]: true,
225
- [props.optionPaddingClass]: true,
226
- [props.optionRoundnessClass]: true,
227
- }"
228
- class="flex text-base cursor-pointer whitespace-nowrap items-center focus-visible:outline-none"
229
- role="option"
230
- ref="itemRefs"
231
- :tabindex="0"
232
- :aria-selected="i === current"
233
- @keydown.enter="onSelect(i, option)"
234
- @click="(e) => onSelect(i, option, e)"
235
- >
236
- <!-- Slot for custom renderer -->
237
- <slot
238
- v-if="!!$slots.default"
239
- v-bind="option"
240
- />
241
-
242
- <!-- Default renderer -->
243
- <div
244
- v-else
245
- class="inline-flex items-center input-label"
246
- >
247
- <t-icon
248
- v-if="option.icon"
249
- :icon="option.icon"
250
- class="mr-2"
251
- size="xs"
252
- />
253
- {{ option.label }}
254
- </div>
255
- </li>
256
- </template>
257
- </ul>
258
- </template>
@@ -1,12 +0,0 @@
1
- import type { App, Plugin } from "vue";
2
- import registerComponent from "@/plugins/register-component";
3
-
4
- import Dropdown from "./Dropdown.vue";
5
-
6
- export default {
7
- install(app: App) {
8
- registerComponent(app, Dropdown);
9
- },
10
- } as Plugin;
11
-
12
- export { Dropdown };