@gen-epix/ui-core-form 4.0.0 → 4.0.1

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 (34) hide show
  1. package/dist/_chunks/Autocomplete.js.map +1 -1
  2. package/dist/_chunks/DatePicker.js +74 -74
  3. package/dist/_chunks/DatePicker.js.map +1 -1
  4. package/dist/_chunks/FormUtil.js +136 -141
  5. package/dist/_chunks/FormUtil.js.map +1 -1
  6. package/dist/_chunks/RichTextEditor.js +17451 -18531
  7. package/dist/_chunks/RichTextEditor.js.map +1 -1
  8. package/dist/_chunks/TransferList.js +1 -1
  9. package/dist/_chunks/TransferList.js.map +1 -1
  10. package/dist/_chunks/UploadButton.js.map +1 -1
  11. package/dist/_chunks/index.esm.js +236 -186
  12. package/dist/_chunks/index.esm.js.map +1 -1
  13. package/dist/_chunks/isEqual.js.map +1 -1
  14. package/dist/_chunks/isValid.js +1 -1
  15. package/dist/_chunks/isValid.js.map +1 -1
  16. package/dist/_chunks/rolldown-runtime.js +2 -2
  17. package/dist/_chunks/sv.js +15 -15
  18. package/dist/components/fields/CheckboxGroup/index.js +89 -89
  19. package/dist/components/fields/CheckboxGroup/index.js.map +1 -1
  20. package/dist/components/fields/DateRangePicker/index.js +193 -193
  21. package/dist/components/fields/DateRangePicker/index.js.map +1 -1
  22. package/dist/components/fields/NumberField/index.js.map +1 -1
  23. package/dist/components/fields/NumberRangeInput/index.js +140 -140
  24. package/dist/components/fields/NumberRangeInput/index.js.map +1 -1
  25. package/dist/components/fields/RadioGroup/index.js.map +1 -1
  26. package/dist/components/fields/Select/index.js.map +1 -1
  27. package/dist/components/fields/Switch/index.js +44 -44
  28. package/dist/components/fields/Switch/index.js.map +1 -1
  29. package/dist/components/fields/TextField/index.js.map +1 -1
  30. package/dist/components/fields/ToggleButtonGroup/index.js.map +1 -1
  31. package/dist/components/helpers/FormFieldHelperText/index.js.map +1 -1
  32. package/dist/components/helpers/GenericForm/index.js.map +1 -1
  33. package/package.json +3 -3
  34. /package/dist/@types/{ui-form.d.ts → ui-core-form.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/NumberField/NumberField.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n Box,\n FormControl,\n FormHelperText,\n IconButton,\n InputAdornment,\n TextField as MuiTextField,\n Slider,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport type {\n FieldValues,\n Path,\n} from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { NumberUtil } from '@gen-epix/ui-core/utils/NumberUtil';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nexport type NumberFieldProps<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 max?: number;\n readonly min?: number;\n readonly name: TName;\n readonly onChange?: (value: number) => void;\n readonly placeholder?: string;\n readonly required?: boolean;\n readonly showSlider?: boolean;\n readonly step?: number;\n readonly warningMessage?: string;\n};\n\nconst MAX_NUMBER_OF_SLIDER_STEPS = 250;\n\nexport const NumberField = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n autocomplete,\n disabled = false,\n label,\n loading = false,\n max,\n min,\n name,\n onChange: onChangeProp,\n placeholder,\n required = false,\n showSlider = false,\n step,\n warningMessage,\n}: NumberFieldProps<TFieldValues, TName>): ReactElement => {\n const { t } = useTranslation();\n const { formState: { errors }, register, subscribe } = 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 const [internalValue, setInternalValue] = useState<number>(null);\n const [externalValue, setExternalValue] = useState<number>(null);\n const formControlRef = useRef<HTMLDivElement>(null);\n const [hasInputValue, setHasInputValue] = useState(false);\n\n const updateInputValue = useCallback((value: number) => {\n if (inputRef.current) {\n const inputValue = (value ?? '').toString().replace('.', ',');\n inputRef.current.value = inputValue;\n setHasInputValue(!!inputValue);\n }\n }, []);\n\n useEffect(() => {\n const unsubscribe = subscribe({\n callback: ({ name: changedName, values }) => {\n if (changedName !== name) {\n return;\n }\n setInternalValue(values[name]);\n setExternalValue(values[name]);\n updateInputValue(values[name]);\n },\n formState: {\n values: true,\n },\n name,\n });\n return () => {\n unsubscribe();\n };\n }, [name, subscribe, updateInputValue]);\n\n const registration = useMemo(() => register(name), [name, register]);\n\n const shouldShowSlider = useMemo(() => {\n if (!showSlider) {\n return false;\n }\n if (!isFinite(min) || !isFinite(max) || !isFinite(step) || min >= max) {\n return false;\n }\n if ((max - min) / step > MAX_NUMBER_OF_SLIDER_STEPS) {\n return false;\n }\n return true;\n }, [showSlider, min, max, step]);\n\n const emitValue = useCallback(async (parsedValue: number) => {\n let newValue: number;\n\n if (isNaN(parsedValue)) {\n newValue = null;\n } else {\n newValue = parsedValue;\n }\n\n updateInputValue(newValue);\n\n if (newValue !== externalValue) {\n await registration.onChange({\n target: {\n name,\n value: newValue,\n },\n });\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n }\n }, [externalValue, name, onChangeProp, registration, updateInputValue]);\n\n const onResetButtonClick = useCallback(async () => {\n await emitValue(null);\n }, [emitValue]);\n\n\n const onMuiTextFieldBlur = useCallback(async () => {\n const parsedValue = NumberUtil.parse(inputRef.current.value);\n\n await emitValue(parsedValue);\n await registration.onBlur({\n target: {\n name,\n value: parsedValue,\n },\n type: 'blur',\n });\n }, [emitValue, name, registration]);\n\n const onMuiSliderBlur = useCallback(async () => {\n const parsedValue = NumberUtil.parse(inputRef.current.value);\n\n await emitValue(parsedValue);\n await registration.onBlur({\n target: {\n name,\n value: parsedValue,\n },\n type: 'blur',\n });\n }, [emitValue, name, registration]);\n\n const onMuiRangeSliderChange = useCallback((_event: unknown, sliderValue: number | number[]) => {\n const value = Array.isArray(sliderValue) ? sliderValue[0] : sliderValue;\n updateInputValue(value);\n setInternalValue(value);\n }, [updateInputValue]);\n\n let sliderValue = NumberUtil.parse(internalValue);\n if (isNaN(sliderValue)) {\n sliderValue = null;\n } else if (sliderValue < min) {\n sliderValue = min;\n } else if (sliderValue > max) {\n sliderValue = max;\n }\n\n const textField = useMemo(() => (\n <MuiTextField\n defaultValue={internalValue ?? ''}\n disabled={disabled || loading}\n error={hasError}\n inputRef={inputRef}\n label={label}\n onBlur={onMuiTextFieldBlur}\n placeholder={placeholder}\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 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 },\n },\n inputLabel: {\n className: classnames({ 'Mui-warning': hasWarning }),\n required: required && !disabled,\n shrink: hasInputValue,\n },\n }}\n variant={'outlined'}\n />\n ), [autocomplete, disabled, hasError, hasInputValue, hasWarning, internalValue, label, loading, name, onMuiTextFieldBlur, onResetButtonClick, placeholder, required, t]);\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('NumberField', { label, name })}\n fullWidth\n ref={formControlRef}\n sx={{\n '&:hover button, &:focus-within button': {\n display: 'initial',\n },\n button: {\n display: 'none',\n },\n }}\n >\n {!shouldShowSlider && textField}\n {shouldShowSlider && (\n <Box\n sx={{\n alignItems: 'center',\n display: 'grid',\n gap: 2,\n gridTemplateColumns: theme => `${theme.spacing(24)} auto`,\n }}\n >\n {textField}\n <Slider\n color={'primary'}\n marks\n max={max}\n min={min}\n onBlur={onMuiSliderBlur}\n onChange={onMuiRangeSliderChange}\n slotProps={{\n input: {\n 'aria-label': t`Value`,\n },\n }}\n step={step}\n value={sliderValue}\n valueLabelDisplay={'auto'}\n />\n </Box>\n )}\n { !!loading && <FormFieldLoadingIndicator />}\n <FormHelperText>\n <FormFieldHelperText\n errorMessage={errorMessage}\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/NumberField/NumberField.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n Box,\n FormControl,\n FormHelperText,\n IconButton,\n InputAdornment,\n TextField as MuiTextField,\n Slider,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport type {\n FieldValues,\n Path,\n} from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { NumberUtil } from '@gen-epix/ui-core/utils/NumberUtil';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nexport type NumberFieldProps<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 max?: number;\n readonly min?: number;\n readonly name: TName;\n readonly onChange?: (value: number) => void;\n readonly placeholder?: string;\n readonly required?: boolean;\n readonly showSlider?: boolean;\n readonly step?: number;\n readonly warningMessage?: string;\n};\n\nconst MAX_NUMBER_OF_SLIDER_STEPS = 250;\n\nexport const NumberField = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n autocomplete,\n disabled = false,\n label,\n loading = false,\n max,\n min,\n name,\n onChange: onChangeProp,\n placeholder,\n required = false,\n showSlider = false,\n step,\n warningMessage,\n}: NumberFieldProps<TFieldValues, TName>): ReactElement => {\n const { t } = useTranslation();\n const { formState: { errors }, register, subscribe } = 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 const [internalValue, setInternalValue] = useState<number>(null);\n const [externalValue, setExternalValue] = useState<number>(null);\n const formControlRef = useRef<HTMLDivElement>(null);\n const [hasInputValue, setHasInputValue] = useState(false);\n\n const updateInputValue = useCallback((value: number) => {\n if (inputRef.current) {\n const inputValue = (value ?? '').toString().replace('.', ',');\n inputRef.current.value = inputValue;\n setHasInputValue(!!inputValue);\n }\n }, []);\n\n useEffect(() => {\n const unsubscribe = subscribe({\n callback: ({ name: changedName, values }) => {\n if (changedName !== name) {\n return;\n }\n setInternalValue(values[name]);\n setExternalValue(values[name]);\n updateInputValue(values[name]);\n },\n formState: {\n values: true,\n },\n name,\n });\n return () => {\n unsubscribe();\n };\n }, [name, subscribe, updateInputValue]);\n\n const registration = useMemo(() => register(name), [name, register]);\n\n const shouldShowSlider = useMemo(() => {\n if (!showSlider) {\n return false;\n }\n if (!isFinite(min) || !isFinite(max) || !isFinite(step) || min >= max) {\n return false;\n }\n if ((max - min) / step > MAX_NUMBER_OF_SLIDER_STEPS) {\n return false;\n }\n return true;\n }, [showSlider, min, max, step]);\n\n const emitValue = useCallback(async (parsedValue: number) => {\n let newValue: number;\n\n if (isNaN(parsedValue)) {\n newValue = null;\n } else {\n newValue = parsedValue;\n }\n\n updateInputValue(newValue);\n\n if (newValue !== externalValue) {\n await registration.onChange({\n target: {\n name,\n value: newValue,\n },\n });\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n }\n }, [externalValue, name, onChangeProp, registration, updateInputValue]);\n\n const onResetButtonClick = useCallback(async () => {\n await emitValue(null);\n }, [emitValue]);\n\n\n const onMuiTextFieldBlur = useCallback(async () => {\n const parsedValue = NumberUtil.parse(inputRef.current.value);\n\n await emitValue(parsedValue);\n await registration.onBlur({\n target: {\n name,\n value: parsedValue,\n },\n type: 'blur',\n });\n }, [emitValue, name, registration]);\n\n const onMuiSliderBlur = useCallback(async () => {\n const parsedValue = NumberUtil.parse(inputRef.current.value);\n\n await emitValue(parsedValue);\n await registration.onBlur({\n target: {\n name,\n value: parsedValue,\n },\n type: 'blur',\n });\n }, [emitValue, name, registration]);\n\n const onMuiRangeSliderChange = useCallback((_event: unknown, sliderValue: number | number[]) => {\n const value = Array.isArray(sliderValue) ? sliderValue[0] : sliderValue;\n updateInputValue(value);\n setInternalValue(value);\n }, [updateInputValue]);\n\n let sliderValue = NumberUtil.parse(internalValue);\n if (isNaN(sliderValue)) {\n sliderValue = null;\n } else if (sliderValue < min) {\n sliderValue = min;\n } else if (sliderValue > max) {\n sliderValue = max;\n }\n\n const textField = useMemo(() => (\n <MuiTextField\n defaultValue={internalValue ?? ''}\n disabled={disabled || loading}\n error={hasError}\n inputRef={inputRef}\n label={label}\n onBlur={onMuiTextFieldBlur}\n placeholder={placeholder}\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 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 },\n },\n inputLabel: {\n className: classnames({ 'Mui-warning': hasWarning }),\n required: required && !disabled,\n shrink: hasInputValue,\n },\n }}\n variant={'outlined'}\n />\n ), [autocomplete, disabled, hasError, hasInputValue, hasWarning, internalValue, label, loading, name, onMuiTextFieldBlur, onResetButtonClick, placeholder, required, t]);\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('NumberField', { label, name })}\n fullWidth\n ref={formControlRef}\n sx={{\n '&:hover button, &:focus-within button': {\n display: 'initial',\n },\n button: {\n display: 'none',\n },\n }}\n >\n {!shouldShowSlider && textField}\n {shouldShowSlider && (\n <Box\n sx={{\n alignItems: 'center',\n display: 'grid',\n gap: 2,\n gridTemplateColumns: theme => `${theme.spacing(24)} auto`,\n }}\n >\n {textField}\n <Slider\n color={'primary'}\n marks\n max={max}\n min={min}\n onBlur={onMuiSliderBlur}\n onChange={onMuiRangeSliderChange}\n slotProps={{\n input: {\n 'aria-label': t`Value`,\n },\n }}\n step={step}\n value={sliderValue}\n valueLabelDisplay={'auto'}\n />\n </Box>\n )}\n { !!loading && <FormFieldLoadingIndicator />}\n <FormHelperText>\n <FormFieldHelperText\n errorMessage={errorMessage}\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n};\n"],"mappings":"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"}
@@ -32,158 +32,158 @@ var O = /* @__PURE__ */ t(((e, t) => {
32
32
  (0, A.default)(W, e) || (k && k(e), t(e));
33
33
  }, [k, W]), K = f((e) => (t, n) => {
34
34
  G(n, e);
35
- }, [G]);
36
- return /* @__PURE__ */ T(a, {
37
- control: R,
38
- defaultValue: null,
39
- name: O,
40
- render: f(({ field: { onBlur: n, onChange: r, ref: i, value: a } }) => {
41
- i({ focus: () => {
42
- H?.current?.focus();
43
- } });
44
- let f = a?.[0], p = a?.[1], m = (e) => {
45
- e.target.value === "" ? G([null, p], r) : (0, M.default)(+e.target.value) && G([+e.target.value, p], r);
46
- }, h = (e) => {
47
- e.target.value === "" ? G([f, null], r) : (0, M.default)(+e.target.value) && G([f, +e.target.value], r);
48
- }, C = () => {
49
- f === null || !(0, M.default)(f) ? G([null, p], r) : f < d ? G([d, p], r) : f > u ? G([u, u], r) : (0, j.default)(p) && f > p && G([p, f], r), n();
50
- }, k = () => {
51
- p === null || !(0, M.default)(p) ? G([f, null], r) : p > u ? G([f, u], r) : p < d ? G([d, d], r) : (0, j.default)(f) && p < f && G([p, f], r), n();
52
- }, A = () => {
53
- G([null, null], r);
54
- };
55
- return /* @__PURE__ */ E(g, {
56
- ...D.createAttributes("RangeSlider", {
57
- label: c,
58
- name: O
59
- }),
60
- sx: {
61
- "&:hover legend button, &:focus-within legend button": { display: "initial" },
62
- "legend button": { display: "none" }
63
- },
64
- children: [
65
- !l && /* @__PURE__ */ E(g, {
66
- sx: {
67
- display: "grid",
68
- gridTemplateColumns: "max-content auto max-content",
69
- position: "relative"
70
- },
71
- children: [
72
- /* @__PURE__ */ T(g, {
35
+ }, [G]), q = f(({ field: { onBlur: n, onChange: r, ref: i, value: a } }) => {
36
+ i({ focus: () => {
37
+ H?.current?.focus();
38
+ } });
39
+ let f = a?.[0], p = a?.[1], m = (e) => {
40
+ e.target.value === "" ? G([null, p], r) : (0, M.default)(+e.target.value) && G([+e.target.value, p], r);
41
+ }, h = (e) => {
42
+ e.target.value === "" ? G([f, null], r) : (0, M.default)(+e.target.value) && G([f, +e.target.value], r);
43
+ }, C = () => {
44
+ f === null || !(0, M.default)(f) ? G([null, p], r) : f < d ? G([d, p], r) : f > u ? G([u, u], r) : (0, j.default)(p) && f > p && G([p, f], r), n();
45
+ }, k = () => {
46
+ p === null || !(0, M.default)(p) ? G([f, null], r) : p > u ? G([f, u], r) : p < d ? G([d, d], r) : (0, j.default)(f) && p < f && G([p, f], r), n();
47
+ }, A = () => {
48
+ G([null, null], r);
49
+ };
50
+ return /* @__PURE__ */ E(g, {
51
+ ...D.createAttributes("RangeSlider", {
52
+ label: c,
53
+ name: O
54
+ }),
55
+ sx: {
56
+ "&:hover legend button, &:focus-within legend button": { display: "initial" },
57
+ "legend button": { display: "none" }
58
+ },
59
+ children: [
60
+ !l && /* @__PURE__ */ E(g, {
61
+ sx: {
62
+ display: "grid",
63
+ gridTemplateColumns: "max-content auto max-content",
64
+ position: "relative"
65
+ },
66
+ children: [
67
+ /* @__PURE__ */ T(g, {
68
+ sx: {
69
+ marginTop: 4,
70
+ width: I.spacing(F ? 6 : 16)
71
+ },
72
+ children: /* @__PURE__ */ T(x, {
73
+ fullWidth: !0,
74
+ inputProps: {
75
+ ...D.createAttributes("RangeSlider-from-input"),
76
+ "aria-labelledby": U,
77
+ name: `${O}-from}`,
78
+ variant: "outlined"
79
+ },
80
+ onBlur: C,
81
+ onChange: m,
82
+ placeholder: L`From`,
83
+ size: "small",
84
+ value: f ?? ""
85
+ })
86
+ }),
87
+ /* @__PURE__ */ E(_, {
88
+ error: V,
89
+ fullWidth: !0,
90
+ sx: { position: "initial" },
91
+ children: [/* @__PURE__ */ E(y, {
92
+ component: "legend",
93
+ disabled: e || l,
94
+ id: U,
95
+ required: N,
73
96
  sx: {
74
- marginTop: 4,
75
- width: I.spacing(F ? 6 : 16)
97
+ left: 0,
98
+ position: "absolute"
76
99
  },
77
- children: /* @__PURE__ */ T(x, {
78
- fullWidth: !0,
79
- inputProps: {
80
- ...D.createAttributes("RangeSlider-from-input"),
81
- "aria-labelledby": U,
82
- name: `${O}-from}`,
83
- variant: "outlined"
84
- },
85
- onBlur: C,
86
- onChange: m,
87
- placeholder: L`From`,
88
- size: "small",
89
- value: f ?? ""
90
- })
91
- }),
92
- /* @__PURE__ */ E(_, {
93
- error: V,
94
- fullWidth: !0,
95
- sx: { position: "initial" },
96
- children: [/* @__PURE__ */ E(y, {
97
- component: "legend",
98
- disabled: e || l,
99
- id: U,
100
- required: N,
101
- sx: {
102
- left: 0,
103
- position: "absolute"
104
- },
105
- children: [c, !e && /* @__PURE__ */ T(b, {
106
- ...D.createAttributes("RangeSlider-reset"),
107
- "aria-label": L`Clear number range`,
108
- onClick: A,
109
- sx: {
110
- "& svg": { fontSize: "16px" },
111
- position: "absolute",
112
- top: "-10px"
113
- },
114
- tabIndex: -1,
115
- children: /* @__PURE__ */ T(w, {})
116
- })]
117
- }), /* @__PURE__ */ T(g, {
100
+ children: [c, !e && /* @__PURE__ */ T(b, {
101
+ ...D.createAttributes("RangeSlider-reset"),
102
+ "aria-label": L`Clear number range`,
103
+ onClick: A,
118
104
  sx: {
119
- marginTop: 4,
120
- marginX: 3
105
+ "& svg": { fontSize: "16px" },
106
+ position: "absolute",
107
+ top: "-10px"
121
108
  },
122
- children: F && /* @__PURE__ */ T(S, {
123
- color: "primary",
124
- max: u,
125
- min: d,
126
- onBlur: n,
127
- onChange: K(r),
128
- slotProps: { input: { "aria-label": L`Value` } },
129
- value: a,
130
- valueLabelDisplay: "off"
131
- })
109
+ tabIndex: -1,
110
+ children: /* @__PURE__ */ T(w, {})
132
111
  })]
133
- }),
134
- /* @__PURE__ */ T(g, {
112
+ }), /* @__PURE__ */ T(g, {
135
113
  sx: {
136
114
  marginTop: 4,
137
- width: I.spacing(F ? 6 : 16)
115
+ marginX: 3
138
116
  },
139
- children: /* @__PURE__ */ T(x, {
140
- fullWidth: !0,
141
- inputProps: {
142
- ...D.createAttributes("RangeSlider-to-input"),
143
- "aria-labelledby": U,
144
- name: `${O}-to}`,
145
- variant: "outlined"
146
- },
147
- onBlur: k,
148
- onChange: h,
149
- placeholder: L`To`,
150
- size: "small",
151
- value: p ?? ""
117
+ children: F && /* @__PURE__ */ T(S, {
118
+ color: "primary",
119
+ max: u,
120
+ min: d,
121
+ onBlur: n,
122
+ onChange: K(r),
123
+ slotProps: { input: { "aria-label": L`Value` } },
124
+ value: a,
125
+ valueLabelDisplay: "off"
152
126
  })
127
+ })]
128
+ }),
129
+ /* @__PURE__ */ T(g, {
130
+ sx: {
131
+ marginTop: 4,
132
+ width: I.spacing(F ? 6 : 16)
133
+ },
134
+ children: /* @__PURE__ */ T(x, {
135
+ fullWidth: !0,
136
+ inputProps: {
137
+ ...D.createAttributes("RangeSlider-to-input"),
138
+ "aria-labelledby": U,
139
+ name: `${O}-to}`,
140
+ variant: "outlined"
141
+ },
142
+ onBlur: k,
143
+ onChange: h,
144
+ placeholder: L`To`,
145
+ size: "small",
146
+ value: p ?? ""
153
147
  })
154
- ]
155
- }),
156
- !!l && /* @__PURE__ */ T(s, { inline: !0 }),
157
- /* @__PURE__ */ T(v, {
158
- sx: { ml: 0 },
159
- children: /* @__PURE__ */ T(o, {
160
- errorMessage: B,
161
- infoMessage: t,
162
- noIndent: !0,
163
- warningMessage: P
164
148
  })
149
+ ]
150
+ }),
151
+ !!l && /* @__PURE__ */ T(s, { inline: !0 }),
152
+ /* @__PURE__ */ T(v, {
153
+ sx: { ml: 0 },
154
+ children: /* @__PURE__ */ T(o, {
155
+ errorMessage: B,
156
+ infoMessage: t,
157
+ noIndent: !0,
158
+ warningMessage: P
165
159
  })
166
- ]
167
- });
168
- }, [
169
- e,
170
- B,
171
- G,
172
- V,
173
- U,
174
- t,
175
- c,
176
- l,
177
- u,
178
- d,
179
- O,
180
- K,
181
- N,
182
- F,
183
- L,
184
- P,
185
- I
186
- ])
160
+ })
161
+ ]
162
+ });
163
+ }, [
164
+ e,
165
+ B,
166
+ G,
167
+ V,
168
+ U,
169
+ t,
170
+ c,
171
+ l,
172
+ u,
173
+ d,
174
+ O,
175
+ K,
176
+ N,
177
+ F,
178
+ L,
179
+ P,
180
+ I
181
+ ]);
182
+ return /* @__PURE__ */ T(a, {
183
+ control: R,
184
+ defaultValue: null,
185
+ name: O,
186
+ render: q
187
187
  });
188
188
  };
189
189
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isNumber.js","../../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isFinite.js","../../../../src/components/fields/NumberRangeInput/NumberRangeInput.tsx"],"sourcesContent":["var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","var root = require('./_root');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nmodule.exports = isFinite;\n","import type {\n ChangeEvent,\n ReactElement,\n} from 'react';\nimport {\n useCallback,\n useId,\n useRef,\n} from 'react';\nimport {\n Box,\n FormControl,\n FormHelperText,\n FormLabel,\n IconButton,\n Input,\n Slider,\n useTheme,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n useWatch,\n} from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport isEqual from 'lodash/isEqual';\nimport isNumber from 'lodash/isNumber';\nimport isFinite from 'lodash/isFinite';\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 NumberRangeInputProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly max: number;\n readonly min: number;\n readonly name: TName;\n readonly onChange?: (value: number | number[]) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const NumberRangeInput = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n disabled = false,\n infoMessage,\n label,\n loading = false,\n max,\n min,\n name,\n onChange: onChangeProp,\n required = false,\n warningMessage,\n}: NumberRangeInputProps<TFieldValues, TName>): ReactElement => {\n const shouldShowSlider = isFinite(min) && isFinite(max);\n const theme = useTheme();\n\n const { t } = useTranslation();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const hasError = !!errorMessage;\n const inputRef = useRef<HTMLInputElement>(null);\n const id = useId();\n\n const outerValue = useWatch({ control, name }) as number[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = useCallback((newValue: number[], onChange: (...event: any[]) => void) => {\n if (isEqual(outerValue, newValue)) {\n return;\n }\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n onChange(newValue);\n }, [onChangeProp, outerValue]);\n\n const onMuiRangeSliderChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: Event, newValue: number | number[]) => {\n handleChange(newValue as number[], onChange);\n }\n , [handleChange]);\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 leftValue = (value as [number, number])?.[0];\n const rightValue = (value as [number, number])?.[1];\n\n const onLeftValueChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === '') {\n handleChange([null, rightValue], onChange);\n } else if (isFinite(+event.target.value)) {\n handleChange([+event.target.value, rightValue], onChange);\n }\n };\n const onRightValueChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === '') {\n handleChange([leftValue, null], onChange);\n } else if (isFinite(+event.target.value)) {\n handleChange([leftValue, +event.target.value], onChange);\n }\n };\n\n const onLeftValueBlur = () => {\n if (leftValue === null || !isFinite(leftValue)) {\n handleChange([null, rightValue], onChange);\n } else if (leftValue < min) {\n handleChange([min, rightValue], onChange);\n } else if (leftValue > max) {\n handleChange([max, max], onChange);\n } else if (isNumber(rightValue) && leftValue > rightValue) {\n handleChange([rightValue, leftValue], onChange);\n }\n\n onBlur();\n };\n const onRightValueBlur = () => {\n if (rightValue === null || !isFinite(rightValue)) {\n handleChange([leftValue, null], onChange);\n } else if (rightValue > max) {\n handleChange([leftValue, max], onChange);\n } else if (rightValue < min) {\n handleChange([min, min], onChange);\n } else if (isNumber(leftValue) && rightValue < leftValue) {\n handleChange([rightValue, leftValue], onChange);\n }\n\n onBlur();\n };\n\n const onResetButtonClick = () => {\n handleChange([null, null], onChange);\n };\n\n return (\n <Box\n {...TestIdUtil.createAttributes('RangeSlider', { label, name })}\n sx={{\n '&:hover legend button, &:focus-within legend button': {\n display: 'initial',\n },\n 'legend button': {\n display: 'none',\n },\n }}\n >\n { !loading && (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'max-content auto max-content',\n position: 'relative',\n }}\n >\n <Box\n sx={{\n marginTop: 4,\n width: theme.spacing(shouldShowSlider ? 6 : 16),\n }}\n >\n <Input\n fullWidth\n inputProps={{\n ...TestIdUtil.createAttributes('RangeSlider-from-input'),\n 'aria-labelledby': id,\n name: `${name}-from}`,\n variant: 'outlined',\n }}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onBlur={onLeftValueBlur}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onChange={onLeftValueChange}\n placeholder={t`From`}\n size={'small'}\n value={leftValue ?? ''}\n />\n </Box>\n <FormControl\n error={hasError}\n fullWidth\n sx={{\n position: 'initial',\n }}\n >\n <FormLabel\n component={'legend'}\n disabled={disabled || loading}\n id={id}\n required={required}\n sx={{\n left: 0,\n position: 'absolute',\n }}\n >\n {label}\n {!disabled && (\n <IconButton\n {...TestIdUtil.createAttributes('RangeSlider-reset')}\n aria-label={t`Clear number range`}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={onResetButtonClick}\n sx={{\n '& svg': {\n fontSize: '16px',\n },\n position: 'absolute',\n top: '-10px',\n }}\n tabIndex={-1}\n >\n <ClearIcon />\n </IconButton>\n )}\n </FormLabel>\n <Box\n sx={{\n marginTop: 4,\n marginX: 3,\n }}\n >\n {shouldShowSlider && (\n <Slider\n color={'primary'}\n max={max}\n min={min}\n onBlur={onBlur}\n onChange={onMuiRangeSliderChange(onChange)}\n slotProps={{\n input: {\n 'aria-label': t`Value`,\n },\n }}\n value={value as [number, number]}\n valueLabelDisplay={'off'}\n />\n )}\n </Box>\n </FormControl>\n <Box\n sx={{\n marginTop: 4,\n width: theme.spacing(shouldShowSlider ? 6 : 16),\n }}\n >\n <Input\n fullWidth\n inputProps={{\n ...TestIdUtil.createAttributes('RangeSlider-to-input'),\n 'aria-labelledby': id,\n name: `${name}-to}`,\n variant: 'outlined',\n }}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onBlur={onRightValueBlur}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onChange={onRightValueChange}\n placeholder={t`To`}\n size={'small'}\n value={rightValue ?? ''}\n />\n </Box>\n </Box>\n )}\n { !!loading && <FormFieldLoadingIndicator inline />}\n <FormHelperText sx={{ ml: 0 }}>\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </Box>\n );\n }, [disabled, errorMessage, handleChange, hasError, id, infoMessage, label, loading, max, min, name, onMuiRangeSliderChange, required, shouldShowSlider, t, warningMessage, theme]);\n\n return (\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n );\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isNumber.js","../../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isFinite.js","../../../../src/components/fields/NumberRangeInput/NumberRangeInput.tsx"],"sourcesContent":["var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","var root = require('./_root');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nmodule.exports = isFinite;\n","import type {\n ChangeEvent,\n ReactElement,\n} from 'react';\nimport {\n useCallback,\n useId,\n useRef,\n} from 'react';\nimport {\n Box,\n FormControl,\n FormHelperText,\n FormLabel,\n IconButton,\n Input,\n Slider,\n useTheme,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n useWatch,\n} from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport isEqual from 'lodash/isEqual';\nimport isNumber from 'lodash/isNumber';\nimport isFinite from 'lodash/isFinite';\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 NumberRangeInputProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly max: number;\n readonly min: number;\n readonly name: TName;\n readonly onChange?: (value: number | number[]) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const NumberRangeInput = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n disabled = false,\n infoMessage,\n label,\n loading = false,\n max,\n min,\n name,\n onChange: onChangeProp,\n required = false,\n warningMessage,\n}: NumberRangeInputProps<TFieldValues, TName>): ReactElement => {\n const shouldShowSlider = isFinite(min) && isFinite(max);\n const theme = useTheme();\n\n const { t } = useTranslation();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const hasError = !!errorMessage;\n const inputRef = useRef<HTMLInputElement>(null);\n const id = useId();\n\n const outerValue = useWatch({ control, name }) as number[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = useCallback((newValue: number[], onChange: (...event: any[]) => void) => {\n if (isEqual(outerValue, newValue)) {\n return;\n }\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n onChange(newValue);\n }, [onChangeProp, outerValue]);\n\n const onMuiRangeSliderChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: Event, newValue: number | number[]) => {\n handleChange(newValue as number[], onChange);\n }\n , [handleChange]);\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 leftValue = (value as [number, number])?.[0];\n const rightValue = (value as [number, number])?.[1];\n\n const onLeftValueChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === '') {\n handleChange([null, rightValue], onChange);\n } else if (isFinite(+event.target.value)) {\n handleChange([+event.target.value, rightValue], onChange);\n }\n };\n const onRightValueChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === '') {\n handleChange([leftValue, null], onChange);\n } else if (isFinite(+event.target.value)) {\n handleChange([leftValue, +event.target.value], onChange);\n }\n };\n\n const onLeftValueBlur = () => {\n if (leftValue === null || !isFinite(leftValue)) {\n handleChange([null, rightValue], onChange);\n } else if (leftValue < min) {\n handleChange([min, rightValue], onChange);\n } else if (leftValue > max) {\n handleChange([max, max], onChange);\n } else if (isNumber(rightValue) && leftValue > rightValue) {\n handleChange([rightValue, leftValue], onChange);\n }\n\n onBlur();\n };\n const onRightValueBlur = () => {\n if (rightValue === null || !isFinite(rightValue)) {\n handleChange([leftValue, null], onChange);\n } else if (rightValue > max) {\n handleChange([leftValue, max], onChange);\n } else if (rightValue < min) {\n handleChange([min, min], onChange);\n } else if (isNumber(leftValue) && rightValue < leftValue) {\n handleChange([rightValue, leftValue], onChange);\n }\n\n onBlur();\n };\n\n const onResetButtonClick = () => {\n handleChange([null, null], onChange);\n };\n\n return (\n <Box\n {...TestIdUtil.createAttributes('RangeSlider', { label, name })}\n sx={{\n '&:hover legend button, &:focus-within legend button': {\n display: 'initial',\n },\n 'legend button': {\n display: 'none',\n },\n }}\n >\n { !loading && (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'max-content auto max-content',\n position: 'relative',\n }}\n >\n <Box\n sx={{\n marginTop: 4,\n width: theme.spacing(shouldShowSlider ? 6 : 16),\n }}\n >\n <Input\n fullWidth\n inputProps={{\n ...TestIdUtil.createAttributes('RangeSlider-from-input'),\n 'aria-labelledby': id,\n name: `${name}-from}`,\n variant: 'outlined',\n }}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onBlur={onLeftValueBlur}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onChange={onLeftValueChange}\n placeholder={t`From`}\n size={'small'}\n value={leftValue ?? ''}\n />\n </Box>\n <FormControl\n error={hasError}\n fullWidth\n sx={{\n position: 'initial',\n }}\n >\n <FormLabel\n component={'legend'}\n disabled={disabled || loading}\n id={id}\n required={required}\n sx={{\n left: 0,\n position: 'absolute',\n }}\n >\n {label}\n {!disabled && (\n <IconButton\n {...TestIdUtil.createAttributes('RangeSlider-reset')}\n aria-label={t`Clear number range`}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={onResetButtonClick}\n sx={{\n '& svg': {\n fontSize: '16px',\n },\n position: 'absolute',\n top: '-10px',\n }}\n tabIndex={-1}\n >\n <ClearIcon />\n </IconButton>\n )}\n </FormLabel>\n <Box\n sx={{\n marginTop: 4,\n marginX: 3,\n }}\n >\n {shouldShowSlider && (\n <Slider\n color={'primary'}\n max={max}\n min={min}\n onBlur={onBlur}\n onChange={onMuiRangeSliderChange(onChange)}\n slotProps={{\n input: {\n 'aria-label': t`Value`,\n },\n }}\n value={value as [number, number]}\n valueLabelDisplay={'off'}\n />\n )}\n </Box>\n </FormControl>\n <Box\n sx={{\n marginTop: 4,\n width: theme.spacing(shouldShowSlider ? 6 : 16),\n }}\n >\n <Input\n fullWidth\n inputProps={{\n ...TestIdUtil.createAttributes('RangeSlider-to-input'),\n 'aria-labelledby': id,\n name: `${name}-to}`,\n variant: 'outlined',\n }}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onBlur={onRightValueBlur}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onChange={onRightValueChange}\n placeholder={t`To`}\n size={'small'}\n value={rightValue ?? ''}\n />\n </Box>\n </Box>\n )}\n { !!loading && <FormFieldLoadingIndicator inline />}\n <FormHelperText sx={{ ml: 0 }}>\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </Box>\n );\n }, [disabled, errorMessage, handleChange, hasError, id, infoMessage, label, loading, max, min, name, onMuiRangeSliderChange, required, shouldShowSlider, t, warningMessage, theme]);\n\n return (\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n );\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ReactElement,\n} from 'react';\nimport {\n useCallback,\n useId,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n FormLabel,\n RadioGroup as MuiRadioGroup,\n Radio,\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 { RadioButtonOption } from '../../../models/form';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\n\nexport type RadioGroupProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean; // NOT USED YET\n readonly name: TName;\n readonly onChange?: (value: string) => void;\n readonly options: RadioButtonOption[];\n readonly required?: boolean;\n readonly row?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const RadioGroup = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n disabled,\n infoMessage,\n label,\n name,\n onChange: onChangeProp,\n options,\n required,\n row,\n warningMessage,\n}: RadioGroupProps<TFieldValues, TName>): ReactElement => {\n const id = useId();\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 onMuiRadioGroupChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: ChangeEvent<unknown>, value: string) => {\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 return (\n <MuiRadioGroup\n aria-labelledby={id}\n onBlur={onBlur}\n onChange={onMuiRadioGroupChange(onChange)}\n row={row}\n value={value}\n >\n { options.map((option, index) => {\n return (\n <FormControlLabel\n key={option.value.toString()}\n {...TestIdUtil.createAttributes('RadioGroup-option', { code: option.value.toString(), description: option.label })}\n control={(\n <Radio\n slotProps={{\n input: {\n ref: index === 0 ? inputRef : undefined,\n },\n }}\n />\n )}\n disabled={disabled}\n label={option.label}\n value={option.value}\n />\n );\n })}\n </MuiRadioGroup>\n );\n }, [id, onMuiRadioGroupChange, row, options, disabled]);\n\n return (\n <FormControl\n error={hasError}\n {...TestIdUtil.createAttributes('RadioGroup', { label, name })}\n fullWidth\n >\n <FormLabel\n component={'legend'}\n id={id}\n required={required}\n >\n {label}\n </FormLabel>\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":";;;;;;;;AA8CA,IAAa,KAAuG,EAClH,aACA,gBACA,UACA,SACA,UAAU,GACV,YACA,aACA,QACA,wBACwD;CACxD,IAAM,IAAK,EAAM,GACX,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GAEzD,IAAW,EAAyB,IAAI,GACxC,IAAW,CAAC,CAAC,GAEb,IAAwB,GAAa,OACxC,GAA8B,MAAkB;EAI/C,AAHI,KACF,EAAa,CAAK,GAEpB,EAAS,CAAK;CAChB,GACA,CAAC,CAAY,CAAC,GAEV,IAAmB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtE,EAAI,EACF,aAAa;EACX,GAAU,SAAS,MAAM;CAC3B,EACF,CAAC,GAEC,kBAAC,GAAD;EACE,mBAAiB;EACT;EACR,UAAU,EAAsB,CAAQ;EACnC;EACE;YAEL,EAAQ,KAAK,GAAQ,MAEnB,kBAAC,GAAD;GAEE,GAAI,EAAW,iBAAiB,qBAAqB;IAAE,MAAM,EAAO,MAAM,SAAS;IAAG,aAAa,EAAO;GAAM,CAAC;GACjH,SACE,kBAAC,GAAD,EACE,WAAW,EACT,OAAO,EACL,KAAK,MAAU,IAAI,IAAW,KAAA,EAChC,EACF,EACD,CAAA;GAEO;GACV,OAAO,EAAO;GACd,OAAO,EAAO;EACf,GAdM,EAAO,MAAM,SAAS,CAc5B,CAEJ;CACY,CAAA,IAEhB;EAAC;EAAI;EAAuB;EAAK;EAAS;CAAQ,CAAC;CAEtD,OACE,kBAAC,GAAD;EACE,OAAO;EACP,GAAI,EAAW,iBAAiB,cAAc;GAAE;GAAO;EAAK,CAAC;EAC7D,WAAA;YAHF;GAKE,kBAAC,GAAD;IACE,WAAW;IACP;IACM;cAET;GACQ,CAAA;GACX,kBAAC,GAAD;IACW;IACT,cAAc;IACR;IACN,QAAQ;GACT,CAAA;GACD,kBAAC,GAAD;IAAgB,IAAI,EAAE,IAAI,EAAE;cAC1B,kBAAC,GAAD;KACgB;KACD;KACb,UAAA;KACgB;IACjB,CAAA;GACa,CAAA;EACL;;AAEjB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ReactElement,\n} from 'react';\nimport {\n useCallback,\n useId,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n FormLabel,\n RadioGroup as MuiRadioGroup,\n Radio,\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 { RadioButtonOption } from '../../../models/form';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\n\nexport type RadioGroupProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean; // NOT USED YET\n readonly name: TName;\n readonly onChange?: (value: string) => void;\n readonly options: RadioButtonOption[];\n readonly required?: boolean;\n readonly row?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const RadioGroup = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n disabled,\n infoMessage,\n label,\n name,\n onChange: onChangeProp,\n options,\n required,\n row,\n warningMessage,\n}: RadioGroupProps<TFieldValues, TName>): ReactElement => {\n const id = useId();\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 onMuiRadioGroupChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: ChangeEvent<unknown>, value: string) => {\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 return (\n <MuiRadioGroup\n aria-labelledby={id}\n onBlur={onBlur}\n onChange={onMuiRadioGroupChange(onChange)}\n row={row}\n value={value}\n >\n { options.map((option, index) => {\n return (\n <FormControlLabel\n key={option.value.toString()}\n {...TestIdUtil.createAttributes('RadioGroup-option', { code: option.value.toString(), description: option.label })}\n control={(\n <Radio\n slotProps={{\n input: {\n ref: index === 0 ? inputRef : undefined,\n },\n }}\n />\n )}\n disabled={disabled}\n label={option.label}\n value={option.value}\n />\n );\n })}\n </MuiRadioGroup>\n );\n }, [id, onMuiRadioGroupChange, row, options, disabled]);\n\n return (\n <FormControl\n error={hasError}\n {...TestIdUtil.createAttributes('RadioGroup', { label, name })}\n fullWidth\n >\n <FormLabel\n component={'legend'}\n id={id}\n required={required}\n >\n {label}\n </FormLabel>\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":";;;;;;;;AA8CA,IAAa,KAAuG,EAClH,aACA,gBACA,UACA,SACA,UAAU,GACV,YACA,aACA,QACA,wBACwD;CACxD,IAAM,IAAK,EAAM,GACX,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GAEzD,IAAW,EAAyB,IAAI,GACxC,IAAW,CAAC,CAAC,GAEb,IAAwB,GAAa,OACxC,GAA8B,MAAkB;EAI/C,AAHI,KACF,EAAa,CAAK,GAEpB,EAAS,CAAK;CAChB,GACA,CAAC,CAAY,CAAC,GAEV,IAAmB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtE,EAAI,EACF,aAAa;EACX,GAAU,SAAS,MAAM;CAC3B,EACF,CAAC,GAEC,kBAAC,GAAD;EACE,mBAAiB;EACT;EACR,UAAU,EAAsB,CAAQ;EACnC;EACE;EAEL,UAAA,EAAQ,KAAK,GAAQ,MAEnB,kBAAC,GAAD;GAEE,GAAI,EAAW,iBAAiB,qBAAqB;IAAE,MAAM,EAAO,MAAM,SAAS;IAAG,aAAa,EAAO;GAAM,CAAC;GACjH,SACE,kBAAC,GAAD,EACE,WAAW,EACT,OAAO,EACL,KAAK,MAAU,IAAI,IAAW,KAAA,EAChC,EACF,EACD,CAAA;GAEO;GACV,OAAO,EAAO;GACd,OAAO,EAAO;EACf,GAdM,EAAO,MAAM,SAAS,CAc5B,CAEJ;CACY,CAAA,IAEhB;EAAC;EAAI;EAAuB;EAAK;EAAS;CAAQ,CAAC;CAEtD,OACE,kBAAC,GAAD;EACE,OAAO;EACP,GAAI,EAAW,iBAAiB,cAAc;GAAE;GAAO;EAAK,CAAC;EAC7D,WAAA;EAHF,UAAA;GAKE,kBAAC,GAAD;IACE,WAAW;IACP;IACM;IAET,UAAA;GACQ,CAAA;GACX,kBAAC,GAAD;IACW;IACT,cAAc;IACR;IACN,QAAQ;GACT,CAAA;GACD,kBAAC,GAAD;IAAgB,IAAI,EAAE,IAAI,EAAE;IAC1B,UAAA,kBAAC,GAAD;KACgB;KACD;KACb,UAAA;KACgB;IACjB,CAAA;GACa,CAAA;EACL;;AAEjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/Select/Select.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport {\n useCallback,\n useId,\n useMemo,\n useRef,\n} from 'react';\nimport {\n Checkbox,\n FormControl,\n FormHelperText,\n IconButton,\n InputAdornment,\n InputLabel,\n ListItemText,\n MenuItem,\n Select as MuiSelect,\n OutlinedInput,\n} from '@mui/material';\nimport type { SelectChangeEvent } from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\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 { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport type { SelectOption } from '../../../models/form';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nexport type SelectProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues>, TMultiple extends boolean> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly multiple?: TMultiple;\n readonly name: TName;\n readonly onChange?: (value: string) => void;\n readonly options: SelectOption[];\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\ntype Value = boolean | number | string;\n\nexport const Select = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>, TMultiple extends boolean = false>({\n disabled = false,\n infoMessage,\n label,\n loading = false,\n multiple,\n name,\n onChange: onChangeProp,\n options,\n required = false,\n warningMessage,\n}: SelectProps<TFieldValues, TName, TMultiple>): ReactElement => {\n const { t } = useTranslation();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const inputRef = useRef<HTMLInputElement>(null);\n const id = useId();\n const labelId = useId();\n const helperTextId = useId();\n\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n\n const mappedOptions = useMemo<Map<Value, SelectOption>>(() => {\n const mapped = new Map<Value, SelectOption>();\n options.forEach(option => {\n mapped.set(option.value, option);\n });\n return mapped;\n }, [options]);\n\n const getIsOptionDisabled = useCallback((value: SelectOption['value']): boolean => mappedOptions.get(value)?.disabled, [mappedOptions]);\n\n const renderValue = useCallback((value: string | string []) => {\n const values = Array.isArray(value) ? value : [value];\n return values.map(v => mappedOptions.get(v)?.label).join(', ');\n }, [mappedOptions]);\n\n const onMuiSelectChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (event: SelectChangeEvent<string>) => {\n if (onChangeProp) {\n onChangeProp(event.target.value);\n }\n onChange(event.target.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 const onResetButtonClick = () => {\n onMuiSelectChange(onChange)({ target: { value: multiple ? [] : '' } } as SelectChangeEvent<string>);\n };\n\n return (\n <>\n <InputLabel\n className={classnames({ 'Mui-warning': hasWarning })}\n error={hasError}\n htmlFor={id}\n id={labelId}\n required={required && !disabled}\n >\n {label}\n </InputLabel>\n <MuiSelect<TFieldValues[TName]>\n disabled={disabled || loading}\n error={hasError}\n input={(\n <OutlinedInput\n endAdornment={disabled ? undefined : (\n <InputAdornment\n position={'start'}\n sx={{\n position: 'absolute',\n right: theme => theme.spacing(2),\n }}\n >\n <IconButton\n {...TestIdUtil.createAttributes('TextField-reset')}\n aria-label={t`Clear selection`}\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 label={label}\n />\n )}\n inputProps={{\n 'aria-describedby': helperTextId,\n 'aria-label': label,\n 'aria-labelledby': labelId,\n className: classnames({\n 'Mui-warning': hasWarning,\n }),\n id,\n ref: inputRef,\n required: required && !disabled,\n }}\n multiple={multiple}\n onBlur={onBlur}\n onChange={onMuiSelectChange(onChange)}\n renderValue={renderValue}\n required={required}\n value={value ?? (multiple ? [] : '') as TFieldValues[TName]}\n >\n { options.map((option) => {\n return (\n <MenuItem\n disabled={getIsOptionDisabled(option.value)}\n key={option.value.toString()}\n value={option.value as string}\n >\n\n {multiple && (\n <Checkbox\n checked={(value as string[]).includes(option.value as string)}\n />\n )}\n <ListItemText primary={option.label} />\n </MenuItem>\n );\n })}\n </MuiSelect>\n <FormHelperText\n className={classnames({ 'Mui-warning': hasWarning })}\n id={helperTextId}\n sx={{ ml: 0 }}\n >\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </>\n );\n }, [disabled, infoMessage, errorMessage, getIsOptionDisabled, t, hasError, hasWarning, helperTextId, id, label, labelId, loading, multiple, onMuiSelectChange, options, renderValue, required, warningMessage]);\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('Select', { label, name })}\n fullWidth\n >\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n { !!loading && <FormFieldLoadingIndicator />}\n </FormControl>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fields/Select/Select.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport {\n useCallback,\n useId,\n useMemo,\n useRef,\n} from 'react';\nimport {\n Checkbox,\n FormControl,\n FormHelperText,\n IconButton,\n InputAdornment,\n InputLabel,\n ListItemText,\n MenuItem,\n Select as MuiSelect,\n OutlinedInput,\n} from '@mui/material';\nimport type { SelectChangeEvent } from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\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 { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport type { SelectOption } from '../../../models/form';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nexport type SelectProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues>, TMultiple extends boolean> = {\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly multiple?: TMultiple;\n readonly name: TName;\n readonly onChange?: (value: string) => void;\n readonly options: SelectOption[];\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\ntype Value = boolean | number | string;\n\nexport const Select = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>, TMultiple extends boolean = false>({\n disabled = false,\n infoMessage,\n label,\n loading = false,\n multiple,\n name,\n onChange: onChangeProp,\n options,\n required = false,\n warningMessage,\n}: SelectProps<TFieldValues, TName, TMultiple>): ReactElement => {\n const { t } = useTranslation();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const inputRef = useRef<HTMLInputElement>(null);\n const id = useId();\n const labelId = useId();\n const helperTextId = useId();\n\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n\n const mappedOptions = useMemo<Map<Value, SelectOption>>(() => {\n const mapped = new Map<Value, SelectOption>();\n options.forEach(option => {\n mapped.set(option.value, option);\n });\n return mapped;\n }, [options]);\n\n const getIsOptionDisabled = useCallback((value: SelectOption['value']): boolean => mappedOptions.get(value)?.disabled, [mappedOptions]);\n\n const renderValue = useCallback((value: string | string []) => {\n const values = Array.isArray(value) ? value : [value];\n return values.map(v => mappedOptions.get(v)?.label).join(', ');\n }, [mappedOptions]);\n\n const onMuiSelectChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (event: SelectChangeEvent<string>) => {\n if (onChangeProp) {\n onChangeProp(event.target.value);\n }\n onChange(event.target.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 const onResetButtonClick = () => {\n onMuiSelectChange(onChange)({ target: { value: multiple ? [] : '' } } as SelectChangeEvent<string>);\n };\n\n return (\n <>\n <InputLabel\n className={classnames({ 'Mui-warning': hasWarning })}\n error={hasError}\n htmlFor={id}\n id={labelId}\n required={required && !disabled}\n >\n {label}\n </InputLabel>\n <MuiSelect<TFieldValues[TName]>\n disabled={disabled || loading}\n error={hasError}\n input={(\n <OutlinedInput\n endAdornment={disabled ? undefined : (\n <InputAdornment\n position={'start'}\n sx={{\n position: 'absolute',\n right: theme => theme.spacing(2),\n }}\n >\n <IconButton\n {...TestIdUtil.createAttributes('TextField-reset')}\n aria-label={t`Clear selection`}\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 label={label}\n />\n )}\n inputProps={{\n 'aria-describedby': helperTextId,\n 'aria-label': label,\n 'aria-labelledby': labelId,\n className: classnames({\n 'Mui-warning': hasWarning,\n }),\n id,\n ref: inputRef,\n required: required && !disabled,\n }}\n multiple={multiple}\n onBlur={onBlur}\n onChange={onMuiSelectChange(onChange)}\n renderValue={renderValue}\n required={required}\n value={value ?? (multiple ? [] : '') as TFieldValues[TName]}\n >\n { options.map((option) => {\n return (\n <MenuItem\n disabled={getIsOptionDisabled(option.value)}\n key={option.value.toString()}\n value={option.value as string}\n >\n\n {multiple && (\n <Checkbox\n checked={(value as string[]).includes(option.value as string)}\n />\n )}\n <ListItemText primary={option.label} />\n </MenuItem>\n );\n })}\n </MuiSelect>\n <FormHelperText\n className={classnames({ 'Mui-warning': hasWarning })}\n id={helperTextId}\n sx={{ ml: 0 }}\n >\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </>\n );\n }, [disabled, infoMessage, errorMessage, getIsOptionDisabled, t, hasError, hasWarning, helperTextId, id, label, labelId, loading, multiple, onMuiSelectChange, options, renderValue, required, warningMessage]);\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('Select', { label, name })}\n fullWidth\n >\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n { !!loading && <FormFieldLoadingIndicator />}\n </FormControl>\n );\n};\n"],"mappings":"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"}
@@ -12,54 +12,54 @@ import { TestIdUtil as h } from "@gen-epix/ui-core/utils/TestIdUtil";
12
12
  var g = /* @__PURE__ */ e(o(), 1), _ = ({ disabled: e = !1, infoMessage: o, label: _, loading: v = !1, name: y, onChange: b, warningMessage: x }) => {
13
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
14
  b && b(n), e(n);
15
- }, [b]);
15
+ }, [b]), O = s(({ field: { onBlur: t, onChange: n, ref: r, value: s } }) => (r({ focus: () => {
16
+ T?.current?.focus();
17
+ } }), /* @__PURE__ */ m(l, {
18
+ ...h.createAttributes("Select", {
19
+ label: _,
20
+ name: y
21
+ }),
22
+ fullWidth: !0,
23
+ children: [
24
+ /* @__PURE__ */ p(u, {
25
+ control: /* @__PURE__ */ p(f, {
26
+ checked: !!s,
27
+ color: "primary",
28
+ slotProps: { input: { ref: T } }
29
+ }),
30
+ disabled: e,
31
+ label: _,
32
+ onBlur: t,
33
+ onChange: D(n)
34
+ }),
35
+ /* @__PURE__ */ p(d, {
36
+ className: (0, g.default)({ "Mui-warning": E }),
37
+ sx: { ml: 0 },
38
+ children: /* @__PURE__ */ p(i, {
39
+ errorMessage: w,
40
+ infoMessage: o,
41
+ noIndent: !0,
42
+ warningMessage: x
43
+ })
44
+ }),
45
+ !!v && /* @__PURE__ */ p(a, {})
46
+ ]
47
+ })), [
48
+ e,
49
+ o,
50
+ w,
51
+ E,
52
+ _,
53
+ v,
54
+ y,
55
+ D,
56
+ x
57
+ ]);
16
58
  return /* @__PURE__ */ p(r, {
17
59
  control: S,
18
60
  defaultValue: null,
19
61
  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
- ])
62
+ render: O
63
63
  });
64
64
  };
65
65
  //#endregion