@uxf/form 1.0.0-beta.100

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 (101) hide show
  1. package/avatar-file-input/avatar-file-input.d.ts +7 -0
  2. package/avatar-file-input/avatar-file-input.js +29 -0
  3. package/avatar-file-input/avatar-file-input.stories.d.ts +8 -0
  4. package/avatar-file-input/avatar-file-input.stories.js +42 -0
  5. package/avatar-file-input/index.d.ts +1 -0
  6. package/avatar-file-input/index.js +17 -0
  7. package/checkbox/checkbox.d.ts +7 -0
  8. package/checkbox/checkbox.js +29 -0
  9. package/checkbox/checkbox.stories.d.ts +8 -0
  10. package/checkbox/checkbox.stories.js +26 -0
  11. package/checkbox/index.d.ts +1 -0
  12. package/checkbox/index.js +17 -0
  13. package/checkbox-button/checkbox-button.d.ts +7 -0
  14. package/checkbox-button/checkbox-button.js +29 -0
  15. package/checkbox-button/checkbox-button.stories.d.ts +8 -0
  16. package/checkbox-button/checkbox-button.stories.js +26 -0
  17. package/checkbox-button/index.d.ts +1 -0
  18. package/checkbox-button/index.js +17 -0
  19. package/color-radio-group/color-radio-group.d.ts +7 -0
  20. package/color-radio-group/color-radio-group.js +29 -0
  21. package/color-radio-group/color-radio-group.stories.d.ts +8 -0
  22. package/color-radio-group/color-radio-group.stories.js +64 -0
  23. package/color-radio-group/index.d.ts +1 -0
  24. package/color-radio-group/index.js +17 -0
  25. package/combobox/combobox.d.ts +7 -0
  26. package/combobox/combobox.js +29 -0
  27. package/combobox/combobox.stories.d.ts +8 -0
  28. package/combobox/combobox.stories.js +32 -0
  29. package/combobox/index.d.ts +1 -0
  30. package/combobox/index.js +17 -0
  31. package/date-picker-input/date-picker-input.d.ts +7 -0
  32. package/date-picker-input/date-picker-input.js +29 -0
  33. package/date-picker-input/date-picker-input.stories.d.ts +8 -0
  34. package/date-picker-input/date-picker-input.stories.js +23 -0
  35. package/date-picker-input/index.d.ts +1 -0
  36. package/date-picker-input/index.js +17 -0
  37. package/file-input/file-input.d.ts +7 -0
  38. package/file-input/file-input.js +29 -0
  39. package/file-input/file-input.stories.d.ts +8 -0
  40. package/file-input/file-input.stories.js +42 -0
  41. package/file-input/index.d.ts +1 -0
  42. package/file-input/index.js +17 -0
  43. package/form/form.d.ts +13 -0
  44. package/form/form.js +47 -0
  45. package/form/form.stories.d.ts +8 -0
  46. package/form/form.stories.js +26 -0
  47. package/form/index.d.ts +1 -0
  48. package/form/index.js +17 -0
  49. package/multi-combobox/index.d.ts +1 -0
  50. package/multi-combobox/index.js +17 -0
  51. package/multi-combobox/multi-combobox.d.ts +7 -0
  52. package/multi-combobox/multi-combobox.js +29 -0
  53. package/multi-combobox/multi-combobox.stories.d.ts +8 -0
  54. package/multi-combobox/multi-combobox.stories.js +36 -0
  55. package/number-input/index.d.ts +1 -0
  56. package/number-input/index.js +17 -0
  57. package/number-input/number-input.d.ts +8 -0
  58. package/number-input/number-input.js +48 -0
  59. package/number-input/number-input.stories.d.ts +8 -0
  60. package/number-input/number-input.stories.js +26 -0
  61. package/package.json +19 -0
  62. package/radio-group/index.d.ts +1 -0
  63. package/radio-group/index.js +17 -0
  64. package/radio-group/radio-group.d.ts +7 -0
  65. package/radio-group/radio-group.js +29 -0
  66. package/radio-group/radio-group.stories.d.ts +8 -0
  67. package/radio-group/radio-group.stories.js +40 -0
  68. package/select/index.d.ts +1 -0
  69. package/select/index.js +17 -0
  70. package/select/select.d.ts +7 -0
  71. package/select/select.js +29 -0
  72. package/select/select.stories.d.ts +8 -0
  73. package/select/select.stories.js +31 -0
  74. package/storybook/form-data-printer.d.ts +6 -0
  75. package/storybook/form-data-printer.js +13 -0
  76. package/storybook/form.d.ts +7 -0
  77. package/storybook/form.js +21 -0
  78. package/text-input/index.d.ts +1 -0
  79. package/text-input/index.js +17 -0
  80. package/text-input/text-input.d.ts +19 -0
  81. package/text-input/text-input.js +42 -0
  82. package/text-input/text-input.stories.d.ts +8 -0
  83. package/text-input/text-input.stories.js +27 -0
  84. package/textarea/index.d.ts +1 -0
  85. package/textarea/index.js +17 -0
  86. package/textarea/textarea.d.ts +7 -0
  87. package/textarea/textarea.js +49 -0
  88. package/textarea/textarea.stories.d.ts +8 -0
  89. package/textarea/textarea.stories.js +24 -0
  90. package/time-picker-input/index.d.ts +1 -0
  91. package/time-picker-input/index.js +17 -0
  92. package/time-picker-input/time-picker-input.d.ts +7 -0
  93. package/time-picker-input/time-picker-input.js +29 -0
  94. package/time-picker-input/time-picker-input.stories.d.ts +8 -0
  95. package/time-picker-input/time-picker-input.stories.js +23 -0
  96. package/toggle/index.d.ts +1 -0
  97. package/toggle/index.js +17 -0
  98. package/toggle/toggle.d.ts +7 -0
  99. package/toggle/toggle.js +29 -0
  100. package/toggle/toggle.stories.d.ts +8 -0
  101. package/toggle/toggle.stories.js +25 -0
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./date-picker-input"), exports);
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { FileInputProps as UIFileInputProps } from "@uxf/ui/file-input";
3
+ import { FieldValues, UseControllerProps } from "react-hook-form";
4
+ export declare type FileInputProps<FormData extends FieldValues> = UseControllerProps<FormData> & Omit<UIFileInputProps, "isInvalid" | "onChange" | "value"> & {
5
+ requiredMessage?: string;
6
+ };
7
+ export declare function FileInput<FormData extends FieldValues>(props: FileInputProps<FormData>): JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileInput = void 0;
7
+ const file_input_1 = require("@uxf/ui/file-input");
8
+ const react_1 = __importDefault(require("react"));
9
+ const react_hook_form_1 = require("react-hook-form");
10
+ function FileInput(props) {
11
+ var _a, _b, _c;
12
+ const { field, fieldState } = (0, react_hook_form_1.useController)({
13
+ control: props.control,
14
+ defaultValue: props.defaultValue,
15
+ name: props.name,
16
+ rules: {
17
+ required: props.isRequired ? props.requiredMessage || "Toto pole je povinné" : undefined,
18
+ ...((_a = props.rules) !== null && _a !== void 0 ? _a : {}),
19
+ },
20
+ shouldUnregister: props.shouldUnregister,
21
+ });
22
+ const onBlur = (event) => {
23
+ var _a;
24
+ field.onBlur();
25
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, event);
26
+ };
27
+ return (react_1.default.createElement(file_input_1.FileInput, { accept: props.accept, className: props.className, form: props.form, helperText: (_c = (_b = fieldState.error) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : props.helperText, id: props.id, isDisabled: props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, name: field.name, onBlur: onBlur, onChange: field.onChange, onFocus: props.onFocus, onUploadError: props.onUploadError, onUploadFiles: props.onUploadFiles, ref: field.ref, size: props.size, variant: props.variant }));
28
+ }
29
+ exports.FileInput = FileInput;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { FileInput } from "./file-input";
3
+ declare const _default: {
4
+ title: string;
5
+ component: typeof FileInput;
6
+ };
7
+ export default _default;
8
+ export declare function Default(): JSX.Element;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const button_1 = require("@uxf/ui/button");
8
+ const react_1 = __importDefault(require("react"));
9
+ const form_1 = require("../storybook/form");
10
+ const file_input_1 = require("./file-input");
11
+ exports.default = {
12
+ title: "Form/FileInput",
13
+ component: file_input_1.FileInput,
14
+ };
15
+ function Default() {
16
+ const handleUpload = (newFiles) => {
17
+ return new Promise((resolve) => {
18
+ setTimeout(() => {
19
+ // eslint-disable-next-line no-console
20
+ console.log(newFiles);
21
+ const response = newFiles.map((file) => {
22
+ var _a;
23
+ return ({
24
+ extension: (_a = file.name.split(".").pop()) !== null && _a !== void 0 ? _a : "",
25
+ id: 0,
26
+ name: file.name,
27
+ uuid: "",
28
+ });
29
+ });
30
+ resolve(response);
31
+ }, 2000);
32
+ });
33
+ };
34
+ const storyFormFileInputs = (control, mode) => (react_1.default.createElement("div", { className: "space-y-4" },
35
+ react_1.default.createElement(file_input_1.FileInput, { control: control, label: "Default file input", name: `default-${mode}`, onUploadFiles: handleUpload }),
36
+ react_1.default.createElement(file_input_1.FileInput, { control: control, id: `required-${mode}`, isRequired: true, label: "Required file input", name: `required-${mode}`, onUploadFiles: handleUpload }),
37
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit")));
38
+ return (react_1.default.createElement(form_1.Form, null, ({ control }) => (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
39
+ react_1.default.createElement("div", { className: "light space-y-2 p-20 lg:w-1/2" }, storyFormFileInputs(control, "light")),
40
+ react_1.default.createElement("div", { className: "dark space-y-2 bg-gray-900 p-20 lg:w-1/2" }, storyFormFileInputs(control, "dark"))))));
41
+ }
42
+ exports.Default = Default;
@@ -0,0 +1 @@
1
+ export * from "./file-input";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./file-input"), exports);
package/form/form.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from "react";
2
+ import { Control, DefaultValues, FieldValues, UseFormReset, UseFormReturn, ValidationMode } from "react-hook-form";
3
+ export declare type FormSubmitHandler<TFieldValues extends FieldValues> = (values: TFieldValues, reset: UseFormReset<TFieldValues>) => Promise<unknown>;
4
+ export declare type FormControl<TFieldValues extends FieldValues> = Control<TFieldValues> & {
5
+ formId: string;
6
+ };
7
+ export interface FormProps<TFieldValues extends FieldValues> {
8
+ children: (control: FormControl<TFieldValues>, formApi: UseFormReturn<TFieldValues>) => ReactNode;
9
+ defaultValues?: DefaultValues<TFieldValues>;
10
+ mode?: keyof ValidationMode;
11
+ onSubmit?: FormSubmitHandler<TFieldValues>;
12
+ }
13
+ export declare function Form<TFieldValues extends FieldValues>(props: FormProps<TFieldValues>): JSX.Element;
package/form/form.js ADDED
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Form = void 0;
27
+ const sr_only_1 = require("@uxf/styles/mixins/sr-only");
28
+ const react_1 = __importStar(require("react"));
29
+ const react_hook_form_1 = require("react-hook-form");
30
+ function Form(props) {
31
+ var _a;
32
+ const formId = (0, react_1.useId)();
33
+ const formApi = (0, react_hook_form_1.useForm)({
34
+ mode: (_a = props.mode) !== null && _a !== void 0 ? _a : "onSubmit",
35
+ defaultValues: props.defaultValues,
36
+ });
37
+ const onSubmit = async (values) => {
38
+ if (props.onSubmit) {
39
+ await props.onSubmit(values, formApi.reset);
40
+ }
41
+ };
42
+ const control = (0, react_1.useMemo)(() => Object.assign(formApi.control, { formId }), [formApi.control, formId]);
43
+ return (react_1.default.createElement("form", { id: formId, noValidate: true, onSubmit: formApi.handleSubmit(onSubmit) },
44
+ props.children(control, formApi),
45
+ props.onSubmit && react_1.default.createElement("input", { style: sr_only_1.srOnly, type: "submit" })));
46
+ }
47
+ exports.Form = Form;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { Form } from "./form";
3
+ declare const _default: {
4
+ title: string;
5
+ component: typeof Form;
6
+ };
7
+ export default _default;
8
+ export declare function Default(): JSX.Element;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const button_1 = require("@uxf/ui/button");
8
+ const react_1 = __importDefault(require("react"));
9
+ const text_input_1 = require("../text-input");
10
+ const form_1 = require("./form");
11
+ exports.default = {
12
+ title: "Form/Form",
13
+ component: form_1.Form,
14
+ };
15
+ function Default() {
16
+ return (
17
+ // eslint-disable-next-line no-console
18
+ react_1.default.createElement(form_1.Form, { onSubmit: async (values) => console.log(values) }, (control) => (react_1.default.createElement(react_1.default.Fragment, null,
19
+ react_1.default.createElement("div", { className: "light mb-4 space-y-4 p-4" },
20
+ react_1.default.createElement(text_input_1.TextInput, { label: "Default input", name: "default", control: control, isRequired: true }),
21
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit")),
22
+ react_1.default.createElement("div", { className: "dark space-y-4 bg-gray-900 p-4" },
23
+ react_1.default.createElement(text_input_1.TextInput, { label: "Default input", name: "default", control: control, isRequired: true }),
24
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit"))))));
25
+ }
26
+ exports.Default = Default;
@@ -0,0 +1 @@
1
+ export * from "./form";
package/form/index.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./form"), exports);
@@ -0,0 +1 @@
1
+ export * from "./multi-combobox";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./multi-combobox"), exports);
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { MultiComboboxProps as UIMultiComboboxProps } from "@uxf/ui/mutli-combobox";
3
+ import { FieldValues, UseControllerProps } from "react-hook-form";
4
+ export declare type ComboProps<FormData extends FieldValues> = UseControllerProps<FormData> & Omit<UIMultiComboboxProps, "isInvalid" | "name" | "onChange" | "value"> & {
5
+ requiredMessage?: string;
6
+ };
7
+ export declare function MultiCombobox<FormData extends Record<string, any>>(props: ComboProps<FormData>): JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MultiCombobox = void 0;
7
+ const mutli_combobox_1 = require("@uxf/ui/mutli-combobox");
8
+ const react_1 = __importDefault(require("react"));
9
+ const react_hook_form_1 = require("react-hook-form");
10
+ function MultiCombobox(props) {
11
+ var _a, _b, _c, _d;
12
+ const { field, fieldState } = (0, react_hook_form_1.useController)({
13
+ control: props.control,
14
+ defaultValue: props.defaultValue,
15
+ name: props.name,
16
+ rules: {
17
+ required: props.isRequired ? props.requiredMessage || "Toto pole je povinné" : undefined,
18
+ ...((_a = props.rules) !== null && _a !== void 0 ? _a : {}),
19
+ },
20
+ shouldUnregister: props.shouldUnregister,
21
+ });
22
+ const onBlur = (event) => {
23
+ var _a;
24
+ field.onBlur();
25
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, event);
26
+ };
27
+ return (react_1.default.createElement(mutli_combobox_1.MultiCombobox, { className: props.className, dropdownPlacement: props.dropdownPlacement, helperText: (_c = (_b = fieldState.error) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : props.helperText, hiddenLabel: props.hiddenLabel, id: props.id, isDisabled: ((_d = props.options) === null || _d === void 0 ? void 0 : _d.length) === 0 || props.isDisabled, isInvalid: !!fieldState.error, isReadOnly: props.isReadOnly, isRequired: props.isRequired, label: props.label, loadOptions: props.loadOptions, name: field.name, onBlur: onBlur, onChange: (value) => field.onChange(value), onFocus: props.onFocus, options: props.options, placeholder: props.placeholder, ref: field.ref, value: field.value, withCheckboxes: props.withCheckboxes }));
28
+ }
29
+ exports.MultiCombobox = MultiCombobox;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { MultiCombobox } from "./multi-combobox";
3
+ declare const _default: {
4
+ title: string;
5
+ component: typeof MultiCombobox;
6
+ };
7
+ export default _default;
8
+ export declare function Default(): JSX.Element;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const button_1 = require("@uxf/ui/button");
8
+ const react_1 = __importDefault(require("react"));
9
+ const form_1 = require("../storybook/form");
10
+ const multi_combobox_1 = require("./multi-combobox");
11
+ exports.default = {
12
+ title: "Form/MultiCombobox",
13
+ component: multi_combobox_1.MultiCombobox,
14
+ };
15
+ const options = [
16
+ { id: "one", label: "Option one", color: "red" },
17
+ { id: "two", label: "Option two", color: "blue" },
18
+ { id: "three", label: "Option three", color: "green" },
19
+ { id: "four", label: "Option four" },
20
+ { id: "five", label: "Option five" },
21
+ { id: "six", label: "Option six" },
22
+ ];
23
+ function Default() {
24
+ const storyFormComboboxes = (control) => (react_1.default.createElement("div", { className: "space-y-8" },
25
+ react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, helperText: "Za\u010Dn\u011Bte ps\u00E1t pro vyhled\u00E1v\u00E1n\u00ED...", id: "form-combobox", label: "Combobox form", name: "combobox1", options: options, placeholder: "Placeholder" }),
26
+ react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, helperText: "Za\u010Dn\u011Bte ps\u00E1t pro vyhled\u00E1v\u00E1n\u00ED...", id: "form-combobox", label: "Combobox with checkboxes", name: "combobox-with-checkboxes", options: options, placeholder: "Placeholder", withCheckboxes: true }),
27
+ react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, helperText: "Za\u010Dn\u011Bte ps\u00E1t pro vyhled\u00E1v\u00E1n\u00ED...", id: "form-combobox", isRequired: true, label: "Combobox form required", name: "combobox-required", options: options, placeholder: "Placeholder" }),
28
+ react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, id: "form-combobox", isDisabled: true, label: "Combobox form disabled", name: "combobox-disabled", options: options, placeholder: "Placeholder" }),
29
+ react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, dropdownPlacement: "top", id: "form-combobox", label: "Combobox form with dropdown top", name: "select-dropdown-top", options: options, placeholder: "Placeholder" }),
30
+ react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, dropdownPlacement: "top", id: "form-combobox", label: "Combobox async", name: "select-dropdown-async", loadOptions: (query) => Promise.resolve(options.filter((option) => !query || option.label.toLowerCase().includes(query.toLowerCase()))), placeholder: "Placeholder" }),
31
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit")));
32
+ return (react_1.default.createElement(form_1.Form, null, ({ control }) => (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
33
+ react_1.default.createElement("div", { className: "light space-y-2 p-20 lg:w-1/2" }, storyFormComboboxes(control)),
34
+ react_1.default.createElement("div", { className: "dark space-y-2 bg-gray-900 p-20 lg:w-1/2" }, storyFormComboboxes(control))))));
35
+ }
36
+ exports.Default = Default;
@@ -0,0 +1 @@
1
+ export * from "./number-input";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./number-input"), exports);
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { TextInputProps as UITextInputProps } from "@uxf/ui/text-input";
3
+ import { FieldValues, UseControllerProps } from "react-hook-form";
4
+ export declare type NumberInputProps<FormData extends FieldValues> = UseControllerProps<FormData> & Omit<UITextInputProps, "inputMode" | "isInvalid" | "maxLength" | "minLength" | "name" | "onChange" | "value" | "type"> & {
5
+ decimalPlaces?: number;
6
+ requiredMessage?: string;
7
+ };
8
+ export declare function NumberInput<FormData extends FieldValues>(props: NumberInputProps<FormData>): JSX.Element;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NumberInput = void 0;
7
+ const text_input_1 = require("@uxf/ui/text-input");
8
+ const react_hook_form_1 = require("react-hook-form");
9
+ const react_1 = __importDefault(require("react"));
10
+ function NumberInput(props) {
11
+ var _a, _b, _c, _d;
12
+ const { field, fieldState } = (0, react_hook_form_1.useController)({
13
+ control: props.control,
14
+ defaultValue: props.defaultValue,
15
+ name: props.name,
16
+ rules: {
17
+ max: typeof props.max === "number" && !isNaN(props.max)
18
+ ? {
19
+ value: props.max,
20
+ message: `Hodnota musí být nižší než ${props.max}.`,
21
+ }
22
+ : undefined,
23
+ min: typeof props.min === "number" && !isNaN(props.min)
24
+ ? {
25
+ value: props.min,
26
+ message: `Hodnota musí být vyšší než ${props.min}.`,
27
+ }
28
+ : undefined,
29
+ required: props.isRequired ? props.requiredMessage || "Toto pole je povinné" : undefined,
30
+ ...((_a = props.rules) !== null && _a !== void 0 ? _a : {}),
31
+ },
32
+ shouldUnregister: props.shouldUnregister,
33
+ });
34
+ const onBlur = (event) => {
35
+ var _a;
36
+ field.onBlur();
37
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, event);
38
+ };
39
+ const onKeyDown = (event) => {
40
+ var _a;
41
+ if (event.key === "e") {
42
+ event.preventDefault();
43
+ }
44
+ (_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, event);
45
+ };
46
+ return (react_1.default.createElement(text_input_1.TextInput, { autoComplete: props.autoComplete, className: props.className, enterKeyHint: props.enterKeyHint, form: props.form, helperText: (_c = (_b = fieldState.error) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : props.helperText, hiddenLabel: props.hiddenLabel, id: props.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: field.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: (_d = field.value) !== null && _d !== void 0 ? _d : "", variant: props.variant }));
47
+ }
48
+ exports.NumberInput = NumberInput;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { NumberInput } from "./number-input";
3
+ declare const _default: {
4
+ title: string;
5
+ component: typeof NumberInput;
6
+ };
7
+ export default _default;
8
+ export declare function Default(): JSX.Element;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const number_input_1 = require("./number-input");
9
+ const form_1 = require("../storybook/form");
10
+ const button_1 = require("@uxf/ui/button");
11
+ exports.default = {
12
+ title: "Form/NumberInput",
13
+ component: number_input_1.NumberInput,
14
+ };
15
+ function Default() {
16
+ const storyFormNumberInputs = (control) => (react_1.default.createElement("div", { className: "light mb-4 space-y-4 p-4" },
17
+ react_1.default.createElement(number_input_1.NumberInput, { label: "Default input", name: "default", control: control }),
18
+ react_1.default.createElement(number_input_1.NumberInput, { label: "Required input", name: "required", control: control, isRequired: true }),
19
+ react_1.default.createElement(number_input_1.NumberInput, { label: "Dec\u00EDmal input", name: "decimal", decimalPlaces: 3, control: control }),
20
+ react_1.default.createElement(number_input_1.NumberInput, { label: "max50 input", name: "max50", max: 50, control: control }),
21
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit")));
22
+ return (react_1.default.createElement(form_1.Form, null, ({ control }) => (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
23
+ react_1.default.createElement("div", { className: "light space-y-2 p-20 lg:w-1/2" }, storyFormNumberInputs(control)),
24
+ react_1.default.createElement("div", { className: "dark space-y-2 bg-gray-900 p-20 lg:w-1/2" }, storyFormNumberInputs(control))))));
25
+ }
26
+ exports.Default = Default;
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@uxf/form",
3
+ "version": "1.0.0-beta.100",
4
+ "description": "",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "scripts": {
9
+ "build": "npm run compile",
10
+ "compile": "tsc -P tsconfig.json",
11
+ "typecheck": "tsc --noEmit --skipLibCheck"
12
+ },
13
+ "author": "UX Fans s.r.o",
14
+ "license": "MIT",
15
+ "dependencies": {
16
+ "@uxf/ui": "^1.0.0-beta.100",
17
+ "react-hook-form": "latest"
18
+ }
19
+ }
@@ -0,0 +1 @@
1
+ export * from "./radio-group";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./radio-group"), exports);
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { RadioGroupProps as UIRadioGroupProps } from "@uxf/ui/radio-group";
3
+ import { FieldValues, UseControllerProps } from "react-hook-form";
4
+ export declare type RadioGroupProps<FormData extends FieldValues> = UseControllerProps<FormData> & Omit<UIRadioGroupProps, "isInvalid" | "name" | "onChange" | "value"> & {
5
+ requiredMessage?: string;
6
+ };
7
+ export declare function RadioGroup<FormData extends Record<string, any>>(props: RadioGroupProps<FormData>): JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RadioGroup = void 0;
7
+ const radio_group_1 = require("@uxf/ui/radio-group");
8
+ const react_1 = __importDefault(require("react"));
9
+ const react_hook_form_1 = require("react-hook-form");
10
+ function RadioGroup(props) {
11
+ var _a, _b, _c;
12
+ const { field, fieldState } = (0, react_hook_form_1.useController)({
13
+ control: props.control,
14
+ defaultValue: props.defaultValue,
15
+ name: props.name,
16
+ rules: {
17
+ required: props.isRequired ? props.requiredMessage || "Toto pole je povinné" : undefined,
18
+ ...((_a = props.rules) !== null && _a !== void 0 ? _a : {}),
19
+ },
20
+ shouldUnregister: props.shouldUnregister,
21
+ });
22
+ const onBlur = (event) => {
23
+ var _a;
24
+ field.onBlur();
25
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, event);
26
+ };
27
+ return (react_1.default.createElement(radio_group_1.RadioGroup, { className: props.className, forceColumn: props.forceColumn, helperText: (_c = (_b = fieldState.error) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : props.helperText, hiddenLabel: props.hiddenLabel, id: props.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: (value) => field.onChange(value), onFocus: props.onFocus, options: props.options, ref: field.ref, style: props.style, value: field.value, variant: props.variant }));
28
+ }
29
+ exports.RadioGroup = RadioGroup;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { RadioGroup } from "./index";
3
+ declare const _default: {
4
+ title: string;
5
+ component: typeof RadioGroup;
6
+ };
7
+ export default _default;
8
+ export declare function Default(): JSX.Element;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const button_1 = require("@uxf/ui/button");
8
+ const react_1 = __importDefault(require("react"));
9
+ const form_1 = require("../storybook/form");
10
+ const index_1 = require("./index");
11
+ exports.default = {
12
+ title: "Form/RadioGroup",
13
+ component: index_1.RadioGroup,
14
+ };
15
+ const options = [
16
+ {
17
+ value: "1",
18
+ label: "Radio one",
19
+ },
20
+ {
21
+ value: "2",
22
+ label: "Radio two",
23
+ },
24
+ {
25
+ value: "3",
26
+ label: "Radio three-sixty",
27
+ },
28
+ ];
29
+ function Default() {
30
+ const storyFormRadioGroup = (control) => (react_1.default.createElement("div", { className: "space-y-4" },
31
+ react_1.default.createElement(index_1.RadioGroup, { control: control, id: "radio-group", label: "Radio group form", name: "radio-group", options: options }),
32
+ react_1.default.createElement(index_1.RadioGroup, { control: control, id: "radio-group", isDisabled: true, label: "Radio group form disabled", name: "radio-group-disabled", options: options }),
33
+ react_1.default.createElement(index_1.RadioGroup, { control: control, helperText: "Choose one option", id: "radio-group", label: "Radio group form with helper text", name: "radio-group-helper-text", options: options }),
34
+ react_1.default.createElement(index_1.RadioGroup, { control: control, id: "radio-group", label: "Radio group form with variant button", name: "radio-group-button", options: options, variant: "radioButton" }),
35
+ react_1.default.createElement(button_1.Button, { type: "submit" }, "Submit")));
36
+ return (react_1.default.createElement(form_1.Form, null, ({ control }) => (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
37
+ react_1.default.createElement("div", { className: "light space-y-2 p-20 lg:w-1/2" }, storyFormRadioGroup(control)),
38
+ react_1.default.createElement("div", { className: "dark space-y-2 bg-gray-900 p-20 lg:w-1/2" }, storyFormRadioGroup(control))))));
39
+ }
40
+ exports.Default = Default;
@@ -0,0 +1 @@
1
+ export * from "./select";