@groupteknology/vuno 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/README.md +53 -27
  2. package/dist/module.d.mts +14 -2
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +80 -13
  5. package/dist/runtime/app/assets/css/dialog.css +1 -0
  6. package/dist/runtime/app/assets/css/main.css +1 -0
  7. package/dist/runtime/app/assets/css/stylesheet.css +1 -0
  8. package/dist/runtime/app/assets/css/theme.css +1 -0
  9. package/dist/runtime/app/assets/css/tokens.css +1 -0
  10. package/dist/runtime/app/components/Alert/Alert.d.vue.ts +20 -0
  11. package/dist/runtime/app/components/Alert/Alert.theme.d.ts +13 -0
  12. package/dist/runtime/app/components/Alert/Alert.theme.js +13 -0
  13. package/dist/runtime/app/components/Alert/Alert.vue +59 -0
  14. package/dist/runtime/app/components/Alert/Alert.vue.d.ts +20 -0
  15. package/dist/runtime/app/components/App/App.d.vue.ts +52 -0
  16. package/dist/runtime/app/components/App/App.vue +150 -0
  17. package/dist/runtime/app/components/App/App.vue.d.ts +52 -0
  18. package/dist/runtime/app/components/App/internal/Overlay/Overlay.d.vue.ts +7 -0
  19. package/dist/runtime/app/components/App/internal/Overlay/Overlay.vue +39 -0
  20. package/dist/runtime/app/components/App/internal/Overlay/Overlay.vue.d.ts +7 -0
  21. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.d.vue.ts +8 -0
  22. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.vue +19 -0
  23. package/dist/runtime/app/components/App/internal/OverlayItem/OverlayItem.vue.d.ts +8 -0
  24. package/dist/runtime/app/components/App/internal/Toast/Toast.d.vue.ts +11 -0
  25. package/dist/runtime/app/components/App/internal/Toast/Toast.theme.d.ts +13 -0
  26. package/dist/runtime/app/components/App/internal/Toast/Toast.theme.js +18 -0
  27. package/dist/runtime/app/components/App/internal/Toast/Toast.vue +64 -0
  28. package/dist/runtime/app/components/App/internal/Toast/Toast.vue.d.ts +11 -0
  29. package/dist/runtime/app/components/App/internal/Toaster/Toaster.d.vue.ts +11 -0
  30. package/dist/runtime/app/components/App/internal/Toaster/Toaster.theme.d.ts +15 -0
  31. package/dist/runtime/app/components/App/internal/Toaster/Toaster.theme.js +16 -0
  32. package/dist/runtime/app/components/App/internal/Toaster/Toaster.vue +100 -0
  33. package/dist/runtime/app/components/App/internal/Toaster/Toaster.vue.d.ts +11 -0
  34. package/dist/runtime/app/components/Avatar/Avatar.d.vue.ts +27 -0
  35. package/dist/runtime/app/components/Avatar/Avatar.theme.d.ts +30 -0
  36. package/dist/runtime/app/components/Avatar/Avatar.theme.js +22 -0
  37. package/dist/runtime/app/components/Avatar/Avatar.vue +51 -0
  38. package/dist/runtime/app/components/Avatar/Avatar.vue.d.ts +27 -0
  39. package/dist/runtime/app/components/Badge/Badge.d.vue.ts +40 -0
  40. package/dist/runtime/app/components/Badge/Badge.theme.d.ts +40 -0
  41. package/dist/runtime/app/components/Badge/Badge.theme.js +22 -0
  42. package/dist/runtime/app/components/Badge/Badge.vue +28 -0
  43. package/dist/runtime/app/components/Badge/Badge.vue.d.ts +40 -0
  44. package/dist/runtime/app/components/Button/Button.d.vue.ts +49 -0
  45. package/dist/runtime/app/components/Button/Button.theme.d.ts +88 -0
  46. package/dist/runtime/app/components/Button/Button.theme.js +59 -0
  47. package/dist/runtime/app/components/Button/Button.vue +78 -0
  48. package/dist/runtime/app/components/Button/Button.vue.d.ts +49 -0
  49. package/dist/runtime/app/components/Card/Card.d.vue.ts +94 -0
  50. package/dist/runtime/app/components/Card/Card.theme.d.ts +57 -0
  51. package/dist/runtime/app/components/Card/Card.theme.js +62 -0
  52. package/dist/runtime/app/components/Card/Card.vue +45 -0
  53. package/dist/runtime/app/components/Card/Card.vue.d.ts +94 -0
  54. package/dist/runtime/app/components/Code/Code.d.vue.ts +19 -0
  55. package/dist/runtime/app/components/Code/Code.theme.d.ts +11 -0
  56. package/dist/runtime/app/components/Code/Code.theme.js +12 -0
  57. package/dist/runtime/app/components/Code/Code.vue +109 -0
  58. package/dist/runtime/app/components/Code/Code.vue.d.ts +19 -0
  59. package/dist/runtime/app/components/Confirm/Confirm.d.vue.ts +35 -0
  60. package/dist/runtime/app/components/Confirm/Confirm.theme.d.ts +12 -0
  61. package/dist/runtime/app/components/Confirm/Confirm.theme.js +13 -0
  62. package/dist/runtime/app/components/Confirm/Confirm.vue +83 -0
  63. package/dist/runtime/app/components/Confirm/Confirm.vue.d.ts +35 -0
  64. package/dist/runtime/app/components/Container/Container.d.vue.ts +42 -0
  65. package/dist/runtime/app/components/Container/Container.theme.d.ts +53 -0
  66. package/dist/runtime/app/components/Container/Container.theme.js +31 -0
  67. package/dist/runtime/app/components/Container/Container.vue +20 -0
  68. package/dist/runtime/app/components/Container/Container.vue.d.ts +42 -0
  69. package/dist/runtime/app/components/ControlGroup/ControlGroup.d.vue.ts +26 -0
  70. package/dist/runtime/app/components/ControlGroup/ControlGroup.theme.d.ts +16 -0
  71. package/dist/runtime/app/components/ControlGroup/ControlGroup.theme.js +13 -0
  72. package/dist/runtime/app/components/ControlGroup/ControlGroup.vue +26 -0
  73. package/dist/runtime/app/components/ControlGroup/ControlGroup.vue.d.ts +26 -0
  74. package/dist/runtime/app/components/FieldArray/FieldArray.d.vue.ts +13 -0
  75. package/dist/runtime/app/components/FieldArray/FieldArray.theme.d.ts +12 -0
  76. package/dist/runtime/app/components/FieldArray/FieldArray.theme.js +13 -0
  77. package/dist/runtime/app/components/FieldArray/FieldArray.vue +173 -0
  78. package/dist/runtime/app/components/FieldArray/FieldArray.vue.d.ts +13 -0
  79. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.d.vue.ts +13 -0
  80. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.theme.d.ts +5 -0
  81. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.theme.js +2 -0
  82. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.vue +39 -0
  83. package/dist/runtime/app/components/FieldCheckbox/FieldCheckbox.vue.d.ts +13 -0
  84. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.d.vue.ts +40 -0
  85. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.theme.d.ts +30 -0
  86. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.theme.js +10 -0
  87. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.vue +40 -0
  88. package/dist/runtime/app/components/FieldCheckbox/internal/Checkbox/Checkbox.vue.d.ts +40 -0
  89. package/dist/runtime/app/components/FieldColor/FieldColor.d.vue.ts +13 -0
  90. package/dist/runtime/app/components/FieldColor/FieldColor.theme.d.ts +27 -0
  91. package/dist/runtime/app/components/FieldColor/FieldColor.theme.js +18 -0
  92. package/dist/runtime/app/components/FieldColor/FieldColor.vue +88 -0
  93. package/dist/runtime/app/components/FieldColor/FieldColor.vue.d.ts +13 -0
  94. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.d.vue.ts +13 -0
  95. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.theme.d.ts +5 -0
  96. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.theme.js +2 -0
  97. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.vue +51 -0
  98. package/dist/runtime/app/components/FieldCurrency/FieldCurrency.vue.d.ts +13 -0
  99. package/dist/runtime/app/components/FieldFile/FieldFile.d.vue.ts +26 -0
  100. package/dist/runtime/app/components/FieldFile/FieldFile.theme.d.ts +5 -0
  101. package/dist/runtime/app/components/FieldFile/FieldFile.theme.js +2 -0
  102. package/dist/runtime/app/components/FieldFile/FieldFile.vue +99 -0
  103. package/dist/runtime/app/components/FieldFile/FieldFile.vue.d.ts +26 -0
  104. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.d.vue.ts +66 -0
  105. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.theme.d.ts +88 -0
  106. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.theme.js +55 -0
  107. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.vue +187 -0
  108. package/dist/runtime/app/components/FieldFile/internal/FileUpload/FileUpload.vue.d.ts +66 -0
  109. package/dist/runtime/app/components/FieldInput/FieldInput.d.vue.ts +24 -0
  110. package/dist/runtime/app/components/FieldInput/FieldInput.theme.d.ts +5 -0
  111. package/dist/runtime/app/components/FieldInput/FieldInput.theme.js +2 -0
  112. package/dist/runtime/app/components/FieldInput/FieldInput.vue +61 -0
  113. package/dist/runtime/app/components/FieldInput/FieldInput.vue.d.ts +24 -0
  114. package/dist/runtime/app/components/FieldNumber/FieldNumber.d.vue.ts +13 -0
  115. package/dist/runtime/app/components/FieldNumber/FieldNumber.theme.d.ts +5 -0
  116. package/dist/runtime/app/components/FieldNumber/FieldNumber.theme.js +2 -0
  117. package/dist/runtime/app/components/FieldNumber/FieldNumber.vue +47 -0
  118. package/dist/runtime/app/components/FieldNumber/FieldNumber.vue.d.ts +13 -0
  119. package/dist/runtime/app/components/FieldPassword/FieldPassword.d.vue.ts +13 -0
  120. package/dist/runtime/app/components/FieldPassword/FieldPassword.theme.d.ts +5 -0
  121. package/dist/runtime/app/components/FieldPassword/FieldPassword.theme.js +2 -0
  122. package/dist/runtime/app/components/FieldPassword/FieldPassword.vue +62 -0
  123. package/dist/runtime/app/components/FieldPassword/FieldPassword.vue.d.ts +13 -0
  124. package/dist/runtime/app/components/FieldRadio/FieldRadio.d.vue.ts +13 -0
  125. package/dist/runtime/app/components/FieldRadio/FieldRadio.theme.d.ts +5 -0
  126. package/dist/runtime/app/components/FieldRadio/FieldRadio.theme.js +2 -0
  127. package/dist/runtime/app/components/FieldRadio/FieldRadio.vue +41 -0
  128. package/dist/runtime/app/components/FieldRadio/FieldRadio.vue.d.ts +13 -0
  129. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.d.vue.ts +32 -0
  130. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.theme.d.ts +54 -0
  131. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.theme.js +31 -0
  132. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.vue +80 -0
  133. package/dist/runtime/app/components/FieldRadio/internal/RadioGroup/RadioGroup.vue.d.ts +32 -0
  134. package/dist/runtime/app/components/FieldSearch/FieldSearch.d.vue.ts +17 -0
  135. package/dist/runtime/app/components/FieldSearch/FieldSearch.theme.d.ts +6 -0
  136. package/dist/runtime/app/components/FieldSearch/FieldSearch.theme.js +7 -0
  137. package/dist/runtime/app/components/FieldSearch/FieldSearch.vue +74 -0
  138. package/dist/runtime/app/components/FieldSearch/FieldSearch.vue.d.ts +17 -0
  139. package/dist/runtime/app/components/FieldSelect/FieldSelect.d.vue.ts +13 -0
  140. package/dist/runtime/app/components/FieldSelect/FieldSelect.theme.d.ts +5 -0
  141. package/dist/runtime/app/components/FieldSelect/FieldSelect.theme.js +2 -0
  142. package/dist/runtime/app/components/FieldSelect/FieldSelect.vue +45 -0
  143. package/dist/runtime/app/components/FieldSelect/FieldSelect.vue.d.ts +13 -0
  144. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.d.vue.ts +97 -0
  145. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.theme.d.ts +36 -0
  146. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.theme.js +49 -0
  147. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.vue +196 -0
  148. package/dist/runtime/app/components/FieldSelect/internal/Select/Select.vue.d.ts +97 -0
  149. package/dist/runtime/app/components/FieldSelect/internal/Select/option.d.ts +25 -0
  150. package/dist/runtime/app/components/FieldSelect/internal/Select/option.js +6 -0
  151. package/dist/runtime/app/components/FieldSelect/internal/Select/useVunoSelectState.d.ts +30 -0
  152. package/dist/runtime/app/components/FieldSelect/internal/Select/useVunoSelectState.js +142 -0
  153. package/dist/runtime/app/components/FieldSlug/FieldSlug.d.vue.ts +13 -0
  154. package/dist/runtime/app/components/FieldSlug/FieldSlug.theme.d.ts +5 -0
  155. package/dist/runtime/app/components/FieldSlug/FieldSlug.theme.js +2 -0
  156. package/dist/runtime/app/components/FieldSlug/FieldSlug.vue +113 -0
  157. package/dist/runtime/app/components/FieldSlug/FieldSlug.vue.d.ts +13 -0
  158. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.d.vue.ts +13 -0
  159. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.theme.d.ts +5 -0
  160. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.theme.js +2 -0
  161. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.vue +37 -0
  162. package/dist/runtime/app/components/FieldSwitch/FieldSwitch.vue.d.ts +13 -0
  163. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.d.vue.ts +26 -0
  164. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.theme.d.ts +39 -0
  165. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.theme.js +20 -0
  166. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.vue +46 -0
  167. package/dist/runtime/app/components/FieldSwitch/internal/Switch/Switch.vue.d.ts +26 -0
  168. package/dist/runtime/app/components/FieldTags/FieldTags.d.vue.ts +13 -0
  169. package/dist/runtime/app/components/FieldTags/FieldTags.theme.d.ts +5 -0
  170. package/dist/runtime/app/components/FieldTags/FieldTags.theme.js +2 -0
  171. package/dist/runtime/app/components/FieldTags/FieldTags.vue +41 -0
  172. package/dist/runtime/app/components/FieldTags/FieldTags.vue.d.ts +13 -0
  173. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.d.vue.ts +26 -0
  174. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.theme.d.ts +34 -0
  175. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.theme.js +20 -0
  176. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.vue +97 -0
  177. package/dist/runtime/app/components/FieldTags/internal/TagsInput/TagsInput.vue.d.ts +26 -0
  178. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.d.vue.ts +26 -0
  179. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.theme.d.ts +5 -0
  180. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.theme.js +2 -0
  181. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.vue +45 -0
  182. package/dist/runtime/app/components/FieldTextarea/FieldTextarea.vue.d.ts +26 -0
  183. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.d.vue.ts +34 -0
  184. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.theme.d.ts +36 -0
  185. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.theme.js +37 -0
  186. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.vue +43 -0
  187. package/dist/runtime/app/components/FieldTextarea/internal/Textarea/Textarea.vue.d.ts +34 -0
  188. package/dist/runtime/app/components/Form/Form.d.vue.ts +52 -0
  189. package/dist/runtime/app/components/Form/Form.theme.d.ts +9 -0
  190. package/dist/runtime/app/components/Form/Form.theme.js +10 -0
  191. package/dist/runtime/app/components/Form/Form.vue +129 -0
  192. package/dist/runtime/app/components/Form/Form.vue.d.ts +52 -0
  193. package/dist/runtime/app/components/Form/internal/FormFieldRenderer/FormFieldRenderer.d.vue.ts +7 -0
  194. package/dist/runtime/app/components/Form/internal/FormFieldRenderer/FormFieldRenderer.vue +67 -0
  195. package/dist/runtime/app/components/Form/internal/FormFieldRenderer/FormFieldRenderer.vue.d.ts +7 -0
  196. package/dist/runtime/app/components/Form/internal/grid.d.ts +9 -0
  197. package/dist/runtime/app/components/Form/internal/grid.js +91 -0
  198. package/dist/runtime/app/components/Form/internal/standard-schema.d.ts +29 -0
  199. package/dist/runtime/app/components/Form/internal/standard-schema.js +15 -0
  200. package/dist/runtime/app/components/Form/internal/useVunoFormState.d.ts +43 -0
  201. package/dist/runtime/app/components/Form/internal/useVunoFormState.js +81 -0
  202. package/dist/runtime/app/components/FormField/FormField.d.vue.ts +35 -0
  203. package/dist/runtime/app/components/FormField/FormField.theme.d.ts +62 -0
  204. package/dist/runtime/app/components/FormField/FormField.theme.js +28 -0
  205. package/dist/runtime/app/components/FormField/FormField.vue +124 -0
  206. package/dist/runtime/app/components/FormField/FormField.vue.d.ts +35 -0
  207. package/dist/runtime/app/components/FormModal/FormModal.d.vue.ts +63 -0
  208. package/dist/runtime/app/components/FormModal/FormModal.theme.d.ts +8 -0
  209. package/dist/runtime/app/components/FormModal/FormModal.theme.js +9 -0
  210. package/dist/runtime/app/components/FormModal/FormModal.vue +95 -0
  211. package/dist/runtime/app/components/FormModal/FormModal.vue.d.ts +63 -0
  212. package/dist/runtime/app/components/FormSection/FormSection.d.vue.ts +15 -0
  213. package/dist/runtime/app/components/FormSection/FormSection.theme.d.ts +12 -0
  214. package/dist/runtime/app/components/FormSection/FormSection.theme.js +14 -0
  215. package/dist/runtime/app/components/FormSection/FormSection.vue +45 -0
  216. package/dist/runtime/app/components/FormSection/FormSection.vue.d.ts +15 -0
  217. package/dist/runtime/app/components/Icon/Icon.d.vue.ts +6 -0
  218. package/dist/runtime/app/components/Icon/Icon.vue +32 -0
  219. package/dist/runtime/app/components/Icon/Icon.vue.d.ts +6 -0
  220. package/dist/runtime/app/components/Menu/Menu.d.vue.ts +36 -0
  221. package/dist/runtime/app/components/Menu/Menu.theme.d.ts +17 -0
  222. package/dist/runtime/app/components/Menu/Menu.theme.js +20 -0
  223. package/dist/runtime/app/components/Menu/Menu.vue +182 -0
  224. package/dist/runtime/app/components/Menu/Menu.vue.d.ts +36 -0
  225. package/dist/runtime/app/components/Modal/Modal.d.vue.ts +43 -0
  226. package/dist/runtime/app/components/Modal/Modal.theme.d.ts +59 -0
  227. package/dist/runtime/app/components/Modal/Modal.theme.js +47 -0
  228. package/dist/runtime/app/components/Modal/Modal.vue +215 -0
  229. package/dist/runtime/app/components/Modal/Modal.vue.d.ts +43 -0
  230. package/dist/runtime/app/components/Navbar/Navbar.d.vue.ts +45 -0
  231. package/dist/runtime/app/components/Navbar/Navbar.theme.d.ts +31 -0
  232. package/dist/runtime/app/components/Navbar/Navbar.theme.js +32 -0
  233. package/dist/runtime/app/components/Navbar/Navbar.vue +47 -0
  234. package/dist/runtime/app/components/Navbar/Navbar.vue.d.ts +45 -0
  235. package/dist/runtime/app/components/NavigationList/NavigationList.d.vue.ts +38 -0
  236. package/dist/runtime/app/components/NavigationList/NavigationList.theme.d.ts +32 -0
  237. package/dist/runtime/app/components/NavigationList/NavigationList.theme.js +35 -0
  238. package/dist/runtime/app/components/NavigationList/NavigationList.vue +187 -0
  239. package/dist/runtime/app/components/NavigationList/NavigationList.vue.d.ts +38 -0
  240. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.d.vue.ts +31 -0
  241. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.theme.d.ts +26 -0
  242. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.theme.js +27 -0
  243. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.vue +236 -0
  244. package/dist/runtime/app/components/NavigationMenu/NavigationMenu.vue.d.ts +31 -0
  245. package/dist/runtime/app/components/NavigationToc/NavigationToc.d.vue.ts +14 -0
  246. package/dist/runtime/app/components/NavigationToc/NavigationToc.theme.d.ts +9 -0
  247. package/dist/runtime/app/components/NavigationToc/NavigationToc.theme.js +10 -0
  248. package/dist/runtime/app/components/NavigationToc/NavigationToc.vue +81 -0
  249. package/dist/runtime/app/components/NavigationToc/NavigationToc.vue.d.ts +14 -0
  250. package/dist/runtime/app/components/Page/Page.d.vue.ts +40 -0
  251. package/dist/runtime/app/components/Page/Page.theme.d.ts +32 -0
  252. package/dist/runtime/app/components/Page/Page.theme.js +31 -0
  253. package/dist/runtime/app/components/Page/Page.vue +132 -0
  254. package/dist/runtime/app/components/Page/Page.vue.d.ts +40 -0
  255. package/dist/runtime/app/components/Pagination/Pagination.d.vue.ts +33 -0
  256. package/dist/runtime/app/components/Pagination/Pagination.theme.d.ts +13 -0
  257. package/dist/runtime/app/components/Pagination/Pagination.theme.js +14 -0
  258. package/dist/runtime/app/components/Pagination/Pagination.vue +129 -0
  259. package/dist/runtime/app/components/Pagination/Pagination.vue.d.ts +33 -0
  260. package/dist/runtime/app/components/Slideover/Slideover.d.vue.ts +43 -0
  261. package/dist/runtime/app/components/Slideover/Slideover.theme.d.ts +35 -0
  262. package/dist/runtime/app/components/Slideover/Slideover.theme.js +24 -0
  263. package/dist/runtime/app/components/Slideover/Slideover.vue +58 -0
  264. package/dist/runtime/app/components/Slideover/Slideover.vue.d.ts +43 -0
  265. package/dist/runtime/app/components/State/State.d.vue.ts +14 -0
  266. package/dist/runtime/app/components/State/State.theme.d.ts +19 -0
  267. package/dist/runtime/app/components/State/State.theme.js +26 -0
  268. package/dist/runtime/app/components/State/State.vue +66 -0
  269. package/dist/runtime/app/components/State/State.vue.d.ts +14 -0
  270. package/dist/runtime/app/components/Table/Table.d.vue.ts +80 -0
  271. package/dist/runtime/app/components/Table/Table.theme.d.ts +50 -0
  272. package/dist/runtime/app/components/Table/Table.theme.js +64 -0
  273. package/dist/runtime/app/components/Table/Table.vue +483 -0
  274. package/dist/runtime/app/components/Table/Table.vue.d.ts +80 -0
  275. package/dist/runtime/app/components/Table/internal/CellBadge/CellBadge.d.vue.ts +5 -0
  276. package/dist/runtime/app/components/Table/internal/CellBadge/CellBadge.vue +26 -0
  277. package/dist/runtime/app/components/Table/internal/CellBadge/CellBadge.vue.d.ts +5 -0
  278. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.d.vue.ts +5 -0
  279. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.theme.d.ts +21 -0
  280. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.theme.js +11 -0
  281. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.vue +32 -0
  282. package/dist/runtime/app/components/Table/internal/CellBoolean/CellBoolean.vue.d.ts +5 -0
  283. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.d.vue.ts +5 -0
  284. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.theme.d.ts +5 -0
  285. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.theme.js +4 -0
  286. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.vue +16 -0
  287. package/dist/runtime/app/components/Table/internal/CellCurrency/CellCurrency.vue.d.ts +5 -0
  288. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.d.vue.ts +5 -0
  289. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.theme.d.ts +5 -0
  290. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.theme.js +4 -0
  291. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.vue +21 -0
  292. package/dist/runtime/app/components/Table/internal/CellDate/CellDate.vue.d.ts +5 -0
  293. package/dist/runtime/app/components/Table/internal/CellImage/CellImage.d.vue.ts +5 -0
  294. package/dist/runtime/app/components/Table/internal/CellImage/CellImage.vue +24 -0
  295. package/dist/runtime/app/components/Table/internal/CellImage/CellImage.vue.d.ts +5 -0
  296. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.d.vue.ts +5 -0
  297. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.theme.d.ts +5 -0
  298. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.theme.js +4 -0
  299. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.vue +17 -0
  300. package/dist/runtime/app/components/Table/internal/CellNumber/CellNumber.vue.d.ts +5 -0
  301. package/dist/runtime/app/components/Table/internal/CellText/CellText.d.vue.ts +5 -0
  302. package/dist/runtime/app/components/Table/internal/CellText/CellText.theme.d.ts +13 -0
  303. package/dist/runtime/app/components/Table/internal/CellText/CellText.theme.js +11 -0
  304. package/dist/runtime/app/components/Table/internal/CellText/CellText.vue +16 -0
  305. package/dist/runtime/app/components/Table/internal/CellText/CellText.vue.d.ts +5 -0
  306. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.d.vue.ts +22 -0
  307. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.vue +48 -0
  308. package/dist/runtime/app/components/Table/internal/TableCell/TableCell.vue.d.ts +22 -0
  309. package/dist/runtime/app/components/Table/internal/column.d.ts +9 -0
  310. package/dist/runtime/app/components/Table/internal/column.js +5 -0
  311. package/dist/runtime/app/components/Table/internal/query.d.ts +18 -0
  312. package/dist/runtime/app/components/Table/internal/query.js +8 -0
  313. package/dist/runtime/app/components/Table/internal/selection.d.ts +29 -0
  314. package/dist/runtime/app/components/Table/internal/selection.js +10 -0
  315. package/dist/runtime/app/components/Table/internal/useVunoTable.d.ts +93 -0
  316. package/dist/runtime/app/components/Table/internal/useVunoTable.js +153 -0
  317. package/dist/runtime/app/components/Table/internal/useVunoTableSelection.d.ts +21 -0
  318. package/dist/runtime/app/components/Table/internal/useVunoTableSelection.js +29 -0
  319. package/dist/runtime/app/components/Tabs/Tabs.d.vue.ts +49 -0
  320. package/dist/runtime/app/components/Tabs/Tabs.theme.d.ts +32 -0
  321. package/dist/runtime/app/components/Tabs/Tabs.theme.js +23 -0
  322. package/dist/runtime/app/components/Tabs/Tabs.vue +119 -0
  323. package/dist/runtime/app/components/Tabs/Tabs.vue.d.ts +49 -0
  324. package/dist/runtime/app/components/Tooltip/Tooltip.d.vue.ts +40 -0
  325. package/dist/runtime/app/components/Tooltip/Tooltip.theme.d.ts +12 -0
  326. package/dist/runtime/app/components/Tooltip/Tooltip.theme.js +13 -0
  327. package/dist/runtime/app/components/Tooltip/Tooltip.vue +139 -0
  328. package/dist/runtime/app/components/Tooltip/Tooltip.vue.d.ts +40 -0
  329. package/dist/runtime/app/components/internal/ControlShell/ControlShell.d.vue.ts +41 -0
  330. package/dist/runtime/app/components/internal/ControlShell/ControlShell.theme.d.ts +50 -0
  331. package/dist/runtime/app/components/internal/ControlShell/ControlShell.theme.js +38 -0
  332. package/dist/runtime/app/components/internal/ControlShell/ControlShell.vue +33 -0
  333. package/dist/runtime/app/components/internal/ControlShell/ControlShell.vue.d.ts +41 -0
  334. package/dist/runtime/app/components/internal/FieldShell/FieldShell.d.vue.ts +23 -0
  335. package/dist/runtime/app/components/internal/FieldShell/FieldShell.vue +63 -0
  336. package/dist/runtime/app/components/internal/FieldShell/FieldShell.vue.d.ts +23 -0
  337. package/dist/runtime/app/components/internal/Input/Input.d.vue.ts +52 -0
  338. package/dist/runtime/app/components/internal/Input/Input.theme.d.ts +30 -0
  339. package/dist/runtime/app/components/internal/Input/Input.theme.js +21 -0
  340. package/dist/runtime/app/components/internal/Input/Input.vue +66 -0
  341. package/dist/runtime/app/components/internal/Input/Input.vue.d.ts +52 -0
  342. package/dist/runtime/app/components/internal/NumberInput/NumberInput.d.vue.ts +36 -0
  343. package/dist/runtime/app/components/internal/NumberInput/NumberInput.theme.d.ts +31 -0
  344. package/dist/runtime/app/components/internal/NumberInput/NumberInput.theme.js +26 -0
  345. package/dist/runtime/app/components/internal/NumberInput/NumberInput.vue +221 -0
  346. package/dist/runtime/app/components/internal/NumberInput/NumberInput.vue.d.ts +36 -0
  347. package/dist/runtime/app/components/internal/NumberInput/number.d.ts +42 -0
  348. package/dist/runtime/app/components/internal/NumberInput/number.js +64 -0
  349. package/dist/runtime/app/composables/defineShortcuts.d.ts +19 -0
  350. package/dist/runtime/app/composables/defineShortcuts.js +68 -0
  351. package/dist/runtime/app/composables/internal/useVunoAnchor.d.ts +45 -0
  352. package/dist/runtime/app/composables/internal/useVunoAnchor.js +35 -0
  353. package/dist/runtime/app/composables/internal/useVunoControlGroup.d.ts +17 -0
  354. package/dist/runtime/app/composables/internal/useVunoControlGroup.js +18 -0
  355. package/dist/runtime/app/composables/internal/useVunoPortal.d.ts +18 -0
  356. package/dist/runtime/app/composables/internal/useVunoPortal.js +12 -0
  357. package/dist/runtime/app/composables/useConfirm.d.ts +15 -0
  358. package/dist/runtime/app/composables/useConfirm.js +5 -0
  359. package/dist/runtime/app/composables/useContext.d.ts +11 -0
  360. package/dist/runtime/app/composables/useContext.js +9 -0
  361. package/dist/runtime/app/composables/useCrud.d.ts +23 -0
  362. package/dist/runtime/app/composables/useCrud.js +153 -0
  363. package/dist/runtime/app/composables/useField.d.ts +10 -0
  364. package/dist/runtime/app/composables/useField.js +42 -0
  365. package/dist/runtime/app/composables/useForm.d.ts +5 -0
  366. package/dist/runtime/app/composables/useForm.js +9 -0
  367. package/dist/runtime/app/composables/useModal.d.ts +21 -0
  368. package/dist/runtime/app/composables/useModal.js +24 -0
  369. package/dist/runtime/app/composables/useOverlay.d.ts +22 -0
  370. package/dist/runtime/app/composables/useOverlay.js +10 -0
  371. package/dist/runtime/app/composables/useTableQuery.d.ts +10 -0
  372. package/dist/runtime/app/composables/useTableQuery.js +126 -0
  373. package/dist/runtime/app/composables/useTheme.d.ts +31 -0
  374. package/dist/runtime/app/composables/useTheme.js +29 -0
  375. package/dist/runtime/app/composables/useToast.d.ts +28 -0
  376. package/dist/runtime/app/composables/useToast.js +13 -0
  377. package/dist/runtime/app/internal/keys.d.ts +43 -0
  378. package/dist/runtime/app/internal/keys.js +8 -0
  379. package/dist/runtime/app/internal/slots.d.ts +22 -0
  380. package/dist/runtime/app/internal/slots.js +24 -0
  381. package/dist/runtime/app/plugins/vue-query.d.ts +8 -0
  382. package/dist/runtime/app/plugins/vue-query.js +13 -0
  383. package/dist/runtime/app/theme/icons.d.ts +2 -0
  384. package/dist/runtime/app/theme/icons.js +43 -0
  385. package/dist/runtime/app/theme/index.d.ts +1168 -0
  386. package/dist/runtime/app/theme/index.js +120 -0
  387. package/dist/runtime/app/theme/messages.d.ts +2 -0
  388. package/dist/runtime/app/theme/messages.js +70 -0
  389. package/dist/runtime/app/theme/shared.d.ts +42 -0
  390. package/dist/runtime/app/theme/shared.js +24 -0
  391. package/dist/runtime/app/types/alert.d.ts +13 -0
  392. package/dist/runtime/app/types/alert.js +0 -0
  393. package/dist/runtime/app/types/app-config.d.ts +8 -0
  394. package/dist/runtime/app/types/app-config.js +1 -0
  395. package/dist/runtime/app/types/app.d.ts +83 -0
  396. package/dist/runtime/app/types/app.js +0 -0
  397. package/dist/runtime/app/types/base.d.ts +78 -0
  398. package/dist/runtime/app/types/base.js +0 -0
  399. package/dist/runtime/app/types/confirm.d.ts +19 -0
  400. package/dist/runtime/app/types/confirm.js +0 -0
  401. package/dist/runtime/app/types/crud.d.ts +108 -0
  402. package/dist/runtime/app/types/crud.js +0 -0
  403. package/dist/runtime/app/types/field-type.d.ts +4 -0
  404. package/dist/runtime/app/types/field-type.js +0 -0
  405. package/dist/runtime/app/types/field.d.ts +233 -0
  406. package/dist/runtime/app/types/field.js +0 -0
  407. package/dist/runtime/app/types/form.d.ts +67 -0
  408. package/dist/runtime/app/types/form.js +0 -0
  409. package/dist/runtime/app/types/index.d.ts +16 -0
  410. package/dist/runtime/app/types/index.js +1 -0
  411. package/dist/runtime/app/types/page.d.ts +61 -0
  412. package/dist/runtime/app/types/page.js +0 -0
  413. package/dist/runtime/app/types/responsive.d.ts +8 -0
  414. package/dist/runtime/app/types/responsive.js +0 -0
  415. package/dist/runtime/app/types/shortcuts.d.ts +44 -0
  416. package/dist/runtime/app/types/shortcuts.js +0 -0
  417. package/dist/runtime/app/types/slots.d.ts +30 -0
  418. package/dist/runtime/app/types/slots.js +0 -0
  419. package/dist/runtime/app/types/state.d.ts +35 -0
  420. package/dist/runtime/app/types/state.js +0 -0
  421. package/dist/runtime/app/types/table.d.ts +287 -0
  422. package/dist/runtime/app/types/table.js +0 -0
  423. package/dist/runtime/app/types/theme.d.ts +251 -0
  424. package/dist/runtime/app/types/theme.js +0 -0
  425. package/dist/runtime/app/utils/format.d.ts +18 -0
  426. package/dist/runtime/app/utils/format.js +36 -0
  427. package/dist/runtime/app/utils/pagination.d.ts +41 -0
  428. package/dist/runtime/app/utils/pagination.js +32 -0
  429. package/dist/runtime/app/utils/path.d.ts +16 -0
  430. package/dist/runtime/app/utils/path.js +76 -0
  431. package/dist/runtime/app/utils/query-key.d.ts +20 -0
  432. package/dist/runtime/app/utils/query-key.js +7 -0
  433. package/dist/runtime/app/utils/theme.d.ts +44 -0
  434. package/dist/runtime/app/utils/theme.js +43 -0
  435. package/dist/types.d.mts +3 -11
  436. package/package.json +18 -3
  437. package/dist/module.d.cts +0 -2
@@ -0,0 +1,95 @@
1
+ <script setup>
2
+ import { computed, useId, useTemplateRef } from "vue";
3
+ import { useMessages, useTheme } from "#vuno/composables/useTheme";
4
+ import Button from "#vuno/components/Button/Button.vue";
5
+ import Form from "#vuno/components/Form/Form.vue";
6
+ import Modal from "#vuno/components/Modal/Modal.vue";
7
+ defineOptions({ name: "VunoFormModal" });
8
+ const open = defineModel("open", { type: Boolean, ...{ default: false } });
9
+ const state = defineModel("state", { type: null, ...{ required: true } });
10
+ const props = defineProps({
11
+ closeOnSubmit: { type: Boolean, required: false, default: false },
12
+ definition: { type: Object, required: true },
13
+ description: { type: String, required: false, default: void 0 },
14
+ formUi: { type: Object, required: false, default: void 0 },
15
+ loading: { type: Boolean, required: false, default: false },
16
+ schema: { type: null, required: false, default: void 0 },
17
+ size: { type: String, required: false, default: "3xl" },
18
+ title: { type: String, required: false, default: void 0 },
19
+ ui: { type: Object, required: false, default: void 0 }
20
+ });
21
+ const emit = defineEmits(["close", "submit"]);
22
+ defineSlots();
23
+ const messages = useMessages();
24
+ const ui = useTheme("formModal", () => props.ui);
25
+ const modalUi = computed(() => ({ body: ui.value.body, content: ui.value.content, footer: ui.value.footer, root: ui.value.root }));
26
+ const formId = useId();
27
+ const form = useTemplateRef("form");
28
+ function close() {
29
+ if (props.loading) return;
30
+ open.value = false;
31
+ emit("close");
32
+ }
33
+ function onSubmit(validated) {
34
+ emit("submit", validated);
35
+ if (props.closeOnSubmit) open.value = false;
36
+ }
37
+ </script>
38
+
39
+ <template>
40
+ <!--
41
+ Sobre `Modal`: un `<dialog>` nativo, no el de Nuxt UI. El navegador lo
42
+ pone en su capa superior, que atrapa el foco, lo devuelve al cerrar y
43
+ apila los diálogos por orden de apertura.
44
+
45
+ Importa que sean todos del mismo sistema: la capa superior queda por
46
+ encima de cualquier z-index, así que un formulario posicionado con
47
+ z-index abierto sobre un diálogo nativo se pintaría detrás de él, en el
48
+ DOM y sin verse.
49
+ -->
50
+ <Modal
51
+ v-model:open="open"
52
+ :description="props.description"
53
+ :dismissible="!props.loading"
54
+ :size="props.size"
55
+ :title="props.title"
56
+ :ui="modalUi"
57
+ >
58
+ <slot name="trigger" />
59
+
60
+ <Form
61
+ :id="formId"
62
+ ref="form"
63
+ v-model:state="state"
64
+ :definition="props.definition"
65
+ :schema="props.schema"
66
+ :ui="props.formUi"
67
+ @submit="onSubmit"
68
+ />
69
+
70
+ <template #footer>
71
+ <slot
72
+ :close="close"
73
+ :dirty="form?.dirty ?? false"
74
+ :formId="formId"
75
+ :loading="props.loading ?? false"
76
+ name="footer"
77
+ :reset="() => form?.reset?.()"
78
+ >
79
+ <Button
80
+ color="neutral"
81
+ :disabled="props.loading"
82
+ :label="messages.cancel"
83
+ variant="ghost"
84
+ @click="close"
85
+ />
86
+ <Button
87
+ :form="formId"
88
+ :label="messages.save"
89
+ :loading="props.loading"
90
+ type="submit"
91
+ />
92
+ </slot>
93
+ </template>
94
+ </Modal>
95
+ </template>
@@ -0,0 +1,63 @@
1
+ import type { VunoModalSize } from '#vuno/types/base';
2
+ import type { VunoFormDefinition, VunoFormState, VunoSchema } from '#vuno/types/form';
3
+ import type { VunoUi } from '#vuno/types/slots';
4
+ declare const __VLS_export: <TState extends VunoFormState>(__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
+ /**
7
+ * Cierra el modal nada más enviar. Déjalo apagado si guardas contra una
8
+ * API: querrás cerrar tú al confirmar, y mientras tanto usar `loading`.
9
+ */
10
+ closeOnSubmit?: boolean;
11
+ definition: VunoFormDefinition;
12
+ description?: string;
13
+ /** Slots del formulario que va dentro. */
14
+ formUi?: VunoUi<"form">;
15
+ /** Marca el botón de guardar como ocupado y bloquea el cierre. */
16
+ loading?: boolean;
17
+ /** Opcional, igual que en `VForm`: cualquier esquema Standard Schema. */
18
+ schema?: VunoSchema;
19
+ /** Ancho del diálogo; el formulario usa `3xl` de forma predeterminada. */
20
+ size?: VunoModalSize;
21
+ title?: string;
22
+ /** Slots del modal (`content`, `body`, ...). */
23
+ ui?: VunoUi<"formModal">;
24
+ } & {
25
+ open?: boolean;
26
+ state: TState;
27
+ }) & {
28
+ onClose?: (() => any) | undefined;
29
+ onSubmit?: ((state: TState) => any) | undefined;
30
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
31
+ "onUpdate:state"?: ((value: TState) => any) | undefined;
32
+ }> & (typeof globalThis extends {
33
+ __VLS_PROPS_FALLBACK: infer P;
34
+ } ? P : {});
35
+ expose: (exposed: {}) => void;
36
+ attrs: any;
37
+ slots: {
38
+ /**
39
+ * `formId` es imprescindible, no un extra: el pie del modal vive fuera
40
+ * del `<form>`, así que un botón propio solo puede enviarlo con
41
+ * `:form="formId"`. Sin exponerlo, cualquier pie a medida queda mudo.
42
+ */
43
+ footer?: (props: {
44
+ dirty: boolean;
45
+ formId: string;
46
+ loading: boolean;
47
+ close: () => void;
48
+ reset: () => void;
49
+ }) => unknown;
50
+ /** Elemento que abre el modal, si prefieres eso a controlar `open`. */
51
+ trigger?: () => unknown;
52
+ };
53
+ emit: (((evt: "close") => void) & ((evt: "submit", state: TState) => void)) & (((event: "update:open", value: boolean) => void) & ((event: "update:state", value: TState) => void));
54
+ }>) => import("vue").VNode & {
55
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
56
+ };
57
+ declare const _default: typeof __VLS_export;
58
+ export default _default;
59
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
60
+ [K in keyof T]: T[K];
61
+ } : {
62
+ [K in keyof T as K]: T[K];
63
+ }) & {};
@@ -0,0 +1,15 @@
1
+ import type { VunoRadius } from '#vuno/types/base';
2
+ import type { VunoFormSection } from '#vuno/types/form';
3
+ type Props = {
4
+ /**
5
+ * Sin marco ni título: es lo que se usa dentro de una pestaña, donde
6
+ * el rótulo ya lo pone la propia pestaña.
7
+ */
8
+ plain?: boolean;
9
+ /** La curvatura. Sin valor, la que traiga el tema. */
10
+ radius?: VunoRadius;
11
+ section: VunoFormSection;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
@@ -0,0 +1,12 @@
1
+ export declare const formSectionTheme: Record<"formSection", {
2
+ readonly slots: {
3
+ readonly description: "mt-1 text-vuno-muted";
4
+ readonly header: "col-span-12 flex min-w-0 flex-col";
5
+ readonly plain: "grid w-full grid-cols-12 gap-x-4 gap-y-5";
6
+ readonly root: "grid w-full grid-cols-12 gap-x-4 gap-y-5 rounded-sm border border-vuno-border p-4";
7
+ readonly title: "font-semibold text-vuno-strong";
8
+ };
9
+ readonly variants: {
10
+ readonly radius: Record<import("../../types/base.js").VunoRadius, Record<"root", string>>;
11
+ };
12
+ }>;
@@ -0,0 +1,14 @@
1
+ import { radiusByStep } from "#vuno/theme/shared";
2
+ import { defineTheme } from "#vuno/utils/theme";
3
+ export const formSectionTheme = defineTheme("formSection", {
4
+ slots: {
5
+ description: "mt-1 text-vuno-muted",
6
+ header: "col-span-12 flex min-w-0 flex-col",
7
+ plain: "grid w-full grid-cols-12 gap-x-4 gap-y-5",
8
+ root: "grid w-full grid-cols-12 gap-x-4 gap-y-5 rounded-sm border border-vuno-border p-4",
9
+ title: "font-semibold text-vuno-strong"
10
+ },
11
+ variants: {
12
+ radius: radiusByStep("root")
13
+ }
14
+ });
@@ -0,0 +1,45 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { useTheme } from "#vuno/composables/useTheme";
4
+ import FormFieldRenderer from "#vuno/components/Form/internal/FormFieldRenderer/FormFieldRenderer.vue";
5
+ import { getColumnSpanClass } from "#vuno/components/Form/internal/grid";
6
+ defineOptions({ name: "VunoFormSection" });
7
+ const props = defineProps({
8
+ plain: { type: Boolean, required: false },
9
+ radius: { type: String, required: false },
10
+ section: { type: Object, required: true }
11
+ });
12
+ const ui = useTheme("formSection", void 0, () => ({ radius: props.radius }));
13
+ const root = computed(() => props.plain ? ui.value.plain : ui.value.root);
14
+ const showHeader = computed(() => props.plain ? Boolean(props.section.description) : Boolean(props.section.title || props.section.description));
15
+ </script>
16
+
17
+ <template>
18
+ <div :class="root">
19
+ <div
20
+ v-if="showHeader"
21
+ :class="ui.header"
22
+ >
23
+ <p
24
+ v-if="props.section.title && !props.plain"
25
+ :class="ui.title"
26
+ >
27
+ {{ props.section.title }}
28
+ </p>
29
+ <p
30
+ v-if="props.section.description"
31
+ :class="ui.description"
32
+ >
33
+ {{ props.section.description }}
34
+ </p>
35
+ </div>
36
+
37
+ <div
38
+ v-for="(field, index) in props.section.fields"
39
+ :key="`${field.name}-${index}`"
40
+ :class="getColumnSpanClass(field.columns)"
41
+ >
42
+ <FormFieldRenderer :field="field" />
43
+ </div>
44
+ </div>
45
+ </template>
@@ -0,0 +1,15 @@
1
+ import type { VunoRadius } from '#vuno/types/base';
2
+ import type { VunoFormSection } from '#vuno/types/form';
3
+ type Props = {
4
+ /**
5
+ * Sin marco ni título: es lo que se usa dentro de una pestaña, donde
6
+ * el rótulo ya lo pone la propia pestaña.
7
+ */
8
+ plain?: boolean;
9
+ /** La curvatura. Sin valor, la que traiga el tema. */
10
+ radius?: VunoRadius;
11
+ section: VunoFormSection;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
@@ -0,0 +1,6 @@
1
+ type Props = {
2
+ name: string;
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
@@ -0,0 +1,32 @@
1
+ <script setup>
2
+ import { resolveDynamicComponent } from "vue";
3
+ defineOptions({
4
+ /**
5
+ * El nombre sigue siendo explícito: identifica el wrapper en Vue y en
6
+ * las herramientas aunque el nombre público dependa del prefijo.
7
+ */
8
+ name: "VunoIcon"
9
+ });
10
+ const props = defineProps({
11
+ name: { type: String, required: true }
12
+ });
13
+ const renderer = resolveDynamicComponent("VunoIconRenderer");
14
+ const iconComponent = typeof renderer === "string" ? resolveDynamicComponent("Icon") : renderer;
15
+ const unavailable = typeof iconComponent === "string";
16
+ const is = unavailable ? "span" : iconComponent;
17
+ </script>
18
+
19
+ <template>
20
+ <!--
21
+ Decorativo por defecto: un nombre Iconify describe el dibujo, no la
22
+ información que comunica. Quien lo use solo tiene que aportar esa
23
+ información como texto accesible; si necesita semántica en el propio
24
+ icono, los atributos de la instancia ganan al llegar aquí.
25
+ -->
26
+ <component
27
+ :is="is"
28
+ aria-hidden="true"
29
+ :class="{ 'inline-block': unavailable }"
30
+ :name="unavailable ? void 0 : props.name"
31
+ />
32
+ </template>
@@ -0,0 +1,6 @@
1
+ type Props = {
2
+ name: string;
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
@@ -0,0 +1,36 @@
1
+ import type { VunoColor, VunoPlacement, VunoPortalTarget } from '#vuno/types/base';
2
+ /** Una entrada del menú. Es la forma que ya tienen las acciones de fila. */
3
+ type VunoMenuItem = {
4
+ onSelect: () => void;
5
+ color?: VunoColor;
6
+ disabled?: boolean;
7
+ icon?: string;
8
+ label: string;
9
+ /** Dibuja una línea encima, para separar lo destructivo del resto. */
10
+ separator?: boolean;
11
+ };
12
+ type Props = {
13
+ items: VunoMenuItem[];
14
+ /** Ubicación preferida; cambia automáticamente si no cabe. */
15
+ placement?: VunoPlacement;
16
+ /** Dónde montar el menú. Por defecto, lo que provea el modal que envuelva. */
17
+ portal?: VunoPortalTarget;
18
+ };
19
+ type __VLS_Slots = {
20
+ /** El disparador. Recibe el estado abierto por si quiere pintarlo. */
21
+ default?: (props: {
22
+ open: boolean;
23
+ }) => unknown;
24
+ };
25
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
26
+ placement: VunoPlacement;
27
+ portal: VunoPortalTarget;
28
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
32
+ type __VLS_WithSlots<T, S> = T & {
33
+ new (): {
34
+ $slots: S;
35
+ };
36
+ };
@@ -0,0 +1,17 @@
1
+ export declare const menuTheme: Record<"menu", {
2
+ /**
3
+ * El color del texto pasa por la variable de acento aunque por defecto sea
4
+ * el del cuerpo. Escrito como `text-vuno-body`, la variante de color
5
+ * asignaba `--vuno-accent` y **nadie la consumía**: una acción destructiva
6
+ * se veía igual que las demás, sin que nada fallara.
7
+ */
8
+ readonly slots: {
9
+ readonly content: "z-50 min-w-40 rounded-sm border border-vuno-border bg-vuno-surface-1 p-1 shadow-lg";
10
+ readonly icon: "size-4 shrink-0";
11
+ readonly item: "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-(--vuno-accent) outline-none [--vuno-accent:var(--color-vuno-body)] data-disabled:cursor-not-allowed data-disabled:opacity-50 data-highlighted:bg-(--vuno-accent)/10";
12
+ readonly separator: "-mx-1 my-1 h-px bg-vuno-border";
13
+ };
14
+ readonly variants: {
15
+ readonly color: Record<import("../../types/base.js").VunoColor, Record<"item", string>>;
16
+ };
17
+ }>;
@@ -0,0 +1,20 @@
1
+ import { accentByColor } from "#vuno/theme/shared";
2
+ import { defineTheme } from "#vuno/utils/theme";
3
+ export const menuTheme = defineTheme("menu", {
4
+ /**
5
+ * El color del texto pasa por la variable de acento aunque por defecto sea
6
+ * el del cuerpo. Escrito como `text-vuno-body`, la variante de color
7
+ * asignaba `--vuno-accent` y **nadie la consumía**: una acción destructiva
8
+ * se veía igual que las demás, sin que nada fallara.
9
+ */
10
+ slots: {
11
+ content: "z-50 min-w-40 rounded-sm border border-vuno-border bg-vuno-surface-1 p-1 shadow-lg",
12
+ /* El tamaño del icono es del tema, como en las pestañas y el botón. */
13
+ icon: "size-4 shrink-0",
14
+ item: "flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-(--vuno-accent) outline-none [--vuno-accent:var(--color-vuno-body)] data-disabled:cursor-not-allowed data-disabled:opacity-50 data-highlighted:bg-(--vuno-accent)/10",
15
+ separator: "-mx-1 my-1 h-px bg-vuno-border"
16
+ },
17
+ variants: {
18
+ color: accentByColor("item")
19
+ }
20
+ });
@@ -0,0 +1,182 @@
1
+ <script setup>
2
+ import { cloneVNode, computed, nextTick, onBeforeUnmount, ref, useId } from "vue";
3
+ import { useVunoAnchor } from "#vuno/composables/internal/useVunoAnchor";
4
+ import { useVunoPortal } from "#vuno/composables/internal/useVunoPortal";
5
+ import { useTheme } from "#vuno/composables/useTheme";
6
+ import { firstElement } from "#vuno/internal/slots";
7
+ import Icon from "#vuno/components/Icon/Icon.vue";
8
+ defineOptions({ name: "VunoMenu" });
9
+ const props = defineProps({
10
+ items: { type: Array, required: true },
11
+ placement: { type: String, required: false, default: "bottom-end" },
12
+ portal: { type: [String, Boolean], required: false, default: void 0 }
13
+ });
14
+ const slots = defineSlots();
15
+ const portalTarget = useVunoPortal(() => props.portal);
16
+ const ui = useTheme("menu");
17
+ const colors = ["error", "info", "neutral", "primary", "secondary", "success", "warning"];
18
+ const themeByColor = colors.map((color) => [color, useTheme("menu", void 0, () => ({ color }))]);
19
+ const itemByColor = computed(() => Object.fromEntries(themeByColor.map(([color, theme]) => [color, theme.value.item])));
20
+ const menuId = useId();
21
+ const active = ref(-1);
22
+ const contentEl = ref(null);
23
+ const itemEls = ref([]);
24
+ const open = ref(false);
25
+ const triggerEl = ref(null);
26
+ const enabled = computed(
27
+ () => props.items.map((item, index) => ({ index, usable: !item.disabled })).filter((entry) => entry.usable).map((entry) => entry.index)
28
+ );
29
+ const captureItem = (index, el) => {
30
+ itemEls.value[index] = el ?? null;
31
+ };
32
+ const { anchor, release } = useVunoAnchor({ placement: () => props.placement });
33
+ const follow = () => anchor(triggerEl.value ?? void 0, contentEl.value ?? void 0);
34
+ const unfollow = () => release();
35
+ async function focusItem(index) {
36
+ active.value = index;
37
+ await nextTick();
38
+ itemEls.value[index]?.focus();
39
+ }
40
+ async function show(from) {
41
+ open.value = true;
42
+ await nextTick();
43
+ follow();
44
+ if (from === "none") return contentEl.value?.focus();
45
+ const order = from === "first" ? enabled.value : [...enabled.value].reverse();
46
+ if (order.length > 0) await focusItem(order[0]);
47
+ }
48
+ function hide(returnFocus = true) {
49
+ if (!open.value) return;
50
+ open.value = false;
51
+ active.value = -1;
52
+ unfollow();
53
+ if (returnFocus) triggerEl.value?.focus();
54
+ }
55
+ function choose(item) {
56
+ if (item.disabled) return;
57
+ item.onSelect();
58
+ hide();
59
+ }
60
+ function step(delta) {
61
+ const order = enabled.value;
62
+ if (order.length === 0) return;
63
+ const current = order.indexOf(active.value);
64
+ const entry = delta > 0 ? 0 : order.length - 1;
65
+ const next = current === -1 ? entry : (current + delta + order.length) % order.length;
66
+ void focusItem(order[next]);
67
+ }
68
+ function onTriggerKeydown(event) {
69
+ if (event.key === "ArrowDown" || event.key === "Enter" || event.key === " ") {
70
+ event.preventDefault();
71
+ return void show("first");
72
+ }
73
+ if (event.key === "ArrowUp") {
74
+ event.preventDefault();
75
+ return void show("last");
76
+ }
77
+ }
78
+ function onContentKeydown(event) {
79
+ const keys = {
80
+ ArrowDown: () => step(1),
81
+ ArrowUp: () => step(-1),
82
+ End: () => void focusItem(enabled.value.at(-1) ?? -1),
83
+ Escape: () => hide(),
84
+ Home: () => void focusItem(enabled.value[0] ?? -1),
85
+ /* Tabular fuera cierra: dejarlo abierto deja un menú huérfano. */
86
+ Tab: () => hide(false)
87
+ };
88
+ const run = keys[event.key];
89
+ if (!run) return;
90
+ if (event.key !== "Tab") event.preventDefault();
91
+ run();
92
+ }
93
+ function onPointerDown(event) {
94
+ const target = event.target;
95
+ if (!target || contentEl.value?.contains(target) || triggerEl.value?.contains(target)) return;
96
+ hide(false);
97
+ }
98
+ if (typeof document !== "undefined") {
99
+ document.addEventListener("pointerdown", onPointerDown, true);
100
+ onBeforeUnmount(() => document.removeEventListener("pointerdown", onPointerDown, true));
101
+ }
102
+ const Trigger = () => {
103
+ const node = firstElement(slots.default?.({ open: open.value }));
104
+ if (!node) return null;
105
+ return cloneVNode(node, {
106
+ /*
107
+ * El `stop` es de la tabla pero se queda aquí: sin él, abrir el
108
+ * menú dispara también el clic de la fila y se acaban abriendo dos
109
+ * cosas a la vez.
110
+ */
111
+ onClick: (event) => {
112
+ event.stopPropagation();
113
+ if (open.value) hide();
114
+ else void show("none");
115
+ },
116
+ onKeydown: onTriggerKeydown,
117
+ "aria-controls": open.value ? menuId : void 0,
118
+ "aria-expanded": open.value ? "true" : "false",
119
+ "aria-haspopup": "menu",
120
+ ref: (el) => {
121
+ triggerEl.value = el?.$el ?? el;
122
+ }
123
+ });
124
+ };
125
+ onBeforeUnmount(unfollow);
126
+ </script>
127
+
128
+ <template>
129
+ <Trigger />
130
+
131
+ <Teleport
132
+ v-if="open"
133
+ :to="portalTarget"
134
+ >
135
+ <div
136
+ :id="menuId"
137
+ ref="contentEl"
138
+ :class="ui.content"
139
+ role="menu"
140
+ style="position: fixed; top: 0; left: 0"
141
+ tabindex="-1"
142
+ @keydown="onContentKeydown"
143
+ >
144
+ <template
145
+ v-for="(item, index) in props.items"
146
+ :key="`${item.label}-${index}`"
147
+ >
148
+ <!--
149
+ `<hr>` y no un `<div role="separator">`: el elemento ya
150
+ significa eso, así que la línea existe aunque el CSS no
151
+ cargue y no depende de que el papel esté bien escrito.
152
+ -->
153
+ <hr
154
+ v-if="item.separator && index > 0"
155
+ :class="ui.separator"
156
+ />
157
+
158
+ <div
159
+ :ref="(el) => captureItem(index, el)"
160
+ :aria-disabled="item.disabled ? 'true' : void 0"
161
+ :class="item.color ? itemByColor[item.color] : ui.item"
162
+ :data-disabled="item.disabled ? '' : void 0"
163
+ :data-highlighted="active === index ? '' : void 0"
164
+ role="menuitem"
165
+ :tabindex="active === index ? 0 : -1"
166
+ @click="choose(item)"
167
+ @keydown.enter.prevent="choose(item)"
168
+ @keydown.space.prevent="choose(item)"
169
+ @pointermove="!item.disabled && (active = index)"
170
+ >
171
+ <Icon
172
+ v-if="item.icon"
173
+ :class="ui.icon"
174
+ :name="item.icon"
175
+ />
176
+
177
+ <span class="truncate">{{ item.label }}</span>
178
+ </div>
179
+ </template>
180
+ </div>
181
+ </Teleport>
182
+ </template>
@@ -0,0 +1,36 @@
1
+ import type { VunoColor, VunoPlacement, VunoPortalTarget } from '#vuno/types/base';
2
+ /** Una entrada del menú. Es la forma que ya tienen las acciones de fila. */
3
+ type VunoMenuItem = {
4
+ onSelect: () => void;
5
+ color?: VunoColor;
6
+ disabled?: boolean;
7
+ icon?: string;
8
+ label: string;
9
+ /** Dibuja una línea encima, para separar lo destructivo del resto. */
10
+ separator?: boolean;
11
+ };
12
+ type Props = {
13
+ items: VunoMenuItem[];
14
+ /** Ubicación preferida; cambia automáticamente si no cabe. */
15
+ placement?: VunoPlacement;
16
+ /** Dónde montar el menú. Por defecto, lo que provea el modal que envuelva. */
17
+ portal?: VunoPortalTarget;
18
+ };
19
+ type __VLS_Slots = {
20
+ /** El disparador. Recibe el estado abierto por si quiere pintarlo. */
21
+ default?: (props: {
22
+ open: boolean;
23
+ }) => unknown;
24
+ };
25
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
26
+ placement: VunoPlacement;
27
+ portal: VunoPortalTarget;
28
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
32
+ type __VLS_WithSlots<T, S> = T & {
33
+ new (): {
34
+ $slots: S;
35
+ };
36
+ };
@@ -0,0 +1,43 @@
1
+ import type { VunoModalSize, VunoRadius } from '#vuno/types/base';
2
+ import type { VunoUi } from '#vuno/types/slots';
3
+ type Props = {
4
+ description?: string;
5
+ /** Cerrar con Escape o pulsando el fondo. */
6
+ dismissible?: boolean;
7
+ /** La curvatura. Sin valor, la que traiga el tema. */
8
+ radius?: VunoRadius;
9
+ /** Ancho máximo; `full` ocupa todo el viewport. */
10
+ size?: VunoModalSize;
11
+ title?: string;
12
+ ui?: VunoUi<'modal'>;
13
+ };
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
16
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Props & {
17
+ open?: boolean;
18
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
+ close: () => any;
20
+ "update:open": (value: boolean) => any;
21
+ }, string, import("vue").PublicProps, Readonly<Props & {
22
+ open?: boolean;
23
+ }> & Readonly<{
24
+ onClose?: (() => any) | undefined;
25
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
26
+ }>, {
27
+ description: string;
28
+ title: string;
29
+ radius: VunoRadius;
30
+ size: VunoModalSize;
31
+ ui: VunoUi<"modal">;
32
+ dismissible: boolean;
33
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
34
+ body?: () => unknown;
35
+ default?: () => unknown;
36
+ footer?: () => unknown;
37
+ header?: () => unknown;
38
+ }>;
39
+ type __VLS_WithSlots<T, S> = T & {
40
+ new (): {
41
+ $slots: S;
42
+ };
43
+ };