@uxf/form 10.0.0-beta.4 → 10.0.0-beta.40

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.
@@ -32,7 +32,7 @@ function CheckboxInput(props) {
32
32
  field.onChange(value);
33
33
  (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, value, event);
34
34
  };
35
- return (react_1.default.createElement(checkbox_input_1.CheckboxInput, { className: props.className, id: id, isDisabled: props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, ref: field.ref, value: (_c = field.value) !== null && _c !== void 0 ? _c : (!props.nullable ? false : undefined) }));
35
+ return (react_1.default.createElement(checkbox_input_1.CheckboxInput, { className: props.className, id: id, isDisabled: props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, ref: field.ref, size: props.size, value: (_c = field.value) !== null && _c !== void 0 ? _c : (!props.nullable ? false : undefined) }));
36
36
  }
37
37
  exports.CheckboxInput = CheckboxInput;
38
38
  CheckboxInput.displayName = "UxfFormCheckboxInput";
@@ -32,7 +32,7 @@ function FileInput(props) {
32
32
  field.onChange(value);
33
33
  (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, value, event);
34
34
  };
35
- return (react_1.default.createElement(file_input_1.FileInput, { accept: props.accept, className: props.className, form: props.form, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, id: id, isClearable: props.isClearable, isDisabled: props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, onUploadError: props.onUploadError, onUploadFile: props.onUploadFile, ref: field.ref, size: props.size, value: field.value, variant: props.variant }));
35
+ return (react_1.default.createElement(file_input_1.FileInput, { accept: props.accept, className: props.className, form: props.form, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, id: id, isClearable: props.isClearable, isDisabled: props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, onUploadError: props.onUploadError, onUploadFile: props.onUploadFile, placeholder: props.placeholder, ref: field.ref, size: props.size, value: field.value, variant: props.variant }));
36
36
  }
37
37
  exports.FileInput = FileInput;
38
38
  FileInput.displayName = "FileInput";
@@ -21,7 +21,7 @@ const DUMMY_FILE = {
21
21
  };
22
22
  function Default() {
23
23
  const storyFormFileInputs = (control, mode) => (react_1.default.createElement("div", { className: "space-y-4" },
24
- react_1.default.createElement(file_input_1.FileInput, { control: control, label: "Default file input", name: `default-${mode}`, onUploadFile: uploadFIle_mock_1.uploadFile, isClearable: true }),
24
+ react_1.default.createElement(file_input_1.FileInput, { control: control, label: "Default file input", name: `default-${mode}`, onUploadFile: uploadFIle_mock_1.uploadFile, isClearable: true, placeholder: "Nahraj soubor" }),
25
25
  react_1.default.createElement(file_input_1.FileInput, { control: control, id: `required-${mode}`, isRequired: true, label: "Required file input", name: `required-${mode}`, onUploadFile: uploadFIle_mock_1.uploadFile }),
26
26
  react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit")));
27
27
  return (react_1.default.createElement(storybook_form_1.StorybookForm, { defaultValues: { "default-light": DUMMY_FILE } }, ({ control }) => (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
@@ -2,14 +2,12 @@ import { TextInputProps as UITextInputProps } from "@uxf/ui/text-input";
2
2
  import { FieldValues, UseControllerProps } from "react-hook-form";
3
3
  import React from "react";
4
4
  import { FormControlProps } from "@uxf/ui/types";
5
- type OnChangeHandler = FormControlProps<string>["onChange"];
6
5
  export type NumberInputProps<FormData extends FieldValues> = UseControllerProps<FormData> & Omit<UITextInputProps, "inputMode" | "isInvalid" | "maxLength" | "minLength" | "name" | "onChange" | "value" | "type"> & {
7
6
  decimalPlaces?: number;
8
- onChange?: OnChangeHandler;
7
+ onChange?: FormControlProps<number>["onChange"];
9
8
  requiredMessage?: string;
10
9
  };
11
10
  export declare function NumberInput<FormData extends FieldValues>(props: NumberInputProps<FormData>): React.JSX.Element;
12
11
  export declare namespace NumberInput {
13
12
  var displayName: string;
14
13
  }
15
- export {};
@@ -41,15 +41,27 @@ function NumberInput(props) {
41
41
  };
42
42
  const onKeyDown = (event) => {
43
43
  var _a;
44
- if (event.key === "e") {
45
- event.preventDefault();
44
+ // Allow special keys
45
+ const specialKeys = ["Backspace", "Delete", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"];
46
+ // Allow keys for copy/paste/select/cut
47
+ const controlKeys = ["v", "V", "c", "C", "x", "X", "a", "A"];
48
+ // Allow digits and decimal point (.,)
49
+ const allowedDigits = /[0-9+\-.,]/;
50
+ const key = event.key;
51
+ // Check if the key is allowed
52
+ if (!specialKeys.includes(key) && !allowedDigits.test(key)) {
53
+ // Check if Ctrl or Command key is pressed along with control key
54
+ if (!(event.ctrlKey || event.metaKey) || !controlKeys.includes(key)) {
55
+ event.preventDefault();
56
+ }
46
57
  }
47
58
  (_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, event);
48
59
  };
49
60
  const onChange = (value, event) => {
50
61
  var _a;
51
- field.onChange(value);
52
- (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, value, event);
62
+ const parsedValue = props.decimalPlaces ? parseFloat(value) : parseInt(value, 10);
63
+ field.onChange(parsedValue);
64
+ (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, parsedValue, event);
53
65
  };
54
66
  return (react_1.default.createElement(text_input_1.TextInput, { autoComplete: props.autoComplete, className: props.className, enterKeyHint: props.enterKeyHint, form: props.form, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, hiddenLabel: props.hiddenLabel, id: id, inputMode: props.decimalPlaces ? "decimal" : "numeric", isDisabled: props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, leftAddon: props.leftAddon, leftElement: props.leftElement, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, onKeyDown: onKeyDown, pattern: props.pattern, placeholder: props.placeholder, step: props.decimalPlaces ? Number(0).toFixed(props.decimalPlaces - 1) + "1" : props.step, ref: field.ref, rightAddon: props.rightAddon, rightElement: props.rightElement, size: props.size, type: "number", value: (_e = field.value) !== null && _e !== void 0 ? _e : "", variant: props.variant }));
55
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/form",
3
- "version": "10.0.0-beta.4",
3
+ "version": "10.0.0-beta.40",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -12,7 +12,7 @@
12
12
  "author": "UX Fans s.r.o",
13
13
  "license": "MIT",
14
14
  "dependencies": {
15
- "@uxf/ui": "10.0.0-beta.4",
15
+ "@uxf/ui": "10.0.0-beta.40",
16
16
  "react-hook-form": "7.44.3",
17
17
  "coordinate-parser": "1.0.7"
18
18
  }
@@ -1,8 +1,8 @@
1
- import { RadioGroupOptionValue, RadioGroupProps as UIRadioGroupProps } from "@uxf/ui/radio-group";
1
+ import { RadioGroupOptionValueId, RadioGroupProps as UIRadioGroupProps } from "@uxf/ui/radio-group";
2
2
  import React from "react";
3
3
  import { FieldValues, UseControllerProps } from "react-hook-form";
4
4
  import { FormControlProps } from "@uxf/ui/types";
5
- type OnChangeHandler = FormControlProps<RadioGroupOptionValue | null>["onChange"];
5
+ type OnChangeHandler = FormControlProps<RadioGroupOptionValueId | null>["onChange"];
6
6
  export type RadioGroupProps<FormData extends FieldValues> = UseControllerProps<FormData> & Omit<UIRadioGroupProps, "isInvalid" | "name" | "onChange" | "value"> & {
7
7
  onChange?: OnChangeHandler;
8
8
  requiredMessage?: string;
@@ -32,7 +32,7 @@ function RadioGroup(props) {
32
32
  field.onChange(value);
33
33
  (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, value, event);
34
34
  };
35
- return (react_1.default.createElement(radio_group_1.RadioGroup, { className: props.className, forceColumn: props.forceColumn, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, hiddenLabel: props.hiddenLabel, id: id, isDisabled: props.options.length === 0 || props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, options: props.options, ref: field.ref, style: props.style, value: (_e = field.value) !== null && _e !== void 0 ? _e : null, variant: props.variant }));
35
+ return (react_1.default.createElement(radio_group_1.RadioGroup, { className: props.className, forceColumn: props.forceColumn, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, hiddenLabel: props.hiddenLabel, id: id, isDisabled: props.options.length === 0 || props.isDisabled, isFocused: props.isFocused, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, options: props.options, radioSize: props.radioSize, ref: field.ref, style: props.style, value: (_e = field.value) !== null && _e !== void 0 ? _e : null, variant: props.variant }));
36
36
  }
37
37
  exports.RadioGroup = RadioGroup;
38
38
  RadioGroup.displayName = "UxfFormRadioGroup";
@@ -14,15 +14,15 @@ exports.default = {
14
14
  };
15
15
  const options = [
16
16
  {
17
- value: "1",
17
+ id: "1",
18
18
  label: "Radio one",
19
19
  },
20
20
  {
21
- value: "2",
21
+ id: "2",
22
22
  label: "Radio two",
23
23
  },
24
24
  {
25
- value: "3",
25
+ id: "3",
26
26
  label: "Radio three-sixty",
27
27
  },
28
28
  ];
package/select/select.js CHANGED
@@ -32,7 +32,7 @@ function Select(props) {
32
32
  field.onChange(value);
33
33
  (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, value, event);
34
34
  };
35
- return (react_1.default.createElement(select_1.Select, { className: props.className, dropdownPlacement: props.dropdownPlacement, forwardRef: field.ref, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, hiddenLabel: props.hiddenLabel, id: id, isClearable: props.isClearable, isDisabled: props.options.length === 0 || props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, options: props.options, placeholder: props.placeholder, value: field.value }));
35
+ return (react_1.default.createElement(select_1.Select, { className: props.className, dropdownPlacement: props.dropdownPlacement, forwardRef: field.ref, helperText: (_d = (_c = fieldState.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : props.helperText, hiddenLabel: props.hiddenLabel, id: id, isClearable: props.isClearable, isDisabled: props.options.length === 0 || props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: onChange, onFocus: props.onFocus, options: props.options, placeholder: props.placeholder, renderOption: props.renderOption, renderSelectedOption: props.renderSelectedOption, value: field.value }));
36
36
  }
37
37
  exports.Select = Select;
38
38
  Select.displayName = "UxfFormSelect";