@fuf-stack/uniform 0.18.4 → 0.18.5

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 (118) hide show
  1. package/dist/CheckboxGroup/index.cjs +4 -4
  2. package/dist/CheckboxGroup/index.d.cts +2 -2
  3. package/dist/CheckboxGroup/index.d.ts +2 -2
  4. package/dist/CheckboxGroup/index.js +3 -3
  5. package/dist/FieldArray/index.cjs +4 -4
  6. package/dist/FieldArray/index.js +3 -3
  7. package/dist/{FieldCopyTestIdButton-DnbovhMk.d.cts → FieldCopyTestIdButton-_TDlmw0L.d.cts} +2 -0
  8. package/dist/{FieldCopyTestIdButton-DnbovhMk.d.ts → FieldCopyTestIdButton-_TDlmw0L.d.ts} +2 -0
  9. package/dist/{FieldValidationError-DAT12Ess.d.cts → FieldValidationError-CU_xw0BL.d.cts} +5 -2
  10. package/dist/{FieldValidationError-DAT12Ess.d.ts → FieldValidationError-CU_xw0BL.d.ts} +5 -2
  11. package/dist/Input/index.cjs +4 -4
  12. package/dist/Input/index.js +3 -3
  13. package/dist/RadioBoxes/index.cjs +4 -4
  14. package/dist/RadioBoxes/index.d.cts +2 -2
  15. package/dist/RadioBoxes/index.d.ts +2 -2
  16. package/dist/RadioBoxes/index.js +3 -3
  17. package/dist/RadioGroup/index.cjs +4 -4
  18. package/dist/RadioGroup/index.d.cts +2 -2
  19. package/dist/RadioGroup/index.d.ts +2 -2
  20. package/dist/RadioGroup/index.js +3 -3
  21. package/dist/RadioTabs/index.cjs +4 -4
  22. package/dist/RadioTabs/index.d.cts +2 -2
  23. package/dist/RadioTabs/index.d.ts +2 -2
  24. package/dist/RadioTabs/index.js +3 -3
  25. package/dist/Select/index.cjs +4 -4
  26. package/dist/Select/index.d.cts +2 -2
  27. package/dist/Select/index.d.ts +2 -2
  28. package/dist/Select/index.js +3 -3
  29. package/dist/Switch/index.cjs +4 -4
  30. package/dist/Switch/index.d.cts +2 -2
  31. package/dist/Switch/index.d.ts +2 -2
  32. package/dist/Switch/index.js +3 -3
  33. package/dist/TextArea/index.cjs +4 -4
  34. package/dist/TextArea/index.js +3 -3
  35. package/dist/{chunk-BLAMCAGB.js → chunk-3DWGHDVE.js} +4 -4
  36. package/dist/{chunk-BLAMCAGB.js.map → chunk-3DWGHDVE.js.map} +1 -1
  37. package/dist/{chunk-UOK3TF4G.cjs → chunk-3MPB726A.cjs} +5 -5
  38. package/dist/chunk-3MPB726A.cjs.map +1 -0
  39. package/dist/{chunk-Q6DCHTBA.js → chunk-3WZNMG5K.js} +20 -10
  40. package/dist/chunk-3WZNMG5K.js.map +1 -0
  41. package/dist/{chunk-O3TBUVDW.js → chunk-4HGNEE2R.js} +4 -4
  42. package/dist/{chunk-O3TBUVDW.js.map → chunk-4HGNEE2R.js.map} +1 -1
  43. package/dist/{chunk-3ULE3TIW.js → chunk-737UQZOW.js} +4 -4
  44. package/dist/{chunk-3ULE3TIW.js.map → chunk-737UQZOW.js.map} +1 -1
  45. package/dist/{chunk-2CRY7VDQ.js → chunk-BQGN3JTU.js} +1 -1
  46. package/dist/chunk-BQGN3JTU.js.map +1 -0
  47. package/dist/{chunk-5RFFXDXC.js → chunk-BXZ2SBRA.js} +4 -4
  48. package/dist/chunk-BXZ2SBRA.js.map +1 -0
  49. package/dist/{chunk-C5ZRTXUD.cjs → chunk-DXMJHNP3.cjs} +5 -5
  50. package/dist/{chunk-C5ZRTXUD.cjs.map → chunk-DXMJHNP3.cjs.map} +1 -1
  51. package/dist/{chunk-5NRHHIFP.js → chunk-EAEW6SOJ.js} +4 -4
  52. package/dist/{chunk-5NRHHIFP.js.map → chunk-EAEW6SOJ.js.map} +1 -1
  53. package/dist/{chunk-OE5IW4ZG.cjs → chunk-GNYQC5IJ.cjs} +8 -17
  54. package/dist/chunk-GNYQC5IJ.cjs.map +1 -0
  55. package/dist/{chunk-FNY55CAR.js → chunk-HHENF3BD.js} +6 -5
  56. package/dist/chunk-HHENF3BD.js.map +1 -0
  57. package/dist/{chunk-VZC5LLW4.cjs → chunk-JH4CPQHA.cjs} +5 -5
  58. package/dist/chunk-JH4CPQHA.cjs.map +1 -0
  59. package/dist/{chunk-MKFKX5QX.cjs → chunk-JHVW42BW.cjs} +5 -5
  60. package/dist/chunk-JHVW42BW.cjs.map +1 -0
  61. package/dist/{chunk-QXD6XP3Y.js → chunk-JS2D6XPO.js} +4 -4
  62. package/dist/{chunk-QXD6XP3Y.js.map → chunk-JS2D6XPO.js.map} +1 -1
  63. package/dist/{chunk-JU5RT22Y.cjs → chunk-PA2DQCBY.cjs} +1 -1
  64. package/dist/chunk-PA2DQCBY.cjs.map +1 -0
  65. package/dist/{chunk-ZFJ5NEHU.cjs → chunk-QX652SHY.cjs} +5 -5
  66. package/dist/chunk-QX652SHY.cjs.map +1 -0
  67. package/dist/{chunk-WI6FEFKD.cjs → chunk-R4GZXQFD.cjs} +8 -7
  68. package/dist/chunk-R4GZXQFD.cjs.map +1 -0
  69. package/dist/{chunk-FAXFHN7Z.cjs → chunk-SCTQXWRU.cjs} +22 -12
  70. package/dist/chunk-SCTQXWRU.cjs.map +1 -0
  71. package/dist/{chunk-ASPOGQPS.js → chunk-UTFZRBBS.js} +8 -17
  72. package/dist/chunk-UTFZRBBS.js.map +1 -0
  73. package/dist/{chunk-TONXQKTY.cjs → chunk-WD4ES4JK.cjs} +5 -5
  74. package/dist/chunk-WD4ES4JK.cjs.map +1 -0
  75. package/dist/{chunk-XL3FJ3VX.js → chunk-YLLUYAY3.js} +4 -4
  76. package/dist/{chunk-XL3FJ3VX.js.map → chunk-YLLUYAY3.js.map} +1 -1
  77. package/dist/{chunk-2DJMYFRZ.cjs → chunk-ZPNMTMGE.cjs} +5 -5
  78. package/dist/chunk-ZPNMTMGE.cjs.map +1 -0
  79. package/dist/index.cjs +12 -12
  80. package/dist/index.d.cts +8 -8
  81. package/dist/index.d.ts +8 -8
  82. package/dist/index.js +13 -13
  83. package/dist/partials/FieldCopyTestIdButton/index.cjs +2 -2
  84. package/dist/partials/FieldCopyTestIdButton/index.d.cts +2 -2
  85. package/dist/partials/FieldCopyTestIdButton/index.d.ts +2 -2
  86. package/dist/partials/FieldCopyTestIdButton/index.js +1 -1
  87. package/dist/partials/FieldValidationError/index.cjs +2 -2
  88. package/dist/partials/FieldValidationError/index.d.cts +2 -2
  89. package/dist/partials/FieldValidationError/index.d.ts +2 -2
  90. package/dist/partials/FieldValidationError/index.js +1 -1
  91. package/package.json +6 -6
  92. package/dist/chunk-2CRY7VDQ.js.map +0 -1
  93. package/dist/chunk-2DJMYFRZ.cjs.map +0 -1
  94. package/dist/chunk-5RFFXDXC.js.map +0 -1
  95. package/dist/chunk-ASPOGQPS.js.map +0 -1
  96. package/dist/chunk-FAXFHN7Z.cjs.map +0 -1
  97. package/dist/chunk-FNY55CAR.js.map +0 -1
  98. package/dist/chunk-JU5RT22Y.cjs.map +0 -1
  99. package/dist/chunk-MKFKX5QX.cjs.map +0 -1
  100. package/dist/chunk-OE5IW4ZG.cjs.map +0 -1
  101. package/dist/chunk-Q6DCHTBA.js.map +0 -1
  102. package/dist/chunk-TONXQKTY.cjs.map +0 -1
  103. package/dist/chunk-UOK3TF4G.cjs.map +0 -1
  104. package/dist/chunk-VZC5LLW4.cjs.map +0 -1
  105. package/dist/chunk-WI6FEFKD.cjs.map +0 -1
  106. package/dist/chunk-ZFJ5NEHU.cjs.map +0 -1
  107. package/dist/{CheckboxGroup-Dh0YW4KV.d.cts → CheckboxGroup-Dq4voRWR.d.cts} +5 -5
  108. package/dist/{CheckboxGroup-Dh0YW4KV.d.ts → CheckboxGroup-Dq4voRWR.d.ts} +5 -5
  109. package/dist/{RadioBoxes-C61IRDCU.d.cts → RadioBoxes-DJ49DctW.d.cts} +5 -5
  110. package/dist/{RadioBoxes-C61IRDCU.d.ts → RadioBoxes-DJ49DctW.d.ts} +5 -5
  111. package/dist/{RadioGroup-C7I27oav.d.cts → RadioGroup-BYfxswoe.d.cts} +5 -5
  112. package/dist/{RadioGroup-C7I27oav.d.ts → RadioGroup-BYfxswoe.d.ts} +5 -5
  113. package/dist/{RadioTabs-CT8PT7ky.d.cts → RadioTabs-BYvYukGt.d.cts} +5 -5
  114. package/dist/{RadioTabs-CT8PT7ky.d.ts → RadioTabs-BYvYukGt.d.ts} +5 -5
  115. package/dist/{Select-JRwrSDew.d.cts → Select-D2Tn4xBh.d.cts} +15 -15
  116. package/dist/{Select-JRwrSDew.d.ts → Select-D2Tn4xBh.d.ts} +15 -15
  117. package/dist/{Switch-CLs964dL.d.cts → Switch-C1H8Kyu7.d.cts} +5 -5
  118. package/dist/{Switch-CLs964dL.d.ts → Switch-C1H8Kyu7.d.ts} +5 -5
@@ -4,30 +4,21 @@ import { jsx } from "react/jsx-runtime";
4
4
  var FieldValidationError = ({
5
5
  className = void 0,
6
6
  error,
7
- testId = void 0
7
+ testId
8
8
  }) => {
9
- if (!error) {
9
+ if (!error || Array.isArray(error) && !error.length) {
10
10
  return null;
11
11
  }
12
- let tmpErrors = [];
13
- if (typeof error === "object" && !(error instanceof Array)) {
14
- const errorObject = error;
15
- Object.keys(error).forEach((key) => {
16
- tmpErrors = [...tmpErrors, ...errorObject[key]];
17
- });
18
- }
19
- const errorArray = JSON.stringify(tmpErrors) !== "[]" ? tmpErrors : error;
20
- const errorStrings = errorArray.map((e) => e.message);
21
- const ariaString = `Error: ${errorStrings.join("\n")}`;
12
+ const errors = Array.isArray(error) ? error : [error];
22
13
  return /* @__PURE__ */ jsx(
23
14
  "ul",
24
15
  {
25
- "data-testid": slugify(testId || errorStrings.join()),
26
- "aria-label": ariaString,
16
+ "aria-label": `Validation errors of field ${testId}`,
27
17
  className,
28
- children: errorStrings.map((errorString, i) => (
18
+ "data-testid": slugify(`${testId}_error`),
19
+ children: errors.map(({ message }, i) => (
29
20
  // eslint-disable-next-line react/no-array-index-key
30
- /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("div", { children: errorString }) }, `error_${i}`)
21
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("div", { children: message }) }, `error_${i}`)
31
22
  ))
32
23
  }
33
24
  );
@@ -41,4 +32,4 @@ export {
41
32
  FieldValidationError_default,
42
33
  FieldValidationError_default2
43
34
  };
44
- //# sourceMappingURL=chunk-ASPOGQPS.js.map
35
+ //# sourceMappingURL=chunk-UTFZRBBS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/partials/FieldValidationError/FieldValidationError.tsx","../src/partials/FieldValidationError/index.ts"],"sourcesContent":["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 // eslint-disable-next-line react/no-array-index-key\n <li key={`error_${i}`}>\n <div>{message}</div>\n </li>\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"],"mappings":";AAEA,SAAS,eAAe;AAoCd;AAtBV,IAAM,uBAAuB,CAAC;AAAA,EAC5B,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAiC;AAE/B,MAAI,CAAC,SAAU,MAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,QAAS;AACrD,WAAO;AAAA,EACT;AAGA,QAAM,SAAuB,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAElE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,8BAA8B,MAAM;AAAA,MAChD;AAAA,MACA,eAAa,QAAQ,GAAG,MAAM,QAAQ;AAAA,MAErC,iBAAO,IAAI,CAAC,EAAE,QAAQ,GAAG;AAAA;AAAA,QAExB,oBAAC,QACC,8BAAC,SAAK,mBAAQ,KADP,SAAS,CAAC,EAEnB;AAAA,OACD;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,+BAAQ;;;ACvCf,IAAOA,gCAAQ;","names":["FieldValidationError_default"]}
@@ -3,10 +3,10 @@
3
3
  var _chunkEPYFZXEIcjs = require('./chunk-EPYFZXEI.cjs');
4
4
 
5
5
 
6
- var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
6
+ var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
7
7
 
8
8
 
9
- var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
9
+ var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
10
10
 
11
11
 
12
12
  var _chunkQQW2FHSCcjs = require('./chunk-QQW2FHSC.cjs');
@@ -71,14 +71,14 @@ var RadioTabs = ({
71
71
  "data-invalid": invalid,
72
72
  "data-required": required,
73
73
  "data-testid": testId,
74
- errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5IW4ZGcjs.FieldValidationError_default, { error }),
74
+ errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGNYQC5IJcjs.FieldValidationError_default, { error, testId }),
75
75
  isDisabled,
76
76
  isInvalid: invalid,
77
77
  isRequired: required,
78
78
  label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
79
79
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
80
80
  label,
81
- showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default, { testId })
81
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default, { testId })
82
82
  ] }),
83
83
  name,
84
84
  orientation: inline ? "horizontal" : "vertical",
@@ -111,4 +111,4 @@ var RadioTabs_default2 = RadioTabs_default;
111
111
 
112
112
 
113
113
  exports.RadioTabs_default = RadioTabs_default; exports.RadioTabs_default2 = RadioTabs_default2;
114
- //# sourceMappingURL=chunk-TONXQKTY.cjs.map
114
+ //# sourceMappingURL=chunk-WD4ES4JK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-WD4ES4JK.cjs","../src/RadioTabs/RadioTabs.tsx","../src/RadioTabs/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-WD4ES4JK.cjs","sourcesContent":[null,"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 { Controller } from '../Controller';\nimport { 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-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\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 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 content: option?.content,\n disabled: option?.disabled,\n label: option?.label || option?.value,\n testId: slugify(`option_${option?.testId || option?.value}`),\n key: option.value,\n }));\n\n const disabledAllKeys: string[] | undefined = tabOptions?.map(\n (option) => option.key as string,\n );\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={name}\n render={({\n field: { disabled: isDisabled, onBlur, onChange, ref, value },\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 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 && (\n <FieldCopyTestIdButton testId={testId} />\n )}\n </label>\n )\n }\n name={name}\n orientation={inline ? 'horizontal' : 'vertical'}\n onBlur={onBlur}\n ref={ref}\n >\n <Tabs\n disabledKeys={disabled ? disabledAllKeys : undefined}\n fullWidth={false}\n onSelectionChange={onChange}\n selectedKey={value}\n tabs={tabOptions as TabProps[]}\n testId={testId}\n variant={variant}\n />\n </HeroRadioGroup>\n );\n }}\n />\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"]}
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-AT2VVPRD.js";
4
4
  import {
5
5
  FieldCopyTestIdButton_default
6
- } from "./chunk-2CRY7VDQ.js";
6
+ } from "./chunk-BQGN3JTU.js";
7
7
  import {
8
8
  FieldValidationError_default
9
- } from "./chunk-ASPOGQPS.js";
9
+ } from "./chunk-UTFZRBBS.js";
10
10
  import {
11
11
  useFormContext
12
12
  } from "./chunk-NBAVP4ER.js";
@@ -47,7 +47,7 @@ var TextArea = ({
47
47
  inputWrapper: "group-data-[focus=true]:border-focus"
48
48
  },
49
49
  "data-testid": testId,
50
- errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error }),
50
+ errorMessage: error && /* @__PURE__ */ jsx(FieldValidationError_default, { error, testId }),
51
51
  isDisabled,
52
52
  isRequired: required,
53
53
  isInvalid: invalid,
@@ -79,4 +79,4 @@ export {
79
79
  TextArea_default,
80
80
  TextArea_default2
81
81
  };
82
- //# sourceMappingURL=chunk-XL3FJ3VX.js.map
82
+ //# sourceMappingURL=chunk-YLLUYAY3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/TextArea/TextArea.tsx","../src/TextArea/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Textarea as HeroTextArea } from '@heroui/input';\n\nimport { cn } from '@fuf-stack/pixel-utils';\n\nimport { Controller } from '../Controller';\nimport { useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport interface TextAreaProps {\n /** Child components. The content of the textarea. */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** Determines if the TextArea is disabled or not. */\n disabled?: boolean;\n /** Label displayed above the TextArea. */\n label?: ReactNode;\n /** Name the TextArea is registered at in HTML forms (react-hook-form). */\n name: string;\n /** placeholder for the textArea content. */\n placeholder?: string;\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * TextArea component based on [HeroUI TextArea](https://www.heroui.com//docs/components/textarea)\n */\nconst TextArea = ({\n children = null,\n className = undefined,\n disabled = false,\n label = undefined,\n name,\n placeholder = ' ',\n testId: _testId = undefined,\n}: TextAreaProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n return (\n <Controller\n control={control}\n name={name}\n disabled={disabled}\n render={({\n field: { disabled: isDisabled, onChange, onBlur, value = '', ref },\n }) => {\n /**\n * Ensures the textarea always has a defined string value to prevent uncontrolled to\n * controlled component warnings:\n *\n * 1. Warning Prevention:\n * - Sets default value to '' in field destructuring\n * - Guarantees the value prop is never undefined/null\n * - Prevents React warning: \"A component is changing from uncontrolled to controlled\"\n *\n * 2. Value Handling:\n * - Converts undefined/null to empty string\n * - Converts non-string values to strings\n * - Maintains existing string values\n *\n * Examples:\n * - undefined → \"\" (prevents uncontrolled warning)\n * - null → \"\" (prevents uncontrolled warning)\n * - \"hello\" → \"hello\" (maintains string value)\n * - 123 → \"123\" (converts to string)\n *\n * Without this handling, the textarea could switch between controlled/uncontrolled\n * states when the form value changes from undefined to defined, causing React warnings\n * and potential rendering issues.\n */\n const displayValue = value?.toString() ?? '';\n\n return (\n <HeroTextArea\n className={cn(className)}\n classNames={{\n inputWrapper: 'group-data-[focus=true]:border-focus',\n }}\n data-testid={testId}\n errorMessage={error && <FieldValidationError error={error} />}\n isDisabled={isDisabled}\n isRequired={required}\n isInvalid={invalid}\n label={\n showLabel && (\n <>\n {label}\n {showTestIdCopyButton && (\n <FieldCopyTestIdButton testId={testId} />\n )}\n </>\n )\n }\n labelPlacement=\"outside\"\n placeholder={placeholder}\n name={name}\n value={displayValue}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n variant=\"bordered\"\n >\n {children}\n </HeroTextArea>\n );\n }}\n />\n );\n};\n\nexport default TextArea;\n","import TextArea from './TextArea';\n\nexport type { TextAreaProps } from './TextArea';\n\nexport { TextArea };\n\nexport default TextArea;\n"],"mappings":";;;;;;;;;;;;;;AAEA,SAAS,YAAY,oBAAoB;AAEzC,SAAS,UAAU;AAmFgB,SAMnB,UANmB,KAMnB,YANmB;AAxDnC,IAAM,WAAW,CAAC;AAAA,EAChB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,QAAQ,UAAU;AACpB,MAAqB;AACnB,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI,eAAe;AAC7D,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,uBAAuB,cAAc;AAC3C,QAAM,YAAY,SAAS;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,QACP,OAAO,EAAE,UAAU,YAAY,UAAU,QAAQ,QAAQ,IAAI,IAAI;AAAA,MACnE,MAAM;AArDZ;AA8EQ,cAAM,gBAAe,oCAAO,eAAP,YAAqB;AAE1C,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,SAAS;AAAA,YACvB,YAAY;AAAA,cACV,cAAc;AAAA,YAChB;AAAA,YACA,eAAa;AAAA,YACb,cAAc,SAAS,oBAAC,gCAAqB,OAAc;AAAA,YAC3D;AAAA,YACA,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,OACE,aACE,iCACG;AAAA;AAAA,cACA,wBACC,oBAAC,iCAAsB,QAAgB;AAAA,eAE3C;AAAA,YAGJ,gBAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAQ;AAAA,YAEP;AAAA;AAAA,QACH;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,mBAAQ;;;AChHf,IAAOA,oBAAQ;","names":["TextArea_default"]}
1
+ {"version":3,"sources":["../src/TextArea/TextArea.tsx","../src/TextArea/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Textarea as HeroTextArea } from '@heroui/input';\n\nimport { cn } from '@fuf-stack/pixel-utils';\n\nimport { Controller } from '../Controller';\nimport { useFormContext } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport interface TextAreaProps {\n /** Child components. The content of the textarea. */\n children?: ReactNode;\n /** CSS class name */\n className?: string;\n /** Determines if the TextArea is disabled or not. */\n disabled?: boolean;\n /** Label displayed above the TextArea. */\n label?: ReactNode;\n /** Name the TextArea is registered at in HTML forms (react-hook-form). */\n name: string;\n /** placeholder for the textArea content. */\n placeholder?: string;\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * TextArea component based on [HeroUI TextArea](https://www.heroui.com//docs/components/textarea)\n */\nconst TextArea = ({\n children = null,\n className = undefined,\n disabled = false,\n label = undefined,\n name,\n placeholder = ' ',\n testId: _testId = undefined,\n}: TextAreaProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, invalid, required, testId } = getFieldState(name, _testId);\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n return (\n <Controller\n control={control}\n name={name}\n disabled={disabled}\n render={({\n field: { disabled: isDisabled, onChange, onBlur, value = '', ref },\n }) => {\n /**\n * Ensures the textarea always has a defined string value to prevent uncontrolled to\n * controlled component warnings:\n *\n * 1. Warning Prevention:\n * - Sets default value to '' in field destructuring\n * - Guarantees the value prop is never undefined/null\n * - Prevents React warning: \"A component is changing from uncontrolled to controlled\"\n *\n * 2. Value Handling:\n * - Converts undefined/null to empty string\n * - Converts non-string values to strings\n * - Maintains existing string values\n *\n * Examples:\n * - undefined → \"\" (prevents uncontrolled warning)\n * - null → \"\" (prevents uncontrolled warning)\n * - \"hello\" → \"hello\" (maintains string value)\n * - 123 → \"123\" (converts to string)\n *\n * Without this handling, the textarea could switch between controlled/uncontrolled\n * states when the form value changes from undefined to defined, causing React warnings\n * and potential rendering issues.\n */\n const displayValue = value?.toString() ?? '';\n\n return (\n <HeroTextArea\n className={cn(className)}\n classNames={{\n inputWrapper: 'group-data-[focus=true]:border-focus',\n }}\n data-testid={testId}\n errorMessage={\n error && <FieldValidationError error={error} testId={testId} />\n }\n isDisabled={isDisabled}\n isRequired={required}\n isInvalid={invalid}\n label={\n showLabel && (\n <>\n {label}\n {showTestIdCopyButton && (\n <FieldCopyTestIdButton testId={testId} />\n )}\n </>\n )\n }\n labelPlacement=\"outside\"\n placeholder={placeholder}\n name={name}\n value={displayValue}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n variant=\"bordered\"\n >\n {children}\n </HeroTextArea>\n );\n }}\n />\n );\n};\n\nexport default TextArea;\n","import TextArea from './TextArea';\n\nexport type { TextAreaProps } from './TextArea';\n\nexport { TextArea };\n\nexport default TextArea;\n"],"mappings":";;;;;;;;;;;;;;AAEA,SAAS,YAAY,oBAAoB;AAEzC,SAAS,UAAU;AAoFI,SAOP,UAPO,KAOP,YAPO;AAzDvB,IAAM,WAAW,CAAC;AAAA,EAChB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,QAAQ,UAAU;AACpB,MAAqB;AACnB,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI,eAAe;AAC7D,QAAM,EAAE,OAAO,SAAS,UAAU,OAAO,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,uBAAuB,cAAc;AAC3C,QAAM,YAAY,SAAS;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,QACP,OAAO,EAAE,UAAU,YAAY,UAAU,QAAQ,QAAQ,IAAI,IAAI;AAAA,MACnE,MAAM;AArDZ;AA8EQ,cAAM,gBAAe,oCAAO,eAAP,YAAqB;AAE1C,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,SAAS;AAAA,YACvB,YAAY;AAAA,cACV,cAAc;AAAA,YAChB;AAAA,YACA,eAAa;AAAA,YACb,cACE,SAAS,oBAAC,gCAAqB,OAAc,QAAgB;AAAA,YAE/D;AAAA,YACA,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,OACE,aACE,iCACG;AAAA;AAAA,cACA,wBACC,oBAAC,iCAAsB,QAAgB;AAAA,eAE3C;AAAA,YAGJ,gBAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAQ;AAAA,YAEP;AAAA;AAAA,QACH;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,mBAAQ;;;AClHf,IAAOA,oBAAQ;","names":["TextArea_default"]}
@@ -3,10 +3,10 @@
3
3
  var _chunkEPYFZXEIcjs = require('./chunk-EPYFZXEI.cjs');
4
4
 
5
5
 
6
- var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
6
+ var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
7
7
 
8
8
 
9
- var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
9
+ var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
10
10
 
11
11
 
12
12
  var _chunkQQW2FHSCcjs = require('./chunk-QQW2FHSC.cjs');
@@ -125,14 +125,14 @@ var RadioBoxes = ({
125
125
  "data-required": required,
126
126
  "data-testid": testId,
127
127
  defaultValue: getValues()[name],
128
- errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5IW4ZGcjs.FieldValidationError_default, { error }),
128
+ errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGNYQC5IJcjs.FieldValidationError_default, { error, testId }),
129
129
  isDisabled,
130
130
  isInvalid: invalid,
131
131
  isRequired: required,
132
132
  label: showLabel && // eslint-disable-next-line jsx-a11y/label-has-associated-control
133
133
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { children: [
134
134
  label,
135
- showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default, { testId })
135
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default, { testId })
136
136
  ] }),
137
137
  name,
138
138
  orientation: inline ? "horizontal" : "vertical",
@@ -174,4 +174,4 @@ var RadioBoxes_default2 = RadioBoxes_default;
174
174
 
175
175
 
176
176
  exports.RadioBoxes_default = RadioBoxes_default; exports.RadioBoxes_default2 = RadioBoxes_default2;
177
- //# sourceMappingURL=chunk-2DJMYFRZ.cjs.map
177
+ //# sourceMappingURL=chunk-ZPNMTMGE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-ZPNMTMGE.cjs","../src/RadioBoxes/RadioBoxes.tsx","../src/RadioBoxes/RadioBox.tsx","../src/RadioBoxes/index.ts"],"names":["jsx","jsxs","RadioBoxes_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-ZPNMTMGE.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 { Controller } from '../Controller';\nimport { 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-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\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 showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = radioBoxesVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={name}\n render={({ field: { onChange, disabled: isDisabled, onBlur, ref } }) => {\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 && (\n <FieldCopyTestIdButton testId={testId} />\n )}\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 return (\n <RadioBox\n classNames={itemClassNames}\n data-testid={slugify(\n `${testId}_option_${option.testId || option.value}`,\n )}\n description={option.description}\n icon={option.icon}\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 </RadioBox>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n }}\n />\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 // eslint-disable-next-line react/jsx-props-no-spreading\n {...getBaseProps()}\n className={cn(\n 'group inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 border-default p-4 hover:bg-content2 data-[selected=true]:border-focus',\n {\n // disabled styles\n 'pointer-events-none opacity-disabled': isDisabled,\n },\n )}\n >\n <VisuallyHidden>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <input {...getInputProps()} />\n </VisuallyHidden>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <span {...getWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <span {...getControlProps()} />\n </span>\n {icon}\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getLabelWrapperProps()}\n className={cn(getLabelWrapperProps().className, 'grow')}\n >\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n {children && <span {...getLabelProps()}>{children}</span>}\n {description && (\n <span className=\"text-small text-foreground opacity-70\">\n {description}\n </span>\n )}\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"]}
package/dist/index.cjs CHANGED
@@ -1,27 +1,27 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkVZC5LLW4cjs = require('./chunk-VZC5LLW4.cjs');
3
+ var _chunkJH4CPQHAcjs = require('./chunk-JH4CPQHA.cjs');
4
4
 
5
5
 
6
- var _chunkTONXQKTYcjs = require('./chunk-TONXQKTY.cjs');
6
+ var _chunkWD4ES4JKcjs = require('./chunk-WD4ES4JK.cjs');
7
7
 
8
8
 
9
- var _chunkC5ZRTXUDcjs = require('./chunk-C5ZRTXUD.cjs');
9
+ var _chunkDXMJHNP3cjs = require('./chunk-DXMJHNP3.cjs');
10
10
 
11
11
 
12
12
  var _chunkAEUUTAJBcjs = require('./chunk-AEUUTAJB.cjs');
13
13
 
14
14
 
15
- var _chunkZFJ5NEHUcjs = require('./chunk-ZFJ5NEHU.cjs');
15
+ var _chunkQX652SHYcjs = require('./chunk-QX652SHY.cjs');
16
16
 
17
17
 
18
- var _chunkUOK3TF4Gcjs = require('./chunk-UOK3TF4G.cjs');
18
+ var _chunk3MPB726Acjs = require('./chunk-3MPB726A.cjs');
19
19
 
20
20
 
21
- var _chunkFAXFHN7Zcjs = require('./chunk-FAXFHN7Z.cjs');
21
+ var _chunkSCTQXWRUcjs = require('./chunk-SCTQXWRU.cjs');
22
22
 
23
23
 
24
- var _chunkWI6FEFKDcjs = require('./chunk-WI6FEFKD.cjs');
24
+ var _chunkR4GZXQFDcjs = require('./chunk-R4GZXQFD.cjs');
25
25
 
26
26
 
27
27
  var _chunk4RDTC7R6cjs = require('./chunk-4RDTC7R6.cjs');
@@ -30,19 +30,19 @@ var _chunk4RDTC7R6cjs = require('./chunk-4RDTC7R6.cjs');
30
30
  var _chunk6GN255GPcjs = require('./chunk-6GN255GP.cjs');
31
31
 
32
32
 
33
- var _chunk2DJMYFRZcjs = require('./chunk-2DJMYFRZ.cjs');
33
+ var _chunkJHVW42BWcjs = require('./chunk-JHVW42BW.cjs');
34
34
 
35
35
 
36
- var _chunkMKFKX5QXcjs = require('./chunk-MKFKX5QX.cjs');
36
+ var _chunkZPNMTMGEcjs = require('./chunk-ZPNMTMGE.cjs');
37
37
 
38
38
 
39
39
  var _chunkEPYFZXEIcjs = require('./chunk-EPYFZXEI.cjs');
40
40
 
41
41
 
42
- var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
42
+ var _chunkPA2DQCBYcjs = require('./chunk-PA2DQCBY.cjs');
43
43
 
44
44
 
45
- var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
45
+ var _chunkGNYQC5IJcjs = require('./chunk-GNYQC5IJ.cjs');
46
46
 
47
47
 
48
48
 
@@ -80,5 +80,5 @@ require('./chunk-4DAZAO6Y.cjs');
80
80
 
81
81
 
82
82
 
83
- exports.CheckboxGroup = _chunkFAXFHN7Zcjs.CheckboxGroup_default; exports.Controller = _chunkEPYFZXEIcjs.Controller_default; exports.FieldArray = _chunkWI6FEFKDcjs.FieldArray_default; exports.FieldCopyTestIdButton = _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default; exports.FieldValidationError = _chunkOE5IW4ZGcjs.FieldValidationError_default; exports.Form = _chunk4RDTC7R6cjs.Form_default; exports.Grid = _chunk6GN255GPcjs.Grid_default; exports.Input = _chunkMKFKX5QXcjs.Input_default; exports.RadioBoxes = _chunk2DJMYFRZcjs.RadioBoxes_default; exports.RadioGroup = _chunkVZC5LLW4cjs.RadioGroup_default; exports.RadioTabs = _chunkTONXQKTYcjs.RadioTabs_default; exports.Select = _chunkC5ZRTXUDcjs.Select_default; exports.SubmitButton = _chunkAEUUTAJBcjs.SubmitButton_default; exports.Switch = _chunkZFJ5NEHUcjs.Switch_default; exports.TextArea = _chunkUOK3TF4Gcjs.TextArea_default; exports.checkFieldIsRequired = _chunkQQW2FHSCcjs.checkFieldIsRequired; exports.fromNullishString = _chunkCESGUF6Fcjs.fromNullishString; exports.toFormFormat = _chunkCESGUF6Fcjs.toFormFormat; exports.toNullishString = _chunkCESGUF6Fcjs.toNullishString; exports.toValidationFormat = _chunkCESGUF6Fcjs.toValidationFormat; exports.useFieldArray = _chunkQQW2FHSCcjs.useFieldArray; exports.useFormContext = _chunkQQW2FHSCcjs.useFormContext; exports.useInput = _chunkQQW2FHSCcjs.useInput;
83
+ exports.CheckboxGroup = _chunkSCTQXWRUcjs.CheckboxGroup_default; exports.Controller = _chunkEPYFZXEIcjs.Controller_default; exports.FieldArray = _chunkR4GZXQFDcjs.FieldArray_default; exports.FieldCopyTestIdButton = _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default; exports.FieldValidationError = _chunkGNYQC5IJcjs.FieldValidationError_default; exports.Form = _chunk4RDTC7R6cjs.Form_default; exports.Grid = _chunk6GN255GPcjs.Grid_default; exports.Input = _chunkJHVW42BWcjs.Input_default; exports.RadioBoxes = _chunkZPNMTMGEcjs.RadioBoxes_default; exports.RadioGroup = _chunkJH4CPQHAcjs.RadioGroup_default; exports.RadioTabs = _chunkWD4ES4JKcjs.RadioTabs_default; exports.Select = _chunkDXMJHNP3cjs.Select_default; exports.SubmitButton = _chunkAEUUTAJBcjs.SubmitButton_default; exports.Switch = _chunkQX652SHYcjs.Switch_default; exports.TextArea = _chunk3MPB726Acjs.TextArea_default; exports.checkFieldIsRequired = _chunkQQW2FHSCcjs.checkFieldIsRequired; exports.fromNullishString = _chunkCESGUF6Fcjs.fromNullishString; exports.toFormFormat = _chunkCESGUF6Fcjs.toFormFormat; exports.toNullishString = _chunkCESGUF6Fcjs.toNullishString; exports.toValidationFormat = _chunkCESGUF6Fcjs.toValidationFormat; exports.useFieldArray = _chunkQQW2FHSCcjs.useFieldArray; exports.useFormContext = _chunkQQW2FHSCcjs.useFormContext; exports.useInput = _chunkQQW2FHSCcjs.useInput;
84
84
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { C as Controller, a as ControllerProps } from './Controller-8Nqugui5.cjs';
2
- export { C as CheckboxGroup, b as CheckboxGroupOption, a as CheckboxGroupProps } from './CheckboxGroup-Dh0YW4KV.cjs';
2
+ export { C as CheckboxGroup, b as CheckboxGroupOption, a as CheckboxGroupProps } from './CheckboxGroup-Dq4voRWR.cjs';
3
3
  export { F as FieldArray, a as FieldArrayChildrenRenderFn, b as FieldArrayFeatures, c as FieldArrayProps } from './FieldArray-hqxjr18x.cjs';
4
4
  export { F as Form, a as FormProps } from './Form-D0grgL6G.cjs';
5
5
  export { G as Grid, a as GridProps } from './Grid-DF3L9NF3.cjs';
@@ -8,14 +8,14 @@ export { useFieldArray } from 'react-hook-form';
8
8
  export { checkFieldIsRequired, useFormContext } from './hooks/index.cjs';
9
9
  export { useInput } from '@heroui/input';
10
10
  export { I as Input, a as InputProps } from './Input-B_wjhY9e.cjs';
11
- export { F as FieldCopyTestIdButton, a as FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton-DnbovhMk.cjs';
12
- export { F as FieldValidationError, a as FieldValidationErrorProps } from './FieldValidationError-DAT12Ess.cjs';
13
- export { R as RadioBoxes, a as RadioBoxesProps } from './RadioBoxes-C61IRDCU.cjs';
14
- export { R as RadioGroup, a as RadioGroupProps } from './RadioGroup-C7I27oav.cjs';
15
- export { R as RadioTabs, a as RadioTabsProps } from './RadioTabs-CT8PT7ky.cjs';
16
- export { S as Select, a as SelectProps } from './Select-JRwrSDew.cjs';
11
+ export { F as FieldCopyTestIdButton, a as FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton-_TDlmw0L.cjs';
12
+ export { F as FieldValidationError, a as FieldValidationErrorProps } from './FieldValidationError-CU_xw0BL.cjs';
13
+ export { R as RadioBoxes, a as RadioBoxesProps } from './RadioBoxes-DJ49DctW.cjs';
14
+ export { R as RadioGroup, a as RadioGroupProps } from './RadioGroup-BYfxswoe.cjs';
15
+ export { R as RadioTabs, a as RadioTabsProps } from './RadioTabs-BYvYukGt.cjs';
16
+ export { S as Select, a as SelectProps } from './Select-D2Tn4xBh.cjs';
17
17
  export { S as SubmitButton, a as SubmitButtonProps } from './SubmitButton-C81VCkmx.cjs';
18
- export { S as Switch, a as SwitchProps } from './Switch-CLs964dL.cjs';
18
+ export { S as Switch, a as SwitchProps } from './Switch-C1H8Kyu7.cjs';
19
19
  export { T as TextArea, a as TextAreaProps } from './TextArea-DNpInDsW.cjs';
20
20
  import 'react/jsx-runtime';
21
21
  import 'tailwind-variants/dist/config.js';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { C as Controller, a as ControllerProps } from './Controller-8Nqugui5.js';
2
- export { C as CheckboxGroup, b as CheckboxGroupOption, a as CheckboxGroupProps } from './CheckboxGroup-Dh0YW4KV.js';
2
+ export { C as CheckboxGroup, b as CheckboxGroupOption, a as CheckboxGroupProps } from './CheckboxGroup-Dq4voRWR.js';
3
3
  export { F as FieldArray, a as FieldArrayChildrenRenderFn, b as FieldArrayFeatures, c as FieldArrayProps } from './FieldArray-hqxjr18x.js';
4
4
  export { F as Form, a as FormProps } from './Form-DX5NTR-H.js';
5
5
  export { G as Grid, a as GridProps } from './Grid-DF3L9NF3.js';
@@ -8,14 +8,14 @@ export { useFieldArray } from 'react-hook-form';
8
8
  export { checkFieldIsRequired, useFormContext } from './hooks/index.js';
9
9
  export { useInput } from '@heroui/input';
10
10
  export { I as Input, a as InputProps } from './Input-B_wjhY9e.js';
11
- export { F as FieldCopyTestIdButton, a as FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton-DnbovhMk.js';
12
- export { F as FieldValidationError, a as FieldValidationErrorProps } from './FieldValidationError-DAT12Ess.js';
13
- export { R as RadioBoxes, a as RadioBoxesProps } from './RadioBoxes-C61IRDCU.js';
14
- export { R as RadioGroup, a as RadioGroupProps } from './RadioGroup-C7I27oav.js';
15
- export { R as RadioTabs, a as RadioTabsProps } from './RadioTabs-CT8PT7ky.js';
16
- export { S as Select, a as SelectProps } from './Select-JRwrSDew.js';
11
+ export { F as FieldCopyTestIdButton, a as FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton-_TDlmw0L.js';
12
+ export { F as FieldValidationError, a as FieldValidationErrorProps } from './FieldValidationError-CU_xw0BL.js';
13
+ export { R as RadioBoxes, a as RadioBoxesProps } from './RadioBoxes-DJ49DctW.js';
14
+ export { R as RadioGroup, a as RadioGroupProps } from './RadioGroup-BYfxswoe.js';
15
+ export { R as RadioTabs, a as RadioTabsProps } from './RadioTabs-BYvYukGt.js';
16
+ export { S as Select, a as SelectProps } from './Select-D2Tn4xBh.js';
17
17
  export { S as SubmitButton, a as SubmitButtonProps } from './SubmitButton-C81VCkmx.js';
18
- export { S as Switch, a as SwitchProps } from './Switch-CLs964dL.js';
18
+ export { S as Switch, a as SwitchProps } from './Switch-C1H8Kyu7.js';
19
19
  export { T as TextArea, a as TextAreaProps } from './TextArea-DNpInDsW.js';
20
20
  import 'react/jsx-runtime';
21
21
  import 'tailwind-variants/dist/config.js';
package/dist/index.js CHANGED
@@ -1,48 +1,48 @@
1
1
  import {
2
2
  RadioGroup_default
3
- } from "./chunk-QXD6XP3Y.js";
3
+ } from "./chunk-JS2D6XPO.js";
4
4
  import {
5
5
  RadioTabs_default
6
- } from "./chunk-BLAMCAGB.js";
6
+ } from "./chunk-3DWGHDVE.js";
7
7
  import {
8
8
  Select_default
9
- } from "./chunk-3ULE3TIW.js";
9
+ } from "./chunk-737UQZOW.js";
10
10
  import {
11
11
  SubmitButton_default
12
12
  } from "./chunk-P332MPVH.js";
13
13
  import {
14
14
  Switch_default
15
- } from "./chunk-5NRHHIFP.js";
15
+ } from "./chunk-EAEW6SOJ.js";
16
16
  import {
17
17
  TextArea_default
18
- } from "./chunk-XL3FJ3VX.js";
18
+ } from "./chunk-YLLUYAY3.js";
19
19
  import {
20
20
  CheckboxGroup_default
21
- } from "./chunk-Q6DCHTBA.js";
21
+ } from "./chunk-3WZNMG5K.js";
22
22
  import {
23
23
  FieldArray_default
24
- } from "./chunk-FNY55CAR.js";
24
+ } from "./chunk-HHENF3BD.js";
25
25
  import {
26
26
  Form_default
27
27
  } from "./chunk-IOIYK6UC.js";
28
28
  import {
29
29
  Grid_default
30
30
  } from "./chunk-PDCEKC3G.js";
31
- import {
32
- RadioBoxes_default
33
- } from "./chunk-5RFFXDXC.js";
34
31
  import {
35
32
  Input_default
36
- } from "./chunk-O3TBUVDW.js";
33
+ } from "./chunk-4HGNEE2R.js";
34
+ import {
35
+ RadioBoxes_default
36
+ } from "./chunk-BXZ2SBRA.js";
37
37
  import {
38
38
  Controller_default
39
39
  } from "./chunk-AT2VVPRD.js";
40
40
  import {
41
41
  FieldCopyTestIdButton_default
42
- } from "./chunk-2CRY7VDQ.js";
42
+ } from "./chunk-BQGN3JTU.js";
43
43
  import {
44
44
  FieldValidationError_default
45
- } from "./chunk-ASPOGQPS.js";
45
+ } from "./chunk-UTFZRBBS.js";
46
46
  import {
47
47
  checkFieldIsRequired,
48
48
  useFieldArray,
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkJU5RT22Ycjs = require('../../chunk-JU5RT22Y.cjs');
4
+ var _chunkPA2DQCBYcjs = require('../../chunk-PA2DQCBY.cjs');
5
5
  require('../../chunk-4DAZAO6Y.cjs');
6
6
 
7
7
 
8
8
 
9
- exports.FieldCopyTestIdButton = _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default; exports.default = _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default2;
9
+ exports.FieldCopyTestIdButton = _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default; exports.default = _chunkPA2DQCBYcjs.FieldCopyTestIdButton_default2;
10
10
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import { F as FieldCopyTestIdButton } from '../../FieldCopyTestIdButton-DnbovhMk.cjs';
2
- export { a as FieldCopyTestIdButtonProps } from '../../FieldCopyTestIdButton-DnbovhMk.cjs';
1
+ import { F as FieldCopyTestIdButton } from '../../FieldCopyTestIdButton-_TDlmw0L.cjs';
2
+ export { a as FieldCopyTestIdButtonProps } from '../../FieldCopyTestIdButton-_TDlmw0L.cjs';
3
3
  import 'react/jsx-runtime';
4
4
 
5
5
 
@@ -1,5 +1,5 @@
1
- import { F as FieldCopyTestIdButton } from '../../FieldCopyTestIdButton-DnbovhMk.js';
2
- export { a as FieldCopyTestIdButtonProps } from '../../FieldCopyTestIdButton-DnbovhMk.js';
1
+ import { F as FieldCopyTestIdButton } from '../../FieldCopyTestIdButton-_TDlmw0L.js';
2
+ export { a as FieldCopyTestIdButtonProps } from '../../FieldCopyTestIdButton-_TDlmw0L.js';
3
3
  import 'react/jsx-runtime';
4
4
 
5
5
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FieldCopyTestIdButton_default,
3
3
  FieldCopyTestIdButton_default2
4
- } from "../../chunk-2CRY7VDQ.js";
4
+ } from "../../chunk-BQGN3JTU.js";
5
5
  import "../../chunk-CRTRMMJ7.js";
6
6
  export {
7
7
  FieldCopyTestIdButton_default as FieldCopyTestIdButton,
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkOE5IW4ZGcjs = require('../../chunk-OE5IW4ZG.cjs');
4
+ var _chunkGNYQC5IJcjs = require('../../chunk-GNYQC5IJ.cjs');
5
5
  require('../../chunk-4DAZAO6Y.cjs');
6
6
 
7
7
 
8
8
 
9
- exports.FieldValidationError = _chunkOE5IW4ZGcjs.FieldValidationError_default; exports.default = _chunkOE5IW4ZGcjs.FieldValidationError_default2;
9
+ exports.FieldValidationError = _chunkGNYQC5IJcjs.FieldValidationError_default; exports.default = _chunkGNYQC5IJcjs.FieldValidationError_default2;
10
10
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import { F as FieldValidationError } from '../../FieldValidationError-DAT12Ess.cjs';
2
- export { a as FieldValidationErrorProps } from '../../FieldValidationError-DAT12Ess.cjs';
1
+ import { F as FieldValidationError } from '../../FieldValidationError-CU_xw0BL.cjs';
2
+ export { a as FieldValidationErrorProps } from '../../FieldValidationError-CU_xw0BL.cjs';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react-hook-form';
5
5
 
@@ -1,5 +1,5 @@
1
- import { F as FieldValidationError } from '../../FieldValidationError-DAT12Ess.js';
2
- export { a as FieldValidationErrorProps } from '../../FieldValidationError-DAT12Ess.js';
1
+ import { F as FieldValidationError } from '../../FieldValidationError-CU_xw0BL.js';
2
+ export { a as FieldValidationErrorProps } from '../../FieldValidationError-CU_xw0BL.js';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react-hook-form';
5
5
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FieldValidationError_default,
3
3
  FieldValidationError_default2
4
- } from "../../chunk-ASPOGQPS.js";
4
+ } from "../../chunk-UTFZRBBS.js";
5
5
  import "../../chunk-CRTRMMJ7.js";
6
6
  export {
7
7
  FieldValidationError_default as FieldValidationError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuf-stack/uniform",
3
- "version": "0.18.4",
3
+ "version": "0.18.5",
4
4
  "description": "fuf react form library",
5
5
  "author": "Hannes Tiede",
6
6
  "homepage": "https://github.com/fuf-stack/pixels#readme",
@@ -133,13 +133,13 @@
133
133
  "@heroui/switch": "2.2.15",
134
134
  "@heroui/system": "2.4.13",
135
135
  "@heroui/theme": "2.4.13",
136
- "@react-aria/visually-hidden": "3.8.22",
137
- "framer-motion": "12.11.3",
136
+ "@react-aria/visually-hidden": "3.8.23",
137
+ "framer-motion": "12.15.0",
138
138
  "react-icons": "5.5.0",
139
139
  "react-hook-form": "7.55.0",
140
140
  "react-select": "5.10.1",
141
141
  "@fuf-stack/pixel-utils": "0.5.4",
142
- "@fuf-stack/pixels": "0.43.7",
142
+ "@fuf-stack/pixels": "0.43.8",
143
143
  "@fuf-stack/veto": "0.11.0"
144
144
  },
145
145
  "devDependencies": {
@@ -150,8 +150,8 @@
150
150
  "react-dom": "19.0.0",
151
151
  "@repo/storybook-config": "0.0.1",
152
152
  "@repo/tailwind-config": "0.0.1",
153
- "@repo/vite-config": "0.0.1",
154
- "@repo/tsup-config": "0.0.1"
153
+ "@repo/tsup-config": "0.0.1",
154
+ "@repo/vite-config": "0.0.1"
155
155
  },
156
156
  "scripts": {
157
157
  "build": "tsup --config node_modules/@repo/tsup-config/config.ts",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/partials/FieldCopyTestIdButton/FieldCopyTestIdButton.tsx","../src/partials/FieldCopyTestIdButton/index.ts"],"sourcesContent":["import { FaBullseye } from 'react-icons/fa6';\n\nimport { cn } from '@fuf-stack/pixel-utils';\nimport { Button } from '@fuf-stack/pixels';\n\nexport interface FieldCopyTestIdButtonProps {\n className?: string;\n testId: string;\n}\n\nconst FieldCopyTestIdButton = ({\n className = undefined,\n testId,\n}: FieldCopyTestIdButtonProps) => {\n const copyToClipboard = () => {\n navigator.clipboard.writeText(testId).catch((err) => {\n console.error('Error copying TestId to clipboard', err);\n });\n };\n\n return (\n <Button\n className={cn(className, 'pointer-events-auto')}\n variant=\"light\"\n onClick={copyToClipboard}\n icon={<FaBullseye />}\n size=\"sm\"\n />\n );\n};\nexport default FieldCopyTestIdButton;\n","import FieldCopyTestIdButton from './FieldCopyTestIdButton';\n\nexport type { FieldCopyTestIdButtonProps } from './FieldCopyTestIdButton';\n\nexport { FieldCopyTestIdButton };\n\nexport default FieldCopyTestIdButton;\n"],"mappings":";AAAA,SAAS,kBAAkB;AAE3B,SAAS,UAAU;AACnB,SAAS,cAAc;AAsBX;AAfZ,IAAM,wBAAwB,CAAC;AAAA,EAC7B,YAAY;AAAA,EACZ;AACF,MAAkC;AAChC,QAAM,kBAAkB,MAAM;AAC5B,cAAU,UAAU,UAAU,MAAM,EAAE,MAAM,CAAC,QAAQ;AACnD,cAAQ,MAAM,qCAAqC,GAAG;AAAA,IACxD,CAAC;AAAA,EACH;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,WAAW,qBAAqB;AAAA,MAC9C,SAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM,oBAAC,cAAW;AAAA,MAClB,MAAK;AAAA;AAAA,EACP;AAEJ;AACA,IAAO,gCAAQ;;;ACxBf,IAAOA,iCAAQ;","names":["FieldCopyTestIdButton_default"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-2DJMYFRZ.cjs","../src/RadioBoxes/RadioBoxes.tsx","../src/RadioBoxes/RadioBox.tsx","../src/RadioBoxes/index.ts"],"names":["jsx","jsxs","RadioBoxes_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-2DJMYFRZ.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 { Controller } from '../Controller';\nimport { 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-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\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 showTestIdCopyButton = debugMode === 'debug-testids';\n const showLabel = label || showTestIdCopyButton;\n\n const variants = radioBoxesVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={name}\n render={({ field: { onChange, disabled: isDisabled, onBlur, ref } }) => {\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={error && <FieldValidationError error={error} />}\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 && (\n <FieldCopyTestIdButton testId={testId} />\n )}\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 return (\n <RadioBox\n classNames={itemClassNames}\n data-testid={slugify(\n `${testId}_option_${option.testId || option.value}`,\n )}\n description={option.description}\n icon={option.icon}\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 </RadioBox>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n }}\n />\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 // eslint-disable-next-line react/jsx-props-no-spreading\n {...getBaseProps()}\n className={cn(\n 'group inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 border-default p-4 hover:bg-content2 data-[selected=true]:border-focus',\n {\n // disabled styles\n 'pointer-events-none opacity-disabled': isDisabled,\n },\n )}\n >\n <VisuallyHidden>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <input {...getInputProps()} />\n </VisuallyHidden>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <span {...getWrapperProps()}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <span {...getControlProps()} />\n </span>\n {icon}\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...getLabelWrapperProps()}\n className={cn(getLabelWrapperProps().className, 'grow')}\n >\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n {children && <span {...getLabelProps()}>{children}</span>}\n {description && (\n <span className=\"text-small text-foreground opacity-70\">\n {description}\n </span>\n )}\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"]}