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,128 @@
1
+ <template>
2
+ <div ref="wrapperRef" :data-cy="dataCy" v-bind="wrapperAttrs">
3
+ <slot>
4
+ <UToggleItem
5
+ v-for="(item, index) in options"
6
+ :key="item.value"
7
+ :model-value="item.value"
8
+ :value="item.value"
9
+ :label="item.label"
10
+ :data-cy="`${dataCy}-item-${index}`"
11
+ v-bind="toggleItemAttrs"
12
+ />
13
+ </slot>
14
+ </div>
15
+ </template>
16
+
17
+ <script setup>
18
+ import { computed, provide, readonly, ref } from "vue";
19
+
20
+ import UIService from "../service.ui";
21
+
22
+ import defaultConfig from "./configs/default.config";
23
+ import { UToggle, TYPE_RADIO, TYPE_CHECKBOX } from "./constants";
24
+ import { useAttrs } from "./composables/attrs.composable";
25
+ import { UButton } from "../ui.button/constants";
26
+
27
+ /* Should be a string for correct web-types gen */
28
+ defineOptions({ name: "UToggle", inheritAttrs: false });
29
+
30
+ const props = defineProps({
31
+ /**
32
+ * Set buttons name.
33
+ */
34
+ name: {
35
+ type: String,
36
+ required: true,
37
+ },
38
+
39
+ /**
40
+ * Set data for buttons.
41
+ */
42
+ options: {
43
+ type: Array,
44
+ default: () => [],
45
+ },
46
+
47
+ /**
48
+ * Set current value.
49
+ */
50
+ modelValue: {
51
+ type: [String, Number, Array],
52
+ default: () => (!this.multiple ? "" : []),
53
+ },
54
+
55
+ /**
56
+ * Allow to select a few options and return them as array.
57
+ */
58
+ multiple: {
59
+ type: Boolean,
60
+ default: UIService.get(defaultConfig, UToggle).default.multiple,
61
+ },
62
+
63
+ /**
64
+ * The size of the buttons.
65
+ * @values xs, sm, md, lg
66
+ */
67
+ size: {
68
+ type: String,
69
+ default: UIService.get(defaultConfig, UToggle).default.size,
70
+ },
71
+
72
+ /**
73
+ * Make the toggle fill the width with its container.
74
+ */
75
+ block: {
76
+ type: Boolean,
77
+ default: UIService.get(defaultConfig, UButton).default.block,
78
+ },
79
+
80
+ /**
81
+ * Sets data-cy attribute for automated testing.
82
+ */
83
+ dataCy: {
84
+ type: String,
85
+ default: "",
86
+ },
87
+ });
88
+
89
+ const emit = defineEmits(["update:modelValue"]);
90
+
91
+ const { wrapperAttrs, toggleItemAttrs } = useAttrs(props);
92
+
93
+ const wrapperRef = ref();
94
+
95
+ const selectedValue = computed({
96
+ get: () => props.modelValue,
97
+ set: (value) => emit("update:modelValue", value),
98
+ });
99
+
100
+ const type = computed(() => (props.multiple ? TYPE_CHECKBOX : TYPE_RADIO));
101
+
102
+ function updateSelectedValue(value, checked) {
103
+ if (type.value === TYPE_RADIO) {
104
+ selectedValue.value = value;
105
+
106
+ return;
107
+ }
108
+
109
+ if (!checked) {
110
+ selectedValue.value = selectedValue.value.filter((item) => item !== value);
111
+ } else {
112
+ selectedValue.value.push(value);
113
+ }
114
+ }
115
+
116
+ provide("toggleName", () => props.name);
117
+
118
+ provide("toggleSize", () => props.size);
119
+
120
+ provide("toggleBlock", () => props.block);
121
+
122
+ provide("toggleType", readonly(type));
123
+
124
+ provide("toggleSelectedValue", {
125
+ selectedValue: readonly(selectedValue),
126
+ updateSelectedValue,
127
+ });
128
+ </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,53 @@
1
+ import { computed, toValue } 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, { size, block }) {
8
+ const { config, getAttrs, hasSlotContent } = useUI(defaultConfig, () => props.config);
9
+ const { label, labelText, wrapper } = config.value;
10
+
11
+ const cvaWrapper = cva({
12
+ base: wrapper.base,
13
+ variants: wrapper.variants,
14
+ compoundVariants: wrapper.compoundVariants,
15
+ });
16
+
17
+ const cvaLabelText = cva({
18
+ base: labelText.base,
19
+ variants: labelText.variants,
20
+ compoundVariants: labelText.compoundVariants,
21
+ });
22
+
23
+ const cvaLabel = cva({
24
+ base: label.base,
25
+ variants: label.variants,
26
+ compoundVariants: label.compoundVariants,
27
+ });
28
+
29
+ const wrapperClasses = computed(() => cvaWrapper({ block: toValue(block) }));
30
+
31
+ const labelTextClasses = computed(() => cvaLabelText({ size: toValue(size) }));
32
+
33
+ const labelClasses = computed(() =>
34
+ cvaLabel({
35
+ size: toValue(size),
36
+ variant: props.variant,
37
+ disabled: props.disabled,
38
+ }),
39
+ );
40
+
41
+ const wrapperAttrs = getAttrs("wrapper", { classes: wrapperClasses });
42
+ const inputAttrs = getAttrs("input");
43
+ const labelAttrs = getAttrs("label", { classes: labelClasses });
44
+ const labelTextAttrs = getAttrs("labelText", { classes: labelTextClasses });
45
+
46
+ return {
47
+ inputAttrs,
48
+ wrapperAttrs,
49
+ labelTextAttrs,
50
+ labelAttrs,
51
+ hasSlotContent,
52
+ };
53
+ }
@@ -0,0 +1,58 @@
1
+ export default /*tw*/ {
2
+ wrapper: {
3
+ base: "w-fit",
4
+ variants: {
5
+ block: {
6
+ true: "w-full",
7
+ },
8
+ },
9
+ },
10
+ input: "p-0 m-0 size-0 invisible peer absolute",
11
+ label: {
12
+ base: "font-medium w-full flex items-center justify-center cursor-pointer",
13
+ variants: {
14
+ variant: {
15
+ primary: `
16
+ bg-gray-900/5 hover:bg-gray-900/10 active:bg-gray-900/15
17
+ peer-focus:border-gray-100 peer-focus:bg-opacity-10 peer-focus:ring-4 peer-focus:ring-gray-600/15
18
+ focus:border-gray-100 focus:bg-opacity-10 focus:ring-4 focus:ring-gray-600/15
19
+ peer-checked:bg-gray-900/15
20
+ `,
21
+ secondary: `
22
+ bg-transparent border hover:text-opacity-80 hover:border-opacity-80
23
+ peer-focus:text-opacity-100 peer-focus:border-opacity-100
24
+ focus:text-opacity-100 focus:border-opacity-100
25
+ peer-checked:text-opacity-100 peer-checked:border-opacity-100
26
+ `,
27
+ thirdary: `
28
+ bg-transparent opacity-50 border-none hover:border-none hover:opacity-100 hover:ring-0
29
+ peer-focus:border-none peer-focus:bg-gray-100 peer-focus:bg-opacity-10 peer-focus:opacity-100
30
+ peer-focus:ring-0 peer-checked:bg-transparent peer-checked:opacity-100
31
+ focus:border-none focus:bg-gray-100 focus:bg-opacity-10 focus:opacity-100 focus:ring-0
32
+ `,
33
+ },
34
+ size: {
35
+ sm: "gap-1.5 p-3.5",
36
+ md: "p-[1.125rem] gap-2",
37
+ lg: "gap-2.5 p-[1.375rem]",
38
+ },
39
+ },
40
+ },
41
+ labelText: {
42
+ base: "font-medium text-center w-full",
43
+ variants: {
44
+ size: {
45
+ sm: "text-sm",
46
+ md: "font-base",
47
+ lg: "text-lg",
48
+ },
49
+ },
50
+ },
51
+ defaultVariants: {
52
+ variant: "primary",
53
+ type: "radio",
54
+ size: "md",
55
+ block: false,
56
+ disabled: false,
57
+ },
58
+ };
@@ -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 UToggleItem = "UToggleItem";
@@ -0,0 +1,77 @@
1
+ import { getArgTypes, getSlotNames } from "../service.storybook";
2
+
3
+ import UToggleItem from "../ui.button-toggle-item";
4
+ import UIcon from "../ui.image-icon";
5
+
6
+ export default {
7
+ title: "Buttons & Links / Toggle Item",
8
+ component: UToggleItem,
9
+ args: {
10
+ value: "1",
11
+ label: "Label",
12
+ },
13
+ argTypes: {
14
+ ...getArgTypes(UToggleItem.name),
15
+ value: { control: { type: "text" } },
16
+ },
17
+ };
18
+
19
+ const DefaultTemplate = (args) => ({
20
+ components: { UToggleItem },
21
+ setup() {
22
+ const slots = getSlotNames(UToggleItem.name);
23
+
24
+ return { args, slots };
25
+ },
26
+ template: `
27
+ <UToggleItem v-bind="args" name="toggle">
28
+ <template v-for="(slot, index) of slots" :key="index" v-slot:[slot]>
29
+ <template v-if="args[slot]">{{ args[slot] }}</template>
30
+ </template>
31
+ </UToggleItem>
32
+ `,
33
+ });
34
+
35
+ const SlotTemplate = (args) => ({
36
+ components: { UToggleItem, UIcon },
37
+ setup() {
38
+ return { args };
39
+ },
40
+ template: `
41
+ <UToggleItem v-bind="args" label="Label" >
42
+ ${args.slotTemplate}
43
+ </UToggleItem>
44
+ `,
45
+ });
46
+
47
+ export const Default = DefaultTemplate.bind({});
48
+ Default.args = {};
49
+
50
+ export const disabled = DefaultTemplate.bind({});
51
+ disabled.args = { disabled: true };
52
+
53
+ export const slotLeft = SlotTemplate.bind({});
54
+ slotLeft.args = {
55
+ slotTemplate: `
56
+ <template #left>
57
+ <UIcon
58
+ name="star"
59
+ color="green"
60
+ size="md"
61
+ />
62
+ </template>
63
+ `,
64
+ };
65
+
66
+ export const slotRight = SlotTemplate.bind({});
67
+ slotRight.args = {
68
+ slotTemplate: `
69
+ <template #right>
70
+ <UIcon
71
+ name="star"
72
+ color="green"
73
+ size="md"
74
+ />
75
+ </template>
76
+ `,
77
+ };
@@ -0,0 +1,147 @@
1
+ <template>
2
+ <div v-bind="wrapperAttrs">
3
+ <input
4
+ :id="id"
5
+ v-model="selectedItem"
6
+ :disabled="disabled"
7
+ :value="value"
8
+ :name="name"
9
+ :type="type"
10
+ v-bind="inputAttrs"
11
+ />
12
+ <label tabindex="0" :for="id" v-bind="labelAttrs" @click="onClickSetValue">
13
+ <span v-if="hasSlotContent($slots['left'])">
14
+ <!-- @slot Use it to add some content before label. -->
15
+ <slot name="left" />
16
+ </span>
17
+
18
+ <!-- @slot Use it to add some content instead of label. -->
19
+ <slot />
20
+ <span v-if="!hasSlotContent($slots['default'])" v-bind="labelTextAttrs" v-text="label" />
21
+
22
+ <span v-if="hasSlotContent($slots['right'])">
23
+ <!-- @slot Use it to add some content after label. -->
24
+ <slot name="right" />
25
+ </span>
26
+ </label>
27
+ </div>
28
+ </template>
29
+
30
+ <script setup>
31
+ import { inject, onMounted, ref } from "vue";
32
+ import UIService, { getRandomId } from "../service.ui";
33
+
34
+ import { TYPE_RADIO } from "../ui.button-toggle/constants";
35
+
36
+ import defaultConfig from "./configs/default.config";
37
+ import { UToggleItem } from "./constants";
38
+ import { useAttrs } from "./composables/attrs.composable";
39
+
40
+ /* Should be a string for correct web-types gen */
41
+ defineOptions({ name: "UToggleItem", inheritAttrs: false });
42
+
43
+ const props = defineProps({
44
+ /**
45
+ * Set data for button.
46
+ */
47
+ modelValue: {
48
+ type: [String, Number, Array],
49
+ default: "",
50
+ },
51
+
52
+ /**
53
+ * Set value for checkbox state.
54
+ */
55
+ value: {
56
+ type: [String, Number],
57
+ default: "",
58
+ },
59
+
60
+ /**
61
+ * Set label.
62
+ */
63
+ label: {
64
+ type: String,
65
+ default: "",
66
+ },
67
+
68
+ /**
69
+ * Make item disabled.
70
+ */
71
+ disabled: {
72
+ type: Boolean,
73
+ default: UIService.get(defaultConfig, UToggleItem).default.disabled,
74
+ },
75
+
76
+ /**
77
+ * The variant of the button.
78
+ * @values primary, secondary, thirdary
79
+ */
80
+ variant: {
81
+ type: String,
82
+ default: UIService.get(defaultConfig, UToggleItem).default.variant,
83
+ },
84
+
85
+ /**
86
+ * Generates unique element id.
87
+ * @ignore
88
+ */
89
+ id: {
90
+ type: String,
91
+ default: () => getRandomId(),
92
+ },
93
+
94
+ /**
95
+ * Sets component ui config object.
96
+ */
97
+ config: {
98
+ type: Object,
99
+ default: () => ({}),
100
+ },
101
+
102
+ /**
103
+ * Sets data-cy attribute for automated testing.
104
+ */
105
+ dataCy: {
106
+ type: String,
107
+ default: "",
108
+ },
109
+ });
110
+
111
+ const emit = defineEmits(["update:modelValue"]);
112
+
113
+ const type = inject("toggleType", UIService.get(defaultConfig, UToggleItem).default.type);
114
+ const name = inject("toggleName", "toggle");
115
+ const size = inject("toggleSize", UIService.get(defaultConfig, UToggleItem).default.size);
116
+ const block = inject("toggleBlock", UIService.get(defaultConfig, UToggleItem).default.block);
117
+ const { selectedValue, updateSelectedValue } = inject("toggleSelectedValue", {});
118
+
119
+ const { wrapperAttrs, labelTextAttrs, labelAttrs, inputAttrs, hasSlotContent } = useAttrs(props, {
120
+ size,
121
+ block,
122
+ });
123
+
124
+ const selectedItem = ref("");
125
+
126
+ onMounted(() => {
127
+ if (type.value === TYPE_RADIO) {
128
+ selectedItem.value = selectedValue ? selectedValue.value : selectedItem.value;
129
+ } else {
130
+ selectedItem.value = selectedValue
131
+ ? selectedValue.value.includes(props.value)
132
+ : selectedItem.value;
133
+ }
134
+ });
135
+
136
+ function onClickSetValue() {
137
+ if (type.value === TYPE_RADIO) {
138
+ selectedItem.value = props.value;
139
+ }
140
+
141
+ if (updateSelectedValue) {
142
+ updateSelectedValue(props.value, !selectedItem.value);
143
+ }
144
+
145
+ emit("update:modelValue", props.value);
146
+ }
147
+ </script>
@@ -0,0 +1,45 @@
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, { isOpened }) {
8
+ const { config, getAttrs } = useUI(defaultConfig, () => props.config);
9
+ const { wrapper, description } = config.value;
10
+
11
+ const cvaWrapper = cva({
12
+ base: wrapper.base,
13
+ variants: wrapper.variants,
14
+ compoundVariants: wrapper.compoundVariants,
15
+ });
16
+
17
+ const cvaDescription = cva({
18
+ base: description.base,
19
+ variants: description.variants,
20
+ compoundVariants: description.compoundVariants,
21
+ });
22
+
23
+ const wrapperClasses = computed(() => cvaWrapper({ size: props.size }));
24
+
25
+ const descriptionClasses = computed(() =>
26
+ cvaDescription({ size: props.size, isOpened: isOpened.value }),
27
+ );
28
+
29
+ const wrapperAttrs = getAttrs("wrapper", { classes: wrapperClasses });
30
+ const descriptionAttrs = getAttrs("description", { classes: descriptionClasses });
31
+ const infoAttrs = getAttrs("info");
32
+ const titleAttrs = getAttrs("title");
33
+ const iconAttrs = getAttrs("icon", { isComponent: true });
34
+ const separatorAttrs = getAttrs("separator");
35
+
36
+ return {
37
+ config,
38
+ wrapperAttrs,
39
+ descriptionAttrs,
40
+ infoAttrs,
41
+ titleAttrs,
42
+ iconAttrs,
43
+ separatorAttrs,
44
+ };
45
+ }
@@ -0,0 +1,32 @@
1
+ export default /*tw*/ {
2
+ wrapper: {
3
+ base: "group cursor-pointer [&:not(:first-child)]:pt-6",
4
+ variants: {
5
+ size: {
6
+ sm: "text-sm",
7
+ md: "text-base",
8
+ lg: "text-lg",
9
+ },
10
+ },
11
+ },
12
+ info: "leading-6",
13
+ title: "flex items-center justify-between font-medium text-gray-800",
14
+ description: {
15
+ base: "text-gray-600 leading-normal h-0 overflow-hidden opacity-0",
16
+ variants: {
17
+ size: {
18
+ sm: "text-xs",
19
+ md: "text-sm",
20
+ lg: "text-base",
21
+ },
22
+ isOpened: {
23
+ true: "h-full pt-3 opacity-100 transition-all duration-100 ease-in-out",
24
+ },
25
+ },
26
+ },
27
+ icon: "",
28
+ separator: "mt-2 h-px w-full lg:mt-6 bg-gray-100 mt-2.5 group-last:hidden",
29
+ defaultVariants: {
30
+ size: "md",
31
+ },
32
+ };
@@ -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 UAccordion = "UAccordion";
@@ -0,0 +1,89 @@
1
+ import { getArgTypes } from "../service.storybook";
2
+
3
+ import UAccordion from "../ui.container-accordion";
4
+ import UCard from "../ui.container-card";
5
+ import UGroup from "../ui.container-group";
6
+
7
+ export default {
8
+ id: "5050",
9
+ title: "Containers / Accordion",
10
+ component: UAccordion,
11
+ argTypes: {
12
+ ...getArgTypes(UAccordion.name),
13
+ },
14
+ };
15
+
16
+ const DefaultTemplate = (args) => ({
17
+ components: { UAccordion, UCard },
18
+ setup() {
19
+ return { args };
20
+ },
21
+ template: `
22
+ <UCard>
23
+ <UAccordion
24
+ name="accordion1"
25
+ title="Excellence by necessity"
26
+ description="As creators and maintainers of the technologies you are using,
27
+ our services are here to showcase the full power of our softwares."
28
+ />
29
+ <UAccordion
30
+ name="accordion1"
31
+ title="Unique expertise"
32
+ description="All the peoples that will be involved in delivering your project are contributing
33
+ to the technologies you are using, when they are not the creators themselves."
34
+ />
35
+ <UAccordion
36
+ name="accordion1"
37
+ title="Commitment to innovation"
38
+ description="By working with us, you are directly supporting the open source community,
39
+ ensuring the ecosystem continuity and enabling Nuxt development."
40
+ />
41
+ </UCard>
42
+ `,
43
+ });
44
+
45
+ const SizesTemplate = (args, { argTypes } = {}) => ({
46
+ components: { UAccordion, UCard, UGroup },
47
+ setup() {
48
+ return {
49
+ args,
50
+ sizes: argTypes.size.options,
51
+ };
52
+ },
53
+ template: `
54
+ <UGroup>
55
+ <UCard v-for="(sizes, index) in sizes" :padding="sizes">
56
+ <UAccordion
57
+ :size="size"
58
+ :name="size"
59
+ title="Excellence by necessity"
60
+ description="As creators and maintainers of the technologies you are using,
61
+ our services are here to showcase the full power of our softwares."
62
+ :key="index"
63
+ />
64
+ <UAccordion
65
+ :size="size"
66
+ :name="size"
67
+ title="Unique expertise"
68
+ description="All the peoples that will be involved in delivering your project are contributing
69
+ to the technologies you are using, when they are not the creators themselves."
70
+ :key="index"
71
+ />
72
+ <UAccordion
73
+ :size="size"
74
+ :name="size"
75
+ title="Commitment to innovation"
76
+ description="By working with us, you are directly supporting the open source community,
77
+ ensuring the ecosystem continuity and enabling Nuxt development."
78
+ :key="index"
79
+ />
80
+ </UCard>
81
+ </UGroup>
82
+ `,
83
+ });
84
+
85
+ export const Default = DefaultTemplate.bind({});
86
+ Default.args = {};
87
+
88
+ export const Sizes = SizesTemplate.bind({});
89
+ Sizes.args = {};