@zayne-labs/ui-react 0.2.3 → 0.4.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.
@@ -85,7 +85,8 @@ var useDragScroll = (props = {}) => {
85
85
  return {
86
86
  ...mergedRootProps,
87
87
  className: cnMerge(
88
- `flex w-full cursor-grab snap-x snap-mandatory overflow-x-scroll overflow-y-clip [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,
88
+ `flex w-full cursor-grab snap-x snap-mandatory overflow-x-scroll overflow-y-clip
89
+ [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,
89
90
  orientation === "horizontal" && "flex-row",
90
91
  orientation === "vertical" && "flex-col",
91
92
  usage === "mobileAndTabletOnly" && "md:cursor-default md:flex-col",
@@ -114,5 +115,5 @@ var useDragScroll = (props = {}) => {
114
115
  };
115
116
 
116
117
  export { useDragScroll };
117
- //# sourceMappingURL=chunk-Y7TF3SRM.js.map
118
- //# sourceMappingURL=chunk-Y7TF3SRM.js.map
118
+ //# sourceMappingURL=chunk-E42DOTGX.js.map
119
+ //# sourceMappingURL=chunk-E42DOTGX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/ui/drag-scroll/utils.ts","../../src/components/ui/drag-scroll/use-drag-scroll.ts"],"names":[],"mappings":"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","file":"chunk-E42DOTGX.js","sourcesContent":["import { checkIsDeviceMobileOrTablet } from \"@zayne-labs/toolkit-core\";\n\n/* eslint-disable no-param-reassign -- Mutation is needed here since it's an element */\nexport const updateCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"grabbing\";\n\telement.style.userSelect = \"none\";\n};\n\nexport const onScrollSnap = <TElement extends HTMLElement>(\n\taction: \"remove\" | \"reset\",\n\telement: TElement\n) => {\n\tif (action === \"remove\") {\n\t\telement.style.scrollSnapType = \"none\";\n\t\treturn;\n\t}\n\n\telement.style.scrollSnapType = \"\";\n};\n\nexport const resetCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"\";\n\telement.style.userSelect = \"\";\n};\n/* eslint-enable no-param-reassign -- Mutation is needed here since it's an element */\n\nexport const handleScrollSnap = (dragContainer: HTMLElement) => {\n\tconst isMobileOrTablet = checkIsDeviceMobileOrTablet();\n\n\tif (!isMobileOrTablet) {\n\t\tonScrollSnap(\"remove\", dragContainer);\n\t} else {\n\t\tonScrollSnap(\"reset\", dragContainer);\n\t}\n};\n","import { cnMerge } from \"@/lib/utils/cn\";\nimport { off, on } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { type InferProps, composeRefs, mergeTwoProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { type RefCallback, useRef } from \"react\";\nimport { handleScrollSnap, resetCursor, updateCursor } from \"./utils\";\n\ntype DragScrollProps<TElement extends HTMLElement> = {\n\tclassNames?: { base?: string; item?: string };\n\textraItemProps?: InferProps<HTMLElement>;\n\textraRootProps?: Omit<InferProps<TElement>, \"children\">;\n\torientation?: \"both\" | \"horizontal\" | \"vertical\";\n\tusage?: \"allScreens\" | \"desktopOnly\" | \"mobileAndTabletOnly\";\n};\n\nconst useDragScroll = <TElement extends HTMLElement>(props: DragScrollProps<TElement> = {}) => {\n\tconst {\n\t\tclassNames,\n\t\textraItemProps,\n\t\textraRootProps,\n\t\torientation = \"horizontal\",\n\t\tusage = \"allScreens\",\n\t} = props;\n\n\tconst dragContainerRef = useRef<TElement>(null);\n\n\tconst positionRef = useRef({ left: 0, top: 0, x: 0, y: 0 });\n\n\tconst handleMouseMove = useCallbackRef((event: MouseEvent) => {\n\t\tif (!dragContainerRef.current) return;\n\n\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t// == calculate the current change in the horizontal scroll position based on the difference between the previous mouse position and the new mouse position\n\t\t\tconst dx = event.clientX - positionRef.current.x;\n\n\t\t\t// == Assign the scrollLeft of the container to the difference between its previous horizontal scroll position and the change in the mouse position\n\t\t\tdragContainerRef.current.scrollLeft = positionRef.current.left - dx;\n\t\t}\n\n\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\t// == calculate the current change in the vertical scroll position based on the difference between the previous mouse position and the new mouse position\n\t\t\tconst dy = event.clientY - positionRef.current.y;\n\n\t\t\t// == Assign the scrollTop of the container to the difference between its previous vertical scroll position and the change in the mouse position\n\t\t\tdragContainerRef.current.scrollTop = positionRef.current.top - dy;\n\t\t}\n\t});\n\n\tconst handleMouseUpOrLeave = useCallbackRef(() => {\n\t\tif (!dragContainerRef.current) return;\n\n\t\toff(\"mousemove\", dragContainerRef.current, handleMouseMove);\n\t\toff(\"mouseup\", dragContainerRef.current, handleMouseUpOrLeave);\n\t\toff(\"mouseleave\", dragContainerRef.current, handleMouseUpOrLeave);\n\n\t\tresetCursor(dragContainerRef.current);\n\t});\n\n\tconst handleMouseDown = useCallbackRef((event: MouseEvent) => {\n\t\tif (usage === \"mobileAndTabletOnly\" && window.innerWidth >= 768) return;\n\t\tif (usage === \"desktopOnly\" && window.innerWidth < 768) return;\n\n\t\tif (!dragContainerRef.current) return;\n\n\t\t// == Update all initial position properties stored in the positionRef\n\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\tpositionRef.current.x = event.clientX;\n\t\t\tpositionRef.current.left = dragContainerRef.current.scrollLeft;\n\t\t}\n\n\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\tpositionRef.current.y = event.clientY;\n\t\t\tpositionRef.current.top = dragContainerRef.current.scrollTop;\n\t\t}\n\n\t\tupdateCursor(dragContainerRef.current);\n\n\t\ton(\"mousemove\", dragContainerRef.current, handleMouseMove);\n\t\ton(\"mouseup\", dragContainerRef.current, handleMouseUpOrLeave);\n\t\ton(\"mouseleave\", dragContainerRef.current, handleMouseUpOrLeave);\n\t});\n\n\tconst refCallBack: RefCallback<TElement> = useCallbackRef((node) => {\n\t\tdragContainerRef.current = node;\n\n\t\tnode && handleScrollSnap(node);\n\n\t\tconst cleanup = on(\"mousedown\", dragContainerRef.current, handleMouseDown);\n\n\t\treturn cleanup;\n\t});\n\n\tconst getRootProps = (rootProps?: DragScrollProps<TElement>[\"extraRootProps\"]) => {\n\t\tconst mergedRootProps = mergeTwoProps(extraRootProps, rootProps);\n\n\t\treturn {\n\t\t\t...mergedRootProps,\n\t\t\tclassName: cnMerge(\n\t\t\t\t`flex w-full cursor-grab snap-x snap-mandatory overflow-x-scroll overflow-y-clip\n\t\t\t\t[-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,\n\t\t\t\torientation === \"horizontal\" && \"flex-row\",\n\t\t\t\torientation === \"vertical\" && \"flex-col\",\n\t\t\t\tusage === \"mobileAndTabletOnly\" && \"md:cursor-default md:flex-col\",\n\t\t\t\tusage === \"desktopOnly\" && \"max-md:cursor-default max-md:flex-col\",\n\t\t\t\tclassNames?.base,\n\t\t\t\tmergedRootProps.className\n\t\t\t),\n\t\t\t\"data-part\": \"root\",\n\t\t\t\"data-scope\": \"drag-scroll\",\n\t\t\tref: composeRefs([\n\t\t\t\trefCallBack,\n\t\t\t\t(mergedRootProps as { ref?: React.Ref<TElement> } | undefined)?.ref,\n\t\t\t]),\n\t\t};\n\t};\n\n\tconst getItemProps = <TItemElement extends HTMLElement>(\n\t\titemProps?: DragScrollProps<TItemElement>[\"extraItemProps\"]\n\t) => {\n\t\tconst mergedItemProps = mergeTwoProps(extraItemProps, itemProps);\n\n\t\treturn {\n\t\t\t...mergedItemProps,\n\t\t\tclassName: cnMerge(\"snap-center snap-always\", classNames?.item, mergedItemProps.className),\n\t\t\t\"data-part\": \"item\",\n\t\t\t\"data-scope\": \"drag-scroll\",\n\t\t};\n\t};\n\n\treturn { getItemProps, getRootProps };\n};\n\nexport { useDragScroll };\n"]}
@@ -1,8 +1,9 @@
1
1
  import { cnMerge } from './chunk-OHG7GB7O.js';
2
2
  import { getElementList } from './chunk-DW3FXTFL.js';
3
+ import { Slot } from './chunk-ENDWJXPF.js';
3
4
  import { __export } from './chunk-PZ5AY32C.js';
4
5
  import * as React2 from 'react';
5
- import { useId, useMemo, Fragment, useRef, useEffect } from 'react';
6
+ import { Fragment, useId, useMemo, useRef, useEffect } from 'react';
6
7
  import { toArray } from '@zayne-labs/toolkit-core';
7
8
  import { createCustomContext, useToggle, ContextError } from '@zayne-labs/toolkit-react';
8
9
  import { getSlotElement, getOtherChildren } from '@zayne-labs/toolkit-react/utils';
@@ -31,13 +32,23 @@ var useFormRootContext = () => {
31
32
  }
32
33
  return formContext;
33
34
  };
34
- var [StrictFormItemProvider, useStrictFormItemContext] = createCustomContext({
35
- hookName: "useFormItemContext",
36
- providerName: "FormItem"
37
- });
38
- var [LaxFormItemProvider, useLaxFormItemContext] = createCustomContext({
39
- hookName: "useLaxFormItemContext",
40
- providerName: "FormItem",
35
+ var useLaxGetFieldState = (name) => {
36
+ const { formState, getFieldState } = useFormRootContext();
37
+ if (!name) return;
38
+ const fieldState = getFieldState(name, formState);
39
+ return fieldState;
40
+ };
41
+ var [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext(
42
+ {
43
+ hookName: "useFormFieldContext",
44
+ name: "StrictFormFieldContext",
45
+ providerName: "FormField"
46
+ }
47
+ );
48
+ var [LaxFormFieldProvider, useLaxFormFieldContext] = createCustomContext({
49
+ hookName: "useLaxFormFieldContext",
50
+ name: "LaxFormFieldContext",
51
+ providerName: "FormField",
41
52
  strict: false
42
53
  });
43
54
 
@@ -55,33 +66,68 @@ function FormRoot(props) {
55
66
  children
56
67
  ));
57
68
  }
58
- function FormItem(props) {
69
+ function FormField(props) {
59
70
  const { children, className, name, withWrapper = true } = props;
60
71
  const uniqueId = useId();
61
- const value = useMemo(
62
- () => ({ name: String(name), uniqueId: `${String(name)}-(${uniqueId})` }),
72
+ const fieldContextValue = useMemo(
73
+ () => ({
74
+ formDescriptionId: `${name}-(${uniqueId})-form-item-description`,
75
+ formItemId: `${name}-(${uniqueId})-form-item`,
76
+ formMessageId: `${name}-(${uniqueId})-form-item-message`,
77
+ name
78
+ }),
63
79
  [name, uniqueId]
64
80
  );
65
81
  const WrapperElement = withWrapper ? "div" : Fragment;
66
82
  const wrapperElementProps = withWrapper && {
67
83
  className: cnMerge("flex flex-col", className),
68
- "data-part": "item",
84
+ "data-part": "field",
69
85
  "data-scope": "form"
70
86
  };
71
- return /* @__PURE__ */ React2.createElement(StrictFormItemProvider, { value }, /* @__PURE__ */ React2.createElement(LaxFormItemProvider, { value }, /* @__PURE__ */ React2.createElement(WrapperElement, { ...wrapperElementProps }, children)));
87
+ return /* @__PURE__ */ React2.createElement(StrictFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(LaxFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(WrapperElement, { ...wrapperElementProps }, children)));
88
+ }
89
+ function FormControlledField(props) {
90
+ const { name } = props;
91
+ const uniqueId = useId();
92
+ const fieldContextValue = useMemo(
93
+ () => ({
94
+ formDescriptionId: `${name}-(${uniqueId})-form-item-description`,
95
+ formItemId: `${name}-(${uniqueId})-form-item`,
96
+ formMessageId: `${name}-(${uniqueId})-form-item-message`,
97
+ name
98
+ }),
99
+ [name, uniqueId]
100
+ );
101
+ return /* @__PURE__ */ React2.createElement(StrictFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(LaxFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(Controller, { ...props })));
72
102
  }
73
- function FormItemContext(props) {
103
+ function FormFieldController(props) {
104
+ const { control } = useFormRootContext();
105
+ const { name } = useStrictFormFieldContext();
106
+ const { render, ...restOfProps } = props;
107
+ return /* @__PURE__ */ React2.createElement(Controller, { name, control, render, ...restOfProps });
108
+ }
109
+ function FormFieldContext(props) {
74
110
  const { children, render } = props;
75
- const contextValues = useStrictFormItemContext();
111
+ const fieldContextValues = useStrictFormFieldContext();
76
112
  if (typeof children === "function") {
77
- return children(contextValues);
113
+ return children(fieldContextValues);
78
114
  }
79
- return render(contextValues);
115
+ return render(fieldContextValues);
80
116
  }
81
117
  function FormLabel(props) {
82
- const { uniqueId } = useStrictFormItemContext();
118
+ const { formItemId } = useStrictFormFieldContext();
83
119
  const { children, className, ...restOfProps } = props;
84
- return /* @__PURE__ */ React2.createElement("label", { "data-scope": "form", "data-part": "label", htmlFor: uniqueId, className, ...restOfProps }, children);
120
+ return /* @__PURE__ */ React2.createElement(
121
+ "label",
122
+ {
123
+ "data-scope": "form",
124
+ "data-part": "label",
125
+ htmlFor: formItemId,
126
+ className,
127
+ ...restOfProps
128
+ },
129
+ children
130
+ );
85
131
  }
86
132
  function FormInputGroup(props) {
87
133
  const { children, className, ...restOfProps } = props;
@@ -131,31 +177,31 @@ function FormInputRightItem(props) {
131
177
  FormInputRightItem.slot = Symbol.for("rightItem");
132
178
  var inputTypesWithoutFullWith = /* @__PURE__ */ new Set(["checkbox", "radio"]);
133
179
  function FormInputPrimitive(props) {
134
- const contextValues = useLaxFormItemContext();
180
+ const fieldContextValues = useLaxFormFieldContext();
135
181
  const {
136
182
  className,
137
183
  classNames,
138
- control,
139
- formState,
140
- id = contextValues?.uniqueId,
141
- name = contextValues?.name,
184
+ id = fieldContextValues?.formItemId,
185
+ name = fieldContextValues?.name,
142
186
  type = "text",
143
187
  withEyeIcon = true,
144
188
  ...restOfProps
145
189
  } = props;
146
- const getFormState = control ? useFormState : () => formState;
147
- const { errors } = getFormState({ control, name }) ?? {};
190
+ const fieldState = useLaxGetFieldState(name);
191
+ const fieldError = fieldState?.error;
148
192
  const [isPasswordVisible, toggleVisibility] = useToggle(false);
149
193
  const shouldHaveEyeIcon = withEyeIcon && type === "password";
150
194
  const WrapperElement = shouldHaveEyeIcon ? FormInputGroup : Fragment;
151
195
  const wrapperElementProps = shouldHaveEyeIcon && {
152
- className: cnMerge("w-full", classNames?.inputGroup, name && errors?.[name] && classNames?.error)
196
+ className: cnMerge("w-full", classNames?.inputGroup, fieldError && classNames?.error)
153
197
  };
154
198
  return /* @__PURE__ */ React2.createElement(WrapperElement, { ...wrapperElementProps }, /* @__PURE__ */ React2.createElement(
155
199
  "input",
156
200
  {
157
201
  "data-scope": "form",
158
202
  "data-part": "input",
203
+ "aria-describedby": !fieldError ? fieldContextValues?.formDescriptionId : `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`,
204
+ "aria-invalid": Boolean(fieldError),
159
205
  id,
160
206
  name,
161
207
  type: type === "password" && isPasswordVisible ? "text" : type,
@@ -166,7 +212,7 @@ function FormInputPrimitive(props) {
166
212
  disabled:cursor-not-allowed disabled:opacity-50`,
167
213
  className,
168
214
  classNames?.input,
169
- type !== "password" && name && errors?.[name] && classNames?.error
215
+ type !== "password" && fieldError && classNames?.error
170
216
  ),
171
217
  ...restOfProps
172
218
  }
@@ -181,78 +227,55 @@ function FormInputPrimitive(props) {
181
227
  isPasswordVisible ? /* @__PURE__ */ React2.createElement(EyeIconInvisible, { className: cnMerge("size-full", classNames?.eyeIcon) }) : /* @__PURE__ */ React2.createElement(EyeIconVisible, { className: cnMerge("size-full", classNames?.eyeIcon) })
182
228
  ));
183
229
  }
184
- function FormInput(props) {
185
- const { rules, ...restOfProps } = props;
186
- const { name } = useStrictFormItemContext();
187
- const { control, register } = useFormRootContext();
188
- const formState = useFormState({ control, name });
189
- return /* @__PURE__ */ React2.createElement(
190
- FormInputPrimitive,
191
- {
192
- name,
193
- formState,
194
- ...Boolean(name) && register(name, rules),
195
- ...restOfProps
196
- }
197
- );
198
- }
199
230
  function FormTextAreaPrimitive(props) {
200
- const contextValues = useLaxFormItemContext();
231
+ const fieldContextValues = useLaxFormFieldContext();
201
232
  const {
202
233
  className,
203
- control,
204
234
  errorClassName,
205
- formState,
206
- id = contextValues?.uniqueId,
207
- name = contextValues?.name,
235
+ id = fieldContextValues?.formItemId,
236
+ name = fieldContextValues?.name,
208
237
  ...restOfProps
209
238
  } = props;
210
- const getFormState = control ? useFormState : () => formState;
211
- const { errors } = getFormState({ control, name }) ?? {};
239
+ const fieldState = useLaxGetFieldState(name);
240
+ const fieldError = fieldState?.error;
212
241
  return /* @__PURE__ */ React2.createElement(
213
242
  "textarea",
214
243
  {
215
244
  "data-scope": "form",
216
245
  "data-part": "textarea",
246
+ "aria-describedby": !fieldError ? fieldContextValues?.formDescriptionId : `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`,
247
+ "aria-invalid": Boolean(fieldError),
217
248
  id,
218
249
  name,
219
250
  className: cnMerge(
220
251
  `w-full bg-transparent text-sm placeholder:text-shadcn-muted-foreground
221
252
  focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50`,
222
253
  className,
223
- name && errors?.[name] && errorClassName
254
+ fieldError && errorClassName
224
255
  ),
225
256
  ...restOfProps
226
257
  }
227
258
  );
228
259
  }
229
- function FormTextArea(props) {
230
- const { rules, ...restOfProps } = props;
231
- const { name } = useStrictFormItemContext();
232
- const { control, register } = useFormRootContext();
233
- const formState = useFormState({ control, name });
260
+ function FormInput(props) {
261
+ const { rules, type, ...restOfProps } = props;
262
+ const { name } = useStrictFormFieldContext();
263
+ const { register } = useFormRootContext();
264
+ const SelectedInput = type === "textarea" ? FormTextAreaPrimitive : FormInputPrimitive;
234
265
  return /* @__PURE__ */ React2.createElement(
235
- FormTextAreaPrimitive,
266
+ SelectedInput,
236
267
  {
268
+ type,
237
269
  name,
238
- formState,
239
270
  ...Boolean(name) && register(name, rules),
240
271
  ...restOfProps
241
272
  }
242
273
  );
243
274
  }
244
- var FormControllerPrimitive = (props) => {
245
- return /* @__PURE__ */ React2.createElement(Controller, { ...props });
246
- };
247
- function FormController(props) {
248
- const { control } = useFormRootContext();
249
- const { name } = useStrictFormItemContext();
250
- const { render, ...restOfProps } = props;
251
- return /* @__PURE__ */ React2.createElement(FormControllerPrimitive, { name, control, render, ...restOfProps });
252
- }
253
275
  function FormDescription(props) {
254
276
  const { className, ...restOfProps } = props;
255
- return /* @__PURE__ */ React2.createElement("p", { className: cnMerge("text-[12px]", className), ...restOfProps });
277
+ const { formDescriptionId } = useLaxFormFieldContext() ?? {};
278
+ return /* @__PURE__ */ React2.createElement("p", { id: formDescriptionId, className: cnMerge("text-[12px]", className), ...restOfProps });
256
279
  }
257
280
  var FormErrorMessagePrimitive = (props) => {
258
281
  const {
@@ -266,6 +289,7 @@ var FormErrorMessagePrimitive = (props) => {
266
289
  withAnimationOnInvalid = true
267
290
  } = props;
268
291
  const formState = useFormState({ control });
292
+ const { formMessageId } = useLaxFormFieldContext() ?? {};
269
293
  const wrapperRef = useRef(null);
270
294
  const errorAnimationClass = classNames?.errorMessageAnimation ?? "animate-shake";
271
295
  useEffect(() => {
@@ -299,6 +323,7 @@ var FormErrorMessagePrimitive = (props) => {
299
323
  "data-index": index,
300
324
  "data-part": "error-message",
301
325
  "data-scope": "form",
326
+ id: formMessageId,
302
327
  onAnimationEnd
303
328
  });
304
329
  const getRenderState = ({ errorMessage, index }) => ({
@@ -323,8 +348,8 @@ var FormErrorMessagePrimitive = (props) => {
323
348
  );
324
349
  };
325
350
  function FormErrorMessage(props) {
326
- const contextValues = useLaxFormItemContext();
327
- const { className, errorField = contextValues?.name, type = "regular" } = props;
351
+ const fieldContextValues = useLaxFormFieldContext();
352
+ const { className, errorField = fieldContextValues?.name, type = "regular" } = props;
328
353
  const { control } = useFormRootContext();
329
354
  return /* @__PURE__ */ React2.createElement(
330
355
  FormErrorMessagePrimitive,
@@ -344,9 +369,14 @@ function FormErrorMessage(props) {
344
369
  }
345
370
  );
346
371
  }
372
+ function FormSubmit(props) {
373
+ const { as: Element = "button", asChild, children, type = "submit", ...restOfProps } = props;
374
+ const Component = asChild ? Slot : Element;
375
+ return /* @__PURE__ */ React2.createElement(Component, { type, ...restOfProps }, children);
376
+ }
347
377
  function FormFieldSubscribe(props) {
348
- const contextValues = useLaxFormItemContext();
349
- const { children, name = contextValues?.name, render } = props;
378
+ const fieldContextValues = useLaxFormFieldContext();
379
+ const { children, name = fieldContextValues?.name, render } = props;
350
380
  const { control } = useFormRootContext();
351
381
  const formValue = useWatch({ control, name });
352
382
  const fieldProps = { value: formValue };
@@ -356,8 +386,8 @@ function FormFieldSubscribe(props) {
356
386
  return render(fieldProps);
357
387
  }
358
388
  function FormStateSubscribe(props) {
359
- const contextValues = useLaxFormItemContext();
360
- const { children, control, name = contextValues?.name, render } = props;
389
+ const fieldContextValues = useLaxFormFieldContext();
390
+ const { children, control, name = fieldContextValues?.name, render } = props;
361
391
  const formState = useFormState({ control, name });
362
392
  if (typeof children === "function") {
363
393
  return children(formState);
@@ -368,26 +398,26 @@ function FormStateSubscribe(props) {
368
398
  // src/components/ui/form/form-parts.ts
369
399
  var form_parts_exports = {};
370
400
  __export(form_parts_exports, {
371
- Controller: () => FormController,
372
- ControllerPrimitive: () => FormControllerPrimitive,
401
+ ControlledField: () => FormControlledField,
373
402
  Description: () => FormDescription,
374
403
  ErrorMessage: () => FormErrorMessage,
375
404
  ErrorMessagePrimitive: () => FormErrorMessagePrimitive,
405
+ Field: () => FormField,
406
+ FieldContext: () => FormFieldContext,
407
+ FieldController: () => FormFieldController,
376
408
  FieldSubscribe: () => FormFieldSubscribe,
377
409
  Input: () => FormInput,
378
410
  InputGroup: () => FormInputGroup,
379
411
  InputLeftItem: () => FormInputLeftItem,
380
412
  InputPrimitive: () => FormInputPrimitive,
381
413
  InputRightItem: () => FormInputRightItem,
382
- Item: () => FormItem,
383
- ItemContext: () => FormItemContext,
384
414
  Label: () => FormLabel,
385
415
  Root: () => FormRoot,
386
416
  StateSubscribe: () => FormStateSubscribe,
387
- TextArea: () => FormTextArea,
417
+ Submit: () => FormSubmit,
388
418
  TextAreaPrimitive: () => FormTextAreaPrimitive
389
419
  });
390
420
 
391
- export { FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, form_parts_exports, useStrictFormItemContext };
392
- //# sourceMappingURL=chunk-NEAL4P57.js.map
393
- //# sourceMappingURL=chunk-NEAL4P57.js.map
421
+ export { FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, form_parts_exports, useStrictFormFieldContext };
422
+ //# sourceMappingURL=chunk-FFJY632O.js.map
423
+ //# sourceMappingURL=chunk-FFJY632O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/icons/EyeIcon.tsx","../../src/components/ui/form/form-context.ts","../../src/components/ui/form/form.tsx","../../src/components/ui/form/form-parts.ts"],"names":["React","HookFormProvider","ReactFragment"],"mappings":"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","file":"chunk-FFJY632O.js","sourcesContent":["import * as React from \"react\";\n\nexport const EyeIconInvisible = (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 EyeIconVisible = (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 { ContextError, createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport type { DiscriminatedRenderProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { type UseFormReturn, useFormContext } from \"react-hook-form\";\nimport type { FieldValues } from \"./form\";\n\nexport const useFormRootContext = () => {\n\tconst formContext = useFormContext() as UseFormReturn<FieldValues> | null;\n\n\tif (!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 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 useStrictGetFieldState = () => {\n\tconst { name } = useStrictFormFieldContext();\n\n\tconst { formState, getFieldState } = useFormRootContext();\n\n\tconst fieldState = getFieldState(name, formState);\n\n\treturn fieldState;\n};\n\nexport const useLaxGetFieldState = (name: string | undefined) => {\n\tconst { formState, getFieldState } = useFormRootContext();\n\n\tif (!name) return;\n\n\tconst fieldState = getFieldState(name, formState);\n\n\treturn fieldState;\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\tFieldContextValue,\n\tfalse\n>({\n\thookName: \"useLaxFormFieldContext\",\n\tname: \"LaxFormFieldContext\",\n\tproviderName: \"FormField\",\n\tstrict: false,\n});\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Slot } from \"@/components/common\";\nimport { getElementList } from \"@/components/common/for\";\nimport { EyeIconInvisible, EyeIconVisible } from \"@/components/icons\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport { toArray } from \"@zayne-labs/toolkit-core\";\nimport { useToggle } from \"@zayne-labs/toolkit-react\";\nimport {\n\ttype DiscriminatedRenderProps,\n\ttype InferProps,\n\ttype PolymorphicProps,\n\tgetOtherChildren,\n\tgetSlotElement,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport { Fragment as ReactFragment, useEffect, useId, useMemo, useRef } from \"react\";\nimport {\n\ttype Control,\n\tController,\n\ttype ControllerFieldState,\n\ttype ControllerProps,\n\ttype ControllerRenderProps,\n\ttype FieldPath,\n\ttype FieldPathValue,\n\ttype FieldPathValues,\n\tFormProvider as HookFormProvider,\n\ttype RegisterOptions,\n\ttype UseFormReturn,\n\ttype UseFormStateReturn,\n\tuseFormState,\n\tuseWatch,\n} from \"react-hook-form\";\nimport {\n\ttype FieldContextValue,\n\ttype FormFieldContextProps,\n\tLaxFormFieldProvider,\n\tStrictFormFieldProvider,\n\tuseFormRootContext,\n\tuseLaxFormFieldContext,\n\tuseLaxGetFieldState,\n\tuseStrictFormFieldContext,\n} from \"./form-context\";\n\nexport type FieldValues = Record<string, unknown>;\n\ntype FormRootProps<TFieldValues extends FieldValues> = React.ComponentPropsWithoutRef<\"form\"> & {\n\tchildren: React.ReactNode;\n\tmethods: UseFormReturn<TFieldValues>;\n};\n\nexport function FormRoot<TValues extends FieldValues>(props: FormRootProps<TValues>) {\n\tconst { children, className, methods, ...restOfProps } = props;\n\n\treturn (\n\t\t<HookFormProvider {...methods}>\n\t\t\t<form\n\t\t\t\tclassName={cnMerge(\"flex flex-col\", className)}\n\t\t\t\t{...restOfProps}\n\t\t\t\tdata-scope=\"form\"\n\t\t\t\tdata-part=\"root\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</form>\n\t\t</HookFormProvider>\n\t);\n}\n\ntype FormFieldProps<TControl, TFieldValues extends FieldValues> = (TControl extends Control<infer TValues>\n\t? {\n\t\t\tcontrol?: never;\n\t\t\tname: FieldPath<TValues>;\n\t\t}\n\t: {\n\t\t\tcontrol?: Control<TFieldValues>;\n\t\t\tname: FieldPath<TFieldValues>;\n\t\t})\n\t& (\n\t\t| (InferProps<\"div\"> & {\n\t\t\t\twithWrapper?: true;\n\t\t })\n\t\t| { children: React.ReactNode; className?: never; withWrapper: false }\n\t);\n\nexport function FormField<TControl, TFieldValues extends FieldValues = FieldValues>(\n\tprops: FormFieldProps<TControl, TFieldValues>\n) {\n\tconst { children, className, name, withWrapper = true } = 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\tconst WrapperElement = withWrapper ? \"div\" : ReactFragment;\n\n\tconst wrapperElementProps = withWrapper && {\n\t\tclassName: cnMerge(\"flex flex-col\", className),\n\t\t\"data-part\": \"field\",\n\t\t\"data-scope\": \"form\",\n\t};\n\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\nexport function FormControlledField<TFieldValues extends FieldValues>(\n\tprops: ControllerProps<TFieldValues>\n) {\n\tconst { name } = 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 {...props} />\n\t\t\t</LaxFormFieldProvider>\n\t\t</StrictFormFieldProvider>\n\t);\n}\n\ntype FormFieldControllerRenderFn = (props: {\n\tfield: Omit<ControllerRenderProps, \"value\"> & {\n\t\tvalue: never;\n\t};\n\tfieldState: ControllerFieldState;\n\tformState: UseFormStateReturn<never>;\n}) => React.ReactElement;\n\ntype FormFieldControllerProps = Omit<\n\tControllerProps<FieldValues, FieldPath<FieldValues>>,\n\t\"control\" | \"name\" | \"render\"\n> & {\n\trender: FormFieldControllerRenderFn;\n};\n\nexport function FormFieldController(props: FormFieldControllerProps) {\n\tconst { control } = useFormRootContext();\n\tconst { name } = useStrictFormFieldContext();\n\tconst { render, ...restOfProps } = props;\n\n\treturn <Controller name={name} control={control} render={render as never} {...restOfProps} />;\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 { formItemId } = useStrictFormFieldContext();\n\tconst { children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<label\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"label\"\n\t\t\thtmlFor={formItemId}\n\t\t\tclassName={className}\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: React.ComponentPropsWithRef<\"div\">) {\n\tconst { children, className, ...restOfProps } = props;\n\tconst LeftItemSlot = getSlotElement(children, FormInputLeftItem);\n\tconst RightItemSlot = getSlotElement(children, FormInputRightItem);\n\n\tconst otherChildren = getOtherChildren(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\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{otherChildren}\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: PolymorphicProps<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\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.slot = Symbol.for(\"leftItem\");\n\nexport function FormInputRightItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicProps<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\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.slot = Symbol.for(\"rightItem\");\n\ntype FormInputPrimitiveProps<TFieldValues extends FieldValues = 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\tname?: FieldPath<TFieldValues>;\n\twithEyeIcon?: boolean;\n};\n\ntype FormTextAreaPrimitiveProps<TFieldValues extends FieldValues = FieldValues> =\n\tReact.ComponentPropsWithRef<\"textarea\"> & {\n\t\tcontrol?: Control<TFieldValues>;\n\t\terrorClassName?: string;\n\t\tname?: FieldPath<TFieldValues>;\n\t\ttype: \"textarea\";\n\t};\n\nconst inputTypesWithoutFullWith = 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 {\n\t\tclassName,\n\t\tclassNames,\n\t\tid = fieldContextValues?.formItemId,\n\t\tname = fieldContextValues?.name,\n\t\ttype = \"text\",\n\t\twithEyeIcon = true,\n\t\t...restOfProps\n\t} = props;\n\n\tconst fieldState = useLaxGetFieldState(name);\n\n\tconst fieldError = fieldState?.error;\n\n\tconst [isPasswordVisible, toggleVisibility] = useToggle(false);\n\n\tconst shouldHaveEyeIcon = withEyeIcon && type === \"password\";\n\n\tconst WrapperElement = shouldHaveEyeIcon ? FormInputGroup : ReactFragment;\n\n\tconst wrapperElementProps = shouldHaveEyeIcon && {\n\t\tclassName: cnMerge(\"w-full\", classNames?.inputGroup, fieldError && classNames?.error),\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\taria-describedby={\n\t\t\t\t\t!fieldError\n\t\t\t\t\t\t? fieldContextValues?.formDescriptionId\n\t\t\t\t\t\t: `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t\t}\n\t\t\t\taria-invalid={Boolean(fieldError)}\n\t\t\t\tid={id}\n\t\t\t\tname={name}\n\t\t\t\ttype={type === \"password\" && isPasswordVisible ? \"text\" : type}\n\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t!inputTypesWithoutFullWith.has(type) && \"flex w-full\",\n\t\t\t\t\t`bg-transparent text-sm file:border-0 file:bg-transparent\n\t\t\t\t\tplaceholder:text-shadcn-muted-foreground focus-visible:outline-none\n\t\t\t\t\tdisabled: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\" && fieldError && classNames?.error\n\t\t\t\t)}\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={toggleVisibility}\n\t\t\t\t\tclassName=\"size-5 shrink-0 lg:size-6\"\n\t\t\t\t>\n\t\t\t\t\t{isPasswordVisible ? (\n\t\t\t\t\t\t<EyeIconInvisible className={cnMerge(\"size-full\", classNames?.eyeIcon)} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<EyeIconVisible className={cnMerge(\"size-full\", classNames?.eyeIcon)} />\n\t\t\t\t\t)}\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 {\n\t\tclassName,\n\t\terrorClassName,\n\t\tid = fieldContextValues?.formItemId,\n\t\tname = fieldContextValues?.name,\n\t\t...restOfProps\n\t} = props;\n\n\tconst fieldState = useLaxGetFieldState(name);\n\n\tconst fieldError = fieldState?.error;\n\n\treturn (\n\t\t<textarea\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"textarea\"\n\t\t\taria-describedby={\n\t\t\t\t!fieldError\n\t\t\t\t\t? fieldContextValues?.formDescriptionId\n\t\t\t\t\t: `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={Boolean(fieldError)}\n\t\t\tid={id}\n\t\t\tname={name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-shadcn-muted-foreground\n\t\t\t\tfocus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tfieldError && errorClassName\n\t\t\t)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype PrimitivePropsToOmit = \"control\" | \"formState\" | \"name\" | \"ref\";\ntype FormInputProps =\n\t| Omit<FormInputPrimitiveProps, PrimitivePropsToOmit>\n\t| Omit<FormTextAreaPrimitiveProps & { type: \"textarea\" }, PrimitivePropsToOmit>;\n\nexport function FormInput(props: FormInputProps & { rules?: RegisterOptions }) {\n\tconst { rules, type, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormFieldContext();\n\tconst { register } = useFormRootContext();\n\n\tconst SelectedInput = type === \"textarea\" ? FormTextAreaPrimitive : FormInputPrimitive;\n\n\treturn (\n\t\t<SelectedInput\n\t\t\ttype={type as never}\n\t\t\tname={name}\n\t\t\t{...(Boolean(name) && register(name, rules))}\n\t\t\t{...(restOfProps as NonNullable<unknown>)}\n\t\t/>\n\t);\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\": string;\n\t\"data-scope\": string;\n\tid: string | undefined;\n\tonAnimationEnd?: React.ReactEventHandler<HTMLElement>;\n};\n\ntype ErrorMessageRenderState = { errorMessage: string; errorMessageArray: string[]; index: number };\n\ntype ErrorMessageRenderFn = (context: {\n\tprops: ErrorMessageRenderProps;\n\tstate: ErrorMessageRenderState;\n}) => React.ReactNode;\n\ntype FormErrorMessagePrimitiveProps<TFieldValues extends FieldValues> =\n\tDiscriminatedRenderProps<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\twithAnimationOnInvalid?: boolean;\n\t} & (\n\t\t\t| {\n\t\t\t\t\terrorField: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\terrorField: 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 {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\terrorField,\n\t\trender,\n\t\ttype = \"regular\",\n\t\twithAnimationOnInvalid = true,\n\t} = props;\n\n\tconst formState = useFormState({ control });\n\n\tconst { formMessageId } = useLaxFormFieldContext() ?? {};\n\n\tconst wrapperRef = useRef<HTMLUListElement>(null);\n\n\tconst errorAnimationClass = classNames?.errorMessageAnimation ?? \"animate-shake\";\n\n\tuseEffect(() => {\n\t\tif (!withAnimationOnInvalid) return;\n\n\t\tconst errorMessageElements = wrapperRef.current?.children;\n\n\t\tif (!errorMessageElements) return;\n\n\t\tfor (const element of errorMessageElements) {\n\t\t\telement.classList.add(errorAnimationClass);\n\t\t}\n\t}, [errorAnimationClass, withAnimationOnInvalid]);\n\n\tuseEffect(() => {\n\t\tconst errorMessageElements = wrapperRef.current?.children;\n\n\t\tif (!errorMessageElements) return;\n\n\t\t// == Scroll to first error message\n\t\tif (Object.keys(formState.errors).indexOf(errorField as string) === 0) {\n\t\t\terrorMessageElements[0]?.scrollIntoView({\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t\tblock: \"center\",\n\t\t\t});\n\n\t\t\twindow.scrollBy({ behavior: \"smooth\", top: -100 });\n\t\t}\n\t}, [errorField, formState.errors]);\n\n\tconst message = (\n\t\ttype === \"root\"\n\t\t\t? formState.errors.root?.[errorField as string]?.message\n\t\t\t: formState.errors[errorField]?.message\n\t) as string | string[];\n\n\tif (!message) {\n\t\treturn null;\n\t}\n\n\tconst errorMessageArray = toArray(message);\n\n\tconst [ErrorMessageList] = getElementList();\n\n\tconst onAnimationEnd: React.AnimationEventHandler<HTMLElement> | undefined = withAnimationOnInvalid\n\t\t? (event) => event.currentTarget.classList.remove(errorAnimationClass)\n\t\t: undefined;\n\n\tconst getRenderProps = ({ index }: { index: number }) =>\n\t\t({\n\t\t\tclassName: cnMerge(errorAnimationClass, 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\tid: formMessageId,\n\t\t\tonAnimationEnd,\n\t\t}) satisfies ErrorMessageRenderProps;\n\n\tconst getRenderState = ({ errorMessage, index }: { errorMessage: string; index: number }) =>\n\t\t({\n\t\t\terrorMessage,\n\t\t\terrorMessageArray,\n\t\t\tindex,\n\t\t}) satisfies ErrorMessageRenderState;\n\n\tconst renderFn = typeof children === \"function\" ? children : render;\n\n\treturn (\n\t\t<ErrorMessageList\n\t\t\tref={wrapperRef}\n\t\t\teach={errorMessageArray}\n\t\t\tclassName={cnMerge(\"flex flex-col\", classNames?.container)}\n\t\t\trender={(errorMessage, index) => {\n\t\t\t\treturn renderFn({\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> =\n\t| (TControl extends Control<infer TValues>\n\t\t\t? {\n\t\t\t\t\tclassName?: string;\n\t\t\t\t\tcontrol?: never;\n\t\t\t\t\terrorField?: FieldPath<TValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tclassName?: string;\n\t\t\t\t\tcontrol?: Control<TFieldValues>; // == Here for type inference of errorField prop\n\t\t\t\t\terrorField?: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t\t})\n\t| {\n\t\t\tclassName?: string;\n\t\t\tcontrol?: never;\n\t\t\terrorField: string;\n\t\t\ttype: \"root\";\n\t };\n\nexport function FormErrorMessage<TControl, TFieldValues extends FieldValues = FieldValues>(\n\tprops: FormErrorMessageProps<TControl, TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { className, errorField = fieldContextValues?.name, type = \"regular\" } = props;\n\n\tconst { control } = useFormRootContext();\n\n\treturn (\n\t\t<FormErrorMessagePrimitive\n\t\t\tcontrol={control}\n\t\t\terrorField={errorField as NonNullable<typeof errorField>}\n\t\t\ttype={type as \"root\"}\n\t\t\trender={({ props: renderProps, state: { errorMessage } }) => (\n\t\t\t\t<p\n\t\t\t\t\t{...renderProps}\n\t\t\t\t\tkey={errorMessage}\n\t\t\t\t\tclassName={cnMerge(\"text-[13px]\", \"data-[index=0]:mt-1\", renderProps.className, className)}\n\t\t\t\t>\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</p>\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: PolymorphicProps<TElement, FormSubmitProps>\n) {\n\tconst { as: Element = \"button\", asChild, children, type = \"submit\", ...restOfProps } = props;\n\n\tconst Component = asChild ? Slot : Element;\n\n\treturn (\n\t\t<Component type={type} {...restOfProps}>\n\t\t\t{children}\n\t\t</Component>\n\t);\n}\n\ntype GetFieldValue<TFieldPathOrPaths, TFieldValues extends FieldValues> =\n\tTFieldPathOrPaths extends Array<FieldPath<TFieldValues>>\n\t\t? FieldPathValues<TFieldValues, TFieldPathOrPaths>\n\t\t: TFieldPathOrPaths extends FieldPath<TFieldValues>\n\t\t\t? FieldPathValue<TFieldValues, TFieldPathOrPaths>\n\t\t\t: unknown;\n\ntype FieldSubscribeRenderFn<TFieldValues extends FieldValues, TFieldPathOrPaths> = (props: {\n\tvalue: GetFieldValue<TFieldPathOrPaths, TFieldValues>;\n}) => React.ReactNode;\n\ntype FormFieldSubscribeProps<\n\tTFieldValues extends FieldValues,\n\tTFieldPathOrPaths,\n> = DiscriminatedRenderProps<FieldSubscribeRenderFn<TFieldValues, TFieldPathOrPaths>> & {\n\tcontrol: Control<TFieldValues>;\n\tname?: TFieldPathOrPaths;\n};\n\nexport function FormFieldSubscribe<\n\tTFieldValues extends FieldValues,\n\tconst TFieldPathOrPaths extends Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues>,\n>(props: FormFieldSubscribeProps<TFieldValues, TFieldPathOrPaths>) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { children, name = fieldContextValues?.name, render } = props;\n\n\tconst { control } = useFormRootContext();\n\n\tconst formValue = useWatch({ control, name: name as string });\n\n\tconst fieldProps = { value: formValue };\n\n\tif (typeof children === \"function\") {\n\t\treturn children(fieldProps as never);\n\t}\n\n\treturn render(fieldProps as never);\n}\n\ntype FormStateSubscribeRenderFn<TFieldValues extends FieldValues> = (\n\tprops: UseFormStateReturn<TFieldValues>\n) => React.ReactNode;\n\ntype FormStateSubscribeProps<TFieldValues extends FieldValues> = DiscriminatedRenderProps<\n\tFormStateSubscribeRenderFn<TFieldValues>\n> & {\n\tcontrol?: Control<TFieldValues>;\n\tname?: Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues>;\n};\n\nexport function FormStateSubscribe<TFieldValues extends FieldValues = FieldValues>(\n\tprops: FormStateSubscribeProps<TFieldValues>\n) {\n\tconst fieldContextValues = useLaxFormFieldContext();\n\n\tconst { children, control, name = fieldContextValues?.name, render } = props;\n\n\tconst formState = useFormState({ control, name: name as FieldPath<TFieldValues> });\n\n\tif (typeof children === \"function\") {\n\t\treturn children(formState as never);\n\t}\n\n\treturn render(formState as never);\n}\n","export {\n\tFormFieldController as FieldController,\n\tFormControlledField as ControlledField,\n\tFormDescription as Description,\n\tFormErrorMessage as ErrorMessage,\n\tFormErrorMessagePrimitive as ErrorMessagePrimitive,\n\tFormInput as Input,\n\tFormInputGroup as InputGroup,\n\tFormInputLeftItem as InputLeftItem,\n\tFormInputPrimitive as InputPrimitive,\n\tFormInputRightItem as InputRightItem,\n\tFormField as Field,\n\tFormFieldContext as FieldContext,\n\tFormLabel as Label,\n\tFormRoot as Root,\n\tFormSubmit as Submit,\n\tFormStateSubscribe as StateSubscribe,\n\tFormFieldSubscribe as FieldSubscribe,\n\tFormTextAreaPrimitive as TextAreaPrimitive,\n} from \"./form\";\n"]}
@@ -2,7 +2,7 @@ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardRoot, C
2
2
  export { Carousel, CarouselButton, CarouselButtonsProps, CarouselCaption, CarouselContent, CarouselContentProps, CarouselControlProps, CarouselControls, CarouselIndicator, CarouselIndicatorGroup, CarouselIndicatorProps, CarouselItem, CarouselItemGroup, CarouselProviderProps, CarouselStore, CarouselStoreApi, CarouselWrapperProps, ImagesType, OtherCarouselProps } from './ui/carousel/index.js';
3
3
  export { useDragScroll } from './ui/drag-scroll/index.js';
4
4
  export { DropZone, InputProps, RootProps, UseDropZoneProps, useDropZone } from './ui/drop-zone/index.js';
5
- export { FieldValues, Form, FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, useFormItemContext } from './ui/form/index.js';
5
+ export { FieldValues, Form, FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, useFormFieldContext } from './ui/form/index.js';
6
6
  export { ForBase, ForList, ForRenderProps, getElementList } from './common/for/index.js';
7
7
  export { Show, ShowContent, ShowFallback, ShowRoot } from './common/show/index.js';
8
8
  export { Slot, Slottable } from './common/slot/index.js';
package/dist/esm/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import './chunk-HKPJTORQ.js';
2
1
  import './chunk-PNYEIX7F.js';
3
2
  export { card_parts_exports as Card, CardContent, CardDescription, CardFooter, CardHeader, CardRoot, CardTitle } from './chunk-PXYYL2LL.js';
4
3
  export { carousel_parts_exports as Carousel, CarouselButton, CarouselCaption, CarouselContent, CarouselControls, CarouselIndicator, CarouselIndicatorGroup, CarouselItem, CarouselItemGroup } from './chunk-GVL6BLX5.js';
5
- export { useDragScroll } from './chunk-Y7TF3SRM.js';
4
+ export { useDragScroll } from './chunk-E42DOTGX.js';
6
5
  export { DropZone, useDropZone } from './chunk-2YCUMTC7.js';
7
- export { form_parts_exports as Form, FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, useStrictFormItemContext as useFormItemContext } from './chunk-NEAL4P57.js';
6
+ export { form_parts_exports as Form, FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, useStrictFormFieldContext as useFormFieldContext } from './chunk-FFJY632O.js';
8
7
  import './chunk-OHG7GB7O.js';
8
+ import './chunk-HKPJTORQ.js';
9
9
  export { ForBase, ForList, getElementList } from './chunk-DW3FXTFL.js';
10
10
  export { show_parts_exports as Show, ShowContent, ShowFallback, ShowRoot } from './chunk-NCS3WKFW.js';
11
11
  export { Slot, Slottable } from './chunk-ENDWJXPF.js';
@@ -1,4 +1,4 @@
1
- export { useDragScroll } from '../../chunk-Y7TF3SRM.js';
1
+ export { useDragScroll } from '../../chunk-E42DOTGX.js';
2
2
  import '../../chunk-OHG7GB7O.js';
3
3
  import '../../chunk-PZ5AY32C.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1,14 +1,15 @@
1
1
  import * as react from 'react';
2
2
  import { DiscriminatedRenderProps, InferProps, PolymorphicProps } from '@zayne-labs/toolkit-react/utils';
3
- import { UnionDiscriminator } from '@zayne-labs/toolkit-type-helpers';
4
- import { ControllerProps, FieldPath, ControllerRenderProps, ControllerFieldState, UseFormStateReturn, Controller, Control, FormState, RegisterOptions, UseFormReturn, FieldPathValues, FieldPathValue } from 'react-hook-form';
3
+ import { ControllerProps, FieldPath, ControllerRenderProps, ControllerFieldState, UseFormStateReturn, Control, RegisterOptions, UseFormReturn, FieldPathValues, FieldPathValue } from 'react-hook-form';
5
4
 
6
- type ItemContextValue = {
5
+ type FieldContextValue = {
6
+ formDescriptionId: `${string}-(${string})-form-item-description`;
7
+ formItemId: `${string}-(${string})-form-item`;
8
+ formMessageId: `${string}-(${string})-form-item-message`;
7
9
  name: string;
8
- uniqueId: string;
9
10
  };
10
- type FormItemContextProps = DiscriminatedRenderProps<(contextValue: ItemContextValue) => React.ReactNode>;
11
- declare const useStrictFormItemContext: () => ItemContextValue;
11
+ type FormFieldContextProps = DiscriminatedRenderProps<(contextValue: FieldContextValue) => React.ReactNode>;
12
+ declare const useStrictFormFieldContext: () => FieldContextValue;
12
13
 
13
14
  type FieldValues = Record<string, unknown>;
14
15
  type FormRootProps<TFieldValues extends FieldValues> = react.ComponentPropsWithoutRef<"form"> & {
@@ -16,19 +17,33 @@ type FormRootProps<TFieldValues extends FieldValues> = react.ComponentPropsWitho
16
17
  methods: UseFormReturn<TFieldValues>;
17
18
  };
18
19
  declare function FormRoot<TValues extends FieldValues>(props: FormRootProps<TValues>): react.JSX.Element;
19
- type FormItemProps<TControl, TFieldValues extends FieldValues> = (TControl extends Control<infer TValues> ? {
20
+ type FormFieldProps<TControl, TFieldValues extends FieldValues> = (TControl extends Control<infer TValues> ? {
20
21
  control?: never;
21
22
  name: FieldPath<TValues>;
22
23
  } : {
23
24
  control?: Control<TFieldValues>;
24
25
  name: FieldPath<TFieldValues>;
25
- }) & {
26
+ }) & ((InferProps<"div"> & {
27
+ withWrapper?: true;
28
+ }) | {
26
29
  children: react.ReactNode;
27
- className?: string;
28
- withWrapper?: boolean;
30
+ className?: never;
31
+ withWrapper: false;
32
+ });
33
+ declare function FormField<TControl, TFieldValues extends FieldValues = FieldValues>(props: FormFieldProps<TControl, TFieldValues>): react.JSX.Element;
34
+ declare function FormControlledField<TFieldValues extends FieldValues>(props: ControllerProps<TFieldValues>): react.JSX.Element;
35
+ type FormFieldControllerRenderFn = (props: {
36
+ field: Omit<ControllerRenderProps, "value"> & {
37
+ value: never;
38
+ };
39
+ fieldState: ControllerFieldState;
40
+ formState: UseFormStateReturn<never>;
41
+ }) => react.ReactElement;
42
+ type FormFieldControllerProps = Omit<ControllerProps<FieldValues, FieldPath<FieldValues>>, "control" | "name" | "render"> & {
43
+ render: FormFieldControllerRenderFn;
29
44
  };
30
- declare function FormItem<TControl, TFieldValues extends FieldValues = FieldValues>(props: FormItemProps<TControl, TFieldValues>): react.JSX.Element;
31
- declare function FormItemContext(props: FormItemContextProps): react.ReactNode;
45
+ declare function FormFieldController(props: FormFieldControllerProps): react.JSX.Element;
46
+ declare function FormFieldContext(props: FormFieldContextProps): react.ReactNode;
32
47
  declare function FormLabel(props: InferProps<"label">): react.JSX.Element;
33
48
  declare function FormInputGroup(props: react.ComponentPropsWithRef<"div">): react.JSX.Element;
34
49
  type FormSideItemProps = {
@@ -43,54 +58,39 @@ declare function FormInputRightItem<TElement extends react.ElementType = "span">
43
58
  declare namespace FormInputRightItem {
44
59
  var slot: symbol;
45
60
  }
46
- type FormInputPrimitiveProps<TFieldValues extends FieldValues = FieldValues> = Omit<react.ComponentPropsWithRef<"input">, "children"> & UnionDiscriminator<[{
47
- control: Control<TFieldValues>;
48
- }, {
49
- formState?: FormState<TFieldValues>;
50
- }]> & {
61
+ type FormInputPrimitiveProps<TFieldValues extends FieldValues = FieldValues> = Omit<react.ComponentPropsWithRef<"input">, "children"> & {
51
62
  classNames?: {
52
63
  error?: string;
53
64
  eyeIcon?: string;
54
65
  input?: string;
55
66
  inputGroup?: string;
56
67
  };
68
+ control?: Control<TFieldValues>;
57
69
  name?: FieldPath<TFieldValues>;
58
70
  withEyeIcon?: boolean;
59
71
  };
60
- declare function FormInputPrimitive<TFieldValues extends FieldValues>(props: FormInputPrimitiveProps<TFieldValues>): react.JSX.Element;
61
- declare function FormInput(props: Omit<FormInputPrimitiveProps, "control" | "formState" | "name" | "ref"> & {
62
- rules?: RegisterOptions;
63
- }): react.JSX.Element;
64
72
  type FormTextAreaPrimitiveProps<TFieldValues extends FieldValues = FieldValues> = react.ComponentPropsWithRef<"textarea"> & {
73
+ control?: Control<TFieldValues>;
65
74
  errorClassName?: string;
66
75
  name?: FieldPath<TFieldValues>;
67
- } & UnionDiscriminator<[{
68
- control: Control<TFieldValues>;
69
- }, {
70
- formState?: FormState<TFieldValues>;
71
- }]>;
76
+ type: "textarea";
77
+ };
78
+ declare function FormInputPrimitive<TFieldValues extends FieldValues>(props: FormInputPrimitiveProps<TFieldValues>): react.JSX.Element;
72
79
  declare function FormTextAreaPrimitive<TFieldValues extends FieldValues>(props: FormTextAreaPrimitiveProps<TFieldValues>): react.JSX.Element;
73
- declare function FormTextArea(props: Omit<FormTextAreaPrimitiveProps, "control" | "formState" | "id" | "name" | "ref"> & {
80
+ type PrimitivePropsToOmit = "control" | "formState" | "name" | "ref";
81
+ type FormInputProps = Omit<FormInputPrimitiveProps, PrimitivePropsToOmit> | Omit<FormTextAreaPrimitiveProps & {
82
+ type: "textarea";
83
+ }, PrimitivePropsToOmit>;
84
+ declare function FormInput(props: FormInputProps & {
74
85
  rules?: RegisterOptions;
75
86
  }): react.JSX.Element;
76
- type FormControllerRenderFn = (props: {
77
- field: Omit<ControllerRenderProps, "value"> & {
78
- value: never;
79
- };
80
- fieldState: ControllerFieldState;
81
- formState: UseFormStateReturn<never>;
82
- }) => react.ReactElement;
83
- type FormControllerProps = Omit<ControllerProps<FieldValues, FieldPath<FieldValues>>, "control" | "name" | "render"> & {
84
- render: FormControllerRenderFn;
85
- };
86
- declare const FormControllerPrimitive: typeof Controller;
87
- declare function FormController(props: FormControllerProps): react.JSX.Element;
88
87
  declare function FormDescription(props: InferProps<"p">): react.JSX.Element;
89
88
  type ErrorMessageRenderProps = {
90
89
  className: string;
91
90
  "data-index": number;
92
91
  "data-part": string;
93
92
  "data-scope": string;
93
+ id: string | undefined;
94
94
  onAnimationEnd?: react.ReactEventHandler<HTMLElement>;
95
95
  };
96
96
  type ErrorMessageRenderState = {
@@ -144,8 +144,13 @@ type FormErrorMessageProps<TControl, TFieldValues extends FieldValues> = (TContr
144
144
  type: "root";
145
145
  };
146
146
  declare function FormErrorMessage<TControl, TFieldValues extends FieldValues = FieldValues>(props: FormErrorMessageProps<TControl, TFieldValues>): react.JSX.Element;
147
+ type FormSubmitProps = InferProps<"button"> & {
148
+ asChild?: boolean;
149
+ };
150
+ declare function FormSubmit<TElement extends react.ElementType = "button">(props: PolymorphicProps<TElement, FormSubmitProps>): react.JSX.Element;
151
+ type GetFieldValue<TFieldPathOrPaths, TFieldValues extends FieldValues> = TFieldPathOrPaths extends Array<FieldPath<TFieldValues>> ? FieldPathValues<TFieldValues, TFieldPathOrPaths> : TFieldPathOrPaths extends FieldPath<TFieldValues> ? FieldPathValue<TFieldValues, TFieldPathOrPaths> : unknown;
147
152
  type FieldSubscribeRenderFn<TFieldValues extends FieldValues, TFieldPathOrPaths> = (props: {
148
- value: TFieldPathOrPaths extends Array<FieldPath<TFieldValues>> ? FieldPathValues<TFieldValues, TFieldPathOrPaths> : TFieldPathOrPaths extends FieldPath<TFieldValues> ? FieldPathValue<TFieldValues, TFieldPathOrPaths> : unknown;
153
+ value: GetFieldValue<TFieldPathOrPaths, TFieldValues>;
149
154
  }) => react.ReactNode;
150
155
  type FormFieldSubscribeProps<TFieldValues extends FieldValues, TFieldPathOrPaths> = DiscriminatedRenderProps<FieldSubscribeRenderFn<TFieldValues, TFieldPathOrPaths>> & {
151
156
  control: Control<TFieldValues>;
@@ -160,7 +165,7 @@ type FormStateSubscribeProps<TFieldValues extends FieldValues> = DiscriminatedRe
160
165
  declare function FormStateSubscribe<TFieldValues extends FieldValues = FieldValues>(props: FormStateSubscribeProps<TFieldValues>): react.ReactNode;
161
166
 
162
167
  declare namespace formParts {
163
- export { FormController as Controller, FormControllerPrimitive as ControllerPrimitive, FormDescription as Description, FormErrorMessage as ErrorMessage, FormErrorMessagePrimitive as ErrorMessagePrimitive, FormFieldSubscribe as FieldSubscribe, FormInput as Input, FormInputGroup as InputGroup, FormInputLeftItem as InputLeftItem, FormInputPrimitive as InputPrimitive, FormInputRightItem as InputRightItem, FormItem as Item, FormItemContext as ItemContext, FormLabel as Label, FormRoot as Root, FormStateSubscribe as StateSubscribe, FormTextArea as TextArea, FormTextAreaPrimitive as TextAreaPrimitive };
168
+ export { FormControlledField as ControlledField, FormDescription as Description, FormErrorMessage as ErrorMessage, FormErrorMessagePrimitive as ErrorMessagePrimitive, FormField as Field, FormFieldContext as FieldContext, FormFieldController as FieldController, FormFieldSubscribe as FieldSubscribe, FormInput as Input, FormInputGroup as InputGroup, FormInputLeftItem as InputLeftItem, FormInputPrimitive as InputPrimitive, FormInputRightItem as InputRightItem, FormLabel as Label, FormRoot as Root, FormStateSubscribe as StateSubscribe, FormSubmit as Submit, FormTextAreaPrimitive as TextAreaPrimitive };
164
169
  }
165
170
 
166
- export { type FieldValues, formParts as Form, FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, useStrictFormItemContext as useFormItemContext };
171
+ export { type FieldValues, formParts as Form, FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, useStrictFormFieldContext as useFormFieldContext };
@@ -1,6 +1,11 @@
1
- export { form_parts_exports as Form, FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, useStrictFormItemContext as useFormItemContext } from '../../chunk-NEAL4P57.js';
1
+ export { form_parts_exports as Form, FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, useStrictFormFieldContext as useFormFieldContext } from '../../chunk-FFJY632O.js';
2
2
  import '../../chunk-OHG7GB7O.js';
3
+ import '../../chunk-HKPJTORQ.js';
3
4
  import '../../chunk-DW3FXTFL.js';
5
+ import '../../chunk-NCS3WKFW.js';
6
+ import '../../chunk-ENDWJXPF.js';
7
+ import '../../chunk-JKLRBPJZ.js';
8
+ import '../../chunk-CB2EZJYW.js';
4
9
  import '../../chunk-PZ5AY32C.js';
5
10
  //# sourceMappingURL=index.js.map
6
11
  //# sourceMappingURL=index.js.map
@@ -2,7 +2,7 @@ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardRoot, C
2
2
  export { Carousel, CarouselButton, CarouselButtonsProps, CarouselCaption, CarouselContent, CarouselContentProps, CarouselControlProps, CarouselControls, CarouselIndicator, CarouselIndicatorGroup, CarouselIndicatorProps, CarouselItem, CarouselItemGroup, CarouselProviderProps, CarouselStore, CarouselStoreApi, CarouselWrapperProps, ImagesType, OtherCarouselProps } from './carousel/index.js';
3
3
  export { useDragScroll } from './drag-scroll/index.js';
4
4
  export { DropZone, InputProps, RootProps, UseDropZoneProps, useDropZone } from './drop-zone/index.js';
5
- export { FieldValues, Form, FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, useFormItemContext } from './form/index.js';
5
+ export { FieldValues, Form, FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, useFormFieldContext } from './form/index.js';
6
6
  import 'react';
7
7
  import '@zayne-labs/toolkit-react/utils';
8
8
  import '@zayne-labs/toolkit-type-helpers';
@@ -1,12 +1,16 @@
1
1
  import '../chunk-PNYEIX7F.js';
2
2
  export { card_parts_exports as Card, CardContent, CardDescription, CardFooter, CardHeader, CardRoot, CardTitle } from '../chunk-PXYYL2LL.js';
3
3
  export { carousel_parts_exports as Carousel, CarouselButton, CarouselCaption, CarouselContent, CarouselControls, CarouselIndicator, CarouselIndicatorGroup, CarouselItem, CarouselItemGroup } from '../chunk-GVL6BLX5.js';
4
- export { useDragScroll } from '../chunk-Y7TF3SRM.js';
4
+ export { useDragScroll } from '../chunk-E42DOTGX.js';
5
5
  export { DropZone, useDropZone } from '../chunk-2YCUMTC7.js';
6
- export { form_parts_exports as Form, FormController, FormControllerPrimitive, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormItem, FormItemContext, FormLabel, FormRoot, FormStateSubscribe, FormTextArea, FormTextAreaPrimitive, useStrictFormItemContext as useFormItemContext } from '../chunk-NEAL4P57.js';
6
+ export { form_parts_exports as Form, FormControlledField, FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldController, FormFieldSubscribe, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormStateSubscribe, FormSubmit, FormTextAreaPrimitive, useStrictFormFieldContext as useFormFieldContext } from '../chunk-FFJY632O.js';
7
7
  import '../chunk-OHG7GB7O.js';
8
+ import '../chunk-HKPJTORQ.js';
8
9
  import '../chunk-DW3FXTFL.js';
10
+ import '../chunk-NCS3WKFW.js';
9
11
  import '../chunk-ENDWJXPF.js';
12
+ import '../chunk-JKLRBPJZ.js';
13
+ import '../chunk-CB2EZJYW.js';
10
14
  import '../chunk-PZ5AY32C.js';
11
15
  //# sourceMappingURL=index.js.map
12
16
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zayne-labs/ui-react",
3
3
  "type": "module",
4
- "version": "0.2.3",
4
+ "version": "0.4.0",
5
5
  "description": "A composable UI/UI-utilities components library. ",
6
6
  "author": "Ryan Zayne",
7
7
  "license": "MIT",
@@ -33,7 +33,8 @@
33
33
  "react": ">=18.0.0",
34
34
  "react-dom": ">=18.0.0",
35
35
  "react-hook-form": ">=7.53.2",
36
- "tailwind-merge": ">=2.5.5"
36
+ "tailwind-merge": ">=2.5.5",
37
+ "zustand": ">=5.0.3"
37
38
  },
38
39
  "peerDependenciesMeta": {
39
40
  "react": {
@@ -47,10 +48,9 @@
47
48
  }
48
49
  },
49
50
  "dependencies": {
50
- "@zayne-labs/toolkit-core": "^0.8.47",
51
- "@zayne-labs/toolkit-react": "^0.8.47",
52
- "@zayne-labs/toolkit-type-helpers": "^0.8.47",
53
- "zustand": "^5.0.3"
51
+ "@zayne-labs/toolkit-core": "^0.8.55",
52
+ "@zayne-labs/toolkit-react": "^0.8.55",
53
+ "@zayne-labs/toolkit-type-helpers": "^0.8.55"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@arethetypeswrong/cli": "0.17.4",
@@ -59,7 +59,8 @@
59
59
  "@total-typescript/ts-reset": "0.6.1",
60
60
  "@types/react": "^19.0.10",
61
61
  "@types/react-dom": "^19.0.4",
62
- "@zayne-labs/tsconfig": "0.2.3",
62
+ "@zayne-labs/prettier-config": "^0.7.8",
63
+ "@zayne-labs/tsconfig": "0.7.8",
63
64
  "concurrently": "^9.0.1",
64
65
  "cross-env": "^7.0.3",
65
66
  "publint": "^0.3.9",
@@ -70,7 +71,8 @@
70
71
  "tailwind-merge": "^3.0.2",
71
72
  "terser": "5.39.0",
72
73
  "tsup": "8.4.0",
73
- "typescript": "^5.8.2"
74
+ "typescript": "^5.8.2",
75
+ "zustand": "^5.0.3"
74
76
  },
75
77
  "publishConfig": {
76
78
  "access": "public",
@@ -80,11 +82,11 @@
80
82
  "size-limit": [
81
83
  {
82
84
  "path": "src/components/ui/**/index.ts",
83
- "limit": "4 kB"
85
+ "limit": "4.5 kB"
84
86
  },
85
87
  {
86
88
  "path": "src/components/common/**/index.ts",
87
- "limit": "500 b"
89
+ "limit": "600 b"
88
90
  }
89
91
  ],
90
92
  "scripts": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/icons/EyeIcon.tsx","../../src/components/ui/form/form-context.ts","../../src/components/ui/form/form.tsx","../../src/components/ui/form/form-parts.ts"],"names":["React","HookFormProvider","ReactFragment"],"mappings":"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","file":"chunk-NEAL4P57.js","sourcesContent":["import * as React from \"react\";\n\nexport const EyeIconInvisible = (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 EyeIconVisible = (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 { ContextError, createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport type { DiscriminatedRenderProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { type UseFormReturn, useFormContext } from \"react-hook-form\";\nimport type { FieldValues } from \"./form\";\n\nexport type FormRootContextValue<TFieldValues extends FieldValues = FieldValues> =\n\tUseFormReturn<TFieldValues>;\n\nexport const useFormRootContext = () => {\n\tconst formContext = useFormContext() as FormRootContextValue | null;\n\n\tif (!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 ItemContextValue = {\n\tname: string;\n\tuniqueId: string;\n};\n\nexport type FormItemContextProps = DiscriminatedRenderProps<\n\t(contextValue: ItemContextValue) => React.ReactNode\n>;\n\nexport const [StrictFormItemProvider, useStrictFormItemContext] = createCustomContext<ItemContextValue>({\n\thookName: \"useFormItemContext\",\n\tproviderName: \"FormItem\",\n});\n\nexport const [LaxFormItemProvider, useLaxFormItemContext] = createCustomContext<ItemContextValue, false>({\n\thookName: \"useLaxFormItemContext\",\n\tproviderName: \"FormItem\",\n\tstrict: false,\n});\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { getElementList } from \"@/components/common/for\";\nimport { EyeIconInvisible, EyeIconVisible } from \"@/components/icons\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport { toArray } from \"@zayne-labs/toolkit-core\";\nimport { useToggle } from \"@zayne-labs/toolkit-react\";\nimport {\n\ttype DiscriminatedRenderProps,\n\ttype InferProps,\n\ttype PolymorphicProps,\n\tgetOtherChildren,\n\tgetSlotElement,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport type { UnionDiscriminator } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Fragment as ReactFragment, useEffect, useId, useMemo, useRef } from \"react\";\nimport {\n\ttype Control,\n\tController,\n\ttype ControllerFieldState,\n\ttype ControllerProps,\n\ttype ControllerRenderProps,\n\ttype FieldPath,\n\ttype FieldPathValue,\n\ttype FieldPathValues,\n\ttype FormState,\n\tFormProvider as HookFormProvider,\n\ttype RegisterOptions,\n\ttype UseFormReturn,\n\ttype UseFormStateReturn,\n\tuseFormState,\n\tuseWatch,\n} from \"react-hook-form\";\nimport {\n\ttype FormItemContextProps,\n\tLaxFormItemProvider,\n\tStrictFormItemProvider,\n\tuseFormRootContext,\n\tuseLaxFormItemContext,\n\tuseStrictFormItemContext,\n} from \"./form-context\";\n\nexport type FieldValues = Record<string, unknown>;\n\ntype FormRootProps<TFieldValues extends FieldValues> = React.ComponentPropsWithoutRef<\"form\"> & {\n\tchildren: React.ReactNode;\n\tmethods: UseFormReturn<TFieldValues>;\n};\n\nexport function FormRoot<TValues extends FieldValues>(props: FormRootProps<TValues>) {\n\tconst { children, className, methods, ...restOfProps } = props;\n\n\treturn (\n\t\t<HookFormProvider {...methods}>\n\t\t\t<form\n\t\t\t\tclassName={cnMerge(\"flex flex-col\", className)}\n\t\t\t\t{...restOfProps}\n\t\t\t\tdata-scope=\"form\"\n\t\t\t\tdata-part=\"root\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</form>\n\t\t</HookFormProvider>\n\t);\n}\n\ntype FormItemProps<TControl, TFieldValues extends FieldValues> = (TControl extends Control<infer TValues>\n\t? {\n\t\t\tcontrol?: never;\n\t\t\tname: FieldPath<TValues>;\n\t\t}\n\t: {\n\t\t\tcontrol?: Control<TFieldValues>;\n\t\t\tname: FieldPath<TFieldValues>;\n\t\t}) & {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n\twithWrapper?: boolean;\n};\n\nexport function FormItem<TControl, TFieldValues extends FieldValues = FieldValues>(\n\tprops: FormItemProps<TControl, TFieldValues>\n) {\n\tconst { children, className, name, withWrapper = true } = props;\n\n\tconst uniqueId = useId();\n\n\tconst value = useMemo(\n\t\t() => ({ name: String(name), uniqueId: `${String(name)}-(${uniqueId})` }),\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\", className),\n\t\t\"data-part\": \"item\",\n\t\t\"data-scope\": \"form\",\n\t};\n\n\treturn (\n\t\t<StrictFormItemProvider value={value}>\n\t\t\t<LaxFormItemProvider value={value}>\n\t\t\t\t<WrapperElement {...wrapperElementProps}>{children}</WrapperElement>\n\t\t\t</LaxFormItemProvider>\n\t\t</StrictFormItemProvider>\n\t);\n}\n\nexport function FormItemContext(props: FormItemContextProps) {\n\tconst { children, render } = props;\n\tconst contextValues = useStrictFormItemContext();\n\n\tif (typeof children === \"function\") {\n\t\treturn children(contextValues);\n\t}\n\n\treturn render(contextValues);\n}\n\nexport function FormLabel(props: InferProps<\"label\">) {\n\tconst { uniqueId } = useStrictFormItemContext();\n\tconst { children, className, ...restOfProps } = props;\n\n\treturn (\n\t\t<label data-scope=\"form\" data-part=\"label\" htmlFor={uniqueId} className={className} {...restOfProps}>\n\t\t\t{children}\n\t\t</label>\n\t);\n}\n\nexport function FormInputGroup(props: React.ComponentPropsWithRef<\"div\">) {\n\tconst { children, className, ...restOfProps } = props;\n\tconst LeftItemSlot = getSlotElement(children, FormInputLeftItem);\n\tconst RightItemSlot = getSlotElement(children, FormInputRightItem);\n\n\tconst otherChildren = getOtherChildren(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\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{otherChildren}\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: PolymorphicProps<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\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.slot = Symbol.for(\"leftItem\");\n\nexport function FormInputRightItem<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicProps<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\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.slot = Symbol.for(\"rightItem\");\n\ntype FormInputPrimitiveProps<TFieldValues extends FieldValues = FieldValues> = Omit<\n\tReact.ComponentPropsWithRef<\"input\">,\n\t\"children\"\n>\n\t& UnionDiscriminator<[{ control: Control<TFieldValues> }, { formState?: FormState<TFieldValues> }]> & {\n\t\tclassNames?: { error?: string; eyeIcon?: string; input?: string; inputGroup?: string };\n\t\tname?: FieldPath<TFieldValues>;\n\t\twithEyeIcon?: boolean;\n\t};\n\nconst inputTypesWithoutFullWith = new Set<React.HTMLInputTypeAttribute>([\"checkbox\", \"radio\"]);\n\nexport function FormInputPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormInputPrimitiveProps<TFieldValues>\n) {\n\tconst contextValues = useLaxFormItemContext();\n\n\tconst {\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\tformState,\n\t\tid = contextValues?.uniqueId,\n\t\tname = contextValues?.name,\n\t\ttype = \"text\",\n\t\twithEyeIcon = true,\n\t\t...restOfProps\n\t} = props;\n\n\tconst getFormState = (control ? useFormState : () => formState) as typeof useFormState;\n\n\tconst { errors } =\n\t\t(getFormState({ control, name: name as never }) as UseFormStateReturn<TFieldValues> | undefined)\n\t\t?? {};\n\n\tconst [isPasswordVisible, toggleVisibility] = useToggle(false);\n\n\tconst shouldHaveEyeIcon = withEyeIcon && type === \"password\";\n\n\tconst WrapperElement = shouldHaveEyeIcon ? FormInputGroup : ReactFragment;\n\n\tconst wrapperElementProps = shouldHaveEyeIcon && {\n\t\tclassName: cnMerge(\"w-full\", classNames?.inputGroup, name && errors?.[name] && classNames?.error),\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\tid={id}\n\t\t\t\tname={name}\n\t\t\t\ttype={type === \"password\" && isPasswordVisible ? \"text\" : type}\n\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t!inputTypesWithoutFullWith.has(type) && \"flex w-full\",\n\t\t\t\t\t`bg-transparent text-sm file:border-0 file:bg-transparent\n\t\t\t\t\tplaceholder:text-shadcn-muted-foreground focus-visible:outline-none\n\t\t\t\t\tdisabled: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\" && name && errors?.[name] && classNames?.error\n\t\t\t\t)}\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={toggleVisibility}\n\t\t\t\t\tclassName=\"size-5 shrink-0 lg:size-6\"\n\t\t\t\t>\n\t\t\t\t\t{isPasswordVisible ? (\n\t\t\t\t\t\t<EyeIconInvisible className={cnMerge(\"size-full\", classNames?.eyeIcon)} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<EyeIconVisible className={cnMerge(\"size-full\", classNames?.eyeIcon)} />\n\t\t\t\t\t)}\n\t\t\t\t</FormInputRightItem>\n\t\t\t)}\n\t\t</WrapperElement>\n\t);\n}\n\nexport function FormInput(\n\tprops: Omit<FormInputPrimitiveProps, \"control\" | \"formState\" | \"name\" | \"ref\"> & {\n\t\trules?: RegisterOptions;\n\t}\n) {\n\tconst { rules, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormItemContext();\n\tconst { control, register } = useFormRootContext();\n\n\tconst formState = useFormState({ control, name });\n\n\treturn (\n\t\t<FormInputPrimitive\n\t\t\tname={name}\n\t\t\tformState={formState}\n\t\t\t{...(Boolean(name) && register(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype FormTextAreaPrimitiveProps<TFieldValues extends FieldValues = FieldValues> =\n\tReact.ComponentPropsWithRef<\"textarea\"> & {\n\t\terrorClassName?: string;\n\t\tname?: FieldPath<TFieldValues>;\n\t\t// eslint-disable-next-line perfectionist/sort-intersection-types -- Prefer the object to come first before the discriminator props\n\t} & UnionDiscriminator<[{ control: Control<TFieldValues> }, { formState?: FormState<TFieldValues> }]>;\n\nexport function FormTextAreaPrimitive<TFieldValues extends FieldValues>(\n\tprops: FormTextAreaPrimitiveProps<TFieldValues>\n) {\n\tconst contextValues = useLaxFormItemContext();\n\n\tconst {\n\t\tclassName,\n\t\tcontrol,\n\t\terrorClassName,\n\t\tformState,\n\t\tid = contextValues?.uniqueId,\n\t\tname = contextValues?.name,\n\t\t...restOfProps\n\t} = props;\n\n\tconst getFormState = (control ? useFormState : () => formState) as typeof useFormState;\n\n\tconst { errors } =\n\t\t(getFormState({ control, name: name as never }) as UseFormStateReturn<TFieldValues> | undefined)\n\t\t?? {};\n\n\treturn (\n\t\t<textarea\n\t\t\tdata-scope=\"form\"\n\t\t\tdata-part=\"textarea\"\n\t\t\tid={id}\n\t\t\tname={name}\n\t\t\tclassName={cnMerge(\n\t\t\t\t`w-full bg-transparent text-sm placeholder:text-shadcn-muted-foreground\n\t\t\t\tfocus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\tclassName,\n\t\t\t\tname && errors?.[name] && errorClassName\n\t\t\t)}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\nexport function FormTextArea(\n\tprops: Omit<FormTextAreaPrimitiveProps, \"control\" | \"formState\" | \"id\" | \"name\" | \"ref\"> & {\n\t\trules?: RegisterOptions;\n\t}\n) {\n\tconst { rules, ...restOfProps } = props;\n\n\tconst { name } = useStrictFormItemContext();\n\tconst { control, register } = useFormRootContext();\n\tconst formState = useFormState({ control, name });\n\n\treturn (\n\t\t<FormTextAreaPrimitive\n\t\t\tname={name}\n\t\t\tformState={formState}\n\t\t\t{...(Boolean(name) && register(name, rules))}\n\t\t\t{...restOfProps}\n\t\t/>\n\t);\n}\n\ntype FormControllerRenderFn = (props: {\n\tfield: Omit<ControllerRenderProps, \"value\"> & {\n\t\tvalue: never;\n\t};\n\tfieldState: ControllerFieldState;\n\tformState: UseFormStateReturn<never>;\n}) => React.ReactElement;\n\ntype FormControllerProps = Omit<\n\tControllerProps<FieldValues, FieldPath<FieldValues>>,\n\t\"control\" | \"name\" | \"render\"\n> & {\n\trender: FormControllerRenderFn;\n};\n\nexport const FormControllerPrimitive: typeof Controller = (props) => {\n\treturn <Controller {...props} />;\n};\n\nexport function FormController(props: FormControllerProps) {\n\tconst { control } = useFormRootContext();\n\tconst { name } = useStrictFormItemContext();\n\tconst { render, ...restOfProps } = props;\n\n\treturn (\n\t\t<FormControllerPrimitive name={name} control={control} render={render as never} {...restOfProps} />\n\t);\n}\n\nexport function FormDescription(props: InferProps<\"p\">) {\n\tconst { className, ...restOfProps } = props;\n\n\treturn <p className={cnMerge(\"text-[12px]\", className)} {...restOfProps} />;\n}\n\ntype ErrorMessageRenderProps = {\n\tclassName: string;\n\t\"data-index\": number;\n\t\"data-part\": string;\n\t\"data-scope\": string;\n\tonAnimationEnd?: React.ReactEventHandler<HTMLElement>;\n};\n\ntype ErrorMessageRenderState = { errorMessage: string; errorMessageArray: string[]; index: number };\n\ntype ErrorMessageRenderFn = (context: {\n\tprops: ErrorMessageRenderProps;\n\tstate: ErrorMessageRenderState;\n}) => React.ReactNode;\n\ntype FormErrorMessagePrimitiveProps<TFieldValues extends FieldValues> =\n\tDiscriminatedRenderProps<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\twithAnimationOnInvalid?: boolean;\n\t} & (\n\t\t\t| {\n\t\t\t\t\terrorField: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\terrorField: 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 {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tcontrol,\n\t\terrorField,\n\t\trender,\n\t\ttype = \"regular\",\n\t\twithAnimationOnInvalid = true,\n\t} = props;\n\n\tconst formState = useFormState({ control });\n\n\tconst wrapperRef = useRef<HTMLUListElement>(null);\n\n\tconst errorAnimationClass = classNames?.errorMessageAnimation ?? \"animate-shake\";\n\n\tuseEffect(() => {\n\t\tif (!withAnimationOnInvalid) return;\n\n\t\tconst errorMessageElements = wrapperRef.current?.children;\n\n\t\tif (!errorMessageElements) return;\n\n\t\tfor (const element of errorMessageElements) {\n\t\t\telement.classList.add(errorAnimationClass);\n\t\t}\n\t}, [errorAnimationClass, withAnimationOnInvalid]);\n\n\tuseEffect(() => {\n\t\tconst errorMessageElements = wrapperRef.current?.children;\n\n\t\tif (!errorMessageElements) return;\n\n\t\t// == Scroll to first error message\n\t\tif (Object.keys(formState.errors).indexOf(errorField as string) === 0) {\n\t\t\terrorMessageElements[0]?.scrollIntoView({\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t\tblock: \"center\",\n\t\t\t});\n\n\t\t\twindow.scrollBy({ behavior: \"smooth\", top: -100 });\n\t\t}\n\t}, [errorField, formState.errors]);\n\n\tconst message = (\n\t\ttype === \"root\"\n\t\t\t? formState.errors.root?.[errorField as string]?.message\n\t\t\t: formState.errors[errorField]?.message\n\t) as string | string[];\n\n\tif (!message) {\n\t\treturn null;\n\t}\n\n\tconst errorMessageArray = toArray(message);\n\n\tconst [ErrorMessageList] = getElementList();\n\n\tconst onAnimationEnd: React.AnimationEventHandler<HTMLElement> | undefined = withAnimationOnInvalid\n\t\t? (event) => event.currentTarget.classList.remove(errorAnimationClass)\n\t\t: undefined;\n\n\tconst getRenderProps = ({ index }: { index: number }) =>\n\t\t({\n\t\t\tclassName: cnMerge(errorAnimationClass, 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\tonAnimationEnd,\n\t\t}) satisfies ErrorMessageRenderProps;\n\n\tconst getRenderState = ({ errorMessage, index }: { errorMessage: string; index: number }) =>\n\t\t({\n\t\t\terrorMessage,\n\t\t\terrorMessageArray,\n\t\t\tindex,\n\t\t}) satisfies ErrorMessageRenderState;\n\n\tconst renderFn = typeof children === \"function\" ? children : render;\n\n\treturn (\n\t\t<ErrorMessageList\n\t\t\tref={wrapperRef}\n\t\t\teach={errorMessageArray}\n\t\t\tclassName={cnMerge(\"flex flex-col\", classNames?.container)}\n\t\t\trender={(errorMessage, index) => {\n\t\t\t\treturn renderFn({\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> =\n\t| (TControl extends Control<infer TValues>\n\t\t\t? {\n\t\t\t\t\tclassName?: string;\n\t\t\t\t\tcontrol?: never;\n\t\t\t\t\terrorField?: FieldPath<TValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tclassName?: string;\n\t\t\t\t\tcontrol?: Control<TFieldValues>; // == Here for type inference of errorField prop\n\t\t\t\t\terrorField?: FieldPath<TFieldValues>;\n\t\t\t\t\ttype?: \"regular\";\n\t\t\t\t})\n\t| {\n\t\t\tclassName?: string;\n\t\t\tcontrol?: never;\n\t\t\terrorField: string;\n\t\t\ttype: \"root\";\n\t };\n\nexport function FormErrorMessage<TControl, TFieldValues extends FieldValues = FieldValues>(\n\tprops: FormErrorMessageProps<TControl, TFieldValues>\n) {\n\tconst contextValues = useLaxFormItemContext();\n\n\tconst { className, errorField = contextValues?.name, type = \"regular\" } = props;\n\n\tconst { control } = useFormRootContext();\n\n\treturn (\n\t\t<FormErrorMessagePrimitive\n\t\t\tcontrol={control}\n\t\t\terrorField={errorField as NonNullable<typeof errorField>}\n\t\t\ttype={type as \"root\"}\n\t\t\trender={({ props: renderProps, state: { errorMessage } }) => (\n\t\t\t\t<p\n\t\t\t\t\t{...renderProps}\n\t\t\t\t\tkey={errorMessage}\n\t\t\t\t\tclassName={cnMerge(\"text-[13px]\", \"data-[index=0]:mt-1\", renderProps.className, className)}\n\t\t\t\t>\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\ntype FieldSubscribeRenderFn<TFieldValues extends FieldValues, TFieldPathOrPaths> = (props: {\n\tvalue: TFieldPathOrPaths extends Array<FieldPath<TFieldValues>>\n\t\t? FieldPathValues<TFieldValues, TFieldPathOrPaths>\n\t\t: TFieldPathOrPaths extends FieldPath<TFieldValues>\n\t\t\t? FieldPathValue<TFieldValues, TFieldPathOrPaths>\n\t\t\t: unknown;\n}) => React.ReactNode;\n\ntype FormFieldSubscribeProps<\n\tTFieldValues extends FieldValues,\n\tTFieldPathOrPaths,\n> = DiscriminatedRenderProps<FieldSubscribeRenderFn<TFieldValues, TFieldPathOrPaths>> & {\n\tcontrol: Control<TFieldValues>;\n\tname?: TFieldPathOrPaths;\n};\n\nexport function FormFieldSubscribe<\n\tTFieldValues extends FieldValues,\n\tconst TFieldPathOrPaths extends Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues>,\n>(props: FormFieldSubscribeProps<TFieldValues, TFieldPathOrPaths>) {\n\tconst contextValues = useLaxFormItemContext();\n\n\tconst { children, name = contextValues?.name, render } = props;\n\n\tconst { control } = useFormRootContext();\n\n\tconst formValue = useWatch({ control, name: name as string });\n\n\tconst fieldProps = { value: formValue };\n\n\tif (typeof children === \"function\") {\n\t\treturn children(fieldProps as never);\n\t}\n\n\treturn render(fieldProps as never);\n}\n\ntype FormStateSubscribeRenderFn<TFieldValues extends FieldValues> = (\n\tprops: UseFormStateReturn<TFieldValues>\n) => React.ReactNode;\n\ntype FormStateSubscribeProps<TFieldValues extends FieldValues> = DiscriminatedRenderProps<\n\tFormStateSubscribeRenderFn<TFieldValues>\n> & {\n\tcontrol?: Control<TFieldValues>;\n\tname?: Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues>;\n};\n\nexport function FormStateSubscribe<TFieldValues extends FieldValues = FieldValues>(\n\tprops: FormStateSubscribeProps<TFieldValues>\n) {\n\tconst contextValues = useLaxFormItemContext();\n\n\tconst { children, control, name = contextValues?.name, render } = props;\n\n\tconst formState = useFormState({ control, name: name as FieldPath<TFieldValues> });\n\n\tif (typeof children === \"function\") {\n\t\treturn children(formState as never);\n\t}\n\n\treturn render(formState as never);\n}\n","export {\n\tFormController as Controller,\n\tFormControllerPrimitive as ControllerPrimitive,\n\tFormDescription as Description,\n\tFormErrorMessage as ErrorMessage,\n\tFormErrorMessagePrimitive as ErrorMessagePrimitive,\n\tFormInput as Input,\n\tFormInputGroup as InputGroup,\n\tFormInputLeftItem as InputLeftItem,\n\tFormInputPrimitive as InputPrimitive,\n\tFormInputRightItem as InputRightItem,\n\tFormItem as Item,\n\tFormItemContext as ItemContext,\n\tFormLabel as Label,\n\tFormRoot as Root,\n\tFormStateSubscribe as StateSubscribe,\n\tFormFieldSubscribe as FieldSubscribe,\n\tFormTextArea as TextArea,\n\tFormTextAreaPrimitive as TextAreaPrimitive,\n} from \"./form\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/ui/drag-scroll/utils.ts","../../src/components/ui/drag-scroll/use-drag-scroll.ts"],"names":[],"mappings":"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","file":"chunk-Y7TF3SRM.js","sourcesContent":["import { checkIsDeviceMobileOrTablet } from \"@zayne-labs/toolkit-core\";\n\n/* eslint-disable no-param-reassign -- Mutation is needed here since it's an element */\nexport const updateCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"grabbing\";\n\telement.style.userSelect = \"none\";\n};\n\nexport const onScrollSnap = <TElement extends HTMLElement>(\n\taction: \"remove\" | \"reset\",\n\telement: TElement\n) => {\n\tif (action === \"remove\") {\n\t\telement.style.scrollSnapType = \"none\";\n\t\treturn;\n\t}\n\n\telement.style.scrollSnapType = \"\";\n};\n\nexport const resetCursor = <TElement extends HTMLElement>(element: TElement) => {\n\telement.style.cursor = \"\";\n\telement.style.userSelect = \"\";\n};\n/* eslint-enable no-param-reassign -- Mutation is needed here since it's an element */\n\nexport const handleScrollSnap = (dragContainer: HTMLElement) => {\n\tconst isMobileOrTablet = checkIsDeviceMobileOrTablet();\n\n\tif (!isMobileOrTablet) {\n\t\tonScrollSnap(\"remove\", dragContainer);\n\t} else {\n\t\tonScrollSnap(\"reset\", dragContainer);\n\t}\n};\n","import { cnMerge } from \"@/lib/utils/cn\";\nimport { off, on } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { type InferProps, composeRefs, mergeTwoProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { type RefCallback, useRef } from \"react\";\nimport { handleScrollSnap, resetCursor, updateCursor } from \"./utils\";\n\ntype DragScrollProps<TElement extends HTMLElement> = {\n\tclassNames?: { base?: string; item?: string };\n\textraItemProps?: InferProps<HTMLElement>;\n\textraRootProps?: Omit<InferProps<TElement>, \"children\">;\n\torientation?: \"both\" | \"horizontal\" | \"vertical\";\n\tusage?: \"allScreens\" | \"desktopOnly\" | \"mobileAndTabletOnly\";\n};\n\nconst useDragScroll = <TElement extends HTMLElement>(props: DragScrollProps<TElement> = {}) => {\n\tconst {\n\t\tclassNames,\n\t\textraItemProps,\n\t\textraRootProps,\n\t\torientation = \"horizontal\",\n\t\tusage = \"allScreens\",\n\t} = props;\n\n\tconst dragContainerRef = useRef<TElement>(null);\n\n\tconst positionRef = useRef({ left: 0, top: 0, x: 0, y: 0 });\n\n\tconst handleMouseMove = useCallbackRef((event: MouseEvent) => {\n\t\tif (!dragContainerRef.current) return;\n\n\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\t// == calculate the current change in the horizontal scroll position based on the difference between the previous mouse position and the new mouse position\n\t\t\tconst dx = event.clientX - positionRef.current.x;\n\n\t\t\t// == Assign the scrollLeft of the container to the difference between its previous horizontal scroll position and the change in the mouse position\n\t\t\tdragContainerRef.current.scrollLeft = positionRef.current.left - dx;\n\t\t}\n\n\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\t// == calculate the current change in the vertical scroll position based on the difference between the previous mouse position and the new mouse position\n\t\t\tconst dy = event.clientY - positionRef.current.y;\n\n\t\t\t// == Assign the scrollTop of the container to the difference between its previous vertical scroll position and the change in the mouse position\n\t\t\tdragContainerRef.current.scrollTop = positionRef.current.top - dy;\n\t\t}\n\t});\n\n\tconst handleMouseUpOrLeave = useCallbackRef(() => {\n\t\tif (!dragContainerRef.current) return;\n\n\t\toff(\"mousemove\", dragContainerRef.current, handleMouseMove);\n\t\toff(\"mouseup\", dragContainerRef.current, handleMouseUpOrLeave);\n\t\toff(\"mouseleave\", dragContainerRef.current, handleMouseUpOrLeave);\n\n\t\tresetCursor(dragContainerRef.current);\n\t});\n\n\tconst handleMouseDown = useCallbackRef((event: MouseEvent) => {\n\t\tif (usage === \"mobileAndTabletOnly\" && window.innerWidth >= 768) return;\n\t\tif (usage === \"desktopOnly\" && window.innerWidth < 768) return;\n\n\t\tif (!dragContainerRef.current) return;\n\n\t\t// == Update all initial position properties stored in the positionRef\n\t\tif (orientation === \"horizontal\" || orientation === \"both\") {\n\t\t\tpositionRef.current.x = event.clientX;\n\t\t\tpositionRef.current.left = dragContainerRef.current.scrollLeft;\n\t\t}\n\n\t\tif (orientation === \"vertical\" || orientation === \"both\") {\n\t\t\tpositionRef.current.y = event.clientY;\n\t\t\tpositionRef.current.top = dragContainerRef.current.scrollTop;\n\t\t}\n\n\t\tupdateCursor(dragContainerRef.current);\n\n\t\ton(\"mousemove\", dragContainerRef.current, handleMouseMove);\n\t\ton(\"mouseup\", dragContainerRef.current, handleMouseUpOrLeave);\n\t\ton(\"mouseleave\", dragContainerRef.current, handleMouseUpOrLeave);\n\t});\n\n\tconst refCallBack: RefCallback<TElement> = useCallbackRef((node) => {\n\t\tdragContainerRef.current = node;\n\n\t\tnode && handleScrollSnap(node);\n\n\t\tconst cleanup = on(\"mousedown\", dragContainerRef.current, handleMouseDown);\n\n\t\treturn cleanup;\n\t});\n\n\tconst getRootProps = (rootProps?: DragScrollProps<TElement>[\"extraRootProps\"]) => {\n\t\tconst mergedRootProps = mergeTwoProps(extraRootProps, rootProps);\n\n\t\treturn {\n\t\t\t...mergedRootProps,\n\t\t\tclassName: cnMerge(\n\t\t\t\t`flex w-full cursor-grab snap-x snap-mandatory overflow-x-scroll overflow-y-clip [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,\n\t\t\t\torientation === \"horizontal\" && \"flex-row\",\n\t\t\t\torientation === \"vertical\" && \"flex-col\",\n\t\t\t\tusage === \"mobileAndTabletOnly\" && \"md:cursor-default md:flex-col\",\n\t\t\t\tusage === \"desktopOnly\" && \"max-md:cursor-default max-md:flex-col\",\n\t\t\t\tclassNames?.base,\n\t\t\t\tmergedRootProps.className\n\t\t\t),\n\t\t\t\"data-part\": \"root\",\n\t\t\t\"data-scope\": \"drag-scroll\",\n\t\t\tref: composeRefs([\n\t\t\t\trefCallBack,\n\t\t\t\t(mergedRootProps as { ref?: React.Ref<TElement> } | undefined)?.ref,\n\t\t\t]),\n\t\t};\n\t};\n\n\tconst getItemProps = <TItemElement extends HTMLElement>(\n\t\titemProps?: DragScrollProps<TItemElement>[\"extraItemProps\"]\n\t) => {\n\t\tconst mergedItemProps = mergeTwoProps(extraItemProps, itemProps);\n\n\t\treturn {\n\t\t\t...mergedItemProps,\n\t\t\tclassName: cnMerge(\"snap-center snap-always\", classNames?.item, mergedItemProps.className),\n\t\t\t\"data-part\": \"item\",\n\t\t\t\"data-scope\": \"drag-scroll\",\n\t\t};\n\t};\n\n\treturn { getItemProps, getRootProps };\n};\n\nexport { useDragScroll };\n"]}