@stackcraftmx/calcita 0.52.0 → 0.54.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 (211) hide show
  1. package/README.md +109 -4
  2. package/dist/datePickers/DateInput.js +5 -3
  3. package/dist/datePickers/DateInput.js.map +1 -1
  4. package/dist/datePickers/DateTimeInput.js +6 -4
  5. package/dist/datePickers/DateTimeInput.js.map +1 -1
  6. package/dist/datePickers/FormDateField.js +1 -1
  7. package/dist/datePickers/FormDateField.js.map +1 -1
  8. package/dist/datePickers/FormDateTimeField.js +1 -1
  9. package/dist/datePickers/FormDateTimeField.js.map +1 -1
  10. package/dist/datePickers/FormMonthField.js +1 -1
  11. package/dist/datePickers/FormMonthField.js.map +1 -1
  12. package/dist/datePickers/FormTimeField.js +1 -1
  13. package/dist/datePickers/FormTimeField.js.map +1 -1
  14. package/dist/datePickers/MonthInput.js +5 -3
  15. package/dist/datePickers/MonthInput.js.map +1 -1
  16. package/dist/datePickers/PickerFrame.js +2 -2
  17. package/dist/datePickers/PickerFrame.js.map +1 -1
  18. package/dist/datePickers/TimeInput.js +6 -4
  19. package/dist/datePickers/TimeInput.js.map +1 -1
  20. package/dist/feedback/Toaster.js +11 -2
  21. package/dist/feedback/Toaster.js.map +1 -1
  22. package/dist/filepond/FileDropzone.js +60 -19
  23. package/dist/filepond/FileDropzone.js.map +1 -1
  24. package/dist/filepond/pondServer.js +86 -27
  25. package/dist/filepond/pondServer.js.map +1 -1
  26. package/dist/forms/CalcitaFormik.js +11 -0
  27. package/dist/forms/CalcitaFormik.js.map +1 -0
  28. package/dist/forms/FormAttachmentsField.js +1 -1
  29. package/dist/forms/FormAttachmentsField.js.map +1 -1
  30. package/dist/forms/FormCatalogField.js +1 -1
  31. package/dist/forms/FormCatalogField.js.map +1 -1
  32. package/dist/forms/FormCheckboxGroupField.js +1 -1
  33. package/dist/forms/FormCheckboxGroupField.js.map +1 -1
  34. package/dist/forms/FormColorField.js +1 -1
  35. package/dist/forms/FormColorField.js.map +1 -1
  36. package/dist/forms/FormFileField.js +1 -1
  37. package/dist/forms/FormFileField.js.map +1 -1
  38. package/dist/forms/FormFileUploadField.js +1 -1
  39. package/dist/forms/FormFileUploadField.js.map +1 -1
  40. package/dist/forms/FormImageField.js +1 -1
  41. package/dist/forms/FormImageField.js.map +1 -1
  42. package/dist/forms/FormMaskedField.js +1 -1
  43. package/dist/forms/FormMaskedField.js.map +1 -1
  44. package/dist/forms/FormNumberField.js +1 -1
  45. package/dist/forms/FormNumberField.js.map +1 -1
  46. package/dist/forms/FormSchemaProvider.js +17 -0
  47. package/dist/forms/FormSchemaProvider.js.map +1 -0
  48. package/dist/forms/FormSelectField.js +1 -1
  49. package/dist/forms/FormSelectField.js.map +1 -1
  50. package/dist/forms/FormTextField.js +1 -1
  51. package/dist/forms/FormTextField.js.map +1 -1
  52. package/dist/forms/FormTransferListField.js +1 -1
  53. package/dist/forms/FormTransferListField.js.map +1 -1
  54. package/dist/forms/FormWizard.js +2 -0
  55. package/dist/forms/FormWizard.js.map +1 -1
  56. package/dist/forms/schemaRequired.js +33 -0
  57. package/dist/forms/schemaRequired.js.map +1 -0
  58. package/dist/forms/useFormikField.js +18 -5
  59. package/dist/forms/useFormikField.js.map +1 -1
  60. package/dist/forms.js +52 -46
  61. package/dist/forms.js.map +1 -1
  62. package/dist/hookForm/FormAttachmentsField.js +1 -1
  63. package/dist/hookForm/FormAttachmentsField.js.map +1 -1
  64. package/dist/hookForm/FormCatalogField.js +1 -1
  65. package/dist/hookForm/FormCatalogField.js.map +1 -1
  66. package/dist/hookForm/FormCheckboxGroupField.js +1 -1
  67. package/dist/hookForm/FormCheckboxGroupField.js.map +1 -1
  68. package/dist/hookForm/FormColorField.js +1 -1
  69. package/dist/hookForm/FormColorField.js.map +1 -1
  70. package/dist/hookForm/FormFileField.js +1 -1
  71. package/dist/hookForm/FormFileField.js.map +1 -1
  72. package/dist/hookForm/FormFileUploadField.js +1 -1
  73. package/dist/hookForm/FormFileUploadField.js.map +1 -1
  74. package/dist/hookForm/FormImageField.js +1 -1
  75. package/dist/hookForm/FormImageField.js.map +1 -1
  76. package/dist/hookForm/FormMaskedField.js +1 -1
  77. package/dist/hookForm/FormMaskedField.js.map +1 -1
  78. package/dist/hookForm/FormNumberField.js +1 -1
  79. package/dist/hookForm/FormNumberField.js.map +1 -1
  80. package/dist/hookForm/FormSelectField.js +1 -1
  81. package/dist/hookForm/FormSelectField.js.map +1 -1
  82. package/dist/hookForm/FormTextField.js +1 -1
  83. package/dist/hookForm/FormTextField.js.map +1 -1
  84. package/dist/hookForm/FormTransferListField.js +1 -1
  85. package/dist/hookForm/FormTransferListField.js.map +1 -1
  86. package/dist/hookForm/FormWizard.js +2 -0
  87. package/dist/hookForm/FormWizard.js.map +1 -1
  88. package/dist/hookForm/useHookFormField.js +9 -3
  89. package/dist/hookForm/useHookFormField.js.map +1 -1
  90. package/dist/index.js +6 -2
  91. package/dist/index.js.map +1 -1
  92. package/dist/inputs/CatalogInput.js +3 -2
  93. package/dist/inputs/CatalogInput.js.map +1 -1
  94. package/dist/inputs/CheckboxGroupInput.js +2 -1
  95. package/dist/inputs/CheckboxGroupInput.js.map +1 -1
  96. package/dist/inputs/ColorInput.js +3 -1
  97. package/dist/inputs/ColorInput.js.map +1 -1
  98. package/dist/inputs/FieldFrame.js +18 -3
  99. package/dist/inputs/FieldFrame.js.map +1 -1
  100. package/dist/inputs/FormSection.js +42 -11
  101. package/dist/inputs/FormSection.js.map +1 -1
  102. package/dist/inputs/NumberInput.js +3 -1
  103. package/dist/inputs/NumberInput.js.map +1 -1
  104. package/dist/inputs/SelectInput.js +3 -1
  105. package/dist/inputs/SelectInput.js.map +1 -1
  106. package/dist/inputs/TextInput.js +1 -1
  107. package/dist/inputs/TextInput.js.map +1 -1
  108. package/dist/inputs/TransferListInput.js +2 -1
  109. package/dist/inputs/TransferListInput.js.map +1 -1
  110. package/dist/inputs/WizardLayout.js +12 -6
  111. package/dist/inputs/WizardLayout.js.map +1 -1
  112. package/dist/inputs/formLayoutContext.js +7 -2
  113. package/dist/inputs/formLayoutContext.js.map +1 -1
  114. package/dist/inputs/requiredMark.js +17 -0
  115. package/dist/inputs/requiredMark.js.map +1 -0
  116. package/dist/locales/en.js +2 -0
  117. package/dist/locales/en.js.map +1 -1
  118. package/dist/locales/es.js +2 -0
  119. package/dist/locales/es.js.map +1 -1
  120. package/dist/richText/FormRichTextField.js +1 -1
  121. package/dist/richText/FormRichTextField.js.map +1 -1
  122. package/dist/richText/RichTextEditor.js +4 -3
  123. package/dist/richText/RichTextEditor.js.map +1 -1
  124. package/dist/toolkit/ToolkitProvider.js +3 -0
  125. package/dist/toolkit/ToolkitProvider.js.map +1 -1
  126. package/dist/toolkit/toolkitContext.js.map +1 -1
  127. package/dist/types/datePickers/DateInput.d.ts +2 -0
  128. package/dist/types/datePickers/DateTimeInput.d.ts +2 -0
  129. package/dist/types/datePickers/FormDateField.d.ts +3 -3
  130. package/dist/types/datePickers/FormDateTimeField.d.ts +3 -3
  131. package/dist/types/datePickers/FormMonthField.d.ts +3 -3
  132. package/dist/types/datePickers/FormTimeField.d.ts +3 -3
  133. package/dist/types/datePickers/MonthInput.d.ts +2 -0
  134. package/dist/types/datePickers/PickerFrame.d.ts +3 -1
  135. package/dist/types/datePickers/TimeInput.d.ts +2 -0
  136. package/dist/types/feedback/Toaster.d.ts +15 -1
  137. package/dist/types/feedback/index.d.ts +1 -1
  138. package/dist/types/filepond/FileDropzone.d.ts +5 -0
  139. package/dist/types/filepond/chunkedUpload.d.ts +122 -0
  140. package/dist/types/filepond/pondServer.d.ts +25 -3
  141. package/dist/types/forms/CalcitaFormik.d.ts +6 -0
  142. package/dist/types/forms/FormAttachmentsField.d.ts +3 -3
  143. package/dist/types/forms/FormCatalogField.d.ts +2 -2
  144. package/dist/types/forms/FormCheckboxGroupField.d.ts +3 -3
  145. package/dist/types/forms/FormColorField.d.ts +2 -2
  146. package/dist/types/forms/FormFileField.d.ts +3 -3
  147. package/dist/types/forms/FormFileUploadField.d.ts +3 -3
  148. package/dist/types/forms/FormImageField.d.ts +3 -3
  149. package/dist/types/forms/FormMaskedField.d.ts +2 -2
  150. package/dist/types/forms/FormNumberField.d.ts +2 -2
  151. package/dist/types/forms/FormSchemaProvider.d.ts +13 -0
  152. package/dist/types/forms/FormSelectField.d.ts +2 -2
  153. package/dist/types/forms/FormTextField.d.ts +2 -2
  154. package/dist/types/forms/FormTransferListField.d.ts +3 -3
  155. package/dist/types/forms/FormWizard.d.ts +3 -1
  156. package/dist/types/forms/index.d.ts +1 -0
  157. package/dist/types/forms/schemaRequired.d.ts +14 -0
  158. package/dist/types/forms/useFormikField.d.ts +10 -4
  159. package/dist/types/forms.d.ts +4 -2
  160. package/dist/types/hookForm/FormAttachmentsField.d.ts +3 -3
  161. package/dist/types/hookForm/FormCatalogField.d.ts +3 -3
  162. package/dist/types/hookForm/FormCheckboxGroupField.d.ts +3 -3
  163. package/dist/types/hookForm/FormColorField.d.ts +3 -3
  164. package/dist/types/hookForm/FormFileField.d.ts +3 -3
  165. package/dist/types/hookForm/FormFileUploadField.d.ts +3 -3
  166. package/dist/types/hookForm/FormImageField.d.ts +3 -3
  167. package/dist/types/hookForm/FormMaskedField.d.ts +3 -3
  168. package/dist/types/hookForm/FormNumberField.d.ts +3 -3
  169. package/dist/types/hookForm/FormSelectField.d.ts +3 -3
  170. package/dist/types/hookForm/FormTextField.d.ts +3 -3
  171. package/dist/types/hookForm/FormTransferListField.d.ts +3 -3
  172. package/dist/types/hookForm/FormWizard.d.ts +3 -1
  173. package/dist/types/hookForm/useHookFormField.d.ts +8 -4
  174. package/dist/types/index.d.ts +3 -2
  175. package/dist/types/inputs/CatalogInput.d.ts +1 -0
  176. package/dist/types/inputs/CheckboxGroupInput.d.ts +1 -0
  177. package/dist/types/inputs/ColorInput.d.ts +1 -0
  178. package/dist/types/inputs/FieldFrame.d.ts +1 -0
  179. package/dist/types/inputs/FormSection.d.ts +13 -0
  180. package/dist/types/inputs/NumberInput.d.ts +1 -0
  181. package/dist/types/inputs/SelectInput.d.ts +1 -0
  182. package/dist/types/inputs/TextInput.d.ts +1 -1
  183. package/dist/types/inputs/TransferListInput.d.ts +1 -0
  184. package/dist/types/inputs/WizardLayout.d.ts +1 -0
  185. package/dist/types/inputs/formLayoutContext.d.ts +8 -1
  186. package/dist/types/inputs/requiredMark.d.ts +9 -0
  187. package/dist/types/locales/en.d.ts +2 -0
  188. package/dist/types/locales/es.d.ts +2 -0
  189. package/dist/types/richText/FormRichTextField.d.ts +3 -3
  190. package/dist/types/richText/RichTextEditor.d.ts +1 -0
  191. package/dist/types/toolkit/ToolkitProvider.d.ts +5 -1
  192. package/dist/types/toolkit/toolkitContext.d.ts +2 -1
  193. package/dist/types/upload/AttachmentsInput.d.ts +2 -0
  194. package/dist/types/upload/FileInput.d.ts +1 -0
  195. package/dist/types/upload/FileUploadInput.d.ts +1 -0
  196. package/dist/types/upload/ImageInput.d.ts +1 -0
  197. package/dist/types/upload/chunkedUpload.d.ts +189 -0
  198. package/dist/types/upload/uploadWithProgress.d.ts +4 -2
  199. package/dist/upload/AttachmentsInput.js +2 -1
  200. package/dist/upload/AttachmentsInput.js.map +1 -1
  201. package/dist/upload/FileInput.js +2 -1
  202. package/dist/upload/FileInput.js.map +1 -1
  203. package/dist/upload/FileUploadInput.js +2 -1
  204. package/dist/upload/FileUploadInput.js.map +1 -1
  205. package/dist/upload/ImageInput.js +2 -1
  206. package/dist/upload/ImageInput.js.map +1 -1
  207. package/dist/upload/chunkedUpload.js +261 -0
  208. package/dist/upload/chunkedUpload.js.map +1 -0
  209. package/dist/upload/uploadWithProgress.js +8 -3
  210. package/dist/upload/uploadWithProgress.js.map +1 -1
  211. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"toolkitContext.js","sources":["../../src/toolkit/toolkitContext.js"],"sourcesContent":["// El contexto de ToolkitProvider y los hooks que lo leen. Vive aparte del proveedor (que es .jsx) para que los hooks se\n// importen desde archivos .js sin arrastrar JSX.\n//\n// Hooks genéricos: function (regla de la casa).\nimport {createContext, useContext} from 'react';\nimport {allowOnlyUnrestricted} from '@/access/accessRules.js';\nimport {browserNavigation} from '@/toolkit/browserNavigation.js';\nimport {toolkitSettings} from '@/toolkit/toolkitSettings.js';\n\nexport const ToolkitContext = createContext(null);\n\n/**\n * La configuración del proveedor; sin proveedor, la vigente con la navegación del navegador.\n *\n * @returns {{language: string, onLanguageChange: Function|null, texts: object, translate: Function|null, timeZone: string, currency: string, hourCycle: 'h23'|'h12', appName: string, buildId: string, navigation: object, canAccess: Function}}\n */\nexport function useToolkitSettings() {\n const settings = useContext(ToolkitContext);\n\n return settings ?? {...toolkitSettings(), onLanguageChange: null, navigation: browserNavigation, canAccess: allowOnlyUnrestricted};\n}\n\n/**\n * La navegación que conectó el proyecto: {useNavigate, useLocation, Link}.\n *\n * @returns {{useNavigate: Function, useLocation: Function, Link: import('react').ElementType}}\n */\nexport function useToolkitNavigation() {\n return useToolkitSettings().navigation;\n}\n"],"names":[],"mappings":";;;;;AASY,MAAC,iBAAiB,cAAc,IAAI;AAOzC,SAAS,qBAAqB;AACjC,QAAM,WAAW,WAAW,cAAc;AAE1C,SAAO,YAAY,EAAC,GAAG,mBAAmB,kBAAkB,MAAM,YAAY,mBAAmB,WAAW,sBAAqB;AACrI;AAOO,SAAS,uBAAuB;AACnC,SAAO,mBAAkB,EAAG;AAChC;"}
1
+ {"version":3,"file":"toolkitContext.js","sources":["../../src/toolkit/toolkitContext.js"],"sourcesContent":["// El contexto de ToolkitProvider y los hooks que lo leen. Vive aparte del proveedor (que es .jsx) para que los hooks se\n// importen desde archivos .js sin arrastrar JSX.\n//\n// Hooks genéricos: function (regla de la casa).\nimport {createContext, useContext} from 'react';\nimport {allowOnlyUnrestricted} from '@/access/accessRules.js';\nimport {browserNavigation} from '@/toolkit/browserNavigation.js';\nimport {toolkitSettings} from '@/toolkit/toolkitSettings.js';\n\nexport const ToolkitContext = createContext(null);\n\n/**\n * La configuración del proveedor; sin proveedor, la vigente con la navegación del navegador.\n *\n * @returns {{language: string, onLanguageChange: Function|null, requiredFromSchema?: boolean, texts: object, translate: Function|null, timeZone: string, currency: string, hourCycle: 'h23'|'h12', appName: string, buildId: string, navigation: object, canAccess: Function}}\n */\nexport function useToolkitSettings() {\n const settings = useContext(ToolkitContext);\n\n return settings ?? {...toolkitSettings(), onLanguageChange: null, navigation: browserNavigation, canAccess: allowOnlyUnrestricted};\n}\n\n/**\n * La navegación que conectó el proyecto: {useNavigate, useLocation, Link}.\n *\n * @returns {{useNavigate: Function, useLocation: Function, Link: import('react').ElementType}}\n */\nexport function useToolkitNavigation() {\n return useToolkitSettings().navigation;\n}\n"],"names":[],"mappings":";;;;;AASY,MAAC,iBAAiB,cAAc,IAAI;AAOzC,SAAS,qBAAqB;AACjC,QAAM,WAAW,WAAW,cAAc;AAE1C,SAAO,YAAY,EAAC,GAAG,mBAAmB,kBAAkB,MAAM,YAAY,mBAAmB,WAAW,sBAAqB;AACrI;AAOO,SAAS,uBAAuB;AACnC,SAAO,mBAAkB,EAAG;AAChC;"}
@@ -17,6 +17,8 @@ declare const DateInput: (props: {
17
17
  disablePast?: boolean;
18
18
  openTo?: 'day' | 'month' | 'year';
19
19
  disabled?: boolean;
20
+ format?: string;
21
+ required?: boolean;
20
22
  inputRef?: import('react').Ref<HTMLInputElement>;
21
23
  pickerProps?: object;
22
24
  messages?: Record<string, string | object>;
@@ -19,6 +19,8 @@ declare const DateTimeInput: (props: {
19
19
  showTimeZone?: boolean;
20
20
  timeZoneLabel?: string;
21
21
  disabled?: boolean;
22
+ format?: string;
23
+ required?: boolean;
22
24
  inputRef?: import('react').Ref<HTMLInputElement>;
23
25
  pickerProps?: object;
24
26
  messages?: Record<string, string | object>;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('./DateInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * DateInput (minDate, maxDate, disableFuture, openTo…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('./DateInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('./DateInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * DateInput (minDate, maxDate, disableFuture, openTo…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormDateField({ name, ...dateInputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('./DateInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('./DateInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('./DateInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('./DateTimeInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * DateTimeInput (minDateTime, minimumMinutesFromNow, disablePast, minutesStep, timeZone…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('./DateTimeInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('./DateTimeInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * DateTimeInput (minDateTime, minimumMinutesFromNow, disablePast, minutesStep, timeZone…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormDateTimeField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('./DateTimeInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('./DateTimeInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('./DateTimeInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('./MonthInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * MonthInput (minMonth, maxMonth, disableFuture…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('./MonthInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('./MonthInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * MonthInput (minMonth, maxMonth, disableFuture…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormMonthField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('./MonthInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('./MonthInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('./MonthInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('./TimeInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * TimeInput (minTime, maxTime, minutesStep…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('./TimeInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('./TimeInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * TimeInput (minTime, maxTime, minutesStep…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormTimeField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('./TimeInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('./TimeInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('./TimeInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -14,6 +14,8 @@ declare const MonthInput: (props: {
14
14
  disableFuture?: boolean;
15
15
  disablePast?: boolean;
16
16
  disabled?: boolean;
17
+ format?: string;
18
+ required?: boolean;
17
19
  inputRef?: import('react').Ref<HTMLInputElement>;
18
20
  pickerProps?: object;
19
21
  messages?: Record<string, string | object>;
@@ -12,11 +12,13 @@ export declare function textFieldSlotPropsOf(textField: object, pickerProps?: ob
12
12
  * @param {string} props.inputId
13
13
  * @param {import('react').ReactNode} props.label ya traducida
14
14
  * @param {string} props.language el del proveedor más cercano
15
+ * @param {boolean} [props.required] el asterisco en la etiqueta
15
16
  * @param {import('react').ReactNode} props.children el selector de MUI X
16
17
  */
17
- export default function PickerFrame({ inputId, label, language, children }: {
18
+ export default function PickerFrame({ inputId, label, language, required, children }: {
18
19
  inputId: string;
19
20
  label: import('react').ReactNode;
20
21
  language: string;
22
+ required?: boolean;
21
23
  children: import('react').ReactNode;
22
24
  }): import("react").JSX.Element;
@@ -13,6 +13,8 @@ declare const TimeInput: (props: {
13
13
  maxTime?: string;
14
14
  minutesStep?: number;
15
15
  disabled?: boolean;
16
+ format?: string;
17
+ required?: boolean;
16
18
  inputRef?: import('react').Ref<HTMLInputElement>;
17
19
  pickerProps?: object;
18
20
  messages?: Record<string, string | object>;
@@ -1 +1,15 @@
1
- export default function Toaster(): import("react").JSX.Element;
1
+ /** Dónde salen los avisos (los nombres de sonner). */
2
+ export declare const TOASTER_POSITION: Readonly<{
3
+ topLeft: "top-left";
4
+ topCenter: "top-center";
5
+ topRight: "top-right";
6
+ bottomLeft: "bottom-left";
7
+ bottomCenter: "bottom-center";
8
+ bottomRight: "bottom-right";
9
+ }>;
10
+ /**
11
+ * @param {import('sonner').ToasterProps} props lo de sonner, tal cual (https://sonner.emilkowal.ski/toaster: duration,
12
+ * offset, mobileOffset, visibleToasts, toastOptions…). Por omisión: position abajo a la izquierda (uno de
13
+ * TOASTER_POSITION), richColors y closeButton sí, y theme el modo de MUI que se ve en pantalla
14
+ */
15
+ export default function Toaster({ position, richColors, closeButton, ...sonnerProps }: import('sonner').ToasterProps): import("react").JSX.Element;
@@ -2,7 +2,7 @@ export { default as ConfirmDialog } from './ConfirmDialog.js';
2
2
  export { default as ModalWaiting } from './ModalWaiting.js';
3
3
  export { NEW_BUILD_NOTICE_VARIANT, default as NewBuildNotice } from './NewBuildNotice.js';
4
4
  export { default as StaleBuildBoundary } from './StaleBuildBoundary.js';
5
- export { default as Toaster } from './Toaster.js';
5
+ export { TOASTER_POSITION, default as Toaster } from './Toaster.js';
6
6
  export { confirmActionMachine } from './confirmActionMachine.js';
7
7
  export { TOAST_DEFAULT_OPTIONS, dismissToast, errorsObjectToMessage, toastDefault, toastError, toastInfo, toastLoading, toastProblem, toastPromise, toastSuccess, toastWarn, } from './toast.js';
8
8
  export { useConfirmAction } from './useConfirmAction.js';
@@ -27,6 +27,11 @@ declare const FileDropzone: (props: {
27
27
  total: number;
28
28
  }) => void;
29
29
  onReject?: (file: File | null, reason: string, message?: string) => void;
30
+ chunkUploads?: boolean;
31
+ chunkForce?: boolean;
32
+ chunkSize?: number | string;
33
+ chunkRetryDelays?: number[] | null;
34
+ pondProps?: Partial<import('filepond').FilePondOptions> | null;
30
35
  actions?: import('react').ReactNode;
31
36
  children?: import('react').ReactNode;
32
37
  sx?: object;
@@ -0,0 +1,122 @@
1
+ /** Los headers del protocolo de trozos de FilePond. */
2
+ export declare const CHUNK_HEADER: Readonly<{
3
+ length: "Upload-Length";
4
+ offset: "Upload-Offset";
5
+ name: "Upload-Name";
6
+ contentType: "Content-Type";
7
+ }>;
8
+ /** Por qué no se pudo subir: el servidor dijo que no, no contestó, o no dio el folio de la subida. */
9
+ export declare const UPLOAD_FAILURE: Readonly<{
10
+ rejected: "rejected";
11
+ noResponse: "noResponse";
12
+ noTransferId: "noTransferId";
13
+ }>;
14
+ /** Una subida que no salió: el motivo (UPLOAD_FAILURE) y la respuesta del servidor, si la hubo. */
15
+ export declare class UploadFailure extends Error {
16
+ reason: string;
17
+ response: Response | null;
18
+ /**
19
+ * @param {string} reason de UPLOAD_FAILURE
20
+ * @param {Response|null} [response]
21
+ */
22
+ constructor(reason: string, response?: Response | null);
23
+ }
24
+ /**
25
+ * Los trozos de un archivo: dónde empieza y dónde acaba cada uno. Un archivo vacío es un trozo vacío: el servidor igual
26
+ * necesita saber que el archivo llegó completo.
27
+ *
28
+ * @param {number} fileSize en bytes
29
+ * @param {number} chunkSize en bytes
30
+ * @returns {{index: number, offset: number, end: number}[]}
31
+ */
32
+ export declare function chunkPiecesOf(fileSize: number, chunkSize: number): {
33
+ index: number;
34
+ offset: number;
35
+ end: number;
36
+ }[];
37
+ /**
38
+ * Lo que la barra puede decir que ya subió: lo que el servidor confirmó más lo que va en camino del trozo de ahora, sin
39
+ * llegar al final hasta que el servidor confirma el último trozo.
40
+ *
41
+ * @param {{confirmedBytes: number, sendingBytes: number, totalBytes: number}} transfer
42
+ * @returns {number} bytes
43
+ */
44
+ export declare function honestLoadedOf({ confirmedBytes, sendingBytes, totalBytes }: {
45
+ confirmedBytes: number;
46
+ sendingBytes: number;
47
+ totalBytes: number;
48
+ }): number;
49
+ /**
50
+ * Hasta dónde ya está guardado el archivo cuando el servidor dice su Upload-Offset: el final del último trozo COMPLETO antes
51
+ * de ese punto. Un trozo que quedó a medias se vuelve a mandar entero.
52
+ *
53
+ * @param {{offset: number, end: number}[]} pieces
54
+ * @param {number} serverOffset
55
+ * @returns {number}
56
+ */
57
+ export declare function storedBytesOf(pieces: {
58
+ offset: number;
59
+ end: number;
60
+ }[], serverOffset: number): number;
61
+ /**
62
+ * Un texto listo para viajar en un header. Los headers solo llevan bytes: el texto va en UTF-8 byte por byte (lo mismo que
63
+ * FilePond hace con los suyos). Sin esto, un nombre con «–» o con un emoji tumba la petición y uno con acentos llega roto.
64
+ *
65
+ * @param {unknown} value
66
+ * @returns {string}
67
+ */
68
+ export declare function headerTextOf(value: unknown): string;
69
+ export type PondSendRequest = (url: string, body: FormData | Blob | null, options: {
70
+ method: string;
71
+ headers: Record<string, string>;
72
+ withCredentials: boolean;
73
+ signal: AbortSignal;
74
+ onProgress?: (percent: number, transfer: {
75
+ loaded: number;
76
+ total: number;
77
+ }) => void;
78
+ }) => Promise<Response>;
79
+ /**
80
+ * @typedef {(url: string, body: FormData|Blob|null, options: {method: string, headers: Record<string, string>, withCredentials: boolean, signal: AbortSignal, onProgress?: (percent: number, transfer: {loaded: number, total: number}) => void}) => Promise<Response>} PondSendRequest
81
+ * cómo viaja cada petición: la misma forma que uploadWithProgress de la casa
82
+ */
83
+ /**
84
+ * Sube un archivo por trozos (ver el encabezado). Regresa la subida en curso: done termina con el folio que dio el servidor
85
+ * y abort la cancela de verdad (la petición de ahora y los reintentos que esperaban).
86
+ *
87
+ * @param {object} options
88
+ * @param {Blob} options.file
89
+ * @param {string} options.fileName el que viaja en Upload-Name
90
+ * @param {string} options.fieldName el campo del primer POST: lleva los metadatos en JSON, como FilePond
91
+ * @param {object|null} [options.metadata]
92
+ * @param {string} options.url a dónde va el POST que pide el folio
93
+ * @param {string} options.patchUrl a dónde va cada trozo: el folio va pegado al final ('/subidas?patch=')
94
+ * @param {Record<string, unknown>} [options.headers] van en las tres peticiones (Authorization, los datos de la pantalla)
95
+ * @param {boolean} [options.withCredentials]
96
+ * @param {number} options.chunkSize en bytes
97
+ * @param {number[]|null} [options.retryDelays] las esperas entre reintentos, en milisegundos; null o [] = sin reintentos
98
+ * @param {string|null} [options.transferId] el folio de un intento anterior: se sigue desde donde se quedó
99
+ * @param {(transferId: string) => void} [options.onTransferId] el folio nuevo, para retomar si algo falla
100
+ * @param {(loaded: number, total: number) => void} [options.onProgress] lo honesto (ver honestLoadedOf), en bytes
101
+ * @param {PondSendRequest} options.sendRequest
102
+ * @returns {{done: Promise<string>, abort: () => void}}
103
+ */
104
+ export declare function startChunkedUpload(options: {
105
+ file: Blob;
106
+ fileName: string;
107
+ fieldName: string;
108
+ metadata?: object | null;
109
+ url: string;
110
+ patchUrl: string;
111
+ headers?: Record<string, unknown>;
112
+ withCredentials?: boolean;
113
+ chunkSize: number;
114
+ retryDelays?: number[] | null;
115
+ transferId?: string | null;
116
+ onTransferId?: (transferId: string) => void;
117
+ onProgress?: (loaded: number, total: number) => void;
118
+ sendRequest: PondSendRequest;
119
+ }): {
120
+ done: Promise<string>;
121
+ abort: () => void;
122
+ };
@@ -1,16 +1,38 @@
1
+ /**
2
+ * ¿Este archivo va por trozos? La regla de FilePond: la zona los pidió y el archivo pasa del tamaño del trozo, o la zona los
3
+ * fuerza para todos (hay servidores que solo reciben por trozos).
4
+ *
5
+ * @param {Blob} file
6
+ * @param {{chunkUploads?: boolean, chunkForce?: boolean, chunkSize?: number}} options lo que FilePond le pasa al server
7
+ * @returns {boolean}
8
+ */
9
+ export declare function usesChunks(file: Blob, options: {
10
+ chunkUploads?: boolean;
11
+ chunkForce?: boolean;
12
+ chunkSize?: number;
13
+ }): boolean;
1
14
  /**
2
15
  * @param {object} options
3
- * @param {string} options.url a dónde va cada archivo
16
+ * @param {string} options.url a dónde va cada archivo (por trozos: el POST que pide el folio)
4
17
  * @param {string} [options.fieldName] el campo del archivo en el FormData; por omisión el name de la zona
5
- * @param {Record<string, string>} [options.headers] p. ej. Authorization
18
+ * @param {Record<string, string>} [options.headers] p. ej. Authorization; por trozos van en las tres peticiones
6
19
  * @param {boolean} [options.withCredentials] manda las cookies a otro dominio
20
+ * @param {string} [options.patchUrl] por trozos: a dónde va cada trozo, con el folio pegado al final. Por omisión, el de
21
+ * FilePond: url + '?patch='
22
+ * @param {(body: any, response: Response) => any} [options.toProblem] el error del backend a la forma RFC 9457 (Laravel:
23
+ * body => ({title: body.message}))
24
+ * @param {import('../upload/chunkedUpload.js').UploadSendRequest} [options.sendRequest] cómo viaja cada petición; por omisión
25
+ * uploadWithProgress de la casa
7
26
  * @returns {{process: (...args: any[]) => any, revert: (...args: any[]) => any}} lo que recibe la prop server de FileDropzone
8
27
  */
9
- export declare function createPondServer({ url, fieldName, headers, withCredentials }: {
28
+ export declare function createPondServer({ url, fieldName, headers, withCredentials, patchUrl, toProblem, sendRequest }: {
10
29
  url: string;
11
30
  fieldName?: string;
12
31
  headers?: Record<string, string>;
13
32
  withCredentials?: boolean;
33
+ patchUrl?: string;
34
+ toProblem?: (body: any, response: Response) => any;
35
+ sendRequest?: import('../upload/chunkedUpload.js').UploadSendRequest;
14
36
  }): {
15
37
  process: (...args: any[]) => any;
16
38
  revert: (...args: any[]) => any;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @template {import('formik').FormikValues} Values
3
+ * @param {import('formik').FormikConfig<Values>} props las de Formik de formik
4
+ * @returns {import('react').JSX.Element}
5
+ */
6
+ export default function Formik<Values extends import('formik').FormikValues>(props: import('formik').FormikConfig<Values>): import('react').JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * AttachmentsInput (accept, maxFiles, maxTotalSize, template…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * AttachmentsInput (accept, maxFiles, maxTotalSize, template…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormAttachmentsField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/CatalogInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de CatalogInput (options, formatLabel, loading…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/CatalogInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/CatalogInput.js').default>[0], 'onChange'|'onBlur'>>} props las de CatalogInput (options, formatLabel, loading…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
3
3
  */
4
4
  export default function FormCatalogField({ name, ...catalogInputProps }: {
5
5
  name: string;
6
- } & Omit<Parameters<typeof import('../inputs/CatalogInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
6
+ } & Omit<Parameters<typeof import('../inputs/CatalogInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/CatalogInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/CheckboxGroupInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * CheckboxGroupInput, sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/CheckboxGroupInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/CheckboxGroupInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * CheckboxGroupInput, sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormCheckboxGroupField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../inputs/CheckboxGroupInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../inputs/CheckboxGroupInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/CheckboxGroupInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/ColorInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de ColorInput (checkContrast…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/ColorInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/ColorInput.js').default>[0], 'onChange'|'onBlur'>>} props las de ColorInput (checkContrast…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
3
3
  */
4
4
  export default function FormColorField({ name, ...colorInputProps }: {
5
5
  name: string;
6
- } & Omit<Parameters<typeof import('../inputs/ColorInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
6
+ } & Omit<Parameters<typeof import('../inputs/ColorInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/ColorInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../upload/FileInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * FileInput (accept, maxSize, template…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../upload/FileInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../upload/FileInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * FileInput (accept, maxSize, template…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormFileField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../upload/FileInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../upload/FileInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../upload/FileInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../upload/FileUploadInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * FileUploadInput (upload, accept, maxSize, download…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../upload/FileUploadInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../upload/FileUploadInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * FileUploadInput (upload, accept, maxSize, download…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormFileUploadField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../upload/FileUploadInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../upload/FileUploadInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../upload/FileUploadInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../upload/ImageInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * ImageInput (shape, size, maxSize…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../upload/ImageInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../upload/ImageInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * ImageInput (shape, size, maxSize…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormImageField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../upload/ImageInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../upload/ImageInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../upload/ImageInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/MaskedInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/MaskedInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/MaskedInput.js').default>[0], 'onChange'|'onBlur'>>} props
3
3
  * las de MaskedInput (mask, label, helperText, placeholder…)
4
4
  */
5
5
  export default function FormMaskedField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../inputs/MaskedInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../inputs/MaskedInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/MaskedInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/NumberInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de NumberInput (decimals, prefix, suffix, allowNegative…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/NumberInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/NumberInput.js').default>[0], 'onChange'|'onBlur'>>} props las de NumberInput (decimals, prefix, suffix, allowNegative…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
3
3
  */
4
4
  export default function FormNumberField({ name, ...numberInputProps }: {
5
5
  name: string;
6
- } & Omit<Parameters<typeof import('../inputs/NumberInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
6
+ } & Omit<Parameters<typeof import('../inputs/NumberInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/NumberInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ /** El esquema del formulario más cercano (o la función que lo da, como en formik); null sin él. */
2
+ export declare const FormSchemaContext: import("react").Context<unknown>;
3
+ /** El esquema del formulario más cercano; null sin él. */
4
+ export declare const useFormSchema: () => unknown;
5
+ /**
6
+ * @param {object} props
7
+ * @param {unknown} props.schema el mismo validationSchema que recibe Formik
8
+ * @param {import('react').ReactNode} props.children los campos
9
+ */
10
+ export declare function FormSchemaProvider({ schema, children }: {
11
+ schema: unknown;
12
+ children: import('react').ReactNode;
13
+ }): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/SelectInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de SelectInput, sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/SelectInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/SelectInput.js').default>[0], 'onChange'|'onBlur'>>} props las de SelectInput, sin value ni error (su onChange y su onBlur corren después de los del formulario)
3
3
  */
4
4
  export default function FormSelectField({ name, ...selectInputProps }: {
5
5
  name: string;
6
- } & Omit<Parameters<typeof import('../inputs/SelectInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
6
+ } & Omit<Parameters<typeof import('../inputs/SelectInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/SelectInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de TextInput, sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'onChange'|'onBlur'>>} props las de TextInput, sin value ni error (su onChange y su onBlur corren después de los del formulario)
3
3
  */
4
4
  export default function FormTextField({ name, ...textInputProps }: {
5
5
  name: string;
6
- } & Omit<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
6
+ } & Omit<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * TransferListInput, sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * TransferListInput, sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormTransferListField({ name, ...inputProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -9,13 +9,14 @@
9
9
  * @param {boolean} [props.steps[].completed] lleva la palomita (cuando los títulos se pulsan, solo si la pantalla lo dice)
10
10
  * @param {string} props.submitLabel ya traducido: el botón del último paso
11
11
  * @param {'horizontal'|'vertical'} [props.orientation] uno de WIZARD_ORIENTATION; por omisión horizontal
12
+ * @param {boolean} [props.hideBackOnFirstStep] en el primer paso no se pinta «Anterior»; por omisión sale apagado, como antes
12
13
  * @param {string} [props.initialStepKey] la llave del paso en el que se abre (la que diga el servidor); por omisión el primero
13
14
  * @param {'none'|'free'|'checked'} [props.stepSelection] uno de WIZARD_STEP_SELECTION: si el título de otro paso se pulsa y qué
14
15
  * revisa antes; por omisión none (se avanza con «Siguiente», como siempre)
15
16
  * @param {(stepKey: string, index: number) => void} [props.onStepChange] cada vez que cambia el paso abierto
16
17
  * @param {object} [props.texts] los textos que cambian, con la forma de `common`: {wizard: {next, back, skip, optional, skipped, stepOf}}
17
18
  */
18
- export default function FormWizard({ steps, submitLabel, orientation, initialStepKey, stepSelection, onStepChange, texts, ...unknownProps }: {
19
+ export default function FormWizard({ steps, submitLabel, orientation, hideBackOnFirstStep, initialStepKey, stepSelection, onStepChange, texts, ...unknownProps }: {
19
20
  steps: {
20
21
  key: string;
21
22
  label: string;
@@ -26,6 +27,7 @@ export default function FormWizard({ steps, submitLabel, orientation, initialSte
26
27
  }[];
27
28
  submitLabel: string;
28
29
  orientation?: 'horizontal' | 'vertical';
30
+ hideBackOnFirstStep?: boolean;
29
31
  initialStepKey?: string;
30
32
  stepSelection?: 'none' | 'free' | 'checked';
31
33
  onStepChange?: (stepKey: string, index: number) => void;
@@ -25,5 +25,6 @@ export { RECOVERY_CODE_PATTERN, TOTP_CODE_PATTERN, normalizeRecoveryCode, normal
25
25
  export { default as SubmitButton } from './SubmitButton.js';
26
26
  export { applyServerProblem } from './applyServerProblem.js';
27
27
  export { formLevelMessageOf, splitRowFieldErrors, splitServerFieldErrors } from './serverProblemFields.js';
28
+ export { isRequiredInSchema } from './schemaRequired.js';
28
29
  export { useFormikField } from './useFormikField.js';
29
30
  export { Yup, buildYupLocale, translateValidationMessage } from './validation.js';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Las partes de un nombre de campo de formik: 'contacts.2.email' y 'contacts[2].email' dan ['contacts', '2', 'email'].
3
+ *
4
+ * @param {string} name
5
+ * @returns {string[]}
6
+ */
7
+ export declare function fieldPathOf(name: string): string[];
8
+ /**
9
+ * @param {unknown} schema el validationSchema del formulario (un esquema de yup o una función que lo da, como en formik)
10
+ * @param {string} name el campo, con la forma de formik ('contacts.2.email')
11
+ * @param {object} [values] los valores del formulario, para las condiciones (.when)
12
+ * @returns {boolean} false si no hay esquema, si no es de yup o si el campo no está en él
13
+ */
14
+ export declare function isRequiredInSchema(schema: unknown, name: string, values?: object): boolean;
@@ -1,11 +1,17 @@
1
1
  /**
2
2
  * @param {string} name el campo del formulario
3
- * @returns {{name: string, value: unknown, onChange: (value: unknown) => void, onBlur: () => void, error: unknown}}
3
+ * @param {{required?: boolean, onChange?: Function, onBlur?: Function}} [screen] lo que la pantalla le dijo al campo
4
+ * @returns {{name: string, value: unknown, onChange: (value: unknown, ...rest: unknown[]) => void, onBlur: (...args: unknown[]) => void, error: unknown, required: boolean}}
4
5
  */
5
- export declare function useFormikField(name: string): {
6
+ export declare function useFormikField(name: string, screen?: {
7
+ required?: boolean;
8
+ onChange?: Function;
9
+ onBlur?: Function;
10
+ }): {
6
11
  name: string;
7
12
  value: unknown;
8
- onChange: (value: unknown) => void;
9
- onBlur: () => void;
13
+ onChange: (value: unknown, ...rest: unknown[]) => void;
14
+ onBlur: (...args: unknown[]) => void;
10
15
  error: unknown;
16
+ required: boolean;
11
17
  };
@@ -1,2 +1,4 @@
1
- export { FieldArray, Form, Formik, useField, useFormikContext } from 'formik';
2
- export { ChangePasswordForm, ForgotPasswordForm, FormAttachmentsField, FormCatalogField, FormCheckboxGroupField, FormColorField, FormFileField, FormFileUploadField, FormImageField, FormMaskedField, FormNumberField, FormProblemAlert, FormRepeatingFields, FormSelectField, FormServerProblem, FormTransferListField, FormTextField, FormWizard, RECOVERY_CODE_PATTERN, SECOND_STEP_METHOD, SecondStepForm, SignInForm, SubmitButton, TOTP_CODE_PATTERN, TwoStepVerificationCard, Yup, applyServerProblem, buildYupLocale, formLevelMessageOf, normalizeRecoveryCode, normalizeTotpCode, listTotalAtMostRule, listTotalOf, orderedInListRule, percentRule, sameAsFieldRule, splitRowFieldErrors, splitServerFieldErrors, translateValidationMessage, uniqueInListRule, useFormikField, } from './forms/index.js';
1
+ export { FieldArray, Form, useField, useFormikContext } from 'formik';
2
+ export { default as Formik } from './forms/CalcitaFormik.js';
3
+ export { FormSchemaProvider, useFormSchema } from './forms/FormSchemaProvider.js';
4
+ export { ChangePasswordForm, ForgotPasswordForm, FormAttachmentsField, FormCatalogField, FormCheckboxGroupField, FormColorField, FormFileField, FormFileUploadField, FormImageField, FormMaskedField, FormNumberField, FormProblemAlert, FormRepeatingFields, FormSelectField, FormServerProblem, FormTransferListField, FormTextField, FormWizard, RECOVERY_CODE_PATTERN, SECOND_STEP_METHOD, SecondStepForm, SignInForm, SubmitButton, TOTP_CODE_PATTERN, TwoStepVerificationCard, Yup, applyServerProblem, buildYupLocale, formLevelMessageOf, isRequiredInSchema, normalizeRecoveryCode, normalizeTotpCode, listTotalAtMostRule, listTotalOf, orderedInListRule, percentRule, sameAsFieldRule, splitRowFieldErrors, splitServerFieldErrors, translateValidationMessage, uniqueInListRule, useFormikField, } from './forms/index.js';
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @param {{name: string, control?: object} & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin
3
- * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider
2
+ * @param {{name: string, control?: object} & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'onChange'|'onBlur'>>} props las del campo de la casa, sin
3
+ * value ni error (su onChange y su onBlur corren después de los del formulario); control: el de useForm, si la pantalla no usa FormProvider
4
4
  */
5
5
  export default function FormAttachmentsField({ name, control, ...inputProps }: {
6
6
  name: string;
7
7
  control?: object;
8
- } & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
8
+ } & Omit<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('../upload/AttachmentsInput.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;