@gen-epix/ui-core-form 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/LICENSE +287 -0
  2. package/dist/@types/ui-form.d.ts +2 -0
  3. package/dist/@types/vite-env.d.ts +2 -0
  4. package/dist/@types/yup.d.ts +30 -0
  5. package/dist/_chunks/Autocomplete.js +229 -0
  6. package/dist/_chunks/Autocomplete.js.map +1 -0
  7. package/dist/_chunks/DatePicker.js +126 -0
  8. package/dist/_chunks/DatePicker.js.map +1 -0
  9. package/dist/_chunks/FormUtil.js +1350 -0
  10. package/dist/_chunks/FormUtil.js.map +1 -0
  11. package/dist/_chunks/RichTextEditor.js +22721 -0
  12. package/dist/_chunks/RichTextEditor.js.map +1 -0
  13. package/dist/_chunks/TransferList.js +453 -0
  14. package/dist/_chunks/TransferList.js.map +1 -0
  15. package/dist/_chunks/UploadButton.js +91 -0
  16. package/dist/_chunks/UploadButton.js.map +1 -0
  17. package/dist/_chunks/classnames.js +33 -0
  18. package/dist/_chunks/classnames.js.map +1 -0
  19. package/dist/_chunks/index.esm.js +348 -0
  20. package/dist/_chunks/index.esm.js.map +1 -0
  21. package/dist/_chunks/isEqual.js +348 -0
  22. package/dist/_chunks/isEqual.js.map +1 -0
  23. package/dist/_chunks/isObjectLike.js +304 -0
  24. package/dist/_chunks/isObjectLike.js.map +1 -0
  25. package/dist/_chunks/isValid.js +28 -0
  26. package/dist/_chunks/isValid.js.map +1 -0
  27. package/dist/_chunks/rolldown-runtime.js +13 -0
  28. package/dist/_chunks/sv.js +434 -0
  29. package/dist/_chunks/sv.js.map +1 -0
  30. package/dist/components/fields/Autocomplete/Autocomplete.d.ts +19 -0
  31. package/dist/components/fields/Autocomplete/AutocompleteSelectAllContext.d.ts +2 -0
  32. package/dist/components/fields/Autocomplete/AutocompleteSelectAllPaper.d.ts +2 -0
  33. package/dist/components/fields/Autocomplete/index.d.ts +1 -0
  34. package/dist/components/fields/Autocomplete/index.js +2 -0
  35. package/dist/components/fields/CheckboxGroup/CheckboxGroup.d.ts +18 -0
  36. package/dist/components/fields/CheckboxGroup/index.d.ts +1 -0
  37. package/dist/components/fields/CheckboxGroup/index.js +114 -0
  38. package/dist/components/fields/CheckboxGroup/index.js.map +1 -0
  39. package/dist/components/fields/DatePicker/DatePicker.d.ts +15 -0
  40. package/dist/components/fields/DatePicker/DatePickerInputAdornment.d.ts +8 -0
  41. package/dist/components/fields/DatePicker/index.d.ts +1 -0
  42. package/dist/components/fields/DatePicker/index.js +2 -0
  43. package/dist/components/fields/DateRangePicker/DateRangePicker.d.ts +17 -0
  44. package/dist/components/fields/DateRangePicker/index.d.ts +1 -0
  45. package/dist/components/fields/DateRangePicker/index.js +1648 -0
  46. package/dist/components/fields/DateRangePicker/index.js.map +1 -0
  47. package/dist/components/fields/NumberField/NumberField.d.ts +19 -0
  48. package/dist/components/fields/NumberField/index.d.ts +1 -0
  49. package/dist/components/fields/NumberField/index.js +180 -0
  50. package/dist/components/fields/NumberField/index.js.map +1 -0
  51. package/dist/components/fields/NumberRangeInput/NumberRangeInput.d.ts +15 -0
  52. package/dist/components/fields/NumberRangeInput/index.d.ts +1 -0
  53. package/dist/components/fields/NumberRangeInput/index.js +192 -0
  54. package/dist/components/fields/NumberRangeInput/index.js.map +1 -0
  55. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +16 -0
  56. package/dist/components/fields/RadioGroup/index.d.ts +1 -0
  57. package/dist/components/fields/RadioGroup/index.js +72 -0
  58. package/dist/components/fields/RadioGroup/index.js.map +1 -0
  59. package/dist/components/fields/RichTextEditor/RichTextEditor.d.ts +13 -0
  60. package/dist/components/fields/RichTextEditor/RichTextEditorContent.d.ts +4 -0
  61. package/dist/components/fields/RichTextEditor/index.d.ts +2 -0
  62. package/dist/components/fields/RichTextEditor/index.js +2 -0
  63. package/dist/components/fields/RichTextEditor/useRichTextEditorExtensions.d.ts +10 -0
  64. package/dist/components/fields/Select/Select.d.ts +16 -0
  65. package/dist/components/fields/Select/index.d.ts +1 -0
  66. package/dist/components/fields/Select/index.js +129 -0
  67. package/dist/components/fields/Select/index.js.map +1 -0
  68. package/dist/components/fields/Switch/Switch.d.ts +13 -0
  69. package/dist/components/fields/Switch/index.d.ts +1 -0
  70. package/dist/components/fields/Switch/index.js +68 -0
  71. package/dist/components/fields/Switch/index.js.map +1 -0
  72. package/dist/components/fields/TextField/TextField.d.ts +18 -0
  73. package/dist/components/fields/TextField/index.d.ts +1 -0
  74. package/dist/components/fields/TextField/index.js +108 -0
  75. package/dist/components/fields/TextField/index.js.map +1 -0
  76. package/dist/components/fields/ToggleButtonGroup/ToggleButtonGroup.d.ts +14 -0
  77. package/dist/components/fields/ToggleButtonGroup/index.d.ts +1 -0
  78. package/dist/components/fields/ToggleButtonGroup/index.js +57 -0
  79. package/dist/components/fields/ToggleButtonGroup/index.js.map +1 -0
  80. package/dist/components/fields/TransferList/TransferList.d.ts +16 -0
  81. package/dist/components/fields/TransferList/index.d.ts +1 -0
  82. package/dist/components/fields/TransferList/index.js +2 -0
  83. package/dist/components/fields/UploadButton/UploadButton.d.ts +15 -0
  84. package/dist/components/fields/UploadButton/index.d.ts +1 -0
  85. package/dist/components/fields/UploadButton/index.js +2 -0
  86. package/dist/components/helpers/FormFieldHelperText/FormFieldHelperText.d.ts +8 -0
  87. package/dist/components/helpers/FormFieldHelperText/index.d.ts +1 -0
  88. package/dist/components/helpers/FormFieldHelperText/index.js +50 -0
  89. package/dist/components/helpers/FormFieldHelperText/index.js.map +1 -0
  90. package/dist/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.d.ts +4 -0
  91. package/dist/components/helpers/FormFieldLoadingIndicator/index.d.ts +1 -0
  92. package/dist/components/helpers/FormFieldLoadingIndicator/index.js +16 -0
  93. package/dist/components/helpers/FormFieldLoadingIndicator/index.js.map +1 -0
  94. package/dist/components/helpers/GenericForm/GenericForm.d.ts +18 -0
  95. package/dist/components/helpers/GenericForm/index.d.ts +1 -0
  96. package/dist/components/helpers/GenericForm/index.js +156 -0
  97. package/dist/components/helpers/GenericForm/index.js.map +1 -0
  98. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.d.ts +1 -0
  99. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js +18 -0
  100. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js.map +1 -0
  101. package/dist/hooks/useIsFormFieldRequiredFromSchema/useIsFormFieldRequiredFromSchema.d.ts +4 -0
  102. package/dist/locale/en.json +97 -0
  103. package/dist/locale/nl.json +97 -0
  104. package/dist/models/form.d.ts +112 -0
  105. package/dist/models/form.js +8 -0
  106. package/dist/models/form.js.map +1 -0
  107. package/dist/setup/setup.d.ts +1 -0
  108. package/dist/setup/setup.js +166 -0
  109. package/dist/setup/setup.js.map +1 -0
  110. package/dist/utils/FormUtil/FormUtil.d.ts +19 -0
  111. package/dist/utils/FormUtil/index.d.ts +1 -0
  112. package/dist/utils/FormUtil/index.js +2 -0
  113. package/dist/utils/SchemaUtil/SchemaUtil.d.ts +9 -0
  114. package/dist/utils/SchemaUtil/index.d.ts +1 -0
  115. package/dist/utils/SchemaUtil/index.js +30 -0
  116. package/dist/utils/SchemaUtil/index.js.map +1 -0
  117. package/package.json +207 -0
@@ -0,0 +1,68 @@
1
+ import { n as e } from "../../../_chunks/rolldown-runtime.js";
2
+ import { t } from "../../../_chunks/FormUtil.js";
3
+ import { i as n, t as r } from "../../../_chunks/index.esm.js";
4
+ import { FormFieldHelperText as i } from "../../helpers/FormFieldHelperText/index.js";
5
+ import { FormFieldLoadingIndicator as a } from "../../helpers/FormFieldLoadingIndicator/index.js";
6
+ import { t as o } from "../../../_chunks/classnames.js";
7
+ import { useCallback as s, useRef as c } from "react";
8
+ import { FormControl as l, FormControlLabel as u, FormHelperText as d, Switch as f } from "@mui/material";
9
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
10
+ import { TestIdUtil as h } from "@gen-epix/ui-core/utils/TestIdUtil";
11
+ //#region src/components/fields/Switch/Switch.tsx
12
+ var g = /* @__PURE__ */ e(o(), 1), _ = ({ disabled: e = !1, infoMessage: o, label: _, loading: v = !1, name: y, onChange: b, warningMessage: x }) => {
13
+ let { control: S, formState: { errors: C } } = n(), w = t.getFieldErrorMessage(C, y), T = c(null), E = !!x && !w, D = s((e) => (t, n) => {
14
+ b && b(n), e(n);
15
+ }, [b]);
16
+ return /* @__PURE__ */ p(r, {
17
+ control: S,
18
+ defaultValue: null,
19
+ name: y,
20
+ render: s(({ field: { onBlur: t, onChange: n, ref: r, value: s } }) => (r({ focus: () => {
21
+ T?.current?.focus();
22
+ } }), /* @__PURE__ */ m(l, {
23
+ ...h.createAttributes("Select", {
24
+ label: _,
25
+ name: y
26
+ }),
27
+ fullWidth: !0,
28
+ children: [
29
+ /* @__PURE__ */ p(u, {
30
+ control: /* @__PURE__ */ p(f, {
31
+ checked: !!s,
32
+ color: "primary",
33
+ slotProps: { input: { ref: T } }
34
+ }),
35
+ disabled: e,
36
+ label: _,
37
+ onBlur: t,
38
+ onChange: D(n)
39
+ }),
40
+ /* @__PURE__ */ p(d, {
41
+ className: (0, g.default)({ "Mui-warning": E }),
42
+ sx: { ml: 0 },
43
+ children: /* @__PURE__ */ p(i, {
44
+ errorMessage: w,
45
+ infoMessage: o,
46
+ noIndent: !0,
47
+ warningMessage: x
48
+ })
49
+ }),
50
+ !!v && /* @__PURE__ */ p(a, {})
51
+ ]
52
+ })), [
53
+ e,
54
+ o,
55
+ w,
56
+ E,
57
+ _,
58
+ v,
59
+ y,
60
+ D,
61
+ x
62
+ ])
63
+ });
64
+ };
65
+ //#endregion
66
+ export { _ as Switch };
67
+
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/Switch/Switch.tsx"],"sourcesContent":["import type {\n ReactElement,\n SyntheticEvent,\n} from 'react';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n Switch as MuiSwitch,\n} from '@mui/material';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport classnames from 'classnames';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nexport type SwitchProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues>> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly name: TName;\n readonly onChange?: (value: boolean) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const Switch = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n disabled = false,\n infoMessage,\n label,\n loading = false,\n name,\n onChange: onChangeProp,\n warningMessage,\n}: SwitchProps<TFieldValues, TName>): ReactElement => {\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n\n const onMuiSwitchChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: SyntheticEvent, checked: boolean) => {\n if (onChangeProp) {\n onChangeProp(checked);\n }\n onChange(checked);\n }\n , [onChangeProp]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n return (\n <FormControl\n {...TestIdUtil.createAttributes('Select', { label, name })}\n fullWidth\n >\n <FormControlLabel\n control={(\n <MuiSwitch\n checked={!!value}\n color={'primary'}\n slotProps={{\n input: {\n ref: inputRef,\n },\n }}\n />\n )}\n disabled={disabled}\n label={label}\n onBlur={onBlur}\n onChange={onMuiSwitchChange(onChange)}\n />\n <FormHelperText\n className={classnames({ 'Mui-warning': hasWarning })}\n sx={{ ml: 0 }}\n >\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n { !!loading && <FormFieldLoadingIndicator />}\n </FormControl>\n\n );\n }, [disabled, infoMessage, errorMessage, hasWarning, label, loading, name, onMuiSwitchChange, warningMessage]);\n\n return (\n\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n\n );\n};\n"],"mappings":";;;;;;;;;;;mCA0Ca,KAAmG,EAC9G,cAAW,IACX,gBACA,UACA,aAAU,IACV,SACA,UAAU,GACV,wBACoD;CACpD,IAAM,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GACzD,IAAW,EAAyB,IAAI,GAGxC,IAAa,CAAC,CAAC,KAAkB,CADpB,GAGb,IAAoB,GAAa,OACpC,GAAwB,MAAqB;EAI5C,AAHI,KACF,EAAa,CAAO,GAEtB,EAAS,CAAO;CAClB,GACA,CAAC,CAAY,CAAC;CA+ChB,OAEE,kBAAC,GAAD;EACW;EACT,cAAc;EACR;EACN,QAnDqB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtE,EAAI,EACF,aAAa;GACX,GAAU,SAAS,MAAM;EAC3B,EACF,CAAC,GAEC,kBAAC,GAAD;GACE,GAAI,EAAW,iBAAiB,UAAU;IAAE;IAAO;GAAK,CAAC;GACzD,WAAA;aAFF;IAIE,kBAAC,GAAD;KACE,SACE,kBAAC,GAAD;MACE,SAAS,CAAC,CAAC;MACX,OAAO;MACP,WAAW,EACT,OAAO,EACL,KAAK,EACP,EACF;KACD,CAAA;KAEO;KACH;KACC;KACR,UAAU,EAAkB,CAAQ;IACrC,CAAA;IACD,kBAAC,GAAD;KACE,YAAA,GAAA,EAAA,QAAA,CAAsB,EAAE,eAAe,EAAW,CAAC;KACnD,IAAI,EAAE,IAAI,EAAE;eAEZ,kBAAC,GAAD;MACgB;MACD;MACb,UAAA;MACgB;KACjB,CAAA;IACa,CAAA;IACd,CAAC,CAAC,KAAW,kBAAC,GAAD,CAA4B,CAAA;GAChC;OAGd;GAAC;GAAU;GAAa;GAAc;GAAY;GAAO;GAAS;GAAM;GAAmB;EAAc,CAQhG;CACT,CAAA;AAGL"}
@@ -0,0 +1,18 @@
1
+ import { InputHTMLAttributes, ReactElement } from 'react';
2
+ import { FieldValues, Path } from 'react-hook-form';
3
+ export type TextFieldProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {
4
+ readonly autocomplete?: string;
5
+ readonly disabled?: boolean;
6
+ readonly infoMessage?: string;
7
+ readonly label: string;
8
+ readonly loading?: boolean;
9
+ readonly multiline?: boolean;
10
+ readonly name: TName;
11
+ readonly onChange?: (value: string) => void;
12
+ readonly placeholder?: string;
13
+ readonly required?: boolean;
14
+ readonly rows?: number;
15
+ readonly type?: InputHTMLAttributes<unknown>['type'];
16
+ readonly warningMessage?: string;
17
+ };
18
+ export declare const TextField: <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({ autocomplete, disabled, infoMessage, label, loading, multiline, name, onChange: onChangeProp, placeholder, required, rows, type, warningMessage, }: TextFieldProps<TFieldValues, TName>) => ReactElement;
@@ -0,0 +1 @@
1
+ export * from './TextField';
@@ -0,0 +1,108 @@
1
+ import { n as e } from "../../../_chunks/rolldown-runtime.js";
2
+ import { t } from "../../../_chunks/FormUtil.js";
3
+ import { i as n, t as r } from "../../../_chunks/index.esm.js";
4
+ import { FormFieldHelperText as i } from "../../helpers/FormFieldHelperText/index.js";
5
+ import { FormFieldLoadingIndicator as a } from "../../helpers/FormFieldLoadingIndicator/index.js";
6
+ import { t as o } from "../../../_chunks/classnames.js";
7
+ import { useCallback as s, useRef as c } from "react";
8
+ import { useTranslation as l } from "react-i18next";
9
+ import { FormControl as u, IconButton as d, InputAdornment as f, TextField as p } from "@mui/material";
10
+ import m from "@mui/icons-material/Clear";
11
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
12
+ import { TestIdUtil as _ } from "@gen-epix/ui-core/utils/TestIdUtil";
13
+ //#region src/components/fields/TextField/TextField.tsx
14
+ var v = /* @__PURE__ */ e(o(), 1), y = ({ autocomplete: e, disabled: o = !1, infoMessage: y, label: b, loading: x = !1, multiline: S = !1, name: C, onChange: w, placeholder: T, required: E = !1, rows: D = 3, type: O = "text", warningMessage: k }) => {
15
+ let { t: A } = l(), { control: j, formState: { errors: M } } = n(), N = t.getFieldErrorMessage(M, C), P = !!N, F = !!k && !P, I = c(null), L = s((e) => (t) => {
16
+ let n = t.target.value;
17
+ w && w(n), e(n);
18
+ }, [w]), R = s(({ field: { onBlur: t, onChange: n, ref: r, value: a } }) => {
19
+ r({ focus: () => {
20
+ I?.current?.focus();
21
+ } });
22
+ let s = () => {
23
+ n("");
24
+ };
25
+ return /* @__PURE__ */ h(p, {
26
+ disabled: o || x,
27
+ error: P,
28
+ helperText: /* @__PURE__ */ h(i, {
29
+ errorMessage: N,
30
+ infoMessage: y,
31
+ warningMessage: k
32
+ }),
33
+ inputRef: I,
34
+ label: b,
35
+ multiline: S,
36
+ onBlur: t,
37
+ onChange: L(n),
38
+ placeholder: T,
39
+ rows: D,
40
+ slotProps: {
41
+ formHelperText: { className: (0, v.default)({ "Mui-warning": F }) },
42
+ input: {
43
+ className: (0, v.default)({ "Mui-warning": F }),
44
+ endAdornment: o ? void 0 : /* @__PURE__ */ h(f, {
45
+ position: "end",
46
+ children: /* @__PURE__ */ h(d, {
47
+ ..._.createAttributes("TextField-reset"),
48
+ "aria-label": A`Clear text field`,
49
+ onClick: s,
50
+ sx: { "& svg": { fontSize: "16px" } },
51
+ tabIndex: -1,
52
+ children: /* @__PURE__ */ h(m, {})
53
+ })
54
+ }),
55
+ inputProps: {
56
+ autoComplete: e ?? C,
57
+ type: O
58
+ }
59
+ },
60
+ inputLabel: {
61
+ className: (0, v.default)({ "Mui-warning": F }),
62
+ required: E && !o
63
+ }
64
+ },
65
+ value: a ?? "",
66
+ variant: "outlined"
67
+ });
68
+ }, [
69
+ o,
70
+ x,
71
+ y,
72
+ P,
73
+ N,
74
+ k,
75
+ b,
76
+ S,
77
+ T,
78
+ D,
79
+ F,
80
+ e,
81
+ C,
82
+ O,
83
+ A,
84
+ E,
85
+ L
86
+ ]);
87
+ return /* @__PURE__ */ g(u, {
88
+ ..._.createAttributes("TextField", {
89
+ label: b,
90
+ name: C
91
+ }),
92
+ fullWidth: !0,
93
+ sx: {
94
+ "&:hover button, &:focus-within button": { display: "initial" },
95
+ button: { display: "none" }
96
+ },
97
+ children: [/* @__PURE__ */ h(r, {
98
+ control: j,
99
+ defaultValue: "",
100
+ name: C,
101
+ render: R
102
+ }), !!x && /* @__PURE__ */ h(a, {})]
103
+ });
104
+ };
105
+ //#endregion
106
+ export { y as TextField };
107
+
108
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/TextField/TextField.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n InputHTMLAttributes,\n ReactElement,\n} from 'react';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport {\n FormControl,\n IconButton,\n InputAdornment,\n TextField as MuiTextField,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n PathValue,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nexport type TextFieldProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly autocomplete?: string;\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly multiline?: boolean;\n readonly name: TName;\n readonly onChange?: (value: string) => void;\n readonly placeholder?: string;\n readonly required?: boolean;\n readonly rows?: number;\n readonly type?: InputHTMLAttributes<unknown>['type'];\n readonly warningMessage?: string;\n};\n\nexport const TextField = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n autocomplete,\n disabled = false,\n infoMessage,\n label,\n loading = false,\n multiline = false,\n name,\n onChange: onChangeProp,\n placeholder,\n required = false,\n rows = 3,\n type = 'text',\n warningMessage,\n}: TextFieldProps<TFieldValues, TName>): ReactElement => {\n const { t } = useTranslation();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const onMuiTextFieldChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const value = event.target.value;\n if (onChangeProp) {\n onChangeProp(value);\n }\n onChange(value);\n }\n , [onChangeProp]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n\n const onResetButtonClick = () => {\n onChange('');\n };\n\n return (\n <MuiTextField\n disabled={disabled || loading}\n error={hasError}\n helperText={(\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n warningMessage={warningMessage}\n />\n )}\n inputRef={inputRef}\n label={label}\n multiline={multiline}\n onBlur={onBlur}\n onChange={onMuiTextFieldChange(onChange)}\n placeholder={placeholder}\n rows={rows}\n slotProps={{\n formHelperText: {\n className: classnames({ 'Mui-warning': hasWarning }),\n },\n input: {\n className: classnames({ 'Mui-warning': hasWarning }),\n endAdornment: disabled ? undefined : (\n <InputAdornment position={'end'}>\n <IconButton\n {...TestIdUtil.createAttributes('TextField-reset')}\n aria-label={t`Clear text field`}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={onResetButtonClick}\n sx={{\n '& svg': {\n fontSize: '16px',\n },\n }}\n tabIndex={-1}\n >\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ),\n inputProps: {\n autoComplete: autocomplete ?? name,\n type,\n },\n },\n inputLabel: {\n className: classnames({ 'Mui-warning': hasWarning }),\n required: required && !disabled,\n },\n }}\n value={value ?? ''}\n variant={'outlined'}\n />\n );\n }, [disabled, loading, infoMessage, hasError, errorMessage, warningMessage, label, multiline, placeholder, rows, hasWarning, autocomplete, name, type, t, required, onMuiTextFieldChange]);\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('TextField', { label, name })}\n fullWidth\n sx={{\n '&:hover button, &:focus-within button': {\n display: 'initial',\n },\n button: {\n display: 'none',\n },\n }}\n >\n <Controller\n control={control}\n defaultValue={'' as PathValue<TFieldValues, TName>}\n name={name}\n render={renderController}\n />\n { !!loading && <FormFieldLoadingIndicator />}\n </FormControl>\n );\n};\n"],"mappings":";;;;;;;;;;;;;mCAmDa,KAAsG,EACjH,iBACA,cAAW,IACX,gBACA,UACA,aAAU,IACV,eAAY,IACZ,SACA,UAAU,GACV,gBACA,cAAW,IACX,UAAO,GACP,UAAO,QACP,wBACuD;CACvD,IAAM,EAAE,SAAM,EAAe,GACvB,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GACzD,IAAW,CAAC,CAAC,GACb,IAAa,CAAC,CAAC,KAAkB,CAAC,GAClC,IAAW,EAAyB,IAAI,GAExC,IAAuB,GAAa,OACvC,MAA+D;EAC9D,IAAM,IAAQ,EAAM,OAAO;EAI3B,AAHI,KACF,EAAa,CAAK,GAEpB,EAAS,CAAK;CAChB,GACA,CAAC,CAAY,CAAC,GAEV,IAAmB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,iBAAwD;EAC9H,EAAI,EACF,aAAa;GACX,GAAU,SAAS,MAAM;EAC3B,EACF,CAAC;EAED,IAAM,UAA2B;GAC/B,EAAS,EAAE;EACb;EAEA,OACE,kBAAC,GAAD;GACE,UAAU,KAAY;GACtB,OAAO;GACP,YACE,kBAAC,GAAD;IACgB;IACD;IACG;GACjB,CAAA;GAEO;GACH;GACI;GACH;GACR,UAAU,EAAqB,CAAQ;GAC1B;GACP;GACN,WAAW;IACT,gBAAgB,EACd,YAAA,GAAA,EAAA,QAAA,CAAsB,EAAE,eAAe,EAAW,CAAC,EACrD;IACA,OAAO;KACL,YAAA,GAAA,EAAA,QAAA,CAAsB,EAAE,eAAe,EAAW,CAAC;KACnD,cAAc,IAAW,KAAA,IACvB,kBAAC,GAAD;MAAgB,UAAU;gBACxB,kBAAC,GAAD;OACE,GAAI,EAAW,iBAAiB,iBAAiB;OACjD,cAAY,CAAC;OAEb,SAAS;OACT,IAAI,EACF,SAAS,EACP,UAAU,OACZ,EACF;OACA,UAAU;iBAEV,kBAAC,GAAD,CAAY,CAAA;MACF,CAAA;KACE,CAAA;KAElB,YAAY;MACV,cAAc,KAAgB;MAC9B;KACF;IACF;IACA,YAAY;KACV,YAAA,GAAA,EAAA,QAAA,CAAsB,EAAE,eAAe,EAAW,CAAC;KACnD,UAAU,KAAY,CAAC;IACzB;GACF;GACA,OAAO,KAAS;GAChB,SAAS;EACV,CAAA;CAEL,GAAG;EAAC;EAAU;EAAS;EAAa;EAAU;EAAc;EAAgB;EAAO;EAAW;EAAa;EAAM;EAAY;EAAc;EAAM;EAAM;EAAG;EAAU;CAAoB,CAAC;CAEzL,OACE,kBAAC,GAAD;EACE,GAAI,EAAW,iBAAiB,aAAa;GAAE;GAAO;EAAK,CAAC;EAC5D,WAAA;EACA,IAAI;GACF,yCAAyC,EACvC,SAAS,UACX;GACA,QAAQ,EACN,SAAS,OACX;EACF;YAVF,CAYE,kBAAC,GAAD;GACW;GACT,cAAc;GACR;GACN,QAAQ;EACT,CAAA,GACC,CAAC,CAAC,KAAW,kBAAC,GAAD,CAA4B,CAAA,CAChC;;AAEjB"}
@@ -0,0 +1,14 @@
1
+ import { ReactElement } from 'react';
2
+ import { FieldValues, Path } from 'react-hook-form';
3
+ import { ToggleButtonOption } from '../../../models/form';
4
+ export type ToggleButtonProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {
5
+ readonly disabled?: boolean;
6
+ readonly infoMessage?: string;
7
+ readonly name: TName;
8
+ readonly onChange?: (value: string) => void;
9
+ readonly options: ToggleButtonOption[];
10
+ readonly required?: boolean;
11
+ readonly row?: boolean;
12
+ readonly warningMessage?: string;
13
+ };
14
+ export declare const ToggleButtonGroup: <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({ disabled, infoMessage, name, onChange: onChangeProp, options, required, warningMessage, }: ToggleButtonProps<TFieldValues, TName>) => ReactElement;
@@ -0,0 +1 @@
1
+ export * from './ToggleButtonGroup';
@@ -0,0 +1,57 @@
1
+ import { t as e } from "../../../_chunks/FormUtil.js";
2
+ import { i as t, t as n } from "../../../_chunks/index.esm.js";
3
+ import { FormFieldHelperText as r } from "../../helpers/FormFieldHelperText/index.js";
4
+ import { useCallback as i, useRef as a } from "react";
5
+ import { FormControl as o, FormHelperText as s, ToggleButton as c, ToggleButtonGroup as l } from "@mui/material";
6
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
7
+ import { TestIdUtil as f } from "@gen-epix/ui-core/utils/TestIdUtil";
8
+ //#region src/components/fields/ToggleButtonGroup/ToggleButtonGroup.tsx
9
+ var p = ({ disabled: p, infoMessage: m, name: h, onChange: g, options: _, required: v, warningMessage: y }) => {
10
+ let { control: b, formState: { errors: x } } = t(), S = e.getFieldErrorMessage(x, h), C = a(null), w = !!S, T = i((e) => (t, n) => {
11
+ v && n === null || (g && g(n), e(n));
12
+ }, [g, v]), E = i(({ field: { onBlur: e, onChange: t, ref: n, value: r } }) => (n({ focus: () => {
13
+ C?.current?.focus();
14
+ } }), /* @__PURE__ */ u(l, {
15
+ color: "primary",
16
+ exclusive: !0,
17
+ onBlur: e,
18
+ onChange: T(t),
19
+ value: r,
20
+ children: _.map((e) => /* @__PURE__ */ u(c, {
21
+ ...f.createAttributes("ToggleButton-option", {
22
+ code: e.value.toString(),
23
+ description: e.label
24
+ }),
25
+ disabled: p,
26
+ value: e.value,
27
+ children: e.label
28
+ }, e.value.toString()))
29
+ })), [
30
+ T,
31
+ _,
32
+ p
33
+ ]);
34
+ return /* @__PURE__ */ d(o, {
35
+ error: w,
36
+ ...f.createAttributes("ToggleButtonGroup", { name: h }),
37
+ fullWidth: !0,
38
+ children: [/* @__PURE__ */ u(n, {
39
+ control: b,
40
+ defaultValue: null,
41
+ name: h,
42
+ render: E
43
+ }), /* @__PURE__ */ u(s, {
44
+ sx: { ml: 0 },
45
+ children: /* @__PURE__ */ u(r, {
46
+ errorMessage: S,
47
+ infoMessage: m,
48
+ noIndent: !0,
49
+ warningMessage: y
50
+ })
51
+ })]
52
+ });
53
+ };
54
+ //#endregion
55
+ export { p as ToggleButtonGroup };
56
+
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/ToggleButtonGroup/ToggleButtonGroup.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ReactElement,\n} from 'react';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormHelperText,\n ToggleButtonGroup as MuiToggleButtonGroup,\n ToggleButton,\n} from '@mui/material';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport type { ToggleButtonOption } from '../../../models/form';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\n\nexport type ToggleButtonProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly name: TName;\n readonly onChange?: (value: string) => void;\n readonly options: ToggleButtonOption[];\n readonly required?: boolean;\n readonly row?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const ToggleButtonGroup = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n disabled,\n infoMessage,\n name,\n onChange: onChangeProp,\n options,\n required,\n warningMessage,\n}: ToggleButtonProps<TFieldValues, TName>): ReactElement => {\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const hasError = !!errorMessage;\n\n const onMuiToggleButtonChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: ChangeEvent<unknown>, value: string) => {\n if (required && value === null) {\n return;\n }\n if (onChangeProp) {\n onChangeProp(value);\n }\n onChange(value);\n }\n , [onChangeProp, required]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n return (\n <MuiToggleButtonGroup\n color={'primary'}\n exclusive\n onBlur={onBlur}\n onChange={onMuiToggleButtonChange(onChange)}\n value={value}\n >\n { options.map((option) => {\n return (\n <ToggleButton\n key={option.value.toString()}\n {...TestIdUtil.createAttributes('ToggleButton-option', { code: option.value.toString(), description: option.label })}\n disabled={disabled}\n value={option.value}\n >\n {option.label}\n </ToggleButton>\n );\n })}\n </MuiToggleButtonGroup>\n );\n }, [onMuiToggleButtonChange, options, disabled]);\n\n return (\n <FormControl\n error={hasError}\n {...TestIdUtil.createAttributes('ToggleButtonGroup', { name })}\n fullWidth\n >\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n <FormHelperText sx={{ ml: 0 }}>\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n};\n"],"mappings":";;;;;;;;AAyCA,IAAa,KAA8G,EACzH,aACA,gBACA,SACA,UAAU,GACV,YACA,aACA,wBAC0D;CAC1D,IAAM,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GAEzD,IAAW,EAAyB,IAAI,GACxC,IAAW,CAAC,CAAC,GAEb,IAA0B,GAAa,OAC1C,GAA8B,MAAkB;EAC3C,KAAY,MAAU,SAGtB,KACF,EAAa,CAAK,GAEpB,EAAS,CAAK;CAChB,GACA,CAAC,GAAc,CAAQ,CAAC,GAEpB,IAAmB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtE,EAAI,EACF,aAAa;EACX,GAAU,SAAS,MAAM;CAC3B,EACF,CAAC,GAEC,kBAAC,GAAD;EACE,OAAO;EACP,WAAA;EACQ;EACR,UAAU,EAAwB,CAAQ;EACnC;YAEL,EAAQ,KAAK,MAEX,kBAAC,GAAD;GAEE,GAAI,EAAW,iBAAiB,uBAAuB;IAAE,MAAM,EAAO,MAAM,SAAS;IAAG,aAAa,EAAO;GAAM,CAAC;GACzG;GACV,OAAO,EAAO;aAEb,EAAO;EACI,GANP,EAAO,MAAM,SAAS,CAMf,CAEjB;CACmB,CAAA,IAEvB;EAAC;EAAyB;EAAS;CAAQ,CAAC;CAE/C,OACE,kBAAC,GAAD;EACE,OAAO;EACP,GAAI,EAAW,iBAAiB,qBAAqB,EAAE,QAAK,CAAC;EAC7D,WAAA;YAHF,CAKE,kBAAC,GAAD;GACW;GACT,cAAc;GACR;GACN,QAAQ;EACT,CAAA,GACD,kBAAC,GAAD;GAAgB,IAAI,EAAE,IAAI,EAAE;aAC1B,kBAAC,GAAD;IACgB;IACD;IACb,UAAA;IACgB;GACjB,CAAA;EACa,CAAA,CACL;;AAEjB"}
@@ -0,0 +1,16 @@
1
+ import { ReactElement } from 'react';
2
+ import { FieldValues, Path } from 'react-hook-form';
3
+ import { TransferListOption } from '../../../models/form';
4
+ export type TransferListProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {
5
+ readonly disabled?: boolean;
6
+ readonly height?: number;
7
+ readonly infoMessage?: string;
8
+ readonly label: string;
9
+ readonly loading?: boolean;
10
+ readonly name: TName;
11
+ readonly onChange?: (value: string) => void;
12
+ readonly options: TransferListOption[];
13
+ readonly required?: boolean;
14
+ readonly warningMessage?: string;
15
+ };
16
+ export declare const TransferList: <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({ disabled, height, infoMessage, label, loading, name, onChange: onChangeProp, options, required, warningMessage, }: TransferListProps<TFieldValues, TName>) => ReactElement;
@@ -0,0 +1 @@
1
+ export * from './TransferList';
@@ -0,0 +1,2 @@
1
+ import { t as e } from "../../../_chunks/TransferList.js";
2
+ export { e as TransferList };
@@ -0,0 +1,15 @@
1
+ import { ReactElement } from 'react';
2
+ import { FieldValues, Path } from 'react-hook-form';
3
+ export type UploadButtonProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {
4
+ readonly accept: string;
5
+ readonly disabled?: boolean;
6
+ readonly infoMessage?: string;
7
+ readonly label: string;
8
+ readonly loading?: boolean;
9
+ readonly multiple?: boolean;
10
+ readonly name: TName;
11
+ readonly onChange?: (value: FileList) => void;
12
+ readonly required?: boolean;
13
+ readonly warningMessage?: string;
14
+ };
15
+ export declare const UploadButton: <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({ accept, disabled, infoMessage, label, multiple, name, onChange: onChangeProp, required, warningMessage, }: UploadButtonProps<TFieldValues, TName>) => ReactElement;
@@ -0,0 +1 @@
1
+ export * from './UploadButton';
@@ -0,0 +1,2 @@
1
+ import { t as e } from "../../../_chunks/UploadButton.js";
2
+ export { e as UploadButton };
@@ -0,0 +1,8 @@
1
+ import { ReactElement } from 'react';
2
+ export type FormFieldHelperTextProps = {
3
+ readonly errorMessage?: string;
4
+ readonly infoMessage?: string;
5
+ readonly noIndent?: boolean;
6
+ readonly warningMessage?: string;
7
+ };
8
+ export declare const FormFieldHelperText: ({ errorMessage, infoMessage, noIndent, warningMessage, }: FormFieldHelperTextProps) => ReactElement;
@@ -0,0 +1 @@
1
+ export * from './FormFieldHelperText';
@@ -0,0 +1,50 @@
1
+ import { Box as e, FormHelperText as t, useTheme as n } from "@mui/material";
2
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ import { TestIdUtil as a } from "@gen-epix/ui-core/utils/TestIdUtil";
4
+ import o from "@mui/icons-material/Error";
5
+ import s from "@mui/icons-material/WarningAmber";
6
+ import c from "@mui/icons-material/InfoOutlined";
7
+ //#region src/components/helpers/FormFieldHelperText/FormFieldHelperText.tsx
8
+ var l = {
9
+ height: "13px",
10
+ marginRight: "1px",
11
+ position: "relative",
12
+ top: "3px",
13
+ width: "13px"
14
+ }, u = ({ errorMessage: u, infoMessage: d, noIndent: f, warningMessage: p }) => {
15
+ let m = a.createAttributes("FormFieldHelperText"), h = n();
16
+ return u ? /* @__PURE__ */ i(t, {
17
+ ...m,
18
+ component: "span",
19
+ error: !0,
20
+ role: "alert",
21
+ sx: {
22
+ marginLeft: f ? 0 : h.spacing(-2),
23
+ position: "relative"
24
+ },
25
+ children: [/* @__PURE__ */ r(o, { sx: l }), u]
26
+ }) : p ? /* @__PURE__ */ i(e, {
27
+ ...m,
28
+ className: "Mui-warning",
29
+ component: "span",
30
+ role: "alert",
31
+ sx: {
32
+ marginLeft: f ? 0 : h.spacing(-2),
33
+ position: "relative"
34
+ },
35
+ children: [/* @__PURE__ */ r(s, { sx: l }), p]
36
+ }) : d ? /* @__PURE__ */ i(e, {
37
+ ...m,
38
+ component: "span",
39
+ role: "alert",
40
+ sx: {
41
+ marginLeft: f ? 0 : h.spacing(-2),
42
+ position: "relative"
43
+ },
44
+ children: [/* @__PURE__ */ r(c, { sx: l }), d]
45
+ }) : null;
46
+ };
47
+ //#endregion
48
+ export { u as FormFieldHelperText };
49
+
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/helpers/FormFieldHelperText/FormFieldHelperText.tsx"],"sourcesContent":["import type {\n SxProps,\n Theme,\n} from '@mui/material';\nimport {\n Box,\n FormHelperText,\n useTheme,\n} from '@mui/material';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/WarningAmber';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport type { ReactElement } from 'react';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nexport type FormFieldHelperTextProps = {\n readonly errorMessage?: string;\n readonly infoMessage?: string;\n readonly noIndent?: boolean;\n readonly warningMessage?: string;\n};\n\nconst iconStyle: SxProps<Theme> = {\n height: '13px',\n marginRight: '1px',\n position: 'relative',\n top: '3px',\n width: '13px',\n};\n\nexport const FormFieldHelperText = ({\n errorMessage,\n infoMessage,\n noIndent,\n warningMessage,\n}: FormFieldHelperTextProps): ReactElement => {\n const testIdAttributes = TestIdUtil.createAttributes('FormFieldHelperText');\n const theme = useTheme();\n\n if (errorMessage) {\n return (\n <FormHelperText\n {...testIdAttributes}\n component={'span'}\n error\n role={'alert'}\n sx={{\n marginLeft: noIndent ? 0 : theme.spacing(-2),\n position: 'relative',\n }}\n >\n <ErrorIcon sx={iconStyle} />\n {errorMessage}\n </FormHelperText>\n );\n } else if (warningMessage) {\n return (\n <Box\n {...testIdAttributes}\n className={'Mui-warning'}\n component={'span'}\n role={'alert'}\n sx={{\n marginLeft: noIndent ? 0 : theme.spacing(-2),\n position: 'relative',\n }}\n >\n <WarningIcon sx={iconStyle} />\n {warningMessage}\n </Box>\n );\n } else if (infoMessage) {\n return (\n <Box\n {...testIdAttributes}\n component={'span'}\n role={'alert'}\n sx={{\n marginLeft: noIndent ? 0 : theme.spacing(-2),\n position: 'relative',\n }}\n >\n <InfoOutlinedIcon sx={iconStyle} />\n {infoMessage}\n </Box>\n );\n }\n return null;\n};\n"],"mappings":";;;;;;;AAsBA,IAAM,IAA4B;CAChC,QAAQ;CACR,aAAa;CACb,UAAU;CACV,KAAK;CACL,OAAO;AACT,GAEa,KAAuB,EAClC,iBACA,gBACA,aACA,wBAC4C;CAC5C,IAAM,IAAmB,EAAW,iBAAiB,qBAAqB,GACpE,IAAQ,EAAS;CAkDvB,OAhDI,IAEA,kBAAC,GAAD;EACE,GAAI;EACJ,WAAW;EACX,OAAA;EACA,MAAM;EACN,IAAI;GACF,YAAY,IAAW,IAAI,EAAM,QAAQ,EAAE;GAC3C,UAAU;EACZ;YARF,CAUE,kBAAC,GAAD,EAAW,IAAI,EAAY,CAAA,GAC1B,CACa;MAET,IAEP,kBAAC,GAAD;EACE,GAAI;EACJ,WAAW;EACX,WAAW;EACX,MAAM;EACN,IAAI;GACF,YAAY,IAAW,IAAI,EAAM,QAAQ,EAAE;GAC3C,UAAU;EACZ;YARF,CAUE,kBAAC,GAAD,EAAa,IAAI,EAAY,CAAA,GAC5B,CACE;MAEE,IAEP,kBAAC,GAAD;EACE,GAAI;EACJ,WAAW;EACX,MAAM;EACN,IAAI;GACF,YAAY,IAAW,IAAI,EAAM,QAAQ,EAAE;GAC3C,UAAU;EACZ;YAPF,CASE,kBAAC,GAAD,EAAkB,IAAI,EAAY,CAAA,GACjC,CACE;MAGF;AACT"}
@@ -0,0 +1,4 @@
1
+ export type FormFieldLoadingIndicatorProps = {
2
+ readonly inline?: boolean;
3
+ };
4
+ export declare const FormFieldLoadingIndicator: ({ inline }: FormFieldLoadingIndicatorProps) => import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './FormFieldLoadingIndicator';
@@ -0,0 +1,16 @@
1
+ import { LinearProgress as e, useTheme as t } from "@mui/material";
2
+ import { jsx as n } from "react/jsx-runtime";
3
+ //#region src/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.tsx
4
+ var r = ({ inline: r }) => {
5
+ let i = t();
6
+ return /* @__PURE__ */ n(e, { sx: {
7
+ height: "1px",
8
+ position: r ? void 0 : "absolute",
9
+ top: r ? i.spacing(1) : "47px",
10
+ width: "100%"
11
+ } });
12
+ };
13
+ //#endregion
14
+ export { r as FormFieldLoadingIndicator };
15
+
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.tsx"],"sourcesContent":["import {\n LinearProgress,\n useTheme,\n} from '@mui/material';\n\nexport type FormFieldLoadingIndicatorProps = {\n readonly inline?: boolean;\n};\n\nexport const FormFieldLoadingIndicator = ({ inline }: FormFieldLoadingIndicatorProps) => {\n const theme = useTheme();\n return (\n <LinearProgress\n sx={{\n height: '1px',\n position: inline ? undefined : 'absolute',\n top: inline ? theme.spacing(1) : '47px',\n width: '100%',\n }}\n />\n );\n};\n"],"mappings":";;;AASA,IAAa,KAA6B,EAAE,gBAA6C;CACvF,IAAM,IAAQ,EAAS;CACvB,OACE,kBAAC,GAAD,EACE,IAAI;EACF,QAAQ;EACR,UAAU,IAAS,KAAA,IAAY;EAC/B,KAAK,IAAS,EAAM,QAAQ,CAAC,IAAI;EACjC,OAAO;CACT,EACD,CAAA;AAEL"}
@@ -0,0 +1,18 @@
1
+ import { ReactElement, SubmitEventHandler } from 'react';
2
+ import { FieldValues, UseFormReturn } from 'react-hook-form';
3
+ import { ObjectSchema } from 'yup';
4
+ import { FormFieldDefinition, FormGroupDefinition } from '../../../models/form';
5
+ export type GenericFormProps<TFormFields extends FieldValues> = {
6
+ readonly defaultFormValues?: Partial<TFormFields>;
7
+ readonly disableAll?: boolean;
8
+ readonly formFieldDefinitions: FormFieldDefinition<TFormFields>[];
9
+ readonly formGroupDefinitions?: FormGroupDefinition[];
10
+ readonly formId?: string;
11
+ readonly formMethods: UseFormReturn<TFormFields>;
12
+ readonly onSubmit?: SubmitEventHandler<HTMLFormElement>;
13
+ readonly renderField?: (definition: FormFieldDefinition<TFormFields>, element: ReactElement) => ReactElement;
14
+ readonly renderGroup?: (definition: FormGroupDefinition, children: ReactElement) => ReactElement;
15
+ readonly schema: ObjectSchema<TFormFields, TFormFields>;
16
+ readonly wrapForm?: (children: ReactElement) => ReactElement;
17
+ };
18
+ export declare const GenericForm: <TFormFields extends FieldValues>({ disableAll, formFieldDefinitions, formGroupDefinitions, formId, formMethods, onSubmit, renderField, renderGroup, schema, wrapForm, }: GenericFormProps<TFormFields>) => import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './GenericForm';
@@ -0,0 +1,156 @@
1
+ import { t as e } from "../../../_chunks/FormUtil.js";
2
+ import { FORM_FIELD_DEFINITION_TYPE as t } from "../../../models/form.js";
3
+ import { n } from "../../../_chunks/index.esm.js";
4
+ import { useIsFormFieldRequiredFromSchema as r } from "../../../hooks/useIsFormFieldRequiredFromSchema/index.js";
5
+ import { n as i } from "../../../_chunks/RichTextEditor.js";
6
+ import { t as a } from "../../../_chunks/TransferList.js";
7
+ import { t as o } from "../../../_chunks/Autocomplete.js";
8
+ import { Select as s } from "../../fields/Select/index.js";
9
+ import { TextField as c } from "../../fields/TextField/index.js";
10
+ import { NumberField as l } from "../../fields/NumberField/index.js";
11
+ import { t as u } from "../../../_chunks/DatePicker.js";
12
+ import { t as d } from "../../../_chunks/UploadButton.js";
13
+ import { RadioGroup as f } from "../../fields/RadioGroup/index.js";
14
+ import { Switch as p } from "../../fields/Switch/index.js";
15
+ import { Fragment as m, useCallback as h, useMemo as g } from "react";
16
+ import { useTranslation as _ } from "react-i18next";
17
+ import { Alert as v, AlertTitle as y, Box as b, Button as x, Typography as S } from "@mui/material";
18
+ import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
19
+ //#region src/components/helpers/GenericForm/GenericForm.tsx
20
+ var E = ({ disableAll: E, formFieldDefinitions: D, formGroupDefinitions: O, formId: k, formMethods: A, onSubmit: j, renderField: M, renderGroup: N, schema: P, wrapForm: F }) => {
21
+ let { t: I } = _(), L = g(() => e.createBooleanOptions(I), [I]), R = r(P, A.getValues), z = h((e) => {
22
+ switch (e.definition) {
23
+ case t.AUTOCOMPLETE: return /* @__PURE__ */ w(o, {
24
+ ...e,
25
+ disabled: e.disabled || E,
26
+ required: R(e.name)
27
+ });
28
+ case t.BOOLEAN: return /* @__PURE__ */ w(s, {
29
+ ...e,
30
+ disabled: e.disabled || E,
31
+ options: L,
32
+ required: R(e.name)
33
+ });
34
+ case t.BOOLEAN_SWITCH: return /* @__PURE__ */ w(p, {
35
+ ...e,
36
+ disabled: e.disabled || E,
37
+ required: R(e.name)
38
+ });
39
+ case t.DATE: return /* @__PURE__ */ w(u, {
40
+ ...e,
41
+ disabled: e.disabled || E,
42
+ required: R(e.name)
43
+ });
44
+ case t.FILE: return /* @__PURE__ */ w(d, {
45
+ ...e,
46
+ disabled: e.disabled || E,
47
+ required: R(e.name)
48
+ });
49
+ case t.NUMBER: return /* @__PURE__ */ w(l, {
50
+ ...e,
51
+ disabled: e.disabled || E,
52
+ required: R(e.name)
53
+ });
54
+ case t.RADIO_GROUP: return /* @__PURE__ */ w(f, {
55
+ ...e,
56
+ disabled: e.disabled || E,
57
+ required: R(e.name)
58
+ });
59
+ case t.RICH_TEXT: return /* @__PURE__ */ w(i, {
60
+ ...e,
61
+ disabled: e.disabled || E,
62
+ required: R(e.name)
63
+ });
64
+ case t.SELECT: return /* @__PURE__ */ w(s, {
65
+ ...e,
66
+ disabled: e.disabled || E,
67
+ required: R(e.name)
68
+ });
69
+ case t.SWITCH: return /* @__PURE__ */ w(p, {
70
+ ...e,
71
+ disabled: e.disabled || E,
72
+ required: R(e.name)
73
+ });
74
+ case t.TEXTFIELD: return /* @__PURE__ */ w(c, {
75
+ ...e,
76
+ disabled: e.disabled || E,
77
+ required: R(e.name)
78
+ });
79
+ case t.TRANSFER_LIST: return /* @__PURE__ */ w(a, {
80
+ ...e,
81
+ disabled: e.disabled || E,
82
+ required: R(e.name)
83
+ });
84
+ default: throw Error(`Unsupported form field definition: ${e.definition}`);
85
+ }
86
+ }, [
87
+ L,
88
+ E,
89
+ R
90
+ ]), B = h((e) => M ? /* @__PURE__ */ w(m, { children: M(e, z(e)) }, e.name) : /* @__PURE__ */ w(b, {
91
+ sx: { marginY: 1 },
92
+ children: z(e)
93
+ }, e.name), [M, z]), V = g(() => {
94
+ if (!O?.length) return /* @__PURE__ */ w(C, { children: D.map(B) });
95
+ let e = /* @__PURE__ */ new Map();
96
+ for (let t of O) e.set(t.groupKey, []);
97
+ let t = [];
98
+ for (let n of D) n.groupKey && e.has(n.groupKey) ? e.get(n.groupKey)?.push(n) : t.push(n);
99
+ return /* @__PURE__ */ T(C, { children: [O.map((t) => {
100
+ let n = e.get(t.groupKey) ?? [];
101
+ if (!n.length) return null;
102
+ let r = /* @__PURE__ */ w(C, { children: n.map(B) });
103
+ return N ? /* @__PURE__ */ w(m, { children: N(t, r) }, t.groupKey) : /* @__PURE__ */ T(b, {
104
+ sx: { marginY: 2 },
105
+ children: [
106
+ /* @__PURE__ */ w(S, {
107
+ variant: "subtitle1",
108
+ children: t.label
109
+ }),
110
+ t.description && /* @__PURE__ */ w(S, {
111
+ color: "text.secondary",
112
+ variant: "body2",
113
+ children: t.description
114
+ }),
115
+ t.messages?.map((e) => /* @__PURE__ */ T(v, {
116
+ severity: e.severity,
117
+ sx: { "& .MuiAlert-message": { width: "100%" } },
118
+ children: [/* @__PURE__ */ w(y, { children: e.message }), e.buttonLabel && e.onButtonClick && /* @__PURE__ */ w(b, {
119
+ sx: {
120
+ display: "flex",
121
+ justifyContent: "flex-end"
122
+ },
123
+ children: /* @__PURE__ */ w(x, {
124
+ color: "inherit",
125
+ onClick: e.onButtonClick,
126
+ size: "small",
127
+ variant: "text",
128
+ children: e.buttonLabel
129
+ })
130
+ })]
131
+ }, e.message)),
132
+ r
133
+ ]
134
+ }, t.groupKey);
135
+ }), t.map(B)] });
136
+ }, [
137
+ D,
138
+ O,
139
+ N,
140
+ B
141
+ ]);
142
+ return /* @__PURE__ */ w(n, {
143
+ ...A,
144
+ children: /* @__PURE__ */ w(b, {
145
+ autoComplete: "off",
146
+ component: "form",
147
+ id: k,
148
+ onSubmit: j,
149
+ children: F ? F(V) : V
150
+ })
151
+ });
152
+ };
153
+ //#endregion
154
+ export { E as GenericForm };
155
+
156
+ //# sourceMappingURL=index.js.map