@fuf-stack/uniform 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/Form/index.cjs +3 -5
  2. package/dist/Form/index.js +2 -4
  3. package/dist/Grid/index.cjs +2 -4
  4. package/dist/Grid/index.js +1 -3
  5. package/dist/Input/index.cjs +13 -0
  6. package/dist/Input/index.d.cts +8 -0
  7. package/dist/Input/index.d.ts +8 -0
  8. package/dist/Input/index.js +13 -0
  9. package/dist/Input-B_rP1h4X.d.cts +27 -0
  10. package/dist/Input-B_rP1h4X.d.ts +27 -0
  11. package/dist/SubmitButton/index.cjs +3 -5
  12. package/dist/SubmitButton/index.js +2 -4
  13. package/dist/{chunk-DBNZWU3T.cjs → chunk-22AA557I.cjs} +5 -12
  14. package/dist/chunk-22AA557I.cjs.map +1 -0
  15. package/dist/chunk-2O53LMR3.cjs +79 -0
  16. package/dist/chunk-2O53LMR3.cjs.map +1 -0
  17. package/dist/chunk-3DMR7T4D.js +79 -0
  18. package/dist/chunk-3DMR7T4D.js.map +1 -0
  19. package/dist/{chunk-UFEO2WD4.cjs → chunk-4BELEHDQ.cjs} +21 -28
  20. package/dist/chunk-4BELEHDQ.cjs.map +1 -0
  21. package/dist/chunk-4MEKDDB2.js +20 -0
  22. package/dist/{chunk-YNN5AVDW.js.map → chunk-4MEKDDB2.js.map} +1 -1
  23. package/dist/{chunk-YMSVB2DX.js → chunk-6XKDXQ4A.js} +20 -27
  24. package/dist/{chunk-YMSVB2DX.js.map → chunk-6XKDXQ4A.js.map} +1 -1
  25. package/dist/{chunk-BQTJHSDU.js → chunk-BCMPSLSG.js} +7 -14
  26. package/dist/{chunk-BQTJHSDU.js.map → chunk-BCMPSLSG.js.map} +1 -1
  27. package/dist/{chunk-ZWSYKQT7.js → chunk-DBLODROX.js} +4 -10
  28. package/dist/{chunk-ZWSYKQT7.js.map → chunk-DBLODROX.js.map} +1 -1
  29. package/dist/{chunk-WT2BR5B5.js → chunk-FNVT6LS4.js} +4 -11
  30. package/dist/{chunk-WT2BR5B5.js.map → chunk-FNVT6LS4.js.map} +1 -1
  31. package/dist/{chunk-HW65ROPB.cjs → chunk-QTL5FREE.cjs} +4 -10
  32. package/dist/chunk-QTL5FREE.cjs.map +1 -0
  33. package/dist/{chunk-73CQ3KWD.js → chunk-TEJGV6NC.js} +4 -10
  34. package/dist/{chunk-73CQ3KWD.js.map → chunk-TEJGV6NC.js.map} +1 -1
  35. package/dist/{chunk-AAESGATO.cjs → chunk-WQRM7G4C.cjs} +8 -15
  36. package/dist/chunk-WQRM7G4C.cjs.map +1 -0
  37. package/dist/{chunk-RU72JRAY.cjs → chunk-XUKBLFTR.cjs} +5 -11
  38. package/dist/chunk-XUKBLFTR.cjs.map +1 -0
  39. package/dist/chunk-ZPFKVKGV.cjs +20 -0
  40. package/dist/chunk-ZPFKVKGV.cjs.map +1 -0
  41. package/dist/helpers/index.cjs +0 -1
  42. package/dist/helpers/index.js +0 -1
  43. package/dist/hooks/index.cjs +2 -4
  44. package/dist/hooks/index.js +1 -3
  45. package/dist/index.cjs +11 -9
  46. package/dist/index.d.cts +1 -0
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.js +14 -12
  49. package/dist/partials/FieldCopyTestIdButton/index.cjs +2 -4
  50. package/dist/partials/FieldCopyTestIdButton/index.js +1 -3
  51. package/dist/partials/FieldValidationError/index.cjs +2 -4
  52. package/dist/partials/FieldValidationError/index.js +1 -3
  53. package/package.json +19 -10
  54. package/dist/chunk-AAESGATO.cjs.map +0 -1
  55. package/dist/chunk-AT5DS6MS.cjs +0 -31
  56. package/dist/chunk-DBNZWU3T.cjs.map +0 -1
  57. package/dist/chunk-HW65ROPB.cjs.map +0 -1
  58. package/dist/chunk-LAHYQUKQ.cjs +0 -27
  59. package/dist/chunk-LAHYQUKQ.cjs.map +0 -1
  60. package/dist/chunk-LMMDXQ4L.cjs +0 -3170
  61. package/dist/chunk-LMMDXQ4L.cjs.map +0 -1
  62. package/dist/chunk-LQ2VYIYD.js +0 -31
  63. package/dist/chunk-RBXONCYN.js +0 -3170
  64. package/dist/chunk-RBXONCYN.js.map +0 -1
  65. package/dist/chunk-RU72JRAY.cjs.map +0 -1
  66. package/dist/chunk-UFEO2WD4.cjs.map +0 -1
  67. package/dist/chunk-YNN5AVDW.js +0 -27
  68. /package/dist/{chunk-AT5DS6MS.cjs.map → Input/index.cjs.map} +0 -0
  69. /package/dist/{chunk-LQ2VYIYD.js.map → Input/index.js.map} +0 -0
@@ -1,13 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkUFEO2WD4cjs = require('../chunk-UFEO2WD4.cjs');
5
- require('../chunk-AAESGATO.cjs');
4
+ var _chunk4BELEHDQcjs = require('../chunk-4BELEHDQ.cjs');
5
+ require('../chunk-WQRM7G4C.cjs');
6
6
  require('../chunk-BBB4FEY6.cjs');
7
- require('../chunk-LMMDXQ4L.cjs');
8
- require('../chunk-AT5DS6MS.cjs');
9
7
 
10
8
 
11
9
 
12
- exports.Form = _chunkUFEO2WD4cjs.Form_default; exports.default = _chunkUFEO2WD4cjs.Form_default2;
10
+ exports.Form = _chunk4BELEHDQcjs.Form_default; exports.default = _chunk4BELEHDQcjs.Form_default2;
13
11
  //# sourceMappingURL=index.cjs.map
@@ -1,11 +1,9 @@
1
1
  import {
2
2
  Form_default,
3
3
  Form_default2
4
- } from "../chunk-YMSVB2DX.js";
5
- import "../chunk-BQTJHSDU.js";
4
+ } from "../chunk-6XKDXQ4A.js";
5
+ import "../chunk-BCMPSLSG.js";
6
6
  import "../chunk-V46BHM2U.js";
7
- import "../chunk-RBXONCYN.js";
8
- import "../chunk-LQ2VYIYD.js";
9
7
  export {
10
8
  Form_default as Form,
11
9
  Form_default2 as default
@@ -1,11 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkLAHYQUKQcjs = require('../chunk-LAHYQUKQ.cjs');
5
- require('../chunk-LMMDXQ4L.cjs');
6
- require('../chunk-AT5DS6MS.cjs');
4
+ var _chunkZPFKVKGVcjs = require('../chunk-ZPFKVKGV.cjs');
7
5
 
8
6
 
9
7
 
10
- exports.Grid = _chunkLAHYQUKQcjs.Grid_default; exports.default = _chunkLAHYQUKQcjs.Grid_default2;
8
+ exports.Grid = _chunkZPFKVKGVcjs.Grid_default; exports.default = _chunkZPFKVKGVcjs.Grid_default2;
11
9
  //# sourceMappingURL=index.cjs.map
@@ -1,9 +1,7 @@
1
1
  import {
2
2
  Grid_default,
3
3
  Grid_default2
4
- } from "../chunk-YNN5AVDW.js";
5
- import "../chunk-RBXONCYN.js";
6
- import "../chunk-LQ2VYIYD.js";
4
+ } from "../chunk-4MEKDDB2.js";
7
5
  export {
8
6
  Grid_default as Grid,
9
7
  Grid_default2 as default
@@ -0,0 +1,13 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+ var _chunk2O53LMR3cjs = require('../chunk-2O53LMR3.cjs');
5
+ require('../chunk-QTL5FREE.cjs');
6
+ require('../chunk-WQRM7G4C.cjs');
7
+ require('../chunk-BBB4FEY6.cjs');
8
+ require('../chunk-22AA557I.cjs');
9
+
10
+
11
+
12
+ exports.Input = _chunk2O53LMR3cjs.Input_default; exports.default = _chunk2O53LMR3cjs.Input_default2;
13
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,8 @@
1
+ import { I as Input } from '../Input-B_rP1h4X.cjs';
2
+ export { a as InputProps } from '../Input-B_rP1h4X.cjs';
3
+ import 'react/jsx-runtime';
4
+ import 'react';
5
+
6
+
7
+
8
+ export { Input, Input as default };
@@ -0,0 +1,8 @@
1
+ import { I as Input } from '../Input-B_rP1h4X.js';
2
+ export { a as InputProps } from '../Input-B_rP1h4X.js';
3
+ import 'react/jsx-runtime';
4
+ import 'react';
5
+
6
+
7
+
8
+ export { Input, Input as default };
@@ -0,0 +1,13 @@
1
+ import {
2
+ Input_default,
3
+ Input_default2
4
+ } from "../chunk-3DMR7T4D.js";
5
+ import "../chunk-DBLODROX.js";
6
+ import "../chunk-BCMPSLSG.js";
7
+ import "../chunk-V46BHM2U.js";
8
+ import "../chunk-FNVT6LS4.js";
9
+ export {
10
+ Input_default as Input,
11
+ Input_default2 as default
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,27 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface InputProps {
5
+ /** CSS class name */
6
+ className?: string;
7
+ /** added content to the end of the input Field. */
8
+ endContent?: ReactNode;
9
+ /** form field label (set to false to disable label) */
10
+ label?: string | false;
11
+ /** form field name */
12
+ name: string;
13
+ /** form field placeholder */
14
+ placeholder?: string;
15
+ /** content added to the start of the input field */
16
+ startContent?: ReactNode;
17
+ /** HTML data-testid attribute used in e2e tests */
18
+ testId?: string;
19
+ /** input type */
20
+ type?: 'number' | 'password';
21
+ }
22
+ /**
23
+ * Input component based on [NextUI Input](https://nextui.org/docs/components/input)
24
+ */
25
+ declare const Input: ({ className, endContent, label, name, placeholder, startContent, testId: _testId, type, }: InputProps) => react_jsx_runtime.JSX.Element;
26
+
27
+ export { Input as I, type InputProps as a };
@@ -0,0 +1,27 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface InputProps {
5
+ /** CSS class name */
6
+ className?: string;
7
+ /** added content to the end of the input Field. */
8
+ endContent?: ReactNode;
9
+ /** form field label (set to false to disable label) */
10
+ label?: string | false;
11
+ /** form field name */
12
+ name: string;
13
+ /** form field placeholder */
14
+ placeholder?: string;
15
+ /** content added to the start of the input field */
16
+ startContent?: ReactNode;
17
+ /** HTML data-testid attribute used in e2e tests */
18
+ testId?: string;
19
+ /** input type */
20
+ type?: 'number' | 'password';
21
+ }
22
+ /**
23
+ * Input component based on [NextUI Input](https://nextui.org/docs/components/input)
24
+ */
25
+ declare const Input: ({ className, endContent, label, name, placeholder, startContent, testId: _testId, type, }: InputProps) => react_jsx_runtime.JSX.Element;
26
+
27
+ export { Input as I, type InputProps as a };
@@ -1,13 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkRU72JRAYcjs = require('../chunk-RU72JRAY.cjs');
5
- require('../chunk-AAESGATO.cjs');
4
+ var _chunkXUKBLFTRcjs = require('../chunk-XUKBLFTR.cjs');
5
+ require('../chunk-WQRM7G4C.cjs');
6
6
  require('../chunk-BBB4FEY6.cjs');
7
- require('../chunk-LMMDXQ4L.cjs');
8
- require('../chunk-AT5DS6MS.cjs');
9
7
 
10
8
 
11
9
 
12
- exports.SubmitButton = _chunkRU72JRAYcjs.SubmitButton_default; exports.default = _chunkRU72JRAYcjs.SubmitButton_default2;
10
+ exports.SubmitButton = _chunkXUKBLFTRcjs.SubmitButton_default; exports.default = _chunkXUKBLFTRcjs.SubmitButton_default2;
13
11
  //# sourceMappingURL=index.cjs.map
@@ -1,11 +1,9 @@
1
1
  import {
2
2
  SubmitButton_default,
3
3
  SubmitButton_default2
4
- } from "../chunk-73CQ3KWD.js";
5
- import "../chunk-BQTJHSDU.js";
4
+ } from "../chunk-TEJGV6NC.js";
5
+ import "../chunk-BCMPSLSG.js";
6
6
  import "../chunk-V46BHM2U.js";
7
- import "../chunk-RBXONCYN.js";
8
- import "../chunk-LQ2VYIYD.js";
9
7
  export {
10
8
  SubmitButton_default as SubmitButton,
11
9
  SubmitButton_default2 as default
@@ -1,15 +1,8 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
- var _chunkLMMDXQ4Lcjs = require('./chunk-LMMDXQ4L.cjs');
4
-
5
-
6
- var _chunkAT5DS6MScjs = require('./chunk-AT5DS6MS.cjs');
7
-
8
- // src/partials/FieldCopyTestIdButton/FieldCopyTestIdButton.tsx
9
- var import_jsx_runtime = _chunkAT5DS6MScjs.__toESM.call(void 0, _chunkLMMDXQ4Lcjs.require_jsx_runtime.call(void 0, ), 1);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/partials/FieldCopyTestIdButton/FieldCopyTestIdButton.tsx
10
2
  var _fa6 = require('react-icons/fa6');
11
3
  var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
12
4
  var _pixels = require('@fuf-stack/pixels');
5
+ var _jsxruntime = require('react/jsx-runtime');
13
6
  var LOCALSTORAGE_DEBUG_KEY = "uniform:form-debug-enabled";
14
7
  var FieldCopyTestIdButton = ({
15
8
  className = void 0,
@@ -24,13 +17,13 @@ var FieldCopyTestIdButton = ({
24
17
  if (!debug) {
25
18
  return null;
26
19
  }
27
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
20
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
28
21
  _pixels.Button,
29
22
  {
30
23
  className: _classnames2.default.call(void 0, className, "pointer-events-auto"),
31
24
  variant: "light",
32
25
  onClick: copyToClipboard,
33
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(_fa6.FaBullseye, {}),
26
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBullseye, {}),
34
27
  size: "sm"
35
28
  }
36
29
  );
@@ -44,4 +37,4 @@ var FieldCopyTestIdButton_default2 = FieldCopyTestIdButton_default;
44
37
 
45
38
 
46
39
  exports.FieldCopyTestIdButton_default = FieldCopyTestIdButton_default; exports.FieldCopyTestIdButton_default2 = FieldCopyTestIdButton_default2;
47
- //# sourceMappingURL=chunk-DBNZWU3T.cjs.map
40
+ //# sourceMappingURL=chunk-22AA557I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/partials/FieldCopyTestIdButton/FieldCopyTestIdButton.tsx","../src/partials/FieldCopyTestIdButton/index.ts"],"names":["FieldCopyTestIdButton_default"],"mappings":";AAAA,SAAS,kBAAkB;AAE3B,OAAO,QAAQ;AAEf,SAAS,QAAQ,uBAAuB;AA8B5B;AAvBZ,IAAM,yBAAyB;AAE/B,IAAM,wBAAwB,CAAC;AAAA,EAC7B,YAAY;AAAA,EACZ;AACF,MAAkC;AAChC,QAAM,CAAC,KAAK,IAAI,gBAAgB,wBAAwB,KAAK;AAE7D,QAAM,kBAAkB,MAAM;AAC5B,cAAU,UAAU,UAAU,MAAM,EAAE,MAAM,CAAC,QAAQ;AACnD,cAAQ,MAAM,qCAAqC,GAAG;AAAA,IACxD,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,WAAW,qBAAqB;AAAA,MAC9C,SAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM,oBAAC,cAAW;AAAA,MAClB,MAAK;AAAA;AAAA,EACP;AAEJ;AACA,IAAO,gCAAQ;;;ACjCf,IAAOA,iCAAQ","sourcesContent":["import { FaBullseye } from 'react-icons/fa6';\n\nimport cn from 'classnames';\n\nimport { Button, useLocalStorage } from '@fuf-stack/pixels';\n\nexport interface FieldCopyTestIdButtonProps {\n className?: string;\n testId: string;\n}\n\nconst LOCALSTORAGE_DEBUG_KEY = 'uniform:form-debug-enabled';\n\nconst FieldCopyTestIdButton = ({\n className = undefined,\n testId,\n}: FieldCopyTestIdButtonProps) => {\n const [debug] = useLocalStorage(LOCALSTORAGE_DEBUG_KEY, false);\n\n const copyToClipboard = () => {\n navigator.clipboard.writeText(testId).catch((err) => {\n console.error('Error copying TestId to clipboard', err);\n });\n };\n\n if (!debug) {\n return null;\n }\n\n return (\n <Button\n className={cn(className, 'pointer-events-auto')}\n variant=\"light\"\n onClick={copyToClipboard}\n icon={<FaBullseye />}\n size=\"sm\"\n />\n );\n};\nexport default FieldCopyTestIdButton;\n","import FieldCopyTestIdButton from './FieldCopyTestIdButton';\n\nexport type { FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton';\n\nexport { FieldCopyTestIdButton };\n\nexport default FieldCopyTestIdButton;\n"]}
@@ -0,0 +1,79 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkQTL5FREEcjs = require('./chunk-QTL5FREE.cjs');
4
+
5
+
6
+ var _chunkWQRM7G4Ccjs = require('./chunk-WQRM7G4C.cjs');
7
+
8
+
9
+ var _chunk22AA557Icjs = require('./chunk-22AA557I.cjs');
10
+
11
+ // src/Input/Input.tsx
12
+ var _reacthookform = require('react-hook-form');
13
+ var _input = require('@nextui-org/input');
14
+ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
15
+ var _jsxruntime = require('react/jsx-runtime');
16
+ var Input = ({
17
+ className = void 0,
18
+ endContent = void 0,
19
+ label = void 0,
20
+ name,
21
+ placeholder = " ",
22
+ startContent = void 0,
23
+ testId: _testId = void 0,
24
+ type = void 0
25
+ }) => {
26
+ const { control, getFieldState } = _chunkWQRM7G4Ccjs.useFormContext.call(void 0, );
27
+ const { error, invalid, required, testId } = getFieldState(name, _testId);
28
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
29
+ _reacthookform.Controller,
30
+ {
31
+ control,
32
+ name,
33
+ render: ({
34
+ field: { disabled: isDisabled, onChange, onBlur, value, ref }
35
+ }) => {
36
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
37
+ _input.Input,
38
+ {
39
+ className: _classnames2.default.call(void 0, className),
40
+ classNames: {
41
+ inputWrapper: "group-data-[focus=true]:border-primary"
42
+ },
43
+ "data-testid": testId,
44
+ endContent,
45
+ errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQTL5FREEcjs.FieldValidationError_default2, { error }),
46
+ isDisabled,
47
+ isInvalid: invalid,
48
+ isRequired: required,
49
+ label: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
50
+ label,
51
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk22AA557Icjs.FieldCopyTestIdButton_default2, { testId })
52
+ ] }),
53
+ labelPlacement: "outside",
54
+ name,
55
+ onBlur,
56
+ onChange,
57
+ placeholder,
58
+ radius: "sm",
59
+ ref,
60
+ startContent,
61
+ type,
62
+ value,
63
+ variant: "bordered"
64
+ }
65
+ );
66
+ }
67
+ }
68
+ );
69
+ };
70
+ var Input_default = Input;
71
+
72
+ // src/Input/index.ts
73
+ var Input_default2 = Input_default;
74
+
75
+
76
+
77
+
78
+ exports.Input_default = Input_default; exports.Input_default2 = Input_default2;
79
+ //# sourceMappingURL=chunk-2O53LMR3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Input/Input.tsx","../src/Input/index.ts"],"names":["Input_default"],"mappings":";;;;;;;;;;;AAEA,SAAS,kBAAkB;AAE3B,SAAS,SAAS,iBAAiB;AACnC,OAAO,QAAQ;AAwDoB,SAKrB,UALqB,KAKrB,YALqB;AA5BnC,IAAM,QAAQ,CAAC;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,QAAQ,UAAU;AAAA,EAClB,OAAO;AACT,MAAkB;AAChB,QAAM,EAAE,SAAS,cAAc,IAAI,eAAe;AAClD,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,QACP,OAAO,EAAE,UAAU,YAAY,UAAU,QAAQ,OAAO,IAAI;AAAA,MAC9D,MAAM;AACJ,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,SAAS;AAAA,YACvB,YAAY;AAAA,cACV,cAAc;AAAA,YAChB;AAAA,YACA,eAAa;AAAA,YACb;AAAA,YACA,cAAc,SAAS,oBAAC,gCAAqB,OAAc;AAAA,YAC3D;AAAA,YACA,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,OACE,iCACG;AAAA;AAAA,cACD,oBAAC,iCAAsB,QAAgB;AAAA,eACzC;AAAA,YAEF,gBAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAQ;AAAA;AAAA,QACV;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;;;ACnFf,IAAOA,iBAAQ","sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Controller } from 'react-hook-form';\n\nimport { Input as NextInput } from '@nextui-org/input';\nimport cn from 'classnames';\n\nimport { useFormContext } from '../hooks';\nimport FieldCopyTestIdButton from '../partials/FieldCopyTestIdButton';\nimport FieldValidationError from '../partials/FieldValidationError';\n\nexport interface InputProps {\n /** CSS class name */\n className?: string;\n /** added content to the end of the input Field. */\n endContent?: ReactNode;\n /** form field label (set to false to disable label) */\n label?: string | false;\n /** form field name */\n name: string;\n /** form field placeholder */\n placeholder?: string;\n /** content added to the start of the input field */\n startContent?: ReactNode;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n /** input type */\n type?: 'number' | 'password';\n}\n\n/**\n * Input component based on [NextUI Input](https://nextui.org/docs/components/input)\n */\nconst Input = ({\n className = undefined,\n endContent = undefined,\n label = undefined,\n name,\n placeholder = ' ',\n startContent = undefined,\n testId: _testId = undefined,\n type = undefined,\n}: InputProps) => {\n const { control, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n return (\n <Controller\n control={control}\n name={name}\n render={({\n field: { disabled: isDisabled, onChange, onBlur, value, ref },\n }) => {\n return (\n <NextInput\n className={cn(className)}\n classNames={{\n inputWrapper: 'group-data-[focus=true]:border-primary',\n }}\n data-testid={testId}\n endContent={endContent}\n errorMessage={error && <FieldValidationError error={error} />}\n isDisabled={isDisabled}\n isInvalid={invalid}\n isRequired={required}\n label={\n <>\n {label}\n <FieldCopyTestIdButton testId={testId} />\n </>\n }\n labelPlacement=\"outside\"\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n radius=\"sm\"\n ref={ref}\n startContent={startContent}\n type={type}\n value={value}\n variant=\"bordered\"\n />\n );\n }}\n />\n );\n};\n\nexport default Input;\n","import Input from './Input';\n\nexport type { InputProps } from './Input';\n\nexport { Input };\n\nexport default Input;\n"]}
@@ -0,0 +1,79 @@
1
+ import {
2
+ FieldValidationError_default2 as FieldValidationError_default
3
+ } from "./chunk-DBLODROX.js";
4
+ import {
5
+ useFormContext
6
+ } from "./chunk-BCMPSLSG.js";
7
+ import {
8
+ FieldCopyTestIdButton_default2 as FieldCopyTestIdButton_default
9
+ } from "./chunk-FNVT6LS4.js";
10
+
11
+ // src/Input/Input.tsx
12
+ import { Controller } from "react-hook-form";
13
+ import { Input as NextInput } from "@nextui-org/input";
14
+ import cn from "classnames";
15
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
+ var Input = ({
17
+ className = void 0,
18
+ endContent = void 0,
19
+ label = void 0,
20
+ name,
21
+ placeholder = " ",
22
+ startContent = void 0,
23
+ testId: _testId = void 0,
24
+ type = void 0
25
+ }) => {
26
+ const { control, getFieldState } = useFormContext();
27
+ const { error, invalid, required, testId } = getFieldState(name, _testId);
28
+ return /* @__PURE__ */ jsx(
29
+ Controller,
30
+ {
31
+ control,
32
+ name,
33
+ render: ({
34
+ field: { disabled: isDisabled, onChange, onBlur, value, ref }
35
+ }) => {
36
+ return /* @__PURE__ */ jsx(
37
+ NextInput,
38
+ {
39
+ className: cn(className),
40
+ classNames: {
41
+ inputWrapper: "group-data-[focus=true]:border-primary"
42
+ },
43
+ "data-testid": testId,
44
+ endContent,
45
+ errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error }),
46
+ isDisabled,
47
+ isInvalid: invalid,
48
+ isRequired: required,
49
+ label: /* @__PURE__ */ jsxs(Fragment, { children: [
50
+ label,
51
+ /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
52
+ ] }),
53
+ labelPlacement: "outside",
54
+ name,
55
+ onBlur,
56
+ onChange,
57
+ placeholder,
58
+ radius: "sm",
59
+ ref,
60
+ startContent,
61
+ type,
62
+ value,
63
+ variant: "bordered"
64
+ }
65
+ );
66
+ }
67
+ }
68
+ );
69
+ };
70
+ var Input_default = Input;
71
+
72
+ // src/Input/index.ts
73
+ var Input_default2 = Input_default;
74
+
75
+ export {
76
+ Input_default,
77
+ Input_default2
78
+ };
79
+ //# sourceMappingURL=chunk-3DMR7T4D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Input/Input.tsx","../src/Input/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Controller } from 'react-hook-form';\n\nimport { Input as NextInput } from '@nextui-org/input';\nimport cn from 'classnames';\n\nimport { useFormContext } from '../hooks';\nimport FieldCopyTestIdButton from '../partials/FieldCopyTestIdButton';\nimport FieldValidationError from '../partials/FieldValidationError';\n\nexport interface InputProps {\n /** CSS class name */\n className?: string;\n /** added content to the end of the input Field. */\n endContent?: ReactNode;\n /** form field label (set to false to disable label) */\n label?: string | false;\n /** form field name */\n name: string;\n /** form field placeholder */\n placeholder?: string;\n /** content added to the start of the input field */\n startContent?: ReactNode;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n /** input type */\n type?: 'number' | 'password';\n}\n\n/**\n * Input component based on [NextUI Input](https://nextui.org/docs/components/input)\n */\nconst Input = ({\n className = undefined,\n endContent = undefined,\n label = undefined,\n name,\n placeholder = ' ',\n startContent = undefined,\n testId: _testId = undefined,\n type = undefined,\n}: InputProps) => {\n const { control, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n return (\n <Controller\n control={control}\n name={name}\n render={({\n field: { disabled: isDisabled, onChange, onBlur, value, ref },\n }) => {\n return (\n <NextInput\n className={cn(className)}\n classNames={{\n inputWrapper: 'group-data-[focus=true]:border-primary',\n }}\n data-testid={testId}\n endContent={endContent}\n errorMessage={error && <FieldValidationError error={error} />}\n isDisabled={isDisabled}\n isInvalid={invalid}\n isRequired={required}\n label={\n <>\n {label}\n <FieldCopyTestIdButton testId={testId} />\n </>\n }\n labelPlacement=\"outside\"\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n placeholder={placeholder}\n radius=\"sm\"\n ref={ref}\n startContent={startContent}\n type={type}\n value={value}\n variant=\"bordered\"\n />\n );\n }}\n />\n );\n};\n\nexport default Input;\n","import Input from './Input';\n\nexport type { InputProps } from './Input';\n\nexport { Input };\n\nexport default Input;\n"],"mappings":";;;;;;;;;;;AAEA,SAAS,kBAAkB;AAE3B,SAAS,SAAS,iBAAiB;AACnC,OAAO,QAAQ;AAwDoB,SAKrB,UALqB,KAKrB,YALqB;AA5BnC,IAAM,QAAQ,CAAC;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,QAAQ,UAAU;AAAA,EAClB,OAAO;AACT,MAAkB;AAChB,QAAM,EAAE,SAAS,cAAc,IAAI,eAAe;AAClD,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,QACP,OAAO,EAAE,UAAU,YAAY,UAAU,QAAQ,OAAO,IAAI;AAAA,MAC9D,MAAM;AACJ,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,SAAS;AAAA,YACvB,YAAY;AAAA,cACV,cAAc;AAAA,YAChB;AAAA,YACA,eAAa;AAAA,YACb;AAAA,YACA,cAAc,SAAS,oBAAC,gCAAqB,OAAc;AAAA,YAC3D;AAAA,YACA,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,OACE,iCACG;AAAA;AAAA,cACD,oBAAC,iCAAsB,QAAgB;AAAA,eACzC;AAAA,YAEF,gBAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAQ;AAAA;AAAA,QACV;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,gBAAQ;;;ACnFf,IAAOA,iBAAQ;","names":["Input_default"]}
@@ -1,41 +1,34 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkAAESGATOcjs = require('./chunk-AAESGATO.cjs');
4
+ var _chunkWQRM7G4Ccjs = require('./chunk-WQRM7G4C.cjs');
5
5
 
6
6
 
7
7
  var _chunkBBB4FEY6cjs = require('./chunk-BBB4FEY6.cjs');
8
8
 
9
-
10
-
11
- var _chunkLMMDXQ4Lcjs = require('./chunk-LMMDXQ4L.cjs');
12
-
13
-
14
- var _chunkAT5DS6MScjs = require('./chunk-AT5DS6MS.cjs');
15
-
16
9
  // src/Form/Form.tsx
17
- var import_react2 = _chunkAT5DS6MScjs.__toESM.call(void 0, _chunkLMMDXQ4Lcjs.require_react.call(void 0, ), 1);
10
+ var _react = require('react');
18
11
  var _reacthookform = require('react-hook-form');
19
12
  var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
20
13
 
21
14
  // src/Form/subcomponents/FormDebugViewer.tsx
22
- var import_react = _chunkAT5DS6MScjs.__toESM.call(void 0, _chunkLMMDXQ4Lcjs.require_react.call(void 0, ), 1);
15
+
23
16
  var _fa = require('react-icons/fa');
24
17
  var _fa6 = require('react-icons/fa6');
25
18
 
26
19
  var _pixels = require('@fuf-stack/pixels');
27
- var import_jsx_runtime = _chunkAT5DS6MScjs.__toESM.call(void 0, _chunkLMMDXQ4Lcjs.require_jsx_runtime.call(void 0, ), 1);
20
+ var _jsxruntime = require('react/jsx-runtime');
28
21
  var LOCALSTORAGE_DEBUG_KEY = "uniform:form-debug-enabled";
29
22
  var FormDebugViewer = ({ className = void 0 }) => {
30
23
  const {
31
24
  watch,
32
25
  formState: { dirtyFields, isValid, isSubmitting },
33
26
  validation
34
- } = _chunkAAESGATOcjs.useFormContext.call(void 0, );
27
+ } = _chunkWQRM7G4Ccjs.useFormContext.call(void 0, );
35
28
  const [debug, setDebug] = _pixels.useLocalStorage.call(void 0, LOCALSTORAGE_DEBUG_KEY, false);
36
- const [validationErrors, setValidationErrors] = (0, import_react.useState)(null);
29
+ const [validationErrors, setValidationErrors] = _react.useState.call(void 0, null);
37
30
  const formValues = watch();
38
- (0, import_react.useEffect)(
31
+ _react.useEffect.call(void 0,
39
32
  () => {
40
33
  const updateValidationErrors = async () => {
41
34
  if (validation) {
@@ -49,34 +42,34 @@ var FormDebugViewer = ({ className = void 0 }) => {
49
42
  [JSON.stringify(formValues)]
50
43
  );
51
44
  if (!debug) {
52
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
45
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
53
46
  _pixels.Button,
54
47
  {
55
48
  ariaLabel: "Enable form debug mode",
56
49
  onClick: () => setDebug(!debug),
57
50
  className: "absolute bottom-2.5 right-2.5 w-5 text-default-400",
58
51
  variant: "light",
59
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(_fa6.FaBug, {})
52
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBug, {})
60
53
  }
61
54
  );
62
55
  }
63
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
56
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
64
57
  _pixels.Card,
65
58
  {
66
59
  className: _classnames2.default.call(void 0, className),
67
- header: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex w-full flex-row justify-between", children: [
68
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-lg", children: "Debug Mode" }),
69
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
60
+ header: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-row justify-between", children: [
61
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-lg", children: "Debug Mode" }),
62
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
70
63
  _pixels.Button,
71
64
  {
72
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(_fa.FaTimes, { className: "text-danger" }),
65
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa.FaTimes, { className: "text-danger" }),
73
66
  onClick: () => setDebug(false),
74
67
  size: "sm",
75
68
  variant: "flat"
76
69
  }
77
70
  )
78
71
  ] }),
79
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
72
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
80
73
  _pixels.Json,
81
74
  {
82
75
  value: {
@@ -94,7 +87,7 @@ var FormDebugViewer = ({ className = void 0 }) => {
94
87
  var FormDebugViewer_default = FormDebugViewer;
95
88
 
96
89
  // src/Form/Form.tsx
97
- var import_jsx_runtime2 = _chunkAT5DS6MScjs.__toESM.call(void 0, _chunkLMMDXQ4Lcjs.require_jsx_runtime.call(void 0, ), 1);
90
+
98
91
  var removeNullishFields = (obj) => {
99
92
  return JSON.parse(
100
93
  JSON.stringify(obj, (_key, value) => {
@@ -128,7 +121,7 @@ var Form = ({
128
121
  defaultValues: initialValues
129
122
  }
130
123
  );
131
- (0, import_react2.useEffect)(
124
+ _react.useEffect.call(void 0,
132
125
  () => {
133
126
  if (validationTrigger === "all-instant") {
134
127
  methods.trigger();
@@ -139,8 +132,8 @@ var Form = ({
139
132
  );
140
133
  return (
141
134
  // eslint-disable-next-line react/jsx-props-no-spreading
142
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(_chunkAAESGATOcjs.FormContext_default, { ...methods, validation, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex w-full flex-row justify-between gap-6", children: [
143
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
135
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWQRM7G4Ccjs.FormContext_default, { ...methods, validation, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-row justify-between gap-6", children: [
136
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
144
137
  "form",
145
138
  {
146
139
  className: _classnames2.default.call(void 0, "flex-grow", className),
@@ -150,7 +143,7 @@ var Form = ({
150
143
  children
151
144
  }
152
145
  ),
153
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(FormDebugViewer_default, { className: "w-96 flex-shrink" })
146
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FormDebugViewer_default, { className: "w-96 flex-shrink" })
154
147
  ] }) })
155
148
  );
156
149
  };
@@ -163,4 +156,4 @@ var Form_default2 = Form_default;
163
156
 
164
157
 
165
158
  exports.Form_default = Form_default; exports.Form_default2 = Form_default2;
166
- //# sourceMappingURL=chunk-UFEO2WD4.cjs.map
159
+ //# sourceMappingURL=chunk-4BELEHDQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Form/Form.tsx","../src/Form/subcomponents/FormDebugViewer.tsx","../src/Form/index.ts"],"names":["useEffect","cn","jsx","jsxs","Form_default"],"mappings":"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","sourcesContent":["import type { VetoInstance } from '@fuf-stack/veto';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, SubmitHandler } from 'react-hook-form';\n\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport cn from 'classnames';\n\nimport { slugify } from '../helpers';\nimport FormProvider from './subcomponents/FormContext';\nimport FormDebugViewer from './subcomponents/FormDebugViewer';\n\n/**\n * recursively removes all fields that are null or undefined before\n * the form data is passed to the veto validation function\n */\nexport const removeNullishFields = (obj: Record<string, unknown>) => {\n return JSON.parse(\n JSON.stringify(obj, (_key, value) => {\n return value === null ? undefined : value;\n }),\n );\n};\n\nexport interface FormProps {\n /** form children */\n children: ReactNode | ReactNode[];\n /** CSS class name */\n className?: string | string[];\n /** initial form values */\n initialValues?: FieldValues;\n /** name of the form */\n name?: string;\n /** form submit handler */\n onSubmit: SubmitHandler<FieldValues>;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n /** veto validation schema */\n validation?: VetoInstance;\n /** when the validation should be triggered */\n validationTrigger?:\n | 'onChange'\n | 'onBlur'\n | 'onSubmit'\n | 'onTouched'\n | 'all'\n | 'all-instant';\n}\n\n/**\n * Form component that has to wrap every uniform\n */\nconst Form = ({\n children,\n className = undefined,\n initialValues = undefined,\n name = undefined,\n onSubmit,\n testId = undefined,\n validation = undefined,\n validationTrigger = 'all',\n}: FormProps) => {\n const methods = useForm(\n validation\n ? {\n defaultValues: initialValues,\n resolver: async (values) => {\n const { data, errors, ...rest } = await validation.validateAsync(\n removeNullishFields(values),\n );\n // https://github.com/react-hook-form/resolvers/blob/master/zod/src/zod.ts\n return { values: data || {}, errors: errors || {}, ...rest };\n },\n // set rhf mode\n // see: https://react-hook-form.com/docs/useform#mode\n mode: validationTrigger === 'all-instant' ? 'all' : validationTrigger,\n }\n : {\n defaultValues: initialValues,\n },\n );\n\n useEffect(\n () => {\n if (validationTrigger === 'all-instant') {\n methods.trigger();\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [validationTrigger],\n );\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <FormProvider {...methods} validation={validation}>\n <div className=\"flex w-full flex-row justify-between gap-6\">\n <form\n className={cn('flex-grow', className)}\n data-testid={slugify(testId || name || '')}\n name={name}\n onSubmit={methods.handleSubmit(onSubmit)}\n >\n {children}\n </form>\n <FormDebugViewer className=\"w-96 flex-shrink\" />\n </div>\n </FormProvider>\n );\n};\n\nexport default Form;\n","import type { VetoError } from '@fuf-stack/veto';\n\nimport { useEffect, useState } from 'react';\nimport { FaTimes } from 'react-icons/fa';\nimport { FaBug } from 'react-icons/fa6';\n\nimport cn from 'classnames';\n\nimport { Button, Card, Json, useLocalStorage } from '@fuf-stack/pixels';\n\nimport { useFormContext } from '../../hooks';\n\ninterface FormDebugViewerProps {\n /** CSS class name */\n className?: string;\n}\n\nconst LOCALSTORAGE_DEBUG_KEY = 'uniform:form-debug-enabled';\n\n/** Renders a form debug panel with information about the current form state */\nconst FormDebugViewer = ({ className = undefined }: FormDebugViewerProps) => {\n const {\n watch,\n formState: { dirtyFields, isValid, isSubmitting },\n validation,\n } = useFormContext();\n\n const [debug, setDebug] = useLocalStorage(LOCALSTORAGE_DEBUG_KEY, false);\n\n const [validationErrors, setValidationErrors] = useState<\n VetoError['errors'] | null\n >(null);\n\n const formValues = watch();\n\n useEffect(\n () => {\n const updateValidationErrors = async () => {\n if (validation) {\n const validateResult = await validation?.validateAsync(formValues);\n setValidationErrors(validateResult?.errors);\n }\n };\n updateValidationErrors();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(formValues)],\n );\n\n if (!debug) {\n return (\n <Button\n ariaLabel=\"Enable form debug mode\"\n onClick={() => setDebug(!debug)}\n className=\"absolute bottom-2.5 right-2.5 w-5 text-default-400\"\n variant=\"light\"\n icon={<FaBug />}\n />\n );\n }\n\n return (\n <Card\n className={cn(className)}\n header={\n <div className=\"flex w-full flex-row justify-between\">\n <span className=\"text-lg\">Debug Mode</span>\n <Button\n icon={<FaTimes className=\"text-danger\" />}\n onClick={() => setDebug(false)}\n size=\"sm\"\n variant=\"flat\"\n />\n </div>\n }\n >\n <Json\n value={{\n values: formValues,\n errors: validationErrors,\n dirtyFields,\n isValid,\n isSubmitting,\n }}\n />\n </Card>\n );\n};\nexport default FormDebugViewer;\n","import Form from './Form';\n\nexport type { FormProps } from './Form';\n\nexport { Form };\n\nexport default Form;\n"]}
@@ -0,0 +1,20 @@
1
+ // src/Grid/Grid.tsx
2
+ import cn from "classnames";
3
+ import { jsx } from "react/jsx-runtime";
4
+ var Grid = ({
5
+ children = null,
6
+ className = void 0,
7
+ testId = void 0
8
+ }) => {
9
+ return /* @__PURE__ */ jsx("div", { className: cn("grid gap-6", className), "data-testid": testId, children });
10
+ };
11
+ var Grid_default = Grid;
12
+
13
+ // src/Grid/index.ts
14
+ var Grid_default2 = Grid_default;
15
+
16
+ export {
17
+ Grid_default,
18
+ Grid_default2
19
+ };
20
+ //# sourceMappingURL=chunk-4MEKDDB2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Grid/Grid.tsx","../src/Grid/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport cn from 'classnames';\n\nexport interface GridProps {\n /** child components */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * Defines the default grid for form components\n */\nconst Grid = ({\n children = null,\n className = undefined,\n testId = undefined,\n}: GridProps) => {\n return (\n <div className={cn('grid gap-6', className)} data-testid={testId}>\n {children}\n </div>\n );\n};\n\nexport default Grid;\n","import Grid from './Grid';\n\nexport type { GridProps } from './Grid';\n\nexport { Grid };\n\nexport default Grid;\n"],"mappings":";;;;;;;;AAsBI;AApBJ,OAAO,QAAQ;AAcf,IAAM,OAAO,CAAC;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AACX,MAAiB;AACf,SACE,4CAAC,SAAI,WAAW,GAAG,cAAc,SAAS,GAAG,eAAa,QACvD,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACtBf,IAAOA,gBAAQ;","names":["Grid_default"]}
1
+ {"version":3,"sources":["../src/Grid/Grid.tsx","../src/Grid/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport cn from 'classnames';\n\nexport interface GridProps {\n /** child components */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * Defines the default grid for form components\n */\nconst Grid = ({\n children = null,\n className = undefined,\n testId = undefined,\n}: GridProps) => {\n return (\n <div className={cn('grid gap-6', className)} data-testid={testId}>\n {children}\n </div>\n );\n};\n\nexport default Grid;\n","import Grid from './Grid';\n\nexport type { GridProps } from './Grid';\n\nexport { Grid };\n\nexport default Grid;\n"],"mappings":";AAEA,OAAO,QAAQ;AAoBX;AANJ,IAAM,OAAO,CAAC;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AACX,MAAiB;AACf,SACE,oBAAC,SAAI,WAAW,GAAG,cAAc,SAAS,GAAG,eAAa,QACvD,UACH;AAEJ;AAEA,IAAO,eAAQ;;;ACtBf,IAAOA,gBAAQ;","names":["Grid_default"]}