@groupteknology/vuno 1.0.0 → 2.0.0

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 (437) hide show
  1. package/README.md +53 -27
  2. package/dist/module.d.mts +14 -2
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +80 -13
  5. package/dist/runtime/app/assets/css/dialog.css +1 -0
  6. package/dist/runtime/app/assets/css/main.css +1 -0
  7. package/dist/runtime/app/assets/css/stylesheet.css +1 -0
  8. package/dist/runtime/app/assets/css/theme.css +1 -0
  9. package/dist/runtime/app/assets/css/tokens.css +1 -0
  10. package/dist/runtime/app/components/Alert/Alert.d.vue.ts +20 -0
  11. package/dist/runtime/app/components/Alert/Alert.theme.d.ts +13 -0
  12. package/dist/runtime/app/components/Alert/Alert.theme.js +13 -0
  13. package/dist/runtime/app/components/Alert/Alert.vue +59 -0
  14. package/dist/runtime/app/components/Alert/Alert.vue.d.ts +20 -0
  15. package/dist/runtime/app/components/App/App.d.vue.ts +52 -0
  16. package/dist/runtime/app/components/App/App.vue +150 -0
  17. package/dist/runtime/app/components/App/App.vue.d.ts +52 -0
  18. package/dist/runtime/app/components/App/internal/Overlay/Overlay.d.vue.ts +7 -0
  19. package/dist/runtime/app/components/App/internal/Overlay/Overlay.vue +39 -0
  20. package/dist/runtime/app/components/App/internal/Overlay/Overlay.vue.d.ts +7 -0
  21. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.d.vue.ts +8 -0
  22. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.vue +19 -0
  23. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.vue.d.ts +8 -0
  24. package/dist/runtime/app/components/App/internal/Toast/Toast.d.vue.ts +11 -0
  25. package/dist/runtime/app/components/App/internal/Toast/Toast.theme.d.ts +13 -0
  26. package/dist/runtime/app/components/App/internal/Toast/Toast.theme.js +18 -0
  27. package/dist/runtime/app/components/App/internal/Toast/Toast.vue +64 -0
  28. package/dist/runtime/app/components/App/internal/Toast/Toast.vue.d.ts +11 -0
  29. package/dist/runtime/app/components/App/internal/Toaster/Toaster.d.vue.ts +11 -0
  30. package/dist/runtime/app/components/App/internal/Toaster/Toaster.theme.d.ts +15 -0
  31. package/dist/runtime/app/components/App/internal/Toaster/Toaster.theme.js +16 -0
  32. package/dist/runtime/app/components/App/internal/Toaster/Toaster.vue +100 -0
  33. package/dist/runtime/app/components/App/internal/Toaster/Toaster.vue.d.ts +11 -0
  34. package/dist/runtime/app/components/Avatar/Avatar.d.vue.ts +27 -0
  35. package/dist/runtime/app/components/Avatar/Avatar.theme.d.ts +30 -0
  36. package/dist/runtime/app/components/Avatar/Avatar.theme.js +22 -0
  37. package/dist/runtime/app/components/Avatar/Avatar.vue +51 -0
  38. package/dist/runtime/app/components/Avatar/Avatar.vue.d.ts +27 -0
  39. package/dist/runtime/app/components/Badge/Badge.d.vue.ts +40 -0
  40. package/dist/runtime/app/components/Badge/Badge.theme.d.ts +40 -0
  41. package/dist/runtime/app/components/Badge/Badge.theme.js +22 -0
  42. package/dist/runtime/app/components/Badge/Badge.vue +28 -0
  43. package/dist/runtime/app/components/Badge/Badge.vue.d.ts +40 -0
  44. package/dist/runtime/app/components/Button/Button.d.vue.ts +49 -0
  45. package/dist/runtime/app/components/Button/Button.theme.d.ts +88 -0
  46. package/dist/runtime/app/components/Button/Button.theme.js +59 -0
  47. package/dist/runtime/app/components/Button/Button.vue +78 -0
  48. package/dist/runtime/app/components/Button/Button.vue.d.ts +49 -0
  49. package/dist/runtime/app/components/Card/Card.d.vue.ts +94 -0
  50. package/dist/runtime/app/components/Card/Card.theme.d.ts +57 -0
  51. package/dist/runtime/app/components/Card/Card.theme.js +62 -0
  52. package/dist/runtime/app/components/Card/Card.vue +45 -0
  53. package/dist/runtime/app/components/Card/Card.vue.d.ts +94 -0
  54. package/dist/runtime/app/components/Code/Code.d.vue.ts +19 -0
  55. package/dist/runtime/app/components/Code/Code.theme.d.ts +11 -0
  56. package/dist/runtime/app/components/Code/Code.theme.js +12 -0
  57. package/dist/runtime/app/components/Code/Code.vue +109 -0
  58. package/dist/runtime/app/components/Code/Code.vue.d.ts +19 -0
  59. package/dist/runtime/app/components/Confirm/Confirm.d.vue.ts +35 -0
  60. package/dist/runtime/app/components/Confirm/Confirm.theme.d.ts +12 -0
  61. package/dist/runtime/app/components/Confirm/Confirm.theme.js +13 -0
  62. package/dist/runtime/app/components/Confirm/Confirm.vue +83 -0
  63. package/dist/runtime/app/components/Confirm/Confirm.vue.d.ts +35 -0
  64. package/dist/runtime/app/components/Container/Container.d.vue.ts +42 -0
  65. package/dist/runtime/app/components/Container/Container.theme.d.ts +53 -0
  66. package/dist/runtime/app/components/Container/Container.theme.js +31 -0
  67. package/dist/runtime/app/components/Container/Container.vue +20 -0
  68. package/dist/runtime/app/components/Container/Container.vue.d.ts +42 -0
  69. package/dist/runtime/app/components/ControlGroup/ControlGroup.d.vue.ts +26 -0
  70. package/dist/runtime/app/components/ControlGroup/ControlGroup.theme.d.ts +16 -0
  71. package/dist/runtime/app/components/ControlGroup/ControlGroup.theme.js +13 -0
  72. package/dist/runtime/app/components/ControlGroup/ControlGroup.vue +26 -0
  73. package/dist/runtime/app/components/ControlGroup/ControlGroup.vue.d.ts +26 -0
  74. package/dist/runtime/app/components/FieldArray/FieldArray.d.vue.ts +13 -0
  75. package/dist/runtime/app/components/FieldArray/FieldArray.theme.d.ts +12 -0
  76. package/dist/runtime/app/components/FieldArray/FieldArray.theme.js +13 -0
  77. package/dist/runtime/app/components/FieldArray/FieldArray.vue +173 -0
  78. package/dist/runtime/app/components/FieldArray/FieldArray.vue.d.ts +13 -0
  79. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.d.vue.ts +13 -0
  80. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.theme.d.ts +5 -0
  81. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.theme.js +2 -0
  82. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.vue +39 -0
  83. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.vue.d.ts +13 -0
  84. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.d.vue.ts +40 -0
  85. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.theme.d.ts +30 -0
  86. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.theme.js +10 -0
  87. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.vue +40 -0
  88. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.vue.d.ts +40 -0
  89. package/dist/runtime/app/components/FieldColor/FieldColor.d.vue.ts +13 -0
  90. package/dist/runtime/app/components/FieldColor/FieldColor.theme.d.ts +27 -0
  91. package/dist/runtime/app/components/FieldColor/FieldColor.theme.js +18 -0
  92. package/dist/runtime/app/components/FieldColor/FieldColor.vue +88 -0
  93. package/dist/runtime/app/components/FieldColor/FieldColor.vue.d.ts +13 -0
  94. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.d.vue.ts +13 -0
  95. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.theme.d.ts +5 -0
  96. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.theme.js +2 -0
  97. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.vue +51 -0
  98. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.vue.d.ts +13 -0
  99. package/dist/runtime/app/components/FieldFile/FieldFile.d.vue.ts +26 -0
  100. package/dist/runtime/app/components/FieldFile/FieldFile.theme.d.ts +5 -0
  101. package/dist/runtime/app/components/FieldFile/FieldFile.theme.js +2 -0
  102. package/dist/runtime/app/components/FieldFile/FieldFile.vue +99 -0
  103. package/dist/runtime/app/components/FieldFile/FieldFile.vue.d.ts +26 -0
  104. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.d.vue.ts +66 -0
  105. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.theme.d.ts +88 -0
  106. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.theme.js +55 -0
  107. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.vue +187 -0
  108. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.vue.d.ts +66 -0
  109. package/dist/runtime/app/components/FieldInput/FieldInput.d.vue.ts +24 -0
  110. package/dist/runtime/app/components/FieldInput/FieldInput.theme.d.ts +5 -0
  111. package/dist/runtime/app/components/FieldInput/FieldInput.theme.js +2 -0
  112. package/dist/runtime/app/components/FieldInput/FieldInput.vue +61 -0
  113. package/dist/runtime/app/components/FieldInput/FieldInput.vue.d.ts +24 -0
  114. package/dist/runtime/app/components/FieldNumber/FieldNumber.d.vue.ts +13 -0
  115. package/dist/runtime/app/components/FieldNumber/FieldNumber.theme.d.ts +5 -0
  116. package/dist/runtime/app/components/FieldNumber/FieldNumber.theme.js +2 -0
  117. package/dist/runtime/app/components/FieldNumber/FieldNumber.vue +47 -0
  118. package/dist/runtime/app/components/FieldNumber/FieldNumber.vue.d.ts +13 -0
  119. package/dist/runtime/app/components/FieldPassword/FieldPassword.d.vue.ts +13 -0
  120. package/dist/runtime/app/components/FieldPassword/FieldPassword.theme.d.ts +5 -0
  121. package/dist/runtime/app/components/FieldPassword/FieldPassword.theme.js +2 -0
  122. package/dist/runtime/app/components/FieldPassword/FieldPassword.vue +62 -0
  123. package/dist/runtime/app/components/FieldPassword/FieldPassword.vue.d.ts +13 -0
  124. package/dist/runtime/app/components/FieldRadio/FieldRadio.d.vue.ts +13 -0
  125. package/dist/runtime/app/components/FieldRadio/FieldRadio.theme.d.ts +5 -0
  126. package/dist/runtime/app/components/FieldRadio/FieldRadio.theme.js +2 -0
  127. package/dist/runtime/app/components/FieldRadio/FieldRadio.vue +41 -0
  128. package/dist/runtime/app/components/FieldRadio/FieldRadio.vue.d.ts +13 -0
  129. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.d.vue.ts +32 -0
  130. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.theme.d.ts +54 -0
  131. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.theme.js +31 -0
  132. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.vue +80 -0
  133. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.vue.d.ts +32 -0
  134. package/dist/runtime/app/components/FieldSearch/FieldSearch.d.vue.ts +17 -0
  135. package/dist/runtime/app/components/FieldSearch/FieldSearch.theme.d.ts +6 -0
  136. package/dist/runtime/app/components/FieldSearch/FieldSearch.theme.js +7 -0
  137. package/dist/runtime/app/components/FieldSearch/FieldSearch.vue +74 -0
  138. package/dist/runtime/app/components/FieldSearch/FieldSearch.vue.d.ts +17 -0
  139. package/dist/runtime/app/components/FieldSelect/FieldSelect.d.vue.ts +13 -0
  140. package/dist/runtime/app/components/FieldSelect/FieldSelect.theme.d.ts +5 -0
  141. package/dist/runtime/app/components/FieldSelect/FieldSelect.theme.js +2 -0
  142. package/dist/runtime/app/components/FieldSelect/FieldSelect.vue +45 -0
  143. package/dist/runtime/app/components/FieldSelect/FieldSelect.vue.d.ts +13 -0
  144. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.d.vue.ts +97 -0
  145. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.theme.d.ts +36 -0
  146. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.theme.js +49 -0
  147. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.vue +196 -0
  148. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.vue.d.ts +97 -0
  149. package/dist/runtime/app/components/FieldSelect/internal/Select/option.d.ts +25 -0
  150. package/dist/runtime/app/components/FieldSelect/internal/Select/option.js +6 -0
  151. package/dist/runtime/app/components/FieldSelect/internal/Select/useVunoSelectState.d.ts +30 -0
  152. package/dist/runtime/app/components/FieldSelect/internal/Select/useVunoSelectState.js +142 -0
  153. package/dist/runtime/app/components/FieldSlug/FieldSlug.d.vue.ts +13 -0
  154. package/dist/runtime/app/components/FieldSlug/FieldSlug.theme.d.ts +5 -0
  155. package/dist/runtime/app/components/FieldSlug/FieldSlug.theme.js +2 -0
  156. package/dist/runtime/app/components/FieldSlug/FieldSlug.vue +113 -0
  157. package/dist/runtime/app/components/FieldSlug/FieldSlug.vue.d.ts +13 -0
  158. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.d.vue.ts +13 -0
  159. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.theme.d.ts +5 -0
  160. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.theme.js +2 -0
  161. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.vue +37 -0
  162. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.vue.d.ts +13 -0
  163. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.d.vue.ts +26 -0
  164. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.theme.d.ts +39 -0
  165. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.theme.js +20 -0
  166. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.vue +46 -0
  167. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.vue.d.ts +26 -0
  168. package/dist/runtime/app/components/FieldTags/FieldTags.d.vue.ts +13 -0
  169. package/dist/runtime/app/components/FieldTags/FieldTags.theme.d.ts +5 -0
  170. package/dist/runtime/app/components/FieldTags/FieldTags.theme.js +2 -0
  171. package/dist/runtime/app/components/FieldTags/FieldTags.vue +41 -0
  172. package/dist/runtime/app/components/FieldTags/FieldTags.vue.d.ts +13 -0
  173. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.d.vue.ts +26 -0
  174. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.theme.d.ts +34 -0
  175. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.theme.js +20 -0
  176. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.vue +97 -0
  177. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.vue.d.ts +26 -0
  178. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.d.vue.ts +26 -0
  179. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.theme.d.ts +5 -0
  180. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.theme.js +2 -0
  181. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.vue +45 -0
  182. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.vue.d.ts +26 -0
  183. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.d.vue.ts +34 -0
  184. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.theme.d.ts +36 -0
  185. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.theme.js +37 -0
  186. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.vue +43 -0
  187. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.vue.d.ts +34 -0
  188. package/dist/runtime/app/components/Form/Form.d.vue.ts +52 -0
  189. package/dist/runtime/app/components/Form/Form.theme.d.ts +9 -0
  190. package/dist/runtime/app/components/Form/Form.theme.js +10 -0
  191. package/dist/runtime/app/components/Form/Form.vue +129 -0
  192. package/dist/runtime/app/components/Form/Form.vue.d.ts +52 -0
  193. package/dist/runtime/app/components/Form/internal/FormFieldRenderer/FormFieldRenderer.d.vue.ts +7 -0
  194. package/dist/runtime/app/components/Form/internal/FormFieldRenderer/FormFieldRenderer.vue +67 -0
  195. package/dist/runtime/app/components/Form/internal/FormFieldRenderer/FormFieldRenderer.vue.d.ts +7 -0
  196. package/dist/runtime/app/components/Form/internal/grid.d.ts +9 -0
  197. package/dist/runtime/app/components/Form/internal/grid.js +91 -0
  198. package/dist/runtime/app/components/Form/internal/standard-schema.d.ts +29 -0
  199. package/dist/runtime/app/components/Form/internal/standard-schema.js +15 -0
  200. package/dist/runtime/app/components/Form/internal/useVunoFormState.d.ts +43 -0
  201. package/dist/runtime/app/components/Form/internal/useVunoFormState.js +81 -0
  202. package/dist/runtime/app/components/FormField/FormField.d.vue.ts +35 -0
  203. package/dist/runtime/app/components/FormField/FormField.theme.d.ts +62 -0
  204. package/dist/runtime/app/components/FormField/FormField.theme.js +28 -0
  205. package/dist/runtime/app/components/FormField/FormField.vue +124 -0
  206. package/dist/runtime/app/components/FormField/FormField.vue.d.ts +35 -0
  207. package/dist/runtime/app/components/FormModal/FormModal.d.vue.ts +63 -0
  208. package/dist/runtime/app/components/FormModal/FormModal.theme.d.ts +8 -0
  209. package/dist/runtime/app/components/FormModal/FormModal.theme.js +9 -0
  210. package/dist/runtime/app/components/FormModal/FormModal.vue +95 -0
  211. package/dist/runtime/app/components/FormModal/FormModal.vue.d.ts +63 -0
  212. package/dist/runtime/app/components/FormSection/FormSection.d.vue.ts +15 -0
  213. package/dist/runtime/app/components/FormSection/FormSection.theme.d.ts +12 -0
  214. package/dist/runtime/app/components/FormSection/FormSection.theme.js +14 -0
  215. package/dist/runtime/app/components/FormSection/FormSection.vue +45 -0
  216. package/dist/runtime/app/components/FormSection/FormSection.vue.d.ts +15 -0
  217. package/dist/runtime/app/components/Icon/Icon.d.vue.ts +6 -0
  218. package/dist/runtime/app/components/Icon/Icon.vue +32 -0
  219. package/dist/runtime/app/components/Icon/Icon.vue.d.ts +6 -0
  220. package/dist/runtime/app/components/Menu/Menu.d.vue.ts +36 -0
  221. package/dist/runtime/app/components/Menu/Menu.theme.d.ts +17 -0
  222. package/dist/runtime/app/components/Menu/Menu.theme.js +20 -0
  223. package/dist/runtime/app/components/Menu/Menu.vue +182 -0
  224. package/dist/runtime/app/components/Menu/Menu.vue.d.ts +36 -0
  225. package/dist/runtime/app/components/Modal/Modal.d.vue.ts +43 -0
  226. package/dist/runtime/app/components/Modal/Modal.theme.d.ts +59 -0
  227. package/dist/runtime/app/components/Modal/Modal.theme.js +47 -0
  228. package/dist/runtime/app/components/Modal/Modal.vue +215 -0
  229. package/dist/runtime/app/components/Modal/Modal.vue.d.ts +43 -0
  230. package/dist/runtime/app/components/Navbar/Navbar.d.vue.ts +45 -0
  231. package/dist/runtime/app/components/Navbar/Navbar.theme.d.ts +31 -0
  232. package/dist/runtime/app/components/Navbar/Navbar.theme.js +32 -0
  233. package/dist/runtime/app/components/Navbar/Navbar.vue +47 -0
  234. package/dist/runtime/app/components/Navbar/Navbar.vue.d.ts +45 -0
  235. package/dist/runtime/app/components/NavigationList/NavigationList.d.vue.ts +38 -0
  236. package/dist/runtime/app/components/NavigationList/NavigationList.theme.d.ts +32 -0
  237. package/dist/runtime/app/components/NavigationList/NavigationList.theme.js +35 -0
  238. package/dist/runtime/app/components/NavigationList/NavigationList.vue +187 -0
  239. package/dist/runtime/app/components/NavigationList/NavigationList.vue.d.ts +38 -0
  240. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.d.vue.ts +31 -0
  241. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.theme.d.ts +26 -0
  242. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.theme.js +27 -0
  243. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.vue +236 -0
  244. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.vue.d.ts +31 -0
  245. package/dist/runtime/app/components/NavigationToc/NavigationToc.d.vue.ts +14 -0
  246. package/dist/runtime/app/components/NavigationToc/NavigationToc.theme.d.ts +9 -0
  247. package/dist/runtime/app/components/NavigationToc/NavigationToc.theme.js +10 -0
  248. package/dist/runtime/app/components/NavigationToc/NavigationToc.vue +81 -0
  249. package/dist/runtime/app/components/NavigationToc/NavigationToc.vue.d.ts +14 -0
  250. package/dist/runtime/app/components/Page/Page.d.vue.ts +40 -0
  251. package/dist/runtime/app/components/Page/Page.theme.d.ts +32 -0
  252. package/dist/runtime/app/components/Page/Page.theme.js +31 -0
  253. package/dist/runtime/app/components/Page/Page.vue +132 -0
  254. package/dist/runtime/app/components/Page/Page.vue.d.ts +40 -0
  255. package/dist/runtime/app/components/Pagination/Pagination.d.vue.ts +33 -0
  256. package/dist/runtime/app/components/Pagination/Pagination.theme.d.ts +13 -0
  257. package/dist/runtime/app/components/Pagination/Pagination.theme.js +14 -0
  258. package/dist/runtime/app/components/Pagination/Pagination.vue +129 -0
  259. package/dist/runtime/app/components/Pagination/Pagination.vue.d.ts +33 -0
  260. package/dist/runtime/app/components/Slideover/Slideover.d.vue.ts +43 -0
  261. package/dist/runtime/app/components/Slideover/Slideover.theme.d.ts +35 -0
  262. package/dist/runtime/app/components/Slideover/Slideover.theme.js +24 -0
  263. package/dist/runtime/app/components/Slideover/Slideover.vue +58 -0
  264. package/dist/runtime/app/components/Slideover/Slideover.vue.d.ts +43 -0
  265. package/dist/runtime/app/components/State/State.d.vue.ts +14 -0
  266. package/dist/runtime/app/components/State/State.theme.d.ts +19 -0
  267. package/dist/runtime/app/components/State/State.theme.js +26 -0
  268. package/dist/runtime/app/components/State/State.vue +66 -0
  269. package/dist/runtime/app/components/State/State.vue.d.ts +14 -0
  270. package/dist/runtime/app/components/Table/Table.d.vue.ts +80 -0
  271. package/dist/runtime/app/components/Table/Table.theme.d.ts +50 -0
  272. package/dist/runtime/app/components/Table/Table.theme.js +64 -0
  273. package/dist/runtime/app/components/Table/Table.vue +483 -0
  274. package/dist/runtime/app/components/Table/Table.vue.d.ts +80 -0
  275. package/dist/runtime/app/components/Table/internal/CellBadge/CellBadge.d.vue.ts +5 -0
  276. package/dist/runtime/app/components/Table/internal/CellBadge/CellBadge.vue +26 -0
  277. package/dist/runtime/app/components/Table/internal/CellBadge/CellBadge.vue.d.ts +5 -0
  278. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.d.vue.ts +5 -0
  279. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.theme.d.ts +21 -0
  280. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.theme.js +11 -0
  281. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.vue +32 -0
  282. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.vue.d.ts +5 -0
  283. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.d.vue.ts +5 -0
  284. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.theme.d.ts +5 -0
  285. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.theme.js +4 -0
  286. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.vue +16 -0
  287. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.vue.d.ts +5 -0
  288. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.d.vue.ts +5 -0
  289. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.theme.d.ts +5 -0
  290. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.theme.js +4 -0
  291. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.vue +21 -0
  292. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.vue.d.ts +5 -0
  293. package/dist/runtime/app/components/Table/internal/CellImage/CellImage.d.vue.ts +5 -0
  294. package/dist/runtime/app/components/Table/internal/CellImage/CellImage.vue +24 -0
  295. package/dist/runtime/app/components/Table/internal/CellImage/CellImage.vue.d.ts +5 -0
  296. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.d.vue.ts +5 -0
  297. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.theme.d.ts +5 -0
  298. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.theme.js +4 -0
  299. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.vue +17 -0
  300. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.vue.d.ts +5 -0
  301. package/dist/runtime/app/components/Table/internal/CellText/CellText.d.vue.ts +5 -0
  302. package/dist/runtime/app/components/Table/internal/CellText/CellText.theme.d.ts +13 -0
  303. package/dist/runtime/app/components/Table/internal/CellText/CellText.theme.js +11 -0
  304. package/dist/runtime/app/components/Table/internal/CellText/CellText.vue +16 -0
  305. package/dist/runtime/app/components/Table/internal/CellText/CellText.vue.d.ts +5 -0
  306. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.d.vue.ts +22 -0
  307. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.vue +48 -0
  308. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.vue.d.ts +22 -0
  309. package/dist/runtime/app/components/Table/internal/column.d.ts +9 -0
  310. package/dist/runtime/app/components/Table/internal/column.js +5 -0
  311. package/dist/runtime/app/components/Table/internal/query.d.ts +18 -0
  312. package/dist/runtime/app/components/Table/internal/query.js +8 -0
  313. package/dist/runtime/app/components/Table/internal/selection.d.ts +29 -0
  314. package/dist/runtime/app/components/Table/internal/selection.js +10 -0
  315. package/dist/runtime/app/components/Table/internal/useVunoTable.d.ts +93 -0
  316. package/dist/runtime/app/components/Table/internal/useVunoTable.js +153 -0
  317. package/dist/runtime/app/components/Table/internal/useVunoTableSelection.d.ts +21 -0
  318. package/dist/runtime/app/components/Table/internal/useVunoTableSelection.js +29 -0
  319. package/dist/runtime/app/components/Tabs/Tabs.d.vue.ts +49 -0
  320. package/dist/runtime/app/components/Tabs/Tabs.theme.d.ts +32 -0
  321. package/dist/runtime/app/components/Tabs/Tabs.theme.js +23 -0
  322. package/dist/runtime/app/components/Tabs/Tabs.vue +119 -0
  323. package/dist/runtime/app/components/Tabs/Tabs.vue.d.ts +49 -0
  324. package/dist/runtime/app/components/Tooltip/Tooltip.d.vue.ts +40 -0
  325. package/dist/runtime/app/components/Tooltip/Tooltip.theme.d.ts +12 -0
  326. package/dist/runtime/app/components/Tooltip/Tooltip.theme.js +13 -0
  327. package/dist/runtime/app/components/Tooltip/Tooltip.vue +139 -0
  328. package/dist/runtime/app/components/Tooltip/Tooltip.vue.d.ts +40 -0
  329. package/dist/runtime/app/components/internal/ControlShell/ControlShell.d.vue.ts +41 -0
  330. package/dist/runtime/app/components/internal/ControlShell/ControlShell.theme.d.ts +50 -0
  331. package/dist/runtime/app/components/internal/ControlShell/ControlShell.theme.js +38 -0
  332. package/dist/runtime/app/components/internal/ControlShell/ControlShell.vue +33 -0
  333. package/dist/runtime/app/components/internal/ControlShell/ControlShell.vue.d.ts +41 -0
  334. package/dist/runtime/app/components/internal/FieldShell/FieldShell.d.vue.ts +23 -0
  335. package/dist/runtime/app/components/internal/FieldShell/FieldShell.vue +63 -0
  336. package/dist/runtime/app/components/internal/FieldShell/FieldShell.vue.d.ts +23 -0
  337. package/dist/runtime/app/components/internal/Input/Input.d.vue.ts +52 -0
  338. package/dist/runtime/app/components/internal/Input/Input.theme.d.ts +30 -0
  339. package/dist/runtime/app/components/internal/Input/Input.theme.js +21 -0
  340. package/dist/runtime/app/components/internal/Input/Input.vue +66 -0
  341. package/dist/runtime/app/components/internal/Input/Input.vue.d.ts +52 -0
  342. package/dist/runtime/app/components/internal/NumberInput/NumberInput.d.vue.ts +36 -0
  343. package/dist/runtime/app/components/internal/NumberInput/NumberInput.theme.d.ts +31 -0
  344. package/dist/runtime/app/components/internal/NumberInput/NumberInput.theme.js +26 -0
  345. package/dist/runtime/app/components/internal/NumberInput/NumberInput.vue +221 -0
  346. package/dist/runtime/app/components/internal/NumberInput/NumberInput.vue.d.ts +36 -0
  347. package/dist/runtime/app/components/internal/NumberInput/number.d.ts +42 -0
  348. package/dist/runtime/app/components/internal/NumberInput/number.js +64 -0
  349. package/dist/runtime/app/composables/defineShortcuts.d.ts +19 -0
  350. package/dist/runtime/app/composables/defineShortcuts.js +68 -0
  351. package/dist/runtime/app/composables/internal/useVunoAnchor.d.ts +45 -0
  352. package/dist/runtime/app/composables/internal/useVunoAnchor.js +35 -0
  353. package/dist/runtime/app/composables/internal/useVunoControlGroup.d.ts +17 -0
  354. package/dist/runtime/app/composables/internal/useVunoControlGroup.js +18 -0
  355. package/dist/runtime/app/composables/internal/useVunoPortal.d.ts +18 -0
  356. package/dist/runtime/app/composables/internal/useVunoPortal.js +12 -0
  357. package/dist/runtime/app/composables/useConfirm.d.ts +15 -0
  358. package/dist/runtime/app/composables/useConfirm.js +5 -0
  359. package/dist/runtime/app/composables/useContext.d.ts +11 -0
  360. package/dist/runtime/app/composables/useContext.js +9 -0
  361. package/dist/runtime/app/composables/useCrud.d.ts +23 -0
  362. package/dist/runtime/app/composables/useCrud.js +153 -0
  363. package/dist/runtime/app/composables/useField.d.ts +10 -0
  364. package/dist/runtime/app/composables/useField.js +42 -0
  365. package/dist/runtime/app/composables/useForm.d.ts +5 -0
  366. package/dist/runtime/app/composables/useForm.js +9 -0
  367. package/dist/runtime/app/composables/useModal.d.ts +21 -0
  368. package/dist/runtime/app/composables/useModal.js +24 -0
  369. package/dist/runtime/app/composables/useOverlay.d.ts +22 -0
  370. package/dist/runtime/app/composables/useOverlay.js +10 -0
  371. package/dist/runtime/app/composables/useTableQuery.d.ts +10 -0
  372. package/dist/runtime/app/composables/useTableQuery.js +126 -0
  373. package/dist/runtime/app/composables/useTheme.d.ts +31 -0
  374. package/dist/runtime/app/composables/useTheme.js +29 -0
  375. package/dist/runtime/app/composables/useToast.d.ts +28 -0
  376. package/dist/runtime/app/composables/useToast.js +13 -0
  377. package/dist/runtime/app/internal/keys.d.ts +43 -0
  378. package/dist/runtime/app/internal/keys.js +8 -0
  379. package/dist/runtime/app/internal/slots.d.ts +22 -0
  380. package/dist/runtime/app/internal/slots.js +24 -0
  381. package/dist/runtime/app/plugins/vue-query.d.ts +8 -0
  382. package/dist/runtime/app/plugins/vue-query.js +13 -0
  383. package/dist/runtime/app/theme/icons.d.ts +2 -0
  384. package/dist/runtime/app/theme/icons.js +43 -0
  385. package/dist/runtime/app/theme/index.d.ts +1168 -0
  386. package/dist/runtime/app/theme/index.js +120 -0
  387. package/dist/runtime/app/theme/messages.d.ts +2 -0
  388. package/dist/runtime/app/theme/messages.js +70 -0
  389. package/dist/runtime/app/theme/shared.d.ts +42 -0
  390. package/dist/runtime/app/theme/shared.js +24 -0
  391. package/dist/runtime/app/types/alert.d.ts +13 -0
  392. package/dist/runtime/app/types/alert.js +0 -0
  393. package/dist/runtime/app/types/app-config.d.ts +8 -0
  394. package/dist/runtime/app/types/app-config.js +1 -0
  395. package/dist/runtime/app/types/app.d.ts +83 -0
  396. package/dist/runtime/app/types/app.js +0 -0
  397. package/dist/runtime/app/types/base.d.ts +78 -0
  398. package/dist/runtime/app/types/base.js +0 -0
  399. package/dist/runtime/app/types/confirm.d.ts +19 -0
  400. package/dist/runtime/app/types/confirm.js +0 -0
  401. package/dist/runtime/app/types/crud.d.ts +108 -0
  402. package/dist/runtime/app/types/crud.js +0 -0
  403. package/dist/runtime/app/types/field-type.d.ts +4 -0
  404. package/dist/runtime/app/types/field-type.js +0 -0
  405. package/dist/runtime/app/types/field.d.ts +233 -0
  406. package/dist/runtime/app/types/field.js +0 -0
  407. package/dist/runtime/app/types/form.d.ts +67 -0
  408. package/dist/runtime/app/types/form.js +0 -0
  409. package/dist/runtime/app/types/index.d.ts +16 -0
  410. package/dist/runtime/app/types/index.js +1 -0
  411. package/dist/runtime/app/types/page.d.ts +61 -0
  412. package/dist/runtime/app/types/page.js +0 -0
  413. package/dist/runtime/app/types/responsive.d.ts +8 -0
  414. package/dist/runtime/app/types/responsive.js +0 -0
  415. package/dist/runtime/app/types/shortcuts.d.ts +44 -0
  416. package/dist/runtime/app/types/shortcuts.js +0 -0
  417. package/dist/runtime/app/types/slots.d.ts +30 -0
  418. package/dist/runtime/app/types/slots.js +0 -0
  419. package/dist/runtime/app/types/state.d.ts +35 -0
  420. package/dist/runtime/app/types/state.js +0 -0
  421. package/dist/runtime/app/types/table.d.ts +287 -0
  422. package/dist/runtime/app/types/table.js +0 -0
  423. package/dist/runtime/app/types/theme.d.ts +251 -0
  424. package/dist/runtime/app/types/theme.js +0 -0
  425. package/dist/runtime/app/utils/format.d.ts +18 -0
  426. package/dist/runtime/app/utils/format.js +36 -0
  427. package/dist/runtime/app/utils/pagination.d.ts +41 -0
  428. package/dist/runtime/app/utils/pagination.js +32 -0
  429. package/dist/runtime/app/utils/path.d.ts +16 -0
  430. package/dist/runtime/app/utils/path.js +76 -0
  431. package/dist/runtime/app/utils/query-key.d.ts +20 -0
  432. package/dist/runtime/app/utils/query-key.js +7 -0
  433. package/dist/runtime/app/utils/theme.d.ts +44 -0
  434. package/dist/runtime/app/utils/theme.js +43 -0
  435. package/dist/types.d.mts +3 -11
  436. package/package.json +18 -3
  437. package/dist/module.d.cts +0 -2
@@ -0,0 +1,483 @@
1
+ <script setup>
2
+ import { computed, useId, useTemplateRef } from "vue";
3
+ import { useIcons, useMessages, useTheme } from "#vuno/composables/useTheme";
4
+ import { cn } from "#vuno/utils/theme";
5
+ import Badge from "#vuno/components/Badge/Badge.vue";
6
+ import Button from "#vuno/components/Button/Button.vue";
7
+ import Checkbox from "#vuno/components/FieldCheckbox/internal/Checkbox/Checkbox.vue";
8
+ import FieldSearch from "#vuno/components/FieldSearch/FieldSearch.vue";
9
+ import Form from "#vuno/components/Form/Form.vue";
10
+ import ControlShell from "#vuno/components/internal/ControlShell/ControlShell.vue";
11
+ import Menu from "#vuno/components/Menu/Menu.vue";
12
+ import Pagination from "#vuno/components/Pagination/Pagination.vue";
13
+ import Slideover from "#vuno/components/Slideover/Slideover.vue";
14
+ import State from "#vuno/components/State/State.vue";
15
+ import { resolveColumnValue } from "./internal/column";
16
+ import TableCell from "./internal/TableCell/TableCell.vue";
17
+ import { useVunoTable } from "./internal/useVunoTable";
18
+ import { useVunoTableSelection } from "./internal/useVunoTableSelection";
19
+ defineOptions({ name: "VunoTable" });
20
+ const query = defineModel("query", { type: Object, ...{ required: true } });
21
+ const selection = defineModel("selection", { type: Array, ...{ default: () => [] } });
22
+ const props = defineProps({
23
+ data: { type: Array, required: true },
24
+ definition: { type: Object, required: true },
25
+ failure: { type: Object, required: false },
26
+ loading: { type: Boolean, required: false },
27
+ radius: { type: String, required: false },
28
+ total: { type: Number, required: false },
29
+ ui: { type: Object, required: false }
30
+ });
31
+ const emit = defineEmits(["rowClick"]);
32
+ defineSlots();
33
+ const total = computed(() => props.total ?? 0);
34
+ const hasFailure = computed(() => Boolean(props.failure));
35
+ const icons = useIcons();
36
+ const messages = useMessages();
37
+ const ui = useTheme(
38
+ "table",
39
+ () => props.ui,
40
+ () => ({ radius: props.radius })
41
+ );
42
+ const table = useVunoTable({
43
+ query,
44
+ selection,
45
+ definition: () => props.definition,
46
+ total: () => total.value
47
+ });
48
+ const { activeFilters, applyFilters, clearFilters, clearQuery, clearSelection, columns, filtersDefinition, filtersOpen, filterState, getRowId, goToPage, isFiltered, pageSizes, paginated, rangeEnd, rangeStart, removeFilter, search, searchable, setPageSize, sortDirectionFor, toggleSort } = table;
49
+ const searchField = useTemplateRef("searchField");
50
+ const rows = computed(() => hasFailure.value ? [] : props.data);
51
+ const footerId = useId();
52
+ const skippable = computed(() => rows.value.length > 3 && total.value > 0 && !hasFailure.value);
53
+ const columnCount = computed(() => Math.max(columns.value.length + (props.definition.selectable ? 1 : 0), 1));
54
+ const { allSelected, isSelected, rowLabel, someSelected, toggleAll, toggleRow } = useVunoTableSelection({
55
+ columns,
56
+ getRowId,
57
+ selection,
58
+ definition: () => props.definition,
59
+ rowName: () => messages.value.row,
60
+ rows: () => rows.value
61
+ });
62
+ function ariaSortFor(key) {
63
+ const column = columns.value.find((item) => item.key === key);
64
+ if (!column?.sortable) return void 0;
65
+ const direction = sortDirectionFor(key);
66
+ if (direction === "asc") return "ascending";
67
+ if (direction === "desc") return "descending";
68
+ return "none";
69
+ }
70
+ function clearSearch() {
71
+ table.clearSearch();
72
+ searchField.value?.focus();
73
+ }
74
+ function updateSearch(value) {
75
+ if (value === "") {
76
+ clearSearch();
77
+ return;
78
+ }
79
+ search.value = value ?? "";
80
+ }
81
+ function sortIcon(key) {
82
+ const direction = sortDirectionFor(key);
83
+ if (direction === "asc") return icons.value.sortAsc;
84
+ if (direction === "desc") return icons.value.sortDesc;
85
+ return icons.value.sort;
86
+ }
87
+ defineExpose({
88
+ clearFilters,
89
+ clearQuery,
90
+ clearSearch,
91
+ clearSelection,
92
+ goToPage
93
+ });
94
+ </script>
95
+
96
+ <template>
97
+ <div :class="ui.root">
98
+ <div
99
+ v-if="searchable || (props.definition.filters?.length ?? 0) > 0 || $slots.toolbar"
100
+ :class="ui.toolbar"
101
+ >
102
+ <FieldSearch
103
+ v-if="searchable"
104
+ ref="searchField"
105
+ :modelValue="search"
106
+ :placeholder="props.definition.searchPlaceholder ?? messages.searchPlaceholder"
107
+ :ui="{ root: ui.search }"
108
+ @update:model-value="updateSearch"
109
+ />
110
+
111
+ <div :class="ui.toolbarActions">
112
+ <Button
113
+ v-if="(props.definition.filters?.length ?? 0) > 0"
114
+ color="neutral"
115
+ :icon="icons.filter"
116
+ :label="messages.filters"
117
+ variant="outline"
118
+ @click="filtersOpen = true"
119
+ >
120
+ <!-- `UButton` no admite `badge`: el contador va en el slot. -->
121
+ <template
122
+ v-if="activeFilters.length > 0"
123
+ #trailing
124
+ >
125
+ <Badge
126
+ color="primary"
127
+ :label="String(activeFilters.length)"
128
+ size="sm"
129
+ variant="solid"
130
+ />
131
+ </template>
132
+ </Button>
133
+
134
+ <slot
135
+ name="toolbar"
136
+ :query="query"
137
+ />
138
+ </div>
139
+ </div>
140
+
141
+ <div
142
+ v-if="props.definition.selectable && selection.length > 0"
143
+ :class="ui.selection"
144
+ >
145
+ <slot
146
+ :clear="clearSelection"
147
+ :count="selection.length"
148
+ :keys="selection"
149
+ name="selection"
150
+ >
151
+ <span>{{ selection.length }} {{ selection.length === 1 ? messages.rowSelected : messages.rowsSelected }}</span>
152
+ <Button
153
+ color="neutral"
154
+ :label="messages.clearSelection"
155
+ size="xs"
156
+ variant="ghost"
157
+ @click="clearSelection"
158
+ />
159
+ </slot>
160
+ </div>
161
+
162
+ <div
163
+ v-if="activeFilters.length > 0"
164
+ :class="ui.chips"
165
+ >
166
+ <Badge
167
+ v-for="filter in activeFilters"
168
+ :key="filter.name"
169
+ color="neutral"
170
+ variant="subtle"
171
+ >
172
+ <span>{{ filter.label }}: {{ filter.value }}</span>
173
+ <Button
174
+ :aria-label="`${messages.clearFilters}: ${filter.label}`"
175
+ color="neutral"
176
+ :icon="icons.fileRemove"
177
+ size="xs"
178
+ variant="link"
179
+ @click="removeFilter(filter.name)"
180
+ />
181
+ </Badge>
182
+
183
+ <Button
184
+ color="neutral"
185
+ :label="messages.clearFilters"
186
+ size="xs"
187
+ variant="ghost"
188
+ @click="clearFilters"
189
+ />
190
+ </div>
191
+
192
+ <!-- El panel comparte el `<dialog>` nativo de `VModal`: así hereda el
193
+ foco, el portal y la capa superior sin mezclar geometrías. -->
194
+ <Slideover
195
+ v-model:open="filtersOpen"
196
+ position="end"
197
+ :title="messages.filtersTitle"
198
+ >
199
+ <template #body>
200
+ <Form
201
+ v-model:state="filterState"
202
+ :definition="filtersDefinition"
203
+ :ui="{ sections: ui.filtersBody }"
204
+ />
205
+ </template>
206
+
207
+ <template #footer>
208
+ <div :class="ui.filtersFooter">
209
+ <Button
210
+ color="neutral"
211
+ :label="messages.clearFilters"
212
+ variant="ghost"
213
+ @click="clearFilters"
214
+ />
215
+ <Button
216
+ :label="messages.applyFilters"
217
+ @click="applyFilters"
218
+ />
219
+ </div>
220
+ </template>
221
+ </Slideover>
222
+
223
+ <!--
224
+ La tabla se pinta aquí y no la pinta `UTable`. Lo único que aportaba
225
+ era el `rowSelection`, y esa ya no es la fuente de verdad: lo es
226
+ `selection`, la lista de claves que sale por `v-model:selection`. El
227
+ `Record<string, boolean>` existía solo para hablar con TanStack, que
228
+ además corría con su motor apagado —`manualPagination` y
229
+ `manualSorting`—, porque quien pagina y ordena es el servidor.
230
+
231
+ El marco va en el contenedor, que es quien tiene el desplazamiento
232
+ horizontal: en la `<table>` obligaría a `border-separate` y con eso
233
+ el navegador deja de pintar las líneas entre filas.
234
+ -->
235
+ <a
236
+ v-if="skippable"
237
+ :class="ui.skip"
238
+ :href="`#${footerId}`"
239
+ >{{ messages.skipTable }}</a
240
+ >
241
+
242
+ <div
243
+ :class="ui.tableRoot"
244
+ tabindex="0"
245
+ >
246
+ <table :class="ui.table">
247
+ <thead :class="ui.thead">
248
+ <tr :class="ui.headRow">
249
+ <th
250
+ v-if="props.definition.selectable"
251
+ :class="[ui.th, ui.selectCell]"
252
+ scope="col"
253
+ >
254
+ <Checkbox
255
+ :aria-label="messages.selectAll"
256
+ :indeterminate="someSelected"
257
+ :modelValue="allSelected"
258
+ @update:model-value="(checked) => toggleAll(checked === true)"
259
+ />
260
+ </th>
261
+
262
+ <!--
263
+ `aria-sort` lo pone la tabla y no lo ponía `UTable`:
264
+ sin él, quien no ve la pantalla oye el nombre de la
265
+ columna y el botón, pero no por cuál está ordenada la
266
+ lista ni en qué sentido. Es una mejora, no paridad.
267
+ -->
268
+ <th
269
+ v-for="item in columns"
270
+ :key="item.key"
271
+ :aria-sort="ariaSortFor(item.key)"
272
+ :class="cn(ui.th, item.headerClass)"
273
+ scope="col"
274
+ >
275
+ <Button
276
+ v-if="item.sortable"
277
+ color="neutral"
278
+ :icon="sortIcon(item.key)"
279
+ :label="item.label"
280
+ size="xs"
281
+ trailing
282
+ :ui="{ base: ui.sortButton }"
283
+ variant="ghost"
284
+ @click="toggleSort(item.key)"
285
+ />
286
+ <span v-else>{{ item.label }}</span>
287
+ </th>
288
+ </tr>
289
+ </thead>
290
+
291
+ <tbody :class="ui.tbody">
292
+ <tr
293
+ v-for="(row, index) in rows"
294
+ :key="getRowId(row)"
295
+ :class="ui.tr"
296
+ :data-selected="isSelected(row) ? 'true' : void 0"
297
+ @click="emit('rowClick', row)"
298
+ >
299
+ <!-- `stop` en la casilla: marcar una fila no es abrirla. -->
300
+ <td
301
+ v-if="props.definition.selectable"
302
+ :class="[ui.td, ui.selectCell]"
303
+ @click.stop
304
+ >
305
+ <!-- El nombre lleva dentro el de la fila: sin eso, veinte casillas se llaman igual. -->
306
+ <Checkbox
307
+ :aria-label="`${messages.selectRow} ${rowLabel(row, index)}`"
308
+ :modelValue="isSelected(row)"
309
+ @update:model-value="(checked) => toggleRow(row, checked === true)"
310
+ />
311
+ </td>
312
+
313
+ <td
314
+ v-for="item in columns"
315
+ :key="item.key"
316
+ :class="cn(ui.td, item.cellClass)"
317
+ >
318
+ <Menu
319
+ v-if="item.column.type === 'actions'"
320
+ :items="
321
+ item.column.actions.filter((action) => !action.hidden?.(row)).map((action) => ({
322
+ onSelect: () => action.onSelect(row),
323
+ color: action.color,
324
+ disabled: action.disabled?.(row) ?? false,
325
+ icon: action.icon,
326
+ label: action.label,
327
+ separator: action.separator
328
+ }))
329
+ "
330
+ >
331
+ <Button
332
+ :aria-label="`${messages.rowActions} ${rowLabel(row, index)}`"
333
+ color="neutral"
334
+ :icon="icons.actions"
335
+ size="xs"
336
+ variant="ghost"
337
+ />
338
+ </Menu>
339
+
340
+ <slot
341
+ v-else
342
+ :name="`cell-${item.key}`"
343
+ :row="row"
344
+ :value="resolveColumnValue(item.column, row)"
345
+ >
346
+ <TableCell
347
+ :column="item.column"
348
+ :row="row"
349
+ />
350
+ </slot>
351
+ </td>
352
+ </tr>
353
+
354
+ <tr v-if="rows.length === 0">
355
+ <td
356
+ :class="ui.emptyCell"
357
+ :colspan="columnCount"
358
+ >
359
+ <!-- Un fallo y una lista vacía no son lo mismo: el
360
+ primero ofrece reintentar, el segundo invita a
361
+ crear el primero. -->
362
+ <State
363
+ v-if="props.failure"
364
+ :failure="props.failure"
365
+ tone="failure"
366
+ />
367
+
368
+ <!-- Cargando y sin filas todavía no es «no hay
369
+ nada»: decirlo antes de tiempo hace parpadear
370
+ la tabla en cada cambio. -->
371
+ <div v-else-if="props.loading" />
372
+
373
+ <!-- Con `total` por encima de cero y sin filas, lo
374
+ que falta es la página, no los datos. Se corrige
375
+ sola arriba; entretanto no se afirma que no
376
+ haya nada. -->
377
+ <div v-else-if="total > 0" />
378
+
379
+ <!-- Buscando o filtrando, «no hay nada» sería falso:
380
+ lo que no hay es nada que case. Lo primero
381
+ invita a crear el primer registro y lo segundo
382
+ a quitar el filtro. -->
383
+ <slot
384
+ v-else-if="isFiltered"
385
+ :clear="clearQuery"
386
+ name="no-matches"
387
+ >
388
+ <State
389
+ :hint="messages.noMatchesHint"
390
+ :icon="icons.noMatches"
391
+ :title="messages.noMatches"
392
+ >
393
+ <template #actions>
394
+ <slot
395
+ :clear="clearQuery"
396
+ name="no-matches-actions"
397
+ >
398
+ <Button
399
+ color="neutral"
400
+ :label="messages.clearQuery"
401
+ variant="outline"
402
+ @click="clearQuery"
403
+ />
404
+ </slot>
405
+ </template>
406
+ </State>
407
+ </slot>
408
+
409
+ <slot
410
+ v-else
411
+ name="empty"
412
+ >
413
+ <State
414
+ :hint="props.definition.empty?.hint"
415
+ :icon="props.definition.empty?.icon"
416
+ :title="props.definition.empty?.title"
417
+ >
418
+ <template #actions>
419
+ <slot name="empty-actions" />
420
+ </template>
421
+ </State>
422
+ </slot>
423
+ </td>
424
+ </tr>
425
+ </tbody>
426
+ </table>
427
+ </div>
428
+
429
+ <div
430
+ v-if="total > 0 && !hasFailure"
431
+ :id="footerId"
432
+ :class="ui.footer"
433
+ tabindex="-1"
434
+ >
435
+ <div :class="ui.meta">
436
+ <span v-if="paginated">{{ messages.showing }} {{ rangeStart }}–{{ rangeEnd }} {{ messages.of }} {{ total }}</span>
437
+
438
+ <!-- Sin paginar, un rango «1–30 de 30» sugiere que hay más. -->
439
+ <span v-else>{{ total }} {{ messages.results }}</span>
440
+
441
+ <!--
442
+ Un `<select>` nativo y no un combobox: son cinco números sin
443
+ búsqueda ni selección múltiple, y el navegador ya resuelve
444
+ el teclado, el foco y la lista —en el móvil, con su propia
445
+ rueda—. La caja la pone `ControlShell` para que se vea como
446
+ los demás controles.
447
+
448
+ El ancho va por `ui` porque pelea con el `w-full` del tema;
449
+ puesto como `class` sobre el componente convivirían los dos.
450
+ -->
451
+
452
+ <ControlShell
453
+ v-if="paginated"
454
+ size="xs"
455
+ :ui="{ root: ui.pageSizeControl }"
456
+ >
457
+ <select
458
+ :aria-label="messages.pageSize"
459
+ :class="ui.pageSizeSelect"
460
+ :value="query.pageSize"
461
+ @change="(event) => setPageSize(Number(event.target.value))"
462
+ >
463
+ <option
464
+ v-for="size in pageSizes"
465
+ :key="size"
466
+ :value="size"
467
+ >
468
+ {{ size }}
469
+ </option>
470
+ </select>
471
+ </ControlShell>
472
+ </div>
473
+
474
+ <Pagination
475
+ v-if="paginated"
476
+ :page="query.page"
477
+ :pageSize="query.pageSize"
478
+ :total="total"
479
+ @update:page="goToPage"
480
+ />
481
+ </div>
482
+ </div>
483
+ </template>
@@ -0,0 +1,80 @@
1
+ import type { VunoRadius } from '#vuno/types/base';
2
+ import type { VunoUi } from '#vuno/types/slots';
3
+ import type { VunoTableDefinition, VunoTableFailure, VunoTableQuery, VunoTableRow } from '#vuno/types/table';
4
+ declare const __VLS_export: <TRow extends VunoTableRow>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
5
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<({
6
+ data: TRow[];
7
+ definition: VunoTableDefinition<TRow>;
8
+ /**
9
+ * Fallo de la consulta. Sin esto, un error se pintaría como «no hay
10
+ * resultados» y la tabla afirmaría que no hay nada cuando en realidad
11
+ * no se pudo saber.
12
+ */
13
+ failure?: VunoTableFailure;
14
+ loading?: boolean;
15
+ /** La curvatura. Sin valor, la que traiga el tema. */
16
+ radius?: VunoRadius;
17
+ /** Total de filas en servidor, no las de la página actual. */
18
+ total?: number;
19
+ ui?: VunoUi<"table">;
20
+ } & {
21
+ /**
22
+ * Estado de consulta. El consumidor lo observa y devuelve `data` y `total`.
23
+ *
24
+ * Es obligatorio a propósito: la tabla no trae datos por sí misma, así que
25
+ * un estado interno avanzaría de página sin que nadie pidiera la siguiente
26
+ * —el pie diría «11-20» mientras se siguen viendo las filas 1-10—. Dónde
27
+ * vive ese estado lo decide `useTableQuery`: un `ref` normal o la
28
+ * query string.
29
+ */
30
+ query: VunoTableQuery;
31
+ /** Claves de las filas seleccionadas, no las filas: con paginación en servidor las de otras páginas no están cargadas. */
32
+ selection?: (number | string)[];
33
+ }) & {
34
+ onRowClick?: ((row: TRow) => any) | undefined;
35
+ "onUpdate:query"?: ((value: VunoTableQuery) => any) | undefined;
36
+ "onUpdate:selection"?: ((value: (string | number)[]) => any) | undefined;
37
+ }> & (typeof globalThis extends {
38
+ __VLS_PROPS_FALLBACK: infer P;
39
+ } ? P : {});
40
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
41
+ clearFilters: () => void;
42
+ clearQuery: () => void;
43
+ clearSearch: () => void;
44
+ clearSelection: () => void;
45
+ goToPage: (page: number) => void;
46
+ }>) => void;
47
+ attrs: any;
48
+ slots: {
49
+ [key: `cell-${string}`]: (props: {
50
+ row: TRow;
51
+ value: unknown;
52
+ }) => unknown;
53
+ empty?: () => unknown;
54
+ 'empty-actions'?: () => unknown;
55
+ 'no-matches'?: (props: {
56
+ clear: () => void;
57
+ }) => unknown;
58
+ 'no-matches-actions'?: (props: {
59
+ clear: () => void;
60
+ }) => unknown;
61
+ selection?: (props: {
62
+ count: number;
63
+ keys: (number | string)[];
64
+ clear: () => void;
65
+ }) => unknown;
66
+ toolbar?: (props: {
67
+ query: VunoTableQuery;
68
+ }) => unknown;
69
+ };
70
+ emit: ((evt: "rowClick", row: TRow) => void) & (((event: "update:query", value: VunoTableQuery) => void) & ((event: "update:selection", value: (string | number)[]) => void));
71
+ }>) => import("vue").VNode & {
72
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
73
+ };
74
+ declare const _default: typeof __VLS_export;
75
+ export default _default;
76
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
77
+ [K in keyof T]: T[K];
78
+ } : {
79
+ [K in keyof T as K]: T[K];
80
+ }) & {};
@@ -0,0 +1,5 @@
1
+ import type { VunoTableCellProps } from '#vuno/types/table';
2
+ type __VLS_Props = VunoTableCellProps<'badge'>;
3
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
4
+ declare const _default: typeof __VLS_export;
5
+ export default _default;
@@ -0,0 +1,26 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import Badge from "#vuno/components/Badge/Badge.vue";
4
+ defineOptions({ name: "VunoCellBadge" });
5
+ const props = defineProps({
6
+ column: { type: null, required: true },
7
+ row: { type: Object, required: true },
8
+ value: { type: null, required: true }
9
+ });
10
+ const text = computed(() => props.value === null || props.value === void 0 ? "" : String(props.value));
11
+ const badge = computed(() => {
12
+ const entry = props.column.map?.[text.value];
13
+ return {
14
+ color: entry?.color ?? props.column.color ?? "neutral",
15
+ label: entry?.label ?? text.value
16
+ };
17
+ });
18
+ </script>
19
+
20
+ <template>
21
+ <Badge
22
+ :color="badge.color"
23
+ :label="badge.label"
24
+ variant="subtle"
25
+ />
26
+ </template>
@@ -0,0 +1,5 @@
1
+ import type { VunoTableCellProps } from '#vuno/types/table';
2
+ type __VLS_Props = VunoTableCellProps<'badge'>;
3
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
4
+ declare const _default: typeof __VLS_export;
5
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import type { VunoTableCellProps } from '#vuno/types/table';
2
+ type __VLS_Props = VunoTableCellProps<'boolean'>;
3
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
4
+ declare const _default: typeof __VLS_export;
5
+ export default _default;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Las celdas de la tabla. Estaban fuera del tema: el color del sí y del no
3
+ * y el ancho al que se corta un texto se decidían en el componente, así que
4
+ * un proyecto no tenía dónde cambiar lo primero que suele querer cambiar.
5
+ */
6
+ export declare const cellBooleanTheme: Record<"cellBoolean", {
7
+ readonly slots: {
8
+ readonly icon: "";
9
+ readonly label: "";
10
+ };
11
+ readonly variants: {
12
+ readonly value: {
13
+ readonly false: {
14
+ readonly icon: "text-vuno-muted";
15
+ };
16
+ readonly true: {
17
+ readonly icon: "text-vuno-success";
18
+ };
19
+ };
20
+ };
21
+ }>;
@@ -0,0 +1,11 @@
1
+ import { defineTheme } from "#vuno/utils/theme";
2
+ export const cellBooleanTheme = defineTheme("cellBoolean", {
3
+ slots: { icon: "", label: "" },
4
+ /* El color sale de la variante y no de la plantilla. */
5
+ variants: {
6
+ value: {
7
+ false: { icon: "text-vuno-muted" },
8
+ true: { icon: "text-vuno-success" }
9
+ }
10
+ }
11
+ });
@@ -0,0 +1,32 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { useIcons, useMessages, useTheme } from "#vuno/composables/useTheme";
4
+ import Icon from "#vuno/components/Icon/Icon.vue";
5
+ defineOptions({ name: "VunoCellBoolean" });
6
+ const props = defineProps({
7
+ column: { type: null, required: true },
8
+ row: { type: Object, required: true },
9
+ value: { type: null, required: true }
10
+ });
11
+ const icons = useIcons();
12
+ const messages = useMessages();
13
+ const label = computed(() => props.value ? props.column.trueLabel : props.column.falseLabel);
14
+ const accessibleLabel = computed(() => label.value || (props.value ? messages.value.booleanTrue : messages.value.booleanFalse));
15
+ const ui = useTheme("cellBoolean", void 0, () => ({ value: props.value ? "true" : "false" }));
16
+ </script>
17
+
18
+ <template>
19
+ <span
20
+ v-if="label"
21
+ :class="ui.label"
22
+ >{{ label }}</span
23
+ >
24
+
25
+ <template v-else>
26
+ <Icon
27
+ :class="ui.icon"
28
+ :name="props.value ? icons.booleanTrue : icons.booleanFalse"
29
+ />
30
+ <span class="sr-only">{{ accessibleLabel }}</span>
31
+ </template>
32
+ </template>