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,76 @@
1
+ /* eslint-disable no-console */
2
+
3
+ import fs from "fs";
4
+ import { compileTemplate } from "vue/compiler-sfc";
5
+ import { optimize as optimizeSvg } from "svgo";
6
+
7
+ const DEFAULT_SVGO_CONFIG = {
8
+ plugins: [
9
+ {
10
+ name: "preset-default",
11
+ params: {
12
+ overrides: {
13
+ removeViewBox: false,
14
+ convertColors: {
15
+ currentColor: true,
16
+ },
17
+ },
18
+ },
19
+ },
20
+ ],
21
+ };
22
+
23
+ export async function loadSvg(id, options) {
24
+ const { defaultImport = "url", svgo = true, svgoConfig = DEFAULT_SVGO_CONFIG } = options;
25
+ const svgRegex = /\.svg(\?(raw|url|component|skipsvgo))?$/;
26
+
27
+ if (!id.match(svgRegex)) {
28
+ return;
29
+ }
30
+
31
+ let svg;
32
+ const [path, query] = id.split("?", 2);
33
+ const importType = query || defaultImport;
34
+
35
+ // use default svg loader
36
+ if (importType === "url" && !path.includes(".generated")) {
37
+ return;
38
+ }
39
+
40
+ try {
41
+ svg = await fs.promises.readFile(path, "utf-8");
42
+ } catch (ex) {
43
+ console.warn(
44
+ "\n",
45
+ `${id} couldn't be loaded by vite-plugin-vue-vueless, fallback to default loader.`,
46
+ );
47
+
48
+ return;
49
+ }
50
+
51
+ if (importType === "raw") {
52
+ return `export default ${JSON.stringify(svg)}`;
53
+ }
54
+
55
+ if (svgo !== false && query !== "skipsvgo") {
56
+ svg = optimizeSvg(svg, {
57
+ ...svgoConfig,
58
+ path,
59
+ }).data;
60
+ }
61
+
62
+ // prevent compileTemplate from removing the style tag
63
+ svg = svg.replace(/<style/g, '<component is="style"').replace(/<\/style/g, "</component");
64
+
65
+ const { code } = compileTemplate({
66
+ id: JSON.stringify(id),
67
+ source: svg,
68
+ filename: path,
69
+ transformAssetUrls: false,
70
+ });
71
+
72
+ return `
73
+ ${code}
74
+ export default { render: render }
75
+ `;
76
+ }
@@ -0,0 +1,195 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+
4
+ import vuelessConfig from "../../../vueless.config.js";
5
+ import { brandColors } from "../../service.tailwind";
6
+ import { components } from "./unpluginComponentsResolver.js";
7
+
8
+ const COMPONENTS_WITH_COLOR_PROP = [
9
+ "UButton",
10
+ "ULink",
11
+ "UDropdownButton",
12
+ "UDropdownBadge",
13
+ "UDropdownLink",
14
+ "UCheckbox",
15
+ "UCheckboxGroup",
16
+ "UCheckboxMultiState",
17
+ "USwitch",
18
+ "URadio",
19
+ "URadioCard",
20
+ "URadioGroup",
21
+ "UHeader",
22
+ "UText",
23
+ "UAlert",
24
+ "UMoney",
25
+ "UBadge",
26
+ "UModalConfirm",
27
+ "UIcon",
28
+ "UDot",
29
+ ];
30
+
31
+ export function createTailwindSafelist() {
32
+ const safelist = [];
33
+
34
+ const srcVueFiles = getFiles("src", ".vue");
35
+ const vuelessVueFiles = getFiles(".vueless", ".vue");
36
+ const vuelessLayoutVueFiles = getFiles(".vueless-layouts", ".vue");
37
+ const vuelessJsConfigFiles = getFiles(".vueless", ".config.js");
38
+
39
+ const files = [
40
+ ...srcVueFiles,
41
+ ...vuelessVueFiles,
42
+ ...vuelessLayoutVueFiles,
43
+ ...vuelessJsConfigFiles,
44
+ ];
45
+
46
+ /* Generate safelist */
47
+ COMPONENTS_WITH_COLOR_PROP.forEach((component) => {
48
+ const { colors, isExistsComponent } = findColors(files, component);
49
+
50
+ if (isExistsComponent && colors.length) {
51
+ // eslint-disable-next-line vue/max-len, prettier/prettier
52
+ const defaultConfigPath = vuelessJsConfigFiles.find((file) => checkDefaultConfig(file, component));
53
+
54
+ const defaultSafelist = getDefaultConfig(defaultConfigPath)?.safelist;
55
+ const customSafelist =
56
+ vuelessConfig.component && vuelessConfig.component[component]?.safelist;
57
+
58
+ const colorString = colors.join("|");
59
+
60
+ const selectedSafelist = customSafelist
61
+ ? customSafelist && customSafelist(colorString)
62
+ : defaultSafelist && defaultSafelist(colorString);
63
+
64
+ if (selectedSafelist) {
65
+ safelist.push(...selectedSafelist);
66
+ }
67
+ }
68
+ });
69
+
70
+ process.env.SAFELIST_JSON = JSON.stringify(safelist);
71
+ }
72
+
73
+ function getFiles(dirPath, extension, fileList) {
74
+ const files = fs.readdirSync(dirPath);
75
+
76
+ fileList = fileList || [];
77
+
78
+ files.forEach((file) => {
79
+ const filePath = path.join(dirPath, file);
80
+ const stat = fs.statSync(filePath);
81
+
82
+ if (stat.isDirectory()) {
83
+ fileList = getFiles(filePath, extension, fileList);
84
+ } else {
85
+ filePath.endsWith(extension) && fileList.push(filePath);
86
+ }
87
+ });
88
+
89
+ return fileList;
90
+ }
91
+
92
+ function findColors(files, component) {
93
+ const colors = [];
94
+ const brandColor = getBrandColor();
95
+
96
+ if (brandColor && brandColor !== "grayscale") {
97
+ colors.push(brandColor);
98
+ }
99
+
100
+ if (!brandColors.includes("gray")) {
101
+ brandColors.push("gray");
102
+ }
103
+
104
+ /* Add safelist colors from config */
105
+ getSafelistColorsFromConfig(component).forEach((color) => addColor(color, colors));
106
+
107
+ let isExistsComponent = false;
108
+
109
+ files.forEach((file) => {
110
+ const fileContents = fs.existsSync(file) ? fs.readFileSync(file).toString() : "";
111
+
112
+ const isDefaultConfig = checkDefaultConfig(file, component);
113
+
114
+ /* Collect color from config objects */
115
+ if (isDefaultConfig) {
116
+ const colorRegExp = /\bcolor\s*:\s*["']([^"'\s]+)["']/g;
117
+ const matchedColors = fileContents.match(colorRegExp);
118
+
119
+ if (matchedColors) {
120
+ for (const match of matchedColors) {
121
+ const matchedColor = colorRegExp.exec(match);
122
+
123
+ addColor(matchedColor && matchedColor[1], colors);
124
+
125
+ colorRegExp.lastIndex = 0;
126
+ }
127
+ }
128
+ }
129
+
130
+ /* Collect color from U[Component] */
131
+ const componentRegExp = new RegExp(`<${component}[^>]+>`, "g");
132
+ const matchedComponent = fileContents.match(componentRegExp);
133
+
134
+ if (matchedComponent) {
135
+ isExistsComponent = true;
136
+
137
+ /* single value prop */
138
+ const colorRegExp = /\bcolor\s*=\s*["']([^"'\s]+)["']/;
139
+
140
+ for (const match of matchedComponent) {
141
+ const matchedColor = colorRegExp.exec(match);
142
+
143
+ addColor(matchedColor && matchedColor[1], colors);
144
+ }
145
+
146
+ /* ternary value prop */
147
+ const ternaryRegExp = /\bcolor="[^']*'([^']*)'\s*:\s*'([^']*)'/;
148
+
149
+ for (const match of matchedComponent) {
150
+ const matchedColors = ternaryRegExp.exec(match);
151
+
152
+ addColor(matchedColors && matchedColors[1], colors);
153
+ addColor(matchedColors && matchedColors[2], colors);
154
+ }
155
+ }
156
+ });
157
+
158
+ return { colors, isExistsComponent };
159
+ }
160
+
161
+ function addColor(color, colors) {
162
+ if (brandColors.includes(color) && !colors.includes(color)) {
163
+ colors.push(color);
164
+ }
165
+ }
166
+
167
+ function getSafelistColorsFromConfig(component) {
168
+ const globalSafelistColors = vuelessConfig.safelistColors || [];
169
+ const componentSafelistColors =
170
+ (vuelessConfig.component && vuelessConfig.component[component]?.safelistColors) || [];
171
+
172
+ return [...globalSafelistColors, ...componentSafelistColors];
173
+ }
174
+
175
+ function getBrandColor(component) {
176
+ return vuelessConfig.component
177
+ ? vuelessConfig.component[component]?.defaultVariants?.color
178
+ : vuelessConfig.brand || "";
179
+ }
180
+
181
+ function checkDefaultConfig(filePath, component) {
182
+ return filePath.includes(components[component]) && filePath.endsWith("default.config.js");
183
+ }
184
+
185
+ function getDefaultConfig(path) {
186
+ if (fs.existsSync(path)) {
187
+ const defaultConfigFile = fs.readFileSync(path).toString();
188
+
189
+ const objectStartIndex = defaultConfigFile.indexOf("{");
190
+ const objectString = defaultConfigFile.substring(objectStartIndex).replace("};", "}");
191
+
192
+ // indirect eval
193
+ return (0, eval)("(" + objectString + ")"); // Converting into JS object
194
+ }
195
+ }
@@ -0,0 +1,172 @@
1
+ /**
2
+ Custom vueless UI library resolver for "unplugin-vue-components" plugin.
3
+
4
+ When new components are added, please add related to them data into an object below with a format:
5
+ - key = component name;
6
+ - value = component folder;
7
+
8
+ Docs:
9
+ https://github.com/unplugin/unplugin-vue-components?tab=readme-ov-file#importing-from-ui-libraries
10
+ */
11
+
12
+ export const components = {
13
+ /* Buttons & Links */
14
+ UButton: "ui.button",
15
+ ULink: "ui.button-link",
16
+ UToggle: "ui.button-toggle",
17
+ UToggleItem: "ui.button-toggle-item",
18
+
19
+ /* Dropdowns */
20
+ UDropdownButton: "ui.dropdown-button",
21
+ UDropdownBadge: "ui.dropdown-badge",
22
+ UDropdownLink: "ui.dropdown-link",
23
+ UDropdownItem: "ui.dropdown-item",
24
+
25
+ /* Form Inputs & Controls */
26
+ UInput: "ui.form-input",
27
+ UInputFile: "ui.form-input-file",
28
+ UInputMoney: "ui.form-input-money",
29
+ UInputSearch: "ui.form-input-search",
30
+ UInputNumber: "ui.form-input-number",
31
+ UInputRating: "ui.form-input-rating",
32
+ UTextarea: "ui.form-textarea",
33
+ USelect: "ui.form-select",
34
+ UMultiselect: "ui.form-select-multi",
35
+ UCheckbox: "ui.form-checkbox",
36
+ UCheckboxGroup: "ui.form-checkbox-group",
37
+ UCheckboxMultiState: "ui.form-checkbox-multi-state",
38
+ USwitch: "ui.form-switch",
39
+ URadio: "ui.form-radio",
40
+ URadioCard: "ui.form-radio-card",
41
+ URadioGroup: "ui.form-radio-group",
42
+ UCalendar: "ui.form-calendar",
43
+ UDatePicker: "ui.form-date-picker",
44
+ UDatePickerRange: "ui.form-date-picker-range",
45
+ ULabel: "ui.form-label",
46
+
47
+ /* Text & Content */
48
+ UHeader: "ui.text-header",
49
+ UText: "ui.text-block",
50
+ UAlert: "ui.text-alert",
51
+ UMoney: "ui.text-money",
52
+ UFile: "ui.text-file",
53
+ UFiles: "ui.text-files",
54
+ UEmpty: "ui.text-empty",
55
+ UBadge: "ui.text-badge",
56
+
57
+ /* Containers */
58
+ UDivider: "ui.container-divider",
59
+ URow: "ui.container-row",
60
+ UGroup: "ui.container-group",
61
+ UGroups: "ui.container-groups",
62
+ UAccordion: "ui.container-accordion",
63
+ UCard: "ui.container-card",
64
+ UModal: "ui.container-modal",
65
+ UModalConfirm: "ui.container-modal-confirm",
66
+ UPage: "ui.container-page",
67
+
68
+ /* Images and Icons */
69
+ UIcon: "ui.image-icon",
70
+ ULogo: "ui.image-logo",
71
+ UAvatar: "ui.image-avatar",
72
+
73
+ /* Data */
74
+ UTable: "ui.data-table",
75
+ UTableCell: "ui.data-table-cell",
76
+ UDataList: "ui.data-list",
77
+
78
+ /* Navigation */
79
+ UTab: "ui.navigation-tab",
80
+ UTabs: "ui.navigation-tabs",
81
+ UStepper: "ui.navigation-stepper",
82
+ UPagination: "ui.navigation-pagination",
83
+
84
+ /* Other */
85
+ UDot: "ui.other-dot",
86
+ ULoader: "ui.other-loader",
87
+ };
88
+
89
+ export default function (componentName) {
90
+ const components = {
91
+ /* Buttons & Links */
92
+ UButton: "ui.button",
93
+ ULink: "ui.button-link",
94
+ UToggle: "ui.button-toggle",
95
+ UToggleItem: "ui.button-toggle-item",
96
+
97
+ /* Dropdowns */
98
+ UDropdownButton: "ui.dropdown-button",
99
+ UDropdownBadge: "ui.dropdown-badge",
100
+ UDropdownLink: "ui.dropdown-link",
101
+ UDropdownItem: "ui.dropdown-item",
102
+ UDropdownList: "ui.dropdown-list",
103
+
104
+ /* Form Inputs & Controls */
105
+ UInput: "ui.form-input",
106
+ UInputFile: "ui.form-input-file",
107
+ UInputMoney: "ui.form-input-money",
108
+ UInputSearch: "ui.form-input-search",
109
+ UInputNumber: "ui.form-input-number",
110
+ UInputRating: "ui.form-input-rating",
111
+ UTextarea: "ui.form-textarea",
112
+ USelect: "ui.form-select",
113
+ UCheckbox: "ui.form-checkbox",
114
+ UCheckboxGroup: "ui.form-checkbox-group",
115
+ UCheckboxMultiState: "ui.form-checkbox-multi-state",
116
+ USwitch: "ui.form-switch",
117
+ URadio: "ui.form-radio",
118
+ URadioCard: "ui.form-radio-card",
119
+ URadioGroup: "ui.form-radio-group",
120
+ UCalendar: "ui.form-calendar",
121
+ UDatePicker: "ui.form-date-picker",
122
+ UDatePickerRange: "ui.form-date-picker-range",
123
+ ULabel: "ui.form-label",
124
+
125
+ /* Text & Content */
126
+ UHeader: "ui.text-header",
127
+ UText: "ui.text-block",
128
+ UAlert: "ui.text-alert",
129
+ UMoney: "ui.text-money",
130
+ UFile: "ui.text-file",
131
+ UFiles: "ui.text-files",
132
+ UEmpty: "ui.text-empty",
133
+ UBadge: "ui.text-badge",
134
+
135
+ /* Containers */
136
+ UDivider: "ui.container-divider",
137
+ URow: "ui.container-row",
138
+ UGroup: "ui.container-group",
139
+ UGroups: "ui.container-groups",
140
+ UAccordion: "ui.container-accordion",
141
+ UCard: "ui.container-card",
142
+ UModal: "ui.container-modal",
143
+ UModalConfirm: "ui.container-modal-confirm",
144
+ UPage: "ui.container-page",
145
+
146
+ /* Images and Icons */
147
+ UIcon: "ui.image-icon",
148
+ ULogo: "ui.image-logo",
149
+ UAvatar: "ui.image-avatar",
150
+
151
+ /* Data */
152
+ UTable: "ui.data-table",
153
+ UTableCell: "ui.data-table-cell",
154
+ UDataList: "ui.data-list",
155
+
156
+ /* Navigation */
157
+ UTab: "ui.navigation-tab",
158
+ UTabs: "ui.navigation-tabs",
159
+ UStepper: "ui.navigation-stepper",
160
+ UPagination: "ui.navigation-pagination",
161
+
162
+ /* Other */
163
+ UDot: "ui.other-dot",
164
+ ULoader: "ui.other-loader",
165
+ };
166
+
167
+ const componentFolder = components[componentName];
168
+
169
+ if (componentFolder) {
170
+ return { from: `/.vueless/${componentFolder}` };
171
+ }
172
+ }
@@ -0,0 +1,91 @@
1
+ import { contributions } from "/web-types.json";
2
+
3
+ const getComponentData = (componentName) => {
4
+ return contributions.html.tags.find((item) => item.name === componentName);
5
+ };
6
+
7
+ export function getSlotNames(componentName) {
8
+ return getComponentData(componentName)?.slots?.map((item) => item.name);
9
+ }
10
+
11
+ export function getArgTypes(componentName) {
12
+ const component = getComponentData(componentName);
13
+
14
+ if (!component) return;
15
+
16
+ const types = {};
17
+
18
+ getSlotNames(componentName)?.forEach((slotName) => {
19
+ types[slotName] = { control: "text" };
20
+ });
21
+
22
+ component.attributes?.forEach((attribute) => {
23
+ const type = attribute.value.type;
24
+
25
+ if (type === "string") {
26
+ types[attribute.name] = {
27
+ control: "text",
28
+ table: {
29
+ defaultValue: { summary: attribute.default || "" },
30
+ },
31
+ };
32
+ }
33
+
34
+ if (type === "number") {
35
+ types[attribute.name] = {
36
+ control: "number",
37
+ table: {
38
+ defaultValue: { summary: attribute.default || "" },
39
+ },
40
+ };
41
+ }
42
+
43
+ if (type === "boolean") {
44
+ types[attribute.name] = {
45
+ control: "boolean",
46
+ table: {
47
+ defaultValue: { summary: attribute.default || "" },
48
+ },
49
+ };
50
+ }
51
+
52
+ if (type.includes("|")) {
53
+ const options = attribute.value.type.replace(/['|]/g, "").split(/\s+/);
54
+
55
+ if (options.length > 1) {
56
+ types[attribute.name] = {
57
+ options,
58
+ control: "select",
59
+ table: {
60
+ defaultValue: { summary: attribute.default || "" },
61
+ },
62
+ };
63
+ }
64
+ }
65
+
66
+ if (attribute.description?.includes("@ignore")) {
67
+ types[attribute.name] = {
68
+ table: {
69
+ disable: true,
70
+ },
71
+ };
72
+ }
73
+ });
74
+
75
+ if (import.meta.env.STORYBOOK_FULL) {
76
+ component.events?.forEach((event) => {
77
+ const eventName = "on" + event.name.charAt(0).toUpperCase() + event.name.slice(1);
78
+
79
+ types[eventName] = {
80
+ action: event.name,
81
+ table: { category: "Storybook Events" },
82
+ };
83
+ });
84
+ }
85
+
86
+ return types;
87
+ }
88
+
89
+ export function getSource(defaultCnfig) {
90
+ return defaultCnfig.replace("export default /*tw*/ ", "").replace(";", "");
91
+ }
@@ -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,41 @@
1
+ import { computed } from "vue";
2
+ import useUI from "../../composable.ui";
3
+ import { cva } from "../../service.ui";
4
+
5
+ import defaultConfig from "../configs/default.config";
6
+
7
+ export function useAttrs(props) {
8
+ const { config, getAttrs, setColor } = useUI(defaultConfig, () => props.config);
9
+ const { button } = config.value;
10
+
11
+ const cvaButton = cva({
12
+ base: button.base,
13
+ variants: button.variants,
14
+ compoundVariants: button.compoundVariants,
15
+ });
16
+
17
+ const buttonClasses = computed(() =>
18
+ setColor(
19
+ cvaButton({
20
+ size: props.size,
21
+ color: props.color,
22
+ variant: props.variant,
23
+ pill: props.pill,
24
+ block: props.block,
25
+ square: props.square,
26
+ filled: props.filled,
27
+ loading: props.loading,
28
+ disabled: props.disabled,
29
+ }),
30
+ props.color,
31
+ ),
32
+ );
33
+
34
+ const buttonAttrs = getAttrs("button", { classes: buttonClasses });
35
+ const textAttrs = getAttrs("text");
36
+
37
+ return {
38
+ textAttrs,
39
+ buttonAttrs,
40
+ };
41
+ }