@zayne-labs/ui-react 0.10.52 → 0.11.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 (62) hide show
  1. package/dist/esm/chunk-pbuEa-1d.js +13 -0
  2. package/dist/esm/{cn-2hIN1AQ7.js → cn-Bbh2G587.js} +2 -3
  3. package/dist/esm/cn-Bbh2G587.js.map +1 -0
  4. package/dist/esm/common/await/index.d.ts +3 -5
  5. package/dist/esm/common/await/index.js +4 -8
  6. package/dist/esm/common/await/index.js.map +1 -1
  7. package/dist/esm/common/client-gate/index.d.ts +1 -1
  8. package/dist/esm/common/client-gate/index.js +29 -3
  9. package/dist/esm/common/client-gate/index.js.map +1 -0
  10. package/dist/esm/common/error-boundary/index.d.ts +2 -2
  11. package/dist/esm/common/error-boundary/index.js +2 -4
  12. package/dist/esm/common/for/index.d.ts +4 -3
  13. package/dist/esm/common/for/index.js +2 -3
  14. package/dist/esm/common/presence/index.d.ts +1 -1
  15. package/dist/esm/common/presence/index.js +2 -4
  16. package/dist/esm/common/show/index.d.ts +4 -4
  17. package/dist/esm/common/show/index.js +2 -4
  18. package/dist/esm/common/slot/index.js +2 -3
  19. package/dist/esm/common/suspense-with-boundary/index.d.ts +1 -2
  20. package/dist/esm/common/suspense-with-boundary/index.js +2 -3
  21. package/dist/esm/common/suspense-with-boundary/index.js.map +1 -1
  22. package/dist/esm/common/switch/index.d.ts +3 -3
  23. package/dist/esm/common/switch/index.js +2 -5
  24. package/dist/esm/common/switch/index.js.map +1 -1
  25. package/dist/esm/common/teleport/index.d.ts +3 -3
  26. package/dist/esm/common/teleport/index.js +2 -3
  27. package/dist/esm/common/teleport/index.js.map +1 -1
  28. package/dist/esm/{useErrorBoundary-CIUZVY-G.js → error-boundary-C4btQhu_.js} +2 -5
  29. package/dist/esm/error-boundary-C4btQhu_.js.map +1 -0
  30. package/dist/esm/{getElementList-CtQvQXjS.js → for-DGTMIS0w.js} +2 -4
  31. package/dist/esm/for-DGTMIS0w.js.map +1 -0
  32. package/dist/esm/{useErrorBoundary-DhOgXZDB.d.ts → index-BUIvQ2wP.d.ts} +6 -2
  33. package/dist/esm/{suspense-with-boundary-CAT0Jm5m.d.ts → index-ClV6w6nv.d.ts} +2 -2
  34. package/dist/esm/{presence-DCY8KkO1.js → presence-CWOGx-be.js} +9 -11
  35. package/dist/esm/{presence-DCY8KkO1.js.map → presence-CWOGx-be.js.map} +1 -1
  36. package/dist/esm/{show-parts-BsJLZhNL.js → show-BzfAw7y3.js} +3 -5
  37. package/dist/esm/show-BzfAw7y3.js.map +1 -0
  38. package/dist/esm/{slot-parts-CAyHw8R-.js → slot-DuwoiC2C.js} +6 -7
  39. package/dist/esm/slot-DuwoiC2C.js.map +1 -0
  40. package/dist/esm/ui/card/index.js +4 -6
  41. package/dist/esm/ui/card/index.js.map +1 -1
  42. package/dist/esm/ui/carousel/index.js +5 -11
  43. package/dist/esm/ui/carousel/index.js.map +1 -1
  44. package/dist/esm/ui/drag-scroll/index.d.ts +97 -63
  45. package/dist/esm/ui/drag-scroll/index.js +122 -41
  46. package/dist/esm/ui/drag-scroll/index.js.map +1 -1
  47. package/dist/esm/ui/drop-zone/index.d.ts +47 -40
  48. package/dist/esm/ui/drop-zone/index.js +23 -24
  49. package/dist/esm/ui/drop-zone/index.js.map +1 -1
  50. package/dist/esm/ui/form/index.d.ts +35 -43
  51. package/dist/esm/ui/form/index.js +13 -19
  52. package/dist/esm/ui/form/index.js.map +1 -1
  53. package/dist/style.css +9 -9
  54. package/package.json +20 -21
  55. package/dist/esm/chunk-BYypO7fO.js +0 -18
  56. package/dist/esm/client-gate-BhR-cK58.js +0 -31
  57. package/dist/esm/client-gate-BhR-cK58.js.map +0 -1
  58. package/dist/esm/cn-2hIN1AQ7.js.map +0 -1
  59. package/dist/esm/getElementList-CtQvQXjS.js.map +0 -1
  60. package/dist/esm/show-parts-BsJLZhNL.js.map +0 -1
  61. package/dist/esm/slot-parts-CAyHw8R-.js.map +0 -1
  62. package/dist/esm/useErrorBoundary-CIUZVY-G.js.map +0 -1
@@ -1,9 +1,8 @@
1
1
  "use client";
2
-
3
- import { t as __exportAll } from "../../chunk-BYypO7fO.js";
4
- import { n as SlotRoot } from "../../slot-parts-CAyHw8R-.js";
5
- import { r as ForWithWrapper } from "../../getElementList-CtQvQXjS.js";
6
- import { t as cnMerge } from "../../cn-2hIN1AQ7.js";
2
+ import { t as __exportAll } from "../../chunk-pbuEa-1d.js";
3
+ import { n as SlotRoot } from "../../slot-DuwoiC2C.js";
4
+ import { r as ForWithWrapper } from "../../for-DGTMIS0w.js";
5
+ import { t as cnMerge } from "../../cn-Bbh2G587.js";
7
6
  import { composeRefs, composeTwoEventHandlers, getMultipleSlots } from "@zayne-labs/toolkit-react/utils";
8
7
  import { defineEnum, isObject } from "@zayne-labs/toolkit-type-helpers";
9
8
  import { Fragment, createElement, useEffect, useId, useMemo, useRef } from "react";
@@ -11,7 +10,6 @@ import { ContextError, createCustomContext, useCallbackRef, useCompareValue, use
11
10
  import { jsx, jsxs } from "react/jsx-runtime";
12
11
  import { dataAttr, on, toArray } from "@zayne-labs/toolkit-core";
13
12
  import { Controller, FormProvider, useFormContext, useFormContext as useFormRootContext, useFormState, useWatch } from "react-hook-form";
14
-
15
13
  //#region src/components/ui/form/icons.tsx
16
14
  const EyeIconClosed = (props) => /* @__PURE__ */ jsx("svg", {
17
15
  xmlns: "http://www.w3.org/2000/svg",
@@ -35,7 +33,6 @@ const EyeIconOpen = (props) => /* @__PURE__ */ jsx("svg", {
35
33
  d: "M12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17"
36
34
  })
37
35
  });
38
-
39
36
  //#endregion
40
37
  //#region src/components/ui/form/utils.ts
41
38
  const getFieldErrorMessage = (options) => {
@@ -63,15 +60,8 @@ const getEyeIcon = (options) => {
63
60
  if (withEyeIcon[iconType]) return withEyeIcon[iconType];
64
61
  return null;
65
62
  };
66
-
67
63
  //#endregion
68
64
  //#region src/components/ui/form/form-context.ts
69
- const useFormMethodsContext = (options = {}) => {
70
- const { strict = true } = options;
71
- const formContext = useFormContext();
72
- if (strict && !formContext) throw new ContextError(`useFormRootContext returned "null". Did you forget to wrap the necessary components within FormRoot?`);
73
- return formContext;
74
- };
75
65
  const [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({
76
66
  defaultValue: null,
77
67
  hookName: "useLaxFormRootContext",
@@ -79,6 +69,12 @@ const [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({
79
69
  providerName: "FormRoot",
80
70
  strict: false
81
71
  });
72
+ const useFormMethodsContext = (options = {}) => {
73
+ const { strict = true } = options;
74
+ const formContext = useFormContext();
75
+ if (strict && !formContext) throw new ContextError(`useFormMethodsContext returned "null". Did you forget to wrap the necessary components within FormRoot?`);
76
+ return formContext;
77
+ };
82
78
  const [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext({
83
79
  hookName: "useFormFieldContext",
84
80
  name: "StrictFormFieldContext",
@@ -95,7 +91,7 @@ const useLaxFormFieldState = (options) => {
95
91
  const { control } = useFormMethodsContext({ strict: false }) ?? {};
96
92
  const { name } = useLaxFormFieldContext() ?? {};
97
93
  const resolvedControl = control ?? options?.control;
98
- const { disabled, errors } = (resolvedControl ? useFormState : () => ({}))({
94
+ const { disabled, errors } = (resolvedControl ? useFormState : (() => ({})))({
99
95
  control: resolvedControl,
100
96
  name: name ?? options?.name
101
97
  });
@@ -110,7 +106,6 @@ const useLaxFormFieldState = (options) => {
110
106
  isInvalid: Boolean(errorMessage)
111
107
  };
112
108
  };
113
-
114
109
  //#endregion
115
110
  //#region src/components/ui/form/form.tsx
116
111
  function FormRoot(props) {
@@ -424,7 +419,7 @@ const FormErrorMessagePrimitive = (props) => {
424
419
  for (const element of errorMessageElements) {
425
420
  element.classList.add(errorAnimationClass);
426
421
  const onAnimationEnd = () => element.classList.remove(errorAnimationClass);
427
- on("animationend", element, onAnimationEnd, {
422
+ on(element, "animationend", onAnimationEnd, {
428
423
  once: true,
429
424
  signal: controller.signal
430
425
  });
@@ -560,7 +555,6 @@ function FormStateSubscribe(props) {
560
555
  });
561
556
  return (typeof children === "function" ? children : render)(formState);
562
557
  }
563
-
564
558
  //#endregion
565
559
  //#region src/components/ui/form/form-parts.ts
566
560
  var form_parts_exports = /* @__PURE__ */ __exportAll({
@@ -585,7 +579,7 @@ var form_parts_exports = /* @__PURE__ */ __exportAll({
585
579
  TextAreaPrimitive: () => FormTextAreaPrimitive,
586
580
  Watch: () => FormWatch
587
581
  });
588
-
589
582
  //#endregion
590
583
  export { form_parts_exports as Form, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldBoundController, FormFieldContext, FormFieldWithController, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormSelect, FormSelectPrimitive, FormStateSubscribe, FormSubmit, FormTextArea, FormTextAreaPrimitive, FormWatch, useStrictFormFieldContext as useFormFieldContext, useFormRootContext };
584
+
591
585
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useHookFormContext","HookFormProvider","ReactFragment","Slot.Root"],"sources":["../../../../src/components/ui/form/icons.tsx","../../../../src/components/ui/form/utils.ts","../../../../src/components/ui/form/form-context.ts","../../../../src/components/ui/form/form.tsx","../../../../src/components/ui/form/form-parts.ts"],"sourcesContent":["export const EyeIconClosed = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M15.175 8.325q.725.725 1.063 1.65t.237 1.9q0 .375-.275.638t-.65.262t-.638-.262t-.262-.638q.125-.65-.075-1.25T13.95 9.6t-1.025-.65t-1.275-.1q-.375 0-.638-.275t-.262-.65t.263-.637t.637-.263q.95-.1 1.875.238t1.65 1.062M12 6q-.475 0-.925.037t-.9.138q-.425.075-.763-.125t-.462-.6t.088-.775t.612-.45q.575-.125 1.163-.175T12 4q3.425 0 6.263 1.8t4.337 4.85q.1.2.15.413t.05.437t-.038.438t-.137.412q-.45 1-1.112 1.875t-1.463 1.6q-.3.275-.7.225t-.65-.4t-.212-.763t.337-.687q.6-.575 1.1-1.25t.875-1.45q-1.25-2.525-3.613-4.012T12 6m0 13q-3.35 0-6.125-1.812T1.5 12.425q-.125-.2-.187-.437T1.25 11.5t.05-.475t.175-.45q.5-1 1.163-1.912T4.15 7L2.075 4.9q-.275-.3-.262-.712T2.1 3.5t.7-.275t.7.275l17 17q.275.275.288.688t-.288.712q-.275.275-.7.275t-.7-.275l-3.5-3.45q-.875.275-1.775.413T12 19M5.55 8.4q-.725.65-1.325 1.425T3.2 11.5q1.25 2.525 3.613 4.013T12 17q.5 0 .975-.062t.975-.138l-.9-.95q-.275.075-.525.113T12 16q-1.875 0-3.188-1.312T7.5 11.5q0-.275.038-.525t.112-.525zm4.2 4.2\"\n\t\t/>\n\t</svg>\n);\n\nexport const EyeIconOpen = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17\"\n\t\t/>\n\t</svg>\n);\n","import { isObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport { createElement } from \"react\";\nimport type { FieldErrors, FieldValues } from \"react-hook-form\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport type { FormErrorMessagePrimitiveProps, FormInputProps } from \"./form\";\nimport type { FormRootContext, RenderIconProps } from \"./form-context\";\nimport { EyeIconClosed, EyeIconOpen } from \"./icons\";\n\nexport const getFieldErrorMessage = (options: {\n\terrors: FieldErrors | undefined;\n\tfieldName: string | undefined;\n\ttype: FormErrorMessagePrimitiveProps<FieldValues>[\"type\"];\n}): string | string[] | null | undefined => {\n\tconst { errors, fieldName, type } = options;\n\n\tif (fieldName === undefined || !errors || Object.keys(errors).length === 0) return;\n\n\tif (type === \"root\") {\n\t\treturn errors.root?.[fieldName]?.message;\n\t}\n\n\t// == Handle nested paths like `notifications.0`\n\tconst pathParts = fieldName.includes(\".\") ? fieldName.split(\".\") : null;\n\n\t// == If there are no path parts, return the error message\n\tif (!pathParts) {\n\t\tconst errorMessage = errors[fieldName]?.message;\n\n\t\treturn errorMessage as string | string[];\n\t}\n\n\tlet extractedError = errors;\n\n\tfor (const part of pathParts) {\n\t\tconst currentError = extractedError[part];\n\n\t\tif (!isObject(currentError)) break;\n\n\t\textractedError = currentError as never;\n\t}\n\n\tconst errorMessage = extractedError.message as unknown as string | string[];\n\n\treturn errorMessage;\n};\n\nexport const getEyeIcon = (options: {\n\tclassNames: FormInputProps[\"classNames\"];\n\ticonType: \"closed\" | \"open\";\n\trenderIconProps: RenderIconProps;\n\twithEyeIcon: FormRootContext[\"withEyeIcon\"];\n}) => {\n\tconst { classNames, iconType, renderIconProps, withEyeIcon } = options;\n\n\tif (!withEyeIcon) {\n\t\treturn null;\n\t}\n\n\tif (withEyeIcon === true) {\n\t\tconst defaultIconMap = {\n\t\t\tclosed: createElement(EyeIconClosed, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\n\t\t\topen: createElement(EyeIconOpen, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\t\t};\n\n\t\treturn defaultIconMap[iconType];\n\t}\n\n\tif (withEyeIcon.renderIcon) {\n\t\treturn withEyeIcon.renderIcon(renderIconProps);\n\t}\n\n\tif (withEyeIcon[iconType]) {\n\t\treturn withEyeIcon[iconType];\n\t}\n\n\treturn null;\n};\n","import { ContextError, createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport type { DiscriminatedRenderProps } from \"@zayne-labs/toolkit-react/utils\";\nimport type { UnionDiscriminator } from \"@zayne-labs/toolkit-type-helpers\";\nimport {\n\tuseFormState,\n\tuseFormContext as useHookFormContext,\n\ttype Control,\n\ttype UseFormReturn,\n\ttype UseFormStateReturn,\n} from \"react-hook-form\";\nimport type { FieldValues, FormInputProps } from \"./form\";\nimport { getFieldErrorMessage } from \"./utils\";\n\ntype FormReturn = UseFormReturn<FieldValues> & { withEyeIcon?: FormInputProps[\"withEyeIcon\"] };\n\ntype UseFormRootContextResult<TStrict extends boolean = true> =\n\tTStrict extends true ? FormReturn : FormReturn | null;\n\nexport const useFormMethodsContext = <TStrict extends boolean = true>(\n\toptions: { strict?: TStrict } = {}\n): UseFormRootContextResult<TStrict> => {\n\tconst { strict = true } = options;\n\n\tconst formContext = useHookFormContext();\n\n\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\tif (strict && !formContext) {\n\t\tthrow new ContextError(\n\t\t\t`useFormRootContext returned \"null\". Did you forget to wrap the necessary components within FormRoot?`\n\t\t);\n\t}\n\n\treturn formContext;\n};\n\nexport type RenderIconProps = {\n\tisPasswordVisible: boolean;\n};\n\ntype EyeIconObject = UnionDiscriminator<\n\t[\n\t\t{ closed: React.ReactNode; open: React.ReactNode },\n\t\t{ renderIcon: (props: RenderIconProps) => React.ReactNode },\n\t]\n>;\n\nexport type FormRootContext = {\n\twithEyeIcon: boolean | EyeIconObject | undefined;\n};\n\nexport const [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({\n\tdefaultValue: null as unknown as FormRootContext,\n\thookName: \"useLaxFormRootContext\",\n\tname: \"LaxFormRootContext\",\n\tproviderName: \"FormRoot\",\n\tstrict: false,\n});\n\n// export const useStrictGetFieldState = () => {\n// \tconst { name } = useStrictFormFieldContext();\n\n// \tconst { getFieldState } = useFormRootContext();\n\n// \tconst fieldState = getFieldState(name);\n\n// \treturn fieldState;\n// };\n\nexport type FieldContextValue = {\n\tformDescriptionId: `${string}-(${string})-form-item-description`;\n\tformItemId: `${string}-(${string})-form-item`;\n\tformMessageId: `${string}-(${string})-form-item-message`;\n\tname: string;\n};\n\nexport type FormFieldContextProps = DiscriminatedRenderProps<\n\t(contextValue: FieldContextValue) => React.ReactNode\n>;\n\nexport const [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext<FieldContextValue>(\n\t{\n\t\thookName: \"useFormFieldContext\",\n\t\tname: \"StrictFormFieldContext\",\n\t\tproviderName: \"FormField\",\n\t}\n);\n\nexport const [LaxFormFieldProvider, useLaxFormFieldContext] = createCustomContext({\n\tdefaultValue: null as unknown as FieldContextValue,\n\thookName: \"useLaxFormFieldContext\",\n\tname: \"LaxFormFieldContext\",\n\tproviderName: \"FormField\",\n\tstrict: false,\n});\n\nexport type FieldState = {\n\terrors?: UseFormStateReturn<FieldValues>[\"errors\"];\n\tisDisabled?: boolean;\n\tisInvalid?: boolean;\n};\n\n// eslint-disable-next-line ts-eslint/no-explicit-any -- any is used here for type compatibility\nexport type AnyControl = Control<any>;\n\ntype FieldStateOptions =\n\t| {\n\t\t\tcontrol: AnyControl | undefined;\n\t\t\tname?: string;\n\t }\n\t| {\n\t\t\tcontrol?: AnyControl;\n\t\t\tname: string | undefined;\n\t };\n\nexport const useLaxFormFieldState = (options?: FieldStateOptions): FieldState => {\n\tconst { control } = useFormMethodsContext({ strict: false }) ?? {};\n\tconst { name } = useLaxFormFieldContext() ?? {};\n\n\tconst resolvedControl = control ?? options?.control;\n\n\tconst getFormState =\n\t\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\t\tresolvedControl ? useFormState : () => ({}) as Partial<ReturnType<typeof useFormState>>;\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\tconst { disabled, errors } = getFormState({ control: resolvedControl, name: name ?? options?.name });\n\n\tconst errorMessage = getFieldErrorMessage({ errors, fieldName: name, type: \"regular\" });\n\n\treturn {\n\t\terrors,\n\t\tisDisabled: disabled,\n\t\tisInvalid: Boolean(errorMessage),\n\t};\n};\n","\"use client\";\n\nimport { dataAttr, on, toArray } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useCompareValue, useToggle } from \"@zayne-labs/toolkit-react\";\nimport {\n\tcomposeRefs,\n\tcomposeTwoEventHandlers,\n\tgetMultipleSlots,\n\ttype DiscriminatedRenderItemProps,\n\ttype DiscriminatedRenderProps,\n\ttype InferProps,\n\ttype PolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport { defineEnum, type AnyString } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Fragment as ReactFragment, useEffect, useId, useMemo, useRef } from \"react\";\nimport {\n\tController,\n\tFormProvider as HookFormProvider,\n\tuseFormState,\n\tuseWatch,\n\ttype Control,\n\ttype ControllerProps,\n\ttype FieldPath,\n\ttype RegisterOptions,\n\ttype FormStateSubscribeProps as StateSubscribeProps,\n\ttype UseFormReturn,\n\ttype WatchProps,\n} from \"react-hook-form\";\nimport { ForWithWrapper } from \"@/components/common/for\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tLaxFormFieldProvider,\n\tLaxFormRootProvider,\n\tStrictFormFieldProvider,\n\tuseFormMethodsContext,\n\tuseLaxFormFieldContext,\n\tuseLaxFormFieldState,\n\tuseLaxFormRootContext,\n\tuseStrictFormFieldContext,\n\ttype FieldContextValue,\n\ttype FieldState,\n\ttype FormFieldContextProps,\n\ttype FormRootContext,\n} from \"./form-context\";\nimport { getEyeIcon, getFieldErrorMessage } from \"./utils\";\n\n// eslint-disable-next-line ts-eslint/no-explicit-any -- Necessary so that arrays can also be accepted\nexport type FieldValues = Record<string, any>;\n\ntype FormRootProps<TFieldValues extends FieldValues, TTransformedValues> = InferProps<\"form\">\n\t& Partial<FormRootContext> & {\n\t\tchildren: React.ReactNode;\n\t\tform: UseFormReturn<TFieldValues, unknown, TTransformedValues>;\n\t};\n\nexport function FormRoot<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\tprops: FormRootProps<TFieldValues, TTransformedValues>\n) {\n\tconst { children, className, form, withEyeIcon, ...restOfProps } = props;\n\n\tconst shallowedComparedWithEyeIcon = useCompareValue(withEyeIcon);\n\n\tconst formContextValue = useMemo(\n\t\t() => ({ withEyeIcon: shallowedComparedWithEyeIcon }),\n\t\t[shallowedComparedWithEyeIcon]\n\t);\n\n\treturn (\n\t\t<HookFormProvider {...form}>\n\t\t\t<LaxFormRootProvider value={formContextValue}>\n\t\t\t\t<form\n\t\t\t\t\tclassName={cnMerge(\"flex flex-col\", className)}\n\t\t\t\t\t{...restOfProps}\n\t\t\t\t\tdata-scope=\"form\"\n\t\t\t\t\tdata-part=\"root\"\n\t\t\t\t\tdata-slot=\"form-root\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</form>\n\t\t\t</LaxFormRootProvider>\n\t\t</HookFormProvider>\n\t);\n}\n\ntype FormFieldProps<TControl, TFieldValues extends FieldValues, TTransformedValues> = (TControl extends (\n\tControl<infer TValues>\n) ?\n\t{\n\t\tcontrol?: never;\n\t\tname: FieldPath<TValues>;\n\t}\n:\t{\n\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\tname: FieldPath<TFieldValues>;\n\t})\n\t& (\n\t\t| (InferProps<\"div\"> & { withWrapper?: true })\n\t\t| { children: React.ReactNode; className?: never; withWrapper: false }\n\t);\n\nexport function FormField<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst { children, className, control, name, withWrapper = true } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ control, name });\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextValue,\n\t\t[name, uniqueId]\n\t);\n\n\tconst WrapperElement = withWrapper ? \"div\" : ReactFragment;\n\n\tconst wrapperElementProps = withWrapper && {\n\t\tclassName: cnMerge(\"flex flex-col gap-2\", className),\n\t\t\"data-part\": \"field\",\n\t\t\"data-scope\": \"form\",\n\t\t\"data-slot\": \"form-field\",\n\t\t/* eslint-disable perfectionist/sort-objects -- order of attributes does not matter */\n\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t/* eslint-enable perfectionist/sort-objects -- order of attributes does not matter */\n\t};\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<WrapperElement {...wrapperElementProps}>{children}</WrapperElement>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\ntype FormFieldControlledFieldProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n> = ControllerProps<TFieldValues, TName, TTransformedValues>;\n\nexport function FormFieldWithController<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldControlledFieldProps<TFieldValues, TName, TTransformedValues>) {\n\tconst formMethods = useFormMethodsContext({ strict: false });\n\n\tconst { control, name, render, ...restOfProps } = props;\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextValue,\n\t\t[name, uniqueId]\n\t);\n\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<Controller\n\t\t\t\t\tcontrol={control ?? (formMethods?.control as never)}\n\t\t\t\t\tname={name}\n\t\t\t\t\trender={render as never}\n\t\t\t\t\t{...(restOfProps as object)}\n\t\t\t\t/>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\ntype FormFieldBoundControllerProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<\n\tControllerProps<TFieldValues, never, TTransformedValues>,\n\t\"control\" | \"name\"\n>;\n\nexport function FormFieldBoundController<\n\tTFieldValues extends FieldValues = Record<string, never>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldBoundControllerProps<TFieldValues, TTransformedValues>) {\n\tconst { control } = useFormMethodsContext();\n\tconst { name } = useStrictFormFieldContext();\n\tconst { render, ...restOfProps } = props;\n\n\treturn (\n\t\t<Controller name={name} control={control} render={render as never} {...(restOfProps as object)} />\n\t);\n}\n\nexport function FormFieldContext(props: FormFieldContextProps) {\n\tconst { children, render } = props;\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tif (typeof children === \"function\") {\n\t\treturn children(fieldContextValues);\n\t}\n\n\treturn render(fieldContextValues);\n}\n\nexport function FormLabel(props: InferProps<\"label\">) {\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tconst { children, htmlFor, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ name: fieldContextValues.name });\n\n\treturn (\n\t\t<label\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"label\"\n\t\t\tdata-slot=\"form-label\"\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\thtmlFor={Object.hasOwn(props, \"htmlFor\") ? htmlFor : fieldContextValues.formItemId}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</label>\n\t);\n}\n\nexport function FormInputGroup(props: InferProps<\"div\">) {\n\tconst { children, className, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState();\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [leftItemSlot, rightItemSlot],\n\t} = getMultipleSlots(children, [FormInputLeftItem, FormInputRightItem]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"input-group\"\n\t\t\tdata-slot=\"form-input-group\"\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tclassName={cnMerge(\"flex items-center justify-between gap-2\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{leftItemSlot}\n\t\t\t{regularChildren}\n\t\t\t{rightItemSlot}\n\t\t</div>\n\t);\n}\n\ntype FormSideItemProps = {\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function FormInputLeftItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"left-item\"\n\t\t\tdata-slot=\"form-left-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputLeftItem.slotSymbol = Symbol(\"input-left-item\");\n\nexport function FormInputRightItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"right-item\"\n\t\t\tdata-slot=\"form-right-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputRightItem.slotSymbol = Symbol(\"input-right-item\");\n\ntype FormInputPrimitiveProps<TFieldValues extends FieldValues> = Omit<\n\tReact.ComponentPropsWithRef<\"input\">,\n\t\"children\"\n> & {\n\tclassNames?: { error?: string; eyeIcon?: string; input?: string; inputGroup?: string };\n\tcontrol?: Control<TFieldValues>;\n\tfieldState?: FieldState;\n\tname?: FieldPath<TFieldValues>;\n\twithEyeIcon?: FormRootContext[\"withEyeIcon\"];\n};\n\ntype FormTextAreaPrimitiveProps<TFieldValues extends FieldValues> =\n\tReact.ComponentPropsWithRef<\"textarea\"> & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\ntype FormSelectPrimitiveProps<TFieldValues extends FieldValues> = React.ComponentPropsWithRef<\"select\"> & {\n\tclassNames?: { base?: string; error?: string };\n\tcontrol?: Control<TFieldValues>;\n\tfieldState?: FieldState;\n\tname?: FieldPath<TFieldValues>;\n};\n\nconst inputTypesWithoutFullWidth = new Set<React.HTMLInputTypeAttribute>([\"checkbox\", \"radio\"]);\n\nexport function FormInputPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormInputPrimitiveProps<TFieldValues> & { rules?: RegisterOptions }\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst formRootContextValues = useLaxFormRootContext();\n\n\tconst {\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tfieldState,\n\t\tid,\n\t\tname,\n\t\trules,\n\t\ttype = \"text\",\n\t\twithEyeIcon,\n\t\t...restOfProps\n\t} = props;\n\n\tconst resolvedWithEyeIcon = withEyeIcon ?? formRootContextValues?.withEyeIcon ?? true;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst [isPasswordVisible, toggleIsPasswordVisible] = useToggle(false);\n\n\tconst shouldHaveEyeIcon = Boolean(resolvedWithEyeIcon) && type === \"password\";\n\n\tconst WrapperElement = shouldHaveEyeIcon ? FormInputGroup : ReactFragment;\n\n\tconst wrapperElementProps = shouldHaveEyeIcon && {\n\t\tclassName: cnMerge(\"w-full\", classNames?.inputGroup, isInvalid && classNames?.error),\n\t};\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\tconst eyeIcon = getEyeIcon({\n\t\tclassNames,\n\t\ticonType: isPasswordVisible ? \"closed\" : \"open\",\n\t\trenderIconProps: { isPasswordVisible },\n\t\twithEyeIcon: resolvedWithEyeIcon,\n\t});\n\n\treturn (\n\t\t<WrapperElement {...wrapperElementProps}>\n\t\t\t<input\n\t\t\t\tdata-scope=\"form\"\n\t\t\t\tdata-part=\"input\"\n\t\t\t\tdata-slot=\"form-input\"\n\t\t\t\taria-describedby={\n\t\t\t\t\t!isInvalid ?\n\t\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t\t}\n\t\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\t\ttype={type === \"password\" && isPasswordVisible ? \"text\" : type}\n\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t!inputTypesWithoutFullWidth.has(type) && \"w-full min-w-0\",\n\t\t\t\t\t`bg-transparent text-sm outline-hidden transition-[color,box-shadow] selection:bg-zu-primary\n\t\t\t\t\tselection:text-zu-primary-foreground file:inline-flex file:h-7 file:border-0\n\t\t\t\t\tfile:bg-transparent file:font-medium file:text-zu-foreground\n\t\t\t\t\tplaceholder:text-zu-muted-foreground focus-visible:outline-hidden\n\t\t\t\t\tdisabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\t\tclassName,\n\t\t\t\t\tclassNames?.input,\n\t\t\t\t\ttype !== \"password\" && isInvalid && classNames?.error\n\t\t\t\t)}\n\t\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t\t{...restOfProps}\n\t\t\t/>\n\n\t\t\t{shouldHaveEyeIcon && (\n\t\t\t\t<FormInputRightItem\n\t\t\t\t\tas=\"button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={toggleIsPasswordVisible}\n\t\t\t\t\tclassName=\"size-5 shrink-0 lg:size-6\"\n\t\t\t\t>\n\t\t\t\t\t{eyeIcon}\n\t\t\t\t</FormInputRightItem>\n\t\t\t)}\n\t\t</WrapperElement>\n\t);\n}\n\nexport function FormTextAreaPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormTextAreaPrimitiveProps<TFieldValues> & { rules?: RegisterOptions }\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<textarea\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"textarea\"\n\t\t\tdata-slot=\"form-textarea\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\nexport function FormSelectPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormSelectPrimitiveProps<TFieldValues> & { rules?: RegisterOptions }\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<select\n\t\t\tdefaultValue=\"\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"select\"\n\t\t\tdata-slot=\"form-select\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={id ?? fieldContextValues?.formItemId}\n\t\t\tname={name ?? fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype PrimitivePropsToOmit = \"control\" | \"formState\" | \"name\";\n\nexport type FormInputProps = Omit<FormInputPrimitiveProps<FieldValues>, PrimitivePropsToOmit> & {\n\trules?: RegisterOptions;\n};\n\nexport type FormTextAreaProps = Omit<FormTextAreaPrimitiveProps<FieldValues>, PrimitivePropsToOmit> & {\n\trules?: RegisterOptions;\n};\n\nexport type FormSelectProps = Omit<FormSelectPrimitiveProps<FieldValues>, PrimitivePropsToOmit> & {\n\trules?: RegisterOptions;\n};\n\ntype CombinedFormInputProps =\n\t| (FormSelectProps & { type: \"select\" })\n\t| (FormTextAreaProps & { type: \"textarea\" })\n\t| FormInputProps;\n\nconst InputTypeMap = defineEnum({\n\tselect: FormSelectPrimitive,\n\ttextarea: FormTextAreaPrimitive,\n});\n\nexport function FormInput(props: CombinedFormInputProps & { rules?: RegisterOptions }) {\n\tconst { onBlur, onChange, ref, rules, type, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormFieldContext();\n\tconst { register } = useFormMethodsContext();\n\n\tconst SelectedInput =\n\t\ttype === \"textarea\" || type === \"select\" ?\n\t\t\tInputTypeMap[type as Exclude<typeof type, AnyString>]\n\t\t:\tFormInputPrimitive;\n\n\tconst registerProps = name ? register(name, rules) : null;\n\n\treturn (\n\t\t<SelectedInput\n\t\t\ttype={type as never}\n\t\t\tname={name}\n\t\t\t{...registerProps}\n\t\t\t{...(restOfProps as NonNullable<unknown>)}\n\t\t\tref={composeRefs(registerProps?.ref, ref)}\n\t\t\tonChange={composeTwoEventHandlers(registerProps?.onChange, onChange)}\n\t\t\tonBlur={composeTwoEventHandlers(registerProps?.onBlur, onBlur)}\n\t\t/>\n\t);\n}\n\nexport function FormTextArea(props: FormTextAreaProps) {\n\treturn <FormInput {...props} type=\"textarea\" />;\n}\n\nexport function FormSelect(props: FormSelectProps) {\n\treturn <FormInput {...props} type=\"select\" />;\n}\n\nexport function FormDescription(props: InferProps<\"p\">) {\n\tconst { className, ...restOfProps } = props;\n\n\tconst { formDescriptionId } = useLaxFormFieldContext() ?? {};\n\n\treturn <p id={formDescriptionId} className={cnMerge(\"text-[12px]\", className)} {...restOfProps} />;\n}\n\ntype ErrorMessageRenderProps = {\n\tclassName: string;\n\t\"data-index\": number;\n\t\"data-part\": \"error-message\";\n\t\"data-scope\": \"form\";\n\t\"data-slot\": \"form-error-message\";\n\tid: string | undefined;\n};\n\ntype ErrorMessageRenderState = { errorMessage: string; errorMessageArray: string[]; index: number };\n\ntype ErrorMessageRenderFn = (context: {\n\tprops: ErrorMessageRenderProps;\n\tstate: ErrorMessageRenderState;\n}) => React.ReactNode;\n\nexport type FormErrorMessagePrimitiveProps<TFieldValues extends FieldValues> =\n\tDiscriminatedRenderItemProps<ErrorMessageRenderFn> & {\n\t\tclassName?: string;\n\t\tclassNames?: {\n\t\t\tcontainer?: string;\n\t\t\terrorMessage?: string;\n\t\t\terrorMessageAnimation?: string;\n\t\t};\n\t\tcontrol?: Control<TFieldValues>; // == Here for type inference of errorField prop\n\t\tdisableErrorAnimation?: boolean;\n\t\tdisableScrollToErrorField?: boolean;\n\t} & (\n\t\t\t| {\n\t\t\t\t\tfieldName: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tfieldName: string;\n\t\t\t\t\ttype: \"root\";\n\t\t\t }\n\t\t);\n\ntype FormErrorMessagePrimitiveType = {\n\t<TFieldValues extends FieldValues>(\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type?: \"regular\" }>\n\t): React.ReactNode;\n\t<TFieldValues extends FieldValues>(\n\t\t// eslint-disable-next-line ts-eslint/unified-signatures -- Using overloads are better because it gives better error messages\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type: \"root\" }>\n\t): React.ReactNode;\n};\n\nexport const FormErrorMessagePrimitive: FormErrorMessagePrimitiveType = (props) => {\n\tconst rootContextValues = useFormMethodsContext({ strict: false });\n\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tdisableErrorAnimation = false,\n\t\tdisableScrollToErrorField = false,\n\t\tfieldName,\n\t\trenderItem,\n\t\ttype = \"regular\",\n\t} = props;\n\n\tconst { errors } = useLaxFormFieldState({\n\t\tcontrol: control ?? rootContextValues?.control,\n\t\tname: fieldName,\n\t});\n\n\tconst { formMessageId } = useLaxFormFieldContext() ?? {};\n\n\tconst containerRef = useRef<HTMLUListElement>(null);\n\n\tconst errorAnimationClass = classNames?.errorMessageAnimation ?? \"animate-shake\";\n\n\tconst getErrorElements = useCallbackRef(() => containerRef.current?.children ?? []);\n\n\tuseEffect(() => {\n\t\tif (disableErrorAnimation) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst controller = new AbortController();\n\n\t\tfor (const element of errorMessageElements) {\n\t\t\telement.classList.add(errorAnimationClass);\n\n\t\t\tconst onAnimationEnd = () => element.classList.remove(errorAnimationClass);\n\n\t\t\ton(\"animationend\", element, onAnimationEnd, { once: true, signal: controller.signal });\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [disableErrorAnimation, errorAnimationClass, errors, getErrorElements]);\n\n\tuseEffect(() => {\n\t\tif (disableScrollToErrorField) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst firstErrorElement = errorMessageElements[0];\n\n\t\tif (!firstErrorElement) return;\n\n\t\t// == Find the input field associated with this error\n\t\tconst inputField = document.querySelector(`[name='${fieldName}']`);\n\n\t\tconst isFocusableInput = inputField?.matches(\n\t\t\t\":is(input, select, textarea, [contenteditable='true'])\"\n\t\t);\n\n\t\t// == Return early if the input field is focusable (Only scrollIntoView for non-focusable fields)\n\t\tif (isFocusableInput) return;\n\n\t\t// == Get the element's position and scroll in one frame\n\t\tconst frameID = requestAnimationFrame(() => {\n\t\t\tconst elementRect = firstErrorElement.getBoundingClientRect();\n\n\t\t\tif (elementRect.top === 0) return;\n\n\t\t\tconst topWithOffset = elementRect.top - 100;\n\n\t\t\twindow.scrollTo({\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t\ttop: window.scrollY + topWithOffset,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frameID);\n\t\t};\n\t}, [disableScrollToErrorField, fieldName, errors, getErrorElements]);\n\n\tconst fieldErrorMessage = getFieldErrorMessage({ errors, fieldName, type });\n\n\tif (!fieldErrorMessage) {\n\t\treturn null;\n\t}\n\n\tconst errorMessageArray = toArray(fieldErrorMessage);\n\n\tif (errorMessageArray.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst getRenderProps = (options: { index: number }): ErrorMessageRenderProps => {\n\t\tconst { index } = options;\n\n\t\treturn {\n\t\t\tclassName: cnMerge(className, classNames?.errorMessage),\n\t\t\t\"data-index\": index,\n\t\t\t\"data-part\": \"error-message\",\n\t\t\t\"data-scope\": \"form\",\n\t\t\t\"data-slot\": \"form-error-message\",\n\t\t\tid: formMessageId,\n\t\t};\n\t};\n\n\tconst getRenderState = (options: { errorMessage: string; index: number }): ErrorMessageRenderState => {\n\t\tconst { errorMessage, index } = options;\n\n\t\treturn {\n\t\t\terrorMessage,\n\t\t\terrorMessageArray,\n\t\t\tindex,\n\t\t};\n\t};\n\n\tconst selectedChildren = typeof children === \"function\" ? children : renderItem;\n\n\treturn (\n\t\t<ForWithWrapper\n\t\t\tref={containerRef}\n\t\t\tclassName={cnMerge(\"flex flex-col\", classNames?.container)}\n\t\t\tdata-part=\"error-message-container\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-slot=\"form-error-message-container\"\n\t\t\teach={errorMessageArray}\n\t\t\trenderItem={(errorMessage, index) => {\n\t\t\t\treturn selectedChildren({\n\t\t\t\t\tprops: getRenderProps({ index }),\n\t\t\t\t\tstate: getRenderState({ errorMessage, index }),\n\t\t\t\t});\n\t\t\t}}\n\t\t/>\n\t);\n};\n\ntype FormErrorMessageProps<TControl, TFieldValues extends FieldValues, TTransformedValues> =\n\t| (TControl extends Control<infer TValues> ?\n\t\t\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: never;\n\t\t\t\terrorField?: FieldPath<TValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t}\n\t :\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>; // == Here for type inference of errorField prop\n\t\t\t\terrorField?: FieldPath<TFieldValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t})\n\t| {\n\t\t\tclassName?: string;\n\t\t\terrorField: string;\n\t\t\ttype: \"root\";\n\t };\n\nexport function FormErrorMessage<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormErrorMessageProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, errorField, type = \"regular\" } = props;\n\n\tconst { control } = useFormMethodsContext();\n\n\treturn (\n\t\t<FormErrorMessagePrimitive\n\t\t\tcontrol={control}\n\t\t\tfieldName={errorField ?? (fieldContextValues?.name as NonNullable<typeof errorField>)}\n\t\t\ttype={type as \"root\"}\n\t\t\trenderItem={({ props: renderProps, state }) => (\n\t\t\t\t<li\n\t\t\t\t\tkey={state.errorMessage}\n\t\t\t\t\t{...renderProps}\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"text-[13px] text-zu-destructive\",\n\t\t\t\t\t\t\"data-[index=0]:mt-1\",\n\t\t\t\t\t\trenderProps.className,\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{state.errorMessage}\n\t\t\t\t</li>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\ntype FormSubmitProps = InferProps<\"button\"> & { asChild?: boolean };\n\nexport function FormSubmit<TElement extends React.ElementType = \"button\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSubmitProps>\n) {\n\tconst { as: Element = \"button\", asChild, children, type = \"submit\", ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component data-part=\"submit\" data-scope=\"form\" data-slot=\"form-submit\" type={type} {...restOfProps}>\n\t\t\t{children}\n\t\t</Component>\n\t);\n}\n\ntype FormWatchProps<\n\tTFieldValues extends FieldValues,\n\tTFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined,\n\tTTransformedValues,\n\tTComputeValue,\n\tTComputedProps extends Omit<\n\t\tWatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>,\n\t\t\"names\"\n\t> = Omit<WatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>, \"names\">,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormWatch<\n\tTFieldValues extends FieldValues = FieldValues,\n\tconst TFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined = undefined,\n\tTTransformedValues = TFieldValues,\n\tTComputeValue = undefined,\n>(props: FormWatchProps<TFieldValues, TFieldName, TTransformedValues, TComputeValue>) {\n\tconst fieldContextValue = useLaxFormFieldContext();\n\n\tconst { children, compute, control, defaultValue, disabled, exact, name, render } = props;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst formValue = useWatch({\n\t\tcompute: compute as never,\n\t\tcontrol: methodsContextValue?.control ?? (control as never),\n\t\tdefaultValue,\n\t\tdisabled,\n\t\texact,\n\t\tname: (name ?? fieldContextValue?.name) as string,\n\t}) as unknown;\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formValue as never);\n\n\treturn resolvedChildren;\n}\n\ntype FormStateSubscribeProps<\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n\tTComputedProps extends StateSubscribeProps<TFieldValues, TTransformedValues> = StateSubscribeProps<\n\t\tTFieldValues,\n\t\tTTransformedValues\n\t>,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormStateSubscribe<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\tprops: FormStateSubscribeProps<TFieldValues, TTransformedValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { children, control, disabled, exact, name, render } = props;\n\n\tconst formState = useFormState({\n\t\tcontrol,\n\t\tdisabled,\n\t\texact,\n\t\tname: name ?? (fieldContextValues?.name as never),\n\t});\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formState as never);\n\n\treturn resolvedChildren;\n}\n","export {\n\tFormDescription as Description,\n\tFormErrorMessage as ErrorMessage,\n\tFormErrorMessagePrimitive as ErrorMessagePrimitive,\n\tFormField as Field,\n\tFormFieldBoundController as FieldBoundController,\n\tFormFieldContext as FieldContext,\n\tFormFieldWithController as FieldWithController,\n\tFormInput as Input,\n\tFormInputGroup as InputGroup,\n\tFormInputLeftItem as InputLeftItem,\n\tFormInputPrimitive as InputPrimitive,\n\tFormInputRightItem as InputRightItem,\n\tFormLabel as Label,\n\tFormRoot as Root,\n\tFormSelect as Select,\n\tFormStateSubscribe as StateSubscribe,\n\tFormSubmit as Submit,\n\tFormTextArea as TextArea,\n\tFormTextAreaPrimitive as TextAreaPrimitive,\n\tFormWatch as Watch,\n} from \"./form\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["useHookFormContext","HookFormProvider","ReactFragment","Slot.Root"],"sources":["../../../../src/components/ui/form/icons.tsx","../../../../src/components/ui/form/utils.ts","../../../../src/components/ui/form/form-context.ts","../../../../src/components/ui/form/form.tsx","../../../../src/components/ui/form/form-parts.ts"],"sourcesContent":["export const EyeIconClosed = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M15.175 8.325q.725.725 1.063 1.65t.237 1.9q0 .375-.275.638t-.65.262t-.638-.262t-.262-.638q.125-.65-.075-1.25T13.95 9.6t-1.025-.65t-1.275-.1q-.375 0-.638-.275t-.262-.65t.263-.637t.637-.263q.95-.1 1.875.238t1.65 1.062M12 6q-.475 0-.925.037t-.9.138q-.425.075-.763-.125t-.462-.6t.088-.775t.612-.45q.575-.125 1.163-.175T12 4q3.425 0 6.263 1.8t4.337 4.85q.1.2.15.413t.05.437t-.038.438t-.137.412q-.45 1-1.112 1.875t-1.463 1.6q-.3.275-.7.225t-.65-.4t-.212-.763t.337-.687q.6-.575 1.1-1.25t.875-1.45q-1.25-2.525-3.613-4.012T12 6m0 13q-3.35 0-6.125-1.812T1.5 12.425q-.125-.2-.187-.437T1.25 11.5t.05-.475t.175-.45q.5-1 1.163-1.912T4.15 7L2.075 4.9q-.275-.3-.262-.712T2.1 3.5t.7-.275t.7.275l17 17q.275.275.288.688t-.288.712q-.275.275-.7.275t-.7-.275l-3.5-3.45q-.875.275-1.775.413T12 19M5.55 8.4q-.725.65-1.325 1.425T3.2 11.5q1.25 2.525 3.613 4.013T12 17q.5 0 .975-.062t.975-.138l-.9-.95q-.275.075-.525.113T12 16q-1.875 0-3.188-1.312T7.5 11.5q0-.275.038-.525t.112-.525zm4.2 4.2\"\n\t\t/>\n\t</svg>\n);\n\nexport const EyeIconOpen = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17\"\n\t\t/>\n\t</svg>\n);\n","import { isObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport { createElement } from \"react\";\nimport type { FieldErrors, FieldValues } from \"react-hook-form\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport type { FormErrorMessagePrimitiveProps, FormInputProps } from \"./form\";\nimport type { FormRootContextType, RenderIconProps } from \"./form-context\";\nimport { EyeIconClosed, EyeIconOpen } from \"./icons\";\n\nexport const getFieldErrorMessage = (options: {\n\terrors: FieldErrors | undefined;\n\tfieldName: string | undefined;\n\ttype: FormErrorMessagePrimitiveProps<FieldValues>[\"type\"];\n}): string | string[] | null | undefined => {\n\tconst { errors, fieldName, type } = options;\n\n\tif (fieldName === undefined || !errors || Object.keys(errors).length === 0) return;\n\n\tif (type === \"root\") {\n\t\treturn errors.root?.[fieldName]?.message;\n\t}\n\n\t// == Handle nested paths like `notifications.0`\n\tconst pathParts = fieldName.includes(\".\") ? fieldName.split(\".\") : null;\n\n\t// == If there are no path parts, return the error message\n\tif (!pathParts) {\n\t\tconst errorMessage = errors[fieldName]?.message;\n\n\t\treturn errorMessage as string | string[];\n\t}\n\n\tlet extractedError = errors;\n\n\tfor (const part of pathParts) {\n\t\tconst currentError = extractedError[part];\n\n\t\tif (!isObject(currentError)) break;\n\n\t\textractedError = currentError as never;\n\t}\n\n\tconst errorMessage = extractedError.message as unknown as string | string[];\n\n\treturn errorMessage;\n};\n\nexport const getEyeIcon = (options: {\n\tclassNames: FormInputProps[\"classNames\"];\n\ticonType: \"closed\" | \"open\";\n\trenderIconProps: RenderIconProps;\n\twithEyeIcon: FormRootContextType[\"withEyeIcon\"];\n}) => {\n\tconst { classNames, iconType, renderIconProps, withEyeIcon } = options;\n\n\tif (!withEyeIcon) {\n\t\treturn null;\n\t}\n\n\tif (withEyeIcon === true) {\n\t\tconst defaultIconMap = {\n\t\t\tclosed: createElement(EyeIconClosed, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\n\t\t\topen: createElement(EyeIconOpen, {\n\t\t\t\tclassName: cnMerge(\"size-full\", classNames?.eyeIcon),\n\t\t\t}),\n\t\t};\n\n\t\treturn defaultIconMap[iconType];\n\t}\n\n\tif (withEyeIcon.renderIcon) {\n\t\treturn withEyeIcon.renderIcon(renderIconProps);\n\t}\n\n\tif (withEyeIcon[iconType]) {\n\t\treturn withEyeIcon[iconType];\n\t}\n\n\treturn null;\n};\n","import { ContextError, createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport type { UnionDiscriminator } from \"@zayne-labs/toolkit-type-helpers\";\nimport {\n\tuseFormState,\n\tuseFormContext as useHookFormContext,\n\ttype Control,\n\ttype FieldValues,\n\ttype UseFormReturn,\n\ttype UseFormStateReturn,\n} from \"react-hook-form\";\nimport { getFieldErrorMessage } from \"./utils\";\n\nexport type RenderIconProps = {\n\tisPasswordVisible: boolean;\n};\n\ntype EyeIconObject = UnionDiscriminator<\n\t[\n\t\t{ closed: React.ReactNode; open: React.ReactNode },\n\t\t{ renderIcon: (props: RenderIconProps) => React.ReactNode },\n\t]\n>;\n\nexport type FormRootContextType = {\n\twithEyeIcon: boolean | EyeIconObject | undefined;\n};\n\nexport const [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({\n\tdefaultValue: null as unknown as FormRootContextType,\n\thookName: \"useLaxFormRootContext\",\n\tname: \"LaxFormRootContext\",\n\tproviderName: \"FormRoot\",\n\tstrict: false,\n});\n\nexport type UseFormRootContextResult<TStrict extends boolean = true> =\n\tTStrict extends true ? UseFormReturn : UseFormReturn | null;\n\nexport const useFormMethodsContext = <TStrict extends boolean = true>(\n\toptions: { strict?: TStrict } = {}\n): UseFormRootContextResult<TStrict> => {\n\tconst { strict = true } = options;\n\n\tconst formContext = useHookFormContext();\n\n\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\tif (strict && !formContext) {\n\t\tthrow new ContextError(\n\t\t\t`useFormMethodsContext returned \"null\". Did you forget to wrap the necessary components within FormRoot?`\n\t\t);\n\t}\n\n\treturn formContext;\n};\n\nexport type FieldContextType = {\n\tformDescriptionId: `${string}-(${string})-form-item-description`;\n\tformItemId: `${string}-(${string})-form-item`;\n\tformMessageId: `${string}-(${string})-form-item-message`;\n\tname: string;\n};\n\nexport const [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext<FieldContextType>({\n\thookName: \"useFormFieldContext\",\n\tname: \"StrictFormFieldContext\",\n\tproviderName: \"FormField\",\n});\n\nexport const [LaxFormFieldProvider, useLaxFormFieldContext] = createCustomContext({\n\tdefaultValue: null as unknown as FieldContextType,\n\thookName: \"useLaxFormFieldContext\",\n\tname: \"LaxFormFieldContext\",\n\tproviderName: \"FormField\",\n\tstrict: false,\n});\n\nexport type FieldState = {\n\terrors?: UseFormStateReturn<FieldValues>[\"errors\"];\n\tisDisabled?: boolean;\n\tisInvalid?: boolean;\n};\n\ntype FieldStateOptions<TFieldValues extends FieldValues, TTransformedValues = TFieldValues> =\n\t| {\n\t\t\tcontrol: Control<TFieldValues, unknown, TTransformedValues> | undefined;\n\t\t\tname?: string;\n\t }\n\t| {\n\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\t\tname: string | undefined;\n\t };\n\nexport const useLaxFormFieldState = <TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\toptions?: FieldStateOptions<TFieldValues, TTransformedValues>\n): FieldState => {\n\tconst { control } = useFormMethodsContext({ strict: false }) ?? {};\n\tconst { name } = useLaxFormFieldContext() ?? {};\n\n\tconst resolvedControl = control ?? options?.control;\n\n\tconst getFormState =\n\t\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\t\tresolvedControl ? useFormState : ((() => ({})) as typeof useFormState);\n\n\t// eslint-disable-next-line react-hooks/hooks -- Ignore\n\tconst { disabled, errors } = getFormState({\n\t\tcontrol: resolvedControl as never,\n\t\tname: name ?? options?.name,\n\t});\n\n\tconst errorMessage = getFieldErrorMessage({ errors, fieldName: name, type: \"regular\" });\n\n\treturn {\n\t\terrors,\n\t\tisDisabled: disabled,\n\t\tisInvalid: Boolean(errorMessage),\n\t};\n};\n","\"use client\";\n\nimport { dataAttr, on, toArray } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useCompareValue, useToggle } from \"@zayne-labs/toolkit-react\";\nimport {\n\tcomposeRefs,\n\tcomposeTwoEventHandlers,\n\tgetMultipleSlots,\n\ttype DiscriminatedRenderItemProps,\n\ttype DiscriminatedRenderProps,\n\ttype InferProps,\n\ttype PolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport { defineEnum, type AnyString } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Fragment as ReactFragment, useEffect, useId, useMemo, useRef } from \"react\";\nimport {\n\tController,\n\tFormProvider as HookFormProvider,\n\tuseFormState,\n\tuseWatch,\n\ttype Control,\n\ttype ControllerProps,\n\ttype FieldPath,\n\ttype FieldValues,\n\ttype RegisterOptions,\n\ttype FormStateSubscribeProps as StateSubscribeProps,\n\ttype UseFormReturn,\n\ttype WatchProps,\n} from \"react-hook-form\";\nimport { ForWithWrapper } from \"@/components/common/for\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tLaxFormFieldProvider,\n\tLaxFormRootProvider,\n\tStrictFormFieldProvider,\n\tuseFormMethodsContext,\n\tuseLaxFormFieldContext,\n\tuseLaxFormFieldState,\n\tuseLaxFormRootContext,\n\tuseStrictFormFieldContext,\n\ttype FieldContextType,\n\ttype FieldState,\n\ttype FormRootContextType,\n} from \"./form-context\";\nimport { getEyeIcon, getFieldErrorMessage } from \"./utils\";\n\nexport type FormRootProps<TFieldValues extends FieldValues, TTransformedValues> = InferProps<\"form\">\n\t& Partial<FormRootContextType> & {\n\t\tchildren: React.ReactNode;\n\t\tform: UseFormReturn<TFieldValues, unknown, TTransformedValues>;\n\t};\n\nexport function FormRoot<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\tprops: FormRootProps<TFieldValues, TTransformedValues>\n) {\n\tconst { children, className, form, withEyeIcon, ...restOfProps } = props;\n\n\tconst shallowedComparedWithEyeIcon = useCompareValue(withEyeIcon);\n\n\tconst formContextValue = useMemo(\n\t\t() => ({ withEyeIcon: shallowedComparedWithEyeIcon }),\n\t\t[shallowedComparedWithEyeIcon]\n\t);\n\n\treturn (\n\t\t<HookFormProvider {...form}>\n\t\t\t<LaxFormRootProvider value={formContextValue}>\n\t\t\t\t<form\n\t\t\t\t\tclassName={cnMerge(\"flex flex-col\", className)}\n\t\t\t\t\t{...restOfProps}\n\t\t\t\t\tdata-scope=\"form\"\n\t\t\t\t\tdata-part=\"root\"\n\t\t\t\t\tdata-slot=\"form-root\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</form>\n\t\t\t</LaxFormRootProvider>\n\t\t</HookFormProvider>\n\t);\n}\n\nexport type FormFieldProps<\n\tTControl,\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n> = (TControl extends Control<infer TValues> ?\n\t{\n\t\tcontrol?: never;\n\t\tname: FieldPath<TValues>;\n\t}\n:\t{\n\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>;\n\t\tname: FieldPath<TFieldValues>;\n\t})\n\t& (\n\t\t| (InferProps<\"div\"> & { withWrapper?: true })\n\t\t| { children: React.ReactNode; className?: never; withWrapper: false }\n\t);\n\nexport function FormField<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst { children, className, control, name, withWrapper = true } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ control, name });\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextType,\n\t\t[name, uniqueId]\n\t);\n\n\tconst WrapperElement = withWrapper ? \"div\" : ReactFragment;\n\n\tconst wrapperElementProps = withWrapper && {\n\t\tclassName: cnMerge(\"flex flex-col gap-2\", className),\n\t\t\"data-part\": \"field\",\n\t\t\"data-scope\": \"form\",\n\t\t\"data-slot\": \"form-field\",\n\t\t/* eslint-disable perfectionist/sort-objects -- order of attributes does not matter */\n\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t/* eslint-enable perfectionist/sort-objects -- order of attributes does not matter */\n\t};\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<WrapperElement {...wrapperElementProps}>{children}</WrapperElement>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\ntype FormFieldControlledFieldProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n> = ControllerProps<TFieldValues, TName, TTransformedValues>;\n\nexport function FormFieldWithController<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldControlledFieldProps<TFieldValues, TName, TTransformedValues>) {\n\tconst formMethods = useFormMethodsContext({ strict: false });\n\n\tconst { control, name, render, ...restOfProps } = props;\n\n\tconst uniqueId = useId();\n\n\tconst fieldContextValue = useMemo(\n\t\t() =>\n\t\t\t({\n\t\t\t\tformDescriptionId: `${name}-(${uniqueId})-form-item-description`,\n\t\t\t\tformItemId: `${name}-(${uniqueId})-form-item`,\n\t\t\t\tformMessageId: `${name}-(${uniqueId})-form-item-message`,\n\t\t\t\tname,\n\t\t\t}) satisfies FieldContextType,\n\t\t[name, uniqueId]\n\t);\n\n\treturn (\n\t\t<StrictFormFieldProvider value={fieldContextValue}>\n\t\t\t<LaxFormFieldProvider value={fieldContextValue}>\n\t\t\t\t<Controller\n\t\t\t\t\tcontrol={control ?? (formMethods?.control as never)}\n\t\t\t\t\tname={name}\n\t\t\t\t\trender={render as never}\n\t\t\t\t\t{...(restOfProps as object)}\n\t\t\t\t/>\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\ntype FormFieldBoundControllerProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<\n\tControllerProps<TFieldValues, never, TTransformedValues>,\n\t\"control\" | \"name\"\n>;\n\nexport function FormFieldBoundController<\n\tTFieldValues extends FieldValues = Record<string, never>,\n\tTTransformedValues = TFieldValues,\n>(props: FormFieldBoundControllerProps<TFieldValues, TTransformedValues>) {\n\tconst { control } = useFormMethodsContext();\n\tconst { name } = useStrictFormFieldContext();\n\tconst { render, ...restOfProps } = props;\n\n\treturn (\n\t\t<Controller name={name} control={control} render={render as never} {...(restOfProps as object)} />\n\t);\n}\n\nexport type FormFieldContextProps = DiscriminatedRenderProps<\n\t(contextValue: FieldContextType) => React.ReactNode\n>;\n\nexport function FormFieldContext(props: FormFieldContextProps) {\n\tconst { children, render } = props;\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tif (typeof children === \"function\") {\n\t\treturn children(fieldContextValues);\n\t}\n\n\treturn render(fieldContextValues);\n}\n\nexport type FormLabelProps = InferProps<\"label\">;\n\nexport function FormLabel(props: FormLabelProps) {\n\tconst fieldContextValues = useStrictFormFieldContext();\n\n\tconst { children, htmlFor, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState({ name: fieldContextValues.name });\n\n\treturn (\n\t\t<label\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"label\"\n\t\t\tdata-slot=\"form-label\"\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\thtmlFor={Object.hasOwn(props, \"htmlFor\") ? htmlFor : fieldContextValues.formItemId}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</label>\n\t);\n}\n\nexport type FormInputGroupProps = InferProps<\"div\">;\n\nexport function FormInputGroup(props: FormInputGroupProps) {\n\tconst { children, className, ...restOfProps } = props;\n\n\tconst { isDisabled, isInvalid } = useLaxFormFieldState();\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [leftItemSlot, rightItemSlot],\n\t} = getMultipleSlots(children, [FormInputLeftItem, FormInputRightItem]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"input-group\"\n\t\t\tdata-slot=\"form-input-group\"\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tclassName={cnMerge(\"flex items-center justify-between gap-2\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{leftItemSlot}\n\t\t\t{regularChildren}\n\t\t\t{rightItemSlot}\n\t\t</div>\n\t);\n}\n\nexport type FormSideItemProps = {\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function FormInputLeftItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"left-item\"\n\t\t\tdata-slot=\"form-left-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputLeftItem.slotSymbol = Symbol(\"input-left-item\");\n\nexport function FormInputRightItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSideItemProps>\n) {\n\tconst { as: Element = \"span\", children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<Element\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"right-item\"\n\t\t\tdata-slot=\"form-right-item\"\n\t\t\tclassName={cnMerge(\"inline-flex items-center justify-center\", className)}\n\t\t\t{...restOfProps}\n\t\t>\n\t\t\t{children}\n\t\t</Element>\n\t);\n}\nFormInputRightItem.slotSymbol = Symbol(\"input-right-item\");\n\ntype RulesProp = {\n\trules?: RegisterOptions;\n};\n\nexport type FormInputPrimitiveProps<TFieldValues extends FieldValues> = Omit<\n\tInferProps<\"input\">,\n\t\"children\"\n>\n\t& RulesProp & {\n\t\tclassNames?: { error?: string; eyeIcon?: string; input?: string; inputGroup?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t\twithEyeIcon?: FormRootContextType[\"withEyeIcon\"];\n\t};\n\nexport type FormTextAreaPrimitiveProps<TFieldValues extends FieldValues> = InferProps<\"textarea\">\n\t& RulesProp & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\nexport type FormSelectPrimitiveProps<TFieldValues extends FieldValues> = InferProps<\"select\">\n\t& RulesProp & {\n\t\tclassNames?: { base?: string; error?: string };\n\t\tcontrol?: Control<TFieldValues>;\n\t\tfieldState?: FieldState;\n\t\tname?: FieldPath<TFieldValues>;\n\t};\n\nconst inputTypesWithoutFullWidth = new Set<React.HTMLInputTypeAttribute>([\"checkbox\", \"radio\"]);\n\nexport function FormInputPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormInputPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst formRootContextValues = useLaxFormRootContext();\n\n\tconst {\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tfieldState,\n\t\tid,\n\t\tname,\n\t\trules,\n\t\ttype = \"text\",\n\t\twithEyeIcon,\n\t\t...restOfProps\n\t} = props;\n\n\tconst resolvedWithEyeIcon = withEyeIcon ?? formRootContextValues?.withEyeIcon ?? true;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst [isPasswordVisible, toggleIsPasswordVisible] = useToggle(false);\n\n\tconst shouldHaveEyeIcon = Boolean(resolvedWithEyeIcon) && type === \"password\";\n\n\tconst WrapperElement = shouldHaveEyeIcon ? FormInputGroup : ReactFragment;\n\n\tconst wrapperElementProps =\n\t\tshouldHaveEyeIcon\n\t\t&& ({\n\t\t\tclassName: cnMerge(\"w-full\", classNames?.inputGroup, isInvalid && classNames?.error),\n\t\t} satisfies InferProps<typeof FormInputGroup>);\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\tconst eyeIcon = getEyeIcon({\n\t\tclassNames,\n\t\ticonType: isPasswordVisible ? \"closed\" : \"open\",\n\t\trenderIconProps: { isPasswordVisible },\n\t\twithEyeIcon: resolvedWithEyeIcon,\n\t});\n\n\treturn (\n\t\t<WrapperElement {...wrapperElementProps}>\n\t\t\t<input\n\t\t\t\tdata-scope=\"form\"\n\t\t\t\tdata-part=\"input\"\n\t\t\t\tdata-slot=\"form-input\"\n\t\t\t\taria-describedby={\n\t\t\t\t\t!isInvalid ?\n\t\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t\t}\n\t\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\t\ttype={type === \"password\" && isPasswordVisible ? \"text\" : type}\n\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t!inputTypesWithoutFullWidth.has(type) && \"w-full min-w-0\",\n\t\t\t\t\t`bg-transparent text-sm outline-hidden transition-[color,box-shadow] selection:bg-zu-primary\n\t\t\t\t\tselection:text-zu-primary-foreground file:inline-flex file:h-7 file:border-0\n\t\t\t\t\tfile:bg-transparent file:font-medium file:text-zu-foreground\n\t\t\t\t\tplaceholder:text-zu-muted-foreground focus-visible:outline-hidden\n\t\t\t\t\tdisabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\t\tclassName,\n\t\t\t\t\tclassNames?.input,\n\t\t\t\t\ttype !== \"password\" && isInvalid && classNames?.error\n\t\t\t\t)}\n\t\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t\t{...restOfProps}\n\t\t\t/>\n\n\t\t\t{shouldHaveEyeIcon && (\n\t\t\t\t<FormInputRightItem\n\t\t\t\t\tas=\"button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={toggleIsPasswordVisible}\n\t\t\t\t\tclassName=\"size-5 shrink-0 lg:size-6\"\n\t\t\t\t>\n\t\t\t\t\t{eyeIcon}\n\t\t\t\t</FormInputRightItem>\n\t\t\t)}\n\t\t</WrapperElement>\n\t);\n}\n\nexport function FormTextAreaPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormTextAreaPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<textarea\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"textarea\"\n\t\t\tdata-slot=\"form-textarea\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={Object.hasOwn(props, \"id\") ? id : fieldContextValues?.formItemId}\n\t\t\tname={Object.hasOwn(props, \"name\") ? name : fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\nexport function FormSelectPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormSelectPrimitiveProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, classNames, control, fieldState, id, name, rules, ...restOfProps } = props;\n\n\tconst fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });\n\n\tconst { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;\n\n\tconst { register } = useFormMethodsContext({ strict: false }) ?? {};\n\n\treturn (\n\t\t<select\n\t\t\tdefaultValue=\"\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"select\"\n\t\t\tdata-slot=\"form-select\"\n\t\t\taria-describedby={\n\t\t\t\t!isInvalid ?\n\t\t\t\t\tfieldContextValues?.formDescriptionId\n\t\t\t\t:\t`${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={dataAttr(isInvalid)}\n\t\t\tdata-disabled={dataAttr(isDisabled)}\n\t\t\tdata-invalid={dataAttr(isInvalid)}\n\t\t\tid={id ?? fieldContextValues?.formItemId}\n\t\t\tname={name ?? fieldContextValues?.name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-zu-muted-foreground\n\t\t\t\tfocus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tclassNames?.base,\n\t\t\t\tisInvalid && classNames?.error\n\t\t\t)}\n\t\t\t{...(Boolean(name) && register?.(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype PrimitivePropsToOmit = \"control\" | \"formState\" | \"name\";\n\nexport type FormInputProps = Omit<FormInputPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormTextAreaProps = Omit<FormTextAreaPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormSelectProps = Omit<FormSelectPrimitiveProps<FieldValues>, PrimitivePropsToOmit>;\n\nexport type FormInputCombinedProps =\n\t| (FormInputProps & { type?: FormInputProps[\"type\"] })\n\t| (FormSelectProps & { type: \"select\" })\n\t| (FormTextAreaProps & { type: \"textarea\" });\n\nconst InputTypeMap = defineEnum({\n\tselect: FormSelectPrimitive,\n\ttextarea: FormTextAreaPrimitive,\n});\n\nexport function FormInput(props: FormInputCombinedProps) {\n\tconst { onBlur, onChange, ref, rules, type, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormFieldContext();\n\tconst { register } = useFormMethodsContext();\n\n\tconst SelectedInput =\n\t\ttype === \"textarea\" || type === \"select\" ?\n\t\t\tInputTypeMap[type as Exclude<typeof type, AnyString>]\n\t\t:\tFormInputPrimitive;\n\n\tconst registerProps = name ? register(name, rules) : null;\n\n\treturn (\n\t\t<SelectedInput\n\t\t\ttype={type as never}\n\t\t\tname={name}\n\t\t\t{...registerProps}\n\t\t\t{...(restOfProps as NonNullable<unknown>)}\n\t\t\tref={composeRefs(registerProps?.ref, ref)}\n\t\t\tonChange={composeTwoEventHandlers(registerProps?.onChange, onChange)}\n\t\t\tonBlur={composeTwoEventHandlers(registerProps?.onBlur, onBlur)}\n\t\t/>\n\t);\n}\n\nexport function FormTextArea(props: FormTextAreaProps) {\n\treturn <FormInput {...props} type=\"textarea\" />;\n}\n\nexport function FormSelect(props: FormSelectProps) {\n\treturn <FormInput {...props} type=\"select\" />;\n}\n\nexport type FormDescriptionProps = InferProps<\"p\">;\n\nexport function FormDescription(props: FormDescriptionProps) {\n\tconst { className, ...restOfProps } = props;\n\n\tconst { formDescriptionId } = useLaxFormFieldContext() ?? {};\n\n\treturn <p id={formDescriptionId} className={cnMerge(\"text-[12px]\", className)} {...restOfProps} />;\n}\n\ntype ErrorMessageRenderProps = {\n\tclassName: string;\n\t\"data-index\": number;\n\t\"data-part\": \"error-message\";\n\t\"data-scope\": \"form\";\n\t\"data-slot\": \"form-error-message\";\n\tid: string | undefined;\n};\n\ntype ErrorMessageRenderState = {\n\terrorMessage: string;\n\terrorMessageArray: string[];\n\tindex: number;\n};\n\ntype ErrorMessageRenderFn = (context: {\n\tprops: ErrorMessageRenderProps;\n\tstate: ErrorMessageRenderState;\n}) => React.ReactNode;\n\nexport type FormErrorMessagePrimitiveProps<TFieldValues extends FieldValues> =\n\tDiscriminatedRenderItemProps<ErrorMessageRenderFn> & {\n\t\tclassName?: string;\n\t\tclassNames?: {\n\t\t\tcontainer?: string;\n\t\t\terrorMessage?: string;\n\t\t\terrorMessageAnimation?: string;\n\t\t};\n\t\tcontrol?: Control<TFieldValues>; // == Here for type inference of errorField prop\n\t\tdisableErrorAnimation?: boolean;\n\t\tdisableScrollToErrorField?: boolean;\n\t} & (\n\t\t\t| {\n\t\t\t\t\tfieldName: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tfieldName: string;\n\t\t\t\t\ttype: \"root\";\n\t\t\t }\n\t\t);\n\ntype FormErrorMessagePrimitiveOverloadType = {\n\t<TFieldValues extends FieldValues>(\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type?: \"regular\" }>\n\t): React.ReactNode;\n\t<TFieldValues extends FieldValues>(\n\t\t// eslint-disable-next-line ts-eslint/unified-signatures -- Using overloads are better because it gives better error messages\n\t\tprops: Extract<FormErrorMessagePrimitiveProps<TFieldValues>, { type: \"root\" }>\n\t): React.ReactNode;\n};\n\nexport const FormErrorMessagePrimitive: FormErrorMessagePrimitiveOverloadType = (props) => {\n\tconst rootContextValues = useFormMethodsContext({ strict: false });\n\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tdisableErrorAnimation = false,\n\t\tdisableScrollToErrorField = false,\n\t\tfieldName,\n\t\trenderItem,\n\t\ttype = \"regular\",\n\t} = props;\n\n\tconst { errors } = useLaxFormFieldState({\n\t\tcontrol: control ?? (rootContextValues?.control as never),\n\t\tname: fieldName,\n\t});\n\n\tconst { formMessageId } = useLaxFormFieldContext() ?? {};\n\n\tconst containerRef = useRef<HTMLUListElement>(null);\n\n\tconst errorAnimationClass = classNames?.errorMessageAnimation ?? \"animate-shake\";\n\n\tconst getErrorElements = useCallbackRef(() => containerRef.current?.children ?? []);\n\n\tuseEffect(() => {\n\t\tif (disableErrorAnimation) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst controller = new AbortController();\n\n\t\tfor (const element of errorMessageElements) {\n\t\t\telement.classList.add(errorAnimationClass);\n\n\t\t\tconst onAnimationEnd = () => element.classList.remove(errorAnimationClass);\n\n\t\t\ton(element, \"animationend\", onAnimationEnd, { once: true, signal: controller.signal });\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [disableErrorAnimation, errorAnimationClass, errors, getErrorElements]);\n\n\tuseEffect(() => {\n\t\tif (disableScrollToErrorField) return;\n\n\t\tif (!errors || Object.keys(errors).length === 0) return;\n\n\t\tconst errorMessageElements = getErrorElements();\n\n\t\tif (errorMessageElements.length === 0) return;\n\n\t\tconst firstErrorElement = errorMessageElements[0];\n\n\t\tif (!firstErrorElement) return;\n\n\t\t// == Find the input field associated with this error\n\t\tconst inputField = document.querySelector(`[name='${fieldName}']`);\n\n\t\tconst isFocusableInput = inputField?.matches(\n\t\t\t\":is(input, select, textarea, [contenteditable='true'])\"\n\t\t);\n\n\t\t// == Return early if the input field is focusable (Only scrollIntoView for non-focusable fields)\n\t\tif (isFocusableInput) return;\n\n\t\t// == Get the element's position and scroll in one frame\n\t\tconst frameID = requestAnimationFrame(() => {\n\t\t\tconst elementRect = firstErrorElement.getBoundingClientRect();\n\n\t\t\tif (elementRect.top === 0) return;\n\n\t\t\tconst topWithOffset = elementRect.top - 100;\n\n\t\t\twindow.scrollTo({\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t\ttop: window.scrollY + topWithOffset,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frameID);\n\t\t};\n\t}, [disableScrollToErrorField, fieldName, errors, getErrorElements]);\n\n\tconst fieldErrorMessage = getFieldErrorMessage({ errors, fieldName, type });\n\n\tif (!fieldErrorMessage) {\n\t\treturn null;\n\t}\n\n\tconst errorMessageArray = toArray(fieldErrorMessage);\n\n\tif (errorMessageArray.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst getRenderProps = (options: { index: number }): ErrorMessageRenderProps => {\n\t\tconst { index } = options;\n\n\t\treturn {\n\t\t\tclassName: cnMerge(className, classNames?.errorMessage),\n\t\t\t\"data-index\": index,\n\t\t\t\"data-part\": \"error-message\",\n\t\t\t\"data-scope\": \"form\",\n\t\t\t\"data-slot\": \"form-error-message\",\n\t\t\tid: formMessageId,\n\t\t};\n\t};\n\n\tconst getRenderState = (options: { errorMessage: string; index: number }): ErrorMessageRenderState => {\n\t\tconst { errorMessage, index } = options;\n\n\t\treturn {\n\t\t\terrorMessage,\n\t\t\terrorMessageArray,\n\t\t\tindex,\n\t\t};\n\t};\n\n\tconst selectedChildren = typeof children === \"function\" ? children : renderItem;\n\n\treturn (\n\t\t<ForWithWrapper\n\t\t\tref={containerRef}\n\t\t\tclassName={cnMerge(\"flex flex-col\", classNames?.container)}\n\t\t\tdata-part=\"error-message-container\"\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-slot=\"form-error-message-container\"\n\t\t\teach={errorMessageArray}\n\t\t\trenderItem={(errorMessage, index) => {\n\t\t\t\treturn selectedChildren({\n\t\t\t\t\tprops: getRenderProps({ index }),\n\t\t\t\t\tstate: getRenderState({ errorMessage, index }),\n\t\t\t\t});\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nexport type FormErrorMessageProps<TControl, TFieldValues extends FieldValues, TTransformedValues> =\n\t| (TControl extends Control<infer TValues> ?\n\t\t\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: never;\n\t\t\t\terrorField?: FieldPath<TValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t}\n\t :\t{\n\t\t\t\tclassName?: string;\n\t\t\t\tcontrol?: Control<TFieldValues, unknown, TTransformedValues>; // == Here for type inference of errorField prop\n\t\t\t\terrorField?: FieldPath<TFieldValues>;\n\t\t\t\ttype?: \"regular\";\n\t\t\t})\n\t| {\n\t\t\tclassName?: string;\n\t\t\terrorField: string;\n\t\t\ttype: \"root\";\n\t };\n\nexport function FormErrorMessage<\n\tTControl,\n\tTFieldValues extends FieldValues = FieldValues,\n\tTTransformedValues = TFieldValues,\n>(props: FormErrorMessageProps<TControl, TFieldValues, TTransformedValues>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, errorField, type = \"regular\" } = props;\n\n\tconst { control } = useFormMethodsContext();\n\n\treturn (\n\t\t<FormErrorMessagePrimitive\n\t\t\tcontrol={control}\n\t\t\tfieldName={errorField ?? (fieldContextValues?.name as NonNullable<typeof errorField>)}\n\t\t\ttype={type as \"root\"}\n\t\t\trenderItem={({ props: renderProps, state }) => (\n\t\t\t\t<li\n\t\t\t\t\tkey={state.errorMessage}\n\t\t\t\t\t{...renderProps}\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"text-[13px] text-zu-destructive\",\n\t\t\t\t\t\t\"data-[index=0]:mt-1\",\n\t\t\t\t\t\trenderProps.className,\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{state.errorMessage}\n\t\t\t\t</li>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nexport type FormSubmitProps = InferProps<\"button\"> & {\n\tasChild?: boolean;\n};\n\nexport function FormSubmit<TElement extends React.ElementType = \"button\">(\n\tprops: PolymorphicPropsStrict<TElement, FormSubmitProps>\n) {\n\tconst { as: Element = \"button\", asChild, children, type = \"submit\", ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component data-part=\"submit\" data-scope=\"form\" data-slot=\"form-submit\" type={type} {...restOfProps}>\n\t\t\t{children}\n\t\t</Component>\n\t);\n}\n\nexport type FormWatchProps<\n\tTFieldValues extends FieldValues,\n\tTFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined,\n\tTTransformedValues,\n\tTComputeValue,\n\tTComputedProps extends Omit<\n\t\tWatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>,\n\t\t\"names\"\n\t> = Omit<WatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>, \"names\">,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormWatch<\n\tTFieldValues extends FieldValues = FieldValues,\n\tconst TFieldName extends\n\t\t| Array<FieldPath<TFieldValues>>\n\t\t| FieldPath<TFieldValues>\n\t\t| ReadonlyArray<FieldPath<TFieldValues>>\n\t\t| undefined = undefined,\n\tTTransformedValues = TFieldValues,\n\tTComputeValue = undefined,\n>(props: FormWatchProps<TFieldValues, TFieldName, TTransformedValues, TComputeValue>) {\n\tconst fieldContextValue = useLaxFormFieldContext();\n\n\tconst { children, compute, control, defaultValue, disabled, exact, name, render } = props;\n\n\tconst methodsContextValue = useFormMethodsContext({ strict: false });\n\n\tconst formValue = useWatch({\n\t\tcompute: compute as never,\n\t\tcontrol: methodsContextValue?.control ?? (control as never),\n\t\tdefaultValue,\n\t\tdisabled,\n\t\texact,\n\t\tname: (name ?? fieldContextValue?.name) as string,\n\t}) as unknown;\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formValue as never);\n\n\treturn resolvedChildren;\n}\n\nexport type FormStateSubscribeProps<\n\tTFieldValues extends FieldValues,\n\tTTransformedValues,\n\tTComputedProps extends StateSubscribeProps<TFieldValues, TTransformedValues> = StateSubscribeProps<\n\t\tTFieldValues,\n\t\tTTransformedValues\n\t>,\n> = DiscriminatedRenderProps<TComputedProps[\"render\"]> & Omit<TComputedProps, \"render\">;\n\nexport function FormStateSubscribe<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(\n\tprops: FormStateSubscribeProps<TFieldValues, TTransformedValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { children, control, disabled, exact, name, render } = props;\n\n\tconst formState = useFormState({\n\t\tcontrol,\n\t\tdisabled,\n\t\texact,\n\t\tname: name ?? (fieldContextValues?.name as never),\n\t});\n\n\tconst selectedChildren = typeof children === \"function\" ? children : render;\n\n\tconst resolvedChildren = selectedChildren(formState as never);\n\n\treturn resolvedChildren;\n}\n","export {\n\tFormDescription as Description,\n\tFormErrorMessage as ErrorMessage,\n\tFormErrorMessagePrimitive as ErrorMessagePrimitive,\n\tFormField as Field,\n\tFormFieldBoundController as FieldBoundController,\n\tFormFieldContext as FieldContext,\n\tFormFieldWithController as FieldWithController,\n\tFormInput as Input,\n\tFormInputGroup as InputGroup,\n\tFormInputLeftItem as InputLeftItem,\n\tFormInputPrimitive as InputPrimitive,\n\tFormInputRightItem as InputRightItem,\n\tFormLabel as Label,\n\tFormRoot as Root,\n\tFormSelect as Select,\n\tFormStateSubscribe as StateSubscribe,\n\tFormSubmit as Submit,\n\tFormTextArea as TextArea,\n\tFormTextAreaPrimitive as TextAreaPrimitive,\n\tFormWatch as Watch,\n} from \"./form\";\n"],"mappings":";;;;;;;;;;;;;AAAA,MAAa,iBAAiB,UAC7B,oBAAC,OAAD;CAAK,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WACxF,oBAAC,QAAD;EACC,MAAK;EACL,GAAE;EACD,CAAA;CACG,CAAA;AAGP,MAAa,eAAe,UAC3B,oBAAC,OAAD;CAAK,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WACxF,oBAAC,QAAD;EACC,MAAK;EACL,GAAE;EACD,CAAA;CACG,CAAA;;;ACPP,MAAa,wBAAwB,YAIO;CAC3C,MAAM,EAAE,QAAQ,WAAW,SAAS;AAEpC,KAAI,cAAc,KAAA,KAAa,CAAC,UAAU,OAAO,KAAK,OAAO,CAAC,WAAW,EAAG;AAE5E,KAAI,SAAS,OACZ,QAAO,OAAO,OAAO,YAAY;CAIlC,MAAM,YAAY,UAAU,SAAS,IAAI,GAAG,UAAU,MAAM,IAAI,GAAG;AAGnE,KAAI,CAAC,UAGJ,QAFqB,OAAO,YAAY;CAKzC,IAAI,iBAAiB;AAErB,MAAK,MAAM,QAAQ,WAAW;EAC7B,MAAM,eAAe,eAAe;AAEpC,MAAI,CAAC,SAAS,aAAa,CAAE;AAE7B,mBAAiB;;AAKlB,QAFqB,eAAe;;AAKrC,MAAa,cAAc,YAKrB;CACL,MAAM,EAAE,YAAY,UAAU,iBAAiB,gBAAgB;AAE/D,KAAI,CAAC,YACJ,QAAO;AAGR,KAAI,gBAAgB,KAWnB,QAVuB;EACtB,QAAQ,cAAc,eAAe,EACpC,WAAW,QAAQ,aAAa,YAAY,QAAQ,EACpD,CAAC;EAEF,MAAM,cAAc,aAAa,EAChC,WAAW,QAAQ,aAAa,YAAY,QAAQ,EACpD,CAAC;EACF,CAEqB;AAGvB,KAAI,YAAY,WACf,QAAO,YAAY,WAAW,gBAAgB;AAG/C,KAAI,YAAY,UACf,QAAO,YAAY;AAGpB,QAAO;;;;ACrDR,MAAa,CAAC,qBAAqB,yBAAyB,oBAAoB;CAC/E,cAAc;CACd,UAAU;CACV,MAAM;CACN,cAAc;CACd,QAAQ;CACR,CAAC;AAKF,MAAa,yBACZ,UAAgC,EAAE,KACK;CACvC,MAAM,EAAE,SAAS,SAAS;CAE1B,MAAM,cAAcA,gBAAoB;AAGxC,KAAI,UAAU,CAAC,YACd,OAAM,IAAI,aACT,0GACA;AAGF,QAAO;;AAUR,MAAa,CAAC,yBAAyB,6BAA6B,oBAAsC;CACzG,UAAU;CACV,MAAM;CACN,cAAc;CACd,CAAC;AAEF,MAAa,CAAC,sBAAsB,0BAA0B,oBAAoB;CACjF,cAAc;CACd,UAAU;CACV,MAAM;CACN,cAAc;CACd,QAAQ;CACR,CAAC;AAkBF,MAAa,wBACZ,YACgB;CAChB,MAAM,EAAE,YAAY,sBAAsB,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE;CAClE,MAAM,EAAE,SAAS,wBAAwB,IAAI,EAAE;CAE/C,MAAM,kBAAkB,WAAW,SAAS;CAO5C,MAAM,EAAE,UAAU,YAHjB,kBAAkB,uBAAwB,EAAE,IAGH;EACzC,SAAS;EACT,MAAM,QAAQ,SAAS;EACvB,CAAC;CAEF,MAAM,eAAe,qBAAqB;EAAE;EAAQ,WAAW;EAAM,MAAM;EAAW,CAAC;AAEvF,QAAO;EACN;EACA,YAAY;EACZ,WAAW,QAAQ,aAAa;EAChC;;;;AC/DF,SAAgB,SACf,OACC;CACD,MAAM,EAAE,UAAU,WAAW,MAAM,aAAa,GAAG,gBAAgB;CAEnE,MAAM,+BAA+B,gBAAgB,YAAY;CAEjE,MAAM,mBAAmB,eACjB,EAAE,aAAa,8BAA8B,GACpD,CAAC,6BAA6B,CAC9B;AAED,QACC,oBAACC,cAAD;EAAkB,GAAI;YACrB,oBAAC,qBAAD;GAAqB,OAAO;aAC3B,oBAAC,QAAD;IACC,WAAW,QAAQ,iBAAiB,UAAU;IAC9C,GAAI;IACJ,cAAW;IACX,aAAU;IACV,aAAU;IAET;IACK,CAAA;GACc,CAAA;EACJ,CAAA;;AAsBrB,SAAgB,UAId,OAAmE;CACpE,MAAM,EAAE,UAAU,WAAW,SAAS,MAAM,cAAc,SAAS;CAEnE,MAAM,EAAE,YAAY,cAAc,qBAAqB;EAAE;EAAS;EAAM,CAAC;CAEzE,MAAM,WAAW,OAAO;CAExB,MAAM,oBAAoB,eAEvB;EACA,mBAAmB,GAAG,KAAK,IAAI,SAAS;EACxC,YAAY,GAAG,KAAK,IAAI,SAAS;EACjC,eAAe,GAAG,KAAK,IAAI,SAAS;EACpC;EACA,GACF,CAAC,MAAM,SAAS,CAChB;AAcD,QACC,oBAAC,yBAAD;EAAyB,OAAO;YAC/B,oBAAC,sBAAD;GAAsB,OAAO;aAC5B,oBAfoB,cAAc,QAAQC,UAe1C;IAAgB,GAbS,eAAe;KAC1C,WAAW,QAAQ,uBAAuB,UAAU;KACpD,aAAa;KACb,cAAc;KACd,aAAa;KAEb,iBAAiB,SAAS,WAAW;KACrC,gBAAgB,SAAS,UAAU;KAEnC;IAI4C;IAA0B,CAAA;GAC9C,CAAA;EACE,CAAA;;AAU5B,SAAgB,wBAId,OAA+E;CAChF,MAAM,cAAc,sBAAsB,EAAE,QAAQ,OAAO,CAAC;CAE5D,MAAM,EAAE,SAAS,MAAM,QAAQ,GAAG,gBAAgB;CAElD,MAAM,WAAW,OAAO;CAExB,MAAM,oBAAoB,eAEvB;EACA,mBAAmB,GAAG,KAAK,IAAI,SAAS;EACxC,YAAY,GAAG,KAAK,IAAI,SAAS;EACjC,eAAe,GAAG,KAAK,IAAI,SAAS;EACpC;EACA,GACF,CAAC,MAAM,SAAS,CAChB;AAED,QACC,oBAAC,yBAAD;EAAyB,OAAO;YAC/B,oBAAC,sBAAD;GAAsB,OAAO;aAC5B,oBAAC,YAAD;IACC,SAAS,WAAY,aAAa;IAC5B;IACE;IACR,GAAK;IACJ,CAAA;GACoB,CAAA;EACE,CAAA;;AAS5B,SAAgB,yBAGd,OAAwE;CACzE,MAAM,EAAE,YAAY,uBAAuB;CAC3C,MAAM,EAAE,SAAS,2BAA2B;CAC5C,MAAM,EAAE,QAAQ,GAAG,gBAAgB;AAEnC,QACC,oBAAC,YAAD;EAAkB;EAAe;EAAiB;EAAiB,GAAK;EAA0B,CAAA;;AAQpG,SAAgB,iBAAiB,OAA8B;CAC9D,MAAM,EAAE,UAAU,WAAW;CAC7B,MAAM,qBAAqB,2BAA2B;AAEtD,KAAI,OAAO,aAAa,WACvB,QAAO,SAAS,mBAAmB;AAGpC,QAAO,OAAO,mBAAmB;;AAKlC,SAAgB,UAAU,OAAuB;CAChD,MAAM,qBAAqB,2BAA2B;CAEtD,MAAM,EAAE,UAAU,SAAS,GAAG,gBAAgB;CAE9C,MAAM,EAAE,YAAY,cAAc,qBAAqB,EAAE,MAAM,mBAAmB,MAAM,CAAC;AAEzF,QACC,oBAAC,SAAD;EACC,cAAW;EACX,aAAU;EACV,aAAU;EACV,iBAAe,SAAS,WAAW;EACnC,gBAAc,SAAS,UAAU;EACjC,SAAS,OAAO,OAAO,OAAO,UAAU,GAAG,UAAU,mBAAmB;EACxE,GAAI;EAEH;EACM,CAAA;;AAMV,SAAgB,eAAe,OAA4B;CAC1D,MAAM,EAAE,UAAU,WAAW,GAAG,gBAAgB;CAEhD,MAAM,EAAE,YAAY,cAAc,sBAAsB;CAExD,MAAM,EACL,iBACA,OAAO,CAAC,cAAc,mBACnB,iBAAiB,UAAU,CAAC,mBAAmB,mBAAmB,CAAC;AAEvE,QACC,qBAAC,OAAD;EACC,cAAW;EACX,aAAU;EACV,aAAU;EACV,gBAAc,SAAS,UAAU;EACjC,iBAAe,SAAS,WAAW;EACnC,WAAW,QAAQ,2CAA2C,UAAU;EACxE,GAAI;YAPL;GASE;GACA;GACA;GACI;;;AASR,SAAgB,kBACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,QAAQ,UAAU,WAAW,GAAG,gBAAgB;AAEtE,QACC,oBAAC,SAAD;EACC,cAAW;EACX,aAAU;EACV,aAAU;EACV,WAAW,QAAQ,2CAA2C,UAAU;EACxE,GAAI;EAEH;EACQ,CAAA;;AAGZ,kBAAkB,aAAa,OAAO,kBAAkB;AAExD,SAAgB,mBACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,QAAQ,UAAU,WAAW,GAAG,gBAAgB;AAEtE,QACC,oBAAC,SAAD;EACC,cAAW;EACX,aAAU;EACV,aAAU;EACV,WAAW,QAAQ,2CAA2C,UAAU;EACxE,GAAI;EAEH;EACQ,CAAA;;AAGZ,mBAAmB,aAAa,OAAO,mBAAmB;AAkC1D,MAAM,6BAA6B,IAAI,IAAkC,CAAC,YAAY,QAAQ,CAAC;AAE/F,SAAgB,mBACf,OACC;CACD,MAAM,qBAAqB,wBAAwB;CAEnD,MAAM,wBAAwB,uBAAuB;CAErD,MAAM,EACL,WACA,YACA,SACA,YACA,IACA,MACA,OACA,OAAO,QACP,aACA,GAAG,gBACA;CAEJ,MAAM,sBAAsB,eAAe,uBAAuB,eAAe;CAEjF,MAAM,6BAA6B,qBAAqB;EAAE;EAAS;EAAM,CAAC;CAE1E,MAAM,EAAE,YAAY,cAAc,cAAc;CAEhD,MAAM,CAAC,mBAAmB,2BAA2B,UAAU,MAAM;CAErE,MAAM,oBAAoB,QAAQ,oBAAoB,IAAI,SAAS;CAEnE,MAAM,iBAAiB,oBAAoB,iBAAiBA;CAE5D,MAAM,sBACL,qBACI,EACH,WAAW,QAAQ,UAAU,YAAY,YAAY,aAAa,YAAY,MAAM,EACpF;CAEF,MAAM,EAAE,aAAa,sBAAsB,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE;CAEnE,MAAM,UAAU,WAAW;EAC1B;EACA,UAAU,oBAAoB,WAAW;EACzC,iBAAiB,EAAE,mBAAmB;EACtC,aAAa;EACb,CAAC;AAEF,QACC,qBAAC,gBAAD;EAAgB,GAAI;YAApB,CACC,oBAAC,SAAD;GACC,cAAW;GACX,aAAU;GACV,aAAU;GACV,oBACC,CAAC,YACA,oBAAoB,oBACnB,GAAG,oBAAoB,kBAAkB,GAAG,oBAAoB;GAEnE,gBAAc,SAAS,UAAU;GACjC,gBAAc,SAAS,UAAU;GACjC,iBAAe,SAAS,WAAW;GACnC,IAAI,OAAO,OAAO,OAAO,KAAK,GAAG,KAAK,oBAAoB;GAC1D,MAAM,OAAO,OAAO,OAAO,OAAO,GAAG,OAAO,oBAAoB;GAChE,MAAM,SAAS,cAAc,oBAAoB,SAAS;GAC1D,WAAW,QACV,CAAC,2BAA2B,IAAI,KAAK,IAAI,kBACzC;;;;oFAKA,WACA,YAAY,OACZ,SAAS,cAAc,aAAa,YAAY,MAChD;GACD,GAAK,QAAQ,KAAK,IAAI,WAAW,MAAM,MAAM;GAC7C,GAAI;GACH,CAAA,EAED,qBACA,oBAAC,oBAAD;GACC,IAAG;GACH,MAAK;GACL,SAAS;GACT,WAAU;aAET;GACmB,CAAA,CAEN;;;AAInB,SAAgB,sBACf,OACC;CACD,MAAM,qBAAqB,wBAAwB;CAEnD,MAAM,EAAE,WAAW,YAAY,SAAS,YAAY,IAAI,MAAM,OAAO,GAAG,gBAAgB;CAExF,MAAM,6BAA6B,qBAAqB;EAAE;EAAS;EAAM,CAAC;CAE1E,MAAM,EAAE,YAAY,cAAc,cAAc;CAEhD,MAAM,EAAE,aAAa,sBAAsB,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE;AAEnE,QACC,oBAAC,YAAD;EACC,cAAW;EACX,aAAU;EACV,aAAU;EACV,oBACC,CAAC,YACA,oBAAoB,oBACnB,GAAG,oBAAoB,kBAAkB,GAAG,oBAAoB;EAEnE,gBAAc,SAAS,UAAU;EACjC,iBAAe,SAAS,WAAW;EACnC,gBAAc,SAAS,UAAU;EACjC,IAAI,OAAO,OAAO,OAAO,KAAK,GAAG,KAAK,oBAAoB;EAC1D,MAAM,OAAO,OAAO,OAAO,OAAO,GAAG,OAAO,oBAAoB;EAChE,WAAW,QACV;mFAEA,WACA,YAAY,MACZ,aAAa,YAAY,MACzB;EACD,GAAK,QAAQ,KAAK,IAAI,WAAW,MAAM,MAAM;EAC7C,GAAI;EACH,CAAA;;AAGJ,SAAgB,oBACf,OACC;CACD,MAAM,qBAAqB,wBAAwB;CAEnD,MAAM,EAAE,WAAW,YAAY,SAAS,YAAY,IAAI,MAAM,OAAO,GAAG,gBAAgB;CAExF,MAAM,6BAA6B,qBAAqB;EAAE;EAAS;EAAM,CAAC;CAE1E,MAAM,EAAE,YAAY,cAAc,cAAc;CAEhD,MAAM,EAAE,aAAa,sBAAsB,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE;AAEnE,QACC,oBAAC,UAAD;EACC,cAAa;EACb,cAAW;EACX,aAAU;EACV,aAAU;EACV,oBACC,CAAC,YACA,oBAAoB,oBACnB,GAAG,oBAAoB,kBAAkB,GAAG,oBAAoB;EAEnE,gBAAc,SAAS,UAAU;EACjC,iBAAe,SAAS,WAAW;EACnC,gBAAc,SAAS,UAAU;EACjC,IAAI,MAAM,oBAAoB;EAC9B,MAAM,QAAQ,oBAAoB;EAClC,WAAW,QACV;mFAEA,WACA,YAAY,MACZ,aAAa,YAAY,MACzB;EACD,GAAK,QAAQ,KAAK,IAAI,WAAW,MAAM,MAAM;EAC7C,GAAI;EACH,CAAA;;AAiBJ,MAAM,eAAe,WAAW;CAC/B,QAAQ;CACR,UAAU;CACV,CAAC;AAEF,SAAgB,UAAU,OAA+B;CACxD,MAAM,EAAE,QAAQ,UAAU,KAAK,OAAO,MAAM,GAAG,gBAAgB;CAE/D,MAAM,EAAE,SAAS,2BAA2B;CAC5C,MAAM,EAAE,aAAa,uBAAuB;CAE5C,MAAM,gBACL,SAAS,cAAc,SAAS,WAC/B,aAAa,QACZ;CAEH,MAAM,gBAAgB,OAAO,SAAS,MAAM,MAAM,GAAG;AAErD,QACC,oBAAC,eAAD;EACO;EACA;EACN,GAAI;EACJ,GAAK;EACL,KAAK,YAAY,eAAe,KAAK,IAAI;EACzC,UAAU,wBAAwB,eAAe,UAAU,SAAS;EACpE,QAAQ,wBAAwB,eAAe,QAAQ,OAAO;EAC7D,CAAA;;AAIJ,SAAgB,aAAa,OAA0B;AACtD,QAAO,oBAAC,WAAD;EAAW,GAAI;EAAO,MAAK;EAAa,CAAA;;AAGhD,SAAgB,WAAW,OAAwB;AAClD,QAAO,oBAAC,WAAD;EAAW,GAAI;EAAO,MAAK;EAAW,CAAA;;AAK9C,SAAgB,gBAAgB,OAA6B;CAC5D,MAAM,EAAE,WAAW,GAAG,gBAAgB;CAEtC,MAAM,EAAE,sBAAsB,wBAAwB,IAAI,EAAE;AAE5D,QAAO,oBAAC,KAAD;EAAG,IAAI;EAAmB,WAAW,QAAQ,eAAe,UAAU;EAAE,GAAI;EAAe,CAAA;;AAuDnG,MAAa,6BAAoE,UAAU;CAC1F,MAAM,oBAAoB,sBAAsB,EAAE,QAAQ,OAAO,CAAC;CAElE,MAAM,EACL,UACA,WACA,YACA,SACA,wBAAwB,OACxB,4BAA4B,OAC5B,WACA,YACA,OAAO,cACJ;CAEJ,MAAM,EAAE,WAAW,qBAAqB;EACvC,SAAS,WAAY,mBAAmB;EACxC,MAAM;EACN,CAAC;CAEF,MAAM,EAAE,kBAAkB,wBAAwB,IAAI,EAAE;CAExD,MAAM,eAAe,OAAyB,KAAK;CAEnD,MAAM,sBAAsB,YAAY,yBAAyB;CAEjE,MAAM,mBAAmB,qBAAqB,aAAa,SAAS,YAAY,EAAE,CAAC;AAEnF,iBAAgB;AACf,MAAI,sBAAuB;AAE3B,MAAI,CAAC,UAAU,OAAO,KAAK,OAAO,CAAC,WAAW,EAAG;EAEjD,MAAM,uBAAuB,kBAAkB;AAE/C,MAAI,qBAAqB,WAAW,EAAG;EAEvC,MAAM,aAAa,IAAI,iBAAiB;AAExC,OAAK,MAAM,WAAW,sBAAsB;AAC3C,WAAQ,UAAU,IAAI,oBAAoB;GAE1C,MAAM,uBAAuB,QAAQ,UAAU,OAAO,oBAAoB;AAE1E,MAAG,SAAS,gBAAgB,gBAAgB;IAAE,MAAM;IAAM,QAAQ,WAAW;IAAQ,CAAC;;AAGvF,eAAa;AACZ,cAAW,OAAO;;IAEjB;EAAC;EAAuB;EAAqB;EAAQ;EAAiB,CAAC;AAE1E,iBAAgB;AACf,MAAI,0BAA2B;AAE/B,MAAI,CAAC,UAAU,OAAO,KAAK,OAAO,CAAC,WAAW,EAAG;EAEjD,MAAM,uBAAuB,kBAAkB;AAE/C,MAAI,qBAAqB,WAAW,EAAG;EAEvC,MAAM,oBAAoB,qBAAqB;AAE/C,MAAI,CAAC,kBAAmB;AAUxB,MAPmB,SAAS,cAAc,UAAU,UAAU,IAAI,EAE7B,QACpC,yDACA,CAGqB;EAGtB,MAAM,UAAU,4BAA4B;GAC3C,MAAM,cAAc,kBAAkB,uBAAuB;AAE7D,OAAI,YAAY,QAAQ,EAAG;GAE3B,MAAM,gBAAgB,YAAY,MAAM;AAExC,UAAO,SAAS;IACf,UAAU;IACV,KAAK,OAAO,UAAU;IACtB,CAAC;IACD;AAEF,eAAa;AACZ,wBAAqB,QAAQ;;IAE5B;EAAC;EAA2B;EAAW;EAAQ;EAAiB,CAAC;CAEpE,MAAM,oBAAoB,qBAAqB;EAAE;EAAQ;EAAW;EAAM,CAAC;AAE3E,KAAI,CAAC,kBACJ,QAAO;CAGR,MAAM,oBAAoB,QAAQ,kBAAkB;AAEpD,KAAI,kBAAkB,WAAW,EAChC,QAAO;CAGR,MAAM,kBAAkB,YAAwD;EAC/E,MAAM,EAAE,UAAU;AAElB,SAAO;GACN,WAAW,QAAQ,WAAW,YAAY,aAAa;GACvD,cAAc;GACd,aAAa;GACb,cAAc;GACd,aAAa;GACb,IAAI;GACJ;;CAGF,MAAM,kBAAkB,YAA8E;EACrG,MAAM,EAAE,cAAc,UAAU;AAEhC,SAAO;GACN;GACA;GACA;GACA;;CAGF,MAAM,mBAAmB,OAAO,aAAa,aAAa,WAAW;AAErE,QACC,oBAAC,gBAAD;EACC,KAAK;EACL,WAAW,QAAQ,iBAAiB,YAAY,UAAU;EAC1D,aAAU;EACV,cAAW;EACX,aAAU;EACV,MAAM;EACN,aAAa,cAAc,UAAU;AACpC,UAAO,iBAAiB;IACvB,OAAO,eAAe,EAAE,OAAO,CAAC;IAChC,OAAO,eAAe;KAAE;KAAc;KAAO,CAAC;IAC9C,CAAC;;EAEF,CAAA;;AAwBJ,SAAgB,iBAId,OAA0E;CAC3E,MAAM,qBAAqB,wBAAwB;CAEnD,MAAM,EAAE,WAAW,YAAY,OAAO,cAAc;CAEpD,MAAM,EAAE,YAAY,uBAAuB;AAE3C,QACC,oBAAC,2BAAD;EACU;EACT,WAAW,cAAe,oBAAoB;EACxC;EACN,aAAa,EAAE,OAAO,aAAa,YAClC,oBAAC,MAAD;GAEC,GAAI;GACJ,WAAW,QACV,mCACA,uBACA,YAAY,WACZ,UACA;aAEA,MAAM;GACH,EAVC,MAAM,aAUP;EAEL,CAAA;;AAQJ,SAAgB,WACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,UAAU,SAAS,UAAU,OAAO,UAAU,GAAG,gBAAgB;AAIvF,QACC,oBAHiB,UAAUC,WAAY,SAGvC;EAAW,aAAU;EAAS,cAAW;EAAO,aAAU;EAAoB;EAAM,GAAI;EACtF;EACU,CAAA;;AAmBd,SAAgB,UASd,OAAoF;CACrF,MAAM,oBAAoB,wBAAwB;CAElD,MAAM,EAAE,UAAU,SAAS,SAAS,cAAc,UAAU,OAAO,MAAM,WAAW;CAIpF,MAAM,YAAY,SAAS;EACjB;EACT,SAJ2B,sBAAsB,EAAE,QAAQ,OAAO,CAAC,EAIrC,WAAY;EAC1C;EACA;EACA;EACA,MAAO,QAAQ,mBAAmB;EAClC,CAAC;AAMF,SAJyB,OAAO,aAAa,aAAa,WAAW,QAE3B,UAAmB;;AAc9D,SAAgB,mBACf,OACC;CACD,MAAM,qBAAqB,wBAAwB;CAEnD,MAAM,EAAE,UAAU,SAAS,UAAU,OAAO,MAAM,WAAW;CAE7D,MAAM,YAAY,aAAa;EAC9B;EACA;EACA;EACA,MAAM,QAAS,oBAAoB;EACnC,CAAC;AAMF,SAJyB,OAAO,aAAa,aAAa,WAAW,QAE3B,UAAmB"}
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
2
  @layer properties;
3
3
  @layer theme, base, components, utilities;
4
4
  @layer theme {
@@ -198,14 +198,17 @@
198
198
  .inset-0 {
199
199
  inset: calc(var(--spacing) * 0);
200
200
  }
201
+ .end {
202
+ inset-inline-end: var(--spacing);
203
+ }
201
204
  .top-1\/2 {
202
- top: calc(1/2 * 100%);
205
+ top: calc(1 / 2 * 100%);
203
206
  }
204
207
  .bottom-\[25px\] {
205
208
  bottom: 25px;
206
209
  }
207
210
  .left-1\/2 {
208
- left: calc(1/2 * 100%);
211
+ left: calc(1 / 2 * 100%);
209
212
  }
210
213
  .z-2 {
211
214
  z-index: 2;
@@ -295,18 +298,15 @@
295
298
  .grow {
296
299
  flex-grow: 1;
297
300
  }
298
- .-translate-x-1\/2 {
299
- --tw-translate-x: calc(calc(1/2 * 100%) * -1);
301
+ .-translate-1\/2 {
302
+ --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
303
+ --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
300
304
  translate: var(--tw-translate-x) var(--tw-translate-y);
301
305
  }
302
306
  .translate-x-\(--translate-distance\) {
303
307
  --tw-translate-x: var(--translate-distance);
304
308
  translate: var(--tw-translate-x) var(--tw-translate-y);
305
309
  }
306
- .-translate-y-1\/2 {
307
- --tw-translate-y: calc(calc(1/2 * 100%) * -1);
308
- translate: var(--tw-translate-x) var(--tw-translate-y);
309
- }
310
310
  .-rotate-90 {
311
311
  rotate: calc(90deg * -1);
312
312
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zayne-labs/ui-react",
3
3
  "type": "module",
4
- "version": "0.10.52",
4
+ "version": "0.11.0",
5
5
  "description": "A composable UI/UI-utilities components library. ",
6
6
  "author": "Ryan Zayne",
7
7
  "license": "MIT",
@@ -45,36 +45,35 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@zayne-labs/toolkit-core": "0.12.36",
49
- "@zayne-labs/toolkit-react": "0.12.36",
50
- "@zayne-labs/toolkit-type-helpers": "0.12.36"
48
+ "@zayne-labs/toolkit-core": "0.12.45",
49
+ "@zayne-labs/toolkit-react": "0.12.45",
50
+ "@zayne-labs/toolkit-type-helpers": "0.12.45"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@arethetypeswrong/cli": "0.18.2",
54
- "@size-limit/esbuild-why": "12.0.0",
55
- "@size-limit/preset-small-lib": "12.0.0",
56
- "@tailwindcss/cli": "4.1.18",
54
+ "@size-limit/esbuild-why": "12.0.1",
55
+ "@size-limit/preset-small-lib": "12.0.1",
56
+ "@tailwindcss/cli": "4.2.2",
57
57
  "@total-typescript/ts-reset": "0.6.1",
58
- "@types/react": "19.2.13",
58
+ "@types/react": "19.2.14",
59
59
  "@types/react-dom": "19.2.3",
60
- "@zayne-labs/prettier-config": "0.11.27",
61
- "@zayne-labs/tsconfig": "0.11.27",
60
+ "@zayne-labs/prettier-config": "0.12.4",
61
+ "@zayne-labs/tsconfig": "0.12.4",
62
62
  "concurrently": "9.2.1",
63
63
  "cross-env": "10.1.0",
64
64
  "prettier": "3.8.1",
65
- "prettier-plugin-classnames": "0.9.0",
66
- "prettier-plugin-merge": "0.9.0",
65
+ "prettier-plugin-classnames": "0.10.0",
66
+ "prettier-plugin-merge": "0.10.0",
67
67
  "prettier-plugin-tailwindcss": "0.7.2",
68
- "publint": "0.3.17",
69
- "publish": "0.6.0",
68
+ "publint": "0.3.18",
70
69
  "react": "19.2.4",
71
70
  "react-dom": "19.2.4",
72
- "react-hook-form": "7.71.1",
73
- "size-limit": "12.0.0",
74
- "tailwind-merge": "3.4.0",
75
- "tailwindcss": "4.1.18",
76
- "tsdown": "0.20.3",
77
- "typescript": "5.9.3"
71
+ "react-hook-form": "7.72.0",
72
+ "size-limit": "12.0.1",
73
+ "tailwind-merge": "3.5.0",
74
+ "tailwindcss": "4.2.2",
75
+ "tsdown": "0.21.4",
76
+ "typescript": "6.0.2"
78
77
  },
79
78
  "publishConfig": {
80
79
  "access": "public",
@@ -88,7 +87,7 @@
88
87
  },
89
88
  {
90
89
  "path": "src/components/common/**/index.ts",
91
- "limit": "1 kb"
90
+ "limit": "2 kb"
92
91
  }
93
92
  ],
94
93
  "scripts": {
@@ -1,18 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var __defProp = Object.defineProperty;
3
- var __exportAll = (all, no_symbols) => {
4
- let target = {};
5
- for (var name in all) {
6
- __defProp(target, name, {
7
- get: all[name],
8
- enumerable: true
9
- });
10
- }
11
- if (!no_symbols) {
12
- __defProp(target, Symbol.toStringTag, { value: "Module" });
13
- }
14
- return target;
15
- };
16
-
17
- //#endregion
18
- export { __exportAll as t };
@@ -1,31 +0,0 @@
1
- import { isFunction } from "@zayne-labs/toolkit-type-helpers";
2
- import { useIsHydrated } from "@zayne-labs/toolkit-react";
3
-
4
- //#region src/components/common/client-gate/client-gate.tsx
5
- /**
6
- * @description Render the children only after the JS has loaded client-side. Use an optional
7
- * fallback component if the JS is not yet loaded.
8
- *
9
- * @example
10
- * **Render a Chart component if JS loads, renders a simple FakeChart
11
- * component server-side or if there is no JS. The FakeChart can have only the
12
- * UI without the behavior or be a loading spinner or skeleton.**
13
- *
14
- * ```tsx
15
- * return (
16
- * <ClientOnly fallback={<FakeChart />}>
17
- * {() => <Chart />}
18
- * </ClientOnly>
19
- * );
20
- * ```
21
- */
22
- function ClientGate(props) {
23
- const { children, fallback } = props;
24
- const isHydrated = useIsHydrated();
25
- const resolvedChildren = () => isFunction(children) ? children() : children;
26
- return isHydrated ? resolvedChildren() : fallback;
27
- }
28
-
29
- //#endregion
30
- export { ClientGate as t };
31
- //# sourceMappingURL=client-gate-BhR-cK58.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-gate-BhR-cK58.js","names":[],"sources":["../../src/components/common/client-gate/client-gate.tsx"],"sourcesContent":["\"use client\";\n\nimport { useIsHydrated } from \"@zayne-labs/toolkit-react\";\nimport { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\n\ntype ClientGateProps = {\n\t/**\n\t * You are encouraged to add a fallback that is the same dimensions\n\t * as the client rendered children. This will avoid content layout\n\t * shift which is disgusting 🥲\n\t */\n\tchildren: React.ReactNode | (() => React.ReactNode);\n\tfallback?: React.ReactNode;\n};\n\n/**\n * @description Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * @example\n * **Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.**\n *\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * {() => <Chart />}\n * </ClientOnly>\n * );\n * ```\n */\nfunction ClientGate(props: ClientGateProps) {\n\tconst { children, fallback } = props;\n\n\tconst isHydrated = useIsHydrated();\n\n\tconst resolvedChildren = () => (isFunction(children) ? children() : children);\n\n\treturn isHydrated ? resolvedChildren() : fallback;\n}\n\nexport { ClientGate };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgCA,SAAS,WAAW,OAAwB;CAC3C,MAAM,EAAE,UAAU,aAAa;CAE/B,MAAM,aAAa,eAAe;CAElC,MAAM,yBAA0B,WAAW,SAAS,GAAG,UAAU,GAAG;AAEpE,QAAO,aAAa,kBAAkB,GAAG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cn-2hIN1AQ7.js","names":[],"sources":["../../src/lib/utils/cn.ts"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\n\nexport const cnMerge: typeof twMerge = (...classNames) => twMerge(classNames);\n"],"mappings":";;;AAEA,MAAa,WAA2B,GAAG,eAAe,QAAQ,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getElementList-CtQvQXjS.js","names":[],"sources":["../../src/components/common/for/for.tsx","../../src/components/common/for/getElementList.ts"],"sourcesContent":["import type {\n\tDiscriminatedRenderItemProps,\n\tPolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport { isArray, isNumber, type Prettify } from \"@zayne-labs/toolkit-type-helpers\";\n\ntype ArrayOrNumber = number | readonly unknown[];\n\ntype GetArrayItemType<TArray extends ArrayOrNumber> =\n\tTArray extends readonly unknown[] ? TArray[number]\n\t: TArray extends number ? number\n\t: unknown;\n\ntype RenderPropFn<TArray extends ArrayOrNumber> = (\n\titem: GetArrayItemType<TArray>,\n\tindex: number,\n\tarray: Array<GetArrayItemType<TArray>>\n) => React.ReactNode;\n\nexport type ForRenderProps<TArray extends ArrayOrNumber> = DiscriminatedRenderItemProps<\n\tRenderPropFn<TArray>\n>;\n\n/* eslint-disable perfectionist/sort-intersection-types -- Prefer the object to come first before the render props */\ntype ForProps<TArray extends ArrayOrNumber> = Prettify<\n\t{\n\t\teach: TArray;\n\t\tfallback?: React.ReactNode;\n\t} & ForRenderProps<TArray>\n>;\n/* eslint-enable perfectionist/sort-intersection-types -- Prefer the object to come first before the render props */\n\nconst isArrayEmpty = <TArray extends ArrayOrNumber>(each: TArray) => {\n\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\treturn each == null || (isNumber(each) && each === 0) || (isArray(each) && each.length === 0);\n};\n\nexport function For<const TArray extends ArrayOrNumber>(props: ForProps<TArray>) {\n\tconst { children, each, fallback = null, renderItem } = props;\n\n\tif (isArrayEmpty(each)) {\n\t\treturn fallback;\n\t}\n\n\tconst resolvedArray = isNumber(each) ? [...Array(each).keys()] : (each as unknown[]);\n\n\tconst selectedChildren = typeof children === \"function\" ? children : renderItem;\n\n\tconst elementList = resolvedArray.map((...params) => {\n\t\ttype Params = Parameters<RenderPropFn<TArray>>;\n\n\t\treturn selectedChildren(...(params as Params));\n\t});\n\n\treturn elementList;\n}\n\nexport function ForWithWrapper<\n\tconst TArray extends ArrayOrNumber,\n\tTElement extends React.ElementType = \"ul\",\n>(props: PolymorphicPropsStrict<TElement, ForProps<TArray>> & { displayFallBackWhenEmpty?: boolean }) {\n\tconst {\n\t\tas: ListContainer = \"ul\",\n\t\tchildren,\n\t\tdisplayFallBackWhenEmpty = false,\n\t\teach,\n\t\tfallback = null,\n\t\trenderItem,\n\t\t...restOfProps\n\t} = props;\n\n\tif (displayFallBackWhenEmpty && isArrayEmpty(each)) {\n\t\treturn fallback;\n\t}\n\n\treturn (\n\t\t<ListContainer {...restOfProps}>\n\t\t\t<For {...({ children, each, fallback, renderItem } as ForProps<TArray>)} />\n\t\t</ListContainer>\n\t);\n}\n","import { For, ForWithWrapper } from \"./for\";\n\ntype GetElementListResult<TVariant extends \"base\" | \"withWrapper\"> =\n\tTVariant extends \"base\" ? [typeof For] : [typeof ForWithWrapper];\n\nconst getElementList = <TVariant extends \"base\" | \"withWrapper\" = \"withWrapper\">(\n\tvariant?: TVariant\n): GetElementListResult<TVariant> => {\n\tswitch (variant) {\n\t\tcase \"base\": {\n\t\t\treturn [For] as never;\n\t\t}\n\t\tcase \"withWrapper\": {\n\t\t\treturn [ForWithWrapper] as never;\n\t\t}\n\t\tdefault: {\n\t\t\treturn [ForWithWrapper] as never;\n\t\t}\n\t}\n};\n\nexport { getElementList };\n"],"mappings":";;;;AAgCA,MAAM,gBAA8C,SAAiB;AAEpE,QAAO,QAAQ,QAAS,SAAS,KAAK,IAAI,SAAS,KAAO,QAAQ,KAAK,IAAI,KAAK,WAAW;;AAG5F,SAAgB,IAAwC,OAAyB;CAChF,MAAM,EAAE,UAAU,MAAM,WAAW,MAAM,eAAe;AAExD,KAAI,aAAa,KAAK,CACrB,QAAO;CAGR,MAAM,gBAAgB,SAAS,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAI;CAElE,MAAM,mBAAmB,OAAO,aAAa,aAAa,WAAW;AAQrE,QANoB,cAAc,KAAK,GAAG,WAAW;AAGpD,SAAO,iBAAiB,GAAI,OAAkB;GAC7C;;AAKH,SAAgB,eAGd,OAAoG;CACrG,MAAM,EACL,IAAI,gBAAgB,MACpB,UACA,2BAA2B,OAC3B,MACA,WAAW,MACX,YACA,GAAG,gBACA;AAEJ,KAAI,4BAA4B,aAAa,KAAK,CACjD,QAAO;AAGR,QACC,oBAAC;EAAc,GAAI;YAClB,oBAAC;GAAW;GAAU;GAAM;GAAU;IAAqC;GAC5D;;;;;ACzElB,MAAM,kBACL,YACoC;AACpC,SAAQ,SAAR;EACC,KAAK,OACJ,QAAO,CAAC,IAAI;EAEb,KAAK,cACJ,QAAO,CAAC,eAAe;EAExB,QACC,QAAO,CAAC,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"show-parts-BsJLZhNL.js","names":[],"sources":["../../src/components/common/show/show.tsx","../../src/components/common/show/show-parts.ts"],"sourcesContent":["\"use client\";\n\nimport { toArray } from \"@zayne-labs/toolkit-core\";\nimport { getMultipleSlots, getSingleSlot } from \"@zayne-labs/toolkit-react/utils\";\nimport { assert, isFunction } from \"@zayne-labs/toolkit-type-helpers\";\n\ntype ShowProps<TWhen> =\n\t| {\n\t\t\tchildren: React.ReactNode;\n\t\t\tcontrol: \"content\";\n\t\t\tfallback?: React.ReactNode;\n\t\t\twhen?: never;\n\t }\n\t| {\n\t\t\tchildren: React.ReactNode | ((value: TWhen) => React.ReactNode);\n\t\t\tcontrol?: \"root\";\n\t\t\tfallback?: React.ReactNode;\n\t\t\twhen: false | TWhen | null | undefined;\n\t };\n\nexport function ShowRoot<TWhen>(props: ShowProps<TWhen>) {\n\tconst { children, control = \"root\", fallback = null, when } = props;\n\n\tif (control === \"content\" && !isFunction(children)) {\n\t\tconst childrenArray = toArray(children) as Array<React.ReactElement<ShowContentProps<TWhen>>>;\n\n\t\tconst foundContentSlot = childrenArray.find((child) => Boolean(child.props.when));\n\n\t\tconst fallBackSlot = getSingleSlot(childrenArray, ShowFallback);\n\n\t\tassert(\n\t\t\t!(fallBackSlot && fallback),\n\t\t\t\"The fallback prop and <Show.Fallback> cannot be used at the same time.\"\n\t\t);\n\n\t\treturn foundContentSlot ?? fallBackSlot ?? fallback;\n\t}\n\n\tconst resolvedChildren = isFunction(children) ? children(when as TWhen) : children;\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [contentSlot, fallBackSlot],\n\t} = getMultipleSlots(resolvedChildren, [ShowContent, ShowFallback], {\n\t\terrorMessage: [\n\t\t\t\"Only one <Show.Content> component is allowed\",\n\t\t\t\"Only one <Show.Fallback> or <Show.OtherWise> component is allowed\",\n\t\t],\n\t\tthrowOnMultipleSlotMatch: true,\n\t});\n\n\tif (!when) {\n\t\tassert(\n\t\t\t!(fallBackSlot && fallback),\n\t\t\t\"The fallback prop and <Show.Fallback> cannot be used at the same time.\"\n\t\t);\n\n\t\treturn fallBackSlot ?? fallback;\n\t}\n\n\treturn contentSlot ?? regularChildren;\n}\n\ntype ShowContentProps<TWhen> = Pick<ShowProps<TWhen>, \"children\" | \"when\">;\n\nexport function ShowContent<TWhen>(props: ShowContentProps<TWhen>) {\n\tconst { children, when } = props;\n\n\tconst resolvedChildren = isFunction(children) ? children(when as TWhen) : children;\n\n\treturn resolvedChildren;\n}\nShowContent.slotSymbol = Symbol(\"show-content\");\n\nexport function ShowFallback(props: { children: React.ReactNode }) {\n\tconst { children } = props;\n\n\treturn children;\n}\nShowFallback.slotSymbol = Symbol(\"show-fallback\");\n","export {\n\tShowContent as Content,\n\tShowFallback as Fallback,\n\tShowFallback as Otherwise,\n\tShowRoot as Root,\n} from \"./show\";\n"],"mappings":";;;;;;AAoBA,SAAgB,SAAgB,OAAyB;CACxD,MAAM,EAAE,UAAU,UAAU,QAAQ,WAAW,MAAM,SAAS;AAE9D,KAAI,YAAY,aAAa,CAAC,WAAW,SAAS,EAAE;EACnD,MAAM,gBAAgB,QAAQ,SAAS;EAEvC,MAAM,mBAAmB,cAAc,MAAM,UAAU,QAAQ,MAAM,MAAM,KAAK,CAAC;EAEjF,MAAM,eAAe,cAAc,eAAe,aAAa;AAE/D,SACC,EAAE,gBAAgB,WAClB,yEACA;AAED,SAAO,oBAAoB,gBAAgB;;CAK5C,MAAM,EACL,iBACA,OAAO,CAAC,aAAa,kBAClB,iBALqB,WAAW,SAAS,GAAG,SAAS,KAAc,GAAG,UAKnC,CAAC,aAAa,aAAa,EAAE;EACnE,cAAc,CACb,gDACA,oEACA;EACD,0BAA0B;EAC1B,CAAC;AAEF,KAAI,CAAC,MAAM;AACV,SACC,EAAE,gBAAgB,WAClB,yEACA;AAED,SAAO,gBAAgB;;AAGxB,QAAO,eAAe;;AAKvB,SAAgB,YAAmB,OAAgC;CAClE,MAAM,EAAE,UAAU,SAAS;AAI3B,QAFyB,WAAW,SAAS,GAAG,SAAS,KAAc,GAAG;;AAI3E,YAAY,aAAa,OAAO,eAAe;AAE/C,SAAgB,aAAa,OAAsC;CAClE,MAAM,EAAE,aAAa;AAErB,QAAO;;AAER,aAAa,aAAa,OAAO,gBAAgB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slot-parts-CAyHw8R-.js","names":["ReactFragment"],"sources":["../../src/components/common/slot/slot.tsx","../../src/components/common/slot/slot-parts.ts"],"sourcesContent":["import { composeRefs, mergeProps, type InferProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { isArray, type UnknownObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Children, cloneElement, isValidElement, Fragment as ReactFragment } from \"react\";\n\ntype SlotProps = InferProps<HTMLElement> & { ref?: React.Ref<HTMLElement> };\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * ----------------------------------------------------------------------------------------------- */\n\nexport function SlotRoot(props: SlotProps) {\n\tconst { children, ...restOfSlotProps } = props;\n\n\tconst childrenArray = isArray<React.ReactNode>(children) ? children : [children];\n\n\tconst slottable = childrenArray.find((element) => isSlottable(element));\n\n\tif (!slottable) {\n\t\treturn <SlotClone {...restOfSlotProps}>{children}</SlotClone>;\n\t}\n\n\tif (!isValidElement<SlotProps>(slottable)) {\n\t\treturn null;\n\t}\n\n\t// == The new element to render is the one passed as a child of `Slot.Slottable`\n\tconst childToRender = slottable.props.children;\n\n\tif (Children.count(childToRender) > 1) {\n\t\treturn Children.only(null);\n\t}\n\n\tconst resolvedChildToRender = isArray(childToRender) ? childToRender[0] : childToRender;\n\n\tif (!isValidElement(resolvedChildToRender)) {\n\t\tconsole.error(\"Invalid element passed to Slot:\", resolvedChildToRender);\n\t\treturn null;\n\t}\n\n\tconst childToRenderChildren = childrenArray.map((child) => {\n\t\tif (child === slottable) {\n\t\t\t// == Because the new element will be the one rendered, we are only interested in grabbing its children (`childToRender.props.children`)\n\t\t\treturn (resolvedChildToRender.props as SlotProps).children;\n\t\t}\n\n\t\treturn child;\n\t});\n\n\treturn (\n\t\t<SlotClone {...restOfSlotProps}>\n\t\t\t{cloneElement(resolvedChildToRender, undefined, childToRenderChildren)}\n\t\t</SlotClone>\n\t);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * ----------------------------------------------------------------------------------------------- */\n\nexport function SlotSlottable({ children }: Pick<SlotProps, \"children\">) {\n\treturn children;\n}\n\nconst isSlottable = (child: React.ReactNode): child is React.ReactElement => {\n\treturn isValidElement(child) && child.type === SlotSlottable;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * ----------------------------------------------------------------------------------------------- */\ntype SlotCloneProps = Pick<SlotProps, \"children\" | \"ref\">;\n\nfunction SlotClone(props: SlotCloneProps) {\n\tconst { children, ref: forwardedRef, ...restOfSlotProps } = props;\n\n\tif (Children.count(children) > 1) {\n\t\treturn Children.only(null);\n\t}\n\n\tconst resolvedChild = isArray(children) ? children[0] : children;\n\n\tif (!isValidElement<UnknownObject>(resolvedChild)) {\n\t\tconsole.error(\"Invalid element passed to Slot:\", resolvedChild);\n\t\treturn null;\n\t}\n\n\tconst childRef = (resolvedChild.props.ref\n\t\t?? (resolvedChild as unknown as UnknownObject).ref) as React.Ref<HTMLElement>;\n\n\tconst ref = composeRefs(forwardedRef, childRef);\n\n\tconst clonedProps = {\n\t\t...mergeProps(restOfSlotProps, resolvedChild.props),\n\t\t...(resolvedChild.type !== ReactFragment && { ref }),\n\t};\n\n\treturn cloneElement(resolvedChild, clonedProps);\n}\n","export { SlotRoot as Root, SlotSlottable as Slottable } from \"./slot\";\n"],"mappings":";;;;;;;AAUA,SAAgB,SAAS,OAAkB;CAC1C,MAAM,EAAE,UAAU,GAAG,oBAAoB;CAEzC,MAAM,gBAAgB,QAAyB,SAAS,GAAG,WAAW,CAAC,SAAS;CAEhF,MAAM,YAAY,cAAc,MAAM,YAAY,YAAY,QAAQ,CAAC;AAEvE,KAAI,CAAC,UACJ,QAAO,oBAAC;EAAU,GAAI;EAAkB;GAAqB;AAG9D,KAAI,CAAC,eAA0B,UAAU,CACxC,QAAO;CAIR,MAAM,gBAAgB,UAAU,MAAM;AAEtC,KAAI,SAAS,MAAM,cAAc,GAAG,EACnC,QAAO,SAAS,KAAK,KAAK;CAG3B,MAAM,wBAAwB,QAAQ,cAAc,GAAG,cAAc,KAAK;AAE1E,KAAI,CAAC,eAAe,sBAAsB,EAAE;AAC3C,UAAQ,MAAM,mCAAmC,sBAAsB;AACvE,SAAO;;CAGR,MAAM,wBAAwB,cAAc,KAAK,UAAU;AAC1D,MAAI,UAAU,UAEb,QAAQ,sBAAsB,MAAoB;AAGnD,SAAO;GACN;AAEF,QACC,oBAAC;EAAU,GAAI;YACb,aAAa,uBAAuB,QAAW,sBAAsB;GAC3D;;AAQd,SAAgB,cAAc,EAAE,YAAyC;AACxE,QAAO;;AAGR,MAAM,eAAe,UAAwD;AAC5E,QAAO,eAAe,MAAM,IAAI,MAAM,SAAS;;AAQhD,SAAS,UAAU,OAAuB;CACzC,MAAM,EAAE,UAAU,KAAK,cAAc,GAAG,oBAAoB;AAE5D,KAAI,SAAS,MAAM,SAAS,GAAG,EAC9B,QAAO,SAAS,KAAK,KAAK;CAG3B,MAAM,gBAAgB,QAAQ,SAAS,GAAG,SAAS,KAAK;AAExD,KAAI,CAAC,eAA8B,cAAc,EAAE;AAClD,UAAQ,MAAM,mCAAmC,cAAc;AAC/D,SAAO;;CAMR,MAAM,MAAM,YAAY,cAHN,cAAc,MAAM,OACjC,cAA2C,IAED;AAO/C,QAAO,aAAa,eALA;EACnB,GAAG,WAAW,iBAAiB,cAAc,MAAM;EACnD,GAAI,cAAc,SAASA,YAAiB,EAAE,KAAK;EACnD,CAE8C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useErrorBoundary-CIUZVY-G.js","names":["#resetErrorBoundary"],"sources":["../../src/components/common/error-boundary/error-boundary-context.ts","../../src/components/common/error-boundary/error-boundary.tsx","../../src/components/common/error-boundary/useErrorBoundary.ts"],"sourcesContent":["import { createCustomContext } from \"@zayne-labs/toolkit-react\";\n\nexport type ErrorBoundaryContextType = {\n\terror: unknown;\n\thasError: boolean;\n\tresetErrorBoundary: (...args: unknown[]) => void;\n};\n\nconst [ErrorBoundaryContext, useErrorBoundaryContext] = createCustomContext<ErrorBoundaryContextType>({\n\thookName: \"useErrorBoundaryContext\",\n\tname: \"ErrorBoundaryContext\",\n\tproviderName: \"ErrorBoundaryContextProvider\",\n});\n\nexport { ErrorBoundaryContext, useErrorBoundaryContext };\n","\"use client\";\n\nimport { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Component } from \"react\";\nimport { ErrorBoundaryContext, type ErrorBoundaryContextType } from \"./error-boundary-context\";\nimport type { ErrorBoundaryProps, ErrorFallbackProps } from \"./types\";\n\ntype ErrorBoundaryState =\n\t| {\n\t\t\terror: Error;\n\t\t\thasError: true;\n\t }\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t };\n\nconst initialState: ErrorBoundaryState = {\n\terror: null,\n\thasError: false,\n};\n\nconst hasArrayChanged = (arrayOne: unknown[] = [], arrayTwo: unknown[] = []) => {\n\treturn (\n\t\tarrayOne.length !== arrayTwo.length\n\t\t|| arrayOne.some((item, index) => !Object.is(item, arrayTwo[index]))\n\t);\n};\n\n/**\n * Copied from react-error-boundary package\n * @see https://github.com/bvaughn/react-error-boundary\n */\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n\tconstructor(props: ErrorBoundaryProps) {\n\t\tsuper(props);\n\n\t\tthis.state = initialState;\n\t}\n\n\tstatic getDerivedStateFromError(error: Error) {\n\t\treturn { error, hasError: true };\n\t}\n\n\toverride componentDidCatch(error: Error, info: React.ErrorInfo) {\n\t\tthis.props.onError?.({ error, info });\n\t}\n\n\toverride componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState) {\n\t\tconst { hasError } = this.state;\n\t\tconst { resetKeys } = this.props;\n\n\t\t// == There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array, we'd end up resetting the error boundary immediately.\n\t\t// == This would likely trigger a second error to be thrown.\n\t\t// == So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n\t\tif (hasError && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\tnext: resetKeys,\n\t\t\t\tprev: prevProps.resetKeys,\n\t\t\t\treason: \"keys\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t}\n\n\toverride render() {\n\t\tconst { children, fallback } = this.props;\n\t\tconst { error, hasError } = this.state;\n\n\t\tlet childToRender = children;\n\n\t\tif (hasError) {\n\t\t\tswitch (true) {\n\t\t\t\tcase isFunction(fallback): {\n\t\t\t\t\tconst fallbackRenderProps = {\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t\t\t\t} satisfies ErrorFallbackProps;\n\n\t\t\t\t\tchildToRender = fallback(fallbackRenderProps);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Boolean(fallback): {\n\t\t\t\t\tchildToRender = fallback;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tconsole.warn(\"No fallback provided to error boundary\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst contextValue = {\n\t\t\terror,\n\t\t\thasError,\n\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t} satisfies ErrorBoundaryContextType;\n\n\t\treturn <ErrorBoundaryContext value={contextValue}>{childToRender}</ErrorBoundaryContext>;\n\t}\n\n\t#resetErrorBoundary = (...parameters: unknown[]) => {\n\t\tconst { error } = this.state;\n\n\t\tif (error !== null) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\targs: parameters,\n\t\t\t\treason: \"imperative-api\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t};\n}\n","import { useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { useState } from \"react\";\nimport { useErrorBoundaryContext } from \"./error-boundary-context\";\n\ntype UseErrorBoundaryState<TError extends Error> =\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t }\n\t| {\n\t\t\terror: TError;\n\t\t\thasError: true;\n\t };\n\nexport const useErrorBoundary = <TError extends Error>() => {\n\tconst { resetErrorBoundary } = useErrorBoundaryContext();\n\n\tconst [state, setState] = useState<UseErrorBoundaryState<TError>>({\n\t\terror: null,\n\t\thasError: false,\n\t});\n\n\tif (state.hasError) {\n\t\tthrow state.error;\n\t}\n\n\tconst resetBoundary = useCallbackRef(() => {\n\t\tresetErrorBoundary();\n\n\t\tsetState({\n\t\t\terror: null,\n\t\t\thasError: false,\n\t\t});\n\t});\n\n\tconst showBoundary = useCallbackRef((error: TError) => {\n\t\tsetState({\n\t\t\terror,\n\t\t\thasError: true,\n\t\t});\n\t});\n\n\treturn { resetBoundary, showBoundary };\n};\n"],"mappings":";;;;;;AAQA,MAAM,CAAC,sBAAsB,2BAA2B,oBAA8C;CACrG,UAAU;CACV,MAAM;CACN,cAAc;CACd,CAAC;;;;ACKF,MAAM,eAAmC;CACxC,OAAO;CACP,UAAU;CACV;AAED,MAAM,mBAAmB,WAAsB,EAAE,EAAE,WAAsB,EAAE,KAAK;AAC/E,QACC,SAAS,WAAW,SAAS,UAC1B,SAAS,MAAM,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,SAAS,OAAO,CAAC;;;;;;AAStE,IAAa,gBAAb,cAAmC,UAAkD;CACpF,YAAY,OAA2B;AACtC,QAAM,MAAM;AAEZ,OAAK,QAAQ;;CAGd,OAAO,yBAAyB,OAAc;AAC7C,SAAO;GAAE;GAAO,UAAU;GAAM;;CAGjC,AAAS,kBAAkB,OAAc,MAAuB;AAC/D,OAAK,MAAM,UAAU;GAAE;GAAO;GAAM,CAAC;;CAGtC,AAAS,mBAAmB,WAA+B,WAA+B;EACzF,MAAM,EAAE,aAAa,KAAK;EAC1B,MAAM,EAAE,cAAc,KAAK;AAM3B,MAAI,YAAY,UAAU,UAAU,QAAQ,gBAAgB,UAAU,WAAW,UAAU,EAAE;AAC5F,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,MAAM,UAAU;IAChB,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;CAI7B,AAAS,SAAS;EACjB,MAAM,EAAE,UAAU,aAAa,KAAK;EACpC,MAAM,EAAE,OAAO,aAAa,KAAK;EAEjC,IAAI,gBAAgB;AAEpB,MAAI,SACH,SAAQ,MAAR;GACC,KAAK,WAAW,SAAS;AAMxB,oBAAgB,SALY;KAC3B;KACA,oBAAoB,MAAKA;KACzB,CAE4C;AAC7C;GAGD,KAAK,QAAQ,SAAS;AACrB,oBAAgB;AAChB;GAGD,QACC,SAAQ,KAAK,yCAAyC;;AAWzD,SAAO,oBAAC;GAAqB,OANR;IACpB;IACA;IACA,oBAAoB,MAAKA;IACzB;aAEkD;IAAqC;;CAGzF,uBAAuB,GAAG,eAA0B;EACnD,MAAM,EAAE,UAAU,KAAK;AAEvB,MAAI,UAAU,MAAM;AACnB,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;;;;;ACrG9B,MAAa,yBAA+C;CAC3D,MAAM,EAAE,uBAAuB,yBAAyB;CAExD,MAAM,CAAC,OAAO,YAAY,SAAwC;EACjE,OAAO;EACP,UAAU;EACV,CAAC;AAEF,KAAI,MAAM,SACT,OAAM,MAAM;AAmBb,QAAO;EAAE,eAhBa,qBAAqB;AAC1C,uBAAoB;AAEpB,YAAS;IACR,OAAO;IACP,UAAU;IACV,CAAC;IACD;EASsB,cAPH,gBAAgB,UAAkB;AACtD,YAAS;IACR;IACA,UAAU;IACV,CAAC;IACD;EAEoC"}