@fuf-stack/uniform 1.0.1 → 1.0.3

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 (143) hide show
  1. package/dist/CheckboxGroup/index.cjs +7 -7
  2. package/dist/CheckboxGroup/index.d.cts +2 -2
  3. package/dist/CheckboxGroup/index.d.ts +2 -2
  4. package/dist/CheckboxGroup/index.js +6 -6
  5. package/dist/{CheckboxGroup-D45rOACY.d.cts → CheckboxGroup-B1g42iP0.d.cts} +2 -2
  6. package/dist/{CheckboxGroup-D45rOACY.d.ts → CheckboxGroup-B1g42iP0.d.ts} +2 -2
  7. package/dist/FieldArray/index.cjs +7 -7
  8. package/dist/FieldArray/index.d.cts +2 -2
  9. package/dist/FieldArray/index.d.ts +2 -2
  10. package/dist/FieldArray/index.js +6 -6
  11. package/dist/{FieldArray-DAzf9zE2.d.cts → FieldArray-DVQka7Bh.d.cts} +2 -2
  12. package/dist/{FieldArray-DAzf9zE2.d.ts → FieldArray-DVQka7Bh.d.ts} +2 -2
  13. package/dist/Form/index.cjs +5 -5
  14. package/dist/Form/index.d.cts +3 -3
  15. package/dist/Form/index.d.ts +3 -3
  16. package/dist/Form/index.js +4 -4
  17. package/dist/{Form-DX5NTR-H.d.ts → Form-C_11i6PA.d.ts} +1 -1
  18. package/dist/{Form-D0grgL6G.d.cts → Form-Cu0lWRDN.d.cts} +1 -1
  19. package/dist/{FormContext-ldCpxKnY.d.cts → FormContext-LRho0tno.d.cts} +2 -2
  20. package/dist/{FormContext-ldCpxKnY.d.ts → FormContext-LRho0tno.d.ts} +2 -2
  21. package/dist/Input/index.cjs +7 -7
  22. package/dist/Input/index.js +6 -6
  23. package/dist/RadioBoxes/index.cjs +7 -7
  24. package/dist/RadioBoxes/index.js +6 -6
  25. package/dist/RadioGroup/index.cjs +7 -7
  26. package/dist/RadioGroup/index.js +6 -6
  27. package/dist/RadioTabs/index.cjs +7 -7
  28. package/dist/RadioTabs/index.js +6 -6
  29. package/dist/Select/index.cjs +7 -7
  30. package/dist/Select/index.d.cts +2 -2
  31. package/dist/Select/index.d.ts +2 -2
  32. package/dist/Select/index.js +6 -6
  33. package/dist/{Select-CY5fJfiS.d.cts → Select-CTRWinmO.d.cts} +2 -2
  34. package/dist/{Select-CY5fJfiS.d.ts → Select-CTRWinmO.d.ts} +2 -2
  35. package/dist/SubmitButton/index.cjs +5 -5
  36. package/dist/SubmitButton/index.js +4 -4
  37. package/dist/Switch/index.cjs +7 -7
  38. package/dist/Switch/index.js +6 -6
  39. package/dist/TextArea/index.cjs +7 -7
  40. package/dist/TextArea/index.js +6 -6
  41. package/dist/{chunk-TKQYWIHG.js → chunk-3NZYJNO4.js} +3 -3
  42. package/dist/{chunk-TKQYWIHG.js.map → chunk-3NZYJNO4.js.map} +1 -1
  43. package/dist/{chunk-SIGL6TME.cjs → chunk-3WZBQHQM.cjs} +34 -26
  44. package/dist/chunk-3WZBQHQM.cjs.map +1 -0
  45. package/dist/{chunk-3HR3BI7P.js → chunk-5BKLAK23.js} +10 -10
  46. package/dist/{chunk-3HR3BI7P.js.map → chunk-5BKLAK23.js.map} +1 -1
  47. package/dist/{chunk-LHB7I6NY.js → chunk-5GBO2FHU.js} +24 -22
  48. package/dist/chunk-5GBO2FHU.js.map +1 -0
  49. package/dist/{chunk-U5WBLGZV.js → chunk-6IU7IYYB.js} +4 -2
  50. package/dist/{chunk-U5WBLGZV.js.map → chunk-6IU7IYYB.js.map} +1 -1
  51. package/dist/{chunk-K2IHP7JJ.cjs → chunk-6NSYLHQW.cjs} +68 -45
  52. package/dist/chunk-6NSYLHQW.cjs.map +1 -0
  53. package/dist/{chunk-UTFZRBBS.js → chunk-CQWA2DFV.js} +7 -5
  54. package/dist/chunk-CQWA2DFV.js.map +1 -0
  55. package/dist/{chunk-UIBHEN65.js → chunk-CWXROORZ.js} +16 -16
  56. package/dist/{chunk-UIBHEN65.js.map → chunk-CWXROORZ.js.map} +1 -1
  57. package/dist/{chunk-5QXF7YXD.js → chunk-EKJOEK5I.js} +14 -14
  58. package/dist/chunk-EKJOEK5I.js.map +1 -0
  59. package/dist/{chunk-LLO7FMR7.js → chunk-F3DDS4YF.js} +15 -15
  60. package/dist/chunk-F3DDS4YF.js.map +1 -0
  61. package/dist/{chunk-OWWUTKGY.cjs → chunk-FLK6OPFY.cjs} +4 -2
  62. package/dist/chunk-FLK6OPFY.cjs.map +1 -0
  63. package/dist/{chunk-H7EXCZKM.cjs → chunk-FWIJ3N3I.cjs} +62 -54
  64. package/dist/chunk-FWIJ3N3I.cjs.map +1 -0
  65. package/dist/{chunk-XKX22KIM.cjs → chunk-FZD7GFAE.cjs} +4 -4
  66. package/dist/{chunk-XKX22KIM.cjs.map → chunk-FZD7GFAE.cjs.map} +1 -1
  67. package/dist/{chunk-CDQ3ATPY.js → chunk-GVLFSVUO.js} +16 -14
  68. package/dist/chunk-GVLFSVUO.js.map +1 -0
  69. package/dist/{chunk-EBZGHHRW.js → chunk-HQTHUBVB.js} +43 -44
  70. package/dist/chunk-HQTHUBVB.js.map +1 -0
  71. package/dist/{chunk-63OL6DEM.js → chunk-HZKEIJP5.js} +32 -24
  72. package/dist/chunk-HZKEIJP5.js.map +1 -0
  73. package/dist/{chunk-L4YPB7MU.cjs → chunk-LTQCM5VQ.cjs} +9 -5
  74. package/dist/chunk-LTQCM5VQ.cjs.map +1 -0
  75. package/dist/{chunk-UHMJOD2X.js → chunk-M52AKWAI.js} +61 -38
  76. package/dist/chunk-M52AKWAI.js.map +1 -0
  77. package/dist/{chunk-E2ZEMRKR.cjs → chunk-NATEKPMG.cjs} +19 -19
  78. package/dist/{chunk-E2ZEMRKR.cjs.map → chunk-NATEKPMG.cjs.map} +1 -1
  79. package/dist/{chunk-BQGN3JTU.js → chunk-NTDKZW4E.js} +4 -4
  80. package/dist/{chunk-BQGN3JTU.js.map → chunk-NTDKZW4E.js.map} +1 -1
  81. package/dist/{chunk-WHW6WMII.js → chunk-OC76RMHG.js} +56 -48
  82. package/dist/chunk-OC76RMHG.js.map +1 -0
  83. package/dist/{chunk-PA2DQCBY.cjs → chunk-OE5BOGGX.cjs} +4 -4
  84. package/dist/{chunk-PA2DQCBY.cjs.map → chunk-OE5BOGGX.cjs.map} +1 -1
  85. package/dist/{chunk-7HFQGL4U.cjs → chunk-OTZNGYQZ.cjs} +20 -18
  86. package/dist/chunk-OTZNGYQZ.cjs.map +1 -0
  87. package/dist/{chunk-CFV3GEQW.cjs → chunk-P5DV3Y52.cjs} +17 -17
  88. package/dist/chunk-P5DV3Y52.cjs.map +1 -0
  89. package/dist/{chunk-RCPQS5EN.cjs → chunk-T6SB5UO2.cjs} +13 -18
  90. package/dist/chunk-T6SB5UO2.cjs.map +1 -0
  91. package/dist/{chunk-PK3BPMH4.cjs → chunk-TQAF2PJG.cjs} +27 -25
  92. package/dist/chunk-TQAF2PJG.cjs.map +1 -0
  93. package/dist/{chunk-W5DZ2NIX.js → chunk-TRJOEV3R.js} +10 -15
  94. package/dist/{chunk-W5DZ2NIX.js.map → chunk-TRJOEV3R.js.map} +1 -1
  95. package/dist/{chunk-57WY5GAE.js → chunk-V7QZNDTY.js} +9 -5
  96. package/dist/chunk-V7QZNDTY.js.map +1 -0
  97. package/dist/{chunk-3QCNVEUD.cjs → chunk-WIAZMOAH.cjs} +18 -18
  98. package/dist/chunk-WIAZMOAH.cjs.map +1 -0
  99. package/dist/{chunk-U6PPZEDR.cjs → chunk-XQAN6TTP.cjs} +13 -13
  100. package/dist/{chunk-U6PPZEDR.cjs.map → chunk-XQAN6TTP.cjs.map} +1 -1
  101. package/dist/{chunk-GNYQC5IJ.cjs → chunk-Y3AB4GV6.cjs} +7 -5
  102. package/dist/chunk-Y3AB4GV6.cjs.map +1 -0
  103. package/dist/{chunk-YSJU3CB3.cjs → chunk-YOMV7IQD.cjs} +45 -46
  104. package/dist/chunk-YOMV7IQD.cjs.map +1 -0
  105. package/dist/helpers/index.cjs +2 -2
  106. package/dist/helpers/index.js +1 -1
  107. package/dist/hooks/index.cjs +4 -4
  108. package/dist/hooks/index.d.cts +3 -3
  109. package/dist/hooks/index.d.ts +3 -3
  110. package/dist/hooks/index.js +3 -3
  111. package/dist/hooks/useInputValueDebounce/index.cjs +2 -2
  112. package/dist/hooks/useInputValueDebounce/index.js +1 -1
  113. package/dist/index.cjs +17 -17
  114. package/dist/index.d.cts +5 -5
  115. package/dist/index.d.ts +5 -5
  116. package/dist/index.js +16 -16
  117. package/dist/partials/FieldCopyTestIdButton/index.cjs +2 -2
  118. package/dist/partials/FieldCopyTestIdButton/index.js +1 -1
  119. package/dist/partials/FieldValidationError/index.cjs +2 -2
  120. package/dist/partials/FieldValidationError/index.js +1 -1
  121. package/package.json +6 -6
  122. package/dist/chunk-3QCNVEUD.cjs.map +0 -1
  123. package/dist/chunk-57WY5GAE.js.map +0 -1
  124. package/dist/chunk-5QXF7YXD.js.map +0 -1
  125. package/dist/chunk-63OL6DEM.js.map +0 -1
  126. package/dist/chunk-7HFQGL4U.cjs.map +0 -1
  127. package/dist/chunk-CDQ3ATPY.js.map +0 -1
  128. package/dist/chunk-CFV3GEQW.cjs.map +0 -1
  129. package/dist/chunk-EBZGHHRW.js.map +0 -1
  130. package/dist/chunk-GNYQC5IJ.cjs.map +0 -1
  131. package/dist/chunk-H7EXCZKM.cjs.map +0 -1
  132. package/dist/chunk-K2IHP7JJ.cjs.map +0 -1
  133. package/dist/chunk-L4YPB7MU.cjs.map +0 -1
  134. package/dist/chunk-LHB7I6NY.js.map +0 -1
  135. package/dist/chunk-LLO7FMR7.js.map +0 -1
  136. package/dist/chunk-OWWUTKGY.cjs.map +0 -1
  137. package/dist/chunk-PK3BPMH4.cjs.map +0 -1
  138. package/dist/chunk-RCPQS5EN.cjs.map +0 -1
  139. package/dist/chunk-SIGL6TME.cjs.map +0 -1
  140. package/dist/chunk-UHMJOD2X.js.map +0 -1
  141. package/dist/chunk-UTFZRBBS.js.map +0 -1
  142. package/dist/chunk-WHW6WMII.js.map +0 -1
  143. package/dist/chunk-YSJU3CB3.cjs.map +0 -1
@@ -1,16 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkRCPQS5ENcjs = require('../chunk-RCPQS5EN.cjs');
5
- require('../chunk-PA2DQCBY.cjs');
6
- require('../chunk-GNYQC5IJ.cjs');
7
- require('../chunk-H7EXCZKM.cjs');
8
- require('../chunk-L4YPB7MU.cjs');
9
- require('../chunk-OWWUTKGY.cjs');
4
+ var _chunkT6SB5UO2cjs = require('../chunk-T6SB5UO2.cjs');
5
+ require('../chunk-OE5BOGGX.cjs');
6
+ require('../chunk-Y3AB4GV6.cjs');
7
+ require('../chunk-FWIJ3N3I.cjs');
8
+ require('../chunk-LTQCM5VQ.cjs');
9
+ require('../chunk-FLK6OPFY.cjs');
10
10
  require('../chunk-P6HJOG7D.cjs');
11
11
  require('../chunk-555JRYCS.cjs');
12
12
 
13
13
 
14
14
 
15
- exports.Switch = _chunkRCPQS5ENcjs.Switch_default; exports.default = _chunkRCPQS5ENcjs.Switch_default2;
15
+ exports.Switch = _chunkT6SB5UO2cjs.Switch_default; exports.default = _chunkT6SB5UO2cjs.Switch_default2;
16
16
  //# sourceMappingURL=index.cjs.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  Switch_default,
3
3
  Switch_default2
4
- } from "../chunk-W5DZ2NIX.js";
5
- import "../chunk-BQGN3JTU.js";
6
- import "../chunk-UTFZRBBS.js";
7
- import "../chunk-WHW6WMII.js";
8
- import "../chunk-57WY5GAE.js";
9
- import "../chunk-U5WBLGZV.js";
4
+ } from "../chunk-TRJOEV3R.js";
5
+ import "../chunk-NTDKZW4E.js";
6
+ import "../chunk-CQWA2DFV.js";
7
+ import "../chunk-OC76RMHG.js";
8
+ import "../chunk-V7QZNDTY.js";
9
+ import "../chunk-6IU7IYYB.js";
10
10
  import "../chunk-Q2BOMFJ5.js";
11
11
  import "../chunk-K2V4ULA2.js";
12
12
  export {
@@ -1,16 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunk3QCNVEUDcjs = require('../chunk-3QCNVEUD.cjs');
5
- require('../chunk-PA2DQCBY.cjs');
6
- require('../chunk-GNYQC5IJ.cjs');
7
- require('../chunk-H7EXCZKM.cjs');
8
- require('../chunk-L4YPB7MU.cjs');
9
- require('../chunk-OWWUTKGY.cjs');
4
+ var _chunkWIAZMOAHcjs = require('../chunk-WIAZMOAH.cjs');
5
+ require('../chunk-OE5BOGGX.cjs');
6
+ require('../chunk-Y3AB4GV6.cjs');
7
+ require('../chunk-FWIJ3N3I.cjs');
8
+ require('../chunk-LTQCM5VQ.cjs');
9
+ require('../chunk-FLK6OPFY.cjs');
10
10
  require('../chunk-P6HJOG7D.cjs');
11
11
  require('../chunk-555JRYCS.cjs');
12
12
 
13
13
 
14
14
 
15
- exports.TextArea = _chunk3QCNVEUDcjs.TextArea_default; exports.default = _chunk3QCNVEUDcjs.TextArea_default2;
15
+ exports.TextArea = _chunkWIAZMOAHcjs.TextArea_default; exports.default = _chunkWIAZMOAHcjs.TextArea_default2;
16
16
  //# sourceMappingURL=index.cjs.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  TextArea_default,
3
3
  TextArea_default2
4
- } from "../chunk-LLO7FMR7.js";
5
- import "../chunk-BQGN3JTU.js";
6
- import "../chunk-UTFZRBBS.js";
7
- import "../chunk-WHW6WMII.js";
8
- import "../chunk-57WY5GAE.js";
9
- import "../chunk-U5WBLGZV.js";
4
+ } from "../chunk-F3DDS4YF.js";
5
+ import "../chunk-NTDKZW4E.js";
6
+ import "../chunk-CQWA2DFV.js";
7
+ import "../chunk-OC76RMHG.js";
8
+ import "../chunk-V7QZNDTY.js";
9
+ import "../chunk-6IU7IYYB.js";
10
10
  import "../chunk-Q2BOMFJ5.js";
11
11
  import "../chunk-K2V4ULA2.js";
12
12
  export {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useFormContext
3
- } from "./chunk-WHW6WMII.js";
3
+ } from "./chunk-OC76RMHG.js";
4
4
 
5
5
  // src/SubmitButton/SubmitButton.tsx
6
6
  import { cn, slugify } from "@fuf-stack/pixel-utils";
@@ -23,11 +23,11 @@ var SubmitButton = ({
23
23
  {
24
24
  className: cn(className),
25
25
  color,
26
- testId: slugify(testId, { replaceDots: true }),
27
26
  disabled: isSubmitting,
28
27
  loading: loading || isSubmitting,
29
28
  onClick: triggerSubmit,
30
29
  size,
30
+ testId: slugify(testId, { replaceDots: true }),
31
31
  type: "submit",
32
32
  children
33
33
  }
@@ -42,4 +42,4 @@ export {
42
42
  SubmitButton_default,
43
43
  SubmitButton_default2
44
44
  };
45
- //# sourceMappingURL=chunk-TKQYWIHG.js.map
45
+ //# sourceMappingURL=chunk-3NZYJNO4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SubmitButton/SubmitButton.tsx","../src/SubmitButton/index.ts"],"sourcesContent":["import type { ButtonProps } from '@fuf-stack/pixels';\nimport type { ReactNode } from 'react';\n\nimport { cn, slugify } from '@fuf-stack/pixel-utils';\nimport { Button } from '@fuf-stack/pixels';\n\nimport { useFormContext } from '../hooks';\n\nexport interface SubmitButtonProps {\n /** child components */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** color of the button */\n color?: ButtonProps['color'];\n /** If set loading animation is shown */\n loading?: boolean;\n /** size of the button */\n size?: ButtonProps['size'];\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * From SubmitButton\n */\nconst SubmitButton = ({\n children = 'Submit',\n className = undefined,\n color = 'success',\n loading = false,\n size = 'md',\n testId = 'form_submit_button',\n}: SubmitButtonProps) => {\n const {\n formState: { isSubmitting },\n triggerSubmit,\n } = useFormContext();\n\n return (\n <Button\n className={cn(className)}\n color={color}\n testId={slugify(testId, { replaceDots: true })}\n disabled={isSubmitting}\n loading={loading || isSubmitting}\n // @ts-expect-error we use form context triggerSubmit\n // here so that submit button also works in special\n // scenarios (e.g. when used in modal)\n onClick={triggerSubmit}\n size={size}\n type=\"submit\"\n >\n {children}\n </Button>\n );\n};\n\nexport default SubmitButton;\n","import SubmitButton from './SubmitButton';\n\nexport type { SubmitButtonProps } from './SubmitButton';\n\nexport { SubmitButton };\n\nexport default SubmitButton;\n"],"mappings":";;;;;AAGA,SAAS,IAAI,eAAe;AAC5B,SAAS,cAAc;AAoCnB;AAdJ,IAAM,eAAe,CAAC;AAAA,EACpB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AACX,MAAyB;AACvB,QAAM;AAAA,IACJ,WAAW,EAAE,aAAa;AAAA,IAC1B;AAAA,EACF,IAAI,eAAe;AAEnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,SAAS;AAAA,MACvB;AAAA,MACA,QAAQ,QAAQ,QAAQ,EAAE,aAAa,KAAK,CAAC;AAAA,MAC7C,UAAU;AAAA,MACV,SAAS,WAAW;AAAA,MAIpB,SAAS;AAAA,MACT;AAAA,MACA,MAAK;AAAA,MAEJ;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,uBAAQ;;;ACpDf,IAAOA,wBAAQ;","names":["SubmitButton_default"]}
1
+ {"version":3,"sources":["../src/SubmitButton/SubmitButton.tsx","../src/SubmitButton/index.ts"],"sourcesContent":["import type { ButtonProps } from '@fuf-stack/pixels';\nimport type { ReactNode } from 'react';\n\nimport { cn, slugify } from '@fuf-stack/pixel-utils';\nimport { Button } from '@fuf-stack/pixels';\n\nimport { useFormContext } from '../hooks';\n\nexport interface SubmitButtonProps {\n /** child components */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** color of the button */\n color?: ButtonProps['color'];\n /** If set loading animation is shown */\n loading?: boolean;\n /** size of the button */\n size?: ButtonProps['size'];\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * From SubmitButton\n */\nconst SubmitButton = ({\n children = 'Submit',\n className = undefined,\n color = 'success',\n loading = false,\n size = 'md',\n testId = 'form_submit_button',\n}: SubmitButtonProps) => {\n const {\n formState: { isSubmitting },\n triggerSubmit,\n } = useFormContext();\n\n return (\n <Button\n className={cn(className)}\n color={color}\n disabled={isSubmitting}\n loading={loading || isSubmitting}\n // @ts-expect-error we use form context triggerSubmit\n // here so that submit button also works in special\n // scenarios (e.g. when used in modal)\n onClick={triggerSubmit}\n size={size}\n testId={slugify(testId, { replaceDots: true })}\n type=\"submit\"\n >\n {children}\n </Button>\n );\n};\n\nexport default SubmitButton;\n","import SubmitButton from './SubmitButton';\n\nexport type { SubmitButtonProps } from './SubmitButton';\n\nexport { SubmitButton };\n\nexport default SubmitButton;\n"],"mappings":";;;;;AAGA,SAAS,IAAI,eAAe;AAC5B,SAAS,cAAc;AAoCnB;AAdJ,IAAM,eAAe,CAAC;AAAA,EACpB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AACX,MAAyB;AACvB,QAAM;AAAA,IACJ,WAAW,EAAE,aAAa;AAAA,IAC1B;AAAA,EACF,IAAI,eAAe;AAEnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,SAAS;AAAA,MACvB;AAAA,MACA,UAAU;AAAA,MACV,SAAS,WAAW;AAAA,MAIpB,SAAS;AAAA,MACT;AAAA,MACA,QAAQ,QAAQ,QAAQ,EAAE,aAAa,KAAK,CAAC;AAAA,MAC7C,MAAK;AAAA,MAEJ;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,uBAAQ;;;ACpDf,IAAOA,wBAAQ;","names":["SubmitButton_default"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkH7EXCZKMcjs = require('./chunk-H7EXCZKM.cjs');
4
+ var _chunkFWIJ3N3Icjs = require('./chunk-FWIJ3N3I.cjs');
5
5
 
6
6
  // src/Form/Form.tsx
7
7
  var _pixelutils = require('@fuf-stack/pixel-utils');
@@ -24,7 +24,7 @@ var FormDebugViewer = ({ className = void 0 }) => {
24
24
  setDebugMode,
25
25
  subscribe,
26
26
  validation: { errors }
27
- } = _chunkH7EXCZKMcjs.useFormContext.call(void 0, );
27
+ } = _chunkFWIJ3N3Icjs.useFormContext.call(void 0, );
28
28
  const showDebugButton = debugMode === "off";
29
29
  const showDebugCard = debugMode === "debug" || debugMode === "debug-testids";
30
30
  const showDebugTestIds = debugMode === "debug-testids";
@@ -46,10 +46,12 @@ var FormDebugViewer = ({ className = void 0 }) => {
46
46
  _Button.Button,
47
47
  {
48
48
  ariaLabel: "Enable form debug mode",
49
- onClick: () => setDebugMode("debug"),
50
- className: "fixed bottom-2.5 right-2.5 w-5 text-default-400",
49
+ className: "text-default-400 fixed right-2.5 bottom-2.5 w-5",
50
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBug, {}),
51
51
  variant: "light",
52
- icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBug, {})
52
+ onClick: () => {
53
+ setDebugMode("debug");
54
+ }
53
55
  }
54
56
  );
55
57
  }
@@ -67,9 +69,11 @@ var FormDebugViewer = ({ className = void 0 }) => {
67
69
  {
68
70
  color: "danger",
69
71
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa.FaTimes, {}),
70
- onClick: () => setDebugMode("off"),
71
72
  size: "sm",
72
- variant: "light"
73
+ variant: "light",
74
+ onClick: () => {
75
+ setDebugMode("off");
76
+ }
73
77
  }
74
78
  )
75
79
  ] }),
@@ -77,10 +81,12 @@ var FormDebugViewer = ({ className = void 0 }) => {
77
81
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
78
82
  _Button.Button,
79
83
  {
80
- variant: showDebugTestIds ? "solid" : "light",
84
+ className: "mr-auto mb-4 ml-auto",
81
85
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBullseye, {}),
82
- className: "mb-4 ml-auto mr-auto",
83
- onClick: () => setDebugMode(debugMode === "debug" ? "debug-testids" : "debug"),
86
+ variant: showDebugTestIds ? "solid" : "light",
87
+ onClick: () => {
88
+ setDebugMode(debugMode === "debug" ? "debug-testids" : "debug");
89
+ },
84
90
  children: showDebugTestIds ? "Hide CopyButton" : "Show CopyButton"
85
91
  }
86
92
  ),
@@ -116,27 +122,29 @@ var Form = ({
116
122
  validationTrigger = "all"
117
123
  }) => {
118
124
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
119
- _chunkH7EXCZKMcjs.FormContext_default,
125
+ _chunkFWIJ3N3Icjs.FormContext_default,
120
126
  {
121
127
  debugModeSettings: debug,
122
128
  initialValues,
123
129
  onSubmit,
124
130
  validation,
125
131
  validationTrigger,
126
- children: ({ handleSubmit, isValid }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-row justify-between gap-6", children: [
127
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
128
- "form",
129
- {
130
- className: _pixelutils.cn.call(void 0, "grow", className),
131
- "data-form-is-valid": isValid,
132
- "data-testid": _pixelutils.slugify.call(void 0, testId || name || ""),
133
- name,
134
- onSubmit: handleSubmit,
135
- children
136
- }
137
- ),
138
- !IS_TEST && !(debug == null ? void 0 : debug.disable) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FormDebugViewer_default, { className: "w-96 shrink" })
139
- ] })
132
+ children: ({ handleSubmit, isValid }) => {
133
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-row justify-between gap-6", children: [
134
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
135
+ "form",
136
+ {
137
+ className: _pixelutils.cn.call(void 0, "grow", className),
138
+ "data-form-is-valid": isValid,
139
+ "data-testid": _pixelutils.slugify.call(void 0, testId || name || ""),
140
+ name,
141
+ onSubmit: handleSubmit,
142
+ children
143
+ }
144
+ ),
145
+ !IS_TEST && !(debug == null ? void 0 : debug.disable) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FormDebugViewer_default, { className: "w-96 shrink" })
146
+ ] });
147
+ }
140
148
  }
141
149
  );
142
150
  };
@@ -149,4 +157,4 @@ var Form_default2 = Form_default;
149
157
 
150
158
 
151
159
  exports.Form_default = Form_default; exports.Form_default2 = Form_default2;
152
- //# sourceMappingURL=chunk-SIGL6TME.cjs.map
160
+ //# sourceMappingURL=chunk-3WZBQHQM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-3WZBQHQM.cjs","../src/Form/Form.tsx","../src/Form/subcomponents/FormDebugViewer.tsx","../src/Form/index.ts"],"names":["jsx","jsxs","cn","Form_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-3WZBQHQM.cjs","sourcesContent":[null,"import type { VetoInstance } from '@fuf-stack/veto';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, SubmitHandler } from 'react-hook-form';\nimport type { DebugModeSettings } from './subcomponents/FormContext';\n\nimport { cn, slugify } from '@fuf-stack/pixel-utils';\n\nimport FormProvider from './subcomponents/FormContext';\nimport FormDebugViewer from './subcomponents/FormDebugViewer';\n\nconst IS_TEST = process.env.NODE_ENV === 'test';\n\nexport interface FormProps {\n /** form children */\n children: ReactNode | ReactNode[];\n /** CSS class name */\n className?: string | string[];\n /** settings for from debug mode */\n debug?: DebugModeSettings;\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?: 'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all';\n}\n\n/**\n * Form component that has to wrap every uniform\n */\nconst Form = ({\n children,\n className = undefined,\n debug = undefined,\n initialValues = undefined,\n name = undefined,\n onSubmit,\n testId = undefined,\n validation = undefined,\n validationTrigger = 'all',\n}: FormProps) => {\n return (\n <FormProvider\n debugModeSettings={debug}\n initialValues={initialValues}\n onSubmit={onSubmit}\n validation={validation}\n validationTrigger={validationTrigger}\n >\n {({ handleSubmit, isValid }) => {\n return (\n <div className=\"flex w-full flex-row justify-between gap-6\">\n <form\n className={cn('grow', className)}\n data-form-is-valid={isValid}\n data-testid={slugify(testId || name || '')}\n name={name}\n onSubmit={handleSubmit}\n >\n {children}\n </form>\n {/* render debug viewer when not in test environment and debug not disabled */}\n {!IS_TEST && !debug?.disable && (\n <FormDebugViewer className=\"w-96 shrink\" />\n )}\n </div>\n );\n }}\n </FormProvider>\n );\n};\n\nexport default Form;\n","import { useEffect, useState } from 'react';\nimport { FaTimes } from 'react-icons/fa';\nimport { FaBug, FaBullseye } from 'react-icons/fa6';\n\nimport { cn } from '@fuf-stack/pixel-utils';\nimport { Button } from '@fuf-stack/pixels/Button';\nimport { Card } from '@fuf-stack/pixels/Card';\nimport { Json } from '@fuf-stack/pixels/Json';\n\nimport { useFormContext } from '../../hooks';\n\n// import Json css (theme)\nimport '@fuf-stack/pixels/Json.css';\n\ninterface FormDebugViewerProps {\n /** CSS class name */\n className?: string;\n}\n\n/** Renders a form debug panel with information about the current form state */\nconst FormDebugViewer = ({ className = undefined }: FormDebugViewerProps) => {\n const {\n debugMode,\n formState: { isValid, isSubmitting },\n getValues,\n setDebugMode,\n subscribe,\n validation: { errors },\n } = useFormContext();\n\n const showDebugButton = debugMode === 'off';\n const showDebugCard = debugMode === 'debug' || debugMode === 'debug-testids';\n const showDebugTestIds = debugMode === 'debug-testids';\n\n const [validationValues, setValidationValues] = useState<Record<\n string,\n unknown\n > | null>(getValues() || null);\n\n // Subscribe to value updates only when needed and cleanup properly\n useEffect(() => {\n if (!showDebugCard) {\n return undefined;\n }\n\n const unsubscribe = subscribe({\n formState: { values: true },\n callback: ({ values }) => {\n setValidationValues(values);\n },\n });\n\n return unsubscribe;\n }, [showDebugCard, subscribe]);\n\n if (showDebugButton) {\n return (\n <Button\n ariaLabel=\"Enable form debug mode\"\n className=\"text-default-400 fixed right-2.5 bottom-2.5 w-5\"\n icon={<FaBug />}\n variant=\"light\"\n onClick={() => {\n setDebugMode('debug');\n }}\n />\n );\n }\n\n // do not show card\n if (!showDebugCard) {\n return null;\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 color=\"danger\"\n icon={<FaTimes />}\n size=\"sm\"\n variant=\"light\"\n onClick={() => {\n setDebugMode('off');\n }}\n />\n </div>\n }\n >\n <Button\n className=\"mr-auto mb-4 ml-auto\"\n icon={<FaBullseye />}\n variant={showDebugTestIds ? 'solid' : 'light'}\n onClick={() => {\n setDebugMode(debugMode === 'debug' ? 'debug-testids' : 'debug');\n }}\n >\n {showDebugTestIds ? 'Hide CopyButton' : 'Show CopyButton'}\n </Button>\n <Json\n value={{\n values: validationValues,\n errors: errors || null,\n isValid,\n isSubmitting,\n }}\n />\n </Card>\n );\n};\n\nexport default FormDebugViewer;\n","import Form from './Form';\n\nexport type { FormProps } from './Form';\n\nexport { Form };\n\nexport default Form;\n"]}
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  FieldCopyTestIdButton_default
3
- } from "./chunk-BQGN3JTU.js";
3
+ } from "./chunk-NTDKZW4E.js";
4
4
  import {
5
5
  FieldValidationError_default
6
- } from "./chunk-UTFZRBBS.js";
6
+ } from "./chunk-CQWA2DFV.js";
7
7
  import {
8
8
  useController,
9
9
  useFormContext
10
- } from "./chunk-WHW6WMII.js";
10
+ } from "./chunk-OC76RMHG.js";
11
11
 
12
12
  // src/RadioGroup/RadioGroup.tsx
13
13
  import { RadioGroup as HeroRadioGroup, Radio } from "@heroui/radio";
@@ -26,7 +26,7 @@ var radioGroupVariants = tv({
26
26
  // TODO: get rid of !.
27
27
  // see HeroUI styles for group-data condition,
28
28
  // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
29
- label: "text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger",
29
+ label: "text-foreground group-data-[invalid=true]:text-danger text-sm subpixel-antialiased",
30
30
  wrapper: ""
31
31
  }
32
32
  });
@@ -59,23 +59,23 @@ var RadioGroup = ({
59
59
  HeroRadioGroup,
60
60
  {
61
61
  classNames,
62
+ ref,
62
63
  "data-invalid": invalid,
63
64
  "data-required": required,
64
65
  "data-testid": testId,
65
66
  defaultValue: getValues()[name],
66
- errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error, testId }),
67
67
  isDisabled,
68
68
  isInvalid: invalid,
69
69
  isRequired: required,
70
+ name,
71
+ onBlur,
72
+ orientation: inline ? "horizontal" : "vertical",
73
+ errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error, testId }),
70
74
  label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
71
75
  /* @__PURE__ */ jsxs("label", { children: [
72
76
  label,
73
77
  showTestIdCopyButton && /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
74
78
  ] }),
75
- name,
76
- orientation: inline ? "horizontal" : "vertical",
77
- onBlur,
78
- ref,
79
79
  children: options.map((option) => {
80
80
  if ("value" in option) {
81
81
  const optionTestId = slugify(
@@ -109,4 +109,4 @@ export {
109
109
  RadioGroup_default,
110
110
  RadioGroup_default2
111
111
  };
112
- //# sourceMappingURL=chunk-3HR3BI7P.js.map
112
+ //# sourceMappingURL=chunk-5BKLAK23.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/RadioGroup/RadioGroup.tsx","../src/RadioGroup/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { RadioGroup as HeroRadioGroup, Radio } from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const radioGroupVariants = tv({\n slots: {\n // Needs group for group-data condition\n base: 'group',\n itemBase: '',\n itemControl: 'bg-focus group-data-[invalid=true]:bg-danger',\n itemDescription: '',\n itemLabel: 'text-sm',\n itemLabelWrapper: '',\n itemWrapper:\n 'group-data-[invalid=true]:!border-danger [&:not(group-data-[invalid=\"true\"]):not(group-data-[selected=\"false\"])]:border-focus', // TODO: get rid of !.\n // see HeroUI styles for group-data condition,\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radioGroupVariants>;\ntype ClassName = TVClassName<typeof radioGroupVariants>;\n\nexport interface RadioGroupOption {\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: React.ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string;\n}\n\nexport interface RadioGroupProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioGroupOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * RadioGroup component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst RadioGroup = ({\n className = undefined,\n disabled = false,\n inline = false,\n label = undefined,\n name,\n options,\n testId: _testId = undefined,\n}: RadioGroupProps): ReactElement => {\n const { control, debugMode, getFieldState, getValues } = useFormContext();\n\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const { field } = useController({ control, disabled, name });\n const { onChange, disabled: isDisabled, onBlur, ref } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = radioGroupVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const itemClassNames = {\n base: classNames.itemBase,\n control: classNames.itemControl,\n description: classNames.itemDescription,\n label: classNames.itemLabel,\n labelWrapper: classNames.itemLabelWrapper,\n wrapper: classNames.itemWrapper,\n };\n\n return (\n <HeroRadioGroup\n classNames={classNames}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n defaultValue={getValues()[name]}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n isDisabled={isDisabled}\n isInvalid={invalid}\n isRequired={required}\n label={\n showLabel && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </label>\n )\n }\n name={name}\n orientation={inline ? 'horizontal' : 'vertical'}\n onBlur={onBlur}\n ref={ref}\n >\n {options.map((option) => {\n if ('value' in option) {\n const optionTestId = slugify(\n `${testId}_option_${option.testId || option.value}`,\n { replaceDots: true },\n );\n return (\n <Radio\n classNames={itemClassNames}\n data-testid={optionTestId}\n isDisabled={isDisabled || option.disabled}\n key={option.value}\n onChange={onChange}\n value={option.value}\n >\n {option.label ? option.label : option.value}\n </Radio>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default RadioGroup;\n","import RadioGroup from './RadioGroup';\n\nexport type { RadioGroupProps } from './RadioGroup';\n\nexport { RadioGroup };\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;;;;;;AAGA,SAAS,cAAc,gBAAgB,aAAa;AAEpD,SAAS,SAAS,IAAI,4BAA4B;AAsGjC,cAQP,YARO;AAhGV,IAAM,qBAAqB,GAAG;AAAA,EACnC,OAAO;AAAA;AAAA,IAEL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,aACE;AAAA;AAAA;AAAA;AAAA,IAGF,OACE;AAAA,IACF,SAAS;AAAA,EACX;AACF,CAAC;AAsCD,IAAM,aAAa,CAAC;AAAA,EAClB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,QAAQ,UAAU;AACpB,MAAqC;AACnC,QAAM,EAAE,SAAS,WAAW,eAAe,UAAU,IAAI,eAAe;AAExE,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,EAAE,MAAM,IAAI,cAAc,EAAE,SAAS,UAAU,KAAK,CAAC;AAC3D,QAAM,EAAE,UAAU,UAAU,YAAY,QAAQ,IAAI,IAAI;AAExD,QAAM,uBAAuB,cAAc;AAC3C,QAAM,YAAY,SAAS;AAE3B,QAAM,WAAW,mBAAmB;AACpC,QAAM,aAAa,qBAAqB,UAAU,WAAW,MAAM;AAEnE,QAAM,iBAAiB;AAAA,IACrB,MAAM,WAAW;AAAA,IACjB,SAAS,WAAW;AAAA,IACpB,aAAa,WAAW;AAAA,IACxB,OAAO,WAAW;AAAA,IAClB,cAAc,WAAW;AAAA,IACzB,SAAS,WAAW;AAAA,EACtB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MAGA,gBAAc;AAAA,MACd,iBAAe;AAAA,MACf,eAAa;AAAA,MACb,cAAc,UAAU,EAAE,IAAI;AAAA,MAC9B,cACE,SAAS,oBAAC,gCAAqB,OAAc,QAAgB;AAAA,MAE/D;AAAA,MACA,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,OACE;AAAA,MAEE,qBAAC,WACE;AAAA;AAAA,QACA,wBAAwB,oBAAC,iCAAsB,QAAgB;AAAA,SAClE;AAAA,MAGJ;AAAA,MACA,aAAa,SAAS,eAAe;AAAA,MACrC;AAAA,MACA;AAAA,MAEC,kBAAQ,IAAI,CAAC,WAAW;AACvB,YAAI,WAAW,QAAQ;AACrB,gBAAM,eAAe;AAAA,YACnB,GAAG,MAAM,WAAW,OAAO,UAAU,OAAO,KAAK;AAAA,YACjD,EAAE,aAAa,KAAK;AAAA,UACtB;AACA,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,YAAY;AAAA,cACZ,eAAa;AAAA,cACb,YAAY,cAAc,OAAO;AAAA,cAEjC;AAAA,cACA,OAAO,OAAO;AAAA,cAEb,iBAAO,QAAQ,OAAO,QAAQ,OAAO;AAAA;AAAA,YAJjC,OAAO;AAAA,UAKd;AAAA,QAEJ;AACA,eAAO;AAAA,MACT,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,qBAAQ;;;ACjJf,IAAOA,sBAAQ;","names":["RadioGroup_default"]}
1
+ {"version":3,"sources":["../src/RadioGroup/RadioGroup.tsx","../src/RadioGroup/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { RadioGroup as HeroRadioGroup, Radio } from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const radioGroupVariants = tv({\n slots: {\n // Needs group for group-data condition\n base: 'group',\n itemBase: '',\n itemControl: 'bg-focus group-data-[invalid=true]:bg-danger',\n itemDescription: '',\n itemLabel: 'text-sm',\n itemLabelWrapper: '',\n itemWrapper:\n 'group-data-[invalid=true]:!border-danger [&:not(group-data-[invalid=\"true\"]):not(group-data-[selected=\"false\"])]:border-focus', // TODO: get rid of !.\n // see HeroUI styles for group-data condition,\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'text-foreground group-data-[invalid=true]:text-danger text-sm subpixel-antialiased',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radioGroupVariants>;\ntype ClassName = TVClassName<typeof radioGroupVariants>;\n\nexport interface RadioGroupOption {\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: React.ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string;\n}\n\nexport interface RadioGroupProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioGroupOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * RadioGroup component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst RadioGroup = ({\n className = undefined,\n disabled = false,\n inline = false,\n label = undefined,\n name,\n options,\n testId: _testId = undefined,\n}: RadioGroupProps): ReactElement => {\n const { control, debugMode, getFieldState, getValues } = useFormContext();\n\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const { field } = useController({ control, disabled, name });\n const { onChange, disabled: isDisabled, onBlur, ref } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = radioGroupVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const itemClassNames = {\n base: classNames.itemBase,\n control: classNames.itemControl,\n description: classNames.itemDescription,\n label: classNames.itemLabel,\n labelWrapper: classNames.itemLabelWrapper,\n wrapper: classNames.itemWrapper,\n };\n\n return (\n <HeroRadioGroup\n classNames={classNames}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n ref={ref}\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n defaultValue={getValues()[name]}\n isDisabled={isDisabled}\n isInvalid={invalid}\n isRequired={required}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n label={\n showLabel && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </label>\n )\n }\n >\n {options.map((option) => {\n if ('value' in option) {\n const optionTestId = slugify(\n `${testId}_option_${option.testId || option.value}`,\n { replaceDots: true },\n );\n return (\n <Radio\n key={option.value}\n classNames={itemClassNames}\n data-testid={optionTestId}\n isDisabled={isDisabled || option.disabled}\n onChange={onChange}\n value={option.value}\n >\n {option.label ? option.label : option.value}\n </Radio>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default RadioGroup;\n","import RadioGroup from './RadioGroup';\n\nexport type { RadioGroupProps } from './RadioGroup';\n\nexport { RadioGroup };\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;;;;;;AAGA,SAAS,cAAc,gBAAgB,aAAa;AAEpD,SAAS,SAAS,IAAI,4BAA4B;AA6GjC,cAKP,YALO;AAvGV,IAAM,qBAAqB,GAAG;AAAA,EACnC,OAAO;AAAA;AAAA,IAEL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,aACE;AAAA;AAAA;AAAA;AAAA,IAGF,OACE;AAAA,IACF,SAAS;AAAA,EACX;AACF,CAAC;AAsCD,IAAM,aAAa,CAAC;AAAA,EAClB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,QAAQ,UAAU;AACpB,MAAqC;AACnC,QAAM,EAAE,SAAS,WAAW,eAAe,UAAU,IAAI,eAAe;AAExE,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,EAAE,MAAM,IAAI,cAAc,EAAE,SAAS,UAAU,KAAK,CAAC;AAC3D,QAAM,EAAE,UAAU,UAAU,YAAY,QAAQ,IAAI,IAAI;AAExD,QAAM,uBAAuB,cAAc;AAC3C,QAAM,YAAY,SAAS;AAE3B,QAAM,WAAW,mBAAmB;AACpC,QAAM,aAAa,qBAAqB,UAAU,WAAW,MAAM;AAEnE,QAAM,iBAAiB;AAAA,IACrB,MAAM,WAAW;AAAA,IACjB,SAAS,WAAW;AAAA,IACpB,aAAa,WAAW;AAAA,IACxB,OAAO,WAAW;AAAA,IAClB,cAAc,WAAW;AAAA,IACzB,SAAS,WAAW;AAAA,EACtB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MAGA;AAAA,MACA,gBAAc;AAAA,MACd,iBAAe;AAAA,MACf,eAAa;AAAA,MACb,cAAc,UAAU,EAAE,IAAI;AAAA,MAC9B;AAAA,MACA,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,aAAa,SAAS,eAAe;AAAA,MACrC,cACE,SAAS,oBAAC,gCAAqB,OAAc,QAAgB;AAAA,MAE/D,OACE;AAAA,MAEE,qBAAC,WACE;AAAA;AAAA,QACA,wBAAwB,oBAAC,iCAAsB,QAAgB;AAAA,SAClE;AAAA,MAIH,kBAAQ,IAAI,CAAC,WAAW;AACvB,YAAI,WAAW,QAAQ;AACrB,gBAAM,eAAe;AAAA,YACnB,GAAG,MAAM,WAAW,OAAO,UAAU,OAAO,KAAK;AAAA,YACjD,EAAE,aAAa,KAAK;AAAA,UACtB;AACA,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,YAAY;AAAA,cACZ,eAAa;AAAA,cACb,YAAY,cAAc,OAAO;AAAA,cACjC;AAAA,cACA,OAAO,OAAO;AAAA,cAEb,iBAAO,QAAQ,OAAO,QAAQ,OAAO;AAAA;AAAA,YAPjC,OAAO;AAAA,UAQd;AAAA,QAEJ;AACA,eAAO;AAAA,MACT,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,qBAAQ;;;ACjJf,IAAOA,sBAAQ;","names":["RadioGroup_default"]}
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  FieldCopyTestIdButton_default
3
- } from "./chunk-BQGN3JTU.js";
3
+ } from "./chunk-NTDKZW4E.js";
4
4
  import {
5
5
  FieldValidationError_default
6
- } from "./chunk-UTFZRBBS.js";
6
+ } from "./chunk-CQWA2DFV.js";
7
7
  import {
8
8
  useController,
9
9
  useFormContext
10
- } from "./chunk-WHW6WMII.js";
10
+ } from "./chunk-OC76RMHG.js";
11
11
 
12
12
  // src/RadioTabs/RadioTabs.tsx
13
13
  import { RadioGroup as HeroRadioGroup } from "@heroui/radio";
@@ -18,7 +18,7 @@ var radioTabsVariants = tv({
18
18
  slots: {
19
19
  base: "group",
20
20
  // Needs group for group-data condition
21
- label: "text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger",
21
+ label: "text-foreground group-data-[invalid=true]:text-danger text-sm subpixel-antialiased",
22
22
  wrapper: "",
23
23
  tabList: "",
24
24
  tab: "",
@@ -45,38 +45,40 @@ var RadioTabs = ({
45
45
  const showLabel = label || showTestIdCopyButton;
46
46
  const variants = radioTabsVariants();
47
47
  const classNames = variantsToClassNames(variants, className, "base");
48
- const tabOptions = options.map((option) => ({
49
- content: option == null ? void 0 : option.content,
50
- disabled: option == null ? void 0 : option.disabled,
51
- key: option.value,
52
- label: (option == null ? void 0 : option.label) || (option == null ? void 0 : option.value),
53
- testId: slugify(`option_${(option == null ? void 0 : option.testId) || (option == null ? void 0 : option.value)}`, {
54
- replaceDots: true
55
- })
56
- }));
57
- const disabledAllKeys = tabOptions == null ? void 0 : tabOptions.map(
58
- (option) => option.key
59
- );
48
+ const tabOptions = options.map((option) => {
49
+ return {
50
+ content: option == null ? void 0 : option.content,
51
+ disabled: option == null ? void 0 : option.disabled,
52
+ key: option.value,
53
+ label: (option == null ? void 0 : option.label) || (option == null ? void 0 : option.value),
54
+ testId: slugify(`option_${(option == null ? void 0 : option.testId) || (option == null ? void 0 : option.value)}`, {
55
+ replaceDots: true
56
+ })
57
+ };
58
+ });
59
+ const disabledAllKeys = tabOptions == null ? void 0 : tabOptions.map((option) => {
60
+ return option.key;
61
+ });
60
62
  return /* @__PURE__ */ jsx(
61
63
  HeroRadioGroup,
62
64
  {
63
65
  classNames,
66
+ ref,
64
67
  "data-invalid": invalid,
65
68
  "data-required": required,
66
69
  "data-testid": testId,
67
- errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error, testId }),
68
70
  isDisabled,
69
71
  isInvalid: invalid,
70
72
  isRequired: required,
73
+ name,
74
+ onBlur,
75
+ orientation: inline ? "horizontal" : "vertical",
76
+ errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error, testId }),
71
77
  label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
72
78
  /* @__PURE__ */ jsxs("label", { children: [
73
79
  label,
74
80
  showTestIdCopyButton && /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
75
81
  ] }),
76
- name,
77
- orientation: inline ? "horizontal" : "vertical",
78
- onBlur,
79
- ref,
80
82
  children: /* @__PURE__ */ jsx(
81
83
  Tabs,
82
84
  {
@@ -101,4 +103,4 @@ export {
101
103
  RadioTabs_default,
102
104
  RadioTabs_default2
103
105
  };
104
- //# sourceMappingURL=chunk-LHB7I6NY.js.map
106
+ //# sourceMappingURL=chunk-5GBO2FHU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/RadioTabs/RadioTabs.tsx","../src/RadioTabs/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { TabsProps } from '@fuf-stack/pixels';\nimport type { TabProps } from '@fuf-stack/pixels/Tabs';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { RadioGroup as HeroRadioGroup } from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\nimport Tabs from '@fuf-stack/pixels/Tabs';\n\nimport { useController, useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const radioTabsVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\n label:\n 'text-foreground group-data-[invalid=true]:text-danger text-sm subpixel-antialiased',\n wrapper: '',\n tabList: '',\n tab: '',\n tabContent: '',\n cursor: '',\n panel: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radioTabsVariants>;\ntype ClassName = TVClassName<typeof radioTabsVariants>;\n\nexport interface RadioTabsOption {\n /** Optional content inside of the tab */\n content?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: React.ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string;\n}\n\nexport interface RadioTabsProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioTabsOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n /** How the RadioTabs should look like. */\n variant?: TabsProps['variant'];\n}\n\n/**\n * RadioTabs component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n * and [HeroUI Tabs](https://www.heroui.com//docs/components/tabs)\n */\nconst RadioTabs = ({\n className = undefined,\n disabled = false,\n inline = false,\n label = undefined,\n name,\n options,\n testId: _testId = undefined,\n variant = undefined,\n}: RadioTabsProps): ReactElement => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const { field } = useController({ control, disabled, name });\n const { disabled: isDisabled, onBlur, onChange, ref, value } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = radioTabsVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const tabOptions = options.map<TabProps>((option) => {\n return {\n content: option?.content,\n disabled: option?.disabled,\n key: option.value,\n label: option?.label || option?.value,\n testId: slugify(`option_${option?.testId || option?.value}`, {\n replaceDots: true,\n }),\n };\n });\n\n const disabledAllKeys: string[] | undefined = tabOptions?.map((option) => {\n return option.key as string;\n });\n\n return (\n <HeroRadioGroup\n classNames={classNames}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n ref={ref}\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n isDisabled={isDisabled}\n isInvalid={invalid}\n isRequired={required}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n label={\n showLabel && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label>\n {label}\n {showTestIdCopyButton && <FieldCopyTestIdButton testId={testId} />}\n </label>\n )\n }\n >\n <Tabs\n disabledKeys={disabled ? disabledAllKeys : undefined}\n fullWidth={false}\n onSelectionChange={onChange}\n // make sure component is controlled\n selectedKey={value ?? ''}\n tabs={tabOptions}\n testId={testId}\n variant={variant}\n />\n </HeroRadioGroup>\n );\n};\n\nexport default RadioTabs;\n","import RadioTabs from './RadioTabs';\n\nexport type { RadioTabsProps } from './RadioTabs';\n\nexport { RadioTabs };\n\nexport default RadioTabs;\n"],"mappings":";;;;;;;;;;;;AAKA,SAAS,cAAc,sBAAsB;AAE7C,SAAS,SAAS,IAAI,4BAA4B;AAClD,OAAO,UAAU;AAmHA,cAKP,YALO;AA7GV,IAAM,oBAAoB,GAAG;AAAA,EAClC,OAAO;AAAA,IACL,MAAM;AAAA;AAAA,IACN,OACE;AAAA,IACF,SAAS;AAAA,IACT,SAAS;AAAA,IACT,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF,CAAC;AA2CD,IAAM,YAAY,CAAC;AAAA,EACjB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,QAAQ,UAAU;AAAA,EAClB,UAAU;AACZ,MAAoC;AAClC,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI,eAAe;AAC7D,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,EAAE,MAAM,IAAI,cAAc,EAAE,SAAS,UAAU,KAAK,CAAC;AAC3D,QAAM,EAAE,UAAU,YAAY,QAAQ,UAAU,KAAK,MAAM,IAAI;AAE/D,QAAM,uBAAuB,cAAc;AAC3C,QAAM,YAAY,SAAS;AAE3B,QAAM,WAAW,kBAAkB;AACnC,QAAM,aAAa,qBAAqB,UAAU,WAAW,MAAM;AAEnE,QAAM,aAAa,QAAQ,IAAc,CAAC,WAAW;AACnD,WAAO;AAAA,MACL,SAAS,iCAAQ;AAAA,MACjB,UAAU,iCAAQ;AAAA,MAClB,KAAK,OAAO;AAAA,MACZ,QAAO,iCAAQ,WAAS,iCAAQ;AAAA,MAChC,QAAQ,QAAQ,WAAU,iCAAQ,YAAU,iCAAQ,MAAK,IAAI;AAAA,QAC3D,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,kBAAwC,yCAAY,IAAI,CAAC,WAAW;AACxE,WAAO,OAAO;AAAA,EAChB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MAGA;AAAA,MACA,gBAAc;AAAA,MACd,iBAAe;AAAA,MACf,eAAa;AAAA,MACb;AAAA,MACA,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,aAAa,SAAS,eAAe;AAAA,MACrC,cACE,SAAS,oBAAC,gCAAqB,OAAc,QAAgB;AAAA,MAE/D,OACE;AAAA,MAEE,qBAAC,WACE;AAAA;AAAA,QACA,wBAAwB,oBAAC,iCAAsB,QAAgB;AAAA,SAClE;AAAA,MAIJ;AAAA,QAAC;AAAA;AAAA,UACC,cAAc,WAAW,kBAAkB;AAAA,UAC3C,WAAW;AAAA,UACX,mBAAmB;AAAA,UAEnB,aAAa,wBAAS;AAAA,UACtB,MAAM;AAAA,UACN;AAAA,UACA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,oBAAQ;;;AC/If,IAAOA,qBAAQ;","names":["RadioTabs_default"]}
@@ -20,7 +20,9 @@ var useInputValueDebounce = ({
20
20
  transform,
21
21
  type
22
22
  });
23
- const [displayValue, setDisplayValue] = useState(() => toDisplayValue(value));
23
+ const [displayValue, setDisplayValue] = useState(() => {
24
+ return toDisplayValue(value);
25
+ });
24
26
  const timeoutRef = useRef(null);
25
27
  useEffect(() => {
26
28
  setDisplayValue(toDisplayValue(value));
@@ -76,4 +78,4 @@ var useInputValueDebounce = ({
76
78
  export {
77
79
  useInputValueDebounce
78
80
  };
79
- //# sourceMappingURL=chunk-U5WBLGZV.js.map
81
+ //# sourceMappingURL=chunk-6IU7IYYB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useInputValueDebounce/useInputValueDebounce.ts"],"sourcesContent":["import type { InputValueTransform } from '../useInputValueTransform/useInputValueTransform';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useInputValueTransform } from '../useInputValueTransform/useInputValueTransform';\n\nexport interface UseInputValueDebounceOptions {\n /** Debounce delay in milliseconds (default: 300) */\n debounceDelay?: number;\n /** The onBlur function to call after flushing debounced value */\n onBlur: () => void;\n /** The onChange function to call with debounced value */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (...event: any[]) => void;\n /** Value transformation functions */\n transform?: InputValueTransform;\n /** Input type to handle number conversion (optional) */\n type?: 'text' | 'number' | 'password';\n /** The initial form value */\n value: string | number;\n}\n\nexport interface UseInputValueDebounceReturn {\n /** Enhanced onChange function with debouncing */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (...event: any[]) => void;\n /** Enhanced onBlur function that flushes current value immediately */\n onBlur: () => void;\n /** The field value that is displayed - updates immediately */\n value: string | number;\n}\n\n/**\n * Custom hook for debouncing input value changes with immediate blur support.\n *\n * Provides immediate visual feedback by updating the display value instantly,\n * while debouncing the actual form state changes. When the input loses focus,\n * any pending debounced changes are immediately flushed.\n *\n * **Key Features:**\n * - **Debouncing**: Delays form updates until user stops typing\n * - **Transform support**: Optional value transformation between display and form values\n * - **Number conversion**: Automatic conversion for number inputs\n * - **Immediate display updates**: UI stays responsive during debouncing\n * - **Blur flushing**: Immediately applies pending changes on blur\n *\n * @param options Configuration for debounced value handling\n * @param options.debounceDelay Delay in milliseconds (default: 300)\n * @param options.onBlur Function to call after flushing debounced value\n * @param options.onChange Function to call with debounced value\n * @param options.transform Optional transform functions for display ↔ form value conversion\n * @param options.type Input type for number conversion ('text' | 'number' | 'password')\n * @param options.value The initial form value\n * @returns Object containing enhanced onChange, onBlur, and immediate display value\n *\n * @example\n * Basic usage with debouncing:\n * ```tsx\n * const { onChange, onBlur, value } = useInputValueDebounce({\n * debounceDelay: 300,\n * onBlur: field.onBlur,\n * onChange: field.onChange,\n * value: field.value,\n * });\n * ```\n *\n * @example\n * Number input with automatic conversion:\n * ```tsx\n * const { onChange, onBlur, value } = useInputValueDebounce({\n * debounceDelay: 300,\n * onBlur: field.onBlur,\n * onChange: field.onChange,\n * type: 'number',\n * value: field.value, // Display: 123 (number), Form: 123 (number)\n * });\n * ```\n *\n * @example\n * Currency formatting with transforms:\n * ```tsx\n * const currencyTransform = {\n * displayValue: (val) => val ? `$${Number(val).toFixed(2)}` : '',\n * formValue: (val) => Number(val.replace(/[$,]/g, '')) || 0\n * };\n *\n * const { onChange, onBlur, value } = useInputValueDebounce({\n * debounceDelay: 300,\n * onBlur: field.onBlur,\n * onChange: field.onChange,\n * transform: currencyTransform,\n * value: field.value, // Display: \"$100.00\", Form: 100\n * });\n * ```\n */\nexport const useInputValueDebounce = ({\n debounceDelay = 300,\n onBlur,\n onChange,\n transform,\n type,\n value,\n}: UseInputValueDebounceOptions): UseInputValueDebounceReturn => {\n // Get conversion utilities from transform hook\n const { toDisplayValue, toFormValue } = useInputValueTransform({\n transform,\n type,\n });\n\n // Track display value for synchronous updates\n const [displayValue, setDisplayValue] = useState(() => toDisplayValue(value));\n\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Sync with external value changes\n useEffect(() => {\n setDisplayValue(toDisplayValue(value));\n }, [value, toDisplayValue]);\n\n // Enhanced onChange handler with debouncing\n const handleChange = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (...event: any[]) => {\n // Extract the raw input value\n const rawValue = event[0]?.target?.value ?? event[0];\n\n // For transforms, user input is already in display format\n // For number types, convert strings to numbers for display\n const newDisplayValue = transform ? rawValue : toDisplayValue(rawValue);\n setDisplayValue(newDisplayValue);\n\n // Convert to form value using transform utilities\n const formValue = toFormValue(newDisplayValue);\n\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n const executeOnChange = () => {\n // Preserve event structure if original was an event\n if (event[0]?.target) {\n const convertedEvent = {\n ...event[0],\n target: {\n ...event[0].target,\n value: formValue,\n },\n };\n onChange(convertedEvent, ...event.slice(1));\n } else {\n onChange(formValue);\n }\n };\n\n // Execute immediately or after delay\n if (debounceDelay <= 0) {\n executeOnChange();\n } else {\n timeoutRef.current = setTimeout(executeOnChange, debounceDelay);\n }\n },\n [onChange, debounceDelay, toDisplayValue, toFormValue, transform],\n );\n\n // Enhanced blur handler\n const handleBlur = useCallback(() => {\n // Flush pending changes\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n\n // Get form value from current display value\n const formValue = toFormValue(displayValue);\n onChange(formValue);\n }\n onBlur();\n }, [onChange, onBlur, toFormValue, displayValue]);\n\n return {\n onChange: handleChange,\n onBlur: handleBlur,\n value: displayValue,\n };\n};\n"],"mappings":";;;;;;;;;AAEA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AA6FlD,IAAM,wBAAwB,CAAC;AAAA,EACpC,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAiE;AAE/D,QAAM,EAAE,gBAAgB,YAAY,IAAI,uBAAuB;AAAA,IAC7D;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,MAAM,eAAe,KAAK,CAAC;AAE5E,QAAM,aAAa,OAA8B,IAAI;AAGrD,YAAU,MAAM;AACd,oBAAgB,eAAe,KAAK,CAAC;AAAA,EACvC,GAAG,CAAC,OAAO,cAAc,CAAC;AAG1B,QAAM,eAAe;AAAA;AAAA,IAEnB,IAAI,UAAiB;AA1HzB;AA4HM,YAAM,YAAW,uBAAM,CAAC,MAAP,mBAAU,WAAV,mBAAkB,UAAlB,YAA2B,MAAM,CAAC;AAInD,YAAM,kBAAkB,YAAY,WAAW,eAAe,QAAQ;AACtE,sBAAgB,eAAe;AAG/B,YAAM,YAAY,YAAY,eAAe;AAG7C,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAEA,YAAM,kBAAkB,MAAM;AA3IpC,YAAAA;AA6IQ,aAAIA,MAAA,MAAM,CAAC,MAAP,gBAAAA,IAAU,QAAQ;AACpB,gBAAM,iBAAiB,iCAClB,MAAM,CAAC,IADW;AAAA,YAErB,QAAQ,iCACH,MAAM,CAAC,EAAE,SADN;AAAA,cAEN,OAAO;AAAA,YACT;AAAA,UACF;AACA,mBAAS,gBAAgB,GAAG,MAAM,MAAM,CAAC,CAAC;AAAA,QAC5C,OAAO;AACL,mBAAS,SAAS;AAAA,QACpB;AAAA,MACF;AAGA,UAAI,iBAAiB,GAAG;AACtB,wBAAgB;AAAA,MAClB,OAAO;AACL,mBAAW,UAAU,WAAW,iBAAiB,aAAa;AAAA,MAChE;AAAA,IACF;AAAA,IACA,CAAC,UAAU,eAAe,gBAAgB,aAAa,SAAS;AAAA,EAClE;AAGA,QAAM,aAAa,YAAY,MAAM;AAEnC,QAAI,WAAW,SAAS;AACtB,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU;AAGrB,YAAM,YAAY,YAAY,YAAY;AAC1C,eAAS,SAAS;AAAA,IACpB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,QAAQ,aAAa,YAAY,CAAC;AAEhD,SAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF;","names":["_a"]}
1
+ {"version":3,"sources":["../src/hooks/useInputValueDebounce/useInputValueDebounce.ts"],"sourcesContent":["import type { InputValueTransform } from '../useInputValueTransform/useInputValueTransform';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useInputValueTransform } from '../useInputValueTransform/useInputValueTransform';\n\nexport interface UseInputValueDebounceOptions {\n /** Debounce delay in milliseconds (default: 300) */\n debounceDelay?: number;\n /** The onBlur function to call after flushing debounced value */\n onBlur: () => void;\n /** The onChange function to call with debounced value */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (...event: any[]) => void;\n /** Value transformation functions */\n transform?: InputValueTransform;\n /** Input type to handle number conversion (optional) */\n type?: 'text' | 'number' | 'password';\n /** The initial form value */\n value: string | number;\n}\n\nexport interface UseInputValueDebounceReturn {\n /** Enhanced onChange function with debouncing */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (...event: any[]) => void;\n /** Enhanced onBlur function that flushes current value immediately */\n onBlur: () => void;\n /** The field value that is displayed - updates immediately */\n value: string | number;\n}\n\n/**\n * Custom hook for debouncing input value changes with immediate blur support.\n *\n * Provides immediate visual feedback by updating the display value instantly,\n * while debouncing the actual form state changes. When the input loses focus,\n * any pending debounced changes are immediately flushed.\n *\n * **Key Features:**\n * - **Debouncing**: Delays form updates until user stops typing\n * - **Transform support**: Optional value transformation between display and form values\n * - **Number conversion**: Automatic conversion for number inputs\n * - **Immediate display updates**: UI stays responsive during debouncing\n * - **Blur flushing**: Immediately applies pending changes on blur\n *\n * @param options Configuration for debounced value handling\n * @param options.debounceDelay Delay in milliseconds (default: 300)\n * @param options.onBlur Function to call after flushing debounced value\n * @param options.onChange Function to call with debounced value\n * @param options.transform Optional transform functions for display ↔ form value conversion\n * @param options.type Input type for number conversion ('text' | 'number' | 'password')\n * @param options.value The initial form value\n * @returns Object containing enhanced onChange, onBlur, and immediate display value\n *\n * @example\n * Basic usage with debouncing:\n * ```tsx\n * const { onChange, onBlur, value } = useInputValueDebounce({\n * debounceDelay: 300,\n * onBlur: field.onBlur,\n * onChange: field.onChange,\n * value: field.value,\n * });\n * ```\n *\n * @example\n * Number input with automatic conversion:\n * ```tsx\n * const { onChange, onBlur, value } = useInputValueDebounce({\n * debounceDelay: 300,\n * onBlur: field.onBlur,\n * onChange: field.onChange,\n * type: 'number',\n * value: field.value, // Display: 123 (number), Form: 123 (number)\n * });\n * ```\n *\n * @example\n * Currency formatting with transforms:\n * ```tsx\n * const currencyTransform = {\n * displayValue: (val) => val ? `$${Number(val).toFixed(2)}` : '',\n * formValue: (val) => Number(val.replace(/[$,]/g, '')) || 0\n * };\n *\n * const { onChange, onBlur, value } = useInputValueDebounce({\n * debounceDelay: 300,\n * onBlur: field.onBlur,\n * onChange: field.onChange,\n * transform: currencyTransform,\n * value: field.value, // Display: \"$100.00\", Form: 100\n * });\n * ```\n */\nexport const useInputValueDebounce = ({\n debounceDelay = 300,\n onBlur,\n onChange,\n transform,\n type,\n value,\n}: UseInputValueDebounceOptions): UseInputValueDebounceReturn => {\n // Get conversion utilities from transform hook\n const { toDisplayValue, toFormValue } = useInputValueTransform({\n transform,\n type,\n });\n\n // Track display value for synchronous updates\n const [displayValue, setDisplayValue] = useState(() => {\n return toDisplayValue(value);\n });\n\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Sync with external value changes\n useEffect(() => {\n setDisplayValue(toDisplayValue(value));\n }, [value, toDisplayValue]);\n\n // Enhanced onChange handler with debouncing\n const handleChange = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (...event: any[]) => {\n // Extract the raw input value\n const rawValue = event[0]?.target?.value ?? event[0];\n\n // For transforms, user input is already in display format\n // For number types, convert strings to numbers for display\n const newDisplayValue = transform ? rawValue : toDisplayValue(rawValue);\n setDisplayValue(newDisplayValue);\n\n // Convert to form value using transform utilities\n const formValue = toFormValue(newDisplayValue);\n\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n const executeOnChange = () => {\n // Preserve event structure if original was an event\n if (event[0]?.target) {\n const convertedEvent = {\n ...event[0],\n target: {\n ...event[0].target,\n value: formValue,\n },\n };\n onChange(convertedEvent, ...event.slice(1));\n } else {\n onChange(formValue);\n }\n };\n\n // Execute immediately or after delay\n if (debounceDelay <= 0) {\n executeOnChange();\n } else {\n timeoutRef.current = setTimeout(executeOnChange, debounceDelay);\n }\n },\n [onChange, debounceDelay, toDisplayValue, toFormValue, transform],\n );\n\n // Enhanced blur handler\n const handleBlur = useCallback(() => {\n // Flush pending changes\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n\n // Get form value from current display value\n const formValue = toFormValue(displayValue);\n onChange(formValue);\n }\n onBlur();\n }, [onChange, onBlur, toFormValue, displayValue]);\n\n return {\n onChange: handleChange,\n onBlur: handleBlur,\n value: displayValue,\n };\n};\n"],"mappings":";;;;;;;;;AAEA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AA6FlD,IAAM,wBAAwB,CAAC;AAAA,EACpC,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAiE;AAE/D,QAAM,EAAE,gBAAgB,YAAY,IAAI,uBAAuB;AAAA,IAC7D;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,MAAM;AACrD,WAAO,eAAe,KAAK;AAAA,EAC7B,CAAC;AAED,QAAM,aAAa,OAA8B,IAAI;AAGrD,YAAU,MAAM;AACd,oBAAgB,eAAe,KAAK,CAAC;AAAA,EACvC,GAAG,CAAC,OAAO,cAAc,CAAC;AAG1B,QAAM,eAAe;AAAA;AAAA,IAEnB,IAAI,UAAiB;AA5HzB;AA8HM,YAAM,YAAW,uBAAM,CAAC,MAAP,mBAAU,WAAV,mBAAkB,UAAlB,YAA2B,MAAM,CAAC;AAInD,YAAM,kBAAkB,YAAY,WAAW,eAAe,QAAQ;AACtE,sBAAgB,eAAe;AAG/B,YAAM,YAAY,YAAY,eAAe;AAG7C,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAEA,YAAM,kBAAkB,MAAM;AA7IpC,YAAAA;AA+IQ,aAAIA,MAAA,MAAM,CAAC,MAAP,gBAAAA,IAAU,QAAQ;AACpB,gBAAM,iBAAiB,iCAClB,MAAM,CAAC,IADW;AAAA,YAErB,QAAQ,iCACH,MAAM,CAAC,EAAE,SADN;AAAA,cAEN,OAAO;AAAA,YACT;AAAA,UACF;AACA,mBAAS,gBAAgB,GAAG,MAAM,MAAM,CAAC,CAAC;AAAA,QAC5C,OAAO;AACL,mBAAS,SAAS;AAAA,QACpB;AAAA,MACF;AAGA,UAAI,iBAAiB,GAAG;AACtB,wBAAgB;AAAA,MAClB,OAAO;AACL,mBAAW,UAAU,WAAW,iBAAiB,aAAa;AAAA,MAChE;AAAA,IACF;AAAA,IACA,CAAC,UAAU,eAAe,gBAAgB,aAAa,SAAS;AAAA,EAClE;AAGA,QAAM,aAAa,YAAY,MAAM;AAEnC,QAAI,WAAW,SAAS;AACtB,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU;AAGrB,YAAM,YAAY,YAAY,YAAY;AAC1C,eAAS,SAAS;AAAA,IACpB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,QAAQ,aAAa,YAAY,CAAC;AAEhD,SAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF;","names":["_a"]}