@fuf-stack/uniform 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/CheckboxGroup/index.cjs +6 -6
  2. package/dist/CheckboxGroup/index.d.cts +2 -2
  3. package/dist/CheckboxGroup/index.d.ts +2 -2
  4. package/dist/CheckboxGroup/index.js +5 -5
  5. package/dist/{CheckboxGroup-o-qWkWe1.d.cts → CheckboxGroup-fAdey3Td.d.cts} +1 -1
  6. package/dist/{CheckboxGroup-o-qWkWe1.d.ts → CheckboxGroup-fAdey3Td.d.ts} +1 -1
  7. package/dist/Controller/index.cjs +3 -3
  8. package/dist/Controller/index.js +2 -2
  9. package/dist/FieldArray/index.cjs +5 -5
  10. package/dist/FieldArray/index.js +4 -4
  11. package/dist/Form/index.cjs +4 -4
  12. package/dist/Form/index.js +3 -3
  13. package/dist/Input/index.cjs +6 -6
  14. package/dist/Input/index.d.cts +2 -2
  15. package/dist/Input/index.d.ts +2 -2
  16. package/dist/Input/index.js +5 -5
  17. package/dist/{Input-IkWP4cWg.d.cts → Input-B_wjhY9e.d.cts} +1 -1
  18. package/dist/{Input-IkWP4cWg.d.ts → Input-B_wjhY9e.d.ts} +1 -1
  19. package/dist/RadioGroup/index.cjs +6 -6
  20. package/dist/RadioGroup/index.d.cts +2 -2
  21. package/dist/RadioGroup/index.d.ts +2 -2
  22. package/dist/RadioGroup/index.js +5 -5
  23. package/dist/{RadioGroup-1J39ASHa.d.cts → RadioGroup-Dxd2FPQj.d.cts} +1 -1
  24. package/dist/{RadioGroup-1J39ASHa.d.ts → RadioGroup-Dxd2FPQj.d.ts} +1 -1
  25. package/dist/Select/index.cjs +6 -6
  26. package/dist/Select/index.d.cts +2 -2
  27. package/dist/Select/index.d.ts +2 -2
  28. package/dist/Select/index.js +5 -5
  29. package/dist/{Select-BhS4z0Pj.d.cts → Select-JRwrSDew.d.cts} +1 -1
  30. package/dist/{Select-BhS4z0Pj.d.ts → Select-JRwrSDew.d.ts} +1 -1
  31. package/dist/SubmitButton/index.cjs +4 -4
  32. package/dist/SubmitButton/index.js +3 -3
  33. package/dist/Switch/index.cjs +6 -6
  34. package/dist/Switch/index.d.cts +2 -2
  35. package/dist/Switch/index.d.ts +2 -2
  36. package/dist/Switch/index.js +5 -5
  37. package/dist/{Switch-Fdldj8LV.d.cts → Switch-mdolzzEc.d.cts} +1 -1
  38. package/dist/{Switch-Fdldj8LV.d.ts → Switch-mdolzzEc.d.ts} +1 -1
  39. package/dist/TextArea/index.cjs +6 -6
  40. package/dist/TextArea/index.d.cts +2 -2
  41. package/dist/TextArea/index.d.ts +2 -2
  42. package/dist/TextArea/index.js +5 -5
  43. package/dist/{TextArea-B-sKvTkd.d.cts → TextArea-DNpInDsW.d.cts} +1 -1
  44. package/dist/{TextArea-B-sKvTkd.d.ts → TextArea-DNpInDsW.d.ts} +1 -1
  45. package/dist/{chunk-U26GTLKF.js → chunk-3QBYSFDX.js} +6 -6
  46. package/dist/chunk-3QBYSFDX.js.map +1 -0
  47. package/dist/{chunk-WAXJ64P7.js → chunk-5YDNHSEU.js} +39 -36
  48. package/dist/chunk-5YDNHSEU.js.map +1 -0
  49. package/dist/chunk-7ROOJK7G.cjs +110 -0
  50. package/dist/chunk-7ROOJK7G.cjs.map +1 -0
  51. package/dist/{chunk-VX76MJAI.js → chunk-ASPOGQPS.js} +2 -5
  52. package/dist/chunk-ASPOGQPS.js.map +1 -0
  53. package/dist/{chunk-FLX6VIO7.cjs → chunk-BDVAK232.cjs} +11 -16
  54. package/dist/chunk-BDVAK232.cjs.map +1 -0
  55. package/dist/{chunk-4AXNPSXG.cjs → chunk-CESGUF6F.cjs} +3 -22
  56. package/dist/chunk-CESGUF6F.cjs.map +1 -0
  57. package/dist/{chunk-P4PRVNCH.js → chunk-DS7GUNDT.js} +4 -5
  58. package/dist/chunk-DS7GUNDT.js.map +1 -0
  59. package/dist/{chunk-W66BVPTB.js → chunk-ECDLVJLZ.js} +9 -11
  60. package/dist/chunk-ECDLVJLZ.js.map +1 -0
  61. package/dist/{chunk-UJYXA5AD.js → chunk-GNDW3TAU.js} +3 -6
  62. package/dist/chunk-GNDW3TAU.js.map +1 -0
  63. package/dist/{chunk-V7LRZ5GK.cjs → chunk-H65I56SI.cjs} +4 -7
  64. package/dist/chunk-H65I56SI.cjs.map +1 -0
  65. package/dist/{chunk-K43U2JVG.cjs → chunk-HCQJGNWT.cjs} +12 -14
  66. package/dist/chunk-HCQJGNWT.cjs.map +1 -0
  67. package/dist/{chunk-OBQDQ4RX.js → chunk-IBQCNI5H.js} +4 -4
  68. package/dist/{chunk-2NSCPLAA.cjs → chunk-IUVEFLF3.cjs} +6 -6
  69. package/dist/chunk-IUVEFLF3.cjs.map +1 -0
  70. package/dist/{chunk-4M6F2O2K.cjs → chunk-KIAIGPG7.cjs} +8 -8
  71. package/dist/chunk-KIAIGPG7.cjs.map +1 -0
  72. package/dist/{chunk-3Q37222E.js → chunk-MEK7YR46.js} +6 -6
  73. package/dist/chunk-MEK7YR46.js.map +1 -0
  74. package/dist/{chunk-C4RM2JSD.cjs → chunk-OE5IW4ZG.cjs} +4 -7
  75. package/dist/chunk-OE5IW4ZG.cjs.map +1 -0
  76. package/dist/{chunk-V5HTEMWZ.cjs → chunk-PHGFXKPU.cjs} +4 -4
  77. package/dist/{chunk-V5HTEMWZ.cjs.map → chunk-PHGFXKPU.cjs.map} +1 -1
  78. package/dist/{chunk-QLQR44AD.cjs → chunk-Q23XGBJ5.cjs} +7 -8
  79. package/dist/chunk-Q23XGBJ5.cjs.map +1 -0
  80. package/dist/{chunk-2LAPLELO.js → chunk-STU7SBQX.js} +10 -12
  81. package/dist/chunk-STU7SBQX.js.map +1 -0
  82. package/dist/{chunk-MRXNKY72.js → chunk-T4N6TMUL.js} +4 -4
  83. package/dist/chunk-T4N6TMUL.js.map +1 -0
  84. package/dist/{chunk-4EP3IGSK.cjs → chunk-TJESSWIB.cjs} +12 -12
  85. package/dist/{chunk-4EP3IGSK.cjs.map → chunk-TJESSWIB.cjs.map} +1 -1
  86. package/dist/{chunk-IEF2GJ22.js → chunk-UAV6PVB4.js} +2 -21
  87. package/dist/chunk-UAV6PVB4.js.map +1 -0
  88. package/dist/{chunk-7HK64PN5.js → chunk-WKJN5A2E.js} +9 -14
  89. package/dist/chunk-WKJN5A2E.js.map +1 -0
  90. package/dist/{chunk-MF4JB3YT.cjs → chunk-WRIXKFKW.cjs} +13 -15
  91. package/dist/chunk-WRIXKFKW.cjs.map +1 -0
  92. package/dist/{chunk-Y4AUJ2YA.cjs → chunk-Y7MJBI4A.cjs} +8 -8
  93. package/dist/chunk-Y7MJBI4A.cjs.map +1 -0
  94. package/dist/{chunk-4EJS5FXY.js → chunk-ZI22WT2P.js} +2 -2
  95. package/dist/helpers/index.cjs +2 -4
  96. package/dist/helpers/index.cjs.map +1 -1
  97. package/dist/helpers/index.d.cts +1 -5
  98. package/dist/helpers/index.d.ts +1 -5
  99. package/dist/helpers/index.js +1 -3
  100. package/dist/hooks/index.cjs +3 -3
  101. package/dist/hooks/index.d.cts +1 -1
  102. package/dist/hooks/index.d.ts +1 -1
  103. package/dist/hooks/index.js +2 -2
  104. package/dist/index.cjs +16 -18
  105. package/dist/index.cjs.map +1 -1
  106. package/dist/index.d.cts +8 -9
  107. package/dist/index.d.ts +8 -9
  108. package/dist/index.js +17 -19
  109. package/dist/partials/FieldValidationError/index.cjs +2 -3
  110. package/dist/partials/FieldValidationError/index.cjs.map +1 -1
  111. package/dist/partials/FieldValidationError/index.js +1 -2
  112. package/package.json +19 -21
  113. package/dist/chunk-2LAPLELO.js.map +0 -1
  114. package/dist/chunk-2NSCPLAA.cjs.map +0 -1
  115. package/dist/chunk-3Q37222E.js.map +0 -1
  116. package/dist/chunk-4AXNPSXG.cjs.map +0 -1
  117. package/dist/chunk-4M6F2O2K.cjs.map +0 -1
  118. package/dist/chunk-7HK64PN5.js.map +0 -1
  119. package/dist/chunk-C4RM2JSD.cjs.map +0 -1
  120. package/dist/chunk-F6KTQXWG.cjs +0 -107
  121. package/dist/chunk-F6KTQXWG.cjs.map +0 -1
  122. package/dist/chunk-FLX6VIO7.cjs.map +0 -1
  123. package/dist/chunk-IEF2GJ22.js.map +0 -1
  124. package/dist/chunk-K43U2JVG.cjs.map +0 -1
  125. package/dist/chunk-MF4JB3YT.cjs.map +0 -1
  126. package/dist/chunk-MRXNKY72.js.map +0 -1
  127. package/dist/chunk-P4PRVNCH.js.map +0 -1
  128. package/dist/chunk-QLQR44AD.cjs.map +0 -1
  129. package/dist/chunk-U26GTLKF.js.map +0 -1
  130. package/dist/chunk-UJYXA5AD.js.map +0 -1
  131. package/dist/chunk-V7LRZ5GK.cjs.map +0 -1
  132. package/dist/chunk-VX76MJAI.js.map +0 -1
  133. package/dist/chunk-W66BVPTB.js.map +0 -1
  134. package/dist/chunk-WAXJ64P7.js.map +0 -1
  135. package/dist/chunk-Y4AUJ2YA.cjs.map +0 -1
  136. /package/dist/{chunk-OBQDQ4RX.js.map → chunk-IBQCNI5H.js.map} +0 -0
  137. /package/dist/{chunk-4EJS5FXY.js.map → chunk-ZI22WT2P.js.map} +0 -0
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  Controller_default
3
- } from "./chunk-4EJS5FXY.js";
3
+ } from "./chunk-ZI22WT2P.js";
4
4
  import {
5
5
  FieldCopyTestIdButton_default
6
6
  } from "./chunk-2CRY7VDQ.js";
7
7
  import {
8
8
  FieldValidationError_default
9
- } from "./chunk-VX76MJAI.js";
9
+ } from "./chunk-ASPOGQPS.js";
10
10
  import {
11
11
  useFormContext
12
- } from "./chunk-MRXNKY72.js";
12
+ } from "./chunk-T4N6TMUL.js";
13
13
 
14
14
  // src/TextArea/TextArea.tsx
15
- import { Textarea as NextTextArea } from "@nextui-org/input";
15
+ import { Textarea as HeroTextArea } from "@heroui/input";
16
16
  import { cn } from "@fuf-stack/pixel-utils";
17
17
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
18
18
  var TextArea = ({
@@ -40,7 +40,7 @@ var TextArea = ({
40
40
  var _a;
41
41
  const displayValue = (_a = value == null ? void 0 : value.toString()) != null ? _a : "";
42
42
  return /* @__PURE__ */ jsx(
43
- NextTextArea,
43
+ HeroTextArea,
44
44
  {
45
45
  className: cn(className),
46
46
  classNames: {
@@ -79,4 +79,4 @@ export {
79
79
  TextArea_default,
80
80
  TextArea_default2
81
81
  };
82
- //# sourceMappingURL=chunk-U26GTLKF.js.map
82
+ //# sourceMappingURL=chunk-3QBYSFDX.js.map
@@ -0,0 +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,23 +1,23 @@
1
1
  import {
2
2
  Controller_default
3
- } from "./chunk-4EJS5FXY.js";
3
+ } from "./chunk-ZI22WT2P.js";
4
4
  import {
5
5
  FieldCopyTestIdButton_default
6
6
  } from "./chunk-2CRY7VDQ.js";
7
7
  import {
8
8
  FieldValidationError_default
9
- } from "./chunk-VX76MJAI.js";
9
+ } from "./chunk-ASPOGQPS.js";
10
10
  import {
11
11
  useFormContext,
12
12
  useInput
13
- } from "./chunk-MRXNKY72.js";
13
+ } from "./chunk-T4N6TMUL.js";
14
14
  import {
15
15
  __spreadProps,
16
16
  __spreadValues
17
17
  } from "./chunk-CRTRMMJ7.js";
18
18
 
19
19
  // src/Switch/Switch.tsx
20
- import { Switch as NextSwitch } from "@nextui-org/switch";
20
+ import { Switch as HeroSwitch } from "@heroui/switch";
21
21
  import { tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
22
22
  import { jsx, jsxs } from "react/jsx-runtime";
23
23
  var switchVariants = tv({
@@ -25,7 +25,8 @@ var switchVariants = tv({
25
25
  base: "",
26
26
  endContent: "",
27
27
  errorMessage: "ml-1 mt-1",
28
- // See NextUI styles for group-data condition, e.g.: https://github.com/nextui-org/nextui/blob/main/packages/core/theme/src/components/select.ts
28
+ // see HeroUI styles for group-data condition,
29
+ // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
29
30
  label: 'text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:!text-danger group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-["*"]',
30
31
  outerWrapper: "place-content-center",
31
32
  startContent: "",
@@ -62,36 +63,38 @@ var Switch = ({
62
63
  disabled,
63
64
  render: ({
64
65
  field: { disabled: isDisabled, value, ref, onBlur, onChange }
65
- }) => /* @__PURE__ */ jsxs("div", { className: classNames.outerWrapper, children: [
66
- /* @__PURE__ */ jsxs(
67
- NextSwitch,
68
- {
69
- "aria-describedby": getInputProps()["aria-describedby"],
70
- classNames,
71
- "data-invalid": invalid,
72
- "data-required": required,
73
- "data-testid": testId,
74
- isDisabled,
75
- isSelected: !!value,
76
- name,
77
- onBlur,
78
- onChange,
79
- ref,
80
- required,
81
- value,
82
- children: [
83
- label,
84
- showTestIdCopyButton && /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
85
- ]
86
- }
87
- ),
88
- error && /* @__PURE__ */ jsx("div", { className: classNames.errorMessage, children: /* @__PURE__ */ jsx(
89
- "div",
90
- __spreadProps(__spreadValues({}, getErrorMessageProps()), {
91
- children: /* @__PURE__ */ jsx(FieldValidationError_default, { error })
92
- })
93
- ) })
94
- ] })
66
+ }) => {
67
+ return /* @__PURE__ */ jsxs("div", { className: classNames.outerWrapper, children: [
68
+ /* @__PURE__ */ jsxs(
69
+ HeroSwitch,
70
+ {
71
+ "aria-describedby": getInputProps()["aria-describedby"],
72
+ classNames,
73
+ "data-invalid": invalid,
74
+ "data-required": required,
75
+ "data-testid": testId,
76
+ isDisabled,
77
+ isSelected: !!value,
78
+ name,
79
+ onBlur,
80
+ onValueChange: onChange,
81
+ ref,
82
+ required,
83
+ value,
84
+ children: [
85
+ label,
86
+ showTestIdCopyButton && /* @__PURE__ */ jsx(FieldCopyTestIdButton_default, { testId })
87
+ ]
88
+ }
89
+ ),
90
+ error && /* @__PURE__ */ jsx("div", { className: classNames.errorMessage, children: /* @__PURE__ */ jsx(
91
+ "div",
92
+ __spreadProps(__spreadValues({}, getErrorMessageProps()), {
93
+ children: /* @__PURE__ */ jsx(FieldValidationError_default, { error })
94
+ })
95
+ ) })
96
+ ] });
97
+ }
95
98
  }
96
99
  );
97
100
  };
@@ -104,4 +107,4 @@ export {
104
107
  Switch_default,
105
108
  Switch_default2
106
109
  };
107
- //# sourceMappingURL=chunk-WAXJ64P7.js.map
110
+ //# sourceMappingURL=chunk-5YDNHSEU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Switch/Switch.tsx","../src/Switch/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\n\nimport { Switch as HeroSwitch } from '@heroui/switch';\n\nimport { tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { Controller } from '../Controller';\nimport { useFormContext, useInput } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const switchVariants = tv({\n slots: {\n base: '',\n endContent: '',\n errorMessage: 'ml-1 mt-1',\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 group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-[\"*\"]',\n outerWrapper: 'place-content-center',\n startContent: '',\n thumb: '',\n thumbIcon: '',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof switchVariants>;\ntype ClassName = TVClassName<typeof switchVariants>;\n\nexport interface SwitchProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** whether the select should be disabled */\n disabled?: boolean;\n /** component displayed next to the switch. */\n label?: React.ReactNode;\n /** name the field is registered under */\n name: string;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * Switch component based on [HeroUI Switch](https://www.heroui.com//docs/components/switch)\n */\nconst Switch = ({\n className = undefined,\n disabled = false,\n label: _label = undefined,\n name,\n testId: _testId = undefined,\n}: SwitchProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, required, testId, invalid } = getFieldState(name, _testId);\n\n const { label, getInputProps, getErrorMessageProps } = useInput({\n errorMessage: JSON.stringify(error),\n isInvalid: invalid,\n isRequired: required,\n label: _label,\n labelPlacement: 'outside',\n placeholder: ' ',\n });\n\n const variants = switchVariants();\n const classNames = variantsToClassNames(variants, className, 'outerWrapper');\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n\n return (\n <Controller\n name={name}\n control={control}\n disabled={disabled}\n render={({\n field: { disabled: isDisabled, value, ref, onBlur, onChange },\n }) => {\n return (\n <div className={classNames.outerWrapper}>\n <HeroSwitch\n aria-describedby={getInputProps()['aria-describedby']}\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 isDisabled={isDisabled}\n isSelected={!!value}\n name={name}\n onBlur={onBlur}\n onValueChange={onChange}\n ref={ref}\n required={required}\n value={value}\n >\n {label}\n {showTestIdCopyButton && (\n <FieldCopyTestIdButton testId={testId} />\n )}\n </HeroSwitch>\n {error && (\n <div className={classNames.errorMessage}>\n <div\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...getErrorMessageProps()}\n >\n <FieldValidationError error={error} />\n </div>\n </div>\n )}\n </div>\n );\n }}\n />\n );\n};\n\nexport default Switch;\n","import Switch from './Switch';\n\nexport type { SwitchProps } from './Switch';\n\nexport { Switch };\n\nexport default Switch;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,SAAS,UAAU,kBAAkB;AAErC,SAAS,IAAI,4BAA4B;AA6E7B,SAmBI,KAnBJ;AAtEL,IAAM,iBAAiB,GAAG;AAAA,EAC/B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,cAAc;AAAA;AAAA;AAAA,IAGd,OACE;AAAA,IACF,cAAc;AAAA,IACd,cAAc;AAAA,IACd,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACF,CAAC;AAqBD,IAAM,SAAS,CAAC;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO,SAAS;AAAA,EAChB;AAAA,EACA,QAAQ,UAAU;AACpB,MAAmB;AACjB,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI,eAAe;AAC7D,QAAM,EAAE,OAAO,UAAU,QAAQ,QAAQ,IAAI,cAAc,MAAM,OAAO;AAExE,QAAM,EAAE,OAAO,eAAe,qBAAqB,IAAI,SAAS;AAAA,IAC9D,cAAc,KAAK,UAAU,KAAK;AAAA,IAClC,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,aAAa;AAAA,EACf,CAAC;AAED,QAAM,WAAW,eAAe;AAChC,QAAM,aAAa,qBAAqB,UAAU,WAAW,cAAc;AAE3E,QAAM,uBAAuB,cAAc;AAE3C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,QACP,OAAO,EAAE,UAAU,YAAY,OAAO,KAAK,QAAQ,SAAS;AAAA,MAC9D,MAAM;AACJ,eACE,qBAAC,SAAI,WAAW,WAAW,cACzB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,oBAAkB,cAAc,EAAE,kBAAkB;AAAA,cACpD;AAAA,cAGA,gBAAc;AAAA,cACd,iBAAe;AAAA,cACf,eAAa;AAAA,cACb;AAAA,cACA,YAAY,CAAC,CAAC;AAAA,cACd;AAAA,cACA;AAAA,cACA,eAAe;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cAEC;AAAA;AAAA,gBACA,wBACC,oBAAC,iCAAsB,QAAgB;AAAA;AAAA;AAAA,UAE3C;AAAA,UACC,SACC,oBAAC,SAAI,WAAW,WAAW,cACzB;AAAA,YAAC;AAAA,6CAEK,qBAAqB,IAF1B;AAAA,cAIC,8BAAC,gCAAqB,OAAc;AAAA;AAAA,UACtC,GACF;AAAA,WAEJ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,iBAAQ;;;AClHf,IAAOA,kBAAQ;","names":["Switch_default"]}
@@ -0,0 +1,110 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkPHGFXKPUcjs = require('./chunk-PHGFXKPU.cjs');
4
+
5
+
6
+ var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
7
+
8
+
9
+ var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
10
+
11
+
12
+
13
+ var _chunkIUVEFLF3cjs = require('./chunk-IUVEFLF3.cjs');
14
+
15
+
16
+
17
+ var _chunk4DAZAO6Ycjs = require('./chunk-4DAZAO6Y.cjs');
18
+
19
+ // src/Switch/Switch.tsx
20
+ var _switch = require('@heroui/switch');
21
+ var _pixelutils = require('@fuf-stack/pixel-utils');
22
+ var _jsxruntime = require('react/jsx-runtime');
23
+ var switchVariants = _pixelutils.tv.call(void 0, {
24
+ slots: {
25
+ base: "",
26
+ endContent: "",
27
+ errorMessage: "ml-1 mt-1",
28
+ // see HeroUI styles for group-data condition,
29
+ // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
30
+ label: 'text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:!text-danger group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-["*"]',
31
+ outerWrapper: "place-content-center",
32
+ startContent: "",
33
+ thumb: "",
34
+ thumbIcon: "",
35
+ wrapper: ""
36
+ }
37
+ });
38
+ var Switch = ({
39
+ className = void 0,
40
+ disabled = false,
41
+ label: _label = void 0,
42
+ name,
43
+ testId: _testId = void 0
44
+ }) => {
45
+ const { control, debugMode, getFieldState } = _chunkIUVEFLF3cjs.useFormContext.call(void 0, );
46
+ const { error, required, testId, invalid } = getFieldState(name, _testId);
47
+ const { label, getInputProps, getErrorMessageProps } = _chunkIUVEFLF3cjs.useInput.call(void 0, {
48
+ errorMessage: JSON.stringify(error),
49
+ isInvalid: invalid,
50
+ isRequired: required,
51
+ label: _label,
52
+ labelPlacement: "outside",
53
+ placeholder: " "
54
+ });
55
+ const variants = switchVariants();
56
+ const classNames = _pixelutils.variantsToClassNames.call(void 0, variants, className, "outerWrapper");
57
+ const showTestIdCopyButton = debugMode === "debug-testids";
58
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
59
+ _chunkPHGFXKPUcjs.Controller_default,
60
+ {
61
+ name,
62
+ control,
63
+ disabled,
64
+ render: ({
65
+ field: { disabled: isDisabled, value, ref, onBlur, onChange }
66
+ }) => {
67
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: classNames.outerWrapper, children: [
68
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
69
+ _switch.Switch,
70
+ {
71
+ "aria-describedby": getInputProps()["aria-describedby"],
72
+ classNames,
73
+ "data-invalid": invalid,
74
+ "data-required": required,
75
+ "data-testid": testId,
76
+ isDisabled,
77
+ isSelected: !!value,
78
+ name,
79
+ onBlur,
80
+ onValueChange: onChange,
81
+ ref,
82
+ required,
83
+ value,
84
+ children: [
85
+ label,
86
+ showTestIdCopyButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJU5RT22Ycjs.FieldCopyTestIdButton_default, { testId })
87
+ ]
88
+ }
89
+ ),
90
+ error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: classNames.errorMessage, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
91
+ "div",
92
+ _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, getErrorMessageProps()), {
93
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOE5IW4ZGcjs.FieldValidationError_default, { error })
94
+ })
95
+ ) })
96
+ ] });
97
+ }
98
+ }
99
+ );
100
+ };
101
+ var Switch_default = Switch;
102
+
103
+ // src/Switch/index.ts
104
+ var Switch_default2 = Switch_default;
105
+
106
+
107
+
108
+
109
+ exports.Switch_default = Switch_default; exports.Switch_default2 = Switch_default2;
110
+ //# sourceMappingURL=chunk-7ROOJK7G.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-7ROOJK7G.cjs","../src/Switch/Switch.tsx","../src/Switch/index.ts"],"names":["Switch_default"],"mappings":"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","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-7ROOJK7G.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\n\nimport { Switch as HeroSwitch } from '@heroui/switch';\n\nimport { tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { Controller } from '../Controller';\nimport { useFormContext, useInput } from '../hooks';\nimport { FieldCopyTestIdButton } from '../partials/FieldCopyTestIdButton';\nimport { FieldValidationError } from '../partials/FieldValidationError';\n\nexport const switchVariants = tv({\n slots: {\n base: '',\n endContent: '',\n errorMessage: 'ml-1 mt-1',\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 group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-[\"*\"]',\n outerWrapper: 'place-content-center',\n startContent: '',\n thumb: '',\n thumbIcon: '',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof switchVariants>;\ntype ClassName = TVClassName<typeof switchVariants>;\n\nexport interface SwitchProps extends VariantProps {\n /** CSS class name */\n className?: ClassName;\n /** whether the select should be disabled */\n disabled?: boolean;\n /** component displayed next to the switch. */\n label?: React.ReactNode;\n /** name the field is registered under */\n name: string;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n}\n\n/**\n * Switch component based on [HeroUI Switch](https://www.heroui.com//docs/components/switch)\n */\nconst Switch = ({\n className = undefined,\n disabled = false,\n label: _label = undefined,\n name,\n testId: _testId = undefined,\n}: SwitchProps) => {\n const { control, debugMode, getFieldState } = useFormContext();\n const { error, required, testId, invalid } = getFieldState(name, _testId);\n\n const { label, getInputProps, getErrorMessageProps } = useInput({\n errorMessage: JSON.stringify(error),\n isInvalid: invalid,\n isRequired: required,\n label: _label,\n labelPlacement: 'outside',\n placeholder: ' ',\n });\n\n const variants = switchVariants();\n const classNames = variantsToClassNames(variants, className, 'outerWrapper');\n\n const showTestIdCopyButton = debugMode === 'debug-testids';\n\n return (\n <Controller\n name={name}\n control={control}\n disabled={disabled}\n render={({\n field: { disabled: isDisabled, value, ref, onBlur, onChange },\n }) => {\n return (\n <div className={classNames.outerWrapper}>\n <HeroSwitch\n aria-describedby={getInputProps()['aria-describedby']}\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 isDisabled={isDisabled}\n isSelected={!!value}\n name={name}\n onBlur={onBlur}\n onValueChange={onChange}\n ref={ref}\n required={required}\n value={value}\n >\n {label}\n {showTestIdCopyButton && (\n <FieldCopyTestIdButton testId={testId} />\n )}\n </HeroSwitch>\n {error && (\n <div className={classNames.errorMessage}>\n <div\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...getErrorMessageProps()}\n >\n <FieldValidationError error={error} />\n </div>\n </div>\n )}\n </div>\n );\n }}\n />\n );\n};\n\nexport default Switch;\n","import Switch from './Switch';\n\nexport type { SwitchProps } from './Switch';\n\nexport { Switch };\n\nexport default Switch;\n"]}
@@ -1,8 +1,5 @@
1
- import {
2
- slugify
3
- } from "./chunk-IEF2GJ22.js";
4
-
5
1
  // src/partials/FieldValidationError/FieldValidationError.tsx
2
+ import { slugify } from "@fuf-stack/pixel-utils";
6
3
  import { jsx } from "react/jsx-runtime";
7
4
  var FieldValidationError = ({
8
5
  className = void 0,
@@ -44,4 +41,4 @@ export {
44
41
  FieldValidationError_default,
45
42
  FieldValidationError_default2
46
43
  };
47
- //# sourceMappingURL=chunk-VX76MJAI.js.map
44
+ //# sourceMappingURL=chunk-ASPOGQPS.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 className?: string;\n error: FieldError[] | Record<string, FieldError[]>;\n testId?: string;\n}\n\n/**\n * Renders a validation error of a field\n */\nconst FieldValidationError = ({\n className = undefined,\n error,\n testId = undefined,\n}: FieldValidationErrorProps) => {\n if (!error) {\n return null;\n }\n\n let tmpErrors: FieldError[] = [];\n\n if (typeof error === 'object' && !(error instanceof Array)) {\n const errorObject = error as Record<string, FieldError[]>;\n Object.keys(error).forEach((key) => {\n tmpErrors = [...tmpErrors, ...errorObject[key]];\n });\n }\n\n const errorArray: FieldError[] =\n JSON.stringify(tmpErrors) !== '[]' ? tmpErrors : (error as FieldError[]);\n const errorStrings: string[] = errorArray.map((e) => e.message) as string[];\n const ariaString = `Error: ${errorStrings.join('\\n')}`;\n\n return (\n <ul\n data-testid={slugify(testId || errorStrings.join())}\n aria-label={ariaString} // TODO: ist das richtig @Hannes?\n className={className}\n >\n {errorStrings.map((errorString: string, i: number) => (\n // eslint-disable-next-line react/no-array-index-key\n <li key={`error_${i}`}>\n <div>{errorString}</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;AA2Cd;AAhCV,IAAM,uBAAuB,CAAC;AAAA,EAC5B,YAAY;AAAA,EACZ;AAAA,EACA,SAAS;AACX,MAAiC;AAC/B,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,MAAI,YAA0B,CAAC;AAE/B,MAAI,OAAO,UAAU,YAAY,EAAE,iBAAiB,QAAQ;AAC1D,UAAM,cAAc;AACpB,WAAO,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AAClC,kBAAY,CAAC,GAAG,WAAW,GAAG,YAAY,GAAG,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,QAAM,aACJ,KAAK,UAAU,SAAS,MAAM,OAAO,YAAa;AACpD,QAAM,eAAyB,WAAW,IAAI,CAAC,MAAM,EAAE,OAAO;AAC9D,QAAM,aAAa,UAAU,aAAa,KAAK,IAAI,CAAC;AAEpD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,QAAQ,UAAU,aAAa,KAAK,CAAC;AAAA,MAClD,cAAY;AAAA,MACZ;AAAA,MAEC,uBAAa,IAAI,CAAC,aAAqB;AAAA;AAAA,QAEtC,oBAAC,QACC,8BAAC,SAAK,uBAAY,KADX,SAAS,CAAC,EAEnB;AAAA,OACD;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,+BAAQ;;;AC9Cf,IAAOA,gCAAQ;","names":["FieldValidationError_default"]}
@@ -1,28 +1,22 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkV5HTEMWZcjs = require('./chunk-V5HTEMWZ.cjs');
3
+ var _chunkPHGFXKPUcjs = require('./chunk-PHGFXKPU.cjs');
4
4
 
5
5
 
6
6
  var _chunkJU5RT22Ycjs = require('./chunk-JU5RT22Y.cjs');
7
7
 
8
8
 
9
- var _chunkC4RM2JSDcjs = require('./chunk-C4RM2JSD.cjs');
9
+ var _chunkOE5IW4ZGcjs = require('./chunk-OE5IW4ZG.cjs');
10
10
 
11
11
 
12
- var _chunk2NSCPLAAcjs = require('./chunk-2NSCPLAA.cjs');
13
-
14
-
15
- var _chunk4AXNPSXGcjs = require('./chunk-4AXNPSXG.cjs');
12
+ var _chunkIUVEFLF3cjs = require('./chunk-IUVEFLF3.cjs');
16
13
 
17
14
 
18
15
 
19
16
  var _chunk4DAZAO6Ycjs = require('./chunk-4DAZAO6Y.cjs');
20
17
 
21
18
  // src/CheckboxGroup/CheckboxGroup.tsx
22
-
23
-
24
-
25
- var _checkbox = require('@nextui-org/checkbox');
19
+ var _checkbox = require('@heroui/checkbox');
26
20
  var _pixelutils = require('@fuf-stack/pixel-utils');
27
21
  var _jsxruntime = require('react/jsx-runtime');
28
22
  var checkboxGroupVariants = _pixelutils.tv.call(void 0, {
@@ -34,7 +28,8 @@ var checkboxGroupVariants = _pixelutils.tv.call(void 0, {
34
28
  itemIcon: "",
35
29
  itemLabel: "text-sm",
36
30
  itemWrapper: "",
37
- // See NextUI styles for group-data condition, e.g.: https://github.com/nextui-org/nextui/blob/main/packages/core/theme/src/components/select.ts
31
+ // see HeroUI styles for group-data condition,
32
+ // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
38
33
  label: "text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:!text-danger",
39
34
  wrapper: ""
40
35
  }
@@ -47,7 +42,7 @@ var CheckboxGroup = ({
47
42
  name,
48
43
  testId: _testId = void 0
49
44
  }) => {
50
- const { control, debugMode, getFieldState } = _chunk2NSCPLAAcjs.useFormContext.call(void 0, );
45
+ const { control, debugMode, getFieldState } = _chunkIUVEFLF3cjs.useFormContext.call(void 0, );
51
46
  const { error, invalid, required, testId } = getFieldState(name, _testId);
52
47
  const showTestIdCopyButton = debugMode === "debug-testids";
53
48
  const showLabel = label || showTestIdCopyButton;
@@ -65,7 +60,7 @@ var CheckboxGroup = ({
65
60
  label: classNames.label
66
61
  };
67
62
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
68
- _chunkV5HTEMWZcjs.Controller_default,
63
+ _chunkPHGFXKPUcjs.Controller_default,
69
64
  {
70
65
  control,
71
66
  name,
@@ -97,7 +92,7 @@ var CheckboxGroup = ({
97
92
  "data-testid": testId,
98
93
  "data-invalid": invalid,
99
94
  errorMessage: error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
100
- _chunkC4RM2JSDcjs.FieldValidationError_default,
95
+ _chunkOE5IW4ZGcjs.FieldValidationError_default,
101
96
  {
102
97
  error,
103
98
  className: classNames.errorMessage
@@ -122,7 +117,7 @@ var CheckboxGroup = ({
122
117
  classNames: itemClassName,
123
118
  isDisabled: disabled || option.disabled,
124
119
  value: option == null ? void 0 : option.value,
125
- "data-testid": _chunk4AXNPSXGcjs.slugify.call(void 0,
120
+ "data-testid": _pixelutils.slugify.call(void 0,
126
121
  `${testId}_option_${(option == null ? void 0 : option.testId) || (option == null ? void 0 : option.value)}`
127
122
  ),
128
123
  children: option == null ? void 0 : option.label
@@ -145,4 +140,4 @@ var CheckboxGroup_default2 = CheckboxGroup_default;
145
140
 
146
141
 
147
142
  exports.CheckboxGroup_default = CheckboxGroup_default; exports.CheckboxGroup_default2 = CheckboxGroup_default2;
148
- //# sourceMappingURL=chunk-FLX6VIO7.cjs.map
143
+ //# sourceMappingURL=chunk-BDVAK232.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-BDVAK232.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-BDVAK232.cjs","sourcesContent":[null,"import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\n\nimport { Checkbox, CheckboxGroup as HeroCheckboxGroup } from '@heroui/checkbox';\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';\n\nexport const checkboxGroupVariants = tv({\n slots: {\n base: 'group', // Needs group for group-data condition\n errorMessage: 'text-tiny',\n itemBase: '',\n itemIcon: '',\n itemLabel: 'text-sm',\n itemWrapper: '',\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 checkboxGroupVariants>;\ntype ClassName = TVClassName<typeof checkboxGroupVariants>;\n\nexport type CheckboxGroupOption = {\n /** option label */\n label?: React.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. ClassName: string | { buttons?: string | { base?: string; active?: string }; base?: string;} */\n className?: ClassName;\n /** label displayed above the Checkboxes */\n label?: React.ReactNode;\n /** Name the Field is registered on the form. */\n name: string;\n /** Checkboxes that should be displayed. */\n options: CheckboxGroupOption[];\n /** sets all buttons disabled */\n disabled?: boolean;\n /** id for internal testing. */\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 label = undefined,\n options,\n disabled = false,\n name,\n testId: _testId = undefined,\n}: CheckboxGroupProps) => {\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 = checkboxGroupVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const itemClassName = {\n base: classNames.itemBase,\n wrapper: classNames.itemWrapper,\n icon: classNames.itemIcon,\n label: classNames.itemLabel,\n };\n const itemGroupClassName = {\n base: classNames.base,\n wrapper: classNames.wrapper,\n label: classNames.label,\n };\n\n return (\n <Controller\n control={control}\n name={name}\n disabled={disabled}\n render={({ field: { onChange, value = [], ref, onBlur } }) => {\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[]) => onChange(newValue && newValue[0]),\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 name={name}\n classNames={itemGroupClassName}\n data-testid={testId}\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 errorMessage={\n error && (\n <FieldValidationError\n error={error}\n className={classNames.errorMessage}\n />\n )\n }\n isDisabled={disabled}\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 onBlur={onBlur}\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...checkboxGroupProps}\n >\n {options?.map((option) => {\n return (\n <Checkbox\n data-invalid={invalid}\n classNames={itemClassName}\n key={`index_${option.value}`}\n isDisabled={disabled || option.disabled}\n value={option?.value}\n data-testid={slugify(\n `${testId}_option_${option?.testId || option?.value}`,\n )}\n >\n {option?.label}\n </Checkbox>\n );\n })}\n </HeroCheckboxGroup>\n );\n }}\n />\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,9 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
-
4
- var _chunk4DAZAO6Ycjs = require('./chunk-4DAZAO6Y.cjs');
5
-
6
- // src/helpers/nullishFields/nullishFields.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/helpers/nullishFields/nullishFields.ts
7
2
  var nullString = "__NULL__";
8
3
  var falseString = "__FALSE__";
9
4
  var zeroString = "__ZERO__";
@@ -59,24 +54,10 @@ var toValidationFormat = (formState) => {
59
54
  );
60
55
  };
61
56
 
62
- // src/helpers/slugify/slugify.ts
63
- var _slug = require('slug'); var _slug2 = _interopRequireDefault(_slug);
64
- var slugify = (string, options) => {
65
- const replacement = (options == null ? void 0 : options.replacement) || "_";
66
- return _slug2.default.call(void 0, string, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, _slug2.default.defaults.modes.rfc3986), {
67
- charmap: _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, _chunk4DAZAO6Ycjs.__spreadProps.call(void 0, _chunk4DAZAO6Ycjs.__spreadValues.call(void 0, {}, _slug2.default.defaults.modes.rfc3986.charmap), {
68
- // allow dots by default
69
- ".": "."
70
- }), replacement !== "-" ? { "-": "_" } : {}),
71
- replacement
72
- }), options || {}));
73
- };
74
-
75
-
76
57
 
77
58
 
78
59
 
79
60
 
80
61
 
81
- exports.fromNullishString = fromNullishString; exports.toNullishString = toNullishString; exports.toFormFormat = toFormFormat; exports.toValidationFormat = toValidationFormat; exports.slugify = slugify;
82
- //# sourceMappingURL=chunk-4AXNPSXG.cjs.map
62
+ exports.fromNullishString = fromNullishString; exports.toNullishString = toNullishString; exports.toFormFormat = toFormFormat; exports.toValidationFormat = toValidationFormat;
63
+ //# sourceMappingURL=chunk-CESGUF6F.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-CESGUF6F.cjs","../src/helpers/nullishFields/nullishFields.ts"],"names":[],"mappings":"AAAA;ACGA,IAAM,WAAA,EAAa,UAAA;AACnB,IAAM,YAAA,EAAc,WAAA;AACpB,IAAM,WAAA,EAAa,UAAA;AAKZ,IAAM,kBAAA,EAAoB,CAAC,KAAA,EAAA,GAA4B;AAC5D,EAAA,GAAA,CAAI,OAAO,MAAA,IAAU,QAAA,EAAU,OAAO,KAAA;AAEtC,EAAA,OAAA,CAAQ,KAAA,EAAO;AAAA,IACb,KAAK,UAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,OAAA;AACE,MAAA,OAAO,KAAA;AAAA,EACX;AACF,CAAA;AAKO,IAAM,gBAAA,EAAkB,CAAC,KAAA,EAAA,GAA4B;AAC1D,EAAA,GAAA,CAAI,MAAA,IAAU,KAAA,GAAQ,MAAA,IAAU,EAAA,EAAI,OAAO,UAAA;AAC3C,EAAA,GAAA,CAAI,MAAA,IAAU,KAAA,EAAO,OAAO,WAAA;AAC5B,EAAA,GAAA,CAAI,MAAA,IAAU,CAAA,EAAG,OAAO,UAAA;AACxB,EAAA,OAAO,KAAA;AACT,CAAA;AA+BO,IAAM,aAAA,EAAe,CAC1B,MAAA,EAAA,GAC4B;AAC5B,EAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACV,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA,EAAG,KAAA,EAAA,GAAU;AACnC,MAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,OAAO,KAAA,CAAM,GAAA,CAAI,eAAe,CAAA;AAAA,MAClC;AAEA,MAAA,GAAA,CAAI,MAAA,GAAS,OAAO,MAAA,IAAU,QAAA,EAAU;AACtC,QAAA,OAAO,MAAA,CAAO,WAAA;AAAA,UACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,EAAA,GAAM,EAAA,IAAM,GAAA,GAAM,EAAA,IAAM,IAAI;AAAA,QACpE,CAAA;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC;AAAA,EACH,CAAA;AACF,CAAA;AA6BO,IAAM,mBAAA,EAAqB,CAChC,SAAA,EAAA,GAC4B;AAC5B,EAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACV,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,CAAC,CAAA,EAAG,KAAA,EAAA,GAAU;AACtC,MAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,OAAO,KAAA,CAAM,GAAA,CAAI,iBAAiB,CAAA;AAAA,MACpC;AAEA,MAAA,GAAA,CAAI,MAAA,GAAS,OAAO,MAAA,IAAU,QAAA,EAAU;AACtC,QAAA,OAAO,MAAA,CAAO,WAAA;AAAA,UACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CACjB,MAAA;AAAA,YACC,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,EAAA,GACP,iBAAA,CAAkB,CAAC,EAAA,IAAM,GAAA,GAAM,iBAAA,CAAkB,CAAC,EAAA,IAAM;AAAA,UAC5D,CAAA,CACC,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,EAAA,GAAM,CAAC,CAAA,EAAG,iBAAA,CAAkB,CAAC,CAAC,CAAC;AAAA,QAC9C,CAAA;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC;AAAA,EACH,CAAA;AACF,CAAA;AD/EA;AACA;AACE;AACA;AACA;AACA;AACF,+KAAC","file":"/home/runner/work/pixels/pixels/packages/uniform/dist/chunk-CESGUF6F.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') return value;\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 === '') return nullString;\n if (value === false) return falseString;\n if (value === 0) return zeroString;\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 = (\n fields: Record<string, unknown>,\n): Record<string, unknown> => {\n return JSON.parse(\n 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]) => v !== '' && v !== null),\n );\n }\n\n return value;\n }),\n );\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>,\n): Record<string, unknown> => {\n return JSON.parse(\n 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(\n ([_key, v]) =>\n fromNullishString(v) !== '' && fromNullishString(v) !== null,\n )\n .map(([k, v]) => [k, fromNullishString(v)]),\n );\n }\n\n return value;\n }),\n );\n};\n"]}
@@ -1,17 +1,16 @@
1
1
  import {
2
2
  FormContext_default,
3
3
  useFormContext
4
- } from "./chunk-MRXNKY72.js";
4
+ } from "./chunk-T4N6TMUL.js";
5
5
  import {
6
- slugify,
7
6
  toValidationFormat
8
- } from "./chunk-IEF2GJ22.js";
7
+ } from "./chunk-UAV6PVB4.js";
9
8
  import {
10
9
  __async
11
10
  } from "./chunk-CRTRMMJ7.js";
12
11
 
13
12
  // src/Form/Form.tsx
14
- import { cn as cn2 } from "@fuf-stack/pixel-utils";
13
+ import { cn as cn2, slugify } from "@fuf-stack/pixel-utils";
15
14
 
16
15
  // src/Form/subcomponents/FormDebugViewer.tsx
17
16
  import { useEffect, useState } from "react";
@@ -148,4 +147,4 @@ export {
148
147
  Form_default,
149
148
  Form_default2
150
149
  };
151
- //# sourceMappingURL=chunk-P4PRVNCH.js.map
150
+ //# sourceMappingURL=chunk-DS7GUNDT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Form/Form.tsx","../src/Form/subcomponents/FormDebugViewer.tsx","../src/Form/index.ts"],"sourcesContent":["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 }) => (\n <div className=\"flex w-full flex-row justify-between gap-6\">\n <form\n className={cn('flex-grow', className)}\n data-testid={slugify(testId || name || '')}\n name={name}\n onSubmit={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 flex-shrink\" />\n )}\n </div>\n )}\n </FormProvider>\n );\n};\n\nexport default Form;\n","import type { VetoError } from '@fuf-stack/veto';\n\nimport { useEffect, useState } from 'react';\nimport { FaTimes } from 'react-icons/fa';\nimport { FaBug, FaBullseye } from 'react-icons/fa6';\n\nimport { cn } from '@fuf-stack/pixel-utils';\nimport { Button, Card, Json } from '@fuf-stack/pixels';\n\nimport { toValidationFormat } from '../../helpers';\nimport { useFormContext } from '../../hooks';\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: { dirtyFields, isValid, isSubmitting },\n setDebugMode,\n validation,\n watch,\n } = useFormContext();\n\n const [validationErrors, setValidationErrors] = useState<\n VetoError['errors'] | null\n >(null);\n\n const validationValues = toValidationFormat(watch());\n const debugTestIdsEnabled = debugMode === 'debug-testids';\n\n useEffect(\n () => {\n const updateValidationErrors = async () => {\n if (validation) {\n const validateResult =\n await validation?.validateAsync(validationValues);\n setValidationErrors(validateResult?.errors);\n }\n };\n updateValidationErrors();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(validationValues)],\n );\n\n if (!debugMode || debugMode === 'off') {\n return (\n <Button\n ariaLabel=\"Enable form debug mode\"\n onClick={() => setDebugMode('debug')}\n className=\"fixed bottom-2.5 right-2.5 w-5 text-default-400\"\n variant=\"light\"\n icon={<FaBug />}\n />\n );\n }\n\n return (\n <Card\n className={cn(className)}\n header={\n <div className=\"flex w-full flex-row justify-between\">\n <span className=\"text-lg\">Debug Mode</span>\n <Button\n icon={<FaTimes className=\"text-danger\" />}\n onClick={() => setDebugMode('off')}\n size=\"sm\"\n variant=\"flat\"\n />\n </div>\n }\n >\n <Button\n variant={debugTestIdsEnabled ? 'solid' : 'light'}\n icon={<FaBullseye />}\n className=\"mb-4 ml-auto mr-auto\"\n onClick={() =>\n setDebugMode(debugMode === 'debug' ? 'debug-testids' : 'debug')\n }\n >\n {debugTestIdsEnabled ? 'Hide CopyButton' : 'Show CopyButton'}\n </Button>\n <Json\n value={{\n values: validationValues,\n errors: validationErrors,\n dirtyFields,\n isValid,\n isSubmitting,\n }}\n />\n </Card>\n );\n};\nexport default FormDebugViewer;\n","import Form from './Form';\n\nexport type { FormProps } from './Form';\n\nexport { Form };\n\nexport default Form;\n"],"mappings":"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","names":["cn","jsx","jsxs","cn","Form_default"]}
@@ -1,18 +1,15 @@
1
1
  import {
2
2
  Controller_default
3
- } from "./chunk-4EJS5FXY.js";
3
+ } from "./chunk-ZI22WT2P.js";
4
4
  import {
5
5
  FieldCopyTestIdButton_default
6
6
  } from "./chunk-2CRY7VDQ.js";
7
7
  import {
8
8
  FieldValidationError_default
9
- } from "./chunk-VX76MJAI.js";
9
+ } from "./chunk-ASPOGQPS.js";
10
10
  import {
11
11
  useFormContext
12
- } from "./chunk-MRXNKY72.js";
13
- import {
14
- slugify
15
- } from "./chunk-IEF2GJ22.js";
12
+ } from "./chunk-T4N6TMUL.js";
16
13
  import {
17
14
  __spreadProps,
18
15
  __spreadValues
@@ -21,8 +18,8 @@ import {
21
18
  // src/Select/Select.tsx
22
19
  import { useState } from "react";
23
20
  import ReactSelect, { components } from "react-select";
24
- import { useSelect } from "@nextui-org/select";
25
- import { cn, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
21
+ import { useSelect } from "@heroui/select";
22
+ import { cn, slugify, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
26
23
  import { jsx, jsxs } from "react/jsx-runtime";
27
24
  var selectVariants = tv({
28
25
  slots: {
@@ -38,14 +35,15 @@ var selectVariants = tv({
38
35
  indicatorsContainer: "gap-1 p-1",
39
36
  indicatorSeparator: "bg-default-300",
40
37
  input: "py-0.5 pl-1",
41
- // See NextUI styles for group-data condition, e.g.: https://github.com/nextui-org/nextui/blob/main/packages/core/theme/src/components/select.ts
38
+ // see HeroUI styles for group-data condition,
39
+ // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts
42
40
  label: 'pointer-events-auto relative bottom-1.5 ml-1 text-small subpixel-antialiased group-data-[invalid=true]:!text-danger group-data-[required=true]:after:ml-0.5 group-data-[required=true]:after:text-danger group-data-[required=true]:after:content-["*"]',
43
41
  loadingIndicator: "",
44
42
  loadingMessage: "",
45
43
  menu: "mt-2 rounded-xl border border-default-200 bg-content1 p-1 shadow-lg",
46
44
  menuList: "",
47
45
  // ensure menu has same z-index as modal so it is visible when rendered in modal
48
- // see: https://github.com/nextui-org/nextui/blob/main/packages/core/theme/src/components/modal.ts (see z-50)
46
+ // see: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/modal.ts (see z-50)
49
47
  menuPortal: "!z-50",
50
48
  multiValue: "items-center gap-1.5 rounded bg-default-100 py-0.5 pl-2 pr-1",
51
49
  multiValueContainer: "",
@@ -245,4 +243,4 @@ export {
245
243
  Select_default,
246
244
  Select_default2
247
245
  };
248
- //# sourceMappingURL=chunk-W66BVPTB.js.map
246
+ //# sourceMappingURL=chunk-ECDLVJLZ.js.map