@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
package/README.md CHANGED
@@ -21,7 +21,7 @@ pnpm add @groupteknology/vuno
21
21
  ```ts
22
22
  // nuxt.config.ts
23
23
  export default defineNuxtConfig({
24
- modules: ['@groupteknology/vuno'],
24
+ modules: ['@groupteknology/vuno'],
25
25
  })
26
26
  ```
27
27
 
@@ -37,8 +37,8 @@ Si tu proyecto ya monta Tailwind, se detecta y no se duplica. Y si prefieres lle
37
37
 
38
38
  ```ts
39
39
  export default defineNuxtConfig({
40
- modules: ['@groupteknology/vuno'],
41
- vuno: { tailwind: false },
40
+ modules: ['@groupteknology/vuno'],
41
+ vuno: { tailwind: false },
42
42
  })
43
43
  ```
44
44
 
@@ -48,40 +48,53 @@ Un formulario se declara como datos y se renderiza solo. El estado vive en un ú
48
48
 
49
49
  ```vue
50
50
  <script setup lang="ts">
51
- import type { VunoFormDefinition } from '@groupteknology/vuno'
52
- import * as z from 'zod'
53
-
54
- const schema = z.object({
55
- sku: z.string().min(1, 'El SKU es requerido'),
56
- name: z.string().min(1, 'El nombre es requerido'),
57
- })
58
-
59
- const state = ref({ sku: '', name: '', slug: '' })
60
-
61
- const definition = {
62
- layout: 'tabs', // 'sections' (por defecto) | 'tabs'
63
- sections: [
64
- {
65
- id: 'general',
66
- title: 'Datos generales',
67
- icon: 'lucide:info',
68
- fields: [
69
- { name: 'sku', type: 'text', label: 'SKU', columns: { xs: 12, lg: 6 }, required: true },
70
- { name: 'name', type: 'text', label: 'Nombre', columns: { xs: 12, lg: 6 }, required: true },
71
- { name: 'slug', type: 'slug', label: 'Slug', source: 'name' },
72
- ],
73
- },
74
- ],
75
- } satisfies VunoFormDefinition
51
+ import type { VunoFormDefinition } from '@groupteknology/vuno'
52
+ import * as z from 'zod'
53
+
54
+ const schema = z.object({
55
+ sku: z.string().min(1, 'El SKU es requerido'),
56
+ name: z.string().min(1, 'El nombre es requerido'),
57
+ })
58
+
59
+ const state = ref({ sku: '', name: '', slug: '' })
60
+
61
+ const definition = {
62
+ layout: 'tabs', // 'sections' (por defecto) | 'tabs'
63
+ sections: [
64
+ {
65
+ id: 'general',
66
+ title: 'Datos generales',
67
+ icon: 'lucide:info',
68
+ fields: [
69
+ { name: 'sku', type: 'text', label: 'SKU', columns: { xs: 12, lg: 6 }, required: true },
70
+ { name: 'name', type: 'text', label: 'Nombre', columns: { xs: 12, lg: 6 }, required: true },
71
+ { name: 'slug', type: 'slug', label: 'Slug', source: 'name' },
72
+ ],
73
+ },
74
+ ],
75
+ } satisfies VunoFormDefinition
76
76
  </script>
77
77
 
78
78
  <template>
79
- <VForm v-model:state="state" :definition="definition" :schema="schema" @submit="guardar">
80
- <template #footer="{ dirty, reset }">
81
- <VButton :disabled="!dirty" label="Descartar" variant="ghost" @click="reset" />
82
- <VButton label="Guardar" type="submit" />
83
- </template>
84
- </VForm>
79
+ <VForm
80
+ v-model:state="state"
81
+ :definition="definition"
82
+ :schema="schema"
83
+ @submit="guardar"
84
+ >
85
+ <template #footer="{ dirty, reset }">
86
+ <VButton
87
+ :disabled="!dirty"
88
+ label="Descartar"
89
+ variant="ghost"
90
+ @click="reset"
91
+ />
92
+ <VButton
93
+ label="Guardar"
94
+ type="submit"
95
+ />
96
+ </template>
97
+ </VForm>
85
98
  </template>
86
99
  ```
87
100
 
@@ -100,12 +113,7 @@ Los mismos campos son componentes públicos y ya incluyen etiqueta, descripción
100
113
  La etiqueta va arriba por defecto. `orientation="horizontal"` la coloca al costado del control:
101
114
 
102
115
  ```vue
103
- <VFieldSelect
104
- v-model="role"
105
- label="Rol"
106
- orientation="horizontal"
107
- :items="roles"
108
- />
116
+ <VFieldSelect v-model="role" label="Rol" orientation="horizontal" :items="roles" />
109
117
  ```
110
118
 
111
119
  Los controles básicos son implementación interna. Para campos propios, `VFormField` sigue disponible y puede envolver cualquier control; un `VField*` colocado dentro reconoce ese envoltorio y no crea uno duplicado.
@@ -171,65 +179,59 @@ La regla que lo resume: **el componente decide cómo es el formulario; quien lo
171
179
  ```vue
172
180
  <!-- app/components/Product/ProductForm.vue -->
173
181
  <script setup lang="ts">
174
- import type { VunoFormDefinition } from '@groupteknology/vuno'
175
- import * as z from 'zod'
182
+ import type { VunoFormDefinition } from '@groupteknology/vuno'
183
+ import * as z from 'zod'
176
184
 
177
- const props = defineProps<{
178
- /** La fila en edición. Sin ella, el formulario es de alta. */
179
- product?: null | Product
180
- loading?: boolean
181
- }>()
185
+ const props = defineProps<{
186
+ /** La fila en edición. Sin ella, el formulario es de alta. */
187
+ product?: null | Product
188
+ loading?: boolean
189
+ }>()
182
190
 
183
- const emit = defineEmits<{ submit: [] }>()
191
+ const emit = defineEmits<{ submit: [] }>()
184
192
 
185
- const open = defineModel<boolean>('open', { default: false })
186
- const state = defineModel<ProductFormState>('state', { required: true })
193
+ const open = defineModel<boolean>('open', { default: false })
194
+ const state = defineModel<ProductFormState>('state', { required: true })
187
195
 
188
- // Lo propio del formulario: su forma, sus reglas y sus textos.
189
- const schema = z.object({ sku: z.string().min(1, 'El SKU es requerido') })
196
+ // Lo propio del formulario: su forma, sus reglas y sus textos.
197
+ const schema = z.object({ sku: z.string().min(1, 'El SKU es requerido') })
190
198
 
191
- const title = computed(() => (props.product ? `Editar ${props.product.sku}` : 'Nuevo producto'))
199
+ const title = computed(() => (props.product ? `Editar ${props.product.sku}` : 'Nuevo producto'))
192
200
 
193
- const definition = {
194
- layout: 'tabs',
195
- sections: [/* ... */],
196
- } satisfies VunoFormDefinition
201
+ const definition = {
202
+ layout: 'tabs',
203
+ sections: [/* ... */],
204
+ } satisfies VunoFormDefinition
197
205
  </script>
198
206
 
199
207
  <template>
200
- <VFormModal
201
- v-model:open="open"
202
- v-model:state="state"
203
- :definition="definition"
204
- :loading="props.loading"
205
- :schema="schema"
206
- :title="title"
207
- @submit="emit('submit')"
208
- />
208
+ <VFormModal
209
+ v-model:open="open"
210
+ v-model:state="state"
211
+ :definition="definition"
212
+ :loading="props.loading"
213
+ :schema="schema"
214
+ :title="title"
215
+ @submit="emit('submit')"
216
+ />
209
217
  </template>
210
218
  ```
211
219
 
212
220
  Y la página queda sin saber nada de los campos:
213
221
 
214
222
  ```vue
215
- <ProductForm
216
- v-model:open="formOpen"
217
- v-model:state="state"
218
- :loading="isSaving"
219
- :product="editing"
220
- @submit="submit"
221
- />
223
+ <ProductForm v-model:open="formOpen" v-model:state="state" :loading="isSaving" :product="editing" @submit="submit" />
222
224
  ```
223
225
 
224
226
  #### Qué expone
225
227
 
226
- | | |
227
- |---|---|
228
- | `v-model:state` | El estado del formulario. Obligatorio: lo posee quien lo usa, no el formulario. |
229
- | `v-model:open` | Solo si es modal. |
230
- | `:loading` | Si se está guardando, para bloquear el botón. |
228
+ | | |
229
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------- |
230
+ | `v-model:state` | El estado del formulario. Obligatorio: lo posee quien lo usa, no el formulario. |
231
+ | `v-model:open` | Solo si es modal. |
232
+ | `:loading` | Si se está guardando, para bloquear el botón. |
231
233
  | La fila en edición | Un prop —`product`, `brand`, lo que sea— que vale `null` en el alta. De él salen el título y la etiqueta del botón. |
232
- | `@submit` | Significa «el usuario confirmó», nada más. Sin datos: ya están en `state`. |
234
+ | `@submit` | Significa «el usuario confirmó», nada más. Sin datos: ya están en `state`. |
233
235
 
234
236
  No es casualidad que encaje: son exactamente `state`, `formOpen`, `isSaving`, `editing` y `submit` de `useCrud`.
235
237
 
@@ -247,23 +249,21 @@ El estado tampoco se queda dentro. Si el formulario declara su propio `ref` en v
247
249
 
248
250
  ```vue
249
251
  <script setup lang="ts">
250
- // En SSR, `$fetch` no reenvía la cookie de la petición y una ruta con sesión
251
- // responde 401 durante el render. `useRequestFetch()` sí la lleva.
252
- const request = useRequestFetch()
253
-
254
- const query = useTableQuery({ sort: 'sku', url: true })
255
-
256
- const { items, total, failure, isPending, isSaving, isDeleting,
257
- formOpen, editing, state, submit, openCreate, openEdit,
258
- confirmOpen, deleting, askDelete, confirmDelete } = useCrud<Product, ProductForm>({
259
- key: 'products',
260
- query,
261
- emptyForm: () => ({ name: '', sku: '' }),
262
- list: (q) => request('/api/products', { query: q }),
263
- create: (form) => $fetch('/api/products', { body: form, method: 'POST' }),
264
- update: (id, form) => $fetch(`/api/products/${id}`, { body: form, method: 'PATCH' }),
265
- remove: (row) => $fetch(`/api/products/${row.id}`, { method: 'DELETE' }),
266
- })
252
+ // En SSR, `$fetch` no reenvía la cookie de la petición y una ruta con sesión
253
+ // responde 401 durante el render. `useRequestFetch()` sí la lleva.
254
+ const request = useRequestFetch()
255
+
256
+ const query = useTableQuery({ sort: 'sku', url: true })
257
+
258
+ const { items, total, failure, isPending, isSaving, isDeleting, formOpen, editing, state, submit, openCreate, openEdit, confirmOpen, deleting, askDelete, confirmDelete } = useCrud<Product, ProductForm>({
259
+ key: 'products',
260
+ query,
261
+ emptyForm: () => ({ name: '', sku: '' }),
262
+ list: (q) => request('/api/products', { query: q }),
263
+ create: (form) => $fetch('/api/products', { body: form, method: 'POST' }),
264
+ update: (id, form) => $fetch(`/api/products/${id}`, { body: form, method: 'PATCH' }),
265
+ remove: (row) => $fetch(`/api/products/${row.id}`, { method: 'DELETE' }),
266
+ })
267
267
  </script>
268
268
  ```
269
269
 
@@ -277,8 +277,8 @@ La consulta forma parte de la clave de caché, así que cada página, filtro y o
277
277
 
278
278
  ```ts
279
279
  const crud = useCrud({
280
- key: () => ['products', selectedCompanyId.value],
281
- // ...
280
+ key: () => ['products', selectedCompanyId.value],
281
+ // ...
282
282
  })
283
283
  ```
284
284
 
@@ -301,7 +301,7 @@ Mientras la clave está incompleta, `isPending` sigue en `true`: la pantalla est
301
301
  Para lo que no se deduce de la clave —un permiso, una pestaña que no está a la vista— está la opción `enabled`, que se suma a la condición anterior.
302
302
 
303
303
  ```ts
304
- useCrud({ key: () => ['products', companyId.value], enabled: () => canRead.value, /* ... */ })
304
+ useCrud({ key: () => ['products', companyId.value], enabled: () => canRead.value /* ... */ })
305
305
  ```
306
306
 
307
307
  ### La clave de invalidación
@@ -309,7 +309,7 @@ useCrud({ key: () => ['products', companyId.value], enabled: () => canRead.value
309
309
  `invalidate()` invalida **por prefijo**, usando la clave base que le des. Pásale el prefijo más ancho del dominio y deja que vuno añada el estado de consulta como último segmento:
310
310
 
311
311
  ```ts
312
- key: () => productKeys.all() // un alta refresca todo el dominio
312
+ key: () => productKeys.all() // un alta refresca todo el dominio
313
313
  key: () => productKeys.list(filtros) // solo refresca esa combinación de filtros
314
314
  ```
315
315
 
@@ -323,8 +323,8 @@ Si el proyecto ya aporta su propio `QueryClient`, desactiva el registro de Vuno
323
323
 
324
324
  ```ts [nuxt.config.ts]
325
325
  export default defineNuxtConfig({
326
- modules: ['@groupteknology/vuno'],
327
- vuno: { vueQuery: false },
326
+ modules: ['@groupteknology/vuno'],
327
+ vuno: { vueQuery: false },
328
328
  })
329
329
  ```
330
330
 
@@ -336,37 +336,39 @@ Con la clave incompleta no se espera nada: la consulta está suspendida y espera
336
336
 
337
337
  Si compruebas esto con un test, **mira el HTML renderizado, no el payload**. El payload lleva la consulta resuelta aunque el prefetch esté apagado, porque la consulta se asienta después del render y el plugin deshidrata lo que encuentra: un assert sobre el payload pasa en las dos direcciones y no mide nada.
338
338
 
339
- ## Páginas
339
+ ## Migas de pan
340
340
 
341
- `VPage` pone la estructura que repite cualquier pantalla de mantenimiento:
341
+ `VBreadcrumb` pinta la ruta de navegación sin imponer la cabecera ni el cuerpo de la pantalla:
342
342
 
343
343
  ```vue
344
- <VPage title="Productos" description="Catálogo completo." :breadcrumb="[{ label: 'Inicio', to: '/' }, { label: 'Productos' }]">
345
- <template #actions>
346
- <VButton icon="lucide:plus" label="Nuevo producto" @click="openCreate" />
347
- </template>
348
-
349
- <VTable ... />
350
- </VPage>
344
+ <VBreadcrumb :items="[{ label: 'Inicio', to: '/' }, { label: 'Productos' }]" />
351
345
  ```
352
346
 
347
+ En rutas largas oculta los segmentos más antiguos antes de `sm`; con `loading` conserva el nombre accesible del segmento actual y muestra un esqueleto.
348
+
353
349
  ## Tablas
354
350
 
355
- `VTable` funciona en modo servidor: emite el estado de consulta y tú devuelves la página.
351
+ `VTable` se limita a renderizar filas y columnas. `VDataTable` lo compone con búsqueda, filtros, estados y `VPagination` para trabajar en modo servidor: emite el estado de consulta y tú devuelves la página.
356
352
 
357
353
  **`query` es obligatorio.** No es un `v-model` opcional: sin él la tabla no compila, y el error de tipos que sale encabeza con el objeto `definition`, así que manda a mirar el sitio equivocado.
358
354
 
359
355
  ```vue
360
356
  <script setup lang="ts">
361
- const query = useTableQuery({ sort: 'sku', url: true, history: 'push', filterKeys: ['status'] })
357
+ const query = useTableQuery({ sort: 'sku', url: true, history: 'push', filterKeys: ['status'] })
362
358
 
363
- const { data, status } = await useFetch('/api/products', {
364
- query: computed(() => ({ page: query.value.page, sort: query.value.sort?.column, ...query.value.filters })),
365
- })
359
+ const { data, status } = await useFetch('/api/products', {
360
+ query: computed(() => ({ page: query.value.page, sort: query.value.sort?.column, ...query.value.filters })),
361
+ })
366
362
  </script>
367
363
 
368
364
  <template>
369
- <VTable v-model:query="query" :definition="definition" :data="data?.data ?? []" :total="data?.total ?? 0" :loading="status === 'pending'" />
365
+ <VDataTable
366
+ v-model:query="query"
367
+ :definition="definition"
368
+ :data="data?.data ?? []"
369
+ :total="data?.total ?? 0"
370
+ :loading="status === 'pending'"
371
+ />
370
372
  </template>
371
373
  ```
372
374
 
@@ -380,16 +382,33 @@ Cada uno declara sus propios props en una unión discriminada por `type`, igual
380
382
 
381
383
  ```ts
382
384
  const definition = {
383
- searchable: false, // el endpoint no busca: no se pinta la barra
384
- paginated: false, // ni pagina: el pie dice cuántos hay y nada más
385
- columns: [
386
- { key: 'sku', label: 'SKU', type: 'text', sortable: true },
387
- { key: 'price', label: 'Precio', type: 'currency', currency: 'EUR', align: 'end' },
388
- { key: 'createdAt', label: 'Alta', type: 'date' },
389
- ],
385
+ searchable: false, // el endpoint no busca: no se pinta la barra
386
+ paginated: false, // ni pagina: el pie dice cuántos hay y nada más
387
+ columns: [
388
+ { key: 'sku', label: 'SKU', type: 'text', sortable: true },
389
+ { key: 'price', label: 'Precio', type: 'currency', currency: 'EUR', align: 'end' },
390
+ { key: 'createdAt', label: 'Alta', type: 'date' },
391
+ ],
392
+ } satisfies VunoDataTableDefinition<Product>
393
+ ```
394
+
395
+ La misma definición controla las capacidades de disposición que dependen del caso real:
396
+
397
+ ```ts
398
+ const definition = {
399
+ caption: 'Inventario disponible',
400
+ density: 'compact',
401
+ interactive: true,
402
+ stickyHeader: true,
403
+ columns: [
404
+ { key: 'sku', label: 'SKU', type: 'text', sticky: 'start' },
405
+ { key: 'stock', label: 'Stock', type: 'number', sticky: 'end' },
406
+ ],
390
407
  } satisfies VunoTableDefinition<Product>
391
408
  ```
392
409
 
410
+ `caption` nombra la tabla con HTML nativo; si el título ya existe fuera, usa `labelledBy` con su `id` en vez de repetirlo. `stickyHeader` necesita una altura limitada en `ui.tableRoot`. Las columnas usan bordes lógicos (`start` y `end`) para conservar el comportamiento en interfaces RTL. Cuando `interactive` está activo, una fila emite `rowClick` tanto con puntero como con Enter o Espacio y recibe un nombre accesible a partir de `rowLabel`.
411
+
393
412
  #### Traducir un valor a una etiqueta
394
413
 
395
414
  La columna `badge` tiene `map`, que convierte el valor crudo que llega del servidor en la etiqueta y el color que ve el usuario. Es lo que evita enseñar `user` o `published` en pantalla:
@@ -434,7 +453,7 @@ Y un aviso al ordenar: `sortable` ordena **en servidor por `key`**, y el servido
434
453
  `map` es solo de `badge`. Para traducir en otro tipo de columna, o para componer algo que no es una etiqueta, está `type: 'custom'` con su slot:
435
454
 
436
455
  ```vue
437
- <VTable v-model:query="query" :definition="definition" :data="rows">
456
+ <VTable v-model:sort="sort" :definition="definition" :data="rows">
438
457
  <template #cell-stock="{ row, value }">
439
458
  <span class="tabular-nums">{{ value }} uds.</span>
440
459
  <VBadge v-if="row.stock === 0" color="error" label="Agotado" />
@@ -449,9 +468,7 @@ El slot se llama `cell-<key>` y recibe `value` —el valor de esa columna, ya re
449
468
  Son dos estados distintos y se pintan distinto. Sin separarlos, una consulta que falla se normaliza a lista vacía (`data ?? []`) y la tabla dice «No hay resultados»: afirma que no hay nada cuando lo cierto es que no se pudo saber.
450
469
 
451
470
  ```ts
452
- const failure = computed(() => isError.value
453
- ? { title: 'No pudimos cargar los productos', hint: 'Puede ser algo temporal.', retry: () => void refetch() }
454
- : undefined)
471
+ const failure = computed(() => (isError.value ? { title: 'No pudimos cargar los productos', hint: 'Puede ser algo temporal.', retry: () => void refetch() } : undefined))
455
472
  ```
456
473
 
457
474
  Con `useCrud` no hace falta escribirlo: el objeto lo construye él, y el título y la pista se declaran en `messages` con `listFailed` y `listFailedHint`.
@@ -473,11 +490,7 @@ Los dos estados existen además sueltos, para las pantallas que no son una tabla
473
490
  Un aviso que acompaña contenido existente usa `VAlert`. Es persistente, toma los mismos colores semánticos del tema y usa `role="status"` por defecto; `role="alert"` queda para lo urgente:
474
491
 
475
492
  ```vue
476
- <VAlert
477
- color="warning"
478
- title="Faltan datos de facturación"
479
- description="Completa la dirección fiscal antes de emitir una factura."
480
- >
493
+ <VAlert color="warning" title="Faltan datos de facturación" description="Completa la dirección fiscal antes de emitir una factura.">
481
494
  <template #actions><VButton label="Completar datos" variant="outline" /></template>
482
495
  </VAlert>
483
496
  ```
@@ -518,13 +531,13 @@ El componente recibe `open` y los props que le pases, y resuelve la promesa emit
518
531
 
519
532
  ```vue
520
533
  <script setup lang="ts">
521
- const emit = defineEmits<{ close: [guardado: boolean] }>()
522
- const open = defineModel<boolean>('open', { default: false })
534
+ const emit = defineEmits<{ close: [guardado: boolean] }>()
535
+ const open = defineModel<boolean>('open', { default: false })
523
536
 
524
- function guardar() {
525
- open.value = false
526
- emit('close', true)
527
- }
537
+ function guardar() {
538
+ open.value = false
539
+ emit('close', true)
540
+ }
528
541
  </script>
529
542
  ```
530
543
 
@@ -532,22 +545,22 @@ Se pinta en `<VApp>` y no en la pantalla que lo abrió, así que navegar no lo d
532
545
 
533
546
  ## Composables
534
547
 
535
- | Composable | Para qué |
536
- |---|---|
537
- | `useCrud` | El ciclo de mantenimiento entero sobre TanStack Query. |
538
- | `useTableQuery` | Estado de consulta de una tabla, opcionalmente sincronizado con la query string. |
539
- | `useForm` | Contexto del `VForm` que envuelve al componente: estado, `dirty`, `reset`. |
540
- | `useField` | Lee y escribe un campo por su ruta; para construir campos propios. |
541
- | `useTheme` | Resuelve los slots de un componente cruzando tema, `app.config` y prop `ui`. |
542
- | `useIcons` | Los iconos configurados en `vuno.icons`. |
543
- | `useLocale` | El idioma configurado para fechas, números y monedas. |
544
- | `useMessages` | Los textos configurados en `vuno.messages`. |
545
- | `useToast` | Notificaciones globales que no interrumpen. |
546
- | `useConfirm` | Confirmación global que devuelve la respuesta como promesa. |
547
- | `useOverlay` | Abre componentes como capas globales desde código. |
548
- | `useModal` | Resuelve y abre los modales del proyecto por nombre. |
549
- | `useContext` | Acceso de bajo nivel al contexto provisto por `VApp`. |
550
- | `defineShortcuts` | Declara atajos de teclado reactivos y ligados al ciclo de vida. |
548
+ | Composable | Para qué |
549
+ | ----------------- | -------------------------------------------------------------------------------- |
550
+ | `useCrud` | El ciclo de mantenimiento entero sobre TanStack Query. |
551
+ | `useTableQuery` | Estado de consulta de una tabla, opcionalmente sincronizado con la query string. |
552
+ | `useForm` | Contexto del `VForm` que envuelve al componente: estado, `dirty`, `reset`. |
553
+ | `useField` | Lee y escribe un campo por su ruta; para construir campos propios. |
554
+ | `useTheme` | Resuelve los slots de un componente cruzando tema, `app.config` y prop `ui`. |
555
+ | `useIcons` | Los iconos configurados en `vuno.icons`. |
556
+ | `useLocale` | El idioma configurado para fechas, números y monedas. |
557
+ | `useMessages` | Los textos configurados en `vuno.messages`. |
558
+ | `useToast` | Notificaciones globales que no interrumpen. |
559
+ | `useConfirm` | Confirmación global que devuelve la respuesta como promesa. |
560
+ | `useOverlay` | Abre componentes como capas globales desde código. |
561
+ | `useModal` | Resuelve y abre los modales del proyecto por nombre. |
562
+ | `useContext` | Acceso de bajo nivel al contexto provisto por `VApp`. |
563
+ | `defineShortcuts` | Declara atajos de teclado reactivos y ligados al ciclo de vida. |
551
564
 
552
565
  `useTheme`, `useIcons`, `useLocale` y `useMessages` existen para que un componente tuyo pueda usar la misma configuración visual y regional que los de vuno sin duplicarla.
553
566
 
@@ -559,7 +572,7 @@ Se pinta en `<VApp>` y no en la pantalla que lo abrió, así que navegar no lo d
559
572
 
560
573
  ```css
561
574
  :root {
562
- --vuno-primary: var(--color-indigo-600);
575
+ --vuno-primary: var(--color-indigo-600);
563
576
  }
564
577
  ```
565
578
 
@@ -567,16 +580,16 @@ Con esa línea cambian los botones sólidos, el anillo de foco de todos los camp
567
580
 
568
581
  Los que hay:
569
582
 
570
- | Token | Para qué |
571
- | --- | --- |
572
- | `--vuno-primary` · `--vuno-secondary` · `--vuno-neutral` | Los tres acentos de marca. |
573
- | `--vuno-success` · `--vuno-info` · `--vuno-warning` · `--vuno-error` | Los cuatro de estado. |
574
- | `--vuno-*-contrast` | El texto que va **encima** de cada acento en su variante sólida. |
575
- | `--vuno-font-sans` · `--vuno-font-mono` | La tipografía. El módulo **nombra** la familia y no la carga: un `@import` a un servidor de fuentes convertiría cada visita de tu proyecto en una petición a un tercero. Cárgala tú —con `@nuxt/fonts` o con tu propio `@font-face`—; si no está, la pila de respaldo se encarga. |
576
- | `--vuno-surface` · `--vuno-surface-1` · `--vuno-surface-2` · `--vuno-surface-inverse` | La escala de elevación: **cada cosa sube un escalón sobre lo que la sostiene**. La página es la base —blanco en claro, negro en oscuro—, lo que se levanta de ella es el 1 y lo que se levanta dentro de algo ya levantado es el 2. |
577
- | `--vuno-text-strong` · `-body` · `-muted` · `-subtle` · `-inverse` | El texto por jerarquía, no por color. |
578
- | `--vuno-border` · `--vuno-border-strong` | El borde que decora y el que delimita un control. |
579
- | `--vuno-backdrop` | El velo que oscurece detrás de un diálogo. |
583
+ | Token | Para qué |
584
+ | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
585
+ | `--vuno-primary` · `--vuno-secondary` · `--vuno-neutral` | Los tres acentos de marca. |
586
+ | `--vuno-success` · `--vuno-info` · `--vuno-warning` · `--vuno-error` | Los cuatro de estado. |
587
+ | `--vuno-*-contrast` | El texto que va **encima** de cada acento en su variante sólida. |
588
+ | `--vuno-font-sans` · `--vuno-font-mono` | La tipografía. El módulo **nombra** la familia y no la carga: un `@import` a un servidor de fuentes convertiría cada visita de tu proyecto en una petición a un tercero. Cárgala tú —con `@nuxt/fonts` o con tu propio `@font-face`—; si no está, la pila de respaldo se encarga. |
589
+ | `--vuno-surface` · `--vuno-surface-1` · `--vuno-surface-2` · `--vuno-surface-inverse` | La escala de elevación: **cada cosa sube un escalón sobre lo que la sostiene**. La página es la base —blanco en claro, negro en oscuro—, lo que se levanta de ella es el 1 y lo que se levanta dentro de algo ya levantado es el 2. |
590
+ | `--vuno-text-strong` · `-body` · `-muted` · `-subtle` · `-inverse` | El texto por jerarquía, no por color. |
591
+ | `--vuno-border` · `--vuno-border-strong` | El borde que decora y el que delimita un control. |
592
+ | `--vuno-backdrop` | El velo que oscurece detrás de un diálogo. |
580
593
 
581
594
  Dos cosas que ahorran un rato:
582
595
 
@@ -586,23 +599,28 @@ Dos cosas que ahorran un rato:
586
599
 
587
600
  ```css
588
601
  .dark {
589
- --vuno-primary: var(--color-indigo-400);
602
+ --vuno-primary: var(--color-indigo-400);
590
603
  }
591
604
  ```
592
605
 
593
- ### Los tres niveles del resto
606
+ ### Los niveles de configuración
594
607
 
595
- Para lo que no es color: la forma de un componente concreto, sus iconos y sus textos.
608
+ Los defaults visuales compartidos viven en `vuno.theme`; las entradas de cada
609
+ componente, en `vuno.components`. Los iconos, textos e idioma permanecen al
610
+ nivel de `vuno` porque no son temas de un componente.
596
611
 
597
612
  ```ts
598
613
  // app.config.ts — para toda la aplicación
599
614
  export default defineAppConfig({
600
- vuno: {
601
- formSection: { slots: { root: 'border-dashed' } },
602
- icons: { slugEdit: 'lucide:wand-sparkles' },
603
- locale: 'es-ES',
604
- messages: { selectPlaceholder: 'Elige una opción' },
605
- },
615
+ vuno: {
616
+ components: {
617
+ formSection: { slots: { root: 'border-dashed' } },
618
+ },
619
+ icons: { slugEdit: 'lucide:wand-sparkles' },
620
+ locale: 'es-ES',
621
+ messages: { selectPlaceholder: 'Elige una opción' },
622
+ theme: { radius: 'md' },
623
+ },
606
624
  })
607
625
  ```
608
626
 
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vuno",
3
3
  "configKey": "vuno",
4
- "version": "2.0.0",
4
+ "version": "3.0.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.3",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -19,6 +19,12 @@ const module$1 = defineNuxtModule({
19
19
  scan: true
20
20
  }
21
21
  }
22
+ },
23
+ "@nuxtjs/color-mode": {
24
+ defaults: {
25
+ storage: "cookie",
26
+ storageKey: "vuno-theme"
27
+ }
22
28
  }
23
29
  },
24
30
  setup(options, nuxt) {
@@ -59,7 +65,7 @@ export {}
59
65
  });
60
66
  nuxt.hook("components:extend", (components) => {
61
67
  for (const component of components) {
62
- const path = component.filePath.split("\\").join("/");
68
+ const path = component.filePath.replaceAll("\\", "/");
63
69
  if (path.includes("/components/modal/")) component.global = true;
64
70
  }
65
71
  });
@@ -1 +1 @@
1
- :root{--vuno-modal-duration:180ms;--vuno-modal-ease:cubic-bezier(0.32,0.72,0,1);--vuno-backdrop:rgba(0,0,0,.5)}dialog[data-vuno-modal]{opacity:0;transform:scale(.97) translateY(.5rem);transition:opacity var(--vuno-modal-duration) var(--vuno-modal-ease),transform var(--vuno-modal-duration) var(--vuno-modal-ease),display var(--vuno-modal-duration) allow-discrete,overlay var(--vuno-modal-duration) allow-discrete}dialog[data-vuno-modal][open]{opacity:1;transform:scale(1) translateY(0)}@starting-style{dialog[data-vuno-modal][open]{opacity:0;transform:scale(.97) translateY(.5rem)}}dialog[data-vuno-modal]::backdrop{background-color:transparent;transition:background-color var(--vuno-modal-duration) var(--vuno-modal-ease),display var(--vuno-modal-duration) allow-discrete,overlay var(--vuno-modal-duration) allow-discrete}dialog[data-vuno-modal][open]::backdrop{background-color:var(--vuno-backdrop)}@starting-style{dialog[data-vuno-modal][open]::backdrop{background-color:transparent}}dialog[data-vuno-modal][data-position=end],dialog[data-vuno-modal][data-position=start]{transform:translateX(var(--vuno-panel-from))}dialog[data-vuno-modal][data-position=end]{--vuno-panel-from:100%}[dir=rtl] dialog[data-vuno-modal][data-position=end],dialog[data-vuno-modal][data-position=start]{--vuno-panel-from:-100%}[dir=rtl] dialog[data-vuno-modal][data-position=start]{--vuno-panel-from:100%}dialog[data-vuno-modal][data-position=end][open],dialog[data-vuno-modal][data-position=start][open]{transform:translateX(0)}@starting-style{dialog[data-vuno-modal][data-position=end][open],dialog[data-vuno-modal][data-position=start][open]{transform:translateX(var(--vuno-panel-from))}}dialog[data-vuno-modal].vuno-overlay-behind::backdrop,dialog[data-vuno-modal].vuno-overlay-behind[open]::backdrop{background-color:transparent}@media (prefers-reduced-motion:reduce){dialog[data-vuno-modal],dialog[data-vuno-modal]::backdrop{transition-duration:1ms}dialog[data-vuno-modal],dialog[data-vuno-modal][data-position=end],dialog[data-vuno-modal][data-position=end][open],dialog[data-vuno-modal][data-position=start],dialog[data-vuno-modal][data-position=start][open]{transform:none}}
1
+ :root{--vuno-modal-duration:180ms;--vuno-modal-ease:cubic-bezier(0.32,0.72,0,1);--vuno-backdrop:rgba(0,0,0,.5)}dialog[data-vuno-modal]{opacity:0;transform:scale(.97) translateY(.5rem);transition:opacity var(--vuno-modal-duration) var(--vuno-modal-ease),transform var(--vuno-modal-duration) var(--vuno-modal-ease),display var(--vuno-modal-duration) allow-discrete,overlay var(--vuno-modal-duration) allow-discrete}dialog[data-vuno-modal][open]{opacity:1;transform:scale(1) translateY(0)}@starting-style{dialog[data-vuno-modal][open]{opacity:0;transform:scale(.97) translateY(.5rem)}}@media (width < 40rem){dialog[data-vuno-modal]:not([data-position]){transform:translateY(100%)}dialog[data-vuno-modal]:not([data-position])[open]{transform:translateY(0)}@starting-style{dialog[data-vuno-modal]:not([data-position])[open]{transform:translateY(100%)}}}dialog[data-vuno-modal]::backdrop{background-color:transparent;transition:background-color var(--vuno-modal-duration) var(--vuno-modal-ease),display var(--vuno-modal-duration) allow-discrete,overlay var(--vuno-modal-duration) allow-discrete}dialog[data-vuno-modal][open]::backdrop{background-color:var(--vuno-backdrop)}@starting-style{dialog[data-vuno-modal][open]::backdrop{background-color:transparent}}dialog[data-vuno-modal][data-position=end],dialog[data-vuno-modal][data-position=start]{transform:translateX(var(--vuno-panel-from))}dialog[data-vuno-modal][data-position=end]{--vuno-panel-from:100%}[dir=rtl] dialog[data-vuno-modal][data-position=end],dialog[data-vuno-modal][data-position=start]{--vuno-panel-from:-100%}[dir=rtl] dialog[data-vuno-modal][data-position=start]{--vuno-panel-from:100%}dialog[data-vuno-modal][data-position=end][open],dialog[data-vuno-modal][data-position=start][open]{transform:translateX(0)}@starting-style{dialog[data-vuno-modal][data-position=end][open],dialog[data-vuno-modal][data-position=start][open]{transform:translateX(var(--vuno-panel-from))}}dialog[data-vuno-modal].vuno-overlay-behind::backdrop,dialog[data-vuno-modal].vuno-overlay-behind[open]::backdrop{background-color:transparent}@media (prefers-reduced-motion:reduce){dialog[data-vuno-modal],dialog[data-vuno-modal]::backdrop{transition-duration:1ms}dialog[data-vuno-modal],dialog[data-vuno-modal][data-position=end],dialog[data-vuno-modal][data-position=end][open],dialog[data-vuno-modal][data-position=start],dialog[data-vuno-modal][data-position=start][open]{transform:none}}
@@ -1 +1 @@
1
- @import "tailwindcss";@import "#build/vuno.css";@import "./tokens.css";@import "./theme.css";@import "./dialog.css";@source "../../**/*";
1
+ @import "tailwindcss";@import "#build/vuno.css";@import "./tokens.css";@import "./theme.css";@import "./dialog.css";@custom-variant dark (&:where(.dark, .dark *));@source "../../**/*";
@@ -1 +1 @@
1
- @theme inline{--color-vuno-primary:var(--vuno-primary);--color-vuno-primary-contrast:var(--vuno-primary-contrast);--color-vuno-secondary:var(--vuno-secondary);--color-vuno-secondary-contrast:var(--vuno-secondary-contrast);--color-vuno-neutral:var(--vuno-neutral);--color-vuno-neutral-contrast:var(--vuno-neutral-contrast);--color-vuno-surface:var(--vuno-surface);--color-vuno-surface-1:var(--vuno-surface-1);--color-vuno-surface-2:var(--vuno-surface-2);--color-vuno-surface-inverse:var(--vuno-surface-inverse);--color-vuno-strong:var(--vuno-text-strong);--color-vuno-body:var(--vuno-text-body);--color-vuno-muted:var(--vuno-text-muted);--color-vuno-subtle:var(--vuno-text-subtle);--color-vuno-inverse:var(--vuno-text-inverse);--font-sans:var(--vuno-font-sans);--font-mono:var(--vuno-font-mono);--color-vuno-border:var(--vuno-border);--color-vuno-border-strong:var(--vuno-border-strong);--color-vuno-success:var(--vuno-success);--color-vuno-success-contrast:var(--vuno-success-contrast);--color-vuno-info:var(--vuno-info);--color-vuno-info-contrast:var(--vuno-info-contrast);--color-vuno-warning:var(--vuno-warning);--color-vuno-warning-contrast:var(--vuno-warning-contrast);--color-vuno-error:var(--vuno-error);--color-vuno-error-contrast:var(--vuno-error-contrast);--container-8xl:96rem}
1
+ @theme inline{--color-vuno-primary:var(--vuno-primary);--color-vuno-primary-contrast:var(--vuno-primary-contrast);--color-vuno-secondary:var(--vuno-secondary);--color-vuno-secondary-contrast:var(--vuno-secondary-contrast);--color-vuno-neutral:var(--vuno-neutral);--color-vuno-neutral-contrast:var(--vuno-neutral-contrast);--color-vuno-brand:var(--vuno-brand);--color-vuno-brand-hover:var(--vuno-brand-hover);--color-vuno-brand-contrast:var(--vuno-brand-contrast);--color-vuno-control:var(--vuno-control);--color-vuno-tint:var(--vuno-tint);--color-vuno-line:var(--vuno-line);--color-vuno-focus:var(--vuno-focus);--color-vuno-danger-solid:var(--vuno-danger-solid);--color-vuno-danger-solid-hover:var(--vuno-danger-solid-hover);--color-vuno-danger-solid-contrast:var(--vuno-danger-solid-contrast);--color-vuno-surface:var(--vuno-surface);--color-vuno-surface-1:var(--vuno-surface-1);--color-vuno-surface-2:var(--vuno-surface-2);--color-vuno-surface-inverse:var(--vuno-surface-inverse);--color-vuno-strong:var(--vuno-text-strong);--color-vuno-body:var(--vuno-text-body);--color-vuno-muted:var(--vuno-text-muted);--color-vuno-subtle:var(--vuno-text-subtle);--color-vuno-inverse:var(--vuno-text-inverse);--font-sans:var(--vuno-font-sans);--font-mono:var(--vuno-font-mono);--color-vuno-border:var(--vuno-border);--color-vuno-border-strong:var(--vuno-border-strong);--color-vuno-success:var(--vuno-success);--color-vuno-success-contrast:var(--vuno-success-contrast);--color-vuno-info:var(--vuno-info);--color-vuno-info-contrast:var(--vuno-info-contrast);--color-vuno-warning:var(--vuno-warning);--color-vuno-warning-contrast:var(--vuno-warning-contrast);--color-vuno-error:var(--vuno-error);--color-vuno-error-contrast:var(--vuno-error-contrast);--container-8xl:96rem}