@zayne-labs/ui-react 0.9.16 → 0.9.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/esm/await-Fe4LFRKd.js +89 -0
  2. package/dist/esm/await-Fe4LFRKd.js.map +1 -0
  3. package/dist/esm/card-DRjs-vtv.js +54 -0
  4. package/dist/esm/card-DRjs-vtv.js.map +1 -0
  5. package/dist/esm/carousel-Dznupnx8.js +270 -0
  6. package/dist/esm/carousel-Dznupnx8.js.map +1 -0
  7. package/dist/esm/chunk-Cl8Af3a2.js +11 -0
  8. package/dist/esm/cn-_FbtIrlZ.js +8 -0
  9. package/dist/esm/cn-_FbtIrlZ.js.map +1 -0
  10. package/dist/esm/common-BYWy8Q78.js +0 -0
  11. package/dist/esm/components/common/await/index.d.ts +6 -14
  12. package/dist/esm/components/common/await/index.js +10 -8
  13. package/dist/esm/components/common/error-boundary/index.d.ts +2 -17
  14. package/dist/esm/components/common/error-boundary/index.js +6 -4
  15. package/dist/esm/components/common/for/index.d.ts +2 -10
  16. package/dist/esm/components/common/for/index.js +3 -4
  17. package/dist/esm/components/common/index.d.ts +11 -13
  18. package/dist/esm/components/common/index.js +13 -14
  19. package/dist/esm/components/common/show/index.d.ts +2 -26
  20. package/dist/esm/components/common/show/index.js +7 -5
  21. package/dist/esm/components/common/slot/index.d.ts +2 -12
  22. package/dist/esm/components/common/slot/index.js +3 -4
  23. package/dist/esm/components/common/suspense-with-boundary/index.d.ts +3 -11
  24. package/dist/esm/components/common/suspense-with-boundary/index.js +4 -5
  25. package/dist/esm/components/common/switch/index.d.ts +2 -25
  26. package/dist/esm/components/common/switch/index.js +7 -5
  27. package/dist/esm/components/common/teleport/index.d.ts +2 -12
  28. package/dist/esm/components/common/teleport/index.js +3 -4
  29. package/dist/esm/components/ui/card/index.d.ts +2 -17
  30. package/dist/esm/components/ui/card/index.js +5 -6
  31. package/dist/esm/components/ui/carousel/index.d.ts +2 -95
  32. package/dist/esm/components/ui/carousel/index.js +18 -16
  33. package/dist/esm/components/ui/drag-scroll/index.d.ts +2 -21
  34. package/dist/esm/components/ui/drag-scroll/index.js +4 -5
  35. package/dist/esm/components/ui/drop-zone/index.d.ts +3 -11
  36. package/dist/esm/components/ui/drop-zone/index.js +18 -16
  37. package/dist/esm/components/ui/form/index.d.ts +2 -228
  38. package/dist/esm/components/ui/form/index.js +10 -8
  39. package/dist/esm/components/ui/index.d.ts +7 -11
  40. package/dist/esm/components/ui/index.js +19 -20
  41. package/dist/esm/drag-scroll-BLjij7aI.js +111 -0
  42. package/dist/esm/drag-scroll-BLjij7aI.js.map +1 -0
  43. package/dist/esm/drop-zone-_YK9C3Xj.js +313 -0
  44. package/dist/esm/drop-zone-_YK9C3Xj.js.map +1 -0
  45. package/dist/esm/error-boundary-B3ycUZ1t.js +126 -0
  46. package/dist/esm/error-boundary-B3ycUZ1t.js.map +1 -0
  47. package/dist/esm/for-aTw1TgJo.js +42 -0
  48. package/dist/esm/for-aTw1TgJo.js.map +1 -0
  49. package/dist/esm/form-DytCfL6R.js +590 -0
  50. package/dist/esm/form-DytCfL6R.js.map +1 -0
  51. package/dist/esm/getSlot-BIcGgBwN.js +85 -0
  52. package/dist/esm/getSlot-BIcGgBwN.js.map +1 -0
  53. package/dist/esm/{getSlotMap-DTkxtGhd.d.ts → getSlotMap-DA_uhXqU.d.ts} +17 -16
  54. package/dist/esm/index--1COprHP.d.ts +32 -0
  55. package/dist/esm/index-1UCPJf7B.d.ts +19 -0
  56. package/dist/esm/index-ASoFjmZ6.d.ts +196 -0
  57. package/dist/esm/index-BC0r1cBF.d.ts +104 -0
  58. package/dist/esm/index-BSJ30pGj.d.ts +68 -0
  59. package/dist/esm/{for-BH5FhFuV.d.ts → index-BhpBx8dH.d.ts} +14 -6
  60. package/dist/esm/index-BuSQsDCX.d.ts +22 -0
  61. package/dist/esm/index-C0XZoIZD.d.ts +35 -0
  62. package/dist/esm/index-CTZr4PTO.d.ts +24 -0
  63. package/dist/esm/index-CqlM1M0j.d.ts +14 -0
  64. package/dist/esm/index-D-j2Cn1J.d.ts +61 -0
  65. package/dist/esm/index-DQ1yFGd2.d.ts +229 -0
  66. package/dist/esm/index-DnaUCh8d.d.ts +15 -0
  67. package/dist/esm/index-TBkPiipk.d.ts +49 -0
  68. package/dist/esm/lib/utils/index.d.ts +3 -61
  69. package/dist/esm/lib/utils/index.js +4 -5
  70. package/dist/esm/show-BgYrfIxJ.js +41 -0
  71. package/dist/esm/show-BgYrfIxJ.js.map +1 -0
  72. package/dist/esm/slot-RXTKo4L7.js +58 -0
  73. package/dist/esm/slot-RXTKo4L7.js.map +1 -0
  74. package/dist/esm/suspense-with-boundary-TrQxYRG6.js +21 -0
  75. package/dist/esm/suspense-with-boundary-TrQxYRG6.js.map +1 -0
  76. package/dist/esm/switch-PF5xTJfr.js +42 -0
  77. package/dist/esm/switch-PF5xTJfr.js.map +1 -0
  78. package/dist/esm/teleport-dlSjWj_t.js +32 -0
  79. package/dist/esm/teleport-dlSjWj_t.js.map +1 -0
  80. package/dist/esm/utils-D4YNWj2X.js +89 -0
  81. package/dist/esm/utils-D4YNWj2X.js.map +1 -0
  82. package/package.json +4 -3
  83. package/dist/esm/await-parts-BJ6C-y1f.d.ts +0 -36
  84. package/dist/esm/chunk-6QJYHPBL.js +0 -45
  85. package/dist/esm/chunk-6QJYHPBL.js.map +0 -1
  86. package/dist/esm/chunk-BJ7WR4XW.js +0 -274
  87. package/dist/esm/chunk-BJ7WR4XW.js.map +0 -1
  88. package/dist/esm/chunk-CWUEUCR5.js +0 -3
  89. package/dist/esm/chunk-CWUEUCR5.js.map +0 -1
  90. package/dist/esm/chunk-D6QZA3UT.js +0 -56
  91. package/dist/esm/chunk-D6QZA3UT.js.map +0 -1
  92. package/dist/esm/chunk-EYWTW54R.js +0 -42
  93. package/dist/esm/chunk-EYWTW54R.js.map +0 -1
  94. package/dist/esm/chunk-G5BNZM66.js +0 -32
  95. package/dist/esm/chunk-G5BNZM66.js.map +0 -1
  96. package/dist/esm/chunk-JC52CA2O.js +0 -113
  97. package/dist/esm/chunk-JC52CA2O.js.map +0 -1
  98. package/dist/esm/chunk-M7YXNGT6.js +0 -48
  99. package/dist/esm/chunk-M7YXNGT6.js.map +0 -1
  100. package/dist/esm/chunk-MRYXZN2P.js +0 -336
  101. package/dist/esm/chunk-MRYXZN2P.js.map +0 -1
  102. package/dist/esm/chunk-MT2MQDK2.js +0 -13
  103. package/dist/esm/chunk-MT2MQDK2.js.map +0 -1
  104. package/dist/esm/chunk-N4274N5K.js +0 -50
  105. package/dist/esm/chunk-N4274N5K.js.map +0 -1
  106. package/dist/esm/chunk-NXZZXJRH.js +0 -41
  107. package/dist/esm/chunk-NXZZXJRH.js.map +0 -1
  108. package/dist/esm/chunk-OHG7GB7O.js +0 -8
  109. package/dist/esm/chunk-OHG7GB7O.js.map +0 -1
  110. package/dist/esm/chunk-P5QP73HG.js +0 -626
  111. package/dist/esm/chunk-P5QP73HG.js.map +0 -1
  112. package/dist/esm/chunk-PZ5AY32C.js +0 -9
  113. package/dist/esm/chunk-PZ5AY32C.js.map +0 -1
  114. package/dist/esm/chunk-V5ZPMMIH.js +0 -121
  115. package/dist/esm/chunk-V5ZPMMIH.js.map +0 -1
  116. package/dist/esm/chunk-YO5LJ7ZJ.js +0 -74
  117. package/dist/esm/chunk-YO5LJ7ZJ.js.map +0 -1
  118. package/dist/esm/chunk-YSDKXBU7.js +0 -68
  119. package/dist/esm/chunk-YSDKXBU7.js.map +0 -1
  120. package/dist/esm/components/common/await/index.js.map +0 -1
  121. package/dist/esm/components/common/error-boundary/index.js.map +0 -1
  122. package/dist/esm/components/common/for/index.js.map +0 -1
  123. package/dist/esm/components/common/index.js.map +0 -1
  124. package/dist/esm/components/common/show/index.js.map +0 -1
  125. package/dist/esm/components/common/slot/index.js.map +0 -1
  126. package/dist/esm/components/common/suspense-with-boundary/index.js.map +0 -1
  127. package/dist/esm/components/common/switch/index.js.map +0 -1
  128. package/dist/esm/components/common/teleport/index.js.map +0 -1
  129. package/dist/esm/components/ui/card/index.js.map +0 -1
  130. package/dist/esm/components/ui/carousel/index.js.map +0 -1
  131. package/dist/esm/components/ui/drag-scroll/index.js.map +0 -1
  132. package/dist/esm/components/ui/drop-zone/index.js.map +0 -1
  133. package/dist/esm/components/ui/form/index.js.map +0 -1
  134. package/dist/esm/components/ui/index.js.map +0 -1
  135. package/dist/esm/drop-zone-parts-CvseSoXA.d.ts +0 -186
  136. package/dist/esm/error-boundary-BD0X61Sg.d.ts +0 -28
  137. package/dist/esm/lib/utils/index.js.map +0 -1
  138. package/dist/esm/types-mdfDDNrr.d.ts +0 -25
@@ -1,626 +0,0 @@
1
- import { cnMerge } from './chunk-OHG7GB7O.js';
2
- import { getElementList } from './chunk-NXZZXJRH.js';
3
- import { getMultipleSlots } from './chunk-YO5LJ7ZJ.js';
4
- import { slot_parts_exports } from './chunk-D6QZA3UT.js';
5
- import { __export } from './chunk-PZ5AY32C.js';
6
- import * as React2 from 'react';
7
- import { useMemo, Fragment, useId, useRef, useEffect, createElement } from 'react';
8
- import { dataAttr, on, toArray } from '@zayne-labs/toolkit-core';
9
- import { createCustomContext, useToggle, useCallbackRef, ContextError } from '@zayne-labs/toolkit-react';
10
- import { composeTwoEventHandlers, composeRefs } from '@zayne-labs/toolkit-react/utils';
11
- import { defineEnum, isObject } from '@zayne-labs/toolkit-type-helpers';
12
- import { useFormState, useWatch, FormProvider, Controller, useFormContext } from 'react-hook-form';
13
- export { useFormContext } from 'react-hook-form';
14
-
15
- var EyeIconClosed = (props) => /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React2.createElement(
16
- "path",
17
- {
18
- fill: "currentColor",
19
- d: "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"
20
- }
21
- ));
22
- var EyeIconOpen = (props) => /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React2.createElement(
23
- "path",
24
- {
25
- fill: "currentColor",
26
- d: "M12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17"
27
- }
28
- ));
29
-
30
- // src/components/ui/form/utils.ts
31
- var getFieldErrorMessage = (options) => {
32
- const { errors, fieldName, type } = options;
33
- if (!fieldName || !errors || Object.keys(errors).length === 0) return;
34
- if (type === "root") {
35
- return errors.root?.[fieldName]?.message;
36
- }
37
- const pathParts = fieldName.includes(".") ? fieldName.split(".") : null;
38
- if (!pathParts) {
39
- const errorMessage2 = errors[fieldName]?.message;
40
- return errorMessage2;
41
- }
42
- let extractedError = errors;
43
- for (const part of pathParts) {
44
- const currentError = extractedError[part];
45
- if (!isObject(currentError)) break;
46
- extractedError = currentError;
47
- }
48
- const errorMessage = extractedError.message;
49
- return errorMessage;
50
- };
51
- var getEyeIcon = (options) => {
52
- const { classNames, iconType, renderIconProps, withEyeIcon } = options;
53
- if (!withEyeIcon) {
54
- return null;
55
- }
56
- if (withEyeIcon === true) {
57
- const defaultIconMap = {
58
- closed: createElement(EyeIconClosed, {
59
- className: cnMerge("size-full", classNames?.eyeIcon)
60
- }),
61
- open: createElement(EyeIconOpen, {
62
- className: cnMerge("size-full", classNames?.eyeIcon)
63
- })
64
- };
65
- return defaultIconMap[iconType];
66
- }
67
- if (withEyeIcon.renderIcon) {
68
- return withEyeIcon.renderIcon(renderIconProps);
69
- }
70
- if (withEyeIcon[iconType]) {
71
- return withEyeIcon[iconType];
72
- }
73
- return null;
74
- };
75
-
76
- // src/components/ui/form/form-context.ts
77
- var useFormMethodsContext = (options = {}) => {
78
- const { strict = true } = options;
79
- const formContext = useFormContext();
80
- if (strict && !formContext) {
81
- throw new ContextError(
82
- `useFormRootContext returned "null". Did you forget to wrap the necessary components within FormRoot?`
83
- );
84
- }
85
- return formContext;
86
- };
87
- var [LaxFormRootProvider, useLaxFormRootContext] = createCustomContext({
88
- hookName: "useLaxFormRootContext",
89
- name: "LaxFormRootContext",
90
- providerName: "FormRoot",
91
- strict: false
92
- });
93
- var [StrictFormFieldProvider, useStrictFormFieldContext] = createCustomContext(
94
- {
95
- hookName: "useFormFieldContext",
96
- name: "StrictFormFieldContext",
97
- providerName: "FormField"
98
- }
99
- );
100
- var [LaxFormFieldProvider, useLaxFormFieldContext] = createCustomContext({
101
- hookName: "useLaxFormFieldContext",
102
- name: "LaxFormFieldContext",
103
- providerName: "FormField",
104
- strict: false
105
- });
106
- var useLaxFormFieldState = (options) => {
107
- const { control = options?.control } = useFormMethodsContext({ strict: false }) ?? {};
108
- const { name = options?.name } = useLaxFormFieldContext() ?? {};
109
- const getFormState = control ? useFormState : () => ({});
110
- const { disabled, errors } = getFormState({ control, name });
111
- const errorMessage = getFieldErrorMessage({ errors, fieldName: name, type: "regular" });
112
- return {
113
- errors,
114
- isDisabled: disabled,
115
- isInvalid: Boolean(errorMessage)
116
- };
117
- };
118
-
119
- // src/components/ui/form/form.tsx
120
- function FormRoot(props) {
121
- const { children, className, methods, withEyeIcon, ...restOfProps } = props;
122
- const formContextValue = useMemo(() => ({ withEyeIcon }), [withEyeIcon]);
123
- return /* @__PURE__ */ React2.createElement(FormProvider, { ...methods }, /* @__PURE__ */ React2.createElement(LaxFormRootProvider, { value: formContextValue }, /* @__PURE__ */ React2.createElement(
124
- "form",
125
- {
126
- className: cnMerge("flex flex-col", className),
127
- ...restOfProps,
128
- "data-scope": "form",
129
- "data-part": "root",
130
- "data-slot": "form-root"
131
- },
132
- children
133
- )));
134
- }
135
- function FormField(props) {
136
- const { children, className, name, withWrapper = true } = props;
137
- const { isDisabled, isInvalid } = useLaxFormFieldState({ name });
138
- const uniqueId = useId();
139
- const fieldContextValue = useMemo(
140
- () => ({
141
- formDescriptionId: `${name}-(${uniqueId})-form-item-description`,
142
- formItemId: `${name}-(${uniqueId})-form-item`,
143
- formMessageId: `${name}-(${uniqueId})-form-item-message`,
144
- name
145
- }),
146
- [name, uniqueId]
147
- );
148
- const WrapperElement = withWrapper ? "div" : Fragment;
149
- const wrapperElementProps = withWrapper && {
150
- className: cnMerge("flex flex-col", className),
151
- "data-part": "field",
152
- "data-scope": "form",
153
- "data-slot": "form-field",
154
- /* eslint-disable perfectionist/sort-objects -- order of attributes does not matter */
155
- "data-disabled": dataAttr(isDisabled),
156
- "data-invalid": dataAttr(isInvalid)
157
- /* eslint-enable perfectionist/sort-objects -- order of attributes does not matter */
158
- };
159
- return /* @__PURE__ */ React2.createElement(StrictFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(LaxFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(WrapperElement, { ...wrapperElementProps }, children)));
160
- }
161
- function FormFieldController(props) {
162
- const { control } = useFormMethodsContext();
163
- const { name } = useStrictFormFieldContext();
164
- const { render, ...restOfProps } = props;
165
- return /* @__PURE__ */ React2.createElement(Controller, { name, control, render, ...restOfProps });
166
- }
167
- function FormFieldControlledField(props) {
168
- const { name } = props;
169
- const uniqueId = useId();
170
- const fieldContextValue = useMemo(
171
- () => ({
172
- formDescriptionId: `${name}-(${uniqueId})-form-item-description`,
173
- formItemId: `${name}-(${uniqueId})-form-item`,
174
- formMessageId: `${name}-(${uniqueId})-form-item-message`,
175
- name
176
- }),
177
- [name, uniqueId]
178
- );
179
- return /* @__PURE__ */ React2.createElement(StrictFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(LaxFormFieldProvider, { value: fieldContextValue }, /* @__PURE__ */ React2.createElement(Controller, { ...props })));
180
- }
181
- function FormFieldContext(props) {
182
- const { children, render } = props;
183
- const fieldContextValues = useStrictFormFieldContext();
184
- if (typeof children === "function") {
185
- return children(fieldContextValues);
186
- }
187
- return render(fieldContextValues);
188
- }
189
- function FormLabel(props) {
190
- const { formItemId, name } = useStrictFormFieldContext();
191
- const { children, className, ...restOfProps } = props;
192
- const { isDisabled, isInvalid } = useLaxFormFieldState({ name });
193
- return /* @__PURE__ */ React2.createElement(
194
- "label",
195
- {
196
- "data-scope": "form",
197
- "data-part": "label",
198
- "data-slot": "form-label",
199
- "data-disabled": dataAttr(isDisabled),
200
- "data-invalid": dataAttr(isInvalid),
201
- htmlFor: formItemId,
202
- className,
203
- ...restOfProps
204
- },
205
- children
206
- );
207
- }
208
- function FormInputGroup(props) {
209
- const { children, className, ...restOfProps } = props;
210
- const { isDisabled, isInvalid } = useLaxFormFieldState();
211
- const {
212
- regularChildren,
213
- slots: [leftItemSlot, rightItemSlot]
214
- } = getMultipleSlots(children, [FormInputLeftItem, FormInputRightItem]);
215
- return /* @__PURE__ */ React2.createElement(
216
- "div",
217
- {
218
- "data-scope": "form",
219
- "data-part": "input-group",
220
- "data-slot": "form-input-group",
221
- "data-invalid": dataAttr(isInvalid),
222
- "data-disabled": dataAttr(isDisabled),
223
- className: cnMerge("flex items-center justify-between gap-2", className),
224
- ...restOfProps
225
- },
226
- leftItemSlot,
227
- regularChildren,
228
- rightItemSlot
229
- );
230
- }
231
- function FormInputLeftItem(props) {
232
- const { as: Element = "span", children, className, ...restOfProps } = props;
233
- return /* @__PURE__ */ React2.createElement(
234
- Element,
235
- {
236
- "data-scope": "form",
237
- "data-part": "left-item",
238
- "data-slot": "form-left-item",
239
- className: cnMerge("inline-flex items-center justify-center", className),
240
- ...restOfProps
241
- },
242
- children
243
- );
244
- }
245
- FormInputLeftItem.slotSymbol = Symbol("input-left-item");
246
- function FormInputRightItem(props) {
247
- const { as: Element = "span", children, className, ...restOfProps } = props;
248
- return /* @__PURE__ */ React2.createElement(
249
- Element,
250
- {
251
- "data-scope": "form",
252
- "data-part": "right-item",
253
- "data-slot": "form-right-item",
254
- className: cnMerge("inline-flex items-center justify-center", className),
255
- ...restOfProps
256
- },
257
- children
258
- );
259
- }
260
- FormInputRightItem.slotSymbol = Symbol("input-right-item");
261
- var inputTypesWithoutFullWith = /* @__PURE__ */ new Set(["checkbox", "radio"]);
262
- function FormInputPrimitive(props) {
263
- const fieldContextValues = useLaxFormFieldContext();
264
- const formRootContextValues = useLaxFormRootContext();
265
- const {
266
- className,
267
- classNames,
268
- control,
269
- fieldState,
270
- id = fieldContextValues?.formItemId,
271
- name = fieldContextValues?.name,
272
- rules,
273
- type = "text",
274
- withEyeIcon = formRootContextValues?.withEyeIcon ?? true,
275
- ...restOfProps
276
- } = props;
277
- const fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });
278
- const { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;
279
- const [isPasswordVisible, toggleVisibility] = useToggle(false);
280
- const shouldHaveEyeIcon = withEyeIcon && type === "password";
281
- const WrapperElement = shouldHaveEyeIcon ? FormInputGroup : Fragment;
282
- const wrapperElementProps = shouldHaveEyeIcon && {
283
- className: cnMerge("w-full", classNames?.inputGroup, isInvalid && classNames?.error)
284
- };
285
- const { register } = useFormMethodsContext({ strict: false }) ?? {};
286
- const eyeIcon = getEyeIcon({
287
- classNames,
288
- iconType: isPasswordVisible ? "closed" : "open",
289
- renderIconProps: { isPasswordVisible },
290
- withEyeIcon
291
- });
292
- return /* @__PURE__ */ React2.createElement(WrapperElement, { ...wrapperElementProps }, /* @__PURE__ */ React2.createElement(
293
- "input",
294
- {
295
- "data-scope": "form",
296
- "data-part": "input",
297
- "data-slot": "form-input",
298
- "aria-describedby": !isInvalid ? fieldContextValues?.formDescriptionId : `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`,
299
- "aria-invalid": dataAttr(isInvalid),
300
- "data-invalid": dataAttr(isInvalid),
301
- "data-disabled": dataAttr(isDisabled),
302
- id,
303
- name,
304
- type: type === "password" && isPasswordVisible ? "text" : type,
305
- className: cnMerge(
306
- !inputTypesWithoutFullWith.has(type) && "flex w-full",
307
- `focus-visible:outline-hidden placeholder:text-shadcn-muted-foreground bg-transparent
308
- text-sm file:border-0 file:bg-transparent disabled:cursor-not-allowed disabled:opacity-50`,
309
- className,
310
- classNames?.input,
311
- type !== "password" && isInvalid && classNames?.error
312
- ),
313
- ...Boolean(name) && register?.(name, rules),
314
- ...restOfProps
315
- }
316
- ), shouldHaveEyeIcon && /* @__PURE__ */ React2.createElement(
317
- FormInputRightItem,
318
- {
319
- as: "button",
320
- type: "button",
321
- onClick: toggleVisibility,
322
- className: "size-5 shrink-0 lg:size-6"
323
- },
324
- eyeIcon
325
- ));
326
- }
327
- function FormTextAreaPrimitive(props) {
328
- const fieldContextValues = useLaxFormFieldContext();
329
- const {
330
- className,
331
- classNames,
332
- control,
333
- fieldState,
334
- id = fieldContextValues?.formItemId,
335
- name = fieldContextValues?.name,
336
- rules,
337
- ...restOfProps
338
- } = props;
339
- const fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });
340
- const { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;
341
- const { register } = useFormMethodsContext({ strict: false }) ?? {};
342
- return /* @__PURE__ */ React2.createElement(
343
- "textarea",
344
- {
345
- "data-scope": "form",
346
- "data-part": "textarea",
347
- "data-slot": "form-textarea",
348
- "aria-describedby": !isInvalid ? fieldContextValues?.formDescriptionId : `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`,
349
- "aria-invalid": dataAttr(isInvalid),
350
- "data-disabled": dataAttr(isDisabled),
351
- "data-invalid": dataAttr(isInvalid),
352
- id,
353
- name,
354
- className: cnMerge(
355
- `placeholder:text-shadcn-muted-foreground focus-visible:outline-hidden w-full bg-transparent
356
- text-sm disabled:cursor-not-allowed disabled:opacity-50`,
357
- className,
358
- classNames?.base,
359
- isInvalid && classNames?.error
360
- ),
361
- ...Boolean(name) && register?.(name, rules),
362
- ...restOfProps
363
- }
364
- );
365
- }
366
- function FormSelectPrimitive(props) {
367
- const fieldContextValues = useLaxFormFieldContext();
368
- const {
369
- className,
370
- classNames,
371
- control,
372
- fieldState,
373
- id = fieldContextValues?.formItemId,
374
- name = fieldContextValues?.name,
375
- rules,
376
- ...restOfProps
377
- } = props;
378
- const fieldStateFromLaxFormField = useLaxFormFieldState({ control, name });
379
- const { isDisabled, isInvalid } = fieldState ?? fieldStateFromLaxFormField;
380
- const { register } = useFormMethodsContext({ strict: false }) ?? {};
381
- return /* @__PURE__ */ React2.createElement(
382
- "select",
383
- {
384
- defaultValue: "",
385
- "data-scope": "form",
386
- "data-part": "select",
387
- "data-slot": "form-select",
388
- "aria-describedby": !isInvalid ? fieldContextValues?.formDescriptionId : `${fieldContextValues?.formDescriptionId} ${fieldContextValues?.formMessageId}`,
389
- "aria-invalid": dataAttr(isInvalid),
390
- "data-disabled": dataAttr(isDisabled),
391
- "data-invalid": dataAttr(isInvalid),
392
- id,
393
- name,
394
- className: cnMerge(
395
- `placeholder:text-shadcn-muted-foreground focus-visible:outline-hidden w-full bg-transparent
396
- text-sm disabled:cursor-not-allowed disabled:opacity-50`,
397
- className,
398
- classNames?.base,
399
- isInvalid && classNames?.error
400
- ),
401
- ...Boolean(name) && register?.(name, rules),
402
- ...restOfProps
403
- }
404
- );
405
- }
406
- var InputTypeMap = defineEnum({
407
- select: FormSelectPrimitive,
408
- textarea: FormTextAreaPrimitive
409
- });
410
- function FormInput(props) {
411
- const { onBlur, onChange, ref, rules, type, ...restOfProps } = props;
412
- const { name } = useStrictFormFieldContext();
413
- const { register } = useFormMethodsContext();
414
- const SelectedInput = type === "textarea" || type === "select" ? InputTypeMap[type] : FormInputPrimitive;
415
- const registerProps = name ? register(name, rules) : null;
416
- return /* @__PURE__ */ React2.createElement(
417
- SelectedInput,
418
- {
419
- type,
420
- name,
421
- ...registerProps,
422
- ...restOfProps,
423
- ref: composeRefs(registerProps?.ref, ref),
424
- onChange: composeTwoEventHandlers(registerProps?.onChange, onChange),
425
- onBlur: composeTwoEventHandlers(registerProps?.onBlur, onBlur)
426
- }
427
- );
428
- }
429
- function FormTextArea(props) {
430
- return /* @__PURE__ */ React2.createElement(FormInput, { ...props, type: "textarea" });
431
- }
432
- function FormSelect(props) {
433
- return /* @__PURE__ */ React2.createElement(FormInput, { ...props, type: "select" });
434
- }
435
- function FormDescription(props) {
436
- const { className, ...restOfProps } = props;
437
- const { formDescriptionId } = useLaxFormFieldContext() ?? {};
438
- return /* @__PURE__ */ React2.createElement("p", { id: formDescriptionId, className: cnMerge("text-[12px]", className), ...restOfProps });
439
- }
440
- var FormErrorMessagePrimitive = (props) => {
441
- const fieldContextValues = useLaxFormFieldContext();
442
- const rootContextValues = useFormMethodsContext({ strict: false });
443
- const {
444
- children,
445
- className,
446
- classNames,
447
- control = rootContextValues?.control,
448
- disableErrorAnimation = false,
449
- disableScrollToErrorField = false,
450
- fieldName = fieldContextValues?.name,
451
- render,
452
- type = "regular"
453
- } = props;
454
- const { errors } = useLaxFormFieldState({ control, name: fieldName });
455
- const { formMessageId } = useLaxFormFieldContext() ?? {};
456
- const errorParagraphRef = useRef(null);
457
- const wrapperRef = useRef(null);
458
- const errorAnimationClass = classNames?.errorMessageAnimation ?? "animate-shake";
459
- const getErrorElements = useCallbackRef(
460
- () => wrapperRef.current?.children ?? [errorParagraphRef.current]
461
- );
462
- useEffect(() => {
463
- if (disableErrorAnimation) return;
464
- if (!errors || Object.keys(errors).length === 0) return;
465
- const errorMessageElements = getErrorElements();
466
- if (errorMessageElements.length === 0) return;
467
- for (const element of errorMessageElements) {
468
- if (!element) continue;
469
- element.classList.add(errorAnimationClass);
470
- const onAnimationEnd = () => element.classList.remove(errorAnimationClass);
471
- on("animationend", element, onAnimationEnd, { once: true });
472
- }
473
- }, [disableErrorAnimation, errorAnimationClass, errors, getErrorElements]);
474
- useEffect(() => {
475
- if (disableScrollToErrorField) return;
476
- if (!errors || Object.keys(errors).length === 0) return;
477
- const errorMessageElements = getErrorElements();
478
- const firstErrorElement = errorMessageElements[0];
479
- if (!firstErrorElement) return;
480
- const inputField = document.querySelector(`[name='${fieldName}']`);
481
- const isFocusableInput = inputField?.matches(
482
- ":is(input, select, textarea, [contenteditable='true'])"
483
- );
484
- if (isFocusableInput) return;
485
- requestAnimationFrame(() => {
486
- const rect = firstErrorElement.getBoundingClientRect();
487
- const topWithOffset = rect.top - 100;
488
- window.scrollTo({
489
- behavior: "smooth",
490
- top: window.scrollY + topWithOffset
491
- });
492
- });
493
- }, [disableScrollToErrorField, fieldName, errors, getErrorElements]);
494
- const fieldErrorMessage = getFieldErrorMessage({ errors, fieldName, type });
495
- if (!fieldErrorMessage) {
496
- return null;
497
- }
498
- const errorMessageArray = toArray(fieldErrorMessage);
499
- if (errorMessageArray.length === 0) {
500
- return null;
501
- }
502
- const getRenderProps = (options) => {
503
- const { index } = options;
504
- return {
505
- className: cnMerge(className, classNames?.errorMessage),
506
- "data-index": index,
507
- "data-part": "error-message",
508
- "data-scope": "form",
509
- "data-slot": "form-error-message",
510
- id: formMessageId,
511
- ref: (node) => {
512
- if (!node || errorParagraphRef.current) return;
513
- errorParagraphRef.current = node;
514
- }
515
- };
516
- };
517
- const getRenderState = (options) => {
518
- const { errorMessage, index } = options;
519
- return {
520
- errorMessage,
521
- errorMessageArray,
522
- index
523
- };
524
- };
525
- const [ErrorMessageList] = getElementList("base");
526
- const WrapperComponent = "div";
527
- const wrapperComponentProps = errorMessageArray.length > 1 && {
528
- className: cnMerge("flex flex-col", classNames?.container),
529
- "data-part": "error-message-container",
530
- "data-scope": "form",
531
- "data-slot": "form-error-message-container",
532
- ref: wrapperRef
533
- };
534
- const selectedChildren = typeof children === "function" ? children : render;
535
- return /* @__PURE__ */ React2.createElement(WrapperComponent, { ...wrapperComponentProps }, /* @__PURE__ */ React2.createElement(
536
- ErrorMessageList,
537
- {
538
- each: errorMessageArray,
539
- render: (errorMessage, index) => {
540
- return selectedChildren({
541
- props: getRenderProps({ index }),
542
- state: getRenderState({ errorMessage, index })
543
- });
544
- }
545
- }
546
- ));
547
- };
548
- function FormErrorMessage(props) {
549
- const fieldContextValues = useLaxFormFieldContext();
550
- const { className, errorField = fieldContextValues?.name, type = "regular" } = props;
551
- const { control } = useFormMethodsContext();
552
- return /* @__PURE__ */ React2.createElement(
553
- FormErrorMessagePrimitive,
554
- {
555
- control,
556
- fieldName: errorField,
557
- type,
558
- render: ({ props: renderProps, state }) => /* @__PURE__ */ React2.createElement(
559
- "p",
560
- {
561
- key: state.errorMessage,
562
- ...renderProps,
563
- className: cnMerge(
564
- "text-[13px] text-red-600",
565
- "data-[index=0]:mt-1",
566
- renderProps.className,
567
- className
568
- )
569
- },
570
- state.errorMessage
571
- )
572
- }
573
- );
574
- }
575
- function FormSubmit(props) {
576
- const { as: Element = "button", asChild, children, type = "submit", ...restOfProps } = props;
577
- const Component = asChild ? slot_parts_exports.Root : Element;
578
- return /* @__PURE__ */ React2.createElement(Component, { "data-part": "submit", "data-scope": "form", "data-slot": "form-submit", type, ...restOfProps }, children);
579
- }
580
- function FormSubscribeToFieldValue(props) {
581
- const fieldContextValues = useLaxFormFieldContext();
582
- const { children, name = fieldContextValues?.name, render } = props;
583
- const { control } = useFormMethodsContext();
584
- const formValue = useWatch({ control, name });
585
- const fieldProps = { value: formValue };
586
- const selectedChildren = typeof children === "function" ? children : render;
587
- const resolvedChildren = selectedChildren(fieldProps);
588
- return resolvedChildren;
589
- }
590
- function FormSubscribeToFormState(props) {
591
- const fieldContextValues = useLaxFormFieldContext();
592
- const { children, control, name = fieldContextValues?.name, render } = props;
593
- const formState = useFormState({ control, name });
594
- const selectedChildren = typeof children === "function" ? children : render;
595
- const resolvedChildren = selectedChildren(formState);
596
- return resolvedChildren;
597
- }
598
-
599
- // src/components/ui/form/form-parts.ts
600
- var form_parts_exports = {};
601
- __export(form_parts_exports, {
602
- ControlledField: () => FormFieldControlledField,
603
- Description: () => FormDescription,
604
- ErrorMessage: () => FormErrorMessage,
605
- ErrorMessagePrimitive: () => FormErrorMessagePrimitive,
606
- Field: () => FormField,
607
- FieldContext: () => FormFieldContext,
608
- FieldController: () => FormFieldController,
609
- Input: () => FormInput,
610
- InputGroup: () => FormInputGroup,
611
- InputLeftItem: () => FormInputLeftItem,
612
- InputPrimitive: () => FormInputPrimitive,
613
- InputRightItem: () => FormInputRightItem,
614
- Label: () => FormLabel,
615
- Root: () => FormRoot,
616
- Select: () => FormSelect,
617
- Submit: () => FormSubmit,
618
- SubscribeToFieldValue: () => FormSubscribeToFieldValue,
619
- SubscribeToFormState: () => FormSubscribeToFormState,
620
- TextArea: () => FormTextArea,
621
- TextAreaPrimitive: () => FormTextAreaPrimitive
622
- });
623
-
624
- export { FormDescription, FormErrorMessage, FormErrorMessagePrimitive, FormField, FormFieldContext, FormFieldControlledField, FormFieldController, FormInput, FormInputGroup, FormInputLeftItem, FormInputPrimitive, FormInputRightItem, FormLabel, FormRoot, FormSelect, FormSelectPrimitive, FormSubmit, FormSubscribeToFieldValue, FormSubscribeToFormState, FormTextArea, FormTextAreaPrimitive, form_parts_exports, useStrictFormFieldContext };
625
- //# sourceMappingURL=chunk-P5QP73HG.js.map
626
- //# sourceMappingURL=chunk-P5QP73HG.js.map