@groupteknology/vuno 2.0.0 → 3.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 (381) hide show
  1. package/README.md +193 -175
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +7 -1
  4. package/dist/runtime/app/assets/css/dialog.css +1 -1
  5. package/dist/runtime/app/assets/css/main.css +1 -1
  6. package/dist/runtime/app/assets/css/theme.css +1 -1
  7. package/dist/runtime/app/assets/css/tokens.css +1 -1
  8. package/dist/runtime/app/components/Alert/Alert.d.vue.ts +2 -2
  9. package/dist/runtime/app/components/Alert/Alert.theme.d.ts +7 -6
  10. package/dist/runtime/app/components/Alert/Alert.theme.js +7 -6
  11. package/dist/runtime/app/components/Alert/Alert.types.d.ts +10 -0
  12. package/dist/runtime/app/components/Alert/Alert.vue +17 -8
  13. package/dist/runtime/app/components/Alert/Alert.vue.d.ts +2 -2
  14. package/dist/runtime/app/components/App/App.d.vue.ts +3 -19
  15. package/dist/runtime/app/components/App/App.types.d.ts +4 -0
  16. package/dist/runtime/app/components/App/App.vue +48 -29
  17. package/dist/runtime/app/components/App/App.vue.d.ts +3 -19
  18. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.vue +2 -3
  19. package/dist/runtime/app/components/App/internal/Toast/Toast.theme.d.ts +5 -5
  20. package/dist/runtime/app/components/App/internal/Toast/Toast.theme.js +7 -9
  21. package/dist/runtime/app/components/App/internal/Toast/Toast.vue +27 -36
  22. package/dist/runtime/app/components/App/internal/Toaster/Toaster.theme.d.ts +3 -3
  23. package/dist/runtime/app/components/App/internal/Toaster/Toaster.theme.js +3 -3
  24. package/dist/runtime/app/components/Avatar/Avatar.d.vue.ts +5 -22
  25. package/dist/runtime/app/components/Avatar/Avatar.types.d.ts +10 -0
  26. package/dist/runtime/app/components/Avatar/Avatar.types.js +0 -0
  27. package/dist/runtime/app/components/Avatar/Avatar.vue.d.ts +5 -22
  28. package/dist/runtime/app/components/Badge/Badge.d.vue.ts +7 -26
  29. package/dist/runtime/app/components/Badge/Badge.types.d.ts +12 -0
  30. package/dist/runtime/app/components/Badge/Badge.types.js +0 -0
  31. package/dist/runtime/app/components/Badge/Badge.vue.d.ts +7 -26
  32. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.d.vue.ts +7 -0
  33. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.theme.d.ts +15 -0
  34. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.theme.js +16 -0
  35. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.types.d.ts +7 -0
  36. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.types.js +0 -0
  37. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.vue +109 -0
  38. package/dist/runtime/app/components/Breadcrumb/Breadcrumb.vue.d.ts +7 -0
  39. package/dist/runtime/app/components/Button/Button.d.vue.ts +11 -31
  40. package/dist/runtime/app/components/Button/Button.theme.d.ts +36 -22
  41. package/dist/runtime/app/components/Button/Button.theme.js +28 -20
  42. package/dist/runtime/app/components/Button/Button.types.d.ts +24 -0
  43. package/dist/runtime/app/components/Button/Button.types.js +0 -0
  44. package/dist/runtime/app/components/Button/Button.vue +84 -33
  45. package/dist/runtime/app/components/Button/Button.vue.d.ts +11 -31
  46. package/dist/runtime/app/components/Card/Card.d.vue.ts +7 -69
  47. package/dist/runtime/app/components/Card/Card.theme.d.ts +56 -13
  48. package/dist/runtime/app/components/Card/Card.theme.js +39 -19
  49. package/dist/runtime/app/components/Card/Card.types.d.ts +12 -0
  50. package/dist/runtime/app/components/Card/Card.types.js +0 -0
  51. package/dist/runtime/app/components/Card/Card.vue +17 -11
  52. package/dist/runtime/app/components/Card/Card.vue.d.ts +7 -69
  53. package/dist/runtime/app/components/Code/Code.d.vue.ts +3 -13
  54. package/dist/runtime/app/components/Code/Code.theme.d.ts +1 -1
  55. package/dist/runtime/app/components/Code/Code.theme.js +1 -1
  56. package/dist/runtime/app/components/Code/Code.types.d.ts +8 -0
  57. package/dist/runtime/app/components/Code/Code.types.js +0 -0
  58. package/dist/runtime/app/components/Code/Code.vue +12 -5
  59. package/dist/runtime/app/components/Code/Code.vue.d.ts +3 -13
  60. package/dist/runtime/app/components/Collapsible/Collapsible.d.vue.ts +31 -0
  61. package/dist/runtime/app/components/Collapsible/Collapsible.theme.d.ts +6 -0
  62. package/dist/runtime/app/components/Collapsible/Collapsible.theme.js +7 -0
  63. package/dist/runtime/app/components/Collapsible/Collapsible.types.d.ts +4 -0
  64. package/dist/runtime/app/components/Collapsible/Collapsible.types.js +0 -0
  65. package/dist/runtime/app/components/Collapsible/Collapsible.vue +72 -0
  66. package/dist/runtime/app/components/Collapsible/Collapsible.vue.d.ts +31 -0
  67. package/dist/runtime/app/components/ColorModeButton/ColorModeButton.d.vue.ts +12 -0
  68. package/dist/runtime/app/components/ColorModeButton/ColorModeButton.types.d.ts +13 -0
  69. package/dist/runtime/app/components/ColorModeButton/ColorModeButton.types.js +0 -0
  70. package/dist/runtime/app/components/ColorModeButton/ColorModeButton.vue +55 -0
  71. package/dist/runtime/app/components/ColorModeButton/ColorModeButton.vue.d.ts +12 -0
  72. package/dist/runtime/app/components/Confirm/Confirm.d.vue.ts +2 -6
  73. package/dist/runtime/app/components/Confirm/Confirm.types.d.ts +6 -0
  74. package/dist/runtime/app/components/Confirm/Confirm.types.js +0 -0
  75. package/dist/runtime/app/components/Confirm/Confirm.vue.d.ts +2 -6
  76. package/dist/runtime/app/components/Container/Container.d.vue.ts +4 -28
  77. package/dist/runtime/app/components/Container/Container.types.d.ts +9 -0
  78. package/dist/runtime/app/components/Container/Container.types.js +0 -0
  79. package/dist/runtime/app/components/Container/Container.vue +1 -1
  80. package/dist/runtime/app/components/Container/Container.vue.d.ts +4 -28
  81. package/dist/runtime/app/components/ControlGroup/ControlGroup.d.vue.ts +5 -14
  82. package/dist/runtime/app/components/ControlGroup/ControlGroup.types.d.ts +9 -0
  83. package/dist/runtime/app/components/ControlGroup/ControlGroup.types.js +0 -0
  84. package/dist/runtime/app/components/ControlGroup/ControlGroup.vue.d.ts +5 -14
  85. package/dist/runtime/app/components/DataTable/DataTable.d.vue.ts +64 -0
  86. package/dist/runtime/app/components/DataTable/DataTable.theme.d.ts +17 -0
  87. package/dist/runtime/app/components/DataTable/DataTable.theme.js +19 -0
  88. package/dist/runtime/app/components/DataTable/DataTable.types.d.ts +13 -0
  89. package/dist/runtime/app/components/DataTable/DataTable.types.js +0 -0
  90. package/dist/runtime/app/components/DataTable/DataTable.vue +356 -0
  91. package/dist/runtime/app/components/DataTable/DataTable.vue.d.ts +64 -0
  92. package/dist/runtime/app/components/{Table/internal/useVunoTable.d.ts → DataTable/internal/useVunoDataTable.d.ts} +6 -29
  93. package/dist/runtime/app/components/{Table/internal/useVunoTable.js → DataTable/internal/useVunoDataTable.js} +2 -29
  94. package/dist/runtime/app/components/FieldArray/FieldArray.d.vue.ts +2 -2
  95. package/dist/runtime/app/components/FieldArray/FieldArray.types.d.ts +2 -0
  96. package/dist/runtime/app/components/FieldArray/FieldArray.types.js +0 -0
  97. package/dist/runtime/app/components/FieldArray/FieldArray.vue +12 -5
  98. package/dist/runtime/app/components/FieldArray/FieldArray.vue.d.ts +2 -2
  99. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.d.vue.ts +2 -2
  100. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.types.d.ts +2 -0
  101. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.types.js +0 -0
  102. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.vue +1 -1
  103. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.vue.d.ts +2 -2
  104. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.d.vue.ts +4 -3
  105. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.vue.d.ts +4 -3
  106. package/dist/runtime/app/components/FieldColor/FieldColor.d.vue.ts +2 -2
  107. package/dist/runtime/app/components/FieldColor/FieldColor.types.d.ts +2 -0
  108. package/dist/runtime/app/components/FieldColor/FieldColor.types.js +0 -0
  109. package/dist/runtime/app/components/FieldColor/FieldColor.vue +3 -3
  110. package/dist/runtime/app/components/FieldColor/FieldColor.vue.d.ts +2 -2
  111. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.d.vue.ts +2 -2
  112. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.types.d.ts +2 -0
  113. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.types.js +0 -0
  114. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.vue +3 -3
  115. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.vue.d.ts +2 -2
  116. package/dist/runtime/app/components/FieldFile/FieldFile.d.vue.ts +2 -2
  117. package/dist/runtime/app/components/FieldFile/FieldFile.types.d.ts +2 -0
  118. package/dist/runtime/app/components/FieldFile/FieldFile.types.js +0 -0
  119. package/dist/runtime/app/components/FieldFile/FieldFile.vue +1 -1
  120. package/dist/runtime/app/components/FieldFile/FieldFile.vue.d.ts +2 -2
  121. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.d.vue.ts +4 -3
  122. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.theme.d.ts +1 -0
  123. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.theme.js +1 -0
  124. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.vue +26 -5
  125. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.vue.d.ts +4 -3
  126. package/dist/runtime/app/components/FieldInput/FieldInput.d.vue.ts +4 -4
  127. package/dist/runtime/app/components/FieldInput/FieldInput.types.d.ts +2 -0
  128. package/dist/runtime/app/components/FieldInput/FieldInput.types.js +0 -0
  129. package/dist/runtime/app/components/FieldInput/FieldInput.vue +3 -3
  130. package/dist/runtime/app/components/FieldInput/FieldInput.vue.d.ts +4 -4
  131. package/dist/runtime/app/components/FieldNumber/FieldNumber.d.vue.ts +2 -2
  132. package/dist/runtime/app/components/FieldNumber/FieldNumber.types.d.ts +2 -0
  133. package/dist/runtime/app/components/FieldNumber/FieldNumber.types.js +0 -0
  134. package/dist/runtime/app/components/FieldNumber/FieldNumber.vue +3 -3
  135. package/dist/runtime/app/components/FieldNumber/FieldNumber.vue.d.ts +2 -2
  136. package/dist/runtime/app/components/FieldPassword/FieldPassword.d.vue.ts +2 -2
  137. package/dist/runtime/app/components/FieldPassword/FieldPassword.types.d.ts +2 -0
  138. package/dist/runtime/app/components/FieldPassword/FieldPassword.types.js +0 -0
  139. package/dist/runtime/app/components/FieldPassword/FieldPassword.vue +4 -4
  140. package/dist/runtime/app/components/FieldPassword/FieldPassword.vue.d.ts +2 -2
  141. package/dist/runtime/app/components/FieldRadio/FieldRadio.d.vue.ts +3 -2
  142. package/dist/runtime/app/components/FieldRadio/FieldRadio.types.d.ts +2 -0
  143. package/dist/runtime/app/components/FieldRadio/FieldRadio.types.js +0 -0
  144. package/dist/runtime/app/components/FieldRadio/FieldRadio.vue +1 -1
  145. package/dist/runtime/app/components/FieldRadio/FieldRadio.vue.d.ts +3 -2
  146. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.d.vue.ts +4 -4
  147. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.vue +6 -2
  148. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.vue.d.ts +4 -4
  149. package/dist/runtime/app/components/FieldSearch/FieldSearch.d.vue.ts +3 -3
  150. package/dist/runtime/app/components/FieldSearch/FieldSearch.types.d.ts +2 -0
  151. package/dist/runtime/app/components/FieldSearch/FieldSearch.types.js +0 -0
  152. package/dist/runtime/app/components/FieldSearch/FieldSearch.vue +4 -4
  153. package/dist/runtime/app/components/FieldSearch/FieldSearch.vue.d.ts +3 -3
  154. package/dist/runtime/app/components/FieldSelect/FieldSelect.d.vue.ts +3 -2
  155. package/dist/runtime/app/components/FieldSelect/FieldSelect.types.d.ts +2 -0
  156. package/dist/runtime/app/components/FieldSelect/FieldSelect.types.js +0 -0
  157. package/dist/runtime/app/components/FieldSelect/FieldSelect.vue +1 -1
  158. package/dist/runtime/app/components/FieldSelect/FieldSelect.vue.d.ts +3 -2
  159. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.d.vue.ts +7 -7
  160. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.vue +16 -6
  161. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.vue.d.ts +7 -7
  162. package/dist/runtime/app/components/FieldSlug/FieldSlug.d.vue.ts +2 -2
  163. package/dist/runtime/app/components/FieldSlug/FieldSlug.types.d.ts +2 -0
  164. package/dist/runtime/app/components/FieldSlug/FieldSlug.types.js +0 -0
  165. package/dist/runtime/app/components/FieldSlug/FieldSlug.vue +4 -4
  166. package/dist/runtime/app/components/FieldSlug/FieldSlug.vue.d.ts +2 -2
  167. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.d.vue.ts +2 -2
  168. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.types.d.ts +2 -0
  169. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.types.js +0 -0
  170. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.vue +1 -1
  171. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.vue.d.ts +2 -2
  172. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.d.vue.ts +4 -3
  173. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.vue.d.ts +4 -3
  174. package/dist/runtime/app/components/FieldTags/FieldTags.d.vue.ts +2 -2
  175. package/dist/runtime/app/components/FieldTags/FieldTags.types.d.ts +2 -0
  176. package/dist/runtime/app/components/FieldTags/FieldTags.types.js +0 -0
  177. package/dist/runtime/app/components/FieldTags/FieldTags.vue +1 -1
  178. package/dist/runtime/app/components/FieldTags/FieldTags.vue.d.ts +2 -2
  179. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.d.vue.ts +4 -4
  180. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.vue +16 -6
  181. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.vue.d.ts +4 -4
  182. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.d.vue.ts +2 -2
  183. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.types.d.ts +2 -0
  184. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.types.js +0 -0
  185. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.vue +1 -1
  186. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.vue.d.ts +2 -2
  187. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.d.vue.ts +4 -3
  188. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.vue +4 -4
  189. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.vue.d.ts +4 -3
  190. package/dist/runtime/app/components/Form/Form.d.vue.ts +3 -19
  191. package/dist/runtime/app/components/Form/Form.types.d.ts +8 -0
  192. package/dist/runtime/app/components/Form/Form.types.js +0 -0
  193. package/dist/runtime/app/components/Form/Form.vue +3 -3
  194. package/dist/runtime/app/components/Form/Form.vue.d.ts +3 -19
  195. package/dist/runtime/app/components/FormField/FormField.d.vue.ts +4 -18
  196. package/dist/runtime/app/components/FormField/FormField.types.d.ts +14 -0
  197. package/dist/runtime/app/components/FormField/FormField.types.js +0 -0
  198. package/dist/runtime/app/components/FormField/FormField.vue +26 -10
  199. package/dist/runtime/app/components/FormField/FormField.vue.d.ts +4 -18
  200. package/dist/runtime/app/components/{internal → FormField/internal}/FieldShell/FieldShell.d.vue.ts +2 -3
  201. package/dist/runtime/app/components/{internal → FormField/internal}/FieldShell/FieldShell.vue.d.ts +2 -3
  202. package/dist/runtime/app/components/FormModal/FormModal.d.vue.ts +6 -25
  203. package/dist/runtime/app/components/FormModal/FormModal.types.d.ts +14 -0
  204. package/dist/runtime/app/components/FormModal/FormModal.types.js +0 -0
  205. package/dist/runtime/app/components/FormModal/FormModal.vue +12 -2
  206. package/dist/runtime/app/components/FormModal/FormModal.vue.d.ts +6 -25
  207. package/dist/runtime/app/components/FormSection/FormSection.d.vue.ts +2 -13
  208. package/dist/runtime/app/components/FormSection/FormSection.types.d.ts +7 -0
  209. package/dist/runtime/app/components/FormSection/FormSection.types.js +0 -0
  210. package/dist/runtime/app/components/FormSection/FormSection.vue +11 -4
  211. package/dist/runtime/app/components/FormSection/FormSection.vue.d.ts +2 -13
  212. package/dist/runtime/app/components/Icon/Icon.d.vue.ts +2 -4
  213. package/dist/runtime/app/components/Icon/Icon.types.d.ts +3 -0
  214. package/dist/runtime/app/components/Icon/Icon.types.js +0 -0
  215. package/dist/runtime/app/components/Icon/Icon.vue.d.ts +2 -4
  216. package/dist/runtime/app/components/Menu/Menu.d.vue.ts +4 -21
  217. package/dist/runtime/app/components/Menu/Menu.types.d.ts +7 -0
  218. package/dist/runtime/app/components/Menu/Menu.types.js +0 -0
  219. package/dist/runtime/app/components/Menu/Menu.vue +18 -110
  220. package/dist/runtime/app/components/Menu/Menu.vue.d.ts +4 -21
  221. package/dist/runtime/app/components/Menu/internal/MenuLevel/MenuLevel.d.vue.ts +26 -0
  222. package/dist/runtime/app/components/Menu/internal/MenuLevel/MenuLevel.vue +167 -0
  223. package/dist/runtime/app/components/Menu/internal/MenuLevel/MenuLevel.vue.d.ts +26 -0
  224. package/dist/runtime/app/components/Modal/Modal.d.vue.ts +6 -18
  225. package/dist/runtime/app/components/Modal/Modal.theme.d.ts +18 -14
  226. package/dist/runtime/app/components/Modal/Modal.theme.js +17 -21
  227. package/dist/runtime/app/components/Modal/Modal.types.d.ts +12 -0
  228. package/dist/runtime/app/components/Modal/Modal.types.js +0 -0
  229. package/dist/runtime/app/components/Modal/Modal.vue +99 -65
  230. package/dist/runtime/app/components/Modal/Modal.vue.d.ts +6 -18
  231. package/dist/runtime/app/components/Navbar/Navbar.d.vue.ts +3 -28
  232. package/dist/runtime/app/components/Navbar/Navbar.theme.d.ts +2 -3
  233. package/dist/runtime/app/components/Navbar/Navbar.theme.js +2 -3
  234. package/dist/runtime/app/components/Navbar/Navbar.types.d.ts +4 -0
  235. package/dist/runtime/app/components/Navbar/Navbar.types.js +0 -0
  236. package/dist/runtime/app/components/Navbar/Navbar.vue.d.ts +3 -28
  237. package/dist/runtime/app/components/NavigationList/NavigationList.d.vue.ts +4 -33
  238. package/dist/runtime/app/components/NavigationList/NavigationList.keys.d.ts +3 -0
  239. package/dist/runtime/app/components/NavigationList/NavigationList.keys.js +1 -0
  240. package/dist/runtime/app/components/NavigationList/NavigationList.types.d.ts +9 -0
  241. package/dist/runtime/app/components/NavigationList/NavigationList.types.js +0 -0
  242. package/dist/runtime/app/components/NavigationList/NavigationList.vue +65 -19
  243. package/dist/runtime/app/components/NavigationList/NavigationList.vue.d.ts +4 -33
  244. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.d.vue.ts +3 -24
  245. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.keys.d.ts +7 -0
  246. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.keys.js +3 -0
  247. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.types.d.ts +10 -0
  248. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.types.js +0 -0
  249. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.vue +45 -13
  250. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.vue.d.ts +3 -24
  251. package/dist/runtime/app/components/NavigationToc/NavigationToc.d.vue.ts +3 -10
  252. package/dist/runtime/app/components/NavigationToc/NavigationToc.types.d.ts +7 -0
  253. package/dist/runtime/app/components/NavigationToc/NavigationToc.types.js +0 -0
  254. package/dist/runtime/app/components/NavigationToc/NavigationToc.vue +8 -1
  255. package/dist/runtime/app/components/NavigationToc/NavigationToc.vue.d.ts +3 -10
  256. package/dist/runtime/app/components/Pagination/Pagination.d.vue.ts +5 -23
  257. package/dist/runtime/app/components/Pagination/Pagination.types.d.ts +11 -0
  258. package/dist/runtime/app/components/Pagination/Pagination.types.js +0 -0
  259. package/dist/runtime/app/components/Pagination/Pagination.vue +6 -2
  260. package/dist/runtime/app/components/Pagination/Pagination.vue.d.ts +5 -23
  261. package/dist/runtime/app/components/Slideover/Slideover.d.vue.ts +4 -13
  262. package/dist/runtime/app/components/Slideover/Slideover.types.d.ts +12 -0
  263. package/dist/runtime/app/components/Slideover/Slideover.types.js +0 -0
  264. package/dist/runtime/app/components/Slideover/Slideover.vue.d.ts +4 -13
  265. package/dist/runtime/app/components/State/State.d.vue.ts +2 -2
  266. package/dist/runtime/app/components/State/State.types.d.ts +15 -0
  267. package/dist/runtime/app/components/State/State.types.js +0 -0
  268. package/dist/runtime/app/components/State/State.vue +13 -3
  269. package/dist/runtime/app/components/State/State.vue.d.ts +2 -2
  270. package/dist/runtime/app/components/Table/Table.d.vue.ts +8 -55
  271. package/dist/runtime/app/components/Table/Table.theme.d.ts +17 -35
  272. package/dist/runtime/app/components/Table/Table.theme.js +15 -48
  273. package/dist/runtime/app/components/Table/Table.types.d.ts +9 -0
  274. package/dist/runtime/app/components/Table/Table.types.js +0 -0
  275. package/dist/runtime/app/components/Table/Table.vue +143 -415
  276. package/dist/runtime/app/components/Table/Table.vue.d.ts +8 -55
  277. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.vue +13 -3
  278. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.vue +8 -1
  279. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.vue +8 -1
  280. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.vue +8 -1
  281. package/dist/runtime/app/components/Table/internal/CellText/CellText.vue +8 -1
  282. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.d.vue.ts +2 -2
  283. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.vue.d.ts +2 -2
  284. package/dist/runtime/app/components/Table/internal/column.d.ts +9 -0
  285. package/dist/runtime/app/components/Table/internal/column.js +15 -0
  286. package/dist/runtime/app/components/Table/internal/useVunoTableSelection.d.ts +1 -1
  287. package/dist/runtime/app/components/Tabs/Tabs.d.vue.ts +5 -24
  288. package/dist/runtime/app/components/Tabs/Tabs.theme.d.ts +15 -6
  289. package/dist/runtime/app/components/Tabs/Tabs.theme.js +15 -6
  290. package/dist/runtime/app/components/Tabs/Tabs.types.d.ts +10 -0
  291. package/dist/runtime/app/components/Tabs/Tabs.types.js +0 -0
  292. package/dist/runtime/app/components/Tabs/Tabs.vue +91 -17
  293. package/dist/runtime/app/components/Tabs/Tabs.vue.d.ts +5 -24
  294. package/dist/runtime/app/components/Text/Text.d.vue.ts +19 -0
  295. package/dist/runtime/app/components/Text/Text.theme.d.ts +55 -0
  296. package/dist/runtime/app/components/Text/Text.theme.js +28 -0
  297. package/dist/runtime/app/components/Text/Text.types.d.ts +9 -0
  298. package/dist/runtime/app/components/Text/Text.types.js +0 -0
  299. package/dist/runtime/app/components/Text/Text.vue +37 -0
  300. package/dist/runtime/app/components/Text/Text.vue.d.ts +19 -0
  301. package/dist/runtime/app/components/Toolbar/Toolbar.d.vue.ts +17 -0
  302. package/dist/runtime/app/components/Toolbar/Toolbar.theme.d.ts +5 -0
  303. package/dist/runtime/app/components/Toolbar/Toolbar.theme.js +6 -0
  304. package/dist/runtime/app/components/Toolbar/Toolbar.types.d.ts +9 -0
  305. package/dist/runtime/app/components/Toolbar/Toolbar.types.js +0 -0
  306. package/dist/runtime/app/components/Toolbar/Toolbar.vue +76 -0
  307. package/dist/runtime/app/components/Toolbar/Toolbar.vue.d.ts +17 -0
  308. package/dist/runtime/app/components/Tooltip/Tooltip.d.vue.ts +5 -26
  309. package/dist/runtime/app/components/Tooltip/Tooltip.types.d.ts +11 -0
  310. package/dist/runtime/app/components/Tooltip/Tooltip.types.js +0 -0
  311. package/dist/runtime/app/components/Tooltip/Tooltip.vue +1 -1
  312. package/dist/runtime/app/components/Tooltip/Tooltip.vue.d.ts +5 -26
  313. package/dist/runtime/app/composables/internal/useVunoContext.d.ts +5 -0
  314. package/dist/runtime/app/composables/internal/useVunoContext.js +8 -0
  315. package/dist/runtime/app/composables/internal/useVunoControlGroup.d.ts +3 -4
  316. package/dist/runtime/app/composables/internal/useVunoDirection.d.ts +5 -0
  317. package/dist/runtime/app/composables/internal/useVunoDirection.js +8 -0
  318. package/dist/runtime/app/composables/internal/useVunoFormContext.d.ts +5 -0
  319. package/dist/runtime/app/composables/internal/useVunoFormContext.js +8 -0
  320. package/dist/runtime/app/composables/internal/useVunoOverlayBehind.d.ts +6 -0
  321. package/dist/runtime/app/composables/internal/useVunoOverlayBehind.js +8 -0
  322. package/dist/runtime/app/composables/useContext.js +2 -3
  323. package/dist/runtime/app/composables/useForm.js +2 -3
  324. package/dist/runtime/app/composables/useTableQuery.d.ts +1 -1
  325. package/dist/runtime/app/composables/useTheme.js +6 -3
  326. package/dist/runtime/app/{components/internal/ControlShell/ControlShell.vue.d.ts → primitives/PrimitiveControl/PrimitiveControl.d.vue.ts} +4 -3
  327. package/dist/runtime/app/{components/internal/ControlShell/ControlShell.theme.d.ts → primitives/PrimitiveControl/PrimitiveControl.theme.d.ts} +1 -1
  328. package/dist/runtime/app/{components/internal/ControlShell/ControlShell.vue → primitives/PrimitiveControl/PrimitiveControl.vue} +1 -1
  329. package/dist/runtime/app/{components/internal/ControlShell/ControlShell.d.vue.ts → primitives/PrimitiveControl/PrimitiveControl.vue.d.ts} +4 -3
  330. package/dist/runtime/app/{components/internal/Input/Input.d.vue.ts → primitives/PrimitiveInput/PrimitiveInput.d.vue.ts} +4 -3
  331. package/dist/runtime/app/{components/internal/Input/Input.vue → primitives/PrimitiveInput/PrimitiveInput.vue} +4 -4
  332. package/dist/runtime/app/{components/internal/Input/Input.vue.d.ts → primitives/PrimitiveInput/PrimitiveInput.vue.d.ts} +4 -3
  333. package/dist/runtime/app/{components/internal/NumberInput/NumberInput.d.vue.ts → primitives/PrimitiveNumberInput/PrimitiveNumberInput.d.vue.ts} +3 -4
  334. package/dist/runtime/app/{components/internal/NumberInput/NumberInput.theme.d.ts → primitives/PrimitiveNumberInput/PrimitiveNumberInput.theme.d.ts} +3 -0
  335. package/dist/runtime/app/{components/internal/NumberInput/NumberInput.theme.js → primitives/PrimitiveNumberInput/PrimitiveNumberInput.theme.js} +4 -1
  336. package/dist/runtime/app/{components/internal/NumberInput/NumberInput.vue → primitives/PrimitiveNumberInput/PrimitiveNumberInput.vue} +7 -5
  337. package/dist/runtime/app/{components/internal/NumberInput/NumberInput.vue.d.ts → primitives/PrimitiveNumberInput/PrimitiveNumberInput.vue.d.ts} +3 -4
  338. package/dist/runtime/app/theme/index.d.ts +254 -96
  339. package/dist/runtime/app/theme/index.js +13 -5
  340. package/dist/runtime/app/theme/messages.js +1 -0
  341. package/dist/runtime/app/theme/shared.d.ts +3 -2
  342. package/dist/runtime/app/theme/shared.js +2 -1
  343. package/dist/runtime/app/types/app.d.ts +4 -2
  344. package/dist/runtime/app/types/base.d.ts +5 -23
  345. package/dist/runtime/app/types/field.d.ts +3 -1
  346. package/dist/runtime/app/types/form.d.ts +3 -4
  347. package/dist/runtime/app/types/index.d.ts +55 -7
  348. package/dist/runtime/app/types/menu.d.ts +22 -0
  349. package/dist/runtime/app/types/menu.js +0 -0
  350. package/dist/runtime/app/types/page.d.ts +6 -10
  351. package/dist/runtime/app/types/slots.d.ts +8 -4
  352. package/dist/runtime/app/types/table.d.ts +28 -28
  353. package/dist/runtime/app/types/text.d.ts +6 -0
  354. package/dist/runtime/app/types/text.js +0 -0
  355. package/dist/runtime/app/types/theme.d.ts +15 -6
  356. package/dist/runtime/app/utils/format.js +3 -2
  357. package/dist/runtime/app/utils/path.js +1 -1
  358. package/dist/runtime/app/{internal → utils}/slots.d.ts +2 -2
  359. package/dist/runtime/app/utils/theme.d.ts +8 -41
  360. package/dist/runtime/app/utils/theme.js +31 -29
  361. package/package.json +9 -9
  362. package/dist/runtime/app/components/Page/Page.d.vue.ts +0 -40
  363. package/dist/runtime/app/components/Page/Page.theme.d.ts +0 -32
  364. package/dist/runtime/app/components/Page/Page.theme.js +0 -31
  365. package/dist/runtime/app/components/Page/Page.vue +0 -132
  366. package/dist/runtime/app/components/Page/Page.vue.d.ts +0 -40
  367. package/dist/runtime/app/internal/keys.d.ts +0 -43
  368. package/dist/runtime/app/internal/keys.js +0 -8
  369. package/dist/runtime/app/types/alert.d.ts +0 -13
  370. package/dist/runtime/app/types/state.d.ts +0 -35
  371. /package/dist/runtime/app/{types/alert.js → components/Alert/Alert.types.js} +0 -0
  372. /package/dist/runtime/app/{types/state.js → components/App/App.types.js} +0 -0
  373. /package/dist/runtime/app/components/{Table → DataTable}/internal/query.d.ts +0 -0
  374. /package/dist/runtime/app/components/{Table → DataTable}/internal/query.js +0 -0
  375. /package/dist/runtime/app/components/{internal → FormField/internal}/FieldShell/FieldShell.vue +0 -0
  376. /package/dist/runtime/app/{components/internal/ControlShell/ControlShell.theme.js → primitives/PrimitiveControl/PrimitiveControl.theme.js} +0 -0
  377. /package/dist/runtime/app/{components/internal/Input/Input.theme.d.ts → primitives/PrimitiveInput/PrimitiveInput.theme.d.ts} +0 -0
  378. /package/dist/runtime/app/{components/internal/Input/Input.theme.js → primitives/PrimitiveInput/PrimitiveInput.theme.js} +0 -0
  379. /package/dist/runtime/app/{components/internal/NumberInput → primitives/PrimitiveNumberInput}/number.d.ts +0 -0
  380. /package/dist/runtime/app/{components/internal/NumberInput → primitives/PrimitiveNumberInput}/number.js +0 -0
  381. /package/dist/runtime/app/{internal → utils}/slots.js +0 -0
@@ -1,49 +1,17 @@
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. */
1
+ import type { VunoTableSort } from '#vuno/types/table';
2
+ import type { VunoTableProps } from './Table.types.js';
3
+ declare const __VLS_export: <TRow extends import("#vuno/types/table").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<{
4
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<(VunoTableProps<TRow> & {
32
5
  selection?: (number | string)[];
6
+ sort?: null | VunoTableSort;
33
7
  }) & {
34
8
  onRowClick?: ((row: TRow) => any) | undefined;
35
- "onUpdate:query"?: ((value: VunoTableQuery) => any) | undefined;
36
9
  "onUpdate:selection"?: ((value: (string | number)[]) => any) | undefined;
10
+ "onUpdate:sort"?: ((value: VunoTableSort | null) => any) | undefined;
37
11
  }> & (typeof globalThis extends {
38
12
  __VLS_PROPS_FALLBACK: infer P;
39
13
  } ? 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;
14
+ expose: (exposed: {}) => void;
47
15
  attrs: any;
48
16
  slots: {
49
17
  [key: `cell-${string}`]: (props: {
@@ -51,23 +19,8 @@ declare const __VLS_export: <TRow extends VunoTableRow>(__VLS_props: NonNullable
51
19
  value: unknown;
52
20
  }) => unknown;
53
21
  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
22
  };
70
- emit: ((evt: "rowClick", row: TRow) => void) & (((event: "update:query", value: VunoTableQuery) => void) & ((event: "update:selection", value: (string | number)[]) => void));
23
+ emit: ((evt: "rowClick", row: TRow) => void) & (((event: "update:selection", value: (string | number)[]) => void) & ((event: "update:sort", value: VunoTableSort | null) => void));
71
24
  }>) => import("vue").VNode & {
72
25
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
73
26
  };
@@ -2,6 +2,7 @@
2
2
  import { computed } from "vue";
3
3
  import { useIcons, useMessages, useTheme } from "#vuno/composables/useTheme";
4
4
  import Icon from "#vuno/components/Icon/Icon.vue";
5
+ import Text from "#vuno/components/Text/Text.vue";
5
6
  defineOptions({ name: "VunoCellBoolean" });
6
7
  const props = defineProps({
7
8
  column: { type: null, required: true },
@@ -16,10 +17,13 @@ const ui = useTheme("cellBoolean", void 0, () => ({ value: props.value ? "true"
16
17
  </script>
17
18
 
18
19
  <template>
19
- <span
20
+ <Text
20
21
  v-if="label"
21
22
  :class="ui.label"
22
- >{{ label }}</span
23
+ tag="span"
24
+ tone="inherit"
25
+ variant="inherit"
26
+ >{{ label }}</Text
23
27
  >
24
28
 
25
29
  <template v-else>
@@ -27,6 +31,12 @@ const ui = useTheme("cellBoolean", void 0, () => ({ value: props.value ? "true"
27
31
  :class="ui.icon"
28
32
  :name="props.value ? icons.booleanTrue : icons.booleanFalse"
29
33
  />
30
- <span class="sr-only">{{ accessibleLabel }}</span>
34
+ <Text
35
+ class="sr-only"
36
+ tag="span"
37
+ tone="inherit"
38
+ variant="inherit"
39
+ >{{ accessibleLabel }}</Text
40
+ >
31
41
  </template>
32
42
  </template>
@@ -1,6 +1,7 @@
1
1
  <script setup>
2
2
  import { useLocale, useTheme } from "#vuno/composables/useTheme";
3
3
  import { formatCurrency } from "#vuno/utils/format";
4
+ import Text from "#vuno/components/Text/Text.vue";
4
5
  defineOptions({ name: "VunoCellCurrency" });
5
6
  const props = defineProps({
6
7
  column: { type: null, required: true },
@@ -12,5 +13,11 @@ const ui = useTheme("cellCurrency");
12
13
  </script>
13
14
 
14
15
  <template>
15
- <span :class="ui.base">{{ formatCurrency(props.value, locale, props.column.currency, props.column.decimals) }}</span>
16
+ <Text
17
+ :class="ui.base"
18
+ tag="span"
19
+ tone="inherit"
20
+ variant="inherit"
21
+ >{{ formatCurrency(props.value, locale, props.column.currency, props.column.decimals) }}</Text
22
+ >
16
23
  </template>
@@ -2,6 +2,7 @@
2
2
  import { computed } from "vue";
3
3
  import { useLocale, useTheme } from "#vuno/composables/useTheme";
4
4
  import { formatDate } from "#vuno/utils/format";
5
+ import Text from "#vuno/components/Text/Text.vue";
5
6
  defineOptions({ name: "VunoCellDate" });
6
7
  const props = defineProps({
7
8
  column: { type: null, required: true },
@@ -17,5 +18,11 @@ const options = computed(() => ({
17
18
  </script>
18
19
 
19
20
  <template>
20
- <span :class="ui.base">{{ formatDate(props.value, locale, options) }}</span>
21
+ <Text
22
+ :class="ui.base"
23
+ tag="span"
24
+ tone="inherit"
25
+ variant="inherit"
26
+ >{{ formatDate(props.value, locale, options) }}</Text
27
+ >
21
28
  </template>
@@ -1,6 +1,7 @@
1
1
  <script setup>
2
2
  import { useLocale, useTheme } from "#vuno/composables/useTheme";
3
3
  import { formatNumber } from "#vuno/utils/format";
4
+ import Text from "#vuno/components/Text/Text.vue";
4
5
  defineOptions({ name: "VunoCellNumber" });
5
6
  const props = defineProps({
6
7
  column: { type: null, required: true },
@@ -13,5 +14,11 @@ const ui = useTheme("cellNumber");
13
14
 
14
15
  <template>
15
16
  <!-- `tabular-nums` alinea las cifras en columna; sin ello los dígitos bailan. -->
16
- <span :class="ui.base">{{ formatNumber(props.value, locale, props.column.decimals) }}</span>
17
+ <Text
18
+ :class="ui.base"
19
+ tag="span"
20
+ tone="inherit"
21
+ variant="inherit"
22
+ >{{ formatNumber(props.value, locale, props.column.decimals) }}</Text
23
+ >
17
24
  </template>
@@ -1,6 +1,7 @@
1
1
  <script setup>
2
2
  import { computed } from "vue";
3
3
  import { useTheme } from "#vuno/composables/useTheme";
4
+ import Text from "#vuno/components/Text/Text.vue";
4
5
  defineOptions({ name: "VunoCellText" });
5
6
  const props = defineProps({
6
7
  column: { type: null, required: true },
@@ -12,5 +13,11 @@ const ui = useTheme("cellText", void 0, () => ({ truncate: props.column.truncate
12
13
  </script>
13
14
 
14
15
  <template>
15
- <span :class="ui.base">{{ text }}</span>
16
+ <Text
17
+ :class="ui.base"
18
+ tag="span"
19
+ tone="inherit"
20
+ variant="inherit"
21
+ >{{ text }}</Text
22
+ >
16
23
  </template>
@@ -1,5 +1,5 @@
1
- import type { VunoTableColumn, VunoTableRow } from '#vuno/types/table';
2
- 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<{
1
+ import type { VunoTableColumn } from '#vuno/types/table';
2
+ declare const __VLS_export: <TRow extends import("#vuno/types/table").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<{
3
3
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
4
4
  column: VunoTableColumn<TRow>;
5
5
  row: TRow;
@@ -1,5 +1,5 @@
1
- import type { VunoTableColumn, VunoTableRow } from '#vuno/types/table';
2
- 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<{
1
+ import type { VunoTableColumn } from '#vuno/types/table';
2
+ declare const __VLS_export: <TRow extends import("#vuno/types/table").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<{
3
3
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
4
4
  column: VunoTableColumn<TRow>;
5
5
  row: TRow;
@@ -1,4 +1,13 @@
1
1
  import type { VunoTableColumn, VunoTableRow } from '#vuno/types/table';
2
+ export type VunoTableRenderColumn<TRow extends VunoTableRow> = {
3
+ cellClass: string;
4
+ column: VunoTableColumn<TRow>;
5
+ headerClass: string;
6
+ key: string;
7
+ label: string;
8
+ sortable: boolean;
9
+ };
10
+ export declare function resolveColumns<TRow extends VunoTableRow>(columns: VunoTableColumn<TRow>[]): VunoTableRenderColumn<TRow>[];
2
11
  /**
3
12
  * El valor que muestra una columna.
4
13
  *
@@ -1,5 +1,20 @@
1
+ export function resolveColumns(columns) {
2
+ return columns.map((column) => ({
3
+ cellClass: [alignClass(column.align), column.class].filter(Boolean).join(" "),
4
+ column,
5
+ headerClass: [alignClass(column.align), column.width].filter(Boolean).join(" "),
6
+ key: column.key,
7
+ label: column.type === "actions" ? column.label ?? "" : column.label ?? column.key,
8
+ sortable: column.sortable ?? false
9
+ }));
10
+ }
1
11
  import { getPath } from "#vuno/utils/path";
2
12
  export function resolveColumnValue(column, row) {
3
13
  if (column.value) return column.value(row);
4
14
  return getPath(row, column.key);
5
15
  }
16
+ function alignClass(align) {
17
+ if (align === "end") return "text-end";
18
+ if (align === "center") return "text-center";
19
+ return "";
20
+ }
@@ -1,6 +1,6 @@
1
1
  import { type ComputedRef, type Ref } from 'vue';
2
2
  import type { VunoTableDefinition, VunoTableRow } from '#vuno/types/table';
3
- import type { VunoTableRenderColumn } from './useVunoTable.js';
3
+ import { type VunoTableRenderColumn } from './column.js';
4
4
  type VunoTableSelectionOptions<TRow extends VunoTableRow> = {
5
5
  columns: ComputedRef<VunoTableRenderColumn<TRow>[]>;
6
6
  selection: Ref<(number | string)[]>;
@@ -1,26 +1,6 @@
1
- import type { VunoSize } from '#vuno/types/base';
2
1
  import type { VunoTabItem } from '#vuno/types/page';
3
- import type { VunoUi } from '#vuno/types/slots';
4
- /**
5
- * Las pestañas, escritas a mano sobre el patrón de ARIA.
6
- *
7
- * No hacía falta una librería: aquí no hay nada que colocar, solo marcado y
8
- * teclado. Lo que sí hay que hacer bien —y lo que la versión anterior no
9
- * hacía— es el **tabindex móvil**: una sola pestaña está en el recorrido del
10
- * tabulador, la activa, y dentro de la lista se anda con las flechas. Es lo
11
- * que distingue una lista de pestañas de una fila de botones, donde el
12
- * tabulador para en cada una.
13
- *
14
- * La activación es **manual**: las flechas mueven el foco y la selección
15
- * espera a `Enter` o al espacio. Es una decisión explícita del contrato:
16
- * cambiarla alteraría cómo se cargan los paneles costosos.
17
- */
18
- type Props = {
19
- items: VunoTabItem[];
20
- size?: VunoSize;
21
- ui?: VunoUi<'tabs'>;
22
- };
23
- type __VLS_Props = Props;
2
+ import type { VunoTabsProps } from './Tabs.types.js';
3
+ type __VLS_Props = VunoTabsProps;
24
4
  type __VLS_Slots = {
25
5
  /** El contenido de cada pestaña; recibe su item. */
26
6
  content?: (props: {
@@ -36,8 +16,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
36
16
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
17
  "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
38
18
  }>, {
39
- size: VunoSize;
40
- ui: VunoUi<"tabs">;
19
+ size: import("./Tabs.types.js").VunoTabsSize;
20
+ variant: import("#vuno/types/page").VunoTabsVariant;
21
+ ui: import("../../types/slots.js").VunoUi<"tabs">;
41
22
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
42
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
43
24
  declare const _default: typeof __VLS_export;
@@ -1,14 +1,11 @@
1
1
  export declare const tabsTheme: Record<"tabs", {
2
- /**
3
- * Pestañas con subrayado en la activa. El `-mb-px` hace que ese subrayado
4
- * se coma la línea de la lista en vez de quedar encima de ella.
5
- */
6
2
  readonly slots: {
7
3
  readonly content: "w-full";
8
4
  readonly icon: "size-4 shrink-0";
9
- readonly list: "flex items-center gap-1 border-b border-vuno-border";
5
+ readonly indicator: "pointer-events-none absolute left-0 z-0 w-(--vuno-tabs-indicator-width) translate-x-(--vuno-tabs-indicator-start) opacity-0 transition-[width,translate,opacity] duration-200 ease-out motion-reduce:transition-none data-[ready=true]:opacity-100";
6
+ readonly list: "relative flex w-fit max-w-full items-center overflow-x-auto overscroll-x-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
10
7
  readonly root: "flex w-full flex-col";
11
- readonly trigger: "-mb-px flex cursor-pointer items-center gap-1.5 border-b-2 border-transparent px-3 py-2 font-medium text-vuno-muted transition-colors [--vuno-accent:var(--color-vuno-primary)] hover:text-vuno-body focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--vuno-accent) data-[state=active]:border-vuno-primary data-[state=active]:text-vuno-primary";
8
+ readonly trigger: "relative z-1 flex shrink-0 cursor-pointer items-center gap-1.5 font-medium transition-colors [--vuno-accent:var(--color-vuno-primary)] hover:text-vuno-body focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--vuno-accent)";
12
9
  };
13
10
  readonly variants: {
14
11
  readonly size: {
@@ -28,5 +25,17 @@ export declare const tabsTheme: Record<"tabs", {
28
25
  readonly trigger: "text-base";
29
26
  };
30
27
  };
28
+ readonly variant: {
29
+ readonly segmented: {
30
+ readonly indicator: "inset-y-0.5 rounded-md bg-vuno-surface-2 ring-1 ring-vuno-border";
31
+ readonly list: "rounded-lg border border-vuno-border bg-vuno-surface-1 p-0.5";
32
+ readonly trigger: "rounded-md px-2.5 py-1.5 text-vuno-muted data-[state=active]:text-vuno-body";
33
+ };
34
+ readonly underline: {
35
+ readonly indicator: "bottom-0 h-0.5 bg-vuno-primary";
36
+ readonly list: "gap-1 border-b border-vuno-border";
37
+ readonly trigger: "-mb-px border-b-2 border-transparent px-3 py-2 text-vuno-muted data-[state=active]:font-semibold data-[state=active]:text-vuno-body";
38
+ };
39
+ };
31
40
  };
32
41
  }>;
@@ -1,15 +1,12 @@
1
1
  import { defineTheme } from "#vuno/utils/theme";
2
2
  export const tabsTheme = defineTheme("tabs", {
3
- /**
4
- * Pestañas con subrayado en la activa. El `-mb-px` hace que ese subrayado
5
- * se coma la línea de la lista en vez de quedar encima de ella.
6
- */
7
3
  slots: {
8
4
  content: "w-full",
9
5
  icon: "size-4 shrink-0",
10
- list: "flex items-center gap-1 border-b border-vuno-border",
6
+ indicator: "pointer-events-none absolute left-0 z-0 w-(--vuno-tabs-indicator-width) translate-x-(--vuno-tabs-indicator-start) opacity-0 transition-[width,translate,opacity] duration-200 ease-out motion-reduce:transition-none data-[ready=true]:opacity-100",
7
+ list: "relative flex w-fit max-w-full items-center overflow-x-auto overscroll-x-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
11
8
  root: "flex w-full flex-col",
12
- trigger: "-mb-px flex cursor-pointer items-center gap-1.5 border-b-2 border-transparent px-3 py-2 font-medium text-vuno-muted transition-colors [--vuno-accent:var(--color-vuno-primary)] hover:text-vuno-body focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--vuno-accent) data-[state=active]:border-vuno-primary data-[state=active]:text-vuno-primary"
9
+ trigger: "relative z-1 flex shrink-0 cursor-pointer items-center gap-1.5 font-medium transition-colors [--vuno-accent:var(--color-vuno-primary)] hover:text-vuno-body focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--vuno-accent)"
13
10
  },
14
11
  variants: {
15
12
  size: {
@@ -18,6 +15,18 @@ export const tabsTheme = defineTheme("tabs", {
18
15
  md: { trigger: "text-sm" },
19
16
  lg: { trigger: "text-base" },
20
17
  xl: { trigger: "text-base" }
18
+ },
19
+ variant: {
20
+ segmented: {
21
+ indicator: "inset-y-0.5 rounded-md bg-vuno-surface-2 ring-1 ring-vuno-border",
22
+ list: "rounded-lg border border-vuno-border bg-vuno-surface-1 p-0.5",
23
+ trigger: "rounded-md px-2.5 py-1.5 text-vuno-muted data-[state=active]:text-vuno-body"
24
+ },
25
+ underline: {
26
+ indicator: "bottom-0 h-0.5 bg-vuno-primary",
27
+ list: "gap-1 border-b border-vuno-border",
28
+ trigger: "-mb-px border-b-2 border-transparent px-3 py-2 text-vuno-muted data-[state=active]:font-semibold data-[state=active]:text-vuno-body"
29
+ }
21
30
  }
22
31
  }
23
32
  });
@@ -0,0 +1,10 @@
1
+ import type { VunoSize } from '#vuno/types/base';
2
+ import type { VunoTabItem, VunoTabsVariant } from '#vuno/types/page';
3
+ import type { VunoUi } from '#vuno/types/slots';
4
+ export type VunoTabsSize = Extract<VunoSize, 'lg' | 'md' | 'sm' | 'xl' | 'xs'>;
5
+ export type VunoTabsProps = {
6
+ items: VunoTabItem[];
7
+ size?: VunoTabsSize;
8
+ ui?: VunoUi<'tabs'>;
9
+ variant?: VunoTabsVariant;
10
+ };
File without changes
@@ -1,38 +1,79 @@
1
1
  <script setup>
2
- import { computed, inject, useId, useTemplateRef } from "vue";
2
+ import { computed, nextTick, onBeforeUnmount, onMounted, ref, resolveComponent, useId, useTemplateRef, watch } from "vue";
3
+ import { useRoute } from "#imports";
4
+ import { useVunoDirection } from "#vuno/composables/internal/useVunoDirection";
3
5
  import { useTheme } from "#vuno/composables/useTheme";
4
- import { vunoDirectionInjectionKey } from "#vuno/internal/keys";
5
6
  import Badge from "#vuno/components/Badge/Badge.vue";
6
7
  import Icon from "#vuno/components/Icon/Icon.vue";
8
+ import Text from "#vuno/components/Text/Text.vue";
7
9
  defineOptions({ name: "VunoTabs" });
8
10
  const model = defineModel({ type: null, ...{ default: void 0 } });
9
11
  const props = defineProps({
10
12
  items: { type: Array, required: true },
11
13
  size: { type: String, required: false, default: "md" },
12
- ui: { type: Object, required: false, default: void 0 }
14
+ ui: { type: Object, required: false, default: void 0 },
15
+ variant: { type: String, required: false, default: "segmented" }
13
16
  });
14
17
  defineSlots();
18
+ const route = useRoute();
19
+ const NuxtLink = resolveComponent("NuxtLink");
15
20
  const ui = useTheme(
16
21
  "tabs",
17
22
  () => props.ui,
18
- () => ({ size: props.size })
23
+ () => ({ size: props.size, variant: props.variant })
19
24
  );
20
25
  const uid = useId().replaceAll(/[^\w-]/g, "");
26
+ const indicatorReady = ref(false);
27
+ const indicatorStyle = ref();
21
28
  const list = useTemplateRef("list");
29
+ const triggers = ref([]);
30
+ let resizeObserver;
22
31
  const active = computed(() => {
23
- const current = props.items.find((item) => item.value === model.value);
24
- return current?.value ?? props.items[0]?.value;
32
+ const currentRoute = props.items.find((item) => item.to === route.path);
33
+ if (currentRoute) return currentRoute.value;
34
+ const localItems = props.items.filter((item) => !item.to);
35
+ const current = localItems.find((item) => item.value === model.value);
36
+ return current?.value ?? localItems[0]?.value;
25
37
  });
38
+ const tabStop = computed(() => active.value ?? props.items[0]?.value);
26
39
  const safe = (value) => value.replaceAll(/[^\w-]/g, "");
27
40
  const tabId = (value) => `${uid}-tab-${safe(value)}`;
28
41
  const panelId = (value) => `${uid}-panel-${safe(value)}`;
42
+ function captureTrigger(index, element) {
43
+ const target = element instanceof HTMLElement ? element : element?.$el;
44
+ triggers.value[index] = target instanceof HTMLElement ? target : null;
45
+ }
46
+ const triggerRef = (index) => (element) => captureTrigger(index, element);
47
+ async function syncIndicator() {
48
+ await nextTick();
49
+ const index = props.items.findIndex((item) => item.value === active.value);
50
+ const trigger = triggers.value[index];
51
+ if (!trigger) {
52
+ indicatorReady.value = false;
53
+ indicatorStyle.value = void 0;
54
+ return;
55
+ }
56
+ indicatorStyle.value = {
57
+ "--vuno-tabs-indicator-start": `${trigger.offsetLeft}px`,
58
+ "--vuno-tabs-indicator-width": `${trigger.offsetWidth}px`
59
+ };
60
+ indicatorReady.value = true;
61
+ }
62
+ function observeLayout() {
63
+ resizeObserver?.disconnect();
64
+ if (!resizeObserver) return;
65
+ if (list.value) resizeObserver.observe(list.value);
66
+ for (const trigger of triggers.value) {
67
+ if (trigger) resizeObserver.observe(trigger);
68
+ }
69
+ }
29
70
  function focusTab(index) {
30
71
  const total = props.items.length;
31
72
  if (total === 0) return;
32
73
  const item = props.items[(index + total) % total];
33
74
  if (item) list.value?.querySelector(`#${tabId(item.value)}`)?.focus();
34
75
  }
35
- const direction = inject(vunoDirectionInjectionKey, () => "ltr");
76
+ const direction = useVunoDirection();
36
77
  function onKeydown(event, index) {
37
78
  const forward = direction() === "rtl" ? -1 : 1;
38
79
  const keys = {
@@ -46,28 +87,54 @@ function onKeydown(event, index) {
46
87
  event.preventDefault();
47
88
  handler();
48
89
  }
90
+ watch(
91
+ [active, () => props.items, () => props.size, () => props.variant],
92
+ () => {
93
+ void syncIndicator().then(observeLayout);
94
+ },
95
+ { deep: true, flush: "post" }
96
+ );
97
+ onMounted(() => {
98
+ if (typeof ResizeObserver !== "undefined") resizeObserver = new ResizeObserver(() => void syncIndicator());
99
+ void syncIndicator().then(observeLayout);
100
+ });
101
+ onBeforeUnmount(() => resizeObserver?.disconnect());
49
102
  </script>
50
103
 
51
104
  <template>
52
- <div :class="ui.root">
105
+ <div
106
+ :class="ui.root"
107
+ :data-variant="props.variant"
108
+ >
53
109
  <div
54
110
  ref="list"
55
111
  aria-orientation="horizontal"
56
112
  :class="ui.list"
57
113
  role="tablist"
58
114
  >
59
- <button
115
+ <div
116
+ aria-hidden="true"
117
+ :class="ui.indicator"
118
+ :data-ready="indicatorReady"
119
+ :style="indicatorStyle"
120
+ />
121
+
122
+ <component
123
+ :is="item.to ? NuxtLink : 'button'"
60
124
  v-for="(item, index) in props.items"
61
125
  :id="tabId(item.value)"
62
126
  :key="item.value"
63
- :aria-controls="panelId(item.value)"
127
+ :ref="triggerRef(index)"
128
+ :aria-controls="item.to ? void 0 : panelId(item.value)"
129
+ :aria-current="item.to && item.value === active ? 'page' : void 0"
64
130
  :aria-selected="item.value === active"
65
131
  :class="ui.trigger"
66
132
  :data-state="item.value === active ? 'active' : 'inactive'"
67
133
  role="tab"
68
- :tabindex="item.value === active ? 0 : -1"
69
- type="button"
70
- @click="model = item.value"
134
+ :tabindex="item.value === tabStop ? 0 : -1"
135
+ :to="item.to"
136
+ :type="item.to ? void 0 : 'button'"
137
+ @click="item.to || (model = item.value)"
71
138
  @keydown="onKeydown($event, index)"
72
139
  >
73
140
  <Icon
@@ -76,7 +143,14 @@ function onKeydown(event, index) {
76
143
  :name="item.icon"
77
144
  />
78
145
 
79
- <span class="truncate">{{ item.label }}</span>
146
+ <Text
147
+ class="truncate"
148
+ tag="span"
149
+ tone="inherit"
150
+ variant="inherit"
151
+ >
152
+ {{ item.label }}
153
+ </Text>
80
154
 
81
155
  <!--
82
156
  El contador de errores va aquí y no al lado del formulario:
@@ -89,7 +163,7 @@ function onKeydown(event, index) {
89
163
  :label="item.badge.label"
90
164
  size="xs"
91
165
  />
92
- </button>
166
+ </component>
93
167
  </div>
94
168
 
95
169
  <!--
@@ -100,7 +174,7 @@ function onKeydown(event, index) {
100
174
  justo lo que hace falta.
101
175
  -->
102
176
  <div
103
- v-for="item in props.items"
177
+ v-for="item in props.items.filter((candidate) => !candidate.to)"
104
178
  :id="panelId(item.value)"
105
179
  :key="item.value"
106
180
  :aria-labelledby="tabId(item.value)"
@@ -108,7 +182,7 @@ function onKeydown(event, index) {
108
182
  :data-state="item.value === active ? 'active' : 'inactive'"
109
183
  :hidden="item.value !== active"
110
184
  role="tabpanel"
111
- tabindex="0"
185
+ :tabindex="item.value === active ? 0 : void 0"
112
186
  >
113
187
  <slot
114
188
  :item="item"
@@ -1,26 +1,6 @@
1
- import type { VunoSize } from '#vuno/types/base';
2
1
  import type { VunoTabItem } from '#vuno/types/page';
3
- import type { VunoUi } from '#vuno/types/slots';
4
- /**
5
- * Las pestañas, escritas a mano sobre el patrón de ARIA.
6
- *
7
- * No hacía falta una librería: aquí no hay nada que colocar, solo marcado y
8
- * teclado. Lo que sí hay que hacer bien —y lo que la versión anterior no
9
- * hacía— es el **tabindex móvil**: una sola pestaña está en el recorrido del
10
- * tabulador, la activa, y dentro de la lista se anda con las flechas. Es lo
11
- * que distingue una lista de pestañas de una fila de botones, donde el
12
- * tabulador para en cada una.
13
- *
14
- * La activación es **manual**: las flechas mueven el foco y la selección
15
- * espera a `Enter` o al espacio. Es una decisión explícita del contrato:
16
- * cambiarla alteraría cómo se cargan los paneles costosos.
17
- */
18
- type Props = {
19
- items: VunoTabItem[];
20
- size?: VunoSize;
21
- ui?: VunoUi<'tabs'>;
22
- };
23
- type __VLS_Props = Props;
2
+ import type { VunoTabsProps } from './Tabs.types.js';
3
+ type __VLS_Props = VunoTabsProps;
24
4
  type __VLS_Slots = {
25
5
  /** El contenido de cada pestaña; recibe su item. */
26
6
  content?: (props: {
@@ -36,8 +16,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
36
16
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
17
  "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
38
18
  }>, {
39
- size: VunoSize;
40
- ui: VunoUi<"tabs">;
19
+ size: import("./Tabs.types.js").VunoTabsSize;
20
+ variant: import("#vuno/types/page").VunoTabsVariant;
21
+ ui: import("../../types/slots.js").VunoUi<"tabs">;
41
22
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
42
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
43
24
  declare const _default: typeof __VLS_export;