vueless 0.0.4 → 0.0.5

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 (318) hide show
  1. package/package.json +1 -1
  2. package/src/library.web-types-gen/index.js +17 -0
  3. package/src/library.web-types-gen/lib/build.js +252 -0
  4. package/src/library.web-types-gen/lib/config.js +32 -0
  5. package/src/library.web-types-gen/package.json +3 -0
  6. package/src/plugin.vite/index.js +59 -0
  7. package/src/plugin.vite/services/iconResolver.service.js +291 -0
  8. package/src/plugin.vite/services/svgLoader.service.js +76 -0
  9. package/src/plugin.vite/services/tailwindSafelist.service.js +195 -0
  10. package/src/plugin.vite/services/unpluginComponentsResolver.js +172 -0
  11. package/src/service.storybook/index.js +91 -0
  12. package/src/ui.button/Docs.mdx +16 -0
  13. package/src/ui.button/composables/attrs.composable.js +41 -0
  14. package/src/ui.button/configs/default.config.js +165 -0
  15. package/src/ui.button/constants/index.js +5 -0
  16. package/src/ui.button/index.stories.js +166 -0
  17. package/src/ui.button/index.vue +152 -0
  18. package/src/ui.button-link/Docs.mdx +16 -0
  19. package/src/ui.button-link/composables/attrs.composable.js +99 -0
  20. package/src/ui.button-link/configs/default.config.js +80 -0
  21. package/src/ui.button-link/constants/index.js +5 -0
  22. package/src/ui.button-link/index.stories.js +158 -0
  23. package/src/ui.button-link/index.vue +226 -0
  24. package/src/ui.button-toggle/Docs.mdx +16 -0
  25. package/src/ui.button-toggle/composables/attrs.composable.js +16 -0
  26. package/src/ui.button-toggle/configs/default.config.js +12 -0
  27. package/src/ui.button-toggle/constants/index.js +7 -0
  28. package/src/ui.button-toggle/index.stories.js +155 -0
  29. package/src/ui.button-toggle/index.vue +128 -0
  30. package/src/ui.button-toggle-item/Docs.mdx +16 -0
  31. package/src/ui.button-toggle-item/composables/attrs.composable.js +53 -0
  32. package/src/ui.button-toggle-item/configs/default.config.js +58 -0
  33. package/src/ui.button-toggle-item/constants/index.js +5 -0
  34. package/src/ui.button-toggle-item/index.stories.js +77 -0
  35. package/src/ui.button-toggle-item/index.vue +147 -0
  36. package/src/ui.container-accordion/composables/attrs.composable.js +45 -0
  37. package/src/ui.container-accordion/configs/default.config.js +32 -0
  38. package/src/ui.container-accordion/constants/index.js +5 -0
  39. package/src/ui.container-accordion/index.stories.js +89 -0
  40. package/src/ui.container-accordion/index.vue +95 -0
  41. package/src/ui.container-card/Docs.mdx +16 -0
  42. package/src/ui.container-card/composable/attrs.composable.js +56 -0
  43. package/src/ui.container-card/configs/default.config.js +31 -0
  44. package/src/ui.container-card/constants/index.js +5 -0
  45. package/src/ui.container-card/index.stories.js +170 -0
  46. package/src/ui.container-card/index.vue +146 -0
  47. package/src/ui.container-divider/Docs.mdx +16 -0
  48. package/src/ui.container-divider/configs/default.config.js +79 -0
  49. package/src/ui.container-divider/index.stories.js +124 -0
  50. package/src/ui.container-group/Docs.mdx +16 -0
  51. package/src/ui.container-group/composables/attrs.composable.js +44 -0
  52. package/src/ui.container-group/configs/default.config.js +29 -0
  53. package/src/ui.container-group/constants/index.js +5 -0
  54. package/src/ui.container-group/index.stories.js +88 -0
  55. package/src/ui.container-group/index.vue +106 -0
  56. package/src/ui.container-groups/Docs.mdx +16 -0
  57. package/src/ui.container-groups/composables/attrs.composable.js +12 -0
  58. package/src/ui.container-groups/configs/default.config.js +3 -0
  59. package/src/ui.container-groups/index.stories.js +45 -0
  60. package/src/ui.container-groups/index.vue +33 -0
  61. package/src/ui.container-modal/Docs.mdx +16 -0
  62. package/src/ui.container-modal/composables/attrs.composable.js +90 -0
  63. package/src/ui.container-modal/configs/default.config.js +69 -0
  64. package/src/ui.container-modal/constants/index.js +5 -0
  65. package/src/ui.container-modal/index.stories.js +170 -0
  66. package/src/ui.container-modal/index.vue +335 -0
  67. package/src/ui.container-modal-confirm/Docs.mdx +16 -0
  68. package/src/ui.container-modal-confirm/composable/attrs.composable.js +20 -0
  69. package/src/ui.container-modal-confirm/configs/default.config.js +15 -0
  70. package/src/ui.container-modal-confirm/constants/index.js +5 -0
  71. package/src/ui.container-modal-confirm/index.stories.js +209 -0
  72. package/src/ui.container-modal-confirm/index.vue +182 -0
  73. package/src/ui.container-page/Docs.mdx +16 -0
  74. package/src/ui.container-page/composables/attrs.composable.js +96 -0
  75. package/src/ui.container-page/configs/default.config.js +71 -0
  76. package/src/ui.container-page/constants/index.js +5 -0
  77. package/src/ui.container-page/index.stories.js +147 -0
  78. package/src/ui.container-page/index.vue +271 -0
  79. package/src/ui.container-row/Docs.mdx +16 -0
  80. package/src/ui.container-row/composables/attrs.composable.js +23 -0
  81. package/src/ui.container-row/configs/default.config.js +14 -0
  82. package/src/ui.container-row/constants/index.js +5 -0
  83. package/src/ui.container-row/index.stories.js +81 -0
  84. package/src/ui.container-row/index.vue +45 -0
  85. package/src/ui.data-list/composables/attrs.composable.js +45 -0
  86. package/src/ui.data-list/configs/default.config.js +32 -0
  87. package/src/ui.data-list/constants/index.js +5 -0
  88. package/src/ui.data-list/index.stories.js +91 -0
  89. package/src/ui.data-list/index.vue +258 -0
  90. package/src/ui.data-table/Docs.mdx +16 -0
  91. package/src/ui.data-table-cell/configs/default.config.js +19 -0
  92. package/src/ui.dropdown-badge/Docs.mdx +16 -0
  93. package/src/ui.dropdown-badge/composables/attrs.composable.js +63 -0
  94. package/src/ui.dropdown-badge/configs/default.config.js +34 -0
  95. package/src/ui.dropdown-badge/constants/index.js +5 -0
  96. package/src/ui.dropdown-badge/index.stories.js +126 -0
  97. package/src/ui.dropdown-badge/index.vue +233 -0
  98. package/src/ui.dropdown-button/Docs.mdx +16 -0
  99. package/src/ui.dropdown-button/composables/attrs.composable.js +63 -0
  100. package/src/ui.dropdown-button/configs/default.config.js +37 -0
  101. package/src/ui.dropdown-button/constants/index.js +14 -0
  102. package/src/ui.dropdown-button/index.stories.js +158 -0
  103. package/src/ui.dropdown-button/index.vue +271 -0
  104. package/src/ui.dropdown-item/Docs.mdx +16 -0
  105. package/src/ui.dropdown-item/composables/attrs.composable.js +13 -0
  106. package/src/ui.dropdown-item/configs/default.config.js +16 -0
  107. package/src/ui.dropdown-item/index.stories.js +30 -0
  108. package/src/ui.dropdown-item/index.vue +53 -0
  109. package/src/ui.dropdown-link/Docs.mdx +16 -0
  110. package/src/ui.dropdown-link/composables/attrs.composable.js +65 -0
  111. package/src/ui.dropdown-link/configs/default.config.js +37 -0
  112. package/src/ui.dropdown-link/constants/index.js +5 -0
  113. package/src/ui.dropdown-link/index.stories.js +127 -0
  114. package/src/ui.dropdown-link/index.vue +260 -0
  115. package/src/ui.dropdown-list/Docs.mdx +16 -0
  116. package/src/ui.dropdown-list/composables/attrs.composable.js +93 -0
  117. package/src/ui.dropdown-list/composables/usePointer.js +77 -0
  118. package/src/ui.dropdown-list/configs/default.config.js +74 -0
  119. package/src/ui.dropdown-list/constants/index.js +5 -0
  120. package/src/ui.dropdown-list/index.stories.js +76 -0
  121. package/src/ui.dropdown-list/index.vue +282 -0
  122. package/src/ui.form-calendar/Docs.mdx +52 -0
  123. package/src/ui.form-calendar/components/DayView.vue +268 -0
  124. package/src/ui.form-calendar/components/MonthView.vue +114 -0
  125. package/src/ui.form-calendar/components/YearView.vue +118 -0
  126. package/src/ui.form-calendar/constants/index.js +71 -0
  127. package/src/ui.form-calendar/index.stories.js +59 -0
  128. package/src/ui.form-calendar/index.vue +738 -0
  129. package/src/ui.form-calendar/services/calendar.service.js +189 -0
  130. package/src/ui.form-calendar/services/formatting.service.js +180 -0
  131. package/src/ui.form-checkbox/Docs.mdx +16 -0
  132. package/src/ui.form-checkbox/configs/default.config.js +69 -0
  133. package/src/ui.form-checkbox/index.stories.js +147 -0
  134. package/src/ui.form-checkbox-group/Docs.mdx +16 -0
  135. package/src/ui.form-checkbox-group/composables/attrs.composable.js +17 -0
  136. package/src/ui.form-checkbox-group/configs/default.config.js +5 -0
  137. package/src/ui.form-checkbox-group/constants/index.js +5 -0
  138. package/src/ui.form-checkbox-group/index.stories.js +45 -0
  139. package/src/ui.form-checkbox-group/index.vue +143 -0
  140. package/src/ui.form-checkbox-multi-state/Docs.mdx +16 -0
  141. package/src/ui.form-checkbox-multi-state/composables/attrs.composable.js +24 -0
  142. package/src/ui.form-checkbox-multi-state/configs/default.config.js +9 -0
  143. package/src/ui.form-checkbox-multi-state/constants/index.js +5 -0
  144. package/src/ui.form-checkbox-multi-state/index.stories.js +59 -0
  145. package/src/ui.form-checkbox-multi-state/index.vue +133 -0
  146. package/src/ui.form-color-picker/composables/attrs.composable.js +44 -0
  147. package/src/ui.form-color-picker/configs/default.config.js +52 -0
  148. package/src/ui.form-color-picker/constants/index.js +5 -0
  149. package/src/ui.form-color-picker/index.stories.js +63 -0
  150. package/src/ui.form-color-picker/index.vue +168 -0
  151. package/src/ui.form-date-picker/Docs.mdx +52 -0
  152. package/src/ui.form-date-picker/composables/attrs.composable.js +22 -0
  153. package/src/ui.form-date-picker/configs/default.config.js +26 -0
  154. package/src/ui.form-date-picker/constants/index.js +5 -0
  155. package/src/ui.form-date-picker/index.stories.js +132 -0
  156. package/src/ui.form-date-picker/index.vue +253 -0
  157. package/src/ui.form-date-picker-range/constants/index.js +23 -0
  158. package/src/ui.form-date-picker-range/index.stories.js +135 -0
  159. package/src/ui.form-date-picker-range/index.vue +929 -0
  160. package/src/ui.form-date-picker-range/services/dateRange.service.js +116 -0
  161. package/src/ui.form-input/Docs.mdx +16 -0
  162. package/src/ui.form-input/assets/fonts/text-security-disc.woff +0 -0
  163. package/src/ui.form-input/composables/attrs.composable.js +66 -0
  164. package/src/ui.form-input/configs/default.config.js +72 -0
  165. package/src/ui.form-input/constants/index.js +5 -0
  166. package/src/ui.form-input/index.stories.js +166 -0
  167. package/src/ui.form-input/index.vue +385 -0
  168. package/src/ui.form-input-file/composables/attrs.composable.js +82 -0
  169. package/src/ui.form-input-file/configs/default.config.js +59 -0
  170. package/src/ui.form-input-file/constants/index.js +5 -0
  171. package/src/ui.form-input-file/index.stories.js +86 -0
  172. package/src/ui.form-input-file/index.vue +385 -0
  173. package/src/ui.form-input-money/Docs.mdx +16 -0
  174. package/src/ui.form-input-money/composables/attrs.composable.js +13 -0
  175. package/src/ui.form-input-money/composables/useFormatCurrency.js +82 -0
  176. package/src/ui.form-input-money/configs/default.config.js +16 -0
  177. package/src/ui.form-input-money/constants/index.js +5 -0
  178. package/src/ui.form-input-money/index.stories.js +126 -0
  179. package/src/ui.form-input-money/index.vue +264 -0
  180. package/src/ui.form-input-money/services/format.service.js +72 -0
  181. package/src/ui.form-input-number/Docs.mdx +16 -0
  182. package/src/ui.form-input-number/composables/attrs.composable.js +47 -0
  183. package/src/ui.form-input-number/configs/default.config.js +33 -0
  184. package/src/ui.form-input-number/constants/index.js +5 -0
  185. package/src/ui.form-input-number/index.stories.js +103 -0
  186. package/src/ui.form-input-number/index.vue +159 -0
  187. package/src/ui.form-input-rating/composables/attrs.composable.js +34 -0
  188. package/src/ui.form-input-rating/constants/index.js +5 -0
  189. package/src/ui.form-input-search/composables/attrs.composable.js +21 -0
  190. package/src/ui.form-input-search/configs/default.config.js +20 -0
  191. package/src/ui.form-input-search/constants/index.js +5 -0
  192. package/src/ui.form-input-search/index.stories.js +90 -0
  193. package/src/ui.form-input-search/index.vue +212 -0
  194. package/src/ui.form-label/Docs.mdx +16 -0
  195. package/src/ui.form-label/composables/attrs.composable.js +65 -0
  196. package/src/ui.form-label/configs/default.config.js +95 -0
  197. package/src/ui.form-label/constants/index.js +13 -0
  198. package/src/ui.form-label/index.stories.js +107 -0
  199. package/src/ui.form-label/index.vue +170 -0
  200. package/src/ui.form-radio/Docs.mdx +16 -0
  201. package/src/ui.form-radio/composables/attrs.composable.js +34 -0
  202. package/src/ui.form-radio/configs/default.config.js +47 -0
  203. package/src/ui.form-radio/constants/index.js +5 -0
  204. package/src/ui.form-radio/index.stories.js +71 -0
  205. package/src/ui.form-radio/index.vue +169 -0
  206. package/src/ui.form-radio-card/Docs.mdx +16 -0
  207. package/src/ui.form-radio-card/constants/index.js +5 -0
  208. package/src/ui.form-radio-card/index.stories.js +149 -0
  209. package/src/ui.form-radio-card/services/variant.service.js +15 -0
  210. package/src/ui.form-radio-group/Docs.mdx +16 -0
  211. package/src/ui.form-radio-group/composables/attrs.composable.js +27 -0
  212. package/src/ui.form-radio-group/configs/default.config.js +18 -0
  213. package/src/ui.form-radio-group/constants/index.js +5 -0
  214. package/src/ui.form-radio-group/index.stories.js +42 -0
  215. package/src/ui.form-radio-group/index.vue +127 -0
  216. package/src/ui.form-select/Docs.mdx +16 -0
  217. package/src/ui.form-select/composables/attrs.composable.js +172 -0
  218. package/src/ui.form-select/configs/default.config.js +138 -0
  219. package/src/ui.form-select/constants/index.js +19 -0
  220. package/src/ui.form-select/index.stories.js +339 -0
  221. package/src/ui.form-select/index.vue +719 -0
  222. package/src/ui.form-select/services/select.service.js +98 -0
  223. package/src/ui.form-switch/composables/attrs.composable.js +77 -0
  224. package/src/ui.form-switch/configs/default.config.js +76 -0
  225. package/src/ui.form-switch/constants/index.js +5 -0
  226. package/src/ui.form-switch/index.stories.js +93 -0
  227. package/src/ui.form-switch/index.vue +198 -0
  228. package/src/ui.form-switch/services/variant.service.js +31 -0
  229. package/src/ui.form-textarea/Docs.mdx +16 -0
  230. package/src/ui.form-textarea/composables/attrs.composable.js +52 -0
  231. package/src/ui.form-textarea/configs/default.config.js +68 -0
  232. package/src/ui.form-textarea/constants/index.js +5 -0
  233. package/src/ui.form-textarea/index.stories.js +151 -0
  234. package/src/ui.form-textarea/index.vue +284 -0
  235. package/src/ui.image-avatar/composables/attrs.composable.js +34 -0
  236. package/src/ui.image-avatar/configs/default.config.js +42 -0
  237. package/src/ui.image-avatar/constants/index.js +5 -0
  238. package/src/ui.image-avatar/default-avatar.png +0 -0
  239. package/src/ui.image-avatar/index.stories.js +107 -0
  240. package/src/ui.image-avatar/index.vue +121 -0
  241. package/src/ui.image-icon/Docs.mdx +16 -0
  242. package/src/ui.image-icon/index.stories.js +110 -0
  243. package/src/ui.image-logo/configs/default.config.js +38 -0
  244. package/src/ui.image-logo/index.stories.js +84 -0
  245. package/src/ui.loader-top/components/TopProgress.vue +277 -0
  246. package/src/ui.navigation-pagination/composables/attrs.composable.js +41 -0
  247. package/src/ui.navigation-pagination/configs/default.config.js +24 -0
  248. package/src/ui.navigation-pagination/constants/index.js +8 -0
  249. package/src/ui.navigation-pagination/index.stories.js +52 -0
  250. package/src/ui.navigation-pagination/index.vue +275 -0
  251. package/src/ui.navigation-stepper/composables/attrs.composable.js +25 -0
  252. package/src/ui.navigation-stepper/configs/default.config.js +13 -0
  253. package/src/ui.navigation-stepper/constants/index.js +5 -0
  254. package/src/ui.navigation-stepper/index.stories.js +30 -0
  255. package/src/ui.navigation-stepper/index.vue +128 -0
  256. package/src/ui.navigation-tab/composables/attrs.composable.js +30 -0
  257. package/src/ui.navigation-tab/configs/default.config.js +22 -0
  258. package/src/ui.navigation-tab/constants/index.js +5 -0
  259. package/src/ui.navigation-tab/index.stories.js +57 -0
  260. package/src/ui.navigation-tab/index.vue +85 -0
  261. package/src/ui.navigation-tabs/composables/attrs.composable.js +24 -0
  262. package/src/ui.navigation-tabs/configs/default.config.js +14 -0
  263. package/src/ui.navigation-tabs/constants/index.js +5 -0
  264. package/src/ui.navigation-tabs/index.stories.js +69 -0
  265. package/src/ui.navigation-tabs/index.vue +99 -0
  266. package/src/ui.notify/index.stories.js +102 -0
  267. package/src/ui.other-dot/composables/attrs.composable.js +32 -0
  268. package/src/ui.other-dot/configs/default.config.js +21 -0
  269. package/src/ui.other-dot/constants/index.js +5 -0
  270. package/src/ui.other-dot/index.stories.js +77 -0
  271. package/src/ui.other-dot/index.vue +52 -0
  272. package/src/ui.other-loader/composables/attrs.composable.js +51 -0
  273. package/src/ui.other-loader/configs/default.config.js +47 -0
  274. package/src/ui.other-loader/constants/index.js +5 -0
  275. package/src/ui.other-loader/index.stories.js +78 -0
  276. package/src/ui.other-loader/index.vue +136 -0
  277. package/src/ui.text-alert/composables/attrs.composable.js +48 -0
  278. package/src/ui.text-alert/configs/default.config.js +51 -0
  279. package/src/ui.text-alert/constatns/index.js +5 -0
  280. package/src/ui.text-alert/index.stories.js +157 -0
  281. package/src/ui.text-alert/index.vue +121 -0
  282. package/src/ui.text-badge/Docs.mdx +16 -0
  283. package/src/ui.text-badge/composables/attrs.composable.js +49 -0
  284. package/src/ui.text-badge/configs/default.config.js +51 -0
  285. package/src/ui.text-badge/constants/index.js +5 -0
  286. package/src/ui.text-badge/index.stories.js +190 -0
  287. package/src/ui.text-badge/index.vue +120 -0
  288. package/src/ui.text-block/composables/attrs.composable.js +31 -0
  289. package/src/ui.text-block/configs/default.config.js +35 -0
  290. package/src/ui.text-block/constatns/index.js +5 -0
  291. package/src/ui.text-block/index.stories.js +112 -0
  292. package/src/ui.text-block/index.vue +76 -0
  293. package/src/ui.text-empty/Docs.mdx +16 -0
  294. package/src/ui.text-empty/configs/default.config.js +30 -0
  295. package/src/ui.text-empty/index.stories.js +106 -0
  296. package/src/ui.text-file/composables/attrs.composable.js +37 -0
  297. package/src/ui.text-file/configs/default.config.js +15 -0
  298. package/src/ui.text-file/index.stories.js +29 -0
  299. package/src/ui.text-file/index.vue +93 -0
  300. package/src/ui.text-files/composables/attrs.composable.js +19 -0
  301. package/src/ui.text-files/configs/default.config.js +9 -0
  302. package/src/ui.text-files/constants/index.js +5 -0
  303. package/src/ui.text-files/index.stories.js +32 -0
  304. package/src/ui.text-files/index.vue +87 -0
  305. package/src/ui.text-header/Docs.mdx +16 -0
  306. package/src/ui.text-header/composables/attrs.composable.js +34 -0
  307. package/src/ui.text-header/constants/index.js +5 -0
  308. package/src/ui.text-header/index.stories.js +106 -0
  309. package/src/ui.text-header/index.vue +83 -0
  310. package/src/ui.text-money/Docs.mdx +16 -0
  311. package/src/ui.text-money/assets/credit.svg +7 -0
  312. package/src/ui.text-money/assets/debit.svg +12 -0
  313. package/src/ui.text-money/composables/attrs.composable.js +65 -0
  314. package/src/ui.text-money/constants/index.js +7 -0
  315. package/src/ui.text-money/index.stories.js +265 -0
  316. package/src/ui.text-money/index.vue +204 -0
  317. package/src/ui.text-money/services/money.services.js +24 -0
  318. package/src/ui.viewport/index.vue +78 -0
@@ -0,0 +1,385 @@
1
+ <template>
2
+ <div v-bind="wrapperAttrs">
3
+ <div v-if="!hasSlotContent(slots['default'])">
4
+ <ULabel
5
+ :label="props.label"
6
+ :description="props.description"
7
+ :align="labelAlign"
8
+ :error="errorMessage"
9
+ v-bind="labelAttrs"
10
+ >
11
+ <div :id="fileId" :data-cy="dataCy" v-bind="uploadAttrs">
12
+ <div v-if="!filesData.length" v-bind="blockAttrs">
13
+ <UIcon
14
+ :name="config.iconUploadFileName"
15
+ color="gray"
16
+ :size="componentSize"
17
+ v-bind="iconUploadFileAttrs"
18
+ />
19
+
20
+ <div
21
+ v-bind="descriptionAttrs"
22
+ v-text="`${config.i18n.selectOrDragImage} ${allowedFilesForUpload}`"
23
+ />
24
+ </div>
25
+
26
+ <div v-bind="listAttrs">
27
+ <UFiles :options="filesList" v-bind="filesAttrs">
28
+ <template #right="file">
29
+ <UIcon
30
+ :name="config.iconCloseName"
31
+ interactive
32
+ :size="componentSize"
33
+ color="gray"
34
+ v-bind="iconCloseAttrs"
35
+ @click="onClickDeleteFile(file)"
36
+ />
37
+ </template>
38
+ </UFiles>
39
+ </div>
40
+
41
+ <UButton
42
+ :label="config.i18n.selectFile"
43
+ :size="size"
44
+ variant="thirdary"
45
+ filled
46
+ :data-cy="`${dataCy}-upload`"
47
+ v-bind="buttonAttrs"
48
+ @click="onClickUploadFile"
49
+ />
50
+
51
+ <DragDrop :id="uppyId" :uppy="uppy" v-bind="uppyUploadAttrs" />
52
+ </div>
53
+ </ULabel>
54
+ </div>
55
+
56
+ <div v-else :id="fileId" :data-cy="dataCy" v-bind="uploadSlotAttrs" @click="onClickUploadFile">
57
+ <slot />
58
+
59
+ <DragDrop :id="uppyId" :uppy="uppy" v-bind="uppyUploadAttrs" />
60
+ </div>
61
+ </div>
62
+ </template>
63
+
64
+ <script setup>
65
+ import Uppy from "@uppy/core";
66
+ import DragDrop from "@uppy/vue/src/drag-drop";
67
+
68
+ import { computed, onBeforeUnmount, onMounted, ref, useSlots, watch } from "vue";
69
+
70
+ import UIcon from "../ui.image-icon";
71
+ import UButton from "../ui.button";
72
+
73
+ import UIService, { getRandomId } from "../service.ui";
74
+
75
+ import { UInputFile } from "./constants";
76
+ import defaultConfig from "./configs/default.config";
77
+ import { useAttrs } from "./composables/attrs.composable";
78
+
79
+ /* Should be a string for correct web-types gen */
80
+ defineOptions({ name: "UInputFile" });
81
+
82
+ const props = defineProps({
83
+ /**
84
+ * Set label.
85
+ */
86
+ label: {
87
+ type: String,
88
+ default: "",
89
+ },
90
+
91
+ /**
92
+ * Set description.
93
+ */
94
+ description: {
95
+ type: String,
96
+ default: "",
97
+ },
98
+
99
+ /**
100
+ * Set label placement related from the default slot.
101
+ * @values topInside, top, left, right
102
+ */
103
+ labelOutside: {
104
+ type: Boolean,
105
+ default: UIService.get(defaultConfig, UInputFile).default.labelOutside,
106
+ },
107
+
108
+ /**
109
+ * Set files data.
110
+ */
111
+ files: {
112
+ type: Array,
113
+ default: () => [],
114
+ },
115
+
116
+ /**
117
+ * Selected files will be imported when a form will be submitted
118
+ */
119
+ local: {
120
+ type: Boolean,
121
+ default: UIService.get(defaultConfig, UInputFile).default.local,
122
+ },
123
+
124
+ /**
125
+ * Set max file size in megabytes.
126
+ */
127
+ maxFileSize: {
128
+ type: Number,
129
+ default: UIService.get(defaultConfig, UInputFile).default.maxFileSize,
130
+ },
131
+
132
+ /**
133
+ * Allow to select multiple files.
134
+ */
135
+ multiple: {
136
+ type: Boolean,
137
+ default: UIService.get(defaultConfig, UInputFile).default.multiple,
138
+ },
139
+
140
+ /**
141
+ * Set max number files for upload
142
+ */
143
+ maxFiles: {
144
+ type: Number,
145
+ default: UIService.get(defaultConfig, UInputFile).default.maxFiles,
146
+ },
147
+
148
+ /**
149
+ * Set allowed file types.
150
+ */
151
+ allowedFileTypes: {
152
+ type: Array,
153
+ default: () => UIService.get(defaultConfig, UInputFile).default.allowedFileTypes,
154
+ },
155
+
156
+ /**
157
+ * Set error text for component.
158
+ */
159
+ error: {
160
+ type: String,
161
+ default: "",
162
+ },
163
+
164
+ /**
165
+ * Set size.
166
+ * @values sm, md, lg
167
+ */
168
+ size: {
169
+ type: String,
170
+ default: UIService.get(defaultConfig, UInputFile).default.size,
171
+ },
172
+
173
+ /**
174
+ * Generates unique element id.
175
+ * @ignore
176
+ */
177
+ id: {
178
+ type: String,
179
+ default: () => getRandomId(),
180
+ },
181
+
182
+ /**
183
+ * Sets data-cy attribute for automated testing.
184
+ */
185
+ dataCy: {
186
+ type: String,
187
+ default: "",
188
+ },
189
+ });
190
+
191
+ const slots = useSlots();
192
+
193
+ const emit = defineEmits(["changeFiles", "deleteFile"]);
194
+
195
+ const filesData = ref([]);
196
+ const selectedFiles = ref([]);
197
+ const errorMessage = ref("");
198
+ const dragOver = ref(false);
199
+ const errorFilesTypes = ref([]);
200
+
201
+ const {
202
+ config,
203
+ uploadAttrs,
204
+ buttonAttrs,
205
+ iconUploadFileAttrs,
206
+ iconCloseAttrs,
207
+ wrapperAttrs,
208
+ labelAttrs,
209
+ blockAttrs,
210
+ descriptionAttrs,
211
+ listAttrs,
212
+ uppyUploadAttrs,
213
+ uploadSlotAttrs,
214
+ filesAttrs,
215
+ hasSlotContent,
216
+ } = useAttrs(props, { errorMessage, dragOver });
217
+
218
+ const filesList = computed(() => {
219
+ return filesData.value.map((file) => {
220
+ return {
221
+ text: file.name,
222
+ id: file.id,
223
+ };
224
+ });
225
+ });
226
+
227
+ const labelAlign = computed(() => {
228
+ return props.labelOutside ? "top" : "topInside";
229
+ });
230
+
231
+ const fileId = computed(() => {
232
+ return `file-${props.id}`;
233
+ });
234
+
235
+ const uppyId = computed(() => {
236
+ return `uppy-${props.id}`;
237
+ });
238
+
239
+ const fileUpload = computed(() => {
240
+ return document.getElementById(fileId.value);
241
+ });
242
+
243
+ const uppyUpload = computed(() => {
244
+ return document.getElementById(uppyId.value);
245
+ });
246
+
247
+ const allowedFilesForUpload = computed(() => {
248
+ const allowedFormat = props.allowedFileTypes.join(", ");
249
+
250
+ return `${config.value.i18n.canAttachFilesFormat} ${allowedFormat}`;
251
+ });
252
+
253
+ const componentSize = computed(() => {
254
+ const size = {
255
+ sm: "xs",
256
+ md: "sm",
257
+ lg: "md",
258
+ };
259
+
260
+ return size[props.size];
261
+ });
262
+
263
+ const maxFileSizeInBytes = computed(() => {
264
+ return props.maxFileSize * Math.pow(2, 20);
265
+ });
266
+
267
+ const maxFilesNumber = computed(() => {
268
+ return props.multiple ? props.maxFiles : 1;
269
+ });
270
+
271
+ const uppy = computed(() =>
272
+ new Uppy({
273
+ id: uppyId.value,
274
+ restrictions: {
275
+ maxFileSize: maxFileSizeInBytes,
276
+ maxNumberOfFiles: maxFilesNumber,
277
+ allowedFileTypes: props.allowedFileTypes,
278
+ },
279
+ }).on("restriction-failed", (file, error) => {
280
+ const isFile = errorFilesTypes.value.find((item) => item === file.extension);
281
+
282
+ if (error && !isFile) errorFilesTypes.value.push(`.${file.extension}`);
283
+ }),
284
+ );
285
+
286
+ watch(selectedFiles, onChangeSelectedFiles, { deep: true });
287
+ watch(() => props.files, onChangeFiles, { deep: true });
288
+ watch(errorFilesTypes, onChangeErrorFilesTypes, { deep: true });
289
+ watch(() => props.error, onChangeError, { deep: true, immediate: true });
290
+
291
+ onMounted(() => {
292
+ uppy.value.on("file-added", () => {
293
+ uploadFiles();
294
+ });
295
+
296
+ addEventListener("dragover", () => (dragOver.value = true));
297
+
298
+ if (uppyUpload.value) {
299
+ uppyUpload.value.addEventListener("dragover", onDragOver, true);
300
+ uppyUpload.value.addEventListener("dragleave", onDragLeave, true);
301
+ }
302
+ });
303
+
304
+ onBeforeUnmount(() => {
305
+ removeEventListener("dragover", () => (dragOver.value = true));
306
+ uppyUpload.value.removeEventListener("dragover", onDragOver, true);
307
+ uppyUpload.value.removeEventListener("dragleave", onDragLeave, true);
308
+ });
309
+
310
+ function onClickUploadFile() {
311
+ document.querySelector(`#${fileId.value} .uppy-Root button`).click();
312
+ }
313
+
314
+ function uploadFiles() {
315
+ const { files } = uppy.value.getState();
316
+
317
+ selectedFiles.value = Object.values(files);
318
+ }
319
+
320
+ function onDragOver() {
321
+ fileUpload.value.classList.add(config.fileUploadHover);
322
+ }
323
+
324
+ function onDragLeave() {
325
+ fileUpload.value.classList.remove(config.fileUploadHover);
326
+ dragOver.value = false;
327
+ }
328
+
329
+ function onChangeSelectedFiles() {
330
+ uppy.value.cancelAll();
331
+
332
+ const selectedFilesData = selectedFiles.value.map((file) => {
333
+ file.data.id = getRandomId();
334
+
335
+ return file.data;
336
+ });
337
+
338
+ if (!props.error && errorMessage.value) {
339
+ errorMessage.value = "";
340
+ errorFilesTypes.value = [];
341
+ }
342
+
343
+ if (props.local) filesData.value = selectedFilesData;
344
+
345
+ emit("changeFiles", selectedFilesData);
346
+ }
347
+
348
+ function onChangeFiles() {
349
+ filesData.value = props.files;
350
+
351
+ if (!props.error && errorMessage.value) {
352
+ errorMessage.value = "";
353
+ errorFilesTypes.value = [];
354
+ }
355
+
356
+ onDragLeave();
357
+ }
358
+
359
+ function onChangeError() {
360
+ errorMessage.value = props.error;
361
+ }
362
+
363
+ function onChangeErrorFilesTypes() {
364
+ if (errorFilesTypes.value.length) {
365
+ let error = errorFilesTypes.value.join(", ");
366
+ const localization = config.value.i18n;
367
+
368
+ errorMessage.value = `${localization.cannotAttachFilesStart} ${error} ${localization.cannotAttachFilesEnd}`;
369
+ }
370
+ }
371
+
372
+ function onClickDeleteFile(data) {
373
+ const index = filesData.value.findIndex((file) => file.id === data.file.id);
374
+
375
+ if (~index) {
376
+ filesData.value.splice(index, 1);
377
+
378
+ uppy.value.removeFile(data.file.id);
379
+
380
+ emit("deleteFile", data.file.id);
381
+
382
+ if (props.local) emit("changeFiles", filesData.value);
383
+ }
384
+ }
385
+ </script>
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -0,0 +1,13 @@
1
+ import useUI from "../../composable.ui";
2
+
3
+ import defaultConfig from "../configs/default.config";
4
+
5
+ export default function useAttrs(props) {
6
+ const { getAttrs } = useUI(defaultConfig, () => props.config);
7
+
8
+ const inputAttrs = getAttrs("input", { isComponent: true });
9
+
10
+ return {
11
+ inputAttrs,
12
+ };
13
+ }
@@ -0,0 +1,82 @@
1
+ import { onMounted, nextTick, ref, onBeforeUnmount, toValue, watch } from "vue";
2
+
3
+ import FormatService from "../services/format.service";
4
+
5
+ export default function useFormatCurrency(elementId, options) {
6
+ let prevValue = "";
7
+ let inputElement = null;
8
+
9
+ const formattedValue = ref("");
10
+ const rawValue = ref("");
11
+
12
+ // update value according to updated options
13
+ watch(
14
+ () => toValue(options),
15
+ () => setValue(formattedValue.value),
16
+ { deep: true },
17
+ );
18
+
19
+ onMounted(() => {
20
+ inputElement = document.querySelector(elementId);
21
+ inputElement.addEventListener("input", onInput);
22
+
23
+ onInput(formattedValue.value);
24
+ });
25
+
26
+ onBeforeUnmount(() => {
27
+ inputElement.removeEventListener("input", onInput);
28
+ });
29
+
30
+ // Use to set input value manually
31
+ function setValue(value) {
32
+ const localFormattedValue = FormatService.getFormattedValue(value, toValue(options));
33
+
34
+ formattedValue.value = localFormattedValue;
35
+ rawValue.value = FormatService.getRawValue(localFormattedValue, toValue(options));
36
+
37
+ prevValue = formattedValue.value;
38
+ }
39
+
40
+ async function onInput(event) {
41
+ if (!event.target) return;
42
+
43
+ await nextTick(async () => {
44
+ let cursorStart = inputElement.selectionStart;
45
+ let cursorEnd = inputElement.selectionEnd;
46
+
47
+ const hasValueInputValue = cursorEnd === 1 && cursorStart === 1;
48
+ const value = event.target ? event.target.value : "";
49
+
50
+ const localFormattedValue = FormatService.getFormattedValue(value, toValue(options));
51
+
52
+ const currentValueOffsetLength = localFormattedValue
53
+ .split("")
54
+ .filter((value) => value === toValue(options).thousandsSeparator).length;
55
+
56
+ const prevValueOffsetLength = prevValue
57
+ .split("")
58
+ .filter((value) => value === toValue(options).thousandsSeparator).length;
59
+
60
+ const prefixLength = toValue(options).prefix.length;
61
+ const offset = currentValueOffsetLength - prevValueOffsetLength;
62
+
63
+ formattedValue.value = localFormattedValue || toValue(options).prefix;
64
+ rawValue.value = FormatService.getRawValue(localFormattedValue, toValue(options));
65
+
66
+ await nextTick(() => {
67
+ if (localFormattedValue.length === cursorEnd) return;
68
+
69
+ if (hasValueInputValue && prefixLength) {
70
+ cursorStart += prefixLength;
71
+ cursorEnd += prefixLength;
72
+ }
73
+
74
+ inputElement.setSelectionRange(cursorStart + offset, cursorEnd + offset);
75
+ });
76
+
77
+ prevValue = formattedValue.value;
78
+ });
79
+ }
80
+
81
+ return { rawValue, formattedValue, setValue };
82
+ }
@@ -0,0 +1,16 @@
1
+ export default /*tw*/ {
2
+ input: "",
3
+ defaultVariants: {
4
+ symbol: "$",
5
+ size: "md",
6
+ decimalScale: 2,
7
+ decimalSeparator: ",",
8
+ thousandsSeparator: " ",
9
+ labelOutside: false,
10
+ positiveOnly: false,
11
+ rawValuePrefix: false,
12
+ minus: false,
13
+ readonly: false,
14
+ disabled: false,
15
+ },
16
+ };
@@ -0,0 +1,5 @@
1
+ /*
2
+ This const is needed to prevent the issue in script setup:
3
+ `defineProps` is referencing locally declared variables. (vue/valid-define-props)
4
+ */
5
+ export const UInputMoney = "UInputMoney";
@@ -0,0 +1,126 @@
1
+ import { getArgTypes, getSlotNames } from "../service.storybook";
2
+
3
+ import UInputMoney from "../ui.form-input-money";
4
+ import URow from "../ui.container-row";
5
+ import UGroup from "../ui.container-group";
6
+
7
+ export default {
8
+ id: "3030",
9
+ title: "Form Inputs & Controls / Input Money",
10
+ component: UInputMoney,
11
+ args: {
12
+ label: "Label",
13
+ inputValue: 245000.42,
14
+ },
15
+ argTypes: {
16
+ ...getArgTypes(UInputMoney.name),
17
+ },
18
+ };
19
+
20
+ const DefaultTemplate = (args) => ({
21
+ components: { UInputMoney },
22
+ setup() {
23
+ const slots = getSlotNames(UInputMoney.name);
24
+
25
+ return { args, slots };
26
+ },
27
+ template: `
28
+ <UInputMoney
29
+ v-bind="args"
30
+ v-model="args.inputValue"
31
+ >
32
+ <template v-for="(slot, index) of slots" :key="index" v-slot:[slot]>
33
+ <template v-if="args[slot]">{{ args[slot] }}</template>
34
+ </template>
35
+ </UInputMoney>
36
+ `,
37
+ });
38
+
39
+ const SizesTemplate = (args, { argTypes } = {}) => ({
40
+ components: { UInputMoney, URow },
41
+ setup() {
42
+ return {
43
+ args,
44
+ sizes: argTypes.size.options,
45
+ };
46
+ },
47
+ template: `
48
+ <URow>
49
+ <UInputMoney
50
+ v-for="(size, index) in sizes"
51
+ v-bind="args"
52
+ :size="size"
53
+ :key="index"
54
+ />
55
+ </URow>
56
+ `,
57
+ });
58
+
59
+ const LabelPlacementTemplate = (args) => ({
60
+ components: { UInputMoney, UGroup },
61
+ setup() {
62
+ return {
63
+ args,
64
+ };
65
+ },
66
+ template: `
67
+ <UGroup size="lg">
68
+ <UInputMoney
69
+ v-bind="args"
70
+ :label-outside="true"
71
+ label="top"
72
+ />
73
+
74
+ <UInputMoney
75
+ v-bind="args"
76
+ :label-outside="false"
77
+ label="topInside"
78
+ />
79
+ </UGroup>
80
+ `,
81
+ });
82
+
83
+ export const Default = DefaultTemplate.bind({});
84
+ Default.args = {};
85
+
86
+ export const sizes = SizesTemplate.bind({});
87
+ sizes.args = {};
88
+
89
+ export const symbol = DefaultTemplate.bind({});
90
+ symbol.args = { symbol: "€" };
91
+
92
+ export const labelOutside = LabelPlacementTemplate.bind({});
93
+ labelOutside.args = {};
94
+
95
+ export const placeholder = DefaultTemplate.bind({});
96
+ placeholder.args = { placeholder: "Placeholder" };
97
+
98
+ export const error = DefaultTemplate.bind({});
99
+ error.args = { error: "Some error." };
100
+
101
+ export const description = DefaultTemplate.bind({});
102
+ description.args = { description: "Some description." };
103
+
104
+ export const decimalScale = DefaultTemplate.bind({});
105
+ decimalScale.args = { decimalScale: 4 };
106
+
107
+ export const decimalSeparator = DefaultTemplate.bind({});
108
+ decimalSeparator.args = { decimalSeparator: "." };
109
+
110
+ export const thousandsSeparator = DefaultTemplate.bind({});
111
+ thousandsSeparator.args = { thousandsSeparator: "-" };
112
+
113
+ export const rawValuePrefix = DefaultTemplate.bind({});
114
+ rawValuePrefix.args = { rawValuePrefix: true };
115
+
116
+ export const positiveOnly = DefaultTemplate.bind({});
117
+ positiveOnly.args = { positiveOnly: true };
118
+
119
+ export const minus = DefaultTemplate.bind({});
120
+ minus.args = { minus: true };
121
+
122
+ export const readOnly = DefaultTemplate.bind({});
123
+ readOnly.args = { readOnly: true };
124
+
125
+ export const disabled = DefaultTemplate.bind({});
126
+ disabled.args = { disabled: true };