@stackcraftmx/calcita 0.51.0 → 0.53.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 (214) hide show
  1. package/README.md +73 -6
  2. package/cli/calcita.js +4 -2
  3. package/cli/checkTexts.js +66 -9
  4. package/dist/appShell/BarActionButton.js.map +1 -1
  5. package/dist/datePickers/DateInput.js +5 -3
  6. package/dist/datePickers/DateInput.js.map +1 -1
  7. package/dist/datePickers/DateTimeInput.js +6 -4
  8. package/dist/datePickers/DateTimeInput.js.map +1 -1
  9. package/dist/datePickers/FormDateField.js +1 -1
  10. package/dist/datePickers/FormDateField.js.map +1 -1
  11. package/dist/datePickers/FormDateTimeField.js +1 -1
  12. package/dist/datePickers/FormDateTimeField.js.map +1 -1
  13. package/dist/datePickers/FormMonthField.js +1 -1
  14. package/dist/datePickers/FormMonthField.js.map +1 -1
  15. package/dist/datePickers/FormTimeField.js +1 -1
  16. package/dist/datePickers/FormTimeField.js.map +1 -1
  17. package/dist/datePickers/MonthInput.js +5 -3
  18. package/dist/datePickers/MonthInput.js.map +1 -1
  19. package/dist/datePickers/PickerFrame.js +2 -2
  20. package/dist/datePickers/PickerFrame.js.map +1 -1
  21. package/dist/datePickers/TimeInput.js +6 -4
  22. package/dist/datePickers/TimeInput.js.map +1 -1
  23. package/dist/feedback/Toaster.js +11 -2
  24. package/dist/feedback/Toaster.js.map +1 -1
  25. package/dist/forms/CalcitaFormik.js +11 -0
  26. package/dist/forms/CalcitaFormik.js.map +1 -0
  27. package/dist/forms/FormAttachmentsField.js +1 -1
  28. package/dist/forms/FormAttachmentsField.js.map +1 -1
  29. package/dist/forms/FormCatalogField.js +1 -1
  30. package/dist/forms/FormCatalogField.js.map +1 -1
  31. package/dist/forms/FormCheckboxGroupField.js +1 -1
  32. package/dist/forms/FormCheckboxGroupField.js.map +1 -1
  33. package/dist/forms/FormColorField.js +1 -1
  34. package/dist/forms/FormColorField.js.map +1 -1
  35. package/dist/forms/FormFileField.js +1 -1
  36. package/dist/forms/FormFileField.js.map +1 -1
  37. package/dist/forms/FormFileUploadField.js +1 -1
  38. package/dist/forms/FormFileUploadField.js.map +1 -1
  39. package/dist/forms/FormImageField.js +1 -1
  40. package/dist/forms/FormImageField.js.map +1 -1
  41. package/dist/forms/FormMaskedField.js +1 -1
  42. package/dist/forms/FormMaskedField.js.map +1 -1
  43. package/dist/forms/FormNumberField.js +1 -1
  44. package/dist/forms/FormNumberField.js.map +1 -1
  45. package/dist/forms/FormSchemaProvider.js +17 -0
  46. package/dist/forms/FormSchemaProvider.js.map +1 -0
  47. package/dist/forms/FormSelectField.js +1 -1
  48. package/dist/forms/FormSelectField.js.map +1 -1
  49. package/dist/forms/FormTextField.js +1 -1
  50. package/dist/forms/FormTextField.js.map +1 -1
  51. package/dist/forms/FormTransferListField.js +1 -1
  52. package/dist/forms/FormTransferListField.js.map +1 -1
  53. package/dist/forms/FormWizard.js +23 -6
  54. package/dist/forms/FormWizard.js.map +1 -1
  55. package/dist/forms/schemaRequired.js +33 -0
  56. package/dist/forms/schemaRequired.js.map +1 -0
  57. package/dist/forms/useFormikField.js +18 -5
  58. package/dist/forms/useFormikField.js.map +1 -1
  59. package/dist/forms.js +52 -46
  60. package/dist/forms.js.map +1 -1
  61. package/dist/hookForm/FormAttachmentsField.js +1 -1
  62. package/dist/hookForm/FormAttachmentsField.js.map +1 -1
  63. package/dist/hookForm/FormCatalogField.js +1 -1
  64. package/dist/hookForm/FormCatalogField.js.map +1 -1
  65. package/dist/hookForm/FormCheckboxGroupField.js +1 -1
  66. package/dist/hookForm/FormCheckboxGroupField.js.map +1 -1
  67. package/dist/hookForm/FormColorField.js +1 -1
  68. package/dist/hookForm/FormColorField.js.map +1 -1
  69. package/dist/hookForm/FormFileField.js +1 -1
  70. package/dist/hookForm/FormFileField.js.map +1 -1
  71. package/dist/hookForm/FormFileUploadField.js +1 -1
  72. package/dist/hookForm/FormFileUploadField.js.map +1 -1
  73. package/dist/hookForm/FormImageField.js +1 -1
  74. package/dist/hookForm/FormImageField.js.map +1 -1
  75. package/dist/hookForm/FormMaskedField.js +1 -1
  76. package/dist/hookForm/FormMaskedField.js.map +1 -1
  77. package/dist/hookForm/FormNumberField.js +1 -1
  78. package/dist/hookForm/FormNumberField.js.map +1 -1
  79. package/dist/hookForm/FormSelectField.js +1 -1
  80. package/dist/hookForm/FormSelectField.js.map +1 -1
  81. package/dist/hookForm/FormTextField.js +1 -1
  82. package/dist/hookForm/FormTextField.js.map +1 -1
  83. package/dist/hookForm/FormTransferListField.js +1 -1
  84. package/dist/hookForm/FormTransferListField.js.map +1 -1
  85. package/dist/hookForm/FormWizard.js +21 -5
  86. package/dist/hookForm/FormWizard.js.map +1 -1
  87. package/dist/hookForm/useHookFormField.js +9 -3
  88. package/dist/hookForm/useHookFormField.js.map +1 -1
  89. package/dist/index.js +12 -3
  90. package/dist/index.js.map +1 -1
  91. package/dist/inputs/CatalogInput.js +3 -2
  92. package/dist/inputs/CatalogInput.js.map +1 -1
  93. package/dist/inputs/CheckboxGroupInput.js +2 -1
  94. package/dist/inputs/CheckboxGroupInput.js.map +1 -1
  95. package/dist/inputs/ColorInput.js +3 -1
  96. package/dist/inputs/ColorInput.js.map +1 -1
  97. package/dist/inputs/FieldFrame.js +18 -3
  98. package/dist/inputs/FieldFrame.js.map +1 -1
  99. package/dist/inputs/FormSection.js +42 -11
  100. package/dist/inputs/FormSection.js.map +1 -1
  101. package/dist/inputs/NumberInput.js +3 -1
  102. package/dist/inputs/NumberInput.js.map +1 -1
  103. package/dist/inputs/SelectInput.js +3 -1
  104. package/dist/inputs/SelectInput.js.map +1 -1
  105. package/dist/inputs/TextInput.js +1 -1
  106. package/dist/inputs/TextInput.js.map +1 -1
  107. package/dist/inputs/TransferListInput.js +2 -1
  108. package/dist/inputs/TransferListInput.js.map +1 -1
  109. package/dist/inputs/WizardLayout.js +51 -17
  110. package/dist/inputs/WizardLayout.js.map +1 -1
  111. package/dist/inputs/formLayoutContext.js +7 -2
  112. package/dist/inputs/formLayoutContext.js.map +1 -1
  113. package/dist/inputs/requiredMark.js +17 -0
  114. package/dist/inputs/requiredMark.js.map +1 -0
  115. package/dist/inputs/useWizardSteps.js +36 -0
  116. package/dist/inputs/useWizardSteps.js.map +1 -0
  117. package/dist/inputs/wizardSteps.js +32 -0
  118. package/dist/inputs/wizardSteps.js.map +1 -0
  119. package/dist/locales/en.js +1 -0
  120. package/dist/locales/en.js.map +1 -1
  121. package/dist/locales/es.js +1 -0
  122. package/dist/locales/es.js.map +1 -1
  123. package/dist/richText/FormRichTextField.js +1 -1
  124. package/dist/richText/FormRichTextField.js.map +1 -1
  125. package/dist/richText/RichTextEditor.js +4 -3
  126. package/dist/richText/RichTextEditor.js.map +1 -1
  127. package/dist/toolkit/ToolkitProvider.js +3 -0
  128. package/dist/toolkit/ToolkitProvider.js.map +1 -1
  129. package/dist/toolkit/toolkitContext.js.map +1 -1
  130. package/dist/types/appShell/BarActionButton.d.ts +1 -0
  131. package/dist/types/datePickers/DateInput.d.ts +2 -0
  132. package/dist/types/datePickers/DateTimeInput.d.ts +2 -0
  133. package/dist/types/datePickers/FormDateField.d.ts +3 -3
  134. package/dist/types/datePickers/FormDateTimeField.d.ts +3 -3
  135. package/dist/types/datePickers/FormMonthField.d.ts +3 -3
  136. package/dist/types/datePickers/FormTimeField.d.ts +3 -3
  137. package/dist/types/datePickers/MonthInput.d.ts +2 -0
  138. package/dist/types/datePickers/PickerFrame.d.ts +3 -1
  139. package/dist/types/datePickers/TimeInput.d.ts +2 -0
  140. package/dist/types/feedback/Toaster.d.ts +15 -1
  141. package/dist/types/feedback/index.d.ts +1 -1
  142. package/dist/types/forms/CalcitaFormik.d.ts +6 -0
  143. package/dist/types/forms/FormAttachmentsField.d.ts +3 -3
  144. package/dist/types/forms/FormCatalogField.d.ts +2 -2
  145. package/dist/types/forms/FormCheckboxGroupField.d.ts +3 -3
  146. package/dist/types/forms/FormColorField.d.ts +2 -2
  147. package/dist/types/forms/FormFileField.d.ts +3 -3
  148. package/dist/types/forms/FormFileUploadField.d.ts +3 -3
  149. package/dist/types/forms/FormImageField.d.ts +3 -3
  150. package/dist/types/forms/FormMaskedField.d.ts +2 -2
  151. package/dist/types/forms/FormNumberField.d.ts +2 -2
  152. package/dist/types/forms/FormSchemaProvider.d.ts +13 -0
  153. package/dist/types/forms/FormSelectField.d.ts +2 -2
  154. package/dist/types/forms/FormTextField.d.ts +2 -2
  155. package/dist/types/forms/FormTransferListField.d.ts +3 -3
  156. package/dist/types/forms/FormWizard.d.ts +14 -1
  157. package/dist/types/forms/index.d.ts +1 -0
  158. package/dist/types/forms/schemaRequired.d.ts +14 -0
  159. package/dist/types/forms/useFormikField.d.ts +10 -4
  160. package/dist/types/forms.d.ts +4 -2
  161. package/dist/types/hookForm/FormAttachmentsField.d.ts +3 -3
  162. package/dist/types/hookForm/FormCatalogField.d.ts +3 -3
  163. package/dist/types/hookForm/FormCheckboxGroupField.d.ts +3 -3
  164. package/dist/types/hookForm/FormColorField.d.ts +3 -3
  165. package/dist/types/hookForm/FormFileField.d.ts +3 -3
  166. package/dist/types/hookForm/FormFileUploadField.d.ts +3 -3
  167. package/dist/types/hookForm/FormImageField.d.ts +3 -3
  168. package/dist/types/hookForm/FormMaskedField.d.ts +3 -3
  169. package/dist/types/hookForm/FormNumberField.d.ts +3 -3
  170. package/dist/types/hookForm/FormSelectField.d.ts +3 -3
  171. package/dist/types/hookForm/FormTextField.d.ts +3 -3
  172. package/dist/types/hookForm/FormTransferListField.d.ts +3 -3
  173. package/dist/types/hookForm/FormWizard.d.ts +14 -1
  174. package/dist/types/hookForm/useHookFormField.d.ts +8 -4
  175. package/dist/types/index.d.ts +4 -3
  176. package/dist/types/inputs/CatalogInput.d.ts +1 -0
  177. package/dist/types/inputs/CheckboxGroupInput.d.ts +1 -0
  178. package/dist/types/inputs/ColorInput.d.ts +1 -0
  179. package/dist/types/inputs/FieldFrame.d.ts +1 -0
  180. package/dist/types/inputs/FormSection.d.ts +13 -0
  181. package/dist/types/inputs/NumberInput.d.ts +1 -0
  182. package/dist/types/inputs/SelectInput.d.ts +1 -0
  183. package/dist/types/inputs/TextInput.d.ts +1 -1
  184. package/dist/types/inputs/TransferListInput.d.ts +1 -0
  185. package/dist/types/inputs/WizardLayout.d.ts +6 -2
  186. package/dist/types/inputs/formLayoutContext.d.ts +8 -1
  187. package/dist/types/inputs/requiredMark.d.ts +9 -0
  188. package/dist/types/inputs/useWizardSteps.d.ts +23 -0
  189. package/dist/types/inputs/wizardSteps.d.ts +65 -0
  190. package/dist/types/locales/en.d.ts +1 -0
  191. package/dist/types/locales/es.d.ts +1 -0
  192. package/dist/types/richText/FormRichTextField.d.ts +3 -3
  193. package/dist/types/richText/RichTextEditor.d.ts +1 -0
  194. package/dist/types/toolkit/ToolkitProvider.d.ts +5 -1
  195. package/dist/types/toolkit/toolkitContext.d.ts +2 -1
  196. package/dist/types/ui/cards/RecordCard.d.ts +12 -0
  197. package/dist/types/ui/index.d.ts +1 -1
  198. package/dist/types/ui/navigation/BackButton.d.ts +1 -0
  199. package/dist/types/upload/AttachmentsInput.d.ts +2 -0
  200. package/dist/types/upload/FileInput.d.ts +1 -0
  201. package/dist/types/upload/FileUploadInput.d.ts +1 -0
  202. package/dist/types/upload/ImageInput.d.ts +1 -0
  203. package/dist/ui/cards/RecordCard.js +6 -2
  204. package/dist/ui/cards/RecordCard.js.map +1 -1
  205. package/dist/ui/navigation/BackButton.js.map +1 -1
  206. package/dist/upload/AttachmentsInput.js +2 -1
  207. package/dist/upload/AttachmentsInput.js.map +1 -1
  208. package/dist/upload/FileInput.js +2 -1
  209. package/dist/upload/FileInput.js.map +1 -1
  210. package/dist/upload/FileUploadInput.js +2 -1
  211. package/dist/upload/FileUploadInput.js.map +1 -1
  212. package/dist/upload/ImageInput.js +2 -1
  213. package/dist/upload/ImageInput.js.map +1 -1
  214. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @param {{name: string, control?: object} & Omit<Parameters<typeof import('../inputs/TextInput.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('../inputs/TextInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/TextInput.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 FormTextField({ name, control, ...inputProps }: {
6
6
  name: string;
7
7
  control?: object;
8
- } & Omit<Parameters<typeof import('../inputs/TextInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
8
+ } & 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,8 +1,8 @@
1
1
  /**
2
- * @param {{name: string, control?: object} & Omit<Parameters<typeof import('../inputs/TransferListInput.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('../inputs/TransferListInput.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('../inputs/TransferListInput.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 FormTransferListField({ name, control, ...inputProps }: {
6
6
  name: string;
7
7
  control?: object;
8
- } & Omit<Parameters<typeof import('../inputs/TransferListInput.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
8
+ } & 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;
@@ -6,17 +6,30 @@
6
6
  * @param {string[]} [props.steps[].fields] los campos del paso (los que revisa «Siguiente»)
7
7
  * @param {boolean} [props.steps[].optional] se puede omitir
8
8
  * @param {import('react').ReactNode} props.steps[].content los campos del paso
9
+ * @param {boolean} [props.steps[].completed] lleva la palomita (cuando los títulos se pulsan, solo si la pantalla lo dice)
9
10
  * @param {string} props.submitLabel ya traducido: el botón del último paso
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
13
+ * @param {string} [props.initialStepKey] la llave del paso en el que se abre (la que diga el servidor); por omisión el primero
14
+ * @param {'none'|'free'|'checked'} [props.stepSelection] uno de WIZARD_STEP_SELECTION: si el título de otro paso se pulsa y qué
15
+ * revisa antes; por omisión none (se avanza con «Siguiente», como siempre)
16
+ * @param {(stepKey: string, index: number) => void} [props.onStepChange] cada vez que cambia el paso abierto
10
17
  * @param {object} [props.texts] los textos que cambian, con la forma de `common`: {wizard: {next, back, skip, optional, skipped, stepOf}}
11
18
  */
12
- export default function FormWizard({ steps, submitLabel, texts, ...unknownProps }: {
19
+ export default function FormWizard({ steps, submitLabel, orientation, hideBackOnFirstStep, initialStepKey, stepSelection, onStepChange, texts, ...unknownProps }: {
13
20
  steps: {
14
21
  key: string;
15
22
  label: string;
16
23
  fields?: string[];
17
24
  optional?: boolean;
18
25
  content: import('react').ReactNode;
26
+ completed?: boolean;
19
27
  }[];
20
28
  submitLabel: string;
29
+ orientation?: 'horizontal' | 'vertical';
30
+ hideBackOnFirstStep?: boolean;
31
+ initialStepKey?: string;
32
+ stepSelection?: 'none' | 'free' | 'checked';
33
+ onStepChange?: (stepKey: string, index: number) => void;
21
34
  texts?: object;
22
35
  }): import("react").JSX.Element;
@@ -1,13 +1,17 @@
1
1
  /**
2
2
  * @param {string} name el campo del formulario
3
3
  * @param {object} [control] el de useForm, si la pantalla no usa FormProvider
4
- * @returns {{name: string, value: unknown, onChange: (value: unknown) => void, onBlur: () => void, inputRef: Function, error: unknown}}
4
+ * @param {{onChange?: Function, onBlur?: Function}} [screen] lo que la pantalla le dijo al campo
5
+ * @returns {{name: string, value: unknown, onChange: (value: unknown, ...rest: unknown[]) => void, onBlur: (...args: unknown[]) => void, inputRef: Function, error: unknown}}
5
6
  */
6
- export declare function useHookFormField(name: string, control?: object): {
7
+ export declare function useHookFormField(name: string, control?: object, screen?: {
8
+ onChange?: Function;
9
+ onBlur?: Function;
10
+ }): {
7
11
  name: string;
8
12
  value: unknown;
9
- onChange: (value: unknown) => void;
10
- onBlur: () => void;
13
+ onChange: (value: unknown, ...rest: unknown[]) => void;
14
+ onBlur: (...args: unknown[]) => void;
11
15
  inputRef: Function;
12
16
  error: unknown;
13
17
  };
@@ -10,7 +10,7 @@ export { createPathIndex, fillPath } from './toolkit/pathIndex.js';
10
10
  export { combineTexts } from './toolkit/combineTexts.js';
11
11
  export { default as toolkitTextsEs } from './locales/es.js';
12
12
  export { default as toolkitTextsEn } from './locales/en.js';
13
- export { ConfirmDialog, ModalWaiting, NEW_BUILD_NOTICE_VARIANT, NewBuildNotice, StaleBuildBoundary, TOAST_DEFAULT_OPTIONS, Toaster, confirmActionMachine, dismissToast, errorsObjectToMessage, toastDefault, toastError, toastInfo, toastLoading, toastProblem, toastPromise, toastSuccess, toastWarn, useConfirmAction, } from './feedback/index.js';
13
+ export { ConfirmDialog, ModalWaiting, NEW_BUILD_NOTICE_VARIANT, NewBuildNotice, StaleBuildBoundary, TOAST_DEFAULT_OPTIONS, TOASTER_POSITION, Toaster, confirmActionMachine, dismissToast, errorsObjectToMessage, toastDefault, toastError, toastInfo, toastLoading, toastProblem, toastPromise, toastSuccess, toastWarn, useConfirmAction, } from './feedback/index.js';
14
14
  export { DEFAULT_FILE_TYPES, DOWNLOAD_STATUS, DownloadManager, UNKNOWN_FILE_TYPE, cancelDownload, clearFinishedDownloads, downloadsMachine, startDownload, useFileTypes, } from './downloads/index.js';
15
15
  export { THEME_LOOK, TOP_BAR, createToolkitTheme } from './theme/createToolkitTheme.js';
16
16
  export { isAndroidDevice } from './theme/androidDevice.js';
@@ -62,13 +62,13 @@ export { transferProgressOf } from './upload/transferProgress.js';
62
62
  export { useFilePicker } from './upload/useFilePicker.js';
63
63
  export { buildUploadActors, uploadMachine } from './upload/uploadMachine.js';
64
64
  export { uploadWithProgress } from './upload/uploadWithProgress.js';
65
- export { APP_BAR_HEIGHT_CSS_VARIABLE, BackButton, COMPARISON_OPERATOR, FILTER_DRAWER_ANCHOR, FILTER_FIELD_KIND, FilterDrawer, activeDrawerFilterCountOf, comparisonOf, comparisonTextOf, filterDrawerChipsOf, filterDrawerDefaultsOf, filterDrawerKindsOf, filterKeysOf, CHART_VIEW, CalendarHeatmap, CollapsibleSection, ColorSchemeToggle, ContentDialog, CopyButton, DateRangeFilter, DefinitionList, DetailHeader, DictionaryText, DocumentTitle, DownloadMenu, FONT_SIZE_LEVELS, FontSizeToggle, FullPageLoader, GlassLensFilter, GlassPanel, HELP_CLOSE_REASON, HelpButton, HelpCarouselDialog, ICON_BADGE_CLASSES, ICON_BADGE_VARIANT, IconBadge, LANGUAGES, LanguageToggle, MetricCard, PageBreadcrumbs, PageHeader, PageHeading, ProfileHeader, ROUTE_TABS_MODE, RecordCard, RecordCardSkeleton, RouteTabs, TREND_DIRECTION, PeriodRangeSelector, QuickFilters, SCROLL_MARGIN_BELOW_APP_BAR, SEGMENTED_CONTROL_SX, ScrollableRow, SecretField, SectionCard, SegmentedControl, StatusChip, TableToggle, Tag, scrollableRow, tableRowTextOf, useActiveRouteTab, useAppBarHeightPublisher, useHelpCarousel, } from './ui/index.js';
65
+ export { APP_BAR_HEIGHT_CSS_VARIABLE, BackButton, COMPARISON_OPERATOR, FILTER_DRAWER_ANCHOR, FILTER_FIELD_KIND, FilterDrawer, activeDrawerFilterCountOf, comparisonOf, comparisonTextOf, filterDrawerChipsOf, filterDrawerDefaultsOf, filterDrawerKindsOf, filterKeysOf, CHART_VIEW, CalendarHeatmap, CollapsibleSection, ColorSchemeToggle, ContentDialog, CopyButton, DateRangeFilter, DefinitionList, DetailHeader, DictionaryText, DocumentTitle, DownloadMenu, FONT_SIZE_LEVELS, FontSizeToggle, FullPageLoader, GlassLensFilter, GlassPanel, HELP_CLOSE_REASON, HelpButton, HelpCarouselDialog, ICON_BADGE_CLASSES, ICON_BADGE_VARIANT, IconBadge, LANGUAGES, LanguageToggle, MetricCard, PageBreadcrumbs, PageHeader, PageHeading, ProfileHeader, ROUTE_TABS_MODE, RECORD_CARD_FOOTER_ALIGN, RecordCard, RecordCardSkeleton, RouteTabs, TREND_DIRECTION, PeriodRangeSelector, QuickFilters, SCROLL_MARGIN_BELOW_APP_BAR, SEGMENTED_CONTROL_SX, ScrollableRow, SecretField, SectionCard, SegmentedControl, StatusChip, TableToggle, Tag, scrollableRow, tableRowTextOf, useActiveRouteTab, useAppBarHeightPublisher, useHelpCarousel, } from './ui/index.js';
66
66
  export { default as CatalogInput } from './inputs/CatalogInput.js';
67
67
  export { default as ColorInput } from './inputs/ColorInput.js';
68
68
  export { default as FieldFrame } from './inputs/FieldFrame.js';
69
69
  export { default as MaskedInput } from './inputs/MaskedInput.js';
70
70
  export { INPUT_MASK, isMaskComplete, maskPatternOf, maskedTextOf, rawValueOf } from './inputs/inputMasks.js';
71
- export { FORM_ROW_CLASS, FormRow, default as FormSection } from './inputs/FormSection.js';
71
+ export { FORM_LABEL_PLACEMENT, FORM_ROW_CLASS, FormRow, default as FormSection } from './inputs/FormSection.js';
72
72
  export { default as CheckboxGroupInput } from './inputs/CheckboxGroupInput.js';
73
73
  export { default as NumberInput } from './inputs/NumberInput.js';
74
74
  export { default as TransferListInput } from './inputs/TransferListInput.js';
@@ -77,6 +77,7 @@ export { default as RepeatingFields } from './inputs/RepeatingFields.js';
77
77
  export { useRowKeys } from './inputs/useRowKeys.js';
78
78
  export { default as SelectInput } from './inputs/SelectInput.js';
79
79
  export { default as WizardLayout } from './inputs/WizardLayout.js';
80
+ export { WIZARD_ORIENTATION, WIZARD_STEP_SELECTION, isStepCompleted, openingStepOf, stepSelectionActionOf } from './inputs/wizardSteps.js';
80
81
  export { default as TextInput } from './inputs/TextInput.js';
81
82
  export { HEX_COLOR, MIN_CONTRAST, contrastOnWhite, readableVariantOf } from './inputs/colorContrast.js';
82
83
  export { cleanNumberText, completeDecimals, groupThousands } from './inputs/numberText.js';
@@ -20,6 +20,7 @@ declare const CatalogInput: (props: {
20
20
  loading?: boolean;
21
21
  placeholder?: string;
22
22
  disabled?: boolean;
23
+ required?: boolean;
23
24
  inputRef?: import('react').Ref<HTMLInputElement>;
24
25
  multiple?: boolean;
25
26
  selectAll?: boolean;
@@ -18,6 +18,7 @@ declare const CheckboxGroupInput: (props: {
18
18
  };
19
19
  helperText?: string;
20
20
  disabled?: boolean;
21
+ required?: boolean;
21
22
  sx?: object;
22
23
  messages?: Record<string, string | object>;
23
24
  texts?: object;
@@ -11,6 +11,7 @@ declare const ColorInput: (props: {
11
11
  helperText?: string;
12
12
  checkContrast?: boolean;
13
13
  disabled?: boolean;
14
+ required?: boolean;
14
15
  inputRef?: import('react').Ref<HTMLInputElement>;
15
16
  messages?: Record<string, string | object>;
16
17
  texts?: object;
@@ -2,6 +2,7 @@ declare const FieldFrame: (props: {
2
2
  inputId: string;
3
3
  labelId?: string;
4
4
  label: import('react').ReactNode;
5
+ required?: boolean;
5
6
  children: import('react').ReactNode;
6
7
  } & {
7
8
  slots?: Record<string, import('react').ElementType>;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Dónde va la etiqueta de cada renglón: a la izquierda siempre (side, lo de siempre) o arriba del campo en el teléfono
3
+ * (topOnPhone: por debajo de `sm` en el tema; más ancho, a la izquierda).
4
+ */
5
+ export declare const FORM_LABEL_PLACEMENT: Readonly<{
6
+ side: "side";
7
+ topOnPhone: "topOnPhone";
8
+ }>;
1
9
  /** La clase de cada renglón: la sección le dibuja su línea de arriba, esté donde esté adentro de la tarjeta. */
2
10
  export declare const FORM_ROW_CLASS = "calcita-form-row";
3
11
  /**
@@ -8,22 +16,27 @@ export declare const FORM_ROW_CLASS = "calcita-form-row";
8
16
  * @param {import('react').ReactNode} props.label ya traducida
9
17
  * @param {string} [props.htmlFor] el id del campo que nombra la etiqueta
10
18
  * @param {string} [props.labelId] el id de la etiqueta (para un campo que la nombra con aria-labelledby)
19
+ * @param {boolean} [props.required] el asterisco en la etiqueta (el lector de pantalla no lo lee: el campo ya lo dice)
11
20
  * @param {import('react').ReactNode} props.children
12
21
  */
13
22
  export declare function FormRow(props: {
14
23
  label: import('react').ReactNode;
15
24
  htmlFor?: string;
16
25
  labelId?: string;
26
+ required?: boolean;
17
27
  children: import('react').ReactNode;
18
28
  }): import("react").JSX.Element;
19
29
  /**
20
30
  * @param {object} props
21
31
  * @param {string} [props.title] ya traducido; va arriba de la tarjeta
22
32
  * @param {import('react').ReactNode} [props.footer] la explicación, abajo de la tarjeta
33
+ * @param {string} [props.labelPlacement] uno de FORM_LABEL_PLACEMENT: side (por omisión, la etiqueta a la izquierda) o
34
+ * topOnPhone (arriba del campo por debajo de `sm`)
23
35
  * @param {import('react').ReactNode} props.children los campos, directo o dentro de un Grid, un Stack o un componente propio
24
36
  */
25
37
  export default function FormSection(props: {
26
38
  title?: string;
27
39
  footer?: import('react').ReactNode;
40
+ labelPlacement?: string;
28
41
  children: import('react').ReactNode;
29
42
  }): import("react").JSX.Element;
@@ -15,6 +15,7 @@ declare const NumberInput: (props: {
15
15
  suffix?: import('react').ReactNode;
16
16
  maxDigits?: number;
17
17
  disabled?: boolean;
18
+ required?: boolean;
18
19
  inputRef?: import('react').Ref<HTMLInputElement>;
19
20
  messages?: Record<string, string | object>;
20
21
  texts?: object;
@@ -17,6 +17,7 @@ declare const SelectInput: (props: {
17
17
  helperText?: string;
18
18
  placeholder?: string;
19
19
  disabled?: boolean;
20
+ required?: boolean;
20
21
  inputRef?: import('react').Ref<HTMLInputElement>;
21
22
  multiple?: boolean;
22
23
  selectAll?: boolean;
@@ -22,7 +22,7 @@
22
22
  * @param {string} [props.autoComplete]
23
23
  * @param {boolean} [props.autoFocus]
24
24
  * @param {boolean} [props.disabled]
25
- * @param {boolean} [props.required]
25
+ * @param {boolean} [props.required] obligatorio: el asterisco en la etiqueta y, como en MUI, required en el campo
26
26
  * @param {boolean} [props.fullWidth]
27
27
  * @param {string} [props.id]
28
28
  * @param {object} [props.slotProps]
@@ -20,6 +20,7 @@ declare const TransferListInput: (props: {
20
20
  };
21
21
  helperText?: string;
22
22
  disabled?: boolean;
23
+ required?: boolean;
23
24
  sx?: object;
24
25
  messages?: Record<string, string | object>;
25
26
  texts?: object;
@@ -3,14 +3,18 @@ declare const WizardLayout: (props: {
3
3
  key: string;
4
4
  label: string;
5
5
  optional?: boolean;
6
+ completed?: boolean;
6
7
  content: import('react').ReactNode;
7
8
  }[];
8
9
  activeIndex: number;
9
- skippedKeys: Set<string>;
10
+ skippedKeys?: Set<string>;
10
11
  isSubmitting?: boolean;
12
+ orientation?: 'horizontal' | 'vertical';
13
+ hideBackOnFirstStep?: boolean;
11
14
  onBack: () => void;
12
15
  onNext: () => void;
13
- onSkip: () => void;
16
+ onSkip?: () => void;
17
+ onStepSelect?: (index: number) => void;
14
18
  submitButton: import('react').ReactNode;
15
19
  problemAlert?: import('react').ReactNode;
16
20
  texts?: object;
@@ -1,3 +1,10 @@
1
- export declare const FormSectionContext: import("react").Context<boolean>;
1
+ /** @type {import('react').Context<false|{labelPlacement: string}>} */
2
+ export declare const FormSectionContext: import('react').Context<false | {
3
+ labelPlacement: string;
4
+ }>;
2
5
  /** true si el campo va dentro de una FormSection. */
3
6
  export declare const useIsInsideFormSection: () => boolean;
7
+ /** Cómo pide la sección sus renglones ({labelPlacement}); false fuera de una sección. */
8
+ export declare const useFormSectionLayout: () => false | {
9
+ labelPlacement: string;
10
+ };
@@ -0,0 +1,9 @@
1
+ /** El atributo que marca la etiqueta de un campo obligatorio. */
2
+ export declare const REQUIRED_LABEL_ATTRIBUTE = "data-required";
3
+ /**
4
+ * Los estilos de la etiqueta de un campo obligatorio: la marca después del texto, pegada y del mismo color.
5
+ *
6
+ * @param {string} mark el texto de la marca, ya traducido (common.form.requiredMark: «*»)
7
+ * @returns {object} para el sx de la etiqueta
8
+ */
9
+ export declare function requiredMarkSxOf(mark: string): object;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @param {object} options
3
+ * @param {Array<{key: string}>} options.steps
4
+ * @param {string} [options.initialStepKey] el paso en el que se abre (el que diga el servidor); por omisión el primero
5
+ * @param {string} [options.stepSelection] uno de WIZARD_STEP_SELECTION; por omisión none
6
+ * @param {(stepKey: string, index: number) => void} [options.onStepChange] cada vez que cambia el paso abierto
7
+ * @param {(index: number) => Promise<boolean>} options.isStepValid revisa los campos de ese paso y marca sus errores
8
+ * @returns {{activeIndex: number, setActiveIndex: import('react').Dispatch<import('react').SetStateAction<number>>, selectStep: ((index: number) => Promise<void>)|undefined}}
9
+ * selectStep es undefined con none: así WizardLayout sabe que los títulos no se pulsan
10
+ */
11
+ export declare function useWizardSteps({ steps, initialStepKey, stepSelection, onStepChange, isStepValid }: {
12
+ steps: Array<{
13
+ key: string;
14
+ }>;
15
+ initialStepKey?: string;
16
+ stepSelection?: string;
17
+ onStepChange?: (stepKey: string, index: number) => void;
18
+ isStepValid: (index: number) => Promise<boolean>;
19
+ }): {
20
+ activeIndex: number;
21
+ setActiveIndex: import('react').Dispatch<import('react').SetStateAction<number>>;
22
+ selectStep: ((index: number) => Promise<void>) | undefined;
23
+ };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Cómo se acomodan los pasos:
3
+ * horizontal los pasos en fila arriba y los campos abajo (lo de siempre; en el teléfono, «Paso 2 de 4» y su nombre);
4
+ * vertical uno debajo del otro, como un acordeón: los campos y los botones van dentro del paso que está abierto.
5
+ */
6
+ export declare const WIZARD_ORIENTATION: Readonly<{
7
+ horizontal: "horizontal";
8
+ vertical: "vertical";
9
+ }>;
10
+ /**
11
+ * Qué pasa al pulsar el título de otro paso:
12
+ * none los títulos no se pulsan (lo de siempre): se avanza con «Siguiente»;
13
+ * free salta directo, sin revisar el paso en el que está; al enviar, el formulario regresa al primer paso con error;
14
+ * checked salta solo si el paso en el que está no tiene errores (igual que «Siguiente»).
15
+ */
16
+ export declare const WIZARD_STEP_SELECTION: Readonly<{
17
+ none: "none";
18
+ free: "free";
19
+ checked: "checked";
20
+ }>;
21
+ /**
22
+ * El paso en el que se abre: el de esa llave (la que dice el servidor) o el primero si no llega.
23
+ *
24
+ * @param {Array<{key: string}>} steps
25
+ * @param {string} [stepKey]
26
+ * @returns {{index: number, isUnknownKey: boolean}} isUnknownKey: llegó una llave que no es de ningún paso (se abre el primero)
27
+ */
28
+ export declare function openingStepOf(steps: Array<{
29
+ key: string;
30
+ }>, stepKey?: string): {
31
+ index: number;
32
+ isUnknownKey: boolean;
33
+ };
34
+ /**
35
+ * ¿Al pulsar el título del paso `targetIndex` hay que revisar antes el paso en el que está? Solo con `checked` y si de veras
36
+ * cambia de paso. Pulsar el paso en el que ya está no hace nada.
37
+ *
38
+ * @param {string} stepSelection uno de WIZARD_STEP_SELECTION
39
+ * @param {number} activeIndex
40
+ * @param {number} targetIndex
41
+ * @returns {'ignore'|'jump'|'checkFirst'}
42
+ */
43
+ export declare function stepSelectionActionOf(stepSelection: string, activeIndex: number, targetIndex: number): 'ignore' | 'jump' | 'checkFirst';
44
+ /**
45
+ * ¿El paso se pinta como hecho (la palomita)? En fila y sin pulsar, los de antes del que está abierto, salvo los omitidos
46
+ * (lo de siempre). Cuando los títulos se pulsan, «antes» ya no quiere decir «hecho» (se pudo brincar): sin palomita, salvo
47
+ * que la pantalla lo diga en `steps[].completed` (sabe qué datos ya están completos).
48
+ *
49
+ * @param {{key: string, completed?: boolean}} step
50
+ * @param {object} place
51
+ * @param {number} place.index
52
+ * @param {number} place.activeIndex
53
+ * @param {Set<string>} place.skippedKeys
54
+ * @param {boolean} place.isSelectable
55
+ * @returns {boolean}
56
+ */
57
+ export declare function isStepCompleted(step: {
58
+ key: string;
59
+ completed?: boolean;
60
+ }, { index, activeIndex, skippedKeys, isSelectable }: {
61
+ index: number;
62
+ activeIndex: number;
63
+ skippedKeys: Set<string>;
64
+ isSelectable: boolean;
65
+ }): boolean;
@@ -134,6 +134,7 @@ declare const _default: Readonly<{
134
134
  showPassword: string;
135
135
  hidePassword: string;
136
136
  clear: string;
137
+ requiredMark: string;
137
138
  selectPlaceholder: string;
138
139
  copy: string;
139
140
  copied: string;
@@ -134,6 +134,7 @@ declare const _default: Readonly<{
134
134
  showPassword: string;
135
135
  hidePassword: string;
136
136
  clear: string;
137
+ requiredMark: string;
137
138
  selectPlaceholder: string;
138
139
  copy: string;
139
140
  copied: string;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @param {{name: string} & Omit<Parameters<typeof import('./RichTextEditor.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las de
3
- * RichTextEditor (features, maxLength, placeholder…), sin value / onChange / onBlur / error
2
+ * @param {{name: string} & Omit<Parameters<typeof import('./RichTextEditor.js').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'> & Partial<Pick<Parameters<typeof import('./RichTextEditor.js').default>[0], 'onChange'|'onBlur'>>} props las de
3
+ * RichTextEditor (features, maxLength, placeholder…), sin value ni error (su onChange y su onBlur corren después de los del formulario)
4
4
  */
5
5
  export default function FormRichTextField({ name, ...editorProps }: {
6
6
  name: string;
7
- } & Omit<Parameters<typeof import('./RichTextEditor.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'>): import("react").JSX.Element;
7
+ } & Omit<Parameters<typeof import('./RichTextEditor.js').default>[0], 'name' | 'value' | 'onChange' | 'onBlur' | 'error'> & Partial<Pick<Parameters<typeof import('./RichTextEditor.js').default>[0], 'onChange' | 'onBlur'>>): import("react").JSX.Element;
@@ -17,6 +17,7 @@ declare const RichTextEditor: (props: {
17
17
  onEditorReady?: (editor: import('@tiptap/react').Editor) => void;
18
18
  minHeight?: number;
19
19
  disabled?: boolean;
20
+ required?: boolean;
20
21
  sx?: object;
21
22
  messages?: Record<string, string | object>;
22
23
  texts?: object;
@@ -16,6 +16,9 @@
16
16
  * consola una vez por idioma y llave
17
17
  * @param {(namespace: string, key: string, values?: object) => string|undefined} [props.translate] traductor del
18
18
  * proyecto (por ejemplo i18next); undefined deja el texto del paquete
19
+ * @param {boolean} [props.requiredFromSchema] los campos de formik leen del esquema de yup del formulario (validationSchema)
20
+ * qué es obligatorio y le ponen su asterisco: el esquema manda y la pantalla no los marca a mano. Lo que la pantalla diga
21
+ * con required gana. Por omisión no (cada campo con su required, como antes)
19
22
  * @param {string} [props.timeZone] zona de las fechas (por omisión la del navegador)
20
23
  * @param {string} [props.currency] moneda de los montos, código ISO 4217 (por omisión MXN)
21
24
  * @param {'h23'|'h12'} [props.hourCycle] la hora de 24 horas («15:10», por omisión) o de 12 con a.m. y p.m. («3:10 p.m.»):
@@ -29,7 +32,7 @@
29
32
  * tiene regla
30
33
  * @param {import('react').ReactNode} props.children
31
34
  */
32
- export declare const ToolkitProvider: ({ language, languages, onLanguageChange, onMissingText, readValidationMessage, texts, translate, timeZone, currency, hourCycle, appName, navigation, buildId, canAccess, fileTypes, children, ...unknownProps }: {
35
+ export declare const ToolkitProvider: ({ language, languages, onLanguageChange, onMissingText, readValidationMessage, requiredFromSchema, texts, translate, timeZone, currency, hourCycle, appName, navigation, buildId, canAccess, fileTypes, children, ...unknownProps }: {
33
36
  language?: string;
34
37
  languages?: Array<{
35
38
  code: string;
@@ -51,6 +54,7 @@ export declare const ToolkitProvider: ({ language, languages, onLanguageChange,
51
54
  language: string;
52
55
  }) => void;
53
56
  translate?: (namespace: string, key: string, values?: object) => string | undefined;
57
+ requiredFromSchema?: boolean;
54
58
  timeZone?: string;
55
59
  currency?: string;
56
60
  hourCycle?: 'h23' | 'h12';
@@ -2,11 +2,12 @@ export declare const ToolkitContext: import("react").Context<null>;
2
2
  /**
3
3
  * La configuración del proveedor; sin proveedor, la vigente con la navegación del navegador.
4
4
  *
5
- * @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}}
5
+ * @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}}
6
6
  */
7
7
  export declare function useToolkitSettings(): {
8
8
  language: string;
9
9
  onLanguageChange: Function | null;
10
+ requiredFromSchema?: boolean;
10
11
  texts: object;
11
12
  translate: Function | null;
12
13
  timeZone: string;
@@ -1,3 +1,14 @@
1
+ /**
2
+ * Cómo se acomoda el renglón de abajo (footer y «Ver detalle»):
3
+ * spaceBetween el footer a la izquierda y «Ver detalle» en la otra orilla (lo de siempre);
4
+ * start los dos juntos, a la izquierda;
5
+ * end los dos juntos, a la derecha.
6
+ */
7
+ export declare const RECORD_CARD_FOOTER_ALIGN: Readonly<{
8
+ spaceBetween: "spaceBetween";
9
+ start: "start";
10
+ end: "end";
11
+ }>;
1
12
  declare const RecordCard: (props: {
2
13
  title: import('react').ReactNode;
3
14
  eyebrow?: import('react').ReactNode;
@@ -25,6 +36,7 @@ declare const RecordCard: (props: {
25
36
  trailing?: import('react').ReactNode;
26
37
  columns?: string;
27
38
  footer?: import('react').ReactNode;
39
+ footerAlign?: 'spaceBetween' | 'start' | 'end';
28
40
  details?: import('react').ReactNode;
29
41
  detailsLabel?: string;
30
42
  defaultDetailsOpen?: boolean;
@@ -21,7 +21,7 @@ export { default as PageBreadcrumbs } from './navigation/PageBreadcrumbs.js';
21
21
  export { ROUTE_TABS_MODE, default as RouteTabs, useActiveRouteTab } from './navigation/RouteTabs.js';
22
22
  export { default as HelpButton } from './help/HelpButton.js';
23
23
  export { HELP_CLOSE_REASON, default as HelpCarouselDialog } from './help/HelpCarouselDialog.js';
24
- export { default as RecordCard } from './cards/RecordCard.js';
24
+ export { RECORD_CARD_FOOTER_ALIGN, default as RecordCard } from './cards/RecordCard.js';
25
25
  export { default as RecordCardSkeleton } from './cards/RecordCardSkeleton.js';
26
26
  export { useHelpCarousel } from './help/useHelpCarousel.js';
27
27
  export { default as DateRangeFilter } from './filters/DateRangeFilter.js';
@@ -3,6 +3,7 @@ declare const BackButton: (props: {
3
3
  listKey?: string;
4
4
  label?: string;
5
5
  texts?: object;
6
+ sx?: object;
6
7
  } & {
7
8
  slots?: Record<string, import('react').ElementType>;
8
9
  slotProps?: Record<string, object | ((partProps: object) => object)>;
@@ -19,6 +19,7 @@
19
19
  * @param {boolean} [props.showButton] false esconde «Adjuntar» (la ventana se abre con pickerRef desde un botón suyo)
20
20
  * @param {import('react').Ref<{open: () => void}>} [props.pickerRef] recibe {open} para abrir la ventana de archivos
21
21
  * @param {boolean} [props.disabled]
22
+ * @param {boolean} [props.required] obligatorio: el asterisco en la etiqueta (lo revisa el esquema del formulario)
22
23
  * @param {boolean} [props.busy] candado mientras se sube: no se puede agregar ni quitar
23
24
  * @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
24
25
  * @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
@@ -57,6 +58,7 @@ declare function AttachmentsInputContent<T extends File | {
57
58
  open: () => void;
58
59
  }>;
59
60
  disabled?: boolean;
61
+ required?: boolean;
60
62
  busy?: boolean;
61
63
  onReject?: (file: File, reason: string) => void;
62
64
  template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
@@ -17,6 +17,7 @@ declare const FileInput: (props: {
17
17
  buttonLabel?: string;
18
18
  emptyText?: string;
19
19
  disabled?: boolean;
20
+ required?: boolean;
20
21
  busy?: boolean;
21
22
  onReject?: (file: File, reason: string) => void;
22
23
  template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
@@ -40,6 +40,7 @@ declare const FileUploadInput: (props: {
40
40
  };
41
41
  helperText?: string;
42
42
  disabled?: boolean;
43
+ required?: boolean;
43
44
  actions?: import('react').ReactNode;
44
45
  onUploaded?: (result: any) => void;
45
46
  onUploadFailed?: (error: unknown) => void;
@@ -23,6 +23,7 @@ declare const ImageInput: (props: {
23
23
  chooseLabel?: string;
24
24
  removeLabel?: string;
25
25
  disabled?: boolean;
26
+ required?: boolean;
26
27
  busy?: boolean;
27
28
  onReject?: (file: File, reason: string) => void;
28
29
  sx?: object;
@@ -17,6 +17,8 @@ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePiece
17
17
  import { useToolkitTranslation } from "../../toolkit/useToolkitTranslation.js";
18
18
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
19
19
  import ActionsMenu from "../actions/ActionsMenu.js";
20
+ const RECORD_CARD_FOOTER_ALIGN = Object.freeze({ spaceBetween: "spaceBetween", start: "start", end: "end" });
21
+ const FOOTER_JUSTIFY = Object.freeze({ spaceBetween: "flex-start", start: "flex-start", end: "flex-end" });
20
22
  const THEME_NAME = "CalcitaRecordCard";
21
23
  const RecordCardRoot = piecePart(THEME_NAME, "Root", Paper);
22
24
  const RecordCardHeader = piecePart(THEME_NAME, "Header", Stack);
@@ -42,6 +44,7 @@ function RecordCardContent(props) {
42
44
  trailing,
43
45
  columns,
44
46
  footer,
47
+ footerAlign = RECORD_CARD_FOOTER_ALIGN.spaceBetween,
45
48
  details,
46
49
  detailsLabel,
47
50
  defaultDetailsOpen = false,
@@ -122,8 +125,8 @@ function RecordCardContent(props) {
122
125
  trailing && /* @__PURE__ */ jsx(Box, { sx: { minWidth: 0, alignSelf: "center", borderTop: { xs: 1, md: 0 }, pt: { xs: 1.5, md: 0 }, borderColor: "divider" }, children: trailing })
123
126
  ] }),
124
127
  children,
125
- (footer || details) && /* @__PURE__ */ jsxs(RecordCardFooter, { direction: "row", ownSx: { mt: 2, gap: 1, alignItems: "center", flexWrap: "wrap" }, children: [
126
- /* @__PURE__ */ jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: footer }),
128
+ (footer || details) && /* @__PURE__ */ jsxs(RecordCardFooter, { direction: "row", ownSx: { mt: 2, gap: 1, alignItems: "center", flexWrap: "wrap", justifyContent: FOOTER_JUSTIFY[footerAlign] ?? "flex-start" }, children: [
129
+ /* @__PURE__ */ jsx(Box, { sx: { flex: footerAlign === RECORD_CARD_FOOTER_ALIGN.spaceBetween ? 1 : "0 1 auto", minWidth: 0 }, children: footer }),
127
130
  details && /* @__PURE__ */ jsx(
128
131
  Button,
129
132
  {
@@ -141,6 +144,7 @@ function RecordCardContent(props) {
141
144
  }
142
145
  const RecordCard = withPieceSlots(RecordCardContent, THEME_NAME);
143
146
  export {
147
+ RECORD_CARD_FOOTER_ALIGN,
144
148
  RecordCard as default
145
149
  };
146
150
  //# sourceMappingURL=RecordCard.js.map