vueless 0.0.10 → 0.0.11

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 (359) hide show
  1. package/composable.ui/index.js +395 -0
  2. package/package.json +1 -2
  3. package/service.storybook/index.js +91 -0
  4. package/service.tailwind/index.js +103 -0
  5. package/service.ui/index.js +193 -0
  6. package/ui.button/Docs.mdx +16 -0
  7. package/ui.button/composables/attrs.composable.js +41 -0
  8. package/ui.button/configs/default.config.js +165 -0
  9. package/ui.button/constants/index.js +5 -0
  10. package/ui.button/index.stories.js +166 -0
  11. package/ui.button/index.vue +151 -0
  12. package/ui.button-link/Docs.mdx +16 -0
  13. package/ui.button-link/composables/attrs.composable.js +99 -0
  14. package/ui.button-link/configs/default.config.js +80 -0
  15. package/ui.button-link/constants/index.js +5 -0
  16. package/ui.button-link/index.stories.js +158 -0
  17. package/ui.button-link/index.vue +226 -0
  18. package/ui.button-toggle/Docs.mdx +16 -0
  19. package/ui.button-toggle/composables/attrs.composable.js +16 -0
  20. package/ui.button-toggle/configs/default.config.js +12 -0
  21. package/ui.button-toggle/constants/index.js +7 -0
  22. package/ui.button-toggle/index.stories.js +155 -0
  23. package/ui.button-toggle/index.vue +128 -0
  24. package/ui.button-toggle-item/Docs.mdx +16 -0
  25. package/ui.button-toggle-item/composables/attrs.composable.js +53 -0
  26. package/ui.button-toggle-item/configs/default.config.js +58 -0
  27. package/ui.button-toggle-item/constants/index.js +5 -0
  28. package/ui.button-toggle-item/index.stories.js +77 -0
  29. package/ui.button-toggle-item/index.vue +147 -0
  30. package/ui.container-accordion/composables/attrs.composable.js +45 -0
  31. package/ui.container-accordion/configs/default.config.js +32 -0
  32. package/ui.container-accordion/constants/index.js +5 -0
  33. package/ui.container-accordion/index.stories.js +89 -0
  34. package/ui.container-accordion/index.vue +95 -0
  35. package/ui.container-card/Docs.mdx +16 -0
  36. package/ui.container-card/composable/attrs.composable.js +56 -0
  37. package/ui.container-card/configs/default.config.js +31 -0
  38. package/ui.container-card/constants/index.js +5 -0
  39. package/ui.container-card/index.stories.js +170 -0
  40. package/ui.container-card/index.vue +146 -0
  41. package/ui.container-divider/Docs.mdx +16 -0
  42. package/ui.container-divider/composables/attrs.composable.js +65 -0
  43. package/ui.container-divider/configs/default.config.js +79 -0
  44. package/ui.container-divider/constants/index.js +5 -0
  45. package/ui.container-divider/index.stories.js +124 -0
  46. package/ui.container-divider/index.vue +138 -0
  47. package/ui.container-group/Docs.mdx +16 -0
  48. package/ui.container-group/composables/attrs.composable.js +44 -0
  49. package/ui.container-group/configs/default.config.js +29 -0
  50. package/ui.container-group/constants/index.js +5 -0
  51. package/ui.container-group/index.stories.js +88 -0
  52. package/ui.container-group/index.vue +106 -0
  53. package/ui.container-groups/Docs.mdx +16 -0
  54. package/ui.container-groups/composables/attrs.composable.js +12 -0
  55. package/ui.container-groups/configs/default.config.js +3 -0
  56. package/ui.container-groups/index.stories.js +45 -0
  57. package/ui.container-groups/index.vue +33 -0
  58. package/ui.container-modal/Docs.mdx +16 -0
  59. package/ui.container-modal/composables/attrs.composable.js +90 -0
  60. package/ui.container-modal/configs/default.config.js +69 -0
  61. package/ui.container-modal/constants/index.js +5 -0
  62. package/ui.container-modal/index.stories.js +170 -0
  63. package/ui.container-modal/index.vue +336 -0
  64. package/ui.container-modal-confirm/Docs.mdx +16 -0
  65. package/ui.container-modal-confirm/composable/attrs.composable.js +20 -0
  66. package/ui.container-modal-confirm/configs/default.config.js +15 -0
  67. package/ui.container-modal-confirm/constants/index.js +5 -0
  68. package/ui.container-modal-confirm/index.stories.js +209 -0
  69. package/ui.container-modal-confirm/index.vue +182 -0
  70. package/ui.container-page/Docs.mdx +16 -0
  71. package/ui.container-page/composables/attrs.composable.js +96 -0
  72. package/ui.container-page/configs/default.config.js +71 -0
  73. package/ui.container-page/constants/index.js +5 -0
  74. package/ui.container-page/index.stories.js +147 -0
  75. package/ui.container-page/index.vue +275 -0
  76. package/ui.container-row/Docs.mdx +16 -0
  77. package/ui.container-row/composables/attrs.composable.js +23 -0
  78. package/ui.container-row/configs/default.config.js +14 -0
  79. package/ui.container-row/constants/index.js +5 -0
  80. package/ui.container-row/index.stories.js +81 -0
  81. package/ui.container-row/index.vue +45 -0
  82. package/ui.data-list/composables/attrs.composable.js +45 -0
  83. package/ui.data-list/configs/default.config.js +32 -0
  84. package/ui.data-list/constants/index.js +5 -0
  85. package/ui.data-list/index.stories.js +91 -0
  86. package/ui.data-list/index.vue +259 -0
  87. package/ui.data-table/Docs.mdx +16 -0
  88. package/ui.data-table/composables/attrs.composable.js +188 -0
  89. package/ui.data-table/configs/default.config.js +88 -0
  90. package/ui.data-table/constants/index.js +5 -0
  91. package/ui.data-table/index.stories.js +261 -0
  92. package/ui.data-table/index.vue +730 -0
  93. package/ui.data-table/services/table.service.js +15 -0
  94. package/ui.data-table-cell/composables/attrs.composable.js +24 -0
  95. package/ui.data-table-cell/configs/default.config.js +19 -0
  96. package/ui.data-table-cell/constants/index.js +5 -0
  97. package/ui.data-table-cell/index.vue +44 -0
  98. package/ui.dropdown-badge/Docs.mdx +16 -0
  99. package/ui.dropdown-badge/composables/attrs.composable.js +63 -0
  100. package/ui.dropdown-badge/configs/default.config.js +34 -0
  101. package/ui.dropdown-badge/constants/index.js +5 -0
  102. package/ui.dropdown-badge/index.stories.js +126 -0
  103. package/ui.dropdown-badge/index.vue +234 -0
  104. package/ui.dropdown-button/Docs.mdx +16 -0
  105. package/ui.dropdown-button/composables/attrs.composable.js +63 -0
  106. package/ui.dropdown-button/configs/default.config.js +37 -0
  107. package/ui.dropdown-button/constants/index.js +14 -0
  108. package/ui.dropdown-button/index.stories.js +158 -0
  109. package/ui.dropdown-button/index.vue +271 -0
  110. package/ui.dropdown-item/Docs.mdx +16 -0
  111. package/ui.dropdown-item/composables/attrs.composable.js +13 -0
  112. package/ui.dropdown-item/configs/default.config.js +16 -0
  113. package/ui.dropdown-item/index.stories.js +30 -0
  114. package/ui.dropdown-item/index.vue +53 -0
  115. package/ui.dropdown-link/Docs.mdx +16 -0
  116. package/ui.dropdown-link/composables/attrs.composable.js +65 -0
  117. package/ui.dropdown-link/configs/default.config.js +37 -0
  118. package/ui.dropdown-link/constants/index.js +5 -0
  119. package/ui.dropdown-link/index.stories.js +127 -0
  120. package/ui.dropdown-link/index.vue +261 -0
  121. package/ui.dropdown-list/Docs.mdx +16 -0
  122. package/ui.dropdown-list/composables/attrs.composable.js +93 -0
  123. package/ui.dropdown-list/composables/usePointer.js +77 -0
  124. package/ui.dropdown-list/configs/default.config.js +74 -0
  125. package/ui.dropdown-list/constants/index.js +5 -0
  126. package/ui.dropdown-list/index.stories.js +76 -0
  127. package/ui.dropdown-list/index.vue +284 -0
  128. package/ui.form-calendar/Docs.mdx +52 -0
  129. package/ui.form-calendar/components/DayView.vue +268 -0
  130. package/ui.form-calendar/components/MonthView.vue +114 -0
  131. package/ui.form-calendar/components/YearView.vue +118 -0
  132. package/ui.form-calendar/composables/attrs.composable.js +106 -0
  133. package/ui.form-calendar/configs/default.config.js +125 -0
  134. package/ui.form-calendar/constants/index.js +71 -0
  135. package/ui.form-calendar/index.stories.js +59 -0
  136. package/ui.form-calendar/index.vue +743 -0
  137. package/ui.form-calendar/services/calendar.service.js +189 -0
  138. package/ui.form-calendar/services/date.service.js +282 -0
  139. package/ui.form-calendar/services/formatting.service.js +180 -0
  140. package/ui.form-checkbox/Docs.mdx +16 -0
  141. package/ui.form-checkbox/composables/attrs.composable.js +57 -0
  142. package/ui.form-checkbox/configs/default.config.js +69 -0
  143. package/ui.form-checkbox/constants/index.js +5 -0
  144. package/ui.form-checkbox/index.stories.js +147 -0
  145. package/ui.form-checkbox/index.vue +242 -0
  146. package/ui.form-checkbox-group/Docs.mdx +16 -0
  147. package/ui.form-checkbox-group/composables/attrs.composable.js +17 -0
  148. package/ui.form-checkbox-group/configs/default.config.js +5 -0
  149. package/ui.form-checkbox-group/constants/index.js +5 -0
  150. package/ui.form-checkbox-group/index.stories.js +45 -0
  151. package/ui.form-checkbox-group/index.vue +145 -0
  152. package/ui.form-checkbox-multi-state/Docs.mdx +16 -0
  153. package/ui.form-checkbox-multi-state/composables/attrs.composable.js +24 -0
  154. package/ui.form-checkbox-multi-state/configs/default.config.js +9 -0
  155. package/ui.form-checkbox-multi-state/constants/index.js +5 -0
  156. package/ui.form-checkbox-multi-state/index.stories.js +59 -0
  157. package/ui.form-checkbox-multi-state/index.vue +134 -0
  158. package/ui.form-color-picker/composables/attrs.composable.js +44 -0
  159. package/ui.form-color-picker/configs/default.config.js +52 -0
  160. package/ui.form-color-picker/constants/index.js +5 -0
  161. package/ui.form-color-picker/index.stories.js +63 -0
  162. package/ui.form-color-picker/index.vue +171 -0
  163. package/ui.form-date-picker/Docs.mdx +52 -0
  164. package/ui.form-date-picker/composables/attrs.composable.js +22 -0
  165. package/ui.form-date-picker/configs/default.config.js +26 -0
  166. package/ui.form-date-picker/constants/index.js +5 -0
  167. package/ui.form-date-picker/index.stories.js +132 -0
  168. package/ui.form-date-picker/index.vue +256 -0
  169. package/ui.form-date-picker-range/composables/attrs.composable.js +100 -0
  170. package/ui.form-date-picker-range/configs/default.config.js +172 -0
  171. package/ui.form-date-picker-range/constants/index.js +23 -0
  172. package/ui.form-date-picker-range/index.stories.js +135 -0
  173. package/ui.form-date-picker-range/index.vue +937 -0
  174. package/ui.form-date-picker-range/services/dateRange.service.js +116 -0
  175. package/ui.form-date-picker-range/services/validation.service.js +22 -0
  176. package/ui.form-input/Docs.mdx +16 -0
  177. package/ui.form-input/assets/fonts/text-security-disc.woff +0 -0
  178. package/ui.form-input/composables/attrs.composable.js +66 -0
  179. package/ui.form-input/configs/default.config.js +72 -0
  180. package/ui.form-input/constants/index.js +5 -0
  181. package/ui.form-input/index.stories.js +166 -0
  182. package/ui.form-input/index.vue +388 -0
  183. package/ui.form-input-file/composables/attrs.composable.js +82 -0
  184. package/ui.form-input-file/configs/default.config.js +59 -0
  185. package/ui.form-input-file/constants/index.js +5 -0
  186. package/ui.form-input-file/index.stories.js +86 -0
  187. package/ui.form-input-file/index.vue +387 -0
  188. package/ui.form-input-money/Docs.mdx +16 -0
  189. package/ui.form-input-money/composables/attrs.composable.js +13 -0
  190. package/ui.form-input-money/composables/useFormatCurrency.js +82 -0
  191. package/ui.form-input-money/configs/default.config.js +16 -0
  192. package/ui.form-input-money/constants/index.js +5 -0
  193. package/ui.form-input-money/index.stories.js +126 -0
  194. package/ui.form-input-money/index.vue +263 -0
  195. package/ui.form-input-money/services/format.service.js +72 -0
  196. package/ui.form-input-number/Docs.mdx +16 -0
  197. package/ui.form-input-number/composables/attrs.composable.js +47 -0
  198. package/ui.form-input-number/configs/default.config.js +33 -0
  199. package/ui.form-input-number/constants/index.js +5 -0
  200. package/ui.form-input-number/index.stories.js +103 -0
  201. package/ui.form-input-number/index.vue +162 -0
  202. package/ui.form-input-rating/composables/attrs.composable.js +34 -0
  203. package/ui.form-input-rating/configs/default.config.js +25 -0
  204. package/ui.form-input-rating/constants/index.js +5 -0
  205. package/ui.form-input-rating/index.stories.js +108 -0
  206. package/ui.form-input-rating/index.vue +186 -0
  207. package/ui.form-input-search/composables/attrs.composable.js +21 -0
  208. package/ui.form-input-search/configs/default.config.js +20 -0
  209. package/ui.form-input-search/constants/index.js +5 -0
  210. package/ui.form-input-search/index.stories.js +90 -0
  211. package/ui.form-input-search/index.vue +215 -0
  212. package/ui.form-label/Docs.mdx +16 -0
  213. package/ui.form-label/composables/attrs.composable.js +65 -0
  214. package/ui.form-label/configs/default.config.js +95 -0
  215. package/ui.form-label/constants/index.js +13 -0
  216. package/ui.form-label/index.stories.js +107 -0
  217. package/ui.form-label/index.vue +170 -0
  218. package/ui.form-radio/Docs.mdx +16 -0
  219. package/ui.form-radio/composables/attrs.composable.js +34 -0
  220. package/ui.form-radio/configs/default.config.js +47 -0
  221. package/ui.form-radio/constants/index.js +5 -0
  222. package/ui.form-radio/index.stories.js +71 -0
  223. package/ui.form-radio/index.vue +170 -0
  224. package/ui.form-radio-card/Docs.mdx +16 -0
  225. package/ui.form-radio-card/composables/attrs.composable.js +35 -0
  226. package/ui.form-radio-card/configs/default.config.js +25 -0
  227. package/ui.form-radio-card/constants/index.js +5 -0
  228. package/ui.form-radio-card/index.stories.js +149 -0
  229. package/ui.form-radio-card/index.vue +160 -0
  230. package/ui.form-radio-card/services/variant.service.js +15 -0
  231. package/ui.form-radio-group/Docs.mdx +16 -0
  232. package/ui.form-radio-group/composables/attrs.composable.js +27 -0
  233. package/ui.form-radio-group/configs/default.config.js +18 -0
  234. package/ui.form-radio-group/constants/index.js +5 -0
  235. package/ui.form-radio-group/index.stories.js +42 -0
  236. package/ui.form-radio-group/index.vue +128 -0
  237. package/ui.form-select/Docs.mdx +16 -0
  238. package/ui.form-select/composables/attrs.composable.js +172 -0
  239. package/ui.form-select/configs/default.config.js +138 -0
  240. package/ui.form-select/constants/index.js +19 -0
  241. package/ui.form-select/index.stories.js +339 -0
  242. package/ui.form-select/index.vue +722 -0
  243. package/ui.form-select/services/select.service.js +98 -0
  244. package/ui.form-switch/composables/attrs.composable.js +77 -0
  245. package/ui.form-switch/configs/default.config.js +76 -0
  246. package/ui.form-switch/constants/index.js +5 -0
  247. package/ui.form-switch/index.stories.js +93 -0
  248. package/ui.form-switch/index.vue +199 -0
  249. package/ui.form-switch/services/variant.service.js +31 -0
  250. package/ui.form-textarea/Docs.mdx +16 -0
  251. package/ui.form-textarea/composables/attrs.composable.js +52 -0
  252. package/ui.form-textarea/configs/default.config.js +68 -0
  253. package/ui.form-textarea/constants/index.js +5 -0
  254. package/ui.form-textarea/index.stories.js +151 -0
  255. package/ui.form-textarea/index.vue +284 -0
  256. package/ui.image-avatar/composables/attrs.composable.js +34 -0
  257. package/ui.image-avatar/configs/default.config.js +42 -0
  258. package/ui.image-avatar/constants/index.js +5 -0
  259. package/ui.image-avatar/default-avatar.png +0 -0
  260. package/ui.image-avatar/index.stories.js +107 -0
  261. package/ui.image-avatar/index.vue +121 -0
  262. package/ui.image-icon/Docs.mdx +16 -0
  263. package/ui.image-icon/composables/attrs.composable.js +65 -0
  264. package/ui.image-icon/configs/default.config.js +90 -0
  265. package/ui.image-icon/constants/index.js +5 -0
  266. package/ui.image-icon/index.stories.js +110 -0
  267. package/ui.image-icon/index.vue +233 -0
  268. package/ui.image-logo/composables/attrs.composable.js +41 -0
  269. package/ui.image-logo/configs/default.config.js +38 -0
  270. package/ui.image-logo/constants/index.js +5 -0
  271. package/ui.image-logo/index.stories.js +84 -0
  272. package/ui.image-logo/index.vue +98 -0
  273. package/ui.loader-rendering/index.vue +72 -0
  274. package/ui.loader-rendering/store/index.js +17 -0
  275. package/ui.loader-top/components/TopProgress.vue +277 -0
  276. package/ui.loader-top/index.vue +221 -0
  277. package/ui.loader-top/store/index.js +59 -0
  278. package/ui.navigation-pagination/composables/attrs.composable.js +41 -0
  279. package/ui.navigation-pagination/configs/default.config.js +24 -0
  280. package/ui.navigation-pagination/constants/index.js +8 -0
  281. package/ui.navigation-pagination/index.stories.js +52 -0
  282. package/ui.navigation-pagination/index.vue +276 -0
  283. package/ui.navigation-stepper/composables/attrs.composable.js +25 -0
  284. package/ui.navigation-stepper/configs/default.config.js +13 -0
  285. package/ui.navigation-stepper/constants/index.js +5 -0
  286. package/ui.navigation-stepper/index.stories.js +30 -0
  287. package/ui.navigation-stepper/index.vue +126 -0
  288. package/ui.navigation-tab/composables/attrs.composable.js +30 -0
  289. package/ui.navigation-tab/configs/default.config.js +22 -0
  290. package/ui.navigation-tab/constants/index.js +5 -0
  291. package/ui.navigation-tab/index.stories.js +57 -0
  292. package/ui.navigation-tab/index.vue +85 -0
  293. package/ui.navigation-tabs/composables/attrs.composable.js +24 -0
  294. package/ui.navigation-tabs/configs/default.config.js +14 -0
  295. package/ui.navigation-tabs/constants/index.js +5 -0
  296. package/ui.navigation-tabs/index.stories.js +69 -0
  297. package/ui.navigation-tabs/index.vue +99 -0
  298. package/ui.notify/index.sto_ries.js +102 -0
  299. package/ui.notify/index.vue +248 -0
  300. package/ui.notify/services/index.js +87 -0
  301. package/ui.other-dot/composables/attrs.composable.js +32 -0
  302. package/ui.other-dot/configs/default.config.js +21 -0
  303. package/ui.other-dot/constants/index.js +5 -0
  304. package/ui.other-dot/index.stories.js +77 -0
  305. package/ui.other-dot/index.vue +52 -0
  306. package/ui.other-loader/composables/attrs.composable.js +51 -0
  307. package/ui.other-loader/configs/default.config.js +47 -0
  308. package/ui.other-loader/constants/index.js +5 -0
  309. package/ui.other-loader/index.stories.js +78 -0
  310. package/ui.other-loader/index.vue +136 -0
  311. package/ui.text-alert/composables/attrs.composable.js +48 -0
  312. package/ui.text-alert/configs/default.config.js +51 -0
  313. package/ui.text-alert/constatns/index.js +5 -0
  314. package/ui.text-alert/index.stories.js +157 -0
  315. package/ui.text-alert/index.vue +122 -0
  316. package/ui.text-badge/Docs.mdx +16 -0
  317. package/ui.text-badge/composables/attrs.composable.js +49 -0
  318. package/ui.text-badge/configs/default.config.js +51 -0
  319. package/ui.text-badge/constants/index.js +5 -0
  320. package/ui.text-badge/index.stories.js +190 -0
  321. package/ui.text-badge/index.vue +120 -0
  322. package/ui.text-block/composables/attrs.composable.js +31 -0
  323. package/ui.text-block/configs/default.config.js +35 -0
  324. package/ui.text-block/constatns/index.js +5 -0
  325. package/ui.text-block/index.stories.js +112 -0
  326. package/ui.text-block/index.vue +76 -0
  327. package/ui.text-empty/Docs.mdx +16 -0
  328. package/ui.text-empty/composables/attrs.composable.js +43 -0
  329. package/ui.text-empty/configs/default.config.js +30 -0
  330. package/ui.text-empty/constants/index.js +5 -0
  331. package/ui.text-empty/index.stories.js +106 -0
  332. package/ui.text-empty/index.vue +95 -0
  333. package/ui.text-file/composables/attrs.composable.js +37 -0
  334. package/ui.text-file/configs/default.config.js +15 -0
  335. package/ui.text-file/index.stories.js +29 -0
  336. package/ui.text-file/index.vue +93 -0
  337. package/ui.text-files/composables/attrs.composable.js +19 -0
  338. package/ui.text-files/configs/default.config.js +9 -0
  339. package/ui.text-files/constants/index.js +5 -0
  340. package/ui.text-files/index.stories.js +32 -0
  341. package/ui.text-files/index.vue +87 -0
  342. package/ui.text-header/Docs.mdx +16 -0
  343. package/ui.text-header/composables/attrs.composable.js +34 -0
  344. package/ui.text-header/configs/default.config.js +45 -0
  345. package/ui.text-header/constants/index.js +5 -0
  346. package/ui.text-header/index.stories.js +106 -0
  347. package/ui.text-header/index.vue +83 -0
  348. package/ui.text-money/Docs.mdx +16 -0
  349. package/ui.text-money/assets/credit.svg +7 -0
  350. package/ui.text-money/assets/debit.svg +12 -0
  351. package/ui.text-money/composables/attrs.composable.js +65 -0
  352. package/ui.text-money/configs/default.config.js +69 -0
  353. package/ui.text-money/constants/index.js +7 -0
  354. package/ui.text-money/index.stories.js +265 -0
  355. package/ui.text-money/index.vue +204 -0
  356. package/ui.text-money/services/money.services.js +24 -0
  357. package/ui.viewport/index.vue +78 -0
  358. package/ui.viewport/store/index.js +47 -0
  359. package/web-types.json +7187 -0
@@ -0,0 +1,91 @@
1
+ import { getArgTypes, getSlotNames } from "../service.storybook";
2
+
3
+ import UDataList from "../ui.data-list";
4
+ import UIcon from "../ui.image-icon";
5
+
6
+ export default {
7
+ id: "7020",
8
+ title: "Data / Data List",
9
+ component: UDataList,
10
+ args: {
11
+ list: [
12
+ {
13
+ name: "name 1",
14
+ id: 1,
15
+ children: [
16
+ { name: "name 1.1", id: 1.1 },
17
+ { name: "name 1.2", id: 1.2 },
18
+ { name: "name 1.3", id: 1.3 },
19
+ ],
20
+ },
21
+ {
22
+ name: "name 2",
23
+ id: 2,
24
+ children: [
25
+ { name: "name 2.1", id: 2.1 },
26
+ { name: "name 2.2", id: 2.2 },
27
+ ],
28
+ },
29
+ {
30
+ name: "name 3",
31
+ id: 3,
32
+ },
33
+ ],
34
+ },
35
+ argTypes: {
36
+ ...getArgTypes(UDataList.name),
37
+ },
38
+ };
39
+
40
+ const DefaultTemplate = (args) => ({
41
+ components: { UDataList },
42
+ setup() {
43
+ const slots = getSlotNames(UDataList.name);
44
+
45
+ return { args, slots };
46
+ },
47
+ template: `
48
+ <UDataList v-bind="args" @dragSort="onDragSort"/>
49
+ `,
50
+ methods: {
51
+ onDragSort(value) {
52
+ this.list = value;
53
+ },
54
+ },
55
+ });
56
+
57
+ const SlotTemplate = (args) => ({
58
+ components: { UDataList, UIcon },
59
+ setup() {
60
+ return { args };
61
+ },
62
+ template: `
63
+ <UDataList v-bind="args" @dragSort="onDragSort">
64
+ ${args.slotTemplate}
65
+ </UDataList>
66
+ `,
67
+ methods: {
68
+ onDragSort(value) {
69
+ this.list = value;
70
+ },
71
+ },
72
+ });
73
+
74
+ export const Default = DefaultTemplate.bind({});
75
+ Default.args = {};
76
+
77
+ export const nesting = DefaultTemplate.bind({});
78
+ nesting.args = { nesting: true };
79
+
80
+ export const slotIcons = SlotTemplate.bind({});
81
+ slotIcons.args = {
82
+ slotTemplate: `
83
+ <template #icons>
84
+ <UIcon
85
+ name="star"
86
+ color="red"
87
+ size="md"
88
+ />
89
+ </template>
90
+ `,
91
+ };
@@ -0,0 +1,259 @@
1
+ <template>
2
+ <div v-bind="wrapperAttrs">
3
+ <UDivider v-if="upperlined" size="xl" no-top-padding v-bind="dividerAttrs" />
4
+
5
+ <UEmpty
6
+ v-if="!hideEmptyStateForNesting && !list?.length"
7
+ :description="emptyDescription"
8
+ :title="emptyTitle"
9
+ v-bind="emptyAttrs"
10
+ />
11
+
12
+ <draggable
13
+ v-else
14
+ :list="list"
15
+ item-key="id"
16
+ :group="{ name: group }"
17
+ handle=".icon-drag"
18
+ :ghost-class="config.draggableGhost"
19
+ :drag-class="config.draggableDrag"
20
+ :data-cy="dataCy"
21
+ v-bind="draggableAttrs"
22
+ :move="onDragMove"
23
+ @end="onDragEnd"
24
+ >
25
+ <template #item="{ element }">
26
+ <div :id="element.id" :data-cy="`${dataCy}-item`" v-bind="itemWrapperAttrs">
27
+ <div :data-cy="`${dataCy}-item-${element.id}`" v-bind="itemAttrs">
28
+ <UIcon :name="config.iconDragName" color="gray" v-bind="iconDragAttrs" />
29
+
30
+ <div v-bind="titleAttrs(element.isActive)">
31
+ <slot :item="element">
32
+ {{ element.name }}
33
+ </slot>
34
+ </div>
35
+
36
+ <template v-if="!element.isHiddenAction">
37
+ <div
38
+ v-if="hasSlotContent($slots['icons']) && !element.isHiddenCustomActions"
39
+ v-bind="customActionsAttrs"
40
+ >
41
+ <!-- @slot Use it to add icons. -->
42
+ <slot name="icons" :item="element" />
43
+ </div>
44
+
45
+ <UIcon
46
+ v-if="!element.isHiddenDelete"
47
+ interactive
48
+ :name="config.iconDeleteName"
49
+ color="gray"
50
+ :data-cy="`${dataCy}-delete`"
51
+ :tooltip="$t('button.delete')"
52
+ v-bind="iconDeleteAttrs"
53
+ @click="onClickDelete(element.id, element.name)"
54
+ />
55
+
56
+ <UIcon
57
+ v-if="!element.isHiddenEdit"
58
+ interactive
59
+ :name="config.iconEditName"
60
+ color="gray"
61
+ :data-cy="`${dataCy}-edit`"
62
+ :tooltip="$t('button.edit')"
63
+ v-bind="iconEditAttrs"
64
+ @click="onClickEdit(element.id)"
65
+ />
66
+ </template>
67
+ </div>
68
+
69
+ <UDataList
70
+ v-if="nesting && !element.isDisabledNesting"
71
+ :nesting="nesting"
72
+ hide-empty-state-for-nesting
73
+ :list="element.children"
74
+ :group="group"
75
+ :data-cy="`${dataCy}-table`"
76
+ v-bind="nestedAttrs"
77
+ @clickDelete="onClickDelete"
78
+ @clickEdit="onClickEdit"
79
+ @dragSort="onDragEnd"
80
+ >
81
+ <template #default="{ item }">
82
+ <slot :item="item">
83
+ <div v-bind="titleAttrs" v-text="item.name" />
84
+ </slot>
85
+ </template>
86
+
87
+ <template #icons="{ item }">
88
+ <!-- @slot Use it to add icons. -->
89
+ <slot name="icons" :item="item" />
90
+ </template>
91
+ </UDataList>
92
+ </div>
93
+ </template>
94
+ </draggable>
95
+ </div>
96
+ </template>
97
+
98
+ <script setup>
99
+ import draggable from "vuedraggable";
100
+
101
+ import UIcon from "../ui.image-icon";
102
+ import UEmpty from "../ui.text-empty";
103
+ import UDivider from "../ui.container-divider";
104
+ import UIService from "../service.ui";
105
+
106
+ import { UDataListName } from "./constants";
107
+ import defaultConfig from "./configs/default.config";
108
+ import { useAttrs } from "./composables/attrs.composable";
109
+
110
+ /* Should be a string for correct web-types gen */
111
+ defineOptions({ name: "UDataList", inheritAttrs: true });
112
+
113
+ const props = defineProps({
114
+ /**
115
+ * Data list array.
116
+ */
117
+ list: {
118
+ type: Array,
119
+ default: () => [],
120
+ },
121
+
122
+ /**
123
+ * Group name.
124
+ */
125
+ group: {
126
+ type: String,
127
+ default: "",
128
+ },
129
+
130
+ /**
131
+ * Enables nesting.
132
+ */
133
+ nesting: {
134
+ type: Boolean,
135
+ default: UIService.get(defaultConfig, UDataListName).default.nesting,
136
+ },
137
+
138
+ /**
139
+ * Empty state title.
140
+ */
141
+ emptyTitle: {
142
+ type: String,
143
+ default: "",
144
+ },
145
+
146
+ /**
147
+ * Empty state description.
148
+ */
149
+ emptyDescription: {
150
+ type: String,
151
+ default: "",
152
+ },
153
+
154
+ /**
155
+ * Drag animation duration.
156
+ */
157
+ animationDuration: {
158
+ type: Number,
159
+ default: UIService.get(defaultConfig, UDataListName).default.animationDuration,
160
+ },
161
+
162
+ /**
163
+ * Add line divider above the list.
164
+ */
165
+ upperlined: {
166
+ type: Boolean,
167
+ default: UIService.get(defaultConfig, UDataListName).default.upperlined,
168
+ },
169
+
170
+ /**
171
+ * @ignore
172
+ * Disable empty state for nested elements if empty (internal prorps).
173
+ */
174
+ hideEmptyStateForNesting: {
175
+ type: Boolean,
176
+ default: UIService.get(defaultConfig, UDataListName).default.hideEmptyStateForNesting,
177
+ },
178
+
179
+ /**
180
+ * Component ui config object.
181
+ */
182
+ config: {
183
+ type: Object,
184
+ default: () => ({}),
185
+ },
186
+
187
+ /**
188
+ * Data-cy attribute for automated testing.
189
+ */
190
+ dataCy: {
191
+ type: String,
192
+ default: "",
193
+ },
194
+ });
195
+
196
+ const emit = defineEmits(["dragSort", "clickEdit", "clickDelete"]);
197
+
198
+ const {
199
+ config,
200
+ wrapperAttrs,
201
+ dividerAttrs,
202
+ emptyAttrs,
203
+ draggableAttrs,
204
+ nestedAttrs,
205
+ itemWrapperAttrs,
206
+ itemAttrs,
207
+ titleAttrs,
208
+ customActionsAttrs,
209
+ iconDeleteAttrs,
210
+ iconEditAttrs,
211
+ iconDragAttrs,
212
+ hasSlotContent,
213
+ } = useAttrs(props);
214
+
215
+ function onDragMove(event) {
216
+ const isDisabledNestingItem = event.draggedContext.element.isDisabledNesting;
217
+ const isNestingAction = !event.relatedContext.element?.isDisabledNesting;
218
+
219
+ if (isDisabledNestingItem && isNestingAction) {
220
+ return false;
221
+ }
222
+ }
223
+
224
+ function onDragEnd() {
225
+ const sortData = prepareSortData(props.list);
226
+
227
+ emit("dragSort", sortData);
228
+ }
229
+
230
+ function onClickEdit(id) {
231
+ emit("clickEdit", id);
232
+ }
233
+
234
+ function onClickDelete(id, title) {
235
+ emit("clickDelete", id, title);
236
+ }
237
+
238
+ function prepareSortData(list, parentId) {
239
+ let sortData = [];
240
+
241
+ list.forEach((item) => {
242
+ let hasItemChildren = item?.children?.length;
243
+
244
+ if (hasItemChildren) {
245
+ let childrenItem = prepareSortData(item.children, item.id);
246
+
247
+ childrenItem.forEach((item) => {
248
+ sortData.push(item);
249
+ });
250
+ }
251
+
252
+ let parentItem = { ...item, parentId: 0 || parentId };
253
+
254
+ sortData.push(parentItem);
255
+ });
256
+
257
+ return sortData;
258
+ }
259
+ </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,188 @@
1
+ import useUI from "../../composable.ui";
2
+ import defaultConfig from "../configs/default.config";
3
+ import { cva, cx } from "../../service.ui";
4
+ import { computed, useSlots } from "vue";
5
+
6
+ export function useAttrs(props, { selectedRows, isHeaderSticky, tableRows, isFooterSticky }) {
7
+ const { config, getAttrs, hasSlotContent } = useUI(defaultConfig, () => props.config);
8
+ const { wrapper, customHeaderItem, headerCell } = config.value;
9
+
10
+ const slot = useSlots();
11
+
12
+ const cvaWrapper = cva({
13
+ base: wrapper.base,
14
+ variants: wrapper.variants,
15
+ compoundVariants: wrapper.compoundVariants,
16
+ });
17
+
18
+ const cvaCustomHeaderItem = cva({
19
+ base: customHeaderItem.base,
20
+ variants: customHeaderItem.variants,
21
+ compoundVariants: customHeaderItem.compoundVariants,
22
+ });
23
+
24
+ const cvaHeaderCell = cva({
25
+ base: headerCell.base,
26
+ variants: headerCell.variants,
27
+ compoundVariants: headerCell.compoundVariants,
28
+ });
29
+
30
+ const wrapperClasses = computed(() => cvaWrapper({ compact: props.compact }));
31
+
32
+ const customHeaderItemClasses = computed(() => cvaCustomHeaderItem({ compact: props.compact }));
33
+
34
+ const headerCellClasses = computed(() => cvaHeaderCell({ compact: props.compact }));
35
+
36
+ const wrapperAttrs = getAttrs("wrapper", { classes: wrapperClasses });
37
+ const customHeaderItemAttrsRaw = getAttrs("customHeaderItem", {
38
+ classes: customHeaderItemClasses,
39
+ });
40
+ const selectedRowsCountAttrs = getAttrs("selectedRowsCount");
41
+ const selectAllCheckboxAttrs = getAttrs("selectAllCheckbox", { isComponent: true });
42
+ const headerStickyLoaderAttrs = getAttrs("headerStickyLoader", { isComponent: true });
43
+ const tableAttrs = getAttrs("table");
44
+ const headerAttrs = getAttrs("header");
45
+ const headerRowAttrs = getAttrs("headerRow");
46
+ const headerCellAttrsRaw = getAttrs("headerCell", { classes: headerCellClasses });
47
+ const headerSelectAllCheckboxAttrs = getAttrs("headerSelectAllCheckbox", { isComponent: true });
48
+ const tableLoaderAttrs = getAttrs("tableLoader", { isComponent: true });
49
+ const expandIconAttrs = getAttrs("expandIcon", { isComponent: true });
50
+ const collapseIconAttrs = getAttrs("collapseIcon", { isComponent: true });
51
+ const bodyAttrs = getAttrs("body");
52
+ const bodyCellAttrsRaw = getAttrs("bodyCell", { isComponent: true });
53
+ const checkboxBodyWrapperCellAttrs = getAttrs("checkboxBodyWrapperCell");
54
+ const tableCheckboxAttrs = getAttrs("tableCheckbox", { isComponent: true });
55
+ const dateSeparatorAttrs = getAttrs("dateSeparator", { isComponent: true });
56
+ const toggleItemButtonAttrs = getAttrs("toggleItemButton");
57
+ const secondaryRowAttrs = getAttrs("secondaryRow");
58
+ const secondaryRowEmptyAttrs = getAttrs("secondaryRowEmpty");
59
+ const footerRowAttrs = getAttrs("footerRow");
60
+ const footerCellAttrs = getAttrs("footerCell", { isComponent: true });
61
+ const footerStickyRowAttrs = getAttrs("footerStickyRow");
62
+ const emptyAttrs = getAttrs("empty", { isComponent: true });
63
+ const beforeFirstRowAttrsRaw = getAttrs("beforeFirstRow");
64
+ const beforeFirstRowCellAttrs = getAttrs("beforeFirstRowCell", { isComponent: true });
65
+ const afterLastRowAttrsRaw = getAttrs("afterLastRow");
66
+ const afterLastRowCellAttrs = getAttrs("afterLastRowCell", { isComponent: true });
67
+
68
+ const bodyRowAttrsRaw = getAttrs("bodyRow");
69
+
70
+ const bodyCellAttrs = computed(() => (tdClass) => ({
71
+ ...bodyCellAttrsRaw.value,
72
+ class: cx([bodyCellAttrsRaw.value.class, tdClass || ""]),
73
+ }));
74
+
75
+ const bodyRowAttrs = computed(() => (row) => ({
76
+ ...bodyRowAttrsRaw.value,
77
+ class: cx([bodyRowAttrsRaw.value.class, row]),
78
+ }));
79
+
80
+ const headerCellAttrs = computed(() => (classes) => ({
81
+ ...headerCellAttrsRaw.value,
82
+ class: cx([headerCellAttrsRaw.value.class, classes]),
83
+ }));
84
+
85
+ const beforeFirstRowAttrs = computed(() => ({
86
+ ...beforeFirstRowAttrsRaw.value,
87
+ class: cx([
88
+ beforeFirstRowAttrsRaw.value.class,
89
+ tableRows.value[0]?.isChecked ? config.value.checkedRow : "",
90
+ ]),
91
+ }));
92
+
93
+ const tableWrapperAttrs = computed(() => ({
94
+ class: cx([
95
+ config.value.innerWrapper,
96
+ selectedRows.value.length && config.value.innerWrapperSelected,
97
+ ]),
98
+ }));
99
+
100
+ const headerRowCellAttrs = computed(() => ({
101
+ class: cx([
102
+ config.value.headerRow,
103
+ selectedRows.value.length && !isHeaderSticky.value && config.value.customHeaderHidden,
104
+ ]),
105
+ }));
106
+
107
+ const customHeaderAttrs = computed(() => ({
108
+ class: cx([
109
+ config.value.customHeader,
110
+ selectedRows.value.length && config.value.customHeaderActions,
111
+ isHeaderSticky.value && props.stickyHeader && config.value.customHeaderSticky,
112
+ ]),
113
+ }));
114
+
115
+ const footerClassesAttrs = computed(() => ({
116
+ class: cx([config.value.footer, isFooterSticky.value && config.value.footerSticky]),
117
+ }));
118
+
119
+ const afterLastRowAttrs = computed(() => ({
120
+ ...afterLastRowAttrsRaw.value,
121
+ class: cx([
122
+ afterLastRowAttrsRaw.value.class,
123
+ hasSlotContent(slot["after-last-row"]) ? config.value.moreRowHidden : config.value.moreRow,
124
+ ]),
125
+ }));
126
+
127
+ const customHeaderItemAttrs = computed(() => (thClass) => ({
128
+ ...customHeaderItemAttrsRaw.value,
129
+ class: cx([customHeaderItemAttrsRaw.value.class, thClass]),
130
+ }));
131
+
132
+ const dateSeparatorRowAttrs = (rowIndex) => {
133
+ const isCheckedRowBefore = tableRows.value[rowIndex - 1]?.isChecked;
134
+ const isCheckedRowAfter = tableRows.value[rowIndex]?.isChecked;
135
+
136
+ const activeClass =
137
+ (isCheckedRowBefore && isCheckedRowAfter) || (rowIndex === 0 && isCheckedRowAfter)
138
+ ? config.value.checkedRow
139
+ : "";
140
+
141
+ return getAttrs("option", { classes: activeClass }).value;
142
+ };
143
+
144
+ const toggleButtonWrapperAttrs = computed(() => (index) => ({
145
+ class: index === 0 && props.nesting ? config.value.toggleButtonWrapper : "",
146
+ }));
147
+
148
+ return {
149
+ config,
150
+ wrapperAttrs,
151
+ customHeaderItemAttrs,
152
+ customHeaderAttrs,
153
+ tableWrapperAttrs,
154
+ headerRowCellAttrs,
155
+ bodyRowAttrs,
156
+ footerClassesAttrs,
157
+ afterLastRowAttrs,
158
+ afterLastRowCellAttrs,
159
+ beforeFirstRowAttrs,
160
+ beforeFirstRowCellAttrs,
161
+ dateSeparatorRowAttrs,
162
+ toggleButtonWrapperAttrs,
163
+ headerCellAttrs,
164
+ bodyCellAttrs,
165
+ checkboxBodyWrapperCellAttrs,
166
+ footerCellAttrs,
167
+ selectAllCheckboxAttrs,
168
+ headerSelectAllCheckboxAttrs,
169
+ tableCheckboxAttrs,
170
+ collapseIconAttrs,
171
+ expandIconAttrs,
172
+ emptyAttrs,
173
+ dateSeparatorAttrs,
174
+ selectedRowsCountAttrs,
175
+ headerStickyLoaderAttrs,
176
+ tableAttrs,
177
+ headerRowAttrs,
178
+ tableLoaderAttrs,
179
+ bodyAttrs,
180
+ toggleItemButtonAttrs,
181
+ secondaryRowAttrs,
182
+ secondaryRowEmptyAttrs,
183
+ footerRowAttrs,
184
+ footerStickyRowAttrs,
185
+ hasSlotContent,
186
+ headerAttrs,
187
+ };
188
+ }
@@ -0,0 +1,88 @@
1
+ export default /*tw*/ {
2
+ wrapper: {
3
+ base: "relative bg-white rounded-2xl",
4
+ variants: {
5
+ compact: {
6
+ true: "group/table-compact",
7
+ },
8
+ },
9
+ },
10
+ customHeader: "flex items-center z-30 overflow-hidden",
11
+ customHeaderSticky: "fixed top-0 border border-t-0 border-gray-200 bg-white group/fixed-header",
12
+ customHeaderActions: "rounded-t-lg border border-blue-200 !bg-blue-50 group-[]/fixed-header:!rounded-none",
13
+ customHeaderHidden: "relative -top-[3.75rem] collapse",
14
+ customHeaderItem: {
15
+ base: "flex-none text-sm font-normal text-gray-500 px-[1.125rem] py-4 [&:nth-child(2)]:pl-0",
16
+ variants: {
17
+ compact: {
18
+ true: "!p-4 [&:nth-child(2)]:!pl-0",
19
+ },
20
+ },
21
+ },
22
+ selectedRowsCount: "flex items-center pr-4 font-medium text-gray-900",
23
+ selectAllCheckbox: "flex-none text-sm font-normal text-gray-500 pr-[1.125rem] pl-4 py-4 group-[]/table-compact:!px-4",
24
+ headerStickyLoader: "top-[3.75rem] group-[]/table-compact:!top-[3.25rem]",
25
+ innerWrapper: "overflow-auto rounded-lg border border-gray-200",
26
+ innerWrapperSelected: "!rounded-t-none border-t-0",
27
+ table: "min-w-full border-none bg-white text-sm w-full",
28
+ headerCheckboxWrapper: "w-[3.75rem]",
29
+ header: "border-b border-solid border-gray-200",
30
+ headerRow: "",
31
+ headerCell: {
32
+ base: `
33
+ px-[1.125rem] py-4 text-sm font-normal text-gray-500
34
+ text-left first:p-4 last:p-4 [&:nth-child(2)]:pl-0
35
+ `,
36
+ variants: {
37
+ compact: {
38
+ true: "bg-white p-4 first:p-4 last:p-4",
39
+ },
40
+ },
41
+ },
42
+ headerSelectAllCheckbox: "",
43
+ tableLoader: "!top-auto",
44
+ moreRow: "!px-0 !py-4 first:mx-auto",
45
+ moreRowHidden: "!p-0",
46
+ checkedRow: "transition duration-100 bg-gray-100",
47
+ beforeFirstRow: "",
48
+ beforeFirstRowCell: "py-1",
49
+ afterLastRow: "",
50
+ afterLastRowCell: "py-1",
51
+ toggleButtonWrapper: "flex items-center",
52
+ expandIcon: "mr-2 rounded-sm bg-gray-200",
53
+ expandIconName: "add",
54
+ collapseIcon: "mr-2 rounded-sm bg-gray-200",
55
+ collapseIconName: "remove",
56
+ body: "group/body divide-none",
57
+ bodyRow: "hover:bg-gray-50",
58
+ checkboxBodyWrapperCell: "w-[3.75rem] py-3 px-4 align-top",
59
+ bodyCell: "",
60
+ tableCheckbox: "",
61
+ dateSeparator: "",
62
+ toggleItemButton: "flex relative -top-px",
63
+ secondaryRow: "mt-1 text-xs text-gray-500",
64
+ secondaryRowEmpty: "inline-block",
65
+ footer: "group/footer border-t border-solid border-gray-200",
66
+ footerSticky: "relative group/footer-fixed",
67
+ footerRow: "",
68
+ footerCell: "",
69
+ footerStickyRow: `
70
+ fixed bottom-0 -ml-px border border-b border-gray-200 bg-white
71
+ collapse group-[]/footer-fixed:[visibility:inherit]
72
+ `,
73
+ empty: "my-8",
74
+ i18n: {
75
+ noItems: "There is no data in the table yet.",
76
+ noResultsForFilters: "No results were found for the specified filters.",
77
+ today: "today",
78
+ tomorrow: "tomorrow",
79
+ },
80
+ defaultVariants: {
81
+ nestingFrom: 0,
82
+ nesting: false,
83
+ compact: false,
84
+ selectable: false,
85
+ stickyHeader: false,
86
+ stickyFooter: false,
87
+ },
88
+ };
@@ -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 UTable = "UTable";