@fuf-stack/uniform 1.0.2 → 1.0.4

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 (144) 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-WHW6WMII.js → chunk-2Q3ZW3QG.js} +66 -55
  42. package/dist/chunk-2Q3ZW3QG.js.map +1 -0
  43. package/dist/{chunk-XKXPFVWS.js → chunk-6G6MFO44.js} +15 -13
  44. package/dist/chunk-6G6MFO44.js.map +1 -0
  45. package/dist/{chunk-U5WBLGZV.js → chunk-6IU7IYYB.js} +4 -2
  46. package/dist/{chunk-U5WBLGZV.js.map → chunk-6IU7IYYB.js.map} +1 -1
  47. package/dist/{chunk-S3FGQTPN.js → chunk-C5E3263F.js} +32 -33
  48. package/dist/chunk-C5E3263F.js.map +1 -0
  49. package/dist/{chunk-XKX22KIM.cjs → chunk-CNSA2WD5.cjs} +4 -4
  50. package/dist/{chunk-XKX22KIM.cjs.map → chunk-CNSA2WD5.cjs.map} +1 -1
  51. package/dist/{chunk-UTFZRBBS.js → chunk-CQWA2DFV.js} +7 -5
  52. package/dist/chunk-CQWA2DFV.js.map +1 -0
  53. package/dist/{chunk-PTOFJKSN.js → chunk-CVZSGNBJ.js} +11 -11
  54. package/dist/{chunk-PTOFJKSN.js.map → chunk-CVZSGNBJ.js.map} +1 -1
  55. package/dist/{chunk-K2IHP7JJ.cjs → chunk-EO7TACW2.cjs} +68 -45
  56. package/dist/chunk-EO7TACW2.cjs.map +1 -0
  57. package/dist/{chunk-E2ZEMRKR.cjs → chunk-EP5CSMUM.cjs} +19 -19
  58. package/dist/{chunk-E2ZEMRKR.cjs.map → chunk-EP5CSMUM.cjs.map} +1 -1
  59. package/dist/{chunk-K7QILQPE.js → chunk-F7IIJ7TU.js} +31 -23
  60. package/dist/chunk-F7IIJ7TU.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-SNXHPF7L.js → chunk-GZKDPAUC.js} +7 -12
  64. package/dist/{chunk-SNXHPF7L.js.map → chunk-GZKDPAUC.js.map} +1 -1
  65. package/dist/{chunk-UHMJOD2X.js → chunk-I3IICXIN.js} +61 -38
  66. package/dist/chunk-I3IICXIN.js.map +1 -0
  67. package/dist/{chunk-XSNA554N.cjs → chunk-KC26PALY.cjs} +12 -12
  68. package/dist/{chunk-XSNA554N.cjs.map → chunk-KC26PALY.cjs.map} +1 -1
  69. package/dist/chunk-KQN55PEW.js +76 -0
  70. package/dist/chunk-KQN55PEW.js.map +1 -0
  71. package/dist/{chunk-H7EXCZKM.cjs → chunk-MAABMY3P.cjs} +71 -60
  72. package/dist/chunk-MAABMY3P.cjs.map +1 -0
  73. package/dist/{chunk-NPRL7X5E.cjs → chunk-N7BZIGW7.cjs} +26 -24
  74. package/dist/chunk-N7BZIGW7.cjs.map +1 -0
  75. package/dist/{chunk-MAJ7IXH4.cjs → chunk-NSYD7L53.cjs} +10 -15
  76. package/dist/chunk-NSYD7L53.cjs.map +1 -0
  77. package/dist/{chunk-BQGN3JTU.js → chunk-NTDKZW4E.js} +4 -4
  78. package/dist/{chunk-BQGN3JTU.js.map → chunk-NTDKZW4E.js.map} +1 -1
  79. package/dist/{chunk-3QCNVEUD.cjs → chunk-O3H3KD5H.cjs} +18 -18
  80. package/dist/chunk-O3H3KD5H.cjs.map +1 -0
  81. package/dist/{chunk-PA2DQCBY.cjs → chunk-OE5BOGGX.cjs} +4 -4
  82. package/dist/{chunk-PA2DQCBY.cjs.map → chunk-OE5BOGGX.cjs.map} +1 -1
  83. package/dist/{chunk-UIBHEN65.js → chunk-OEPBQXUN.js} +16 -16
  84. package/dist/{chunk-UIBHEN65.js.map → chunk-OEPBQXUN.js.map} +1 -1
  85. package/dist/{chunk-LLO7FMR7.js → chunk-PMJXI3V6.js} +15 -15
  86. package/dist/chunk-PMJXI3V6.js.map +1 -0
  87. package/dist/{chunk-YPWUPZOU.js → chunk-RZRWTZV3.js} +9 -9
  88. package/dist/{chunk-YPWUPZOU.js.map → chunk-RZRWTZV3.js.map} +1 -1
  89. package/dist/{chunk-TKQYWIHG.js → chunk-SCFEHH2U.js} +3 -3
  90. package/dist/{chunk-TKQYWIHG.js.map → chunk-SCFEHH2U.js.map} +1 -1
  91. package/dist/{chunk-VTTU37OB.cjs → chunk-UQFNR2ZI.cjs} +34 -35
  92. package/dist/chunk-UQFNR2ZI.cjs.map +1 -0
  93. package/dist/{chunk-LJ2KHIIN.cjs → chunk-V64TRQMV.cjs} +33 -25
  94. package/dist/chunk-V64TRQMV.cjs.map +1 -0
  95. package/dist/{chunk-BLS46GFN.js → chunk-VIJSEE2I.js} +23 -21
  96. package/dist/chunk-VIJSEE2I.js.map +1 -0
  97. package/dist/{chunk-GWJLFB26.cjs → chunk-X4O53MIJ.cjs} +19 -17
  98. package/dist/chunk-X4O53MIJ.cjs.map +1 -0
  99. package/dist/{chunk-LBOF5M7T.cjs → chunk-XHWBXZO5.cjs} +14 -14
  100. package/dist/chunk-XHWBXZO5.cjs.map +1 -0
  101. package/dist/{chunk-GNYQC5IJ.cjs → chunk-Y3AB4GV6.cjs} +7 -5
  102. package/dist/chunk-Y3AB4GV6.cjs.map +1 -0
  103. package/dist/chunk-YGNY6CKU.cjs +76 -0
  104. package/dist/chunk-YGNY6CKU.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 +4 -4
  122. package/dist/chunk-3QCNVEUD.cjs.map +0 -1
  123. package/dist/chunk-57WY5GAE.js +0 -66
  124. package/dist/chunk-57WY5GAE.js.map +0 -1
  125. package/dist/chunk-BLS46GFN.js.map +0 -1
  126. package/dist/chunk-GNYQC5IJ.cjs.map +0 -1
  127. package/dist/chunk-GWJLFB26.cjs.map +0 -1
  128. package/dist/chunk-H7EXCZKM.cjs.map +0 -1
  129. package/dist/chunk-K2IHP7JJ.cjs.map +0 -1
  130. package/dist/chunk-K7QILQPE.js.map +0 -1
  131. package/dist/chunk-L4YPB7MU.cjs +0 -66
  132. package/dist/chunk-L4YPB7MU.cjs.map +0 -1
  133. package/dist/chunk-LBOF5M7T.cjs.map +0 -1
  134. package/dist/chunk-LJ2KHIIN.cjs.map +0 -1
  135. package/dist/chunk-LLO7FMR7.js.map +0 -1
  136. package/dist/chunk-MAJ7IXH4.cjs.map +0 -1
  137. package/dist/chunk-NPRL7X5E.cjs.map +0 -1
  138. package/dist/chunk-OWWUTKGY.cjs.map +0 -1
  139. package/dist/chunk-S3FGQTPN.js.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-VTTU37OB.cjs.map +0 -1
  143. package/dist/chunk-WHW6WMII.js.map +0 -1
  144. package/dist/chunk-XKXPFVWS.js.map +0 -1
@@ -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 _chunkMAABMY3Pcjs = require('./chunk-MAABMY3P.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
+ } = _chunkMAABMY3Pcjs.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
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",
81
- icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBullseye, {}),
82
84
  className: "mr-auto mb-4 ml-auto",
83
- onClick: () => setDebugMode(debugMode === "debug" ? "debug-testids" : "debug"),
85
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _fa6.FaBullseye, {}),
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
+ _chunkMAABMY3Pcjs.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-LJ2KHIIN.cjs.map
160
+ //# sourceMappingURL=chunk-V64TRQMV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-V64TRQMV.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-V64TRQMV.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-2Q3ZW3QG.js";
11
11
 
12
12
  // src/RadioTabs/RadioTabs.tsx
13
13
  import { RadioGroup as HeroRadioGroup } from "@heroui/radio";
@@ -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-BLS46GFN.js.map
106
+ //# sourceMappingURL=chunk-VIJSEE2I.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"]}
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
3
+ var _chunkOE5BOGGXcjs = require('./chunk-OE5BOGGX.cjs');
4
4
 
5
5
 
6
- var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
6
+ var _chunkY3AB4GV6cjs = require('./chunk-Y3AB4GV6.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunkH7EXCZKMcjs = require('./chunk-H7EXCZKM.cjs');
10
+ var _chunkMAABMY3Pcjs = require('./chunk-MAABMY3P.cjs');
11
11
 
12
12
 
13
13
 
@@ -66,14 +66,14 @@ var CheckboxGroup = ({
66
66
  name,
67
67
  testId: _testId = void 0
68
68
  }) => {
69
- const { control, debugMode, getFieldState } = _chunkH7EXCZKMcjs.useFormContext.call(void 0, );
69
+ const { control, debugMode, getFieldState } = _chunkMAABMY3Pcjs.useFormContext.call(void 0, );
70
70
  const {
71
71
  error: _error,
72
72
  invalid,
73
73
  required,
74
74
  testId
75
75
  } = getFieldState(name, _testId);
76
- const { field } = _chunkH7EXCZKMcjs.useController.call(void 0, { control, name, disabled });
76
+ const { field } = _chunkMAABMY3Pcjs.useController.call(void 0, { control, name, disabled });
77
77
  const { onChange, value = [], ref, onBlur } = field;
78
78
  const showTestIdCopyButton = debugMode === "debug-testids";
79
79
  const showLabel = label || showTestIdCopyButton;
@@ -104,7 +104,9 @@ var CheckboxGroup = ({
104
104
  };
105
105
  const singleCheckboxProps = {
106
106
  value: getCheckboxValue(value),
107
- onChange: (newValue) => onChange(newValue == null ? void 0 : newValue[0])
107
+ onChange: (newValue) => {
108
+ onChange(newValue == null ? void 0 : newValue[0]);
109
+ }
108
110
  };
109
111
  const multipleCheckboxProps = {
110
112
  onChange,
@@ -118,25 +120,25 @@ var CheckboxGroup = ({
118
120
  color: color === "info" ? "primary" : color,
119
121
  "data-invalid": invalid,
120
122
  "data-testid": testId,
123
+ isDisabled: disabled,
124
+ isInvalid: invalid,
125
+ isRequired: required,
126
+ name,
127
+ onBlur,
128
+ orientation: inline ? "horizontal" : "vertical",
121
129
  errorMessage: errorFlat.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
122
- _chunkGNYQC5IJcjs.FieldValidationError_default,
130
+ _chunkY3AB4GV6cjs.FieldValidationError_default,
123
131
  {
124
132
  className: classNames.errorMessage,
125
133
  error: errorFlat,
126
134
  testId
127
135
  }
128
136
  ),
129
- isDisabled: disabled,
130
- isInvalid: invalid,
131
- isRequired: required,
132
137
  label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
133
138
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
134
139
  label,
135
- showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default, { testId })
140
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5BOGGXcjs.FieldCopyTestIdButton_default, { testId })
136
141
  ] }),
137
- name,
138
- onBlur,
139
- orientation: inline ? "horizontal" : "vertical",
140
142
  ref
141
143
  }, checkboxGroupProps), {
142
144
  children: options == null ? void 0 : options.map((option) => {
@@ -150,7 +152,7 @@ var CheckboxGroup = ({
150
152
  if (hasSubline) {
151
153
  labelContent = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex grow flex-col items-start", children: [
152
154
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: classNames.optionLabel, children: option.label }),
153
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `${classNames.optionLabelSubline}`, children: option.labelSubline })
155
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: classNames.optionLabelSubline, children: option.labelSubline })
154
156
  ] });
155
157
  optionClassNames = _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, optionClassNames), { label: "" });
156
158
  } else {
@@ -159,12 +161,12 @@ var CheckboxGroup = ({
159
161
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
160
162
  _checkbox.Checkbox,
161
163
  {
162
- "aria-label": typeof option.label === "string" ? option.label : option.value,
163
164
  classNames: optionClassNames,
164
165
  "data-invalid": invalid,
165
166
  "data-testid": optionTestId,
166
167
  isDisabled: disabled || option.disabled,
167
168
  value: option == null ? void 0 : option.value,
169
+ "aria-label": typeof option.label === "string" ? option.label : option.value,
168
170
  children: labelContent
169
171
  },
170
172
  `index_${option.value}`
@@ -182,4 +184,4 @@ var CheckboxGroup_default2 = CheckboxGroup_default;
182
184
 
183
185
 
184
186
  exports.CheckboxGroup_default = CheckboxGroup_default; exports.CheckboxGroup_default2 = CheckboxGroup_default2;
185
- //# sourceMappingURL=chunk-GWJLFB26.cjs.map
187
+ //# sourceMappingURL=chunk-X4O53MIJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-X4O53MIJ.cjs","../src/CheckboxGroup/CheckboxGroup.tsx","../src/CheckboxGroup/index.ts"],"names":["CheckboxGroup_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-X4O53MIJ.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactNode } from 'react';\nimport type { FieldError } from 'react-hook-form';\n\nimport {\n Checkbox as HeroCheckbox,\n CheckboxGroup as HeroCheckboxGroup,\n} from '@heroui/checkbox';\nimport { checkbox as heroCheckboxVariants } from '@heroui/theme';\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 checkboxGroupVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\n errorMessage: 'text-tiny',\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 optionBase: '',\n optionIcon: '',\n optionLabel: '',\n optionLabelSubline: '!text-small text-foreground-400',\n optionWrapper: '',\n wrapper: '',\n },\n variants: {\n // see: https://github.com/heroui-inc/heroui/blob/canary/packages/core/theme/src/components/checkbox.ts\n color: {\n info: {\n wrapper:\n 'text-info-foreground after:bg-info after:text-info-foreground',\n },\n ...heroCheckboxVariants.variants.color,\n } as const,\n lineThrough: {\n true: {\n optionLabel: [\n ...heroCheckboxVariants.variants.lineThrough.true.label,\n // fix stroke position when used with subline and enable animation\n 'relative before:transition-all before:duration-200',\n ],\n optionLabelSubline: 'group-data-[selected=true]:opacity-60',\n },\n },\n },\n});\n\ntype VariantProps = TVProps<typeof checkboxGroupVariants>;\ntype ClassName = TVClassName<typeof checkboxGroupVariants>;\n\nexport interface CheckboxGroupOption {\n /** option label */\n label?: ReactNode;\n /** subline displayed below the label */\n labelSubline?: ReactNode;\n /** option value */\n value: string;\n /** disables the option */\n disabled?: boolean;\n /** HTML data-testid attribute of the option */\n testId?: string;\n}\n\nexport interface CheckboxGroupProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** Color scheme of the checkboxes */\n color?: VariantProps['color'];\n /** Sets all checkboxes disabled */\n disabled?: boolean;\n /** Orientation of the checkboxes */\n inline?: boolean;\n /** Label displayed above the checkboxes */\n label?: ReactNode;\n /** Whether the checkboxes label should be crossed out */\n lineThrough?: boolean;\n /** Name the Field is registered on the form */\n name: string;\n /** Checkboxes that should be displayed. */\n options: CheckboxGroupOption[];\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * CheckboxGroup component based on [HeroUI CheckboxGroup](https://www.heroui.com//docs/components/checkbox-group)\n */\nconst CheckboxGroup = ({\n className = undefined,\n color = 'primary',\n inline = false,\n label = undefined,\n lineThrough = false,\n options,\n disabled = false,\n name,\n testId: _testId = undefined,\n}: CheckboxGroupProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const {\n error: _error,\n invalid,\n required,\n testId,\n } = getFieldState(name, _testId);\n\n const { field } = useController({ control, name, disabled });\n const { onChange, value = [], ref, onBlur } = field;\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = checkboxGroupVariants({ lineThrough });\n const classNames = variantsToClassNames(variants, className, 'base');\n\n // map slots to HeroUI class names\n const heroCheckboxGroupClassNames = {\n base: classNames.base,\n label: classNames.label,\n wrapper: classNames.wrapper,\n };\n const heroCheckboxClassNames = {\n base: classNames.optionBase,\n icon: classNames.optionIcon,\n label: classNames.optionLabel,\n wrapper: classNames.optionWrapper,\n };\n\n // Convert React Hook Form's nested error object structure to a flat array\n // RHF errors can be nested like: checkboxField.0 (individual checkbox errors)\n // and checkboxField._error (global field errors) - this flattens all\n // error values into a single array for rendering with FieldValidationError\n const errorFlat: FieldError[] =\n (_error &&\n Object.values(\n _error as unknown as Record<string, FieldError[]>,\n ).flat()) ||\n [];\n\n /**\n * Handles the checkbox group value changes based on the number of options:\n * 1. For single checkbox (options.length === 1):\n * - Converts undefined/empty array to [] for consistent controlled behavior\n * - Extracts single value from array for onChange\n *\n * Example: undefined → []\n * [value] → value\n *\n * 2. For multiple checkboxes:\n * - Uses raw value array with fallback to empty array\n * - Passes through onChange directly\n *\n * Example: undefined → []\n * ['value1', 'value2'] → ['value1', 'value2']\n */\n const getCheckboxValue = (inputValue: unknown): string[] => {\n if (Array.isArray(inputValue)) {\n return inputValue;\n }\n if (inputValue) {\n return [inputValue as string];\n }\n return [];\n };\n\n const singleCheckboxProps = {\n value: getCheckboxValue(value),\n onChange: (newValue: string[]) => {\n onChange(newValue?.[0]);\n },\n };\n\n const multipleCheckboxProps = {\n onChange,\n value: getCheckboxValue(value),\n };\n\n const checkboxGroupProps =\n options.length === 1 ? singleCheckboxProps : multipleCheckboxProps;\n\n return (\n <HeroCheckboxGroup\n classNames={heroCheckboxGroupClassNames}\n color={color === 'info' ? 'primary' : color}\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-testid={testId}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n errorMessage={\n errorFlat.length > 0 && (\n <FieldValidationError\n className={classNames.errorMessage}\n error={errorFlat}\n testId={testId}\n />\n )\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 ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...checkboxGroupProps}\n >\n {options?.map((option) => {\n const optionTestId = slugify(\n `${testId}_option_${option?.testId || option?.value}`,\n { replaceDots: true },\n );\n\n // set content and classes depending option has subline\n const hasSubline = !!option.labelSubline;\n let labelContent: ReactNode;\n let optionClassNames = heroCheckboxClassNames;\n if (hasSubline) {\n labelContent = (\n <div className=\"flex grow flex-col items-start\">\n <span className={classNames.optionLabel}>{option.label}</span>\n <span className={classNames.optionLabelSubline}>\n {option.labelSubline}\n </span>\n </div>\n );\n // remove label classes from outer label when subline is used\n optionClassNames = { ...optionClassNames, label: '' };\n } else {\n labelContent = option.label;\n }\n\n return (\n <HeroCheckbox\n key={`index_${option.value}`}\n classNames={optionClassNames}\n data-invalid={invalid}\n data-testid={optionTestId}\n isDisabled={disabled || option.disabled}\n value={option?.value}\n aria-label={\n typeof option.label === 'string' ? option.label : option.value\n }\n >\n {labelContent}\n </HeroCheckbox>\n );\n })}\n </HeroCheckboxGroup>\n );\n};\n\nexport default CheckboxGroup;\n","import CheckboxGroup from './CheckboxGroup';\n\nexport type { CheckboxGroupProps, CheckboxGroupOption } from './CheckboxGroup';\n\nexport { CheckboxGroup };\n\nexport default CheckboxGroup;\n"]}
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
3
+ var _chunkOE5BOGGXcjs = require('./chunk-OE5BOGGX.cjs');
4
4
 
5
5
 
6
- var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
6
+ var _chunkY3AB4GV6cjs = require('./chunk-Y3AB4GV6.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunkH7EXCZKMcjs = require('./chunk-H7EXCZKM.cjs');
10
+ var _chunkMAABMY3Pcjs = require('./chunk-MAABMY3P.cjs');
11
11
 
12
12
 
13
13
 
@@ -56,8 +56,8 @@ var RadioBox = (_a) => {
56
56
  _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getLabelWrapperProps()), {
57
57
  className: _pixelutils.cn.call(void 0, getLabelWrapperProps().className, "grow"),
58
58
  children: [
59
- children && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getLabelProps()), { children })),
60
- description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-small text-foreground opacity-70", children: description })
59
+ children ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", _chunk555JRYCScjs.__spreadProps.call(void 0, _chunk555JRYCScjs.__spreadValues.call(void 0, {}, getLabelProps()), { children })) : null,
60
+ description ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-small text-foreground opacity-70", children: description }) : null
61
61
  ]
62
62
  })
63
63
  )
@@ -94,9 +94,9 @@ var RadioBoxes = ({
94
94
  options,
95
95
  testId: _testId = void 0
96
96
  }) => {
97
- const { control, debugMode, getFieldState, getValues } = _chunkH7EXCZKMcjs.useFormContext.call(void 0, );
97
+ const { control, debugMode, getFieldState, getValues } = _chunkMAABMY3Pcjs.useFormContext.call(void 0, );
98
98
  const { error, invalid, required, testId } = getFieldState(name, _testId);
99
- const { field } = _chunkH7EXCZKMcjs.useController.call(void 0, { control, disabled, name });
99
+ const { field } = _chunkMAABMY3Pcjs.useController.call(void 0, { control, disabled, name });
100
100
  const { onChange, disabled: isDisabled, onBlur, ref } = field;
101
101
  const showTestIdCopyButton = debugMode === "debug-testids";
102
102
  const showLabel = label || showTestIdCopyButton;
@@ -114,23 +114,23 @@ var RadioBoxes = ({
114
114
  _radio.RadioGroup,
115
115
  {
116
116
  classNames,
117
+ ref,
117
118
  "data-invalid": invalid,
118
119
  "data-required": required,
119
120
  "data-testid": testId,
120
121
  defaultValue: getValues()[name],
121
- errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGNYQC5IJcjs.FieldValidationError_default, { error, testId }),
122
122
  isDisabled,
123
123
  isInvalid: invalid,
124
124
  isRequired: required,
125
+ name,
126
+ onBlur,
127
+ orientation: inline ? "horizontal" : "vertical",
128
+ errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY3AB4GV6cjs.FieldValidationError_default, { error, testId }),
125
129
  label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
126
130
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
127
131
  label,
128
- showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default, { testId })
132
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5BOGGXcjs.FieldCopyTestIdButton_default, { testId })
129
133
  ] }),
130
- name,
131
- orientation: inline ? "horizontal" : "vertical",
132
- onBlur,
133
- ref,
134
134
  children: options.map((option) => {
135
135
  if ("value" in option) {
136
136
  const optionTestId = _pixelutils.slugify.call(void 0,
@@ -166,4 +166,4 @@ var RadioBoxes_default2 = RadioBoxes_default;
166
166
 
167
167
 
168
168
  exports.RadioBoxes_default = RadioBoxes_default; exports.RadioBoxes_default2 = RadioBoxes_default2;
169
- //# sourceMappingURL=chunk-LBOF5M7T.cjs.map
169
+ //# sourceMappingURL=chunk-XHWBXZO5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-XHWBXZO5.cjs","../src/RadioBoxes/RadioBoxes.tsx","../src/RadioBoxes/RadioBox.tsx","../src/RadioBoxes/index.ts"],"names":["jsx","jsxs","RadioBoxes_default"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACbA,sCAA6C;AAE7C,oDAAkD;ADclD;AACA;AEjBA;AACA,6DAA+B;AAE/B;AAkCQ,+CAAA;AA3BD,IAAM,SAAA,EAAW,CAAC,EAAA,EAAA,GAA+C;AAA/C,EAAA,IAAA,GAAA,EAAA,EAAA,EAAE,EAAA,KAAA,EAAO,KAAA,EAblC,EAAA,EAayB,EAAA,EAAuB,MAAA,EAAA,yCAAA,EAAvB,EAAuB,CAArB,MAAA,CAAA,CAAA;AACzB,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,EACF,EAAA,EAAI,6BAAA,KAAc,CAAA;AAElB,EAAA,uBACE,8BAAA;AAAA,IAAC,SAAA;AAAA,IAAA,6CAAA,8CAAA,CAAA,CAAA,EACK,YAAA,CAAa,CAAA,CAAA,EADlB;AAAA,MAEC,SAAA,EAAW,4BAAA;AAAA,QACT,0KAAA;AAAA,QACA;AAAA;AAAA,UAEE,sCAAA,EAAwC;AAAA,QAC1C;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,6BAAA,8BAAC,EAAA,EAEC,QAAA,kBAAA,6BAAA,OAAC,EAAA,8CAAA,CAAA,CAAA,EAAU,aAAA,CAAc,CAAA,CAAG,EAAA,CAC9B,CAAA;AAAA,wBAEA,6BAAA,MAAC,EAAA,6CAAA,8CAAA,CAAA,CAAA,EAAS,eAAA,CAAgB,CAAA,CAAA,EAAzB,EAEC,QAAA,kBAAA,6BAAA,MAAC,EAAA,8CAAA,CAAA,CAAA,EAAS,eAAA,CAAgB,CAAA,CAAG,EAAA,CAAA,CAC/B,CAAA;AAAA,QACC,IAAA;AAAA,wBACD,8BAAA;AAAA,UAAC,KAAA;AAAA,UAAA,6CAAA,8CAAA,CAAA,CAAA,EACK,oBAAA,CAAqB,CAAA,CAAA,EAD1B;AAAA,YAEC,SAAA,EAAW,4BAAA,oBAAG,CAAqB,CAAA,CAAE,SAAA,EAAW,MAAM,CAAA;AAAA,YAGrD,QAAA,EAAA;AAAA,cAAA,SAAA,kBAAW,6BAAA,MAAC,EAAA,6CAAA,8CAAA,CAAA,CAAA,EAAS,aAAA,CAAc,CAAA,CAAA,EAAvB,EAA2B,SAAA,CAAA,CAAS,EAAA,EAAU,IAAA;AAAA,cAC1D,YAAA,kBACC,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA,YAAA,CACH,EAAA,EACE;AAAA,YAAA;AAAA,UAAA,CAAA;AAAA,QACN;AAAA,MAAA;AAAA,IAAA,CAAA;AAAA,EACF,CAAA;AAEJ,CAAA;AFKA;AACA;ACgDiB;AAxGV,IAAM,mBAAA,EAAqB,4BAAA;AAAG,EACnC,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,WAAA,EAAa,8CAAA;AAAA,IACb,eAAA,EAAiB,EAAA;AAAA,IACjB,SAAA,EAAW,SAAA;AAAA,IACX,gBAAA,EAAkB,EAAA;AAAA,IAClB,WAAA,EACE,+HAAA;AAAA;AAAA;AAAA;AAAA,IAGF,KAAA,EACE,oFAAA;AAAA,IACF,OAAA,EAAS;AAAA,EACX;AACF,CAAC,CAAA;AAwCD,IAAM,WAAA,EAAa,CAAC;AAAA,EAClB,UAAA,EAAY,KAAA,CAAA;AAAA,EACZ,SAAA,EAAW,KAAA;AAAA,EACX,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,KAAA,CAAA;AAAA,EACR,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,EAAQ,QAAA,EAAU,KAAA;AACpB,CAAA,EAAA,GAAqC;AACnC,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,aAAA,EAAe,UAAU,EAAA,EAAI,8CAAA,CAAe;AAExE,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,OAAO,EAAA,EAAI,aAAA,CAAc,IAAA,EAAM,OAAO,CAAA;AAExE,EAAA,MAAM,EAAE,MAAM,EAAA,EAAI,6CAAA,EAAgB,OAAA,EAAS,QAAA,EAAU,KAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,UAAA,EAAY,MAAA,EAAQ,IAAI,EAAA,EAAI,KAAA;AAExD,EAAA,MAAM,qBAAA,EAAuB,UAAA,IAAc,eAAA;AAC3C,EAAA,MAAM,UAAA,EAAY,MAAA,GAAS,oBAAA;AAE3B,EAAA,MAAM,SAAA,EAAW,kBAAA,CAAmB,CAAA;AACpC,EAAA,MAAM,WAAA,EAAa,8CAAA,QAAqB,EAAU,SAAA,EAAW,MAAM,CAAA;AAEnE,EAAA,MAAM,eAAA,EAAiB;AAAA,IACrB,IAAA,EAAM,UAAA,CAAW,QAAA;AAAA,IACjB,OAAA,EAAS,UAAA,CAAW,WAAA;AAAA,IACpB,WAAA,EAAa,UAAA,CAAW,eAAA;AAAA,IACxB,KAAA,EAAO,UAAA,CAAW,SAAA;AAAA,IAClB,YAAA,EAAc,UAAA,CAAW,gBAAA;AAAA,IACzB,OAAA,EAAS,UAAA,CAAW;AAAA,EACtB,CAAA;AAEA,EAAA,uBACEA,6BAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MAGA,GAAA;AAAA,MACA,cAAA,EAAc,OAAA;AAAA,MACd,eAAA,EAAe,QAAA;AAAA,MACf,aAAA,EAAa,MAAA;AAAA,MACb,YAAA,EAAc,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA;AAAA,MAC9B,UAAA;AAAA,MACA,SAAA,EAAW,OAAA;AAAA,MACX,UAAA,EAAY,QAAA;AAAA,MACZ,IAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAa,OAAA,EAAS,aAAA,EAAe,UAAA;AAAA,MACrC,YAAA,EACE,MAAA,mBAASA,6BAAAA,8CAAC,EAAA,EAAqB,KAAA,EAAc,OAAA,CAAgB,CAAA;AAAA,MAE/D,KAAA,EACE,UAAA;AAAA,sBAEEC,8BAAAA,OAAC,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QACA,qBAAA,mBAAwBD,6BAAAA,+CAAC,EAAA,EAAsB,OAAA,CAAgB;AAAA,MAAA,EAAA,CAClE,CAAA;AAAA,MAIH,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAA,GAAW;AACvB,QAAA,GAAA,CAAI,QAAA,GAAW,MAAA,EAAQ;AACrB,UAAA,MAAM,aAAA,EAAe,iCAAA;AAAA,YACnB,CAAA,EAAA;AACA,YAAA;AACF,UAAA;AACA,UAAA;AACG,YAAA;AAAA,YAAA;AAAA,cAAA;AAEa,cAAA;AACC,cAAA;AACO,cAAA;AACP,cAAA;AACoB,cAAA;AACjC,cAAA;AACc,cAAA;AAEwB,YAAA;AATjC,YAAA;AAUP,UAAA;AAEJ,QAAA;AACA,QAAA;AACD,MAAA;AAAA,IAAA;AACH,EAAA;AAEJ;AAEO;ADKM;AACA;AG3JNE;AH6JM;AACA;AACA;AACA;AACA","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-XHWBXZO5.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { RadioGroup as HeroRadioGroup } 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';\nimport { RadioBox } from './RadioBox';\n\nexport const radioBoxesVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\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 radioBoxesVariants>;\ntype ClassName = TVClassName<typeof radioBoxesVariants>;\n\nexport interface RadioBoxesOption {\n /** Description of the value. Works with variant radioBox. */\n description?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: 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 RadioBoxesProps 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: RadioBoxesOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * RadioBoxes component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst RadioBoxes = ({\n className = undefined,\n disabled = false,\n inline = false,\n label = undefined,\n name,\n options,\n testId: _testId = undefined,\n}: RadioBoxesProps): 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 = radioBoxesVariants();\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 <RadioBox\n key={option.value}\n classNames={itemClassNames}\n data-testid={optionTestId}\n description={option.description}\n icon={option.icon}\n isDisabled={isDisabled || option.disabled}\n onChange={onChange}\n value={option.value}\n >\n {option.label ? option.label : option.value}\n </RadioBox>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default RadioBoxes;\n","import type { RadioProps as HeroRadioProps } from '@heroui/radio';\nimport type { ReactNode } from 'react';\n\nimport { useRadio } from '@heroui/radio';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\n\nimport { cn } from '@fuf-stack/pixel-utils';\n\ninterface RadioProps extends HeroRadioProps {\n /** icon for the option */\n icon?: ReactNode;\n}\n\nexport const RadioBox = ({ icon = undefined, ...props }: RadioProps) => {\n const {\n children,\n Component,\n description,\n getBaseProps,\n getControlProps,\n getInputProps,\n getLabelProps,\n getLabelWrapperProps,\n getWrapperProps,\n isDisabled,\n } = useRadio(props);\n\n return (\n <Component\n {...getBaseProps()}\n className={cn(\n 'group border-default hover:bg-content2 data-[selected=true]:border-focus inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 p-4',\n {\n // disabled styles\n 'opacity-disabled pointer-events-none': isDisabled,\n },\n )}\n >\n <VisuallyHidden>\n {}\n <input {...getInputProps()} />\n </VisuallyHidden>\n {}\n <span {...getWrapperProps()}>\n {}\n <span {...getControlProps()} />\n </span>\n {icon}\n <div\n {...getLabelWrapperProps()}\n className={cn(getLabelWrapperProps().className, 'grow')}\n >\n {}\n {children ? <span {...getLabelProps()}>{children}</span> : null}\n {description ? (\n <span className=\"text-small text-foreground opacity-70\">\n {description}\n </span>\n ) : null}\n </div>\n </Component>\n );\n};\n\nexport default RadioBox;\n","import RadioBoxes from './RadioBoxes';\n\nexport type { RadioBoxesProps } from './RadioBoxes';\n\nexport { RadioBoxes };\n\nexport default RadioBoxes;\n"]}
@@ -16,10 +16,12 @@ var FieldValidationError = ({
16
16
  "aria-label": `Validation errors of field ${testId}`,
17
17
  className,
18
18
  "data-testid": _pixelutils.slugify.call(void 0, `${testId}_error`),
19
- children: errors.map(({ message }, i) => (
20
- // eslint-disable-next-line react/no-array-index-key
21
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: message }) }, `error_${i}`)
22
- ))
19
+ children: errors.map(({ message }, i) => {
20
+ return (
21
+ // eslint-disable-next-line react/no-array-index-key
22
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: message }) }, `error_${i}`)
23
+ );
24
+ })
23
25
  }
24
26
  );
25
27
  };
@@ -32,4 +34,4 @@ var FieldValidationError_default2 = FieldValidationError_default;
32
34
 
33
35
 
34
36
  exports.FieldValidationError_default = FieldValidationError_default; exports.FieldValidationError_default2 = FieldValidationError_default2;
35
- //# sourceMappingURL=chunk-GNYQC5IJ.cjs.map
37
+ //# sourceMappingURL=chunk-Y3AB4GV6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-Y3AB4GV6.cjs","../src/partials/FieldValidationError/FieldValidationError.tsx","../src/partials/FieldValidationError/index.ts"],"names":[],"mappings":"AAAA;ACEA,oDAAwB;AAqCZ,+CAAA;AAvBZ,IAAM,qBAAA,EAAuB,CAAC;AAAA,EAC5B,UAAA,EAAY,KAAA,CAAA;AAAA,EACZ,KAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAiC;AAE/B,EAAA,GAAA,CAAI,CAAC,MAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,KAAK,EAAA,GAAK,CAAC,KAAA,CAAM,MAAA,EAAS;AACrD,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,EAAuB,KAAA,CAAM,OAAA,CAAQ,KAAK,EAAA,EAAI,MAAA,EAAQ,CAAC,KAAK,CAAA;AAElE,EAAA,uBACE,6BAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAA;AAChD,MAAA;AACsC,MAAA;AAEN,MAAA;AAC9B,QAAA;AAAA;AAGI,0BAAA;AACF,QAAA;AAEH,MAAA;AAAA,IAAA;AACH,EAAA;AAEJ;AAEe;ADnB0C;AACA;AEvB1C;AFyB0C;AACA;AACA;AACA;AACA","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-Y3AB4GV6.cjs","sourcesContent":[null,"import type { FieldError } from 'react-hook-form';\n\nimport { slugify } from '@fuf-stack/pixel-utils';\n\nexport interface FieldValidationErrorProps {\n /** CSS class name */\n className?: string;\n /** Field errors */\n error: FieldError | FieldError[];\n /** HTML data-testid attribute used in e2e tests */\n testId: string;\n}\n\n/**\n * Renders a validation error of a field\n */\nconst FieldValidationError = ({\n className = undefined,\n error,\n testId,\n}: FieldValidationErrorProps) => {\n // render nothing when no errors\n if (!error || (Array.isArray(error) && !error.length)) {\n return null;\n }\n\n // get errors as array\n const errors: FieldError[] = Array.isArray(error) ? error : [error];\n\n return (\n <ul\n aria-label={`Validation errors of field ${testId}`}\n className={className}\n data-testid={slugify(`${testId}_error`)}\n >\n {errors.map(({ message }, i) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <li key={`error_${i}`}>\n <div>{message}</div>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default FieldValidationError;\n","import FieldValidationError from './FieldValidationError';\n\nexport type { FieldValidationErrorProps } from './FieldValidationError';\n\nexport { FieldValidationError };\n\nexport default FieldValidationError;\n"]}
@@ -0,0 +1,76 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/helpers/nullishFields/nullishFields.ts
2
+ var nullString = "__NULL__";
3
+ var falseString = "__FALSE__";
4
+ var zeroString = "__ZERO__";
5
+ var fromNullishString = (value) => {
6
+ if (typeof value !== "string") {
7
+ return value;
8
+ }
9
+ switch (value) {
10
+ case nullString:
11
+ return null;
12
+ case falseString:
13
+ return false;
14
+ case zeroString:
15
+ return 0;
16
+ default:
17
+ return value;
18
+ }
19
+ };
20
+ var toNullishString = (value) => {
21
+ if (value === null || value === "") {
22
+ return nullString;
23
+ }
24
+ if (value === false) {
25
+ return falseString;
26
+ }
27
+ if (value === 0) {
28
+ return zeroString;
29
+ }
30
+ return value;
31
+ };
32
+ var toFormFormat = (fields) => {
33
+ const formFormatJson = JSON.stringify(fields, (_, value) => {
34
+ if (Array.isArray(value)) {
35
+ return value.map(toNullishString);
36
+ }
37
+ if (value && typeof value === "object") {
38
+ return Object.fromEntries(
39
+ Object.entries(value).filter(([_key, v]) => {
40
+ return v !== "" && v !== null;
41
+ })
42
+ );
43
+ }
44
+ return value;
45
+ });
46
+ return JSON.parse(formFormatJson);
47
+ };
48
+ var toValidationFormat = (formState) => {
49
+ if (formState === void 0 || formState === null) {
50
+ return formState;
51
+ }
52
+ const validationFormatJson = JSON.stringify(formState, (_, value) => {
53
+ if (Array.isArray(value)) {
54
+ return value.map(fromNullishString);
55
+ }
56
+ if (value && typeof value === "object") {
57
+ return Object.fromEntries(
58
+ Object.entries(value).filter(([_key, v]) => {
59
+ return fromNullishString(v) !== "" && fromNullishString(v) !== null;
60
+ }).map(([k, v]) => {
61
+ return [k, fromNullishString(v)];
62
+ })
63
+ );
64
+ }
65
+ return value;
66
+ });
67
+ return JSON.parse(validationFormatJson);
68
+ };
69
+
70
+
71
+
72
+
73
+
74
+
75
+ exports.fromNullishString = fromNullishString; exports.toNullishString = toNullishString; exports.toFormFormat = toFormFormat; exports.toValidationFormat = toValidationFormat;
76
+ //# sourceMappingURL=chunk-YGNY6CKU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-YGNY6CKU.cjs","../src/helpers/nullishFields/nullishFields.ts"],"names":[],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-YGNY6CKU.cjs","sourcesContent":[null,"/**\n * String markers used to preserve null, false, and 0 values during JSON processing\n */\nconst nullString = '__NULL__';\nconst falseString = '__FALSE__';\nconst zeroString = '__ZERO__';\n\n/**\n * Converts marker strings back to their original values when processing arrays\n */\nexport const fromNullishString = (value: unknown): unknown => {\n if (typeof value !== 'string') {\n return value;\n }\n\n switch (value) {\n case nullString:\n return null;\n case falseString:\n return false;\n case zeroString:\n return 0;\n default:\n return value;\n }\n};\n\n/**\n * Converts null/falsy values to marker strings for JSON processing\n */\nexport const toNullishString = (value: unknown): unknown => {\n if (value === null || value === '') {\n return nullString;\n }\n if (value === false) {\n return falseString;\n }\n if (value === 0) {\n return zeroString;\n }\n return value;\n};\n\n/**\n * Converts field values to a format suitable for forms by:\n * - Converting array values to their string markers to preserve null/falsy values\n * - Removing empty strings and null values from objects\n *\n * This conversion is required because React Hook Form does not support arrays with\n * flat values (string, number, boolean, null). Array fields must contain objects.\n * We work around this by converting array values to string markers.\n *\n * @example\n * const fields = {\n * name: 'John',\n * scores: [0, null, 75, false],\n * contact: {\n * email: '',\n * phone: null,\n * address: '123 Main St'\n * }\n * };\n *\n * // Result:\n * {\n * name: 'John',\n * scores: ['__ZERO__', '__NULL__', 75, '__FALSE__'],\n * contact: {\n * address: '123 Main St'\n * }\n * }\n */\nexport const toFormFormat = (fields: Record<string, unknown>) => {\n const formFormatJson = JSON.stringify(fields, (_, value) => {\n if (Array.isArray(value)) {\n return value.map(toNullishString);\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).filter(([_key, v]) => {\n return v !== '' && v !== null;\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n });\n\n return JSON.parse(formFormatJson) as Record<string, unknown>;\n};\n\n/**\n * Converts form state to a format suitable for validation by:\n * - Converting array string markers (__NULL__, __FALSE__, __ZERO__) back to their original values\n * - Converting _NULL__ to null\n * - Removing fields that contain empty strings, null, or any string markers representing null/empty values\n *\n * @example\n * const formState = {\n * name: 'John',\n * scores: [75, '__ZERO__', '_NULL__', '__FALSE__'],\n * email: null,\n * phone: '__NULL__',\n * contact: {\n * address: '123 Main St',\n * fax: null\n * }\n * };\n *\n * // Result:\n * {\n * name: 'John',\n * scores: [75, 0, null, false],\n * contact: {\n * address: '123 Main St'\n * }\n * }\n */\nexport const toValidationFormat = (\n formState: Record<string, unknown> | null | undefined,\n): Record<string, unknown> | null | undefined => {\n // Handle null or undefined input\n if (formState === undefined || formState === null) {\n return formState;\n }\n\n const validationFormatJson = JSON.stringify(formState, (_, value) => {\n if (Array.isArray(value)) {\n return value.map(fromNullishString);\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([_key, v]) => {\n return fromNullishString(v) !== '' && fromNullishString(v) !== null;\n })\n .map(([k, v]) => {\n return [k, fromNullishString(v)];\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n });\n\n return JSON.parse(validationFormatJson) as Record<string, unknown>;\n};\n"]}
@@ -3,12 +3,12 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkL4YPB7MUcjs = require('../chunk-L4YPB7MU.cjs');
6
+ var _chunkYGNY6CKUcjs = require('../chunk-YGNY6CKU.cjs');
7
7
  require('../chunk-555JRYCS.cjs');
8
8
 
9
9
 
10
10
 
11
11
 
12
12
 
13
- exports.fromNullishString = _chunkL4YPB7MUcjs.fromNullishString; exports.toFormFormat = _chunkL4YPB7MUcjs.toFormFormat; exports.toNullishString = _chunkL4YPB7MUcjs.toNullishString; exports.toValidationFormat = _chunkL4YPB7MUcjs.toValidationFormat;
13
+ exports.fromNullishString = _chunkYGNY6CKUcjs.fromNullishString; exports.toFormFormat = _chunkYGNY6CKUcjs.toFormFormat; exports.toNullishString = _chunkYGNY6CKUcjs.toNullishString; exports.toValidationFormat = _chunkYGNY6CKUcjs.toValidationFormat;
14
14
  //# sourceMappingURL=index.cjs.map