@mage-ui/components 1.0.17 → 1.0.19

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 (267) hide show
  1. package/dist/components/buttons/button/Button.d.mts +2 -2
  2. package/dist/components/buttons/button-action/ButtonAction.d.mts +5 -4
  3. package/dist/components/buttons/button-action/ButtonAction.d.mts.map +1 -1
  4. package/dist/components/buttons/button-action/ButtonAction.mjs +1 -1
  5. package/dist/components/buttons/button-action/ButtonAction.mjs.map +1 -1
  6. package/dist/components/buttons/button-action/ButtonActionContext.mjs +2 -0
  7. package/dist/components/buttons/button-action/ButtonActionContext.mjs.map +1 -0
  8. package/dist/components/buttons/button-action/ButtonLoader.d.mts +11 -0
  9. package/dist/components/buttons/button-action/ButtonLoader.d.mts.map +1 -0
  10. package/dist/components/buttons/button-action/ButtonLoader.mjs +2 -0
  11. package/dist/components/buttons/button-action/ButtonLoader.mjs.map +1 -0
  12. package/dist/components/buttons/button-icon/ButtonIcon.d.mts +2 -2
  13. package/dist/components/buttons/button-icon/ButtonIcon.mjs.map +1 -1
  14. package/dist/components/buttons/button-icon-visual/ButtonIconVisual.d.mts +2 -2
  15. package/dist/components/buttons/button-visual/ButtonVisual.d.mts +2 -2
  16. package/dist/components/buttons/index.d.mts +1 -0
  17. package/dist/components/controls/autocomplete/Autocomplete.d.mts +2 -2
  18. package/dist/components/controls/autocomplete/Autocomplete.d.mts.map +1 -1
  19. package/dist/components/controls/autocomplete/Autocomplete.mjs +1 -1
  20. package/dist/components/controls/autocomplete/Autocomplete.mjs.map +1 -1
  21. package/dist/components/controls/checkbox/Checkbox.d.mts +2 -14
  22. package/dist/components/controls/checkbox/Checkbox.d.mts.map +1 -1
  23. package/dist/components/controls/checkbox/Checkbox.mjs +1 -1
  24. package/dist/components/controls/checkbox/Checkbox.mjs.map +1 -1
  25. package/dist/components/controls/checkbox-group/CheckboxGroup.mjs.map +1 -1
  26. package/dist/components/controls/combobox/Combobox.d.mts +2 -2
  27. package/dist/components/controls/combobox/Combobox.d.mts.map +1 -1
  28. package/dist/components/controls/combobox/Combobox.mjs.map +1 -1
  29. package/dist/components/controls/date-picker/DatePicker.d.mts.map +1 -1
  30. package/dist/components/controls/date-picker/DatePicker.mjs.map +1 -1
  31. package/dist/components/controls/dropdown/Dropdown.d.mts.map +1 -1
  32. package/dist/components/controls/dropdown/Dropdown.mjs.map +1 -1
  33. package/dist/components/controls/dropzone/Dropzone.d.mts +2 -2
  34. package/dist/components/controls/dropzone/Dropzone.d.mts.map +1 -1
  35. package/dist/components/controls/dropzone/Dropzone.mjs.map +1 -1
  36. package/dist/components/controls/dropzone/use-dropzone-state.mjs.map +1 -1
  37. package/dist/components/controls/dropzone-files/DropzoneFiles.d.mts +3 -6
  38. package/dist/components/controls/dropzone-files/DropzoneFiles.d.mts.map +1 -1
  39. package/dist/components/controls/dropzone-files/DropzoneFiles.mjs +1 -1
  40. package/dist/components/controls/dropzone-files/DropzoneFiles.mjs.map +1 -1
  41. package/dist/components/controls/file-input/BaseFileInput.d.mts.map +1 -1
  42. package/dist/components/controls/file-input/BaseFileInput.mjs.map +1 -1
  43. package/dist/components/controls/file-input/FileInput.d.mts +2 -2
  44. package/dist/components/controls/file-input/FileInput.mjs.map +1 -1
  45. package/dist/components/controls/file-input/FileInputMultiple.d.mts +2 -2
  46. package/dist/components/controls/file-input/FileInputMultiple.d.mts.map +1 -1
  47. package/dist/components/controls/file-input/FileInputMultiple.mjs.map +1 -1
  48. package/dist/components/controls/index.d.mts +15 -13
  49. package/dist/components/controls/multi-select/MultiSelect.d.mts +2 -2
  50. package/dist/components/controls/multi-select/MultiSelect.mjs.map +1 -1
  51. package/dist/components/controls/multi-select/MultiSelectTags.d.mts +2 -2
  52. package/dist/components/controls/multi-select/MultiSelectTags.mjs +1 -1
  53. package/dist/components/controls/multi-select/MultiSelectTags.mjs.map +1 -1
  54. package/dist/components/controls/password-input/PasswordInput.d.mts +8 -26
  55. package/dist/components/controls/password-input/PasswordInput.d.mts.map +1 -1
  56. package/dist/components/controls/password-input/PasswordInput.mjs +1 -1
  57. package/dist/components/controls/password-input/PasswordInput.mjs.map +1 -1
  58. package/dist/components/controls/password-input/PasswordStrengthInput.d.mts +11 -0
  59. package/dist/components/controls/password-input/PasswordStrengthInput.d.mts.map +1 -0
  60. package/dist/components/controls/password-input/PasswordStrengthInput.mjs +2 -0
  61. package/dist/components/controls/password-input/PasswordStrengthInput.mjs.map +1 -0
  62. package/dist/components/controls/password-input/usePasswordRules.d.mts +11 -0
  63. package/dist/components/controls/password-input/usePasswordRules.d.mts.map +1 -0
  64. package/dist/components/controls/password-input/usePasswordRules.mjs +2 -0
  65. package/dist/components/controls/password-input/usePasswordRules.mjs.map +1 -0
  66. package/dist/components/controls/password-input-strength/{PasswordInputStrength.d.mts → oldPasswordInputStrength.d.mts} +4 -4
  67. package/dist/components/controls/password-input-strength/oldPasswordInputStrength.d.mts.map +1 -0
  68. package/dist/components/controls/password-input-strength/{PasswordInputStrength.mjs → oldPasswordInputStrength.mjs} +2 -2
  69. package/dist/components/controls/password-input-strength/oldPasswordInputStrength.mjs.map +1 -0
  70. package/dist/components/controls/radio/Radio.d.mts.map +1 -1
  71. package/dist/components/controls/radio/Radio.mjs.map +1 -1
  72. package/dist/components/controls/radio-group/RadioGroup.mjs.map +1 -1
  73. package/dist/components/controls/select/Select.d.mts +2 -2
  74. package/dist/components/controls/select/Select.d.mts.map +1 -1
  75. package/dist/components/controls/select/Select.mjs.map +1 -1
  76. package/dist/components/controls/text-input/TextInput.d.mts +3 -16
  77. package/dist/components/controls/text-input/TextInput.d.mts.map +1 -1
  78. package/dist/components/controls/text-input/TextInput.mjs +1 -1
  79. package/dist/components/controls/text-input/TextInput.mjs.map +1 -1
  80. package/dist/components/controls/textarea/Textarea.d.mts +2 -2
  81. package/dist/components/controls/utils/chevron/Chevron.d.mts +27 -1
  82. package/dist/components/controls/utils/chevron/Chevron.d.mts.map +1 -0
  83. package/dist/components/controls/utils/chevron/Chevron.mjs.map +1 -1
  84. package/dist/components/controls/utils/clear-button/ClearButton.d.mts +26 -1
  85. package/dist/components/controls/utils/clear-button/ClearButton.d.mts.map +1 -0
  86. package/dist/components/controls/utils/clear-button/ClearButton.mjs.map +1 -1
  87. package/dist/components/controls/utils/index.d.mts +2 -2
  88. package/dist/components/data-display/assigned-user/AssignedUser.d.mts +37 -0
  89. package/dist/components/data-display/assigned-user/AssignedUser.d.mts.map +1 -0
  90. package/dist/components/data-display/assigned-user/AssignedUser.mjs +2 -0
  91. package/dist/components/data-display/assigned-user/AssignedUser.mjs.map +1 -0
  92. package/dist/components/data-display/avatar/Avatar.d.mts +2 -2
  93. package/dist/components/data-display/badge/Badge.d.mts +2 -2
  94. package/dist/components/data-display/calendar/Calendar.d.mts +4 -4
  95. package/dist/components/data-display/calendar/Calendar.d.mts.map +1 -1
  96. package/dist/components/data-display/calendar/Calendar.mjs.map +1 -1
  97. package/dist/components/data-display/icons/icon/Icon.d.mts +2 -4
  98. package/dist/components/data-display/icons/icon/Icon.d.mts.map +1 -1
  99. package/dist/components/data-display/icons/icon/Icon.mjs +1 -1
  100. package/dist/components/data-display/icons/icon/Icon.mjs.map +1 -1
  101. package/dist/components/data-display/icons/icon-raw/IconRaw.d.mts.map +1 -1
  102. package/dist/components/data-display/icons/icon-raw/IconRaw.mjs.map +1 -1
  103. package/dist/components/data-display/icons/icon-svg/IconSvg.d.mts +24 -0
  104. package/dist/components/data-display/icons/icon-svg/IconSvg.d.mts.map +1 -0
  105. package/dist/components/data-display/icons/icon-svg/IconSvg.mjs +2 -0
  106. package/dist/components/data-display/icons/icon-svg/IconSvg.mjs.map +1 -0
  107. package/dist/components/data-display/index.d.mts +9 -5
  108. package/dist/components/data-display/indicator/Indicator.d.mts.map +1 -1
  109. package/dist/components/data-display/indicator/Indicator.mjs.map +1 -1
  110. package/dist/components/data-display/loader-dot/LoaderDot.d.mts +2 -2
  111. package/dist/components/data-display/loader-dot/LoaderDot.d.mts.map +1 -1
  112. package/dist/components/data-display/loader-dot/LoaderDot.mjs.map +1 -1
  113. package/dist/components/data-display/loader-oval/LoaderOval.d.mts +2 -2
  114. package/dist/components/data-display/logos/logo-image/LogoImage.d.mts.map +1 -1
  115. package/dist/components/data-display/logos/logo-image/LogoImage.mjs.map +1 -1
  116. package/dist/components/data-display/logos/logo-svg/LogoSvg.d.mts.map +1 -1
  117. package/dist/components/data-display/logos/logo-svg/LogoSvg.mjs.map +1 -1
  118. package/dist/components/data-display/removable-item/RemovableItem.d.mts +29 -0
  119. package/dist/components/data-display/removable-item/RemovableItem.d.mts.map +1 -0
  120. package/dist/components/data-display/removable-item/RemovableItem.mjs +2 -0
  121. package/dist/components/data-display/removable-item/RemovableItem.mjs.map +1 -0
  122. package/dist/components/data-display/tag/Tag.d.mts +3 -3
  123. package/dist/components/data-display/tag/Tag.mjs.map +1 -1
  124. package/dist/components/data-display/tag-group/TagGroup.d.mts +2 -2
  125. package/dist/components/data-display/tag-group/TagGroup.mjs.map +1 -1
  126. package/dist/components/data-display/uploaded-file/UploadedFile.d.mts +17 -19
  127. package/dist/components/data-display/uploaded-file/UploadedFile.d.mts.map +1 -1
  128. package/dist/components/data-display/uploaded-file/UploadedFile.mjs +1 -1
  129. package/dist/components/data-display/uploaded-file/UploadedFile.mjs.map +1 -1
  130. package/dist/components/data-display/uploaded-file/UploadedFileDetails.d.mts +23 -0
  131. package/dist/components/data-display/uploaded-file/UploadedFileDetails.d.mts.map +1 -0
  132. package/dist/components/data-display/uploaded-file/UploadedFileDetails.mjs +2 -0
  133. package/dist/components/data-display/uploaded-file/UploadedFileDetails.mjs.map +1 -0
  134. package/dist/components/data-display/uploaded-file/UploadedFileIcon.mjs +2 -0
  135. package/dist/components/data-display/uploaded-file/UploadedFileIcon.mjs.map +1 -0
  136. package/dist/components/forms/Form.d.mts +111 -0
  137. package/dist/components/forms/Form.d.mts.map +1 -0
  138. package/dist/components/forms/Form.mjs +2 -0
  139. package/dist/components/forms/Form.mjs.map +1 -0
  140. package/dist/components/forms/FormBase.mjs +2 -0
  141. package/dist/components/forms/FormBase.mjs.map +1 -0
  142. package/dist/components/forms/FormErrorBox.mjs +2 -0
  143. package/dist/components/forms/FormErrorBox.mjs.map +1 -0
  144. package/dist/components/forms/controls/FormCheckbox.d.mts +13 -0
  145. package/dist/components/forms/controls/FormCheckbox.d.mts.map +1 -0
  146. package/dist/components/forms/controls/FormCheckbox.mjs +2 -0
  147. package/dist/components/forms/controls/FormCheckbox.mjs.map +1 -0
  148. package/dist/components/forms/controls/FormHidden.mjs +2 -0
  149. package/dist/components/forms/controls/FormHidden.mjs.map +1 -0
  150. package/dist/components/forms/controls/FormPassword.mjs +2 -0
  151. package/dist/components/forms/controls/FormPassword.mjs.map +1 -0
  152. package/dist/components/forms/controls/FormSubmit.d.mts +9 -0
  153. package/dist/components/forms/controls/FormSubmit.d.mts.map +1 -0
  154. package/dist/components/forms/controls/FormSubmit.mjs +2 -0
  155. package/dist/components/forms/controls/FormSubmit.mjs.map +1 -0
  156. package/dist/components/forms/controls/FormTextInput.mjs +2 -0
  157. package/dist/components/forms/controls/FormTextInput.mjs.map +1 -0
  158. package/dist/components/forms/controls/find-form-components.mjs +2 -0
  159. package/dist/components/forms/controls/find-form-components.mjs.map +1 -0
  160. package/dist/components/forms/controls/index.mjs +2 -0
  161. package/dist/components/forms/controls/index.mjs.map +1 -0
  162. package/dist/components/forms/controls/register-components.mjs +2 -0
  163. package/dist/components/forms/controls/register-components.mjs.map +1 -0
  164. package/dist/components/forms/index.d.mts +3 -0
  165. package/dist/components/forms/rules/confirmed.mjs +2 -0
  166. package/dist/components/forms/rules/confirmed.mjs.map +1 -0
  167. package/dist/components/forms/rules/create-rule.d.mts +1 -0
  168. package/dist/components/forms/rules/create-rule.mjs +2 -0
  169. package/dist/components/forms/rules/create-rule.mjs.map +1 -0
  170. package/dist/components/forms/rules/extract-form-rules.mjs +2 -0
  171. package/dist/components/forms/rules/extract-form-rules.mjs.map +1 -0
  172. package/dist/components/forms/rules/in.mjs +2 -0
  173. package/dist/components/forms/rules/in.mjs.map +1 -0
  174. package/dist/components/forms/rules/index.mjs +2 -0
  175. package/dist/components/forms/rules/index.mjs.map +1 -0
  176. package/dist/components/forms/rules/numeric.mjs +2 -0
  177. package/dist/components/forms/rules/numeric.mjs.map +1 -0
  178. package/dist/components/forms/rules/password-rules.d.mts +7 -0
  179. package/dist/components/forms/rules/password-rules.d.mts.map +1 -0
  180. package/dist/components/forms/rules/password-rules.mjs +2 -0
  181. package/dist/components/forms/rules/password-rules.mjs.map +1 -0
  182. package/dist/components/forms/rules/password.mjs +2 -0
  183. package/dist/components/forms/rules/password.mjs.map +1 -0
  184. package/dist/components/forms/rules/required.mjs +2 -0
  185. package/dist/components/forms/rules/required.mjs.map +1 -0
  186. package/dist/components/forms/rules/zod.d.mts +298 -0
  187. package/dist/components/forms/rules/zod.d.mts.map +1 -0
  188. package/dist/components/forms/rules/zod.mjs +2 -0
  189. package/dist/components/forms/rules/zod.mjs.map +1 -0
  190. package/dist/components/index.d.mts +37 -26
  191. package/dist/components/layouts/top-bar/TopBar.d.mts +2 -2
  192. package/dist/components/layouts/top-bar/TopBar.d.mts.map +1 -1
  193. package/dist/components/layouts/top-bar/TopBar.mjs.map +1 -1
  194. package/dist/components/misc/horizontal-divider/HorizontalDivider.d.mts +2 -2
  195. package/dist/components/misc/horizontal-divider/HorizontalDivider.d.mts.map +1 -1
  196. package/dist/components/misc/scroll-area/ScrollArea.d.mts +1 -1
  197. package/dist/components/misc/scroll-area/ScrollArea.mjs.map +1 -1
  198. package/dist/components/misc/scroll-area-autosize/ScrollAreaAutosize.d.mts.map +1 -1
  199. package/dist/components/misc/scroll-area-autosize/ScrollAreaAutosize.mjs.map +1 -1
  200. package/dist/components/misc/visually-hidden/VisuallyHidden.d.mts +2 -2
  201. package/dist/components/misc/visually-hidden/VisuallyHidden.d.mts.map +1 -1
  202. package/dist/components/navigations/breadcrumbs/Breadcrumbs.d.mts +2 -2
  203. package/dist/components/navigations/breadcrumbs/Breadcrumbs.d.mts.map +1 -1
  204. package/dist/components/navigations/menu/Menu.d.mts +4 -4
  205. package/dist/components/navigations/menu/Menu.d.mts.map +1 -1
  206. package/dist/components/navigations/menu/Menu.mjs.map +1 -1
  207. package/dist/components/overlays/index.d.mts +9 -9
  208. package/dist/components/overlays/modal/Modal.d.mts +11 -11
  209. package/dist/components/overlays/modal/Modal.d.mts.map +1 -1
  210. package/dist/components/overlays/modal/Modal.mjs.map +1 -1
  211. package/dist/components/overlays/modal/ModalContext.mjs +1 -1
  212. package/dist/components/overlays/modal/ModalContext.mjs.map +1 -1
  213. package/dist/components/overlays/modals/ModalsProvider.d.mts +3 -3
  214. package/dist/components/overlays/modals/ModalsProvider.d.mts.map +1 -1
  215. package/dist/components/overlays/modals/ModalsProvider.mjs.map +1 -1
  216. package/dist/components/overlays/modals/alert/ModalAlert.d.mts +2 -2
  217. package/dist/components/overlays/modals/alert/ModalAlert.d.mts.map +1 -1
  218. package/dist/components/overlays/modals/alert/ModalAlert.mjs +1 -1
  219. package/dist/components/overlays/modals/alert/ModalAlert.mjs.map +1 -1
  220. package/dist/components/overlays/modals/alert/alert.d.mts.map +1 -1
  221. package/dist/components/overlays/modals/alert/alert.mjs.map +1 -1
  222. package/dist/components/overlays/modals/confirm/ModalConfirm.d.mts +2 -2
  223. package/dist/components/overlays/modals/confirm/ModalConfirm.d.mts.map +1 -1
  224. package/dist/components/overlays/modals/confirm/ModalConfirm.mjs +1 -1
  225. package/dist/components/overlays/modals/confirm/ModalConfirm.mjs.map +1 -1
  226. package/dist/components/overlays/modals/confirm/confirm.d.mts.map +1 -1
  227. package/dist/components/overlays/modals/confirm/confirm.mjs.map +1 -1
  228. package/dist/components/overlays/modals/registry/createModal.d.mts +1 -1
  229. package/dist/components/overlays/modals/registry/createModal.d.mts.map +1 -1
  230. package/dist/components/overlays/modals/registry/createModal.mjs.map +1 -1
  231. package/dist/components/overlays/modals/registry/openModalById.d.mts.map +1 -1
  232. package/dist/components/overlays/modals/registry/openModalById.mjs.map +1 -1
  233. package/dist/components/overlays/modals/registry/registerModal.d.mts.map +1 -1
  234. package/dist/components/overlays/modals/registry/registerModal.mjs.map +1 -1
  235. package/dist/components/overlays/tooltip/Tooltip.d.mts +2 -2
  236. package/dist/components/overlays/tooltip/Tooltip.d.mts.map +1 -1
  237. package/dist/components/overlays/tooltip/Tooltip.mjs.map +1 -1
  238. package/dist/index.d.mts +40 -30
  239. package/dist/index.mjs +1 -1
  240. package/dist/semedlab/components/data-display/index.d.mts +2 -2
  241. package/dist/semedlab/components/data-display/notification/Notification.d.mts.map +1 -1
  242. package/dist/semedlab/components/data-display/notification/Notification.mjs.map +1 -1
  243. package/dist/semedlab/components/data-display/user-group-preview/UserGroupPreview.d.mts +2 -2
  244. package/dist/semedlab/components/data-display/user-group-preview/UserGroupPreview.d.mts.map +1 -1
  245. package/dist/semedlab/components/data-display/user-group-preview/UserGroupPreview.mjs.map +1 -1
  246. package/dist/semedlab/components/data-display/user-profile/UserProfile.d.mts +0 -2
  247. package/dist/semedlab/components/data-display/user-profile/UserProfile.d.mts.map +1 -1
  248. package/dist/semedlab/components/data-display/user-profile/UserProfile.mjs +1 -1
  249. package/dist/semedlab/components/data-display/user-profile/UserProfile.mjs.map +1 -1
  250. package/dist/semedlab/components/index.d.mts +3 -3
  251. package/dist/semedlab/components/navigations/backoffice-top-bar/BackofficeTopBar.d.mts +2 -2
  252. package/dist/semedlab/components/navigations/backoffice-top-bar/BackofficeTopBar.d.mts.map +1 -1
  253. package/dist/semedlab/components/navigations/backoffice-top-bar/BackofficeTopBar.mjs.map +1 -1
  254. package/dist/semedlab/components/navigations/breadcrumbs-bar/BreadcrumbsBar.d.mts.map +1 -1
  255. package/dist/semedlab/components/navigations/breadcrumbs-bar/BreadcrumbsBar.mjs.map +1 -1
  256. package/dist/semedlab/components/navigations/index.d.mts +3 -3
  257. package/dist/semedlab/components/navigations/notification-list/NotificationList.d.mts +2 -2
  258. package/dist/semedlab/components/navigations/notification-list/NotificationList.d.mts.map +1 -1
  259. package/dist/semedlab/components/navigations/notification-list/NotificationList.mjs.map +1 -1
  260. package/dist/semedlab/components/navigations/notification-menu/NotificationMenu.d.mts +2 -2
  261. package/dist/semedlab/components/navigations/notification-menu/NotificationMenu.d.mts.map +1 -1
  262. package/dist/semedlab/components/navigations/notification-menu/NotificationMenu.mjs.map +1 -1
  263. package/dist/semedlab/components/navigations/profile-menu/ProfileMenu.d.mts +2 -2
  264. package/dist/semedlab/components/navigations/profile-menu/ProfileMenu.mjs.map +1 -1
  265. package/package.json +8 -8
  266. package/dist/components/controls/password-input-strength/PasswordInputStrength.d.mts.map +0 -1
  267. package/dist/components/controls/password-input-strength/PasswordInputStrength.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadedFileIcon.mjs","names":[],"sources":["../../../../src/components/data-display/uploaded-file/UploadedFileIcon.tsx"],"sourcesContent":["import {\n uploadedFileStartIcon,\n uploadedFileStartIconIconRaw,\n uploadedFileStartIconIconRawRoot,\n uploadedFileStartIconRoot,\n uploadedFileStartIconWrapped,\n uploadedFileStartIconWrappedRoot,\n} from '@mage-ui/styled-system/recipes';\nimport {\n Icon,\n type IconProps,\n IconWrapped,\n type IconWrappedProps,\n} from '@/components/data-display';\n\ntype FileIconType =\n | 'image'\n | 'video'\n | 'audio'\n | 'text'\n | 'pdf'\n | 'archive'\n | 'default';\n\nconst MIME_ICON_MAP: Array<{\n match: (mime: string) => boolean;\n type: FileIconType;\n}> = [\n { match: (m) => m.startsWith('image/'), type: 'image' },\n { match: (m) => m.startsWith('video/'), type: 'video' },\n { match: (m) => m.startsWith('audio/'), type: 'audio' },\n { match: (m) => m === 'application/pdf', type: 'pdf' },\n { match: (m) => m.startsWith('text/'), type: 'text' },\n {\n match: (m) =>\n [\n 'application/zip',\n 'application/x-zip-compressed',\n 'application/x-rar-compressed',\n 'application/x-7z-compressed',\n ].includes(m),\n type: 'archive',\n },\n];\n\nconst EXTENSION_ICON_MAP: Record<string, FileIconType> = {\n png: 'image',\n jpg: 'image',\n jpeg: 'image',\n webp: 'image',\n gif: 'image',\n mp4: 'video',\n mov: 'video',\n webm: 'video',\n mp3: 'audio',\n wav: 'audio',\n txt: 'text',\n md: 'text',\n csv: 'text',\n pdf: 'pdf',\n zip: 'archive',\n rar: 'archive',\n '7z': 'archive',\n};\n\nconst ICON_NAME_MAP: Record<FileIconType, string> = {\n image: 'mage-uploaded-file-image',\n video: 'mage-uploaded-file-video',\n audio: 'mage-uploaded-file-audio',\n text: 'mage-uploaded-file-text',\n pdf: 'mage-uploaded-file-pdf',\n archive: 'mage-uploaded-file-archive',\n default: 'mage-uploaded-file-attachment',\n};\n\nconst resolveIconName = (fileType?: string, fileName?: string): string => {\n if (fileType) {\n const match = MIME_ICON_MAP.find(({ match }) => match(fileType));\n if (match) return ICON_NAME_MAP[match.type];\n }\n\n if (fileName) {\n const ext = fileName.split('.').pop()?.toLowerCase();\n if (ext && EXTENSION_ICON_MAP[ext]) {\n return ICON_NAME_MAP[EXTENSION_ICON_MAP[ext]];\n }\n }\n\n return ICON_NAME_MAP.default;\n};\n\nexport type UploadedFileIconProps = {\n fileType?: string;\n fileName?: string;\n classNames?: {\n startIconWrapped?: IconWrappedProps['classNames'];\n startIcon?: IconProps['classNames'];\n };\n};\n\nexport const UploadedFileIcon = ({\n fileType,\n fileName,\n classNames,\n}: UploadedFileIconProps) => {\n const iconName = resolveIconName(fileType, fileName);\n\n return (\n <IconWrapped\n classNames={{\n iconWrapped:\n classNames?.startIconWrapped?.iconWrapped ??\n uploadedFileStartIconWrapped(),\n root:\n classNames?.startIconWrapped?.root ??\n uploadedFileStartIconWrappedRoot(),\n }}\n >\n <Icon\n name={iconName}\n path='/icons/sprite-mage.svg'\n classNames={{\n icon: classNames?.startIcon?.icon ?? uploadedFileStartIcon(),\n root: classNames?.startIcon?.root ?? uploadedFileStartIconRoot(),\n iconRaw: {\n iconRaw:\n classNames?.startIcon?.iconRaw?.iconRaw ??\n uploadedFileStartIconIconRaw(),\n root:\n classNames?.startIcon?.iconRaw?.root ??\n uploadedFileStartIconIconRawRoot(),\n },\n }}\n />\n </IconWrapped>\n );\n};\n"],"mappings":"gZAwBA,MAAM,EAGD,CACH,CAAE,MAAQ,GAAM,EAAE,WAAW,SAAS,CAAE,KAAM,QAAS,CACvD,CAAE,MAAQ,GAAM,EAAE,WAAW,SAAS,CAAE,KAAM,QAAS,CACvD,CAAE,MAAQ,GAAM,EAAE,WAAW,SAAS,CAAE,KAAM,QAAS,CACvD,CAAE,MAAQ,GAAM,IAAM,kBAAmB,KAAM,MAAO,CACtD,CAAE,MAAQ,GAAM,EAAE,WAAW,QAAQ,CAAE,KAAM,OAAQ,CACrD,CACE,MAAQ,GACN,CACE,kBACA,+BACA,+BACA,8BACD,CAAC,SAAS,EAAE,CACf,KAAM,UACP,CACF,CAEK,EAAmD,CACvD,IAAK,QACL,IAAK,QACL,KAAM,QACN,KAAM,QACN,IAAK,QACL,IAAK,QACL,IAAK,QACL,KAAM,QACN,IAAK,QACL,IAAK,QACL,IAAK,OACL,GAAI,OACJ,IAAK,OACL,IAAK,MACL,IAAK,UACL,IAAK,UACL,KAAM,UACP,CAEK,EAA8C,CAClD,MAAO,2BACP,MAAO,2BACP,MAAO,2BACP,KAAM,0BACN,IAAK,yBACL,QAAS,6BACT,QAAS,gCACV,CAEK,GAAmB,EAAmB,IAA8B,CACxE,GAAI,EAAU,CACZ,IAAM,EAAQ,EAAc,MAAM,CAAE,WAAY,EAAM,EAAS,CAAC,CAChE,GAAI,EAAO,OAAO,EAAc,EAAM,MAGxC,GAAI,EAAU,CACZ,IAAM,EAAM,EAAS,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,CACpD,GAAI,GAAO,EAAmB,GAC5B,OAAO,EAAc,EAAmB,IAI5C,OAAO,EAAc,SAYV,GAAoB,CAC/B,WACA,WACA,gBAC2B,CAC3B,IAAM,EAAW,EAAgB,EAAU,EAAS,CAEpD,OACE,EAAC,EAAA,CACC,WAAY,CACV,YACE,GAAY,kBAAkB,aAC9B,GAA8B,CAChC,KACE,GAAY,kBAAkB,MAC9B,GAAkC,CACrC,UAED,EAAC,EAAA,CACC,KAAM,EACN,KAAK,yBACL,WAAY,CACV,KAAM,GAAY,WAAW,MAAQ,GAAuB,CAC5D,KAAM,GAAY,WAAW,MAAQ,GAA2B,CAChE,QAAS,CACP,QACE,GAAY,WAAW,SAAS,SAChC,GAA8B,CAChC,KACE,GAAY,WAAW,SAAS,MAChC,GAAkC,CACrC,CACF,EACD,EACU"}
@@ -0,0 +1,111 @@
1
+ import { TextInputProps } from "../controls/text-input/TextInput.mjs";
2
+ import { FormSubmitProps } from "./controls/FormSubmit.mjs";
3
+ import { FormCheckboxProps } from "./controls/FormCheckbox.mjs";
4
+ import { PasswordSegment } from "../controls/password-input/PasswordStrengthInput.mjs";
5
+ import { PasswordRuleDefinition } from "../controls/password-input/usePasswordRules.mjs";
6
+ import "../index.mjs";
7
+ import * as react_jsx_runtime49 from "react/jsx-runtime";
8
+ import React, { ReactNode } from "react";
9
+ import { FieldValues, UseFormSetError } from "react-hook-form";
10
+ import { ZodObject, ZodTypeAny } from "zod";
11
+
12
+ //#region src/components/forms/Form.d.ts
13
+ type FormResponse = {
14
+ body?: object;
15
+ details?: string;
16
+ status?: number;
17
+ url?: string;
18
+ };
19
+ type FormProps<T extends FieldValues> = {
20
+ $fetcher: (params: {
21
+ data: T;
22
+ }) => Promise<unknown>;
23
+ onValidSubmit?: (response: FormResponse) => void;
24
+ onInvalidSubmit?: (params: {
25
+ message: string;
26
+ setError: UseFormSetError<T>;
27
+ status: number;
28
+ }) => void;
29
+ invalidStatus?: number[];
30
+ children: ReactNode;
31
+ schema?: ZodObject<Record<string, ZodTypeAny>>;
32
+ t?: (key: string, bindings?: Record<string, string>, fallback?: string) => string | React.ReactNode;
33
+ };
34
+ declare const Form: {
35
+ <T extends FieldValues>({
36
+ $fetcher,
37
+ onValidSubmit,
38
+ onInvalidSubmit,
39
+ invalidStatus,
40
+ children,
41
+ schema,
42
+ t
43
+ }: FormProps<T>): react_jsx_runtime49.JSX.Element;
44
+ displayName: string;
45
+ TextInput: {
46
+ ({
47
+ $rule,
48
+ isSubmitting,
49
+ ...props
50
+ }: {
51
+ $rule?: string;
52
+ error?: string;
53
+ isSubmitting?: boolean;
54
+ } & TextInputProps): react_jsx_runtime49.JSX.Element;
55
+ displayName: string;
56
+ };
57
+ Submit: {
58
+ ({
59
+ children,
60
+ successText,
61
+ ...props
62
+ }: FormSubmitProps): react_jsx_runtime49.JSX.Element;
63
+ displayName: string;
64
+ };
65
+ Hidden: {
66
+ ({
67
+ name,
68
+ value,
69
+ ...props
70
+ }: {
71
+ name?: string;
72
+ value?: string;
73
+ defaultValue?: string;
74
+ } & React.InputHTMLAttributes<HTMLInputElement>): react_jsx_runtime49.JSX.Element;
75
+ displayName: string;
76
+ };
77
+ Checkbox: {
78
+ ({
79
+ $rule,
80
+ isSubmitting,
81
+ children,
82
+ name,
83
+ ...props
84
+ }: FormCheckboxProps): react_jsx_runtime49.JSX.Element;
85
+ displayName: string;
86
+ };
87
+ Password: {
88
+ ({
89
+ $rule,
90
+ isSubmitting,
91
+ strengthBar,
92
+ value,
93
+ name,
94
+ rules,
95
+ ...props
96
+ }: {
97
+ $rule?: string;
98
+ error?: string;
99
+ isSubmitting?: boolean;
100
+ strengthBar?: boolean;
101
+ value?: string;
102
+ name: string;
103
+ rules?: PasswordRuleDefinition[];
104
+ segments?: PasswordSegment[];
105
+ }): react_jsx_runtime49.JSX.Element;
106
+ displayName: string;
107
+ };
108
+ };
109
+ //#endregion
110
+ export { Form, FormProps };
111
+ //# sourceMappingURL=Form.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.d.mts","names":[],"sources":["../../../src/components/forms/Form.tsx"],"mappings":";;;;;;;;;;;;KAaK,YAAA;EACH,IAAA;EACA,OAAA;EACA,MAAA;EACA,GAAA;AAAA;AAAA,KAGU,SAAA,WAAoB,WAAA;EAC9B,QAAA,GAAW,MAAA;IAAU,IAAA,EAAM,CAAA;EAAA,MAAQ,OAAA;EACnC,aAAA,IAAiB,QAAA,EAAU,YAAA;EAC3B,eAAA,IAAmB,MAAA;IACjB,OAAA;IACA,QAAA,EAAU,eAAA,CAAgB,CAAA;IAC1B,MAAA;EAAA;EAEF,aAAA;EACA,QAAA,EAAU,SAAA;EACV,MAAA,GAAS,SAAA,CAAU,MAAA,SAAe,UAAA;EAClC,CAAA,IACE,GAAA,UACA,QAAA,GAAW,MAAA,kBACX,QAAA,uBACY,KAAA,CAAM,SAAA;AAAA;AAAA,cAWT,IAAA;EAAA,WAAkB,WAAA;IAAW,QAAA;IAAA,aAAA;IAAA,eAAA;IAAA,aAAA;IAAA,QAAA;IAAA,MAAA;IAAA;EAAA,GAQvC,SAAA,CAAU,CAAA,IAAE,mBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAlCT,eAAA;IAAA"}
@@ -0,0 +1,2 @@
1
+ import{FormCheckbox as e}from"./controls/FormCheckbox.mjs";import{FormHidden as t}from"./controls/FormHidden.mjs";import{FormPassword as n}from"./controls/FormPassword.mjs";import{FormSubmit as r}from"./controls/FormSubmit.mjs";import{FormTextInput as i}from"./controls/FormTextInput.mjs";import{FormBase as a}from"./FormBase.mjs";import{FormErrorBox as o}from"./FormErrorBox.mjs";import{jsx as s}from"react/jsx-runtime";const c=({$fetcher:e,onValidSubmit:t,onInvalidSubmit:n,invalidStatus:r=[],children:i,schema:c,t:l})=>s(a,{onSubmit:async({data:i,setError:a})=>{await e({data:i}).then(e=>{let n=e;if(n?.statusCode&&n.statusCode>=400)throw n;t?.(e||{})}).catch(e=>{switch(e.statusCode){case 400:case 422:e.cause?.issues&&Object.keys(e.cause.issues).forEach(t=>{a(t,{type:`server`,message:e.cause?.issues?.[t]})}),a(`root.serverError`,{type:`server`,message:e?.message??`Something went wrong`});break;default:if(r.includes(e.statusCode)){n?.({message:e.message,setError:a,status:e.statusCode});break}throw e}})},schema:c,errorBox:o,t:l,children:i});c.displayName=`Form`,c.TextInput=i,c.Submit=r,c.Hidden=t,c.Checkbox=e,c.Password=n;export{c as Form};
2
+ //# sourceMappingURL=Form.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.mjs","names":[],"sources":["../../../src/components/forms/Form.tsx"],"sourcesContent":["import type React from 'react';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, UseFormSetError } from 'react-hook-form';\nimport type { ZodObject, ZodTypeAny } from 'zod';\n\nimport { FormCheckbox } from './controls/FormCheckbox';\nimport { FormHidden } from './controls/FormHidden';\nimport { FormPassword } from './controls/FormPassword';\nimport { FormSubmit } from './controls/FormSubmit';\nimport { FormTextInput } from './controls/FormTextInput';\nimport { FormBase } from './FormBase';\nimport { FormErrorBox } from './FormErrorBox';\n\ntype FormResponse = {\n body?: object;\n details?: string;\n status?: number;\n url?: string;\n};\n\nexport type FormProps<T extends FieldValues> = {\n $fetcher: (params: { data: T }) => Promise<unknown>;\n onValidSubmit?: (response: FormResponse) => void;\n onInvalidSubmit?: (params: {\n message: string;\n setError: UseFormSetError<T>;\n status: number;\n }) => void;\n invalidStatus?: number[];\n children: ReactNode;\n schema?: ZodObject<Record<string, ZodTypeAny>>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n};\n\ntype FormError = {\n statusCode: number;\n message: string;\n cause?: {\n issues: Record<string, string>;\n };\n};\n\nexport const Form = <T extends FieldValues>({\n $fetcher,\n onValidSubmit,\n onInvalidSubmit,\n invalidStatus = [],\n children,\n schema,\n t,\n}: FormProps<T>) => {\n const onSubmit = async ({\n data,\n setError,\n }: {\n data: FieldValues;\n setError: UseFormSetError<FieldValues>;\n }) => {\n await $fetcher({ data: data as T })\n .then((response) => {\n const res = response as FormError & FormResponse;\n if (res?.statusCode && res.statusCode >= 400) {\n throw res;\n }\n\n onValidSubmit?.((response || {}) as FormResponse);\n })\n .catch((error: FormError) => {\n switch (error.statusCode) {\n case 400:\n case 422: {\n if (error.cause?.issues) {\n Object.keys(error.cause.issues).forEach((key) => {\n setError(key, {\n type: 'server',\n message: error.cause?.issues?.[key],\n });\n });\n }\n setError('root.serverError', {\n type: 'server',\n message: error?.message ?? 'Something went wrong',\n });\n break;\n }\n default:\n if (invalidStatus.includes(error.statusCode)) {\n onInvalidSubmit?.({\n message: error.message,\n setError: setError as UseFormSetError<T>,\n status: error.statusCode,\n });\n break;\n }\n throw error;\n }\n });\n };\n\n return (\n <FormBase onSubmit={onSubmit} schema={schema} errorBox={FormErrorBox} t={t}>\n {children}\n </FormBase>\n );\n};\n\nForm.displayName = 'Form';\nForm.TextInput = FormTextInput;\nForm.Submit = FormSubmit;\nForm.Hidden = FormHidden;\nForm.Checkbox = FormCheckbox;\nForm.Password = FormPassword;\n"],"mappings":"qaA8CA,MAAa,GAA+B,CAC1C,WACA,gBACA,kBACA,gBAAgB,EAAE,CAClB,WACA,SACA,OAmDE,EAAC,EAAA,CAAmB,SAjDL,MAAO,CACtB,OACA,cAII,CACJ,MAAM,EAAS,CAAQ,OAAW,CAAC,CAChC,KAAM,GAAa,CAClB,IAAM,EAAM,EACZ,GAAI,GAAK,YAAc,EAAI,YAAc,IACvC,MAAM,EAGR,IAAiB,GAAY,EAAE,CAAkB,EACjD,CACD,MAAO,GAAqB,CAC3B,OAAQ,EAAM,WAAd,CACE,IAAK,KACL,IAAK,KACC,EAAM,OAAO,QACf,OAAO,KAAK,EAAM,MAAM,OAAO,CAAC,QAAS,GAAQ,CAC/C,EAAS,EAAK,CACZ,KAAM,SACN,QAAS,EAAM,OAAO,SAAS,GAChC,CAAC,EACF,CAEJ,EAAS,mBAAoB,CAC3B,KAAM,SACN,QAAS,GAAO,SAAW,uBAC5B,CAAC,CACF,MAEF,QACE,GAAI,EAAc,SAAS,EAAM,WAAW,CAAE,CAC5C,IAAkB,CAChB,QAAS,EAAM,QACL,WACV,OAAQ,EAAM,WACf,CAAC,CACF,MAEF,MAAM,IAEV,EAIkC,SAAQ,SAAU,EAAiB,IACtE,YACQ,CAIf,EAAK,YAAc,OACnB,EAAK,UAAY,EACjB,EAAK,OAAS,EACd,EAAK,OAAS,EACd,EAAK,SAAW,EAChB,EAAK,SAAW"}
@@ -0,0 +1,2 @@
1
+ "use client";import{controls as e}from"./controls/index.mjs";import{RegisteredFormChildren as t}from"./controls/register-components.mjs";import{extractFormRules as n}from"./rules/extract-form-rules.mjs";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useEffect as a}from"react";import{FormProvider as o,useForm as s}from"react-hook-form";import*as c from"zod";import{zodResolver as l}from"@hookform/resolvers/zod";const u=({errorBox:u,onWatch:d,onSubmit:f,children:p,schema:m=c.object({}),t:h,mode:g=`onSubmit`,reValidateMode:_=`onChange`})=>{let v=s({shouldFocusError:!0,resolver:l(m?m.and(n(p,e)):n(p,e)),mode:g,reValidateMode:_}),{register:y,handleSubmit:b,setError:x,formState:{errors:S},watch:C}=v;return a(()=>{let{unsubscribe:e}=C(e=>{d?.(e)});return()=>e()},[C,d]),i(o,{...v,t:h,children:[r(u,{errors:S}),r(`form`,{onSubmit:b(e=>f({data:e,setError:x})),children:r(t,{register:y,componentTypes:e,errors:S,t:h,children:p})})]})};export{u as FormBase};
2
+ //# sourceMappingURL=FormBase.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormBase.mjs","names":["z"],"sources":["../../../src/components/forms/FormBase.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { useEffect } from 'react';\nimport type {\n DeepPartialSkipArrayKey,\n FieldErrors,\n FieldValues,\n UseFormSetError,\n} from 'react-hook-form';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport * as z from 'zod';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\n\nimport { controls } from './controls';\nimport { RegisteredFormChildren } from './controls/register-components';\nimport { extractFormRules } from './rules/extract-form-rules';\n\ntype FormProps = {\n children: React.ReactNode;\n schema?: z.ZodObject<Record<string, z.ZodTypeAny>>;\n errorBox: React.ComponentType<{ errors: FieldErrors }>;\n onWatch?: (values: DeepPartialSkipArrayKey<FieldValues>) => void;\n onSubmit: (args: {\n data: FieldValues;\n setError: UseFormSetError<FieldValues>;\n }) => void | Promise<void>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n mode?: 'onBlur' | 'onChange' | 'onSubmit' | 'onTouched' | 'all';\n reValidateMode?: 'onBlur' | 'onChange' | 'onSubmit';\n};\n\nexport const FormBase = ({\n errorBox: ErrorBox,\n onWatch,\n onSubmit,\n children,\n schema = z.object({}),\n t,\n mode = 'onSubmit',\n reValidateMode = 'onChange',\n}: FormProps) => {\n const rules = (\n schema\n ? schema.and(extractFormRules(children, controls) as z.ZodTypeAny)\n : (extractFormRules(children, controls) as z.ZodTypeAny)\n ) as z.ZodType<FieldValues, FieldValues>;\n\n const form = useForm({\n shouldFocusError: true,\n resolver: zodResolver(rules),\n mode,\n reValidateMode,\n });\n\n const {\n register,\n handleSubmit,\n setError,\n formState: { errors },\n watch,\n } = form;\n\n useEffect(() => {\n const { unsubscribe } = watch((values) => {\n onWatch?.(values);\n });\n return () => unsubscribe();\n }, [watch, onWatch]);\n\n return (\n <FormProvider {...form} {...({ t } as Record<string, unknown>)}>\n <ErrorBox errors={errors} />\n <form onSubmit={handleSubmit((data) => onSubmit({ data, setError }))}>\n <RegisteredFormChildren\n register={register}\n componentTypes={controls}\n errors={errors}\n t={t}\n >\n {children}\n </RegisteredFormChildren>\n </form>\n </FormProvider>\n );\n};\n"],"mappings":"uaAqCA,MAAa,GAAY,CACvB,SAAU,EACV,UACA,WACA,WACA,SAASA,EAAE,OAAO,EAAE,CAAC,CACrB,IACA,OAAO,WACP,iBAAiB,cACF,CAOf,IAAM,EAAO,EAAQ,CACnB,iBAAkB,GAClB,SAAU,EAPV,EACI,EAAO,IAAI,EAAiB,EAAU,EAAS,CAAiB,CAC/D,EAAiB,EAAU,EAAS,CAKb,CAC5B,OACA,iBACD,CAAC,CAEI,CACJ,WACA,eACA,WACA,UAAW,CAAE,UACb,SACE,EASJ,OAPA,MAAgB,CACd,GAAM,CAAE,eAAgB,EAAO,GAAW,CACxC,IAAU,EAAO,EACjB,CACF,UAAa,GAAa,EACzB,CAAC,EAAO,EAAQ,CAAC,CAGlB,EAAC,EAAA,CAAa,GAAI,EAAa,cAC7B,EAAC,EAAA,CAAiB,SAAA,CAAU,CAC5B,EAAC,OAAA,CAAK,SAAU,EAAc,GAAS,EAAS,CAAE,OAAM,WAAU,CAAC,CAAC,UAClE,EAAC,EAAA,CACW,WACV,eAAgB,EACR,SACL,IAEF,YACsB,EACpB,CAAA,EACM"}
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";const t=({errors:t})=>t.root?.serverError&&e(`div`,{style:{color:`red`},children:t.root.serverError.message});export{t as FormErrorBox};
2
+ //# sourceMappingURL=FormErrorBox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormErrorBox.mjs","names":[],"sources":["../../../src/components/forms/FormErrorBox.tsx"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\n\nexport const FormErrorBox = ({ errors }: { errors: FieldErrors }) =>\n errors.root?.serverError && (\n <div style={{ color: 'red' }}>{errors.root.serverError.message}</div>\n );\n"],"mappings":"wCAEA,MAAa,GAAgB,CAAE,YAC7B,EAAO,MAAM,aACX,EAAC,MAAA,CAAI,MAAO,CAAE,MAAO,MAAO,UAAG,EAAO,KAAK,YAAY,SAAc"}
@@ -0,0 +1,13 @@
1
+ import { CheckboxProps } from "../../controls/checkbox/Checkbox.mjs";
2
+ import "react/jsx-runtime";
3
+
4
+ //#region src/components/forms/controls/FormCheckbox.d.ts
5
+ type FormCheckboxProps = CheckboxProps & {
6
+ $rule?: string;
7
+ error?: string;
8
+ isSubmitting?: boolean;
9
+ name: string;
10
+ };
11
+ //#endregion
12
+ export { FormCheckboxProps };
13
+ //# sourceMappingURL=FormCheckbox.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormCheckbox.d.mts","names":[],"sources":["../../../../src/components/forms/controls/FormCheckbox.tsx"],"mappings":";;;;KAMY,iBAAA,GAAoB,aAAA;EAC9B,KAAA;EACA,KAAA;EACA,YAAA;EACA,IAAA;AAAA"}
@@ -0,0 +1,2 @@
1
+ import{Checkbox as e}from"../../controls/checkbox/Checkbox.mjs";import{jsx as t}from"react/jsx-runtime";import{Controller as n}from"react-hook-form";const r=({$rule:r,isSubmitting:i,children:a,name:o,...s})=>t(n,{name:o,render:({field:{value:n,...r}})=>t(e,{disabled:i,value:n,...s,...r})});r.displayName=`Form.Checkbox`;export{r as FormCheckbox};
2
+ //# sourceMappingURL=FormCheckbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormCheckbox.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormCheckbox.tsx"],"sourcesContent":["import {\n Checkbox,\n type CheckboxProps,\n} from '@/components/controls/checkbox/Checkbox';\nimport { Controller } from 'react-hook-form';\n\nexport type FormCheckboxProps = CheckboxProps & {\n $rule?: string;\n error?: string;\n isSubmitting?: boolean;\n name: string;\n};\n\nexport const FormCheckbox = ({\n $rule,\n isSubmitting,\n children,\n name,\n ...props\n}: FormCheckboxProps) => {\n return (\n <Controller\n name={name}\n render={({ field: { value, ...fieldProps } }) => {\n const mergedProps = {\n disabled: isSubmitting,\n value,\n ...props,\n ...fieldProps,\n };\n return <Checkbox {...mergedProps} />;\n }}\n />\n );\n};\n\nFormCheckbox.displayName = 'Form.Checkbox';\n"],"mappings":"qJAaA,MAAa,GAAgB,CAC3B,QACA,eACA,WACA,OACA,GAAG,KAGD,EAAC,EAAA,CACO,OACN,QAAS,CAAE,MAAO,CAAE,QAAO,GAAG,MAOrB,EAAC,EAAA,CALN,SAAU,EACV,QACA,GAAG,EACH,GAAG,GAE+B,EAEtC,CAIN,EAAa,YAAc"}
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";const t=({name:t,value:n,...r})=>e(`input`,{type:`hidden`,name:t,value:n,...r});t.displayName=`Form.Hidden`;export{t as FormHidden};
2
+ //# sourceMappingURL=FormHidden.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormHidden.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormHidden.tsx"],"sourcesContent":["import type React from 'react';\n\nexport const FormHidden = ({\n name,\n value,\n ...props\n}: {\n name?: string;\n value?: string;\n defaultValue?: string;\n} & React.InputHTMLAttributes<HTMLInputElement>) => {\n return <input type='hidden' name={name} value={value} {...props} />;\n};\n\nFormHidden.displayName = 'Form.Hidden';\n"],"mappings":"wCAEA,MAAa,GAAc,CACzB,OACA,QACA,GAAG,KAMI,EAAC,QAAA,CAAM,KAAK,SAAe,OAAa,QAAO,GAAI,GAAS,CAGrE,EAAW,YAAc"}
@@ -0,0 +1,2 @@
1
+ import{PasswordInput as e}from"../../controls/password-input/PasswordInput.mjs";import{PasswordStrengthInput as t}from"../../controls/password-input/PasswordStrengthInput.mjs";import{usePasswordRules as n}from"../../controls/password-input/usePasswordRules.mjs";import{jsx as r}from"react/jsx-runtime";import{Controller as i,useFormContext as a}from"react-hook-form";const o=({$rule:o,isSubmitting:s=!1,strengthBar:c=!1,value:l,name:u,rules:d,...f})=>{let{t:p}=a();return r(i,{name:u,defaultValue:l||``,render:({field:{value:i,...a}})=>{let o=n(i||``,d||[],p),l={disabled:s,value:i,...f,...a};return c?r(t,{segments:[],rules:o,...l}):r(e,{...l})}})};o.displayName=`Form.Password`;export{o as FormPassword};
2
+ //# sourceMappingURL=FormPassword.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormPassword.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormPassword.tsx"],"sourcesContent":["import { Controller, useFormContext } from 'react-hook-form';\n\nimport { PasswordInput } from '@/components/controls/password-input/PasswordInput';\nimport {\n type PasswordSegment,\n PasswordStrengthInput,\n} from '@/components/controls/password-input/PasswordStrengthInput';\nimport {\n type PasswordRuleDefinition,\n usePasswordRules,\n} from '@/components/controls/password-input/usePasswordRules';\n\nexport const FormPassword = ({\n $rule,\n isSubmitting = false,\n strengthBar = false,\n value,\n name,\n rules,\n ...props\n}: {\n $rule?: string;\n error?: string;\n isSubmitting?: boolean;\n strengthBar?: boolean;\n value?: string;\n name: string;\n rules?: PasswordRuleDefinition[];\n segments?: PasswordSegment[];\n}) => {\n const { t } = useFormContext() as unknown as {\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string;\n };\n\n return (\n <Controller\n name={name}\n defaultValue={value || ''}\n render={({ field: { value, ...fieldProps } }) => {\n const computedRules = usePasswordRules(value || '', rules || [], t);\n\n const mergedProps = {\n disabled: isSubmitting,\n value,\n ...props,\n ...fieldProps,\n };\n\n if (strengthBar) {\n return (\n <PasswordStrengthInput\n segments={[]}\n rules={computedRules}\n {...mergedProps}\n />\n );\n }\n return <PasswordInput {...mergedProps} />;\n }}\n />\n );\n};\n\nFormPassword.displayName = 'Form.Password';\n"],"mappings":"+WAYA,MAAa,GAAgB,CAC3B,QACA,eAAe,GACf,cAAc,GACd,QACA,OACA,QACA,GAAG,KAUC,CACJ,GAAM,CAAE,KAAM,GAAgB,CAQ9B,OACE,EAAC,EAAA,CACO,OACN,aAAc,GAAS,GACvB,QAAS,CAAE,MAAO,CAAE,QAAO,GAAG,MAAmB,CAC/C,IAAM,EAAgB,EAAiB,GAAS,GAAI,GAAS,EAAE,CAAE,EAAE,CAE7D,EAAc,CAClB,SAAU,EACV,QACA,GAAG,EACH,GAAG,EACJ,CAWD,OATI,EAEA,EAAC,EAAA,CACC,SAAU,EAAE,CACZ,MAAO,EACP,GAAI,GACJ,CAGC,EAAC,EAAA,CAAc,GAAI,EAAA,CAAe,GAE3C,EAIN,EAAa,YAAc"}
@@ -0,0 +1,9 @@
1
+ import { ButtonActionProps } from "../../buttons/button-action/ButtonAction.mjs";
2
+ import "../../buttons/index.mjs";
3
+ import "react/jsx-runtime";
4
+
5
+ //#region src/components/forms/controls/FormSubmit.d.ts
6
+ type FormSubmitProps = Omit<ButtonActionProps, 'loading'> & {};
7
+ //#endregion
8
+ export { FormSubmitProps };
9
+ //# sourceMappingURL=FormSubmit.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSubmit.d.mts","names":[],"sources":["../../../../src/components/forms/controls/FormSubmit.tsx"],"mappings":";;;;;KAIY,eAAA,GAAkB,IAAA,CAAK,iBAAA"}
@@ -0,0 +1,2 @@
1
+ import{ButtonAction as e}from"../../buttons/button-action/ButtonAction.mjs";import{jsx as t}from"react/jsx-runtime";import{useFormContext as n}from"react-hook-form";const r=({children:r,successText:i,...a})=>{let{formState:{isSubmitSuccessful:o,isSubmitting:s}}=n();return t(e,{type:`submit`,loading:s,successText:o?i:void 0,...a,children:r})};r.displayName=`Form.Submit`;export{r as FormSubmit};
2
+ //# sourceMappingURL=FormSubmit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSubmit.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormSubmit.tsx"],"sourcesContent":["import { useFormContext } from 'react-hook-form';\n\nimport { ButtonAction, type ButtonActionProps } from '@/components/buttons';\n\nexport type FormSubmitProps = Omit<ButtonActionProps, 'loading'> & {};\n\nexport const FormSubmit = ({\n children,\n successText,\n ...props\n}: FormSubmitProps) => {\n const {\n formState: { isSubmitSuccessful, isSubmitting },\n } = useFormContext();\n\n return (\n <ButtonAction\n type='submit'\n loading={isSubmitting}\n successText={isSubmitSuccessful ? successText : undefined}\n {...props}\n >\n {children}\n </ButtonAction>\n );\n};\n\nFormSubmit.displayName = 'Form.Submit';\n"],"mappings":"qKAMA,MAAa,GAAc,CACzB,WACA,cACA,GAAG,KACkB,CACrB,GAAM,CACJ,UAAW,CAAE,qBAAoB,iBAC/B,GAAgB,CAEpB,OACE,EAAC,EAAA,CACC,KAAK,SACL,QAAS,EACT,YAAa,EAAqB,EAAc,IAAA,GAChD,GAAI,EAEH,YACY,EAInB,EAAW,YAAc"}
@@ -0,0 +1,2 @@
1
+ import{TextInput as e}from"../../controls/text-input/TextInput.mjs";import{jsx as t}from"react/jsx-runtime";const n=({$rule:n,isSubmitting:r,...i})=>t(e,{disabled:r,type:`text`,...i});n.displayName=`Form.TextInput`;export{n as FormTextInput};
2
+ //# sourceMappingURL=FormTextInput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTextInput.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormTextInput.tsx"],"sourcesContent":["import {\n TextInput,\n type TextInputProps,\n} from '@/components/controls/text-input/TextInput';\n\nexport const FormTextInput = ({\n $rule,\n isSubmitting,\n ...props\n}: {\n $rule?: string;\n error?: string;\n isSubmitting?: boolean;\n} & TextInputProps) => {\n return <TextInput disabled={isSubmitting} type='text' {...props} />;\n};\n\nFormTextInput.displayName = 'Form.TextInput';\n"],"mappings":"4GAKA,MAAa,GAAiB,CAC5B,QACA,eACA,GAAG,KAMI,EAAC,EAAA,CAAU,SAAU,EAAc,KAAK,OAAO,GAAI,GAAS,CAGrE,EAAc,YAAc"}
@@ -0,0 +1,2 @@
1
+ import{Children as e,isValidElement as t}from"react";const n=(r,i)=>{let a=[];return e.forEach(r,e=>{if(!t(e))return;i.some(t=>{let n=e.type,r=t;return e.type===t||r.displayName===n.displayName})&&a.push(e);let r=e.props;if(r.children){let e=n(r.children,i);a.push(...e)}}),a};export{n as findFormComponents};
2
+ //# sourceMappingURL=find-form-components.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-form-components.mjs","names":[],"sources":["../../../../src/components/forms/controls/find-form-components.ts"],"sourcesContent":["import type React from 'react';\nimport { Children, isValidElement } from 'react';\n\ninterface ComponentWithDisplayName {\n displayName?: string;\n}\n\nexport const findFormComponents = (\n children: React.ReactNode,\n componentTypes: React.ComponentType[],\n): React.ReactElement[] => {\n const components: React.ReactElement[] = [];\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return;\n }\n\n if (\n componentTypes.some((type) => {\n const childType = child.type as ComponentWithDisplayName;\n const componentType = type as ComponentWithDisplayName;\n return (\n child.type === type ||\n componentType.displayName === childType.displayName\n );\n })\n ) {\n components.push(child);\n }\n\n const childProps = child.props as { children?: React.ReactNode };\n if (childProps.children) {\n const nestedComponents = findFormComponents(\n childProps.children,\n componentTypes,\n );\n components.push(...nestedComponents);\n }\n });\n\n return components;\n};\n"],"mappings":"qDAOA,MAAa,GACX,EACA,IACyB,CACzB,IAAM,EAAmC,EAAE,CA8B3C,OA5BA,EAAS,QAAQ,EAAW,GAAU,CACpC,GAAI,CAAC,EAAe,EAAM,CACxB,OAIA,EAAe,KAAM,GAAS,CAC5B,IAAM,EAAY,EAAM,KAClB,EAAgB,EACtB,OACE,EAAM,OAAS,GACf,EAAc,cAAgB,EAAU,aAE1C,EAEF,EAAW,KAAK,EAAM,CAGxB,IAAM,EAAa,EAAM,MACzB,GAAI,EAAW,SAAU,CACvB,IAAM,EAAmB,EACvB,EAAW,SACX,EACD,CACD,EAAW,KAAK,GAAG,EAAiB,GAEtC,CAEK"}
@@ -0,0 +1,2 @@
1
+ import{FormCheckbox as e}from"./FormCheckbox.mjs";import{FormHidden as t}from"./FormHidden.mjs";import{FormPassword as n}from"./FormPassword.mjs";import{FormSubmit as r}from"./FormSubmit.mjs";import{FormTextInput as i}from"./FormTextInput.mjs";const a=[r,i,n,t,e];export{a as controls};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/forms/controls/index.ts"],"sourcesContent":["import { FormCheckbox } from './FormCheckbox';\nimport { FormHidden } from './FormHidden';\nimport { FormPassword } from './FormPassword';\nimport { FormSubmit } from './FormSubmit';\nimport { FormTextInput } from './FormTextInput';\n\nexport const controls = [\n FormSubmit,\n FormTextInput,\n FormPassword,\n FormHidden,\n FormCheckbox,\n] as React.ComponentType[];\n"],"mappings":"oPAMA,MAAa,EAAW,CACtB,EACA,EACA,EACA,EACA,EACD"}
@@ -0,0 +1,2 @@
1
+ "use client";import{Fragment as e,jsx as t}from"react/jsx-runtime";import{Children as n,cloneElement as r,isValidElement as i}from"react";const a=(e,t,n)=>{if(e)try{let r=JSON.parse(e),i={...r.bindings,attribute:t},a=n?n(r.key,i,r.fallback):r.fallback;return String(a).replace(/{attribute}/g,t)}catch{return e.replace(/{attribute}/g,t)}},o=({children:o,register:s,componentTypes:c,errors:l={},t:u})=>{let d=e=>n.map(e,e=>{if(!i(e))return e;let t=e.props;if(c.some(t=>e.type===t)){let n=l[t.name??``]?.message?.toString(),i=t.name?a(n,t.name,u):void 0;return r(e,{...t.name&&{...s(t.name),error:i}})}return t.children?r(e,{children:d(t.children)}):e});return t(e,{children:d(o)})};export{o as RegisteredFormChildren};
2
+ //# sourceMappingURL=register-components.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-components.mjs","names":[],"sources":["../../../../src/components/forms/controls/register-components.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { Children, cloneElement, isValidElement } from 'react';\nimport type { FieldErrors, UseFormRegister } from 'react-hook-form';\n\ninterface TranslationMessage {\n key: string;\n bindings: Record<string, string>;\n fallback: string;\n}\n\nconst parseAndTranslate = (\n message: string | undefined,\n fieldName: string,\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode,\n): string | undefined => {\n if (!message) return undefined;\n\n try {\n const parsed: TranslationMessage = JSON.parse(message);\n const bindings = { ...parsed.bindings, attribute: fieldName };\n const result = t\n ? t(parsed.key, bindings, parsed.fallback)\n : parsed.fallback;\n return String(result).replace(/{attribute}/g, fieldName);\n } catch {\n return message.replace(/{attribute}/g, fieldName);\n }\n};\n\ninterface RegisteredFormChildrenProps {\n children: React.ReactNode;\n register: UseFormRegister<Record<string, unknown>>;\n componentTypes: React.ComponentType[];\n errors?: FieldErrors<Record<string, unknown>>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n}\n\nexport const RegisteredFormChildren = ({\n children,\n register,\n componentTypes,\n errors = {},\n t,\n}: RegisteredFormChildrenProps): React.ReactNode => {\n const processChildren = (nodes: React.ReactNode): React.ReactNode => {\n return Children.map(nodes, (child) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const childProps = child.props as {\n name?: string;\n children?: React.ReactNode;\n };\n\n if (\n componentTypes.some((type: React.ComponentType) => child.type === type)\n ) {\n const errorMessage = errors[childProps.name ?? '']?.message?.toString();\n const translatedError = childProps.name\n ? parseAndTranslate(errorMessage, childProps.name, t)\n : undefined;\n\n return cloneElement(child, {\n ...(childProps.name && {\n ...register(childProps.name),\n error: translatedError,\n }),\n } as Partial<typeof child.props>);\n }\n\n if (childProps.children) {\n return cloneElement(child, {\n children: processChildren(childProps.children),\n } as Partial<typeof child.props>);\n }\n\n return child;\n });\n };\n\n return <>{processChildren(children)}</>;\n};\n"],"mappings":"0IAYA,MAAM,GACJ,EACA,EACA,IAKuB,CAClB,KAEL,GAAI,CACF,IAAM,EAA6B,KAAK,MAAM,EAAQ,CAChD,EAAW,CAAE,GAAG,EAAO,SAAU,UAAW,EAAW,CACvD,EAAS,EACX,EAAE,EAAO,IAAK,EAAU,EAAO,SAAS,CACxC,EAAO,SACX,OAAO,OAAO,EAAO,CAAC,QAAQ,eAAgB,EAAU,MAClD,CACN,OAAO,EAAQ,QAAQ,eAAgB,EAAU,GAgBxC,GAA0B,CACrC,WACA,WACA,iBACA,SAAS,EAAE,CACX,OACkD,CAClD,IAAM,EAAmB,GAChB,EAAS,IAAI,EAAQ,GAAU,CACpC,GAAI,CAAC,EAAe,EAAM,CACxB,OAAO,EAGT,IAAM,EAAa,EAAM,MAKzB,GACE,EAAe,KAAM,GAA8B,EAAM,OAAS,EAAK,CACvE,CACA,IAAM,EAAe,EAAO,EAAW,MAAQ,KAAK,SAAS,UAAU,CACjE,EAAkB,EAAW,KAC/B,EAAkB,EAAc,EAAW,KAAM,EAAE,CACnD,IAAA,GAEJ,OAAO,EAAa,EAAO,CACzB,GAAI,EAAW,MAAQ,CACrB,GAAG,EAAS,EAAW,KAAK,CAC5B,MAAO,EACR,CACF,CAAgC,CASnC,OANI,EAAW,SACN,EAAa,EAAO,CACzB,SAAU,EAAgB,EAAW,SAAS,CAC/C,CAAgC,CAG5B,GACP,CAGJ,OAAO,EAAA,EAAA,CAAA,SAAG,EAAgB,EAAS,CAAA,CAAI"}
@@ -0,0 +1,3 @@
1
+ import { Form, FormProps } from "./Form.mjs";
2
+ import { PASSWORD_RULES } from "./rules/password-rules.mjs";
3
+ import { z } from "./rules/zod.mjs";
@@ -0,0 +1,2 @@
1
+ import{createRule as e}from"./create-rule.mjs";var t=e(`confirmed`,{fallback:`La confirmación no coincide.`,validate:()=>!0});export{t as default};
2
+ //# sourceMappingURL=confirmed.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmed.mjs","names":[],"sources":["../../../../src/components/forms/rules/confirmed.ts"],"sourcesContent":["import { createRule } from './create-rule';\n\n// This rule is a marker. The actual validation logic is handled in extract-form-rules.ts\n// to check against the _confirmation field at the object level.\nexport default createRule('confirmed', {\n fallback: 'La confirmación no coincide.',\n validate: () => true,\n});\n"],"mappings":"+CAIA,IAAA,EAAe,EAAW,YAAa,CACrC,SAAU,+BACV,aAAgB,GACjB,CAAC"}
@@ -0,0 +1 @@
1
+ import { ZodType } from "zod";
@@ -0,0 +1,2 @@
1
+ function e(e,t){return(n,...r)=>{let[i,a]=r,o=t.bindings?.(i)??{},s=JSON.stringify({key:t.key??e,bindings:o,fallback:t.fallback}),c=n.refine(n=>e!==`required`&&(n==null||n===``)?!0:t.validate(n,i),{message:a??s});return t.transform&&(c=c.transform(e=>t.transform?.(e,i))),c}}export{e as createRule};
2
+ //# sourceMappingURL=create-rule.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-rule.mjs","names":[],"sources":["../../../../src/components/forms/rules/create-rule.ts"],"sourcesContent":["import type { ZodType } from 'zod';\n\nexport type RuleDefinition = (schema: ZodType, ...args: unknown[]) => ZodType;\n\nexport type ValidateFn = (value: unknown, args?: unknown) => boolean;\nexport type TransformFn = (value: unknown, args?: unknown) => unknown;\n\nexport interface RuleConfig {\n key?: string;\n bindings?: (args?: unknown) => Record<string, string>;\n fallback: string;\n validate: ValidateFn;\n transform?: TransformFn;\n}\n\nexport function createRule(name: string, config: RuleConfig): RuleDefinition {\n return (schema, ...args) => {\n const [argsValue, customMessage] = args;\n const bindings = config.bindings?.(argsValue) ?? {};\n\n const defaultMessage = JSON.stringify({\n key: config.key ?? name,\n bindings,\n fallback: config.fallback,\n });\n\n let result = schema.refine(\n (val: unknown) => {\n if (\n name !== 'required' &&\n (val === undefined || val === null || val === '')\n ) {\n return true;\n }\n return config.validate(val, argsValue);\n },\n {\n message: (customMessage as string) ?? defaultMessage,\n },\n );\n\n if (config.transform) {\n result = result.transform((val: unknown) =>\n config.transform?.(val, argsValue),\n );\n }\n\n return result;\n };\n}\n"],"mappings":"AAeA,SAAgB,EAAW,EAAc,EAAoC,CAC3E,OAAQ,EAAQ,GAAG,IAAS,CAC1B,GAAM,CAAC,EAAW,GAAiB,EAC7B,EAAW,EAAO,WAAW,EAAU,EAAI,EAAE,CAE7C,EAAiB,KAAK,UAAU,CACpC,IAAK,EAAO,KAAO,EACnB,WACA,SAAU,EAAO,SAClB,CAAC,CAEE,EAAS,EAAO,OACjB,GAEG,IAAS,aACR,GAA6B,MAAQ,IAAQ,IAEvC,GAEF,EAAO,SAAS,EAAK,EAAU,CAExC,CACE,QAAU,GAA4B,EACvC,CACF,CAQD,OANI,EAAO,YACT,EAAS,EAAO,UAAW,GACzB,EAAO,YAAY,EAAK,EAAU,CACnC,EAGI"}
@@ -0,0 +1,2 @@
1
+ import{findFormComponents as e}from"../controls/find-form-components.mjs";import{PASSWORD_RULES as t}from"./password-rules.mjs";import n from"./password.mjs";import{parseRules as r}from"./zod.mjs";import{z as i}from"zod";const a=(e,t)=>{if(!e.name||!e.$rule?.includes(`confirmed`))return;let n=e.$rule.split(`|`).find(e=>e.startsWith(`confirmed`)),r=n?.includes(`:`)?n.split(`:`)[1]:`${e.name}_confirmation`;t.confirmedFields.push({field:e.name,target:r})},o=(e,t)=>{e.name&&(e.$rule?.includes(`required`)?(t.rules[e.name]=i.boolean().optional().or(i.literal(!1)),t.requiredBooleanFields.push(e.name)):t.rules[e.name]=i.boolean().optional())},s=(e,a)=>{if(!e.name)return;let o=i.string(),s=e.$rule?e.$rule.split(`|`).filter(e=>e.trim()!==`password`).join(`|`):``;s&&(o=r(s));let c=e.rules||(e.$rule?.includes(`password`)?t:[]);c.length>0&&(o=n(o,c));let l=!e.$rule||e.$rule.includes(`optional`)||s.includes(`optional`);a.rules[e.name]=l?o.optional():o},c=(e,t)=>{e.name&&(t.rules[e.name]=e.$rule?r(e.$rule):i.string().optional())},l=(e,t)=>t.confirmedFields.length===0&&t.requiredBooleanFields.length===0?e:e.superRefine((e,n)=>{t.confirmedFields.forEach(({field:t,target:r})=>{e[t]!==e[r]&&n.addIssue({code:i.ZodIssueCode.custom,message:JSON.stringify({key:`confirmed`,fallback:`La confirmación no coincide.`,bindings:{}}),path:[r]})}),t.requiredBooleanFields.forEach(t=>{e[t]!==!0&&n.addIssue({code:i.ZodIssueCode.custom,message:JSON.stringify({key:`required`,fallback:`El campo {attribute} es obligatorio.`,bindings:{}}),path:[t]})})}),u=(t,n)=>{let r={rules:{},confirmedFields:[],requiredBooleanFields:[]};return e(t,n).forEach(e=>{let t=e.props,n=e.type.displayName;t.name&&(a(t,r),n===`Form.Checkbox`?o(t,r):n===`Form.Password`?s(t,r):c(t,r))}),l(i.object(r.rules),r)};export{u as extractFormRules};
2
+ //# sourceMappingURL=extract-form-rules.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-form-rules.mjs","names":["passwordRule"],"sources":["../../../../src/components/forms/rules/extract-form-rules.ts"],"sourcesContent":["import type React from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { type ZodTypeAny, z } from 'zod';\n\nimport type { PasswordRuleDefinition } from '@/components/controls/password-input/usePasswordRules';\n\nimport { findFormComponents } from '../controls/find-form-components';\nimport passwordRule from './password';\nimport { PASSWORD_RULES } from './password-rules';\nimport { parseRules } from './zod';\n\ntype FormRuleContext = {\n rules: Record<string, ZodTypeAny>;\n confirmedFields: { field: string; target: string }[];\n requiredBooleanFields: string[];\n};\n\ntype ComponentProps = {\n name?: string;\n $rule?: string;\n rules?: PasswordRuleDefinition[];\n};\n\nconst processConfirmedRule = (\n props: ComponentProps,\n context: FormRuleContext,\n) => {\n if (!props.name || !props.$rule?.includes('confirmed')) return;\n\n const rulesList = props.$rule.split('|');\n const confirmedRule = rulesList.find((r) => r.startsWith('confirmed'));\n const target = confirmedRule?.includes(':')\n ? confirmedRule.split(':')[1]\n : `${props.name}_confirmation`;\n\n context.confirmedFields.push({ field: props.name, target });\n};\n\nconst processCheckbox = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n\n if (props.$rule?.includes('required')) {\n context.rules[props.name] = z.boolean().optional().or(z.literal(false));\n context.requiredBooleanFields.push(props.name);\n } else {\n context.rules[props.name] = z.boolean().optional();\n }\n};\n\nconst processPassword = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n\n let baseSchema: ZodTypeAny = z.string();\n const otherRules = props.$rule\n ? props.$rule\n .split('|')\n .filter((r) => r.trim() !== 'password')\n .join('|')\n : '';\n\n if (otherRules) {\n baseSchema = parseRules(otherRules);\n }\n\n const passwordRules =\n props.rules || (props.$rule?.includes('password') ? PASSWORD_RULES : []);\n\n if (passwordRules.length > 0) {\n baseSchema = passwordRule(baseSchema, passwordRules);\n }\n\n const isOptional =\n !props.$rule ||\n props.$rule.includes('optional') ||\n otherRules.includes('optional');\n\n context.rules[props.name] = isOptional ? baseSchema.optional() : baseSchema;\n};\n\nconst processDefault = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n context.rules[props.name] = props.$rule\n ? parseRules(props.$rule)\n : z.string().optional();\n};\n\nconst applyRefinements = (\n schema: z.ZodObject<FieldValues>,\n context: FormRuleContext,\n) => {\n if (\n context.confirmedFields.length === 0 &&\n context.requiredBooleanFields.length === 0\n ) {\n return schema;\n }\n\n return schema.superRefine((data, ctx) => {\n context.confirmedFields.forEach(({ field, target }) => {\n if (data[field] !== data[target]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: 'confirmed',\n fallback: 'La confirmación no coincide.',\n bindings: {},\n }),\n path: [target],\n });\n }\n });\n\n context.requiredBooleanFields.forEach((field) => {\n if (data[field] !== true) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: 'required',\n fallback: 'El campo {attribute} es obligatorio.',\n bindings: {},\n }),\n path: [field],\n });\n }\n });\n });\n};\n\nexport const extractFormRules = (\n children: React.ReactNode,\n componentTypes: React.ComponentType[],\n): ZodTypeAny => {\n const context: FormRuleContext = {\n rules: {},\n confirmedFields: [],\n requiredBooleanFields: [],\n };\n\n const components = findFormComponents(children, componentTypes);\n\n components.forEach((component) => {\n const props = component.props as ComponentProps;\n const displayName = (component.type as { displayName?: string })\n .displayName;\n\n if (props.name) {\n processConfirmedRule(props, context);\n\n if (displayName === 'Form.Checkbox') {\n processCheckbox(props, context);\n } else if (displayName === 'Form.Password') {\n processPassword(props, context);\n } else {\n processDefault(props, context);\n }\n }\n });\n\n return applyRefinements(z.object(context.rules), context);\n};\n"],"mappings":"6NAuBA,MAAM,GACJ,EACA,IACG,CACH,GAAI,CAAC,EAAM,MAAQ,CAAC,EAAM,OAAO,SAAS,YAAY,CAAE,OAGxD,IAAM,EADY,EAAM,MAAM,MAAM,IAAI,CACR,KAAM,GAAM,EAAE,WAAW,YAAY,CAAC,CAChE,EAAS,GAAe,SAAS,IAAI,CACvC,EAAc,MAAM,IAAI,CAAC,GACzB,GAAG,EAAM,KAAK,eAElB,EAAQ,gBAAgB,KAAK,CAAE,MAAO,EAAM,KAAM,SAAQ,CAAC,EAGvD,GAAmB,EAAuB,IAA6B,CACtE,EAAM,OAEP,EAAM,OAAO,SAAS,WAAW,EACnC,EAAQ,MAAM,EAAM,MAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAM,CAAC,CACvE,EAAQ,sBAAsB,KAAK,EAAM,KAAK,EAE9C,EAAQ,MAAM,EAAM,MAAQ,EAAE,SAAS,CAAC,UAAU,GAIhD,GAAmB,EAAuB,IAA6B,CAC3E,GAAI,CAAC,EAAM,KAAM,OAEjB,IAAI,EAAyB,EAAE,QAAQ,CACjC,EAAa,EAAM,MACrB,EAAM,MACH,MAAM,IAAI,CACV,OAAQ,GAAM,EAAE,MAAM,GAAK,WAAW,CACtC,KAAK,IAAI,CACZ,GAEA,IACF,EAAa,EAAW,EAAW,EAGrC,IAAM,EACJ,EAAM,QAAU,EAAM,OAAO,SAAS,WAAW,CAAG,EAAiB,EAAE,EAErE,EAAc,OAAS,IACzB,EAAaA,EAAa,EAAY,EAAc,EAGtD,IAAM,EACJ,CAAC,EAAM,OACP,EAAM,MAAM,SAAS,WAAW,EAChC,EAAW,SAAS,WAAW,CAEjC,EAAQ,MAAM,EAAM,MAAQ,EAAa,EAAW,UAAU,CAAG,GAG7D,GAAkB,EAAuB,IAA6B,CACrE,EAAM,OACX,EAAQ,MAAM,EAAM,MAAQ,EAAM,MAC9B,EAAW,EAAM,MAAM,CACvB,EAAE,QAAQ,CAAC,UAAU,GAGrB,GACJ,EACA,IAGE,EAAQ,gBAAgB,SAAW,GACnC,EAAQ,sBAAsB,SAAW,EAElC,EAGF,EAAO,aAAa,EAAM,IAAQ,CACvC,EAAQ,gBAAgB,SAAS,CAAE,QAAO,YAAa,CACjD,EAAK,KAAW,EAAK,IACvB,EAAI,SAAS,CACX,KAAM,EAAE,aAAa,OACrB,QAAS,KAAK,UAAU,CACtB,IAAK,YACL,SAAU,+BACV,SAAU,EAAE,CACb,CAAC,CACF,KAAM,CAAC,EAAO,CACf,CAAC,EAEJ,CAEF,EAAQ,sBAAsB,QAAS,GAAU,CAC3C,EAAK,KAAW,IAClB,EAAI,SAAS,CACX,KAAM,EAAE,aAAa,OACrB,QAAS,KAAK,UAAU,CACtB,IAAK,WACL,SAAU,uCACV,SAAU,EAAE,CACb,CAAC,CACF,KAAM,CAAC,EAAM,CACd,CAAC,EAEJ,EACF,CAGS,GACX,EACA,IACe,CACf,IAAM,EAA2B,CAC/B,MAAO,EAAE,CACT,gBAAiB,EAAE,CACnB,sBAAuB,EAAE,CAC1B,CAsBD,OApBmB,EAAmB,EAAU,EAAe,CAEpD,QAAS,GAAc,CAChC,IAAM,EAAQ,EAAU,MAClB,EAAe,EAAU,KAC5B,YAEC,EAAM,OACR,EAAqB,EAAO,EAAQ,CAEhC,IAAgB,gBAClB,EAAgB,EAAO,EAAQ,CACtB,IAAgB,gBACzB,EAAgB,EAAO,EAAQ,CAE/B,EAAe,EAAO,EAAQ,GAGlC,CAEK,EAAiB,EAAE,OAAO,EAAQ,MAAM,CAAE,EAAQ"}
@@ -0,0 +1,2 @@
1
+ import{createRule as e}from"./create-rule.mjs";function t(e){return typeof e==`string`?e.split(`,`).map(e=>e.trim()):Array.isArray(e)?e.map(String):[]}var n=e(`in`,{fallback:`El campo {attribute} debe ser uno de los siguientes valores: {values}.`,bindings:e=>({values:t(e).join(`, `)}),validate:(e,n)=>t(n).includes(String(e))});export{n as default};
2
+ //# sourceMappingURL=in.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in.mjs","names":[],"sources":["../../../../src/components/forms/rules/in.ts"],"sourcesContent":["import { createRule } from './create-rule';\n\nfunction parseValues(args: unknown): string[] {\n if (typeof args === 'string') {\n return args.split(',').map((v) => v.trim());\n }\n if (Array.isArray(args)) {\n return args.map(String);\n }\n return [];\n}\n\nexport default createRule('in', {\n fallback:\n 'El campo {attribute} debe ser uno de los siguientes valores: {values}.',\n bindings: (args) => ({ values: parseValues(args).join(', ') }),\n validate: (val, args) => parseValues(args).includes(String(val)),\n});\n"],"mappings":"+CAEA,SAAS,EAAY,EAAyB,CAO5C,OANI,OAAO,GAAS,SACX,EAAK,MAAM,IAAI,CAAC,IAAK,GAAM,EAAE,MAAM,CAAC,CAEzC,MAAM,QAAQ,EAAK,CACd,EAAK,IAAI,OAAO,CAElB,EAAE,CAGX,IAAA,EAAe,EAAW,KAAM,CAC9B,SACE,yEACF,SAAW,IAAU,CAAE,OAAQ,EAAY,EAAK,CAAC,KAAK,KAAK,CAAE,EAC7D,UAAW,EAAK,IAAS,EAAY,EAAK,CAAC,SAAS,OAAO,EAAI,CAAC,CACjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import e from"./password.mjs";import t from"./confirmed.mjs";import n from"./in.mjs";import r from"./numeric.mjs";import i from"./required.mjs";const a={required:i,numeric:r,in:n,password:e,confirmed:t};export{a as ruleDefinitions};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["inRule"],"sources":["../../../../src/components/forms/rules/index.ts"],"sourcesContent":["import type { PasswordRuleDefinition } from '@/components/controls/password-input/usePasswordRules';\n\nimport confirmed from './confirmed';\nimport type { RuleDefinition } from './create-rule';\nimport inRule from './in';\nimport numeric from './numeric';\nimport password from './password';\nimport required from './required';\n\nexport const ruleDefinitions: Record<string, RuleDefinition> = {\n required,\n numeric,\n in: inRule,\n password,\n confirmed,\n};\n\ndeclare module 'zod' {\n interface ZodString {\n required(message?: string): ZodString;\n numeric(message?: string): ZodString;\n in(values: string | string[], message?: string): ZodString;\n password(rules?: PasswordRuleDefinition[], message?: string): ZodString;\n confirmed(message?: string): ZodString;\n }\n}\n"],"mappings":"gJASA,MAAa,EAAkD,CAC7D,SAAA,EACA,QAAA,EACA,GAAIA,EACJ,SAAA,EACA,UAAA,EACD"}
@@ -0,0 +1,2 @@
1
+ import{createRule as e}from"./create-rule.mjs";var t=e(`numeric`,{fallback:`El campo {attribute} debe ser un número.`,validate:e=>e===``||!Number.isNaN(Number(e)),transform:e=>e===void 0||e===``?void 0:Number(e)});export{t as default};
2
+ //# sourceMappingURL=numeric.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeric.mjs","names":[],"sources":["../../../../src/components/forms/rules/numeric.ts"],"sourcesContent":["import { createRule } from './create-rule';\n\nexport default createRule('numeric', {\n fallback: 'El campo {attribute} debe ser un número.',\n validate: (val) => val === '' || !Number.isNaN(Number(val)),\n transform: (val) =>\n val === undefined || val === '' ? undefined : Number(val),\n});\n"],"mappings":"+CAEA,IAAA,EAAe,EAAW,UAAW,CACnC,SAAU,2CACV,SAAW,GAAQ,IAAQ,IAAM,CAAC,OAAO,MAAM,OAAO,EAAI,CAAC,CAC3D,UAAY,GACV,IAAQ,IAAA,IAAa,IAAQ,GAAK,IAAA,GAAY,OAAO,EAAI,CAC5D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { PasswordRuleDefinition } from "../../controls/password-input/usePasswordRules.mjs";
2
+
3
+ //#region src/components/forms/rules/password-rules.d.ts
4
+ declare const PASSWORD_RULES: PasswordRuleDefinition[];
5
+ //#endregion
6
+ export { PASSWORD_RULES };
7
+ //# sourceMappingURL=password-rules.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-rules.d.mts","names":[],"sources":["../../../../src/components/forms/rules/password-rules.ts"],"mappings":";;;cAEa,cAAA,EAAgB,sBAAA"}
@@ -0,0 +1,2 @@
1
+ const e=[{key:`password.rules.min`,text:`Mínimo 12 caracteres`,validate:e=>e.length>=12},{key:`password.rules.lower`,text:`Al menos una minúscula`,validate:e=>/[a-z]/.test(e)},{key:`password.rules.upper`,text:`Al menos una mayúscula`,validate:e=>/[A-Z]/.test(e)},{key:`password.rules.digit`,text:`Al menos un número`,validate:e=>/[0-9]/.test(e)},{key:`password.rules.symbol`,text:`Al menos un símbolo`,validate:e=>/[\W_]/.test(e)},{key:`password.rules.whitespace`,text:`Sin espacios en blanco`,validate:e=>!/\s/.test(e)}];export{e as PASSWORD_RULES};
2
+ //# sourceMappingURL=password-rules.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-rules.mjs","names":[],"sources":["../../../../src/components/forms/rules/password-rules.ts"],"sourcesContent":["import type { PasswordRuleDefinition } from '@/components/controls/password-input/usePasswordRules';\n\nexport const PASSWORD_RULES: PasswordRuleDefinition[] = [\n {\n key: 'password.rules.min',\n text: 'Mínimo 12 caracteres',\n validate: (v) => v.length >= 12,\n },\n {\n key: 'password.rules.lower',\n text: 'Al menos una minúscula',\n validate: (v) => /[a-z]/.test(v),\n },\n {\n key: 'password.rules.upper',\n text: 'Al menos una mayúscula',\n validate: (v) => /[A-Z]/.test(v),\n },\n {\n key: 'password.rules.digit',\n text: 'Al menos un número',\n validate: (v) => /[0-9]/.test(v),\n },\n {\n key: 'password.rules.symbol',\n text: 'Al menos un símbolo',\n validate: (v) => /[\\W_]/.test(v),\n },\n {\n key: 'password.rules.whitespace',\n text: 'Sin espacios en blanco',\n validate: (v) => !/\\s/.test(v),\n },\n];\n"],"mappings":"AAEA,MAAa,EAA2C,CACtD,CACE,IAAK,qBACL,KAAM,uBACN,SAAW,GAAM,EAAE,QAAU,GAC9B,CACD,CACE,IAAK,uBACL,KAAM,yBACN,SAAW,GAAM,QAAQ,KAAK,EAAE,CACjC,CACD,CACE,IAAK,uBACL,KAAM,yBACN,SAAW,GAAM,QAAQ,KAAK,EAAE,CACjC,CACD,CACE,IAAK,uBACL,KAAM,qBACN,SAAW,GAAM,QAAQ,KAAK,EAAE,CACjC,CACD,CACE,IAAK,wBACL,KAAM,sBACN,SAAW,GAAM,QAAQ,KAAK,EAAE,CACjC,CACD,CACE,IAAK,4BACL,KAAM,yBACN,SAAW,GAAM,CAAC,KAAK,KAAK,EAAE,CAC/B,CACF"}
@@ -0,0 +1,2 @@
1
+ import{PASSWORD_RULES as e}from"./password-rules.mjs";import{z as t}from"zod";var n=(n,r)=>n.superRefine((n,i)=>{n==null||n===``||typeof n==`string`&&(Array.isArray(r)?r:e).forEach(e=>{e.validate(n)||i.addIssue({code:t.ZodIssueCode.custom,message:JSON.stringify({key:e.key,fallback:e.text,bindings:{}})})})});export{n as default};
2
+ //# sourceMappingURL=password.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.mjs","names":[],"sources":["../../../../src/components/forms/rules/password.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport type { PasswordRuleDefinition } from '@/components/controls/password-input/usePasswordRules';\n\nimport type { RuleDefinition } from './create-rule';\nimport { PASSWORD_RULES } from './password-rules';\n\nconst password: RuleDefinition = (schema, rules) => {\n return schema.superRefine((val, ctx) => {\n if (val === undefined || val === null || val === '') {\n return;\n }\n\n if (typeof val !== 'string') {\n return;\n }\n\n const activeRules = Array.isArray(rules)\n ? (rules as PasswordRuleDefinition[])\n : PASSWORD_RULES;\n\n activeRules.forEach((rule) => {\n if (!rule.validate(val)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: rule.key,\n fallback: rule.text,\n bindings: {},\n }),\n });\n }\n });\n });\n};\n\nexport default password;\n"],"mappings":"8EAoCA,IAAA,GA7BkC,EAAQ,IACjC,EAAO,aAAa,EAAK,IAAQ,CAClC,GAA6B,MAAQ,IAAQ,IAI7C,OAAO,GAAQ,WAIC,MAAM,QAAQ,EAAM,CACnC,EACD,GAEQ,QAAS,GAAS,CACvB,EAAK,SAAS,EAAI,EACrB,EAAI,SAAS,CACX,KAAM,EAAE,aAAa,OACrB,QAAS,KAAK,UAAU,CACtB,IAAK,EAAK,IACV,SAAU,EAAK,KACf,SAAU,EAAE,CACb,CAAC,CACH,CAAC,EAEJ,EACF"}
@@ -0,0 +1,2 @@
1
+ import{createRule as e}from"./create-rule.mjs";var t=e(`required`,{fallback:`El campo {attribute} es obligatorio.`,validate:e=>typeof e==`string`?e.trim().length>0:e!=null});export{t as default};
2
+ //# sourceMappingURL=required.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"required.mjs","names":[],"sources":["../../../../src/components/forms/rules/required.ts"],"sourcesContent":["import { createRule } from './create-rule';\n\nexport default createRule('required', {\n fallback: 'El campo {attribute} es obligatorio.',\n validate: (val) => {\n if (typeof val === 'string') return val.trim().length > 0;\n return val !== null && val !== undefined;\n },\n});\n"],"mappings":"+CAEA,IAAA,EAAe,EAAW,WAAY,CACpC,SAAU,uCACV,SAAW,GACL,OAAO,GAAQ,SAAiB,EAAI,MAAM,CAAC,OAAS,EACjD,GAAQ,KAElB,CAAC"}