@gmcode/forms 0.0.6 → 0.0.8
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.
- package/README.md +1 -1
- package/dist/index.d.mts +33 -23
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +12 -19
package/README.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i18n as i18n$1 } from "i18next";
|
|
2
2
|
import { Button, Field, FieldSet } from "@gmcode/react-ui";
|
|
3
|
-
import { Control, ControllerRenderProps, DefaultValues, FieldPath, FieldValues, UseFormReturn, UseFormSetValue } from "react-hook-form";
|
|
4
|
-
import { InferSchema } from "@gmcode/tsv-hookform";
|
|
3
|
+
import { Control, ControllerRenderProps, DefaultValues, FieldPath, FieldValues, FieldValues as FieldValues$1, UseFormReturn, UseFormSetValue } from "react-hook-form";
|
|
4
|
+
import { InferSchema, InferSchema as InferSchema$1, useTsvResolver } from "@gmcode/tsv-hookform";
|
|
5
5
|
import { ComponentProps, FC, HTMLInputAutoCompleteAttribute, HTMLInputTypeAttribute, ReactNode, SVGProps } from "react";
|
|
6
6
|
import { InputCheckboxRule, InputColorRule, InputEmailRule, InputNumberRule, InputRule, InputSelectRule, InputTextRule, Message, MessageParams, MessageParams as MessageParams$1, Ruleset, Ruleset as Ruleset$1, Sanitized, SanitizedValues, Schema, SchemaOptions, SchemaRule, SchemaValues } from "@gmcode/tsv-input";
|
|
7
7
|
import { DayPickerLocale, Matcher } from "react-day-picker";
|
|
@@ -33,7 +33,7 @@ interface ErrorData {
|
|
|
33
33
|
}
|
|
34
34
|
//#endregion
|
|
35
35
|
//#region src/components/calendar-field.d.ts
|
|
36
|
-
declare function CalendarField<TFieldValues extends FieldValues = FieldValues>({
|
|
36
|
+
declare function CalendarField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
37
37
|
control,
|
|
38
38
|
dateToString,
|
|
39
39
|
disabled,
|
|
@@ -55,7 +55,7 @@ declare function CalendarField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
55
55
|
}): import("react").JSX.Element;
|
|
56
56
|
//#endregion
|
|
57
57
|
//#region src/components/checkbox-field.d.ts
|
|
58
|
-
declare function CheckboxField<TFieldValues extends FieldValues = FieldValues>({
|
|
58
|
+
declare function CheckboxField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
59
59
|
control,
|
|
60
60
|
disabled,
|
|
61
61
|
inputId,
|
|
@@ -80,7 +80,7 @@ declare function CheckboxField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
80
80
|
}): import("react").JSX.Element;
|
|
81
81
|
//#endregion
|
|
82
82
|
//#region src/components/input-field.d.ts
|
|
83
|
-
declare function InputField<TFieldValues extends FieldValues = FieldValues>({
|
|
83
|
+
declare function InputField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
84
84
|
autoComplete,
|
|
85
85
|
control,
|
|
86
86
|
disabled,
|
|
@@ -104,7 +104,7 @@ declare function InputField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
104
104
|
}): import("react").JSX.Element;
|
|
105
105
|
//#endregion
|
|
106
106
|
//#region src/components/email-field.d.ts
|
|
107
|
-
declare function EmailField<TFieldValues extends FieldValues = FieldValues>({
|
|
107
|
+
declare function EmailField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
108
108
|
autoComplete,
|
|
109
109
|
type,
|
|
110
110
|
...props
|
|
@@ -118,7 +118,7 @@ declare function ErrorMonitor({
|
|
|
118
118
|
}): import("react").JSX.Element | null;
|
|
119
119
|
//#endregion
|
|
120
120
|
//#region src/components/fancy-radio-field.d.ts
|
|
121
|
-
declare function FancyRadioField<TFieldValues extends FieldValues = FieldValues>({
|
|
121
|
+
declare function FancyRadioField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
122
122
|
control,
|
|
123
123
|
defaultValue,
|
|
124
124
|
description,
|
|
@@ -142,7 +142,7 @@ declare function FancyRadioField<TFieldValues extends FieldValues = FieldValues>
|
|
|
142
142
|
}): import("react").JSX.Element;
|
|
143
143
|
//#endregion
|
|
144
144
|
//#region src/components/form.d.ts
|
|
145
|
-
type RenderFN<TValues extends FieldValues> = ({
|
|
145
|
+
type RenderFN<TValues extends FieldValues$1> = ({
|
|
146
146
|
errors,
|
|
147
147
|
form,
|
|
148
148
|
loading
|
|
@@ -151,7 +151,7 @@ type RenderFN<TValues extends FieldValues> = ({
|
|
|
151
151
|
form: UseFormReturn<TValues>;
|
|
152
152
|
loading: boolean;
|
|
153
153
|
}) => ReactNode;
|
|
154
|
-
declare function Form<TRuleset extends Ruleset$1, TSchema extends Schema<TRuleset>, TValues extends InferSchema<TSchema>>({
|
|
154
|
+
declare function Form<TRuleset extends Ruleset$1, TSchema extends Schema<TRuleset>, TValues extends InferSchema$1<TSchema>>({
|
|
155
155
|
children,
|
|
156
156
|
className,
|
|
157
157
|
defaults,
|
|
@@ -180,11 +180,11 @@ declare function Form<TRuleset extends Ruleset$1, TSchema extends Schema<TRulese
|
|
|
180
180
|
/**
|
|
181
181
|
* How to display the root error from inertia.
|
|
182
182
|
*
|
|
183
|
-
* - `flash` - use the Toaster component
|
|
184
|
-
* - `monitor` - use the ErrorMonitor component
|
|
185
|
-
* - `none` - don't display the root error
|
|
183
|
+
* - `"flash"` - use the Toaster component
|
|
184
|
+
* - `"monitor"` - use the ErrorMonitor component
|
|
185
|
+
* - `"none"` - don't display the root error
|
|
186
186
|
*
|
|
187
|
-
* @defaultValue `flash`
|
|
187
|
+
* @defaultValue `"flash"`
|
|
188
188
|
*/
|
|
189
189
|
rootError?: 'flash' | 'monitor' | 'none';
|
|
190
190
|
onBefore?: GlobalEventCallback<'before', RequestPayload>;
|
|
@@ -200,14 +200,24 @@ declare function Form<TRuleset extends Ruleset$1, TSchema extends Schema<TRulese
|
|
|
200
200
|
onStart?: GlobalEventCallback<'start', RequestPayload>;
|
|
201
201
|
onSuccess?: GlobalEventCallback<'success', RequestPayload>;
|
|
202
202
|
preserveScroll?: boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Reset input values to their defaults on success.
|
|
205
|
+
*
|
|
206
|
+
* @defaultValue `true`
|
|
207
|
+
*/
|
|
203
208
|
resetOnSuccess?: boolean;
|
|
204
209
|
route: RouteDefinition<Method>;
|
|
205
210
|
schema: Schema<TRuleset>;
|
|
211
|
+
/**
|
|
212
|
+
* Set the submitted values as default values on success.
|
|
213
|
+
*
|
|
214
|
+
* @defaultValue `false`
|
|
215
|
+
*/
|
|
206
216
|
setDefaultsOnSuccess?: boolean;
|
|
207
217
|
}): import("react").JSX.Element;
|
|
208
218
|
//#endregion
|
|
209
219
|
//#region src/components/hidden-field.d.ts
|
|
210
|
-
declare function HiddenField<TFieldValues extends FieldValues = FieldValues>({
|
|
220
|
+
declare function HiddenField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
211
221
|
autoComplete,
|
|
212
222
|
className,
|
|
213
223
|
type,
|
|
@@ -215,7 +225,7 @@ declare function HiddenField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
215
225
|
}: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
|
|
216
226
|
//#endregion
|
|
217
227
|
//#region src/components/info-checkbox-field.d.ts
|
|
218
|
-
declare function InfoCheckboxField<TFieldValues extends FieldValues = FieldValues>({
|
|
228
|
+
declare function InfoCheckboxField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
219
229
|
children,
|
|
220
230
|
className,
|
|
221
231
|
control,
|
|
@@ -244,7 +254,7 @@ declare function InfoCheckboxField<TFieldValues extends FieldValues = FieldValue
|
|
|
244
254
|
}): import("react").JSX.Element;
|
|
245
255
|
//#endregion
|
|
246
256
|
//#region src/components/nullable-select-field.d.ts
|
|
247
|
-
declare function NullableSelectField<TFieldValues extends FieldValues = FieldValues>({
|
|
257
|
+
declare function NullableSelectField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
248
258
|
autoComplete,
|
|
249
259
|
control,
|
|
250
260
|
description,
|
|
@@ -271,7 +281,7 @@ declare function NullableSelectField<TFieldValues extends FieldValues = FieldVal
|
|
|
271
281
|
}): import("react").JSX.Element;
|
|
272
282
|
//#endregion
|
|
273
283
|
//#region src/components/numeric-field.d.ts
|
|
274
|
-
declare function NumericField<TFieldValues extends FieldValues = FieldValues>({
|
|
284
|
+
declare function NumericField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
275
285
|
autoComplete,
|
|
276
286
|
control,
|
|
277
287
|
disabled,
|
|
@@ -302,14 +312,14 @@ declare function NumericField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
302
312
|
}): import("react").JSX.Element;
|
|
303
313
|
//#endregion
|
|
304
314
|
//#region src/components/password-field.d.ts
|
|
305
|
-
declare function PasswordField<TFieldValues extends FieldValues = FieldValues>({
|
|
315
|
+
declare function PasswordField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
306
316
|
autoComplete,
|
|
307
317
|
type,
|
|
308
318
|
...props
|
|
309
319
|
}: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
|
|
310
320
|
//#endregion
|
|
311
321
|
//#region src/components/select-field.d.ts
|
|
312
|
-
declare function SelectField<TFieldValues extends FieldValues = FieldValues>({
|
|
322
|
+
declare function SelectField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
313
323
|
autoComplete,
|
|
314
324
|
control,
|
|
315
325
|
description,
|
|
@@ -345,7 +355,7 @@ declare function Submit({
|
|
|
345
355
|
}): import("react").JSX.Element;
|
|
346
356
|
//#endregion
|
|
347
357
|
//#region src/components/switch-field.d.ts
|
|
348
|
-
declare function SwitchField<TFieldValues extends FieldValues = FieldValues>({
|
|
358
|
+
declare function SwitchField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
349
359
|
control,
|
|
350
360
|
disabled,
|
|
351
361
|
inputId,
|
|
@@ -370,14 +380,14 @@ declare function SwitchField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
370
380
|
}): import("react").JSX.Element;
|
|
371
381
|
//#endregion
|
|
372
382
|
//#region src/components/text-field.d.ts
|
|
373
|
-
declare function TextField<TFieldValues extends FieldValues = FieldValues>({
|
|
383
|
+
declare function TextField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
374
384
|
autoComplete,
|
|
375
385
|
type,
|
|
376
386
|
...props
|
|
377
387
|
}: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
|
|
378
388
|
//#endregion
|
|
379
389
|
//#region src/components/textarea-field.d.ts
|
|
380
|
-
declare function TextareaField<TFieldValues extends FieldValues = FieldValues>({
|
|
390
|
+
declare function TextareaField<TFieldValues extends FieldValues$1 = FieldValues$1>({
|
|
381
391
|
cacheMeasurements,
|
|
382
392
|
control,
|
|
383
393
|
inputId,
|
|
@@ -402,5 +412,5 @@ declare function TextareaField<TFieldValues extends FieldValues = FieldValues>({
|
|
|
402
412
|
resize?: 'both' | 'none' | 'x' | 'y';
|
|
403
413
|
}): import("react").JSX.Element;
|
|
404
414
|
//#endregion
|
|
405
|
-
export { CalendarField, CheckboxField, EmailField, type ErrorData, ErrorMonitor, FancyRadioField, Form, HiddenField, InfoCheckboxField, InputCheckboxRule, InputColorRule, InputEmailRule, InputField, InputNumberRule, InputRule, InputSelectRule, InputTextRule, Message, type MessageParams, type Method, NullableSelectField, NumericField, type Option, PasswordField, type RouteDefinition, type Ruleset, type Sanitized, type SanitizedValues, Schema, type SchemaOptions, type SchemaRule, type SchemaValues, SelectField, Submit, SwitchField, TextField, TextareaField, i18n };
|
|
415
|
+
export { CalendarField, CheckboxField, EmailField, type ErrorData, ErrorMonitor, FancyRadioField, type FieldValues, Form, HiddenField, type InferSchema, InfoCheckboxField, InputCheckboxRule, InputColorRule, InputEmailRule, InputField, InputNumberRule, InputRule, InputSelectRule, InputTextRule, Message, type MessageParams, type Method, NullableSelectField, NumericField, type Option, PasswordField, type RouteDefinition, type Ruleset, type Sanitized, type SanitizedValues, Schema, type SchemaOptions, type SchemaRule, type SchemaValues, SelectField, Submit, SwitchField, TextField, TextareaField, i18n, useTsvResolver };
|
|
406
416
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":["TMethod","Method","url","methods","method","id","key","label","ReactNode","value","message","params","MessageParams"],"sources":["../src/i18n.ts","../src/types/index.d.ts","../src/components/calendar-field.tsx","../src/components/checkbox-field.tsx","../src/components/input-field.tsx","../src/components/email-field.tsx","../src/components/error-monitor.tsx","../src/components/fancy-radio-field.tsx","../src/components/form.tsx","../src/components/hidden-field.tsx","../src/components/info-checkbox-field.tsx","../src/components/nullable-select-field.tsx","../src/components/numeric-field.tsx","../src/components/password-field.tsx","../src/components/select-field.tsx","../src/components/submit.tsx","../src/components/switch-field.tsx","../src/components/text-field.tsx","../src/components/textarea-field.tsx"],"mappings":";;;;;;;;;;;;cAGM,IAAA,EAAM,MAIV;;;KCJU,MAAA;AAAA,KAEA,eAAA,iBAAgC,MAAA,GAAS,MAAA;EACnDE,GAAAA;AAAAA,KACG,OAAA,SAAgB,MAAA;EAAaC,OAAAA,EAAS,OAAA;AAAA;EAAcC,MAAAA,EAAQ,OAAA;AAAA;AAAA,UAEhD,MAAA;EACfC,EAAAA;EACAC,GAAAA;EACAC,KAAAA,EAAO,SAAS;EAChBE,KAAAA;AAAAA;AAAAA,UAGe,SAAA;EACfC,OAAAA;EACAC,MAAAA,GAAS,eAAa;AAAA;;;iBCPR,aAAA,sBAAmC,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":["TMethod","Method","url","methods","method","id","key","label","ReactNode","value","message","params","MessageParams"],"sources":["../src/i18n.ts","../src/types/index.d.ts","../src/components/calendar-field.tsx","../src/components/checkbox-field.tsx","../src/components/input-field.tsx","../src/components/email-field.tsx","../src/components/error-monitor.tsx","../src/components/fancy-radio-field.tsx","../src/components/form.tsx","../src/components/hidden-field.tsx","../src/components/info-checkbox-field.tsx","../src/components/nullable-select-field.tsx","../src/components/numeric-field.tsx","../src/components/password-field.tsx","../src/components/select-field.tsx","../src/components/submit.tsx","../src/components/switch-field.tsx","../src/components/text-field.tsx","../src/components/textarea-field.tsx"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./en-CnkPOj-4.mjs";import{createInstance as t}from"i18next";import{Button as n,Calendar as r,Checkbox as i,Field as a,FieldDescription as o,FieldError as s,FieldLabel as c,FieldSet as l,Input as u,InputGroup as d,InputGroupAddon as f,InputGroupButton as p,InputGroupInput as m,Label as h,RadioGroup as g,RadioGroupItem as _,Select as v,SelectContent as y,SelectItem as b,SelectTrigger as x,SelectValue as S,Spinner as C,Switch as w,TextareaAutosize as T,cn as E,flash as ee}from"@gmcode/react-ui";import{Controller as D,useForm as O}from"react-hook-form";import{c as k}from"react/compiler-runtime";import{I18nextProvider as te,useTranslation as A}from"react-i18next";import{Fragment as ne,jsx as j,jsxs as M}from"react/jsx-runtime";import{useTsvResolver as re}from"@gmcode/tsv-hookform";import{useEffect as N,useState as P}from"react";import{useForm as F}from"@inertiajs/react";import{Minus as I,Plus as L,X as R}from"lucide-react";import{InputCheckboxRule as z,InputColorRule as B,InputEmailRule as V,InputNumberRule as H,InputRule as U,InputSelectRule as W,InputTextRule as G,Message as K,Schema as q}from"@gmcode/tsv-input";const J=t({fallbackLng:`en`,interpolation:{escapeValue:!1},resources:{en:e}});J.init();function Y(e){return`${e.getFullYear()}-${(e.getMonth()+1+``).padStart(2,`0`)}-${(e.getDate()+``).padStart(2,`0`)}`}function X(e){if(!e)return;let t=new Date(e);if(!isNaN(t.getFullYear()))return t}function Z(e){let t=k(9);if(t[0]!==`e1e2461c713ca647286d0fc423569ef83087dbc1e837bfd11a46d13a4019c79a`){for(let e=0;e<9;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e1e2461c713ca647286d0fc423569ef83087dbc1e837bfd11a46d13a4019c79a`}let{error:n}=e,{t:r}=A();if(!n?.message)return null;if(r){let e;t[1]!==n.message||t[2]!==n.params||t[3]!==r?(e=r(n.message,n.params),t[1]=n.message,t[2]=n.params,t[3]=r,t[4]=e):e=t[4];let i;return t[5]===e?i=t[6]:(i=j(s,{errors:{message:e}}),t[5]=e,t[6]=i),i}let i;return t[7]===n?i=t[8]:(i=j(s,{errors:n}),t[7]=n,t[8]=i),i}function ie({control:e,dateToString:t=Y,disabled:n,inputId:i,inputName:o,label:s,locale:l,stringToDate:u=X,...d}){return j(D,{name:o,control:e,render:({field:e,fieldState:f})=>M(a,{"data-invalid":f.invalid,...d,children:[s&&j(c,{htmlFor:i??o,children:s}),j(r,{"aria-invalid":f.invalid,className:`w-full rounded-md border`,disabled:n,fixedWeeks:!0,id:i??(s?o:void 0),locale:l,mode:`single`,onSelect:n=>e.onChange(n?t(n):``),selected:u(e.value)}),j(Z,{error:f.error})]})})}function ae({control:e,disabled:t,inputId:n,inputName:r,label:o,onCheckedChange:s,orientation:l=`horizontal`,readOnly:u,uncheckedValue:d=``,value:f=`true`,...p}){return j(D,{control:e,disabled:t,name:r,render:({field:e,fieldState:t})=>M(a,{"data-invalid":t.invalid,orientation:l,...p,children:[j(i,{"aria-invalid":t.invalid,"aria-readonly":u,checked:e.value===f,className:`aria-readonly:opacity-50`,disabled:e.disabled,id:n??(o?r:void 0),name:e.name,onBlur:e.onBlur,onCheckedChange:t=>{u||(e.onChange(t===!0?f:d),s&&s(t,e))},ref:e.ref,value:f}),o&&j(c,{htmlFor:n??r,children:o}),j(Z,{error:t.error})]})})}function Q(e){let t=k(26);if(t[0]!==`7501af4e40fae6de51379fcd69a5dbf630a70539ba636a47e077920376e26910`){for(let e=0;e<26;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`7501af4e40fae6de51379fcd69a5dbf630a70539ba636a47e077920376e26910`}let n,r,i,o,s,l,d,f,p,m;t[1]===e?(n=t[2],r=t[3],i=t[4],o=t[5],s=t[6],l=t[7],d=t[8],f=t[9],p=t[10],m=t[11]):({autoComplete:n,control:r,disabled:i,inputId:o,inputName:s,label:l,placeholder:d,readOnly:p,type:m,...f}=e,t[1]=e,t[2]=n,t[3]=r,t[4]=i,t[5]=o,t[6]=s,t[7]=l,t[8]=d,t[9]=f,t[10]=p,t[11]=m);let h;t[12]!==n||t[13]!==o||t[14]!==s||t[15]!==l||t[16]!==d||t[17]!==f||t[18]!==p||t[19]!==m?(h=e=>{let{field:t,fieldState:r}=e;return M(a,{"data-invalid":r.invalid,...f,children:[l&&j(c,{htmlFor:o??s,children:l}),j(u,{"aria-invalid":r.invalid,autoComplete:n,id:o??(l?s:void 0),placeholder:d,readOnly:p,type:m,...t}),j(Z,{error:r.error})]})},t[12]=n,t[13]=o,t[14]=s,t[15]=l,t[16]=d,t[17]=f,t[18]=p,t[19]=m,t[20]=h):h=t[20];let g;return t[21]!==r||t[22]!==i||t[23]!==s||t[24]!==h?(g=j(D,{control:r,disabled:i,name:s,render:h}),t[21]=r,t[22]=i,t[23]=s,t[24]=h,t[25]=g):g=t[25],g}function oe({autoComplete:e=`on`,type:t=`email`,...n}){return j(Q,{autoComplete:e,type:t,...n})}function se(e){let t=k(24);if(t[0]!==`f049c21be78fb6540f3470521dce48b055b196c1dc09159c5c6b5f5d2dcbc0b9`){for(let e=0;e<24;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`f049c21be78fb6540f3470521dce48b055b196c1dc09159c5c6b5f5d2dcbc0b9`}let n,r,i,a,s,u,d,f,p;t[1]===e?(n=t[2],r=t[3],i=t[4],a=t[5],s=t[6],u=t[7],d=t[8],f=t[9],p=t[10]):({control:n,defaultValue:r,description:i,disabled:a,groupId:s,inputName:u,label:d,options:f,...p}=e,t[1]=e,t[2]=n,t[3]=r,t[4]=i,t[5]=a,t[6]=s,t[7]=u,t[8]=d,t[9]=f,t[10]=p);let m;t[11]!==r||t[12]!==i||t[13]!==s||t[14]!==u||t[15]!==d||t[16]!==f||t[17]!==p?(m=e=>{let{field:t,fieldState:n}=e;return M(l,{"data-invalid":n.invalid,...p,children:[d&&j(c,{htmlFor:s??u,children:d}),i&&j(o,{children:i}),j(Z,{error:n.error}),j(g,{defaultValue:r,disabled:t.disabled,id:s??(d?u:void 0),name:t.name,onBlur:t.onBlur,onValueChange:t.onChange,ref:t.ref,children:f.map(ce)})]})},t[11]=r,t[12]=i,t[13]=s,t[14]=u,t[15]=d,t[16]=f,t[17]=p,t[18]=m):m=t[18];let h;return t[19]!==n||t[20]!==a||t[21]!==u||t[22]!==m?(h=j(D,{control:n,disabled:a,name:u,render:m}),t[19]=n,t[20]=a,t[21]=u,t[22]=m,t[23]=h):h=t[23],h}function ce(e){return j(h,{className:`rounded-md border ring-ring/50 transition-all hover:bg-accent/50 has-focus-visible:ring-[3px]`,"data-slot":`field-label`,children:M(`div`,{className:`flex w-full items-center gap-3 rounded-md p-3 transition-all has-aria-checked:border-l-8 has-aria-checked:border-ring`,children:[j(_,{className:`sr-only`,id:e.id,value:e.value}),e.Icon&&j(e.Icon,{}),e.label]})},e.key??e.id??e.value)}function le({children:e,className:t,defaults:n={},rootError:r=`flash`,onBefore:i,onBeforeUpdate:a,onCancel:o,onCancelToken:s,onError:c,onFinish:l,onFlash:u,onPrefetched:d,onPrefetching:f,onProgress:p,onStart:m,onSuccess:h,preserveScroll:g=!0,resetOnSuccess:_=!0,route:v,schema:y,setDefaultsOnSuccess:b=!1}){let[x,S]=P(),C=Object.fromEntries(Object.keys(y.ruleset).map(e=>[e,n[e]??``])),w=O({defaultValues:C,resolver:re(y)}),T=F(C);function D(e){e.root&&(r===`flash`?ee({level:`error`,title:e.root}):r===`monitor`&&S({message:e.root})),c&&c(e)}function k(e){b&&(T.setDefaults(),w.reset(w.getValues())),_&&(T.reset(),w.reset()),h&&h(e)}function A(e){T.transform(()=>e),T[v.method](v.url,{onBefore:i,onBeforeUpdate:a,onCancel:o,onCancelToken:s,onError:D,onFinish:l,onFlash:u,onPrefetched:d,onPrefetching:f,onProgress:p,onStart:m,onSuccess:k,preserveScroll:g})}return N(()=>{for(let[e,t]of Object.entries(T.errors))t&&w.setError(e,{message:t,type:`inertia`})},[T.errors,w]),j(te,{i18n:J,children:M(`form`,{action:v.url,className:E(`grid gap-6`,t),method:v.method,onSubmit:w.handleSubmit(A),children:[j(ne,{children:e({errors:T.errors,form:w,loading:T.processing})}),r===`monitor`&&j(Z,{error:x})]})})}function ue({autoComplete:e=`off`,className:t,type:n=`hidden`,...r}){return j(Q,{autoComplete:e,className:E(`hidden`,t),type:n,...r})}function de({children:e,className:t,control:n,disabled:r,inputId:o,inputName:s,label:c,onCheckedChange:l,orientation:u=`horizontal`,readOnly:d,text:f,uncheckedValue:p=``,value:m=`true`,...g}){return j(D,{control:n,disabled:r,name:s,render:({field:n,fieldState:r})=>j(a,{className:E(`block`,t),"data-invalid":r.invalid,orientation:u,...g,children:M(h,{className:`flex items-start gap-3 rounded-lg border p-3 hover:bg-accent/50 has-aria-checked:border-info-foreground has-aria-checked:bg-info`,"data-slot":`field-label`,children:[j(i,{"aria-invalid":r.invalid,"aria-readonly":d,checked:n.value===m,className:`aria-readonly:opacity-50 data-[state=checked]:border-info-foreground data-[state=checked]:bg-info-foreground data-[state=checked]:text-white dark:data-[state=checked]:border-info-foreground dark:data-[state=checked]:bg-info-foreground`,disabled:n.disabled,id:o,name:n.name,onBlur:n.onBlur,onCheckedChange:e=>{d||(n.onChange(e===!0?m:p),l&&l(e,n))},ref:n.ref,value:m}),M(`div`,{className:`grid gap-1.5 font-normal`,children:[j(`p`,{className:`text-sm leading-none font-medium`,children:c}),f?j(`p`,{className:`text-sm text-muted-foreground`,children:f}):e,j(Z,{error:r.error})]})]})})})}function fe(e){let t=k(29);if(t[0]!==`aef79d6bb8014bb7e50376596fc0ae9e5294086f70390531e20fce8a0095eeca`){for(let e=0;e<29;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`aef79d6bb8014bb7e50376596fc0ae9e5294086f70390531e20fce8a0095eeca`}let r,i,s,l,u,d,f,p,m,h,g;t[1]===e?(r=t[2],i=t[3],s=t[4],l=t[5],u=t[6],d=t[7],f=t[8],p=t[9],m=t[10],h=t[11],g=t[12]):({autoComplete:r,control:i,description:s,disabled:l,inputId:u,inputName:d,label:f,options:p,placeholder:m,setValue:g,...h}=e,t[1]=e,t[2]=r,t[3]=i,t[4]=s,t[5]=l,t[6]=u,t[7]=d,t[8]=f,t[9]=p,t[10]=m,t[11]=h,t[12]=g);let{t:_}=A(),b;t[13]!==r||t[14]!==s||t[15]!==u||t[16]!==d||t[17]!==f||t[18]!==p||t[19]!==m||t[20]!==h||t[21]!==g||t[22]!==_?(b=e=>{let{field:t,fieldState:i}=e;return M(a,{"data-invalid":i.invalid,...h,children:[f&&j(c,{htmlFor:u??d,children:f}),M(`div`,{className:`flex items-end gap-4`,children:[M(v,{autoComplete:r,disabled:t.disabled,name:t.name,onValueChange:t.onChange,value:t.value,children:[j(x,{"aria-invalid":i.invalid,className:`flex-1 overflow-hidden`,id:u??(f?d:void 0),children:j(S,{placeholder:m})}),j(y,{children:p.map($)})]}),j(n,{"aria-label":_(pe),className:`flex-none`,onClick:()=>g(d,``),type:`button`,variant:`outline`,children:j(R,{})})]}),s&&j(o,{children:s}),j(Z,{error:i.error})]})},t[13]=r,t[14]=s,t[15]=u,t[16]=d,t[17]=f,t[18]=p,t[19]=m,t[20]=h,t[21]=g,t[22]=_,t[23]=b):b=t[23];let C;return t[24]!==i||t[25]!==l||t[26]!==d||t[27]!==b?(C=j(D,{control:i,disabled:l,name:d,render:b}),t[24]=i,t[25]=l,t[26]=d,t[27]=b,t[28]=C):C=t[28],C}function pe(e){return e.reset}function $(e){return j(b,{id:e.id,value:e.value,children:e.label},e.key??e.id??e.value)}function me(e,t,n,r,i){let a=Number(e);return isNaN(a)?``:(t?a+=n===void 0?1:n:a-=n===void 0?1:n,r!==void 0&&(a=Math.max(a,r)),i!==void 0&&(a=Math.min(a,i)),a.toString())}function he({autoComplete:e,control:t,disabled:n,inputId:r,inputMode:i=`numeric`,inputName:o,label:s,placeholder:l,type:u,ui:h,...g}){let{t:_}=A();function v(e,t){h?.setValue&&h.setValue(o,me(e,t,h.step,h.min,h.max),{shouldValidate:!0})}return j(D,{control:t,disabled:n,name:o,render:({field:t,fieldState:y})=>M(a,{"data-invalid":y.invalid,...g,children:[s&&j(c,{htmlFor:r??o,children:s}),M(d,{children:[j(m,{"aria-invalid":y.invalid,autoComplete:e,id:r??(s?o:void 0),inputMode:i,placeholder:l,type:u,...t}),h&&M(f,{align:`inline-end`,children:[j(p,{"aria-label":_(e=>e.decrease),disabled:n,onClick:()=>v(t.value,!1),size:`icon-xs`,children:j(I,{})}),j(p,{"aria-label":_(e=>e.increase),disabled:n,onClick:()=>v(t.value,!0),size:`icon-xs`,children:j(L,{})})]})]}),j(Z,{error:y.error})]})})}function ge({autoComplete:e=`off`,type:t=`password`,...n}){return j(Q,{autoComplete:e,type:t,...n})}function _e(e){let t=k(26);if(t[0]!==`17d768ca562ec97c16bcafe5b5f4a7680b17a9911e26839427dd0f20be4d3e30`){for(let e=0;e<26;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`17d768ca562ec97c16bcafe5b5f4a7680b17a9911e26839427dd0f20be4d3e30`}let n,r,i,s,l,u,d,f,p,m;t[1]===e?(n=t[2],r=t[3],i=t[4],s=t[5],l=t[6],u=t[7],d=t[8],f=t[9],p=t[10],m=t[11]):({autoComplete:n,control:r,description:i,disabled:s,inputId:l,inputName:u,label:d,options:f,placeholder:p,...m}=e,t[1]=e,t[2]=n,t[3]=r,t[4]=i,t[5]=s,t[6]=l,t[7]=u,t[8]=d,t[9]=f,t[10]=p,t[11]=m);let h;t[12]!==n||t[13]!==i||t[14]!==l||t[15]!==u||t[16]!==d||t[17]!==f||t[18]!==p||t[19]!==m?(h=e=>{let{field:t,fieldState:r}=e;return M(a,{"data-invalid":r.invalid,...m,children:[d&&j(c,{htmlFor:l??u,children:d}),M(v,{autoComplete:n,disabled:t.disabled,name:t.name,onValueChange:t.onChange,value:t.value,children:[j(x,{"aria-invalid":r.invalid,id:l??(d?u:void 0),children:j(S,{placeholder:p})}),j(y,{children:f.map(ve)})]}),i&&j(o,{children:i}),j(Z,{error:r.error})]})},t[12]=n,t[13]=i,t[14]=l,t[15]=u,t[16]=d,t[17]=f,t[18]=p,t[19]=m,t[20]=h):h=t[20];let g;return t[21]!==r||t[22]!==s||t[23]!==u||t[24]!==h?(g=j(D,{control:r,disabled:s,name:u,render:h}),t[21]=r,t[22]=s,t[23]=u,t[24]=h,t[25]=g):g=t[25],g}function ve(e){return j(b,{id:e.id,value:e.value,children:e.label},e.key??e.id??e.value)}function ye({label:e,loading:t=!1,type:r=`submit`,...i}){let{t:a}=A();return j(n,{disabled:t,type:r,...i,children:M(`div`,{className:`relative`,children:[j(`span`,{className:E({invisible:t}),children:e??a(e=>e.submit)}),j(C,{className:E(`trans absolute top-1/2 left-1/2 hidden -translate-x-1/2 -translate-y-1/2`,{block:t})})]})})}function be({control:e,disabled:t,inputId:n,inputName:r,label:i,onCheckedChange:o,orientation:s=`horizontal`,readOnly:l,uncheckedValue:u=``,value:d=`true`,...f}){return j(D,{control:e,disabled:t,name:r,render:({field:e,fieldState:t})=>M(a,{"data-invalid":t.invalid,orientation:s,...f,children:[j(w,{"aria-invalid":t.invalid,"aria-readonly":l,checked:e.value===d,className:`aria-readonly:opacity-50`,disabled:e.disabled,id:n??(i?r:void 0),name:e.name,onBlur:e.onBlur,onCheckedChange:t=>{l||(e.onChange(t===!0?d:u),o&&o(t,e))},ref:e.ref,value:d}),i&&j(c,{htmlFor:n??r,children:i}),j(Z,{error:t.error})]})})}function xe({autoComplete:e=`on`,type:t=`text`,...n}){return j(Q,{autoComplete:e,type:t,...n})}function Se({cacheMeasurements:e,control:t,inputId:n,inputName:r,label:i,maxRows:o,minRows:s,onHeightChange:l,placeholder:u,resize:d=`none`,...f}){return j(D,{name:r,control:t,render:({field:t,fieldState:p})=>M(a,{"data-invalid":p.invalid,...f,children:[i&&j(c,{htmlFor:n??r,children:i}),j(T,{"aria-invalid":p.invalid,autoComplete:`off`,cacheMeasurements:e,className:E({resize:d===`both`,"resize-none":d===`none`,"resize-x":d===`x`,"resize-y":d===`y`}),id:n??(i?r:void 0),maxRows:o,minRows:s,onHeightChange:l,placeholder:u,...t}),j(Z,{error:p.error})]})})}export{ie as CalendarField,ae as CheckboxField,oe as EmailField,Z as ErrorMonitor,se as FancyRadioField,le as Form,ue as HiddenField,de as InfoCheckboxField,z as InputCheckboxRule,B as InputColorRule,V as InputEmailRule,Q as InputField,H as InputNumberRule,U as InputRule,W as InputSelectRule,G as InputTextRule,K as Message,fe as NullableSelectField,he as NumericField,ge as PasswordField,q as Schema,_e as SelectField,ye as Submit,be as SwitchField,xe as TextField,Se as TextareaField,J as i18n};
|
|
1
|
+
import{t as e}from"./en-CnkPOj-4.mjs";import{createInstance as t}from"i18next";import{Button as n,Calendar as r,Checkbox as i,Field as a,FieldDescription as o,FieldError as s,FieldLabel as c,FieldSet as l,Input as u,InputGroup as d,InputGroupAddon as f,InputGroupButton as p,InputGroupInput as m,Label as h,RadioGroup as g,RadioGroupItem as _,Select as v,SelectContent as y,SelectItem as b,SelectTrigger as x,SelectValue as S,Spinner as C,Switch as w,TextareaAutosize as T,cn as E,flash as ee}from"@gmcode/react-ui";import{Controller as D,useForm as O}from"react-hook-form";import{c as k}from"react/compiler-runtime";import{I18nextProvider as te,useTranslation as A}from"react-i18next";import{Fragment as ne,jsx as j,jsxs as M}from"react/jsx-runtime";import{useTsvResolver as re,useTsvResolver as N}from"@gmcode/tsv-hookform";import{useEffect as P,useState as F}from"react";import{useForm as I}from"@inertiajs/react";import{Minus as L,Plus as R,X as z}from"lucide-react";import{InputCheckboxRule as B,InputColorRule as V,InputEmailRule as H,InputNumberRule as U,InputRule as W,InputSelectRule as G,InputTextRule as K,Message as q,Schema as J}from"@gmcode/tsv-input";const Y=t({fallbackLng:`en`,interpolation:{escapeValue:!1},resources:{en:e}});Y.init();function X(e){return`${e.getFullYear()}-${(e.getMonth()+1+``).padStart(2,`0`)}-${(e.getDate()+``).padStart(2,`0`)}`}function ie(e){if(!e)return;let t=new Date(e);if(!isNaN(t.getFullYear()))return t}function Z(e){let t=k(9);if(t[0]!==`a56eacc08ebde73bd0415650037f76238ce2a27cc1a498f3d4b1e0b95e21f7e9`){for(let e=0;e<9;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`a56eacc08ebde73bd0415650037f76238ce2a27cc1a498f3d4b1e0b95e21f7e9`}let{error:n}=e,{t:r}=A();if(!n?.message)return null;if(r.name===`notReadyT`){let e;return t[1]===n?e=t[2]:(e=j(s,{errors:n}),t[1]=n,t[2]=e),e}let i;t[3]!==n.message||t[4]!==n.params||t[5]!==r?(i=r(n.message,n.params),t[3]=n.message,t[4]=n.params,t[5]=r,t[6]=i):i=t[6];let a;return t[7]===i?a=t[8]:(a=j(s,{errors:{message:i}}),t[7]=i,t[8]=a),a}function ae({control:e,dateToString:t=X,disabled:n,inputId:i,inputName:o,label:s,locale:l,stringToDate:u=ie,...d}){return j(D,{name:o,control:e,render:({field:e,fieldState:f})=>M(a,{"data-invalid":f.invalid,...d,children:[s&&j(c,{htmlFor:i??o,children:s}),j(r,{"aria-invalid":f.invalid,className:`w-full rounded-md border`,disabled:n,fixedWeeks:!0,id:i??(s?o:void 0),locale:l,mode:`single`,onSelect:n=>e.onChange(n?t(n):``),selected:u(e.value)}),j(Z,{error:f.error})]})})}function oe({control:e,disabled:t,inputId:n,inputName:r,label:o,onCheckedChange:s,orientation:l=`horizontal`,readOnly:u,uncheckedValue:d=``,value:f=`true`,...p}){return j(D,{control:e,disabled:t,name:r,render:({field:e,fieldState:t})=>M(a,{"data-invalid":t.invalid,orientation:l,...p,children:[j(i,{"aria-invalid":t.invalid,"aria-readonly":u,checked:e.value===f,className:`aria-readonly:opacity-50`,disabled:e.disabled,id:n??(o?r:void 0),name:e.name,onBlur:e.onBlur,onCheckedChange:t=>{u||(e.onChange(t===!0?f:d),s&&s(t,e))},ref:e.ref,value:f}),o&&j(c,{htmlFor:n??r,children:o}),j(Z,{error:t.error})]})})}function Q(e){let t=k(26);if(t[0]!==`7501af4e40fae6de51379fcd69a5dbf630a70539ba636a47e077920376e26910`){for(let e=0;e<26;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`7501af4e40fae6de51379fcd69a5dbf630a70539ba636a47e077920376e26910`}let n,r,i,o,s,l,d,f,p,m;t[1]===e?(n=t[2],r=t[3],i=t[4],o=t[5],s=t[6],l=t[7],d=t[8],f=t[9],p=t[10],m=t[11]):({autoComplete:n,control:r,disabled:i,inputId:o,inputName:s,label:l,placeholder:d,readOnly:p,type:m,...f}=e,t[1]=e,t[2]=n,t[3]=r,t[4]=i,t[5]=o,t[6]=s,t[7]=l,t[8]=d,t[9]=f,t[10]=p,t[11]=m);let h;t[12]!==n||t[13]!==o||t[14]!==s||t[15]!==l||t[16]!==d||t[17]!==f||t[18]!==p||t[19]!==m?(h=e=>{let{field:t,fieldState:r}=e;return M(a,{"data-invalid":r.invalid,...f,children:[l&&j(c,{htmlFor:o??s,children:l}),j(u,{"aria-invalid":r.invalid,autoComplete:n,id:o??(l?s:void 0),placeholder:d,readOnly:p,type:m,...t}),j(Z,{error:r.error})]})},t[12]=n,t[13]=o,t[14]=s,t[15]=l,t[16]=d,t[17]=f,t[18]=p,t[19]=m,t[20]=h):h=t[20];let g;return t[21]!==r||t[22]!==i||t[23]!==s||t[24]!==h?(g=j(D,{control:r,disabled:i,name:s,render:h}),t[21]=r,t[22]=i,t[23]=s,t[24]=h,t[25]=g):g=t[25],g}function se({autoComplete:e=`on`,type:t=`email`,...n}){return j(Q,{autoComplete:e,type:t,...n})}function ce(e){let t=k(24);if(t[0]!==`f049c21be78fb6540f3470521dce48b055b196c1dc09159c5c6b5f5d2dcbc0b9`){for(let e=0;e<24;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`f049c21be78fb6540f3470521dce48b055b196c1dc09159c5c6b5f5d2dcbc0b9`}let n,r,i,a,s,u,d,f,p;t[1]===e?(n=t[2],r=t[3],i=t[4],a=t[5],s=t[6],u=t[7],d=t[8],f=t[9],p=t[10]):({control:n,defaultValue:r,description:i,disabled:a,groupId:s,inputName:u,label:d,options:f,...p}=e,t[1]=e,t[2]=n,t[3]=r,t[4]=i,t[5]=a,t[6]=s,t[7]=u,t[8]=d,t[9]=f,t[10]=p);let m;t[11]!==r||t[12]!==i||t[13]!==s||t[14]!==u||t[15]!==d||t[16]!==f||t[17]!==p?(m=e=>{let{field:t,fieldState:n}=e;return M(l,{"data-invalid":n.invalid,...p,children:[d&&j(c,{htmlFor:s??u,children:d}),i&&j(o,{children:i}),j(Z,{error:n.error}),j(g,{defaultValue:r,disabled:t.disabled,id:s??(d?u:void 0),name:t.name,onBlur:t.onBlur,onValueChange:t.onChange,ref:t.ref,children:f.map(le)})]})},t[11]=r,t[12]=i,t[13]=s,t[14]=u,t[15]=d,t[16]=f,t[17]=p,t[18]=m):m=t[18];let h;return t[19]!==n||t[20]!==a||t[21]!==u||t[22]!==m?(h=j(D,{control:n,disabled:a,name:u,render:m}),t[19]=n,t[20]=a,t[21]=u,t[22]=m,t[23]=h):h=t[23],h}function le(e){return j(h,{className:`rounded-md border ring-ring/50 transition-all hover:bg-accent/50 has-focus-visible:ring-[3px]`,"data-slot":`field-label`,children:M(`div`,{className:`flex w-full items-center gap-3 rounded-md p-3 transition-all has-aria-checked:border-l-8 has-aria-checked:border-ring`,children:[j(_,{className:`sr-only`,id:e.id,value:e.value}),e.Icon&&j(e.Icon,{}),e.label]})},e.key??e.id??e.value)}function ue({children:e,className:t,defaults:n={},rootError:r=`flash`,onBefore:i,onBeforeUpdate:a,onCancel:o,onCancelToken:s,onError:c,onFinish:l,onFlash:u,onPrefetched:d,onPrefetching:f,onProgress:p,onStart:m,onSuccess:h,preserveScroll:g=!0,resetOnSuccess:_=!0,route:v,schema:y,setDefaultsOnSuccess:b=!1}){let[x,S]=F(),C=Object.fromEntries(Object.keys(y.ruleset).map(e=>[e,n[e]??``])),w=O({defaultValues:C,resolver:N(y)}),T=I(C);function D(e){e.root&&(r===`flash`?ee({level:`error`,title:e.root}):r===`monitor`&&S({message:e.root})),c&&c(e)}function k(e){b&&(T.setDefaults(),w.reset(w.getValues())),_&&(T.reset(),w.reset()),h&&h(e)}function A(e){T.transform(()=>e),T[v.method](v.url,{onBefore:i,onBeforeUpdate:a,onCancel:o,onCancelToken:s,onError:D,onFinish:l,onFlash:u,onPrefetched:d,onPrefetching:f,onProgress:p,onStart:m,onSuccess:k,preserveScroll:g})}return P(()=>{for(let[e,t]of Object.entries(T.errors))t&&w.setError(e,{message:t,type:`inertia`})},[T.errors,w]),j(te,{i18n:Y,children:M(`form`,{action:v.url,className:E(`grid gap-6`,t),method:v.method,onSubmit:w.handleSubmit(A),children:[j(ne,{children:e({errors:T.errors,form:w,loading:T.processing})}),r===`monitor`&&j(Z,{error:x})]})})}function de({autoComplete:e=`off`,className:t,type:n=`hidden`,...r}){return j(Q,{autoComplete:e,className:E(`hidden`,t),type:n,...r})}function fe({children:e,className:t,control:n,disabled:r,inputId:o,inputName:s,label:c,onCheckedChange:l,orientation:u=`horizontal`,readOnly:d,text:f,uncheckedValue:p=``,value:m=`true`,...g}){return j(D,{control:n,disabled:r,name:s,render:({field:n,fieldState:r})=>j(a,{className:E(`block`,t),"data-invalid":r.invalid,orientation:u,...g,children:M(h,{className:`flex items-start gap-3 rounded-lg border p-3 hover:bg-accent/50 has-aria-checked:border-info-foreground has-aria-checked:bg-info`,"data-slot":`field-label`,children:[j(i,{"aria-invalid":r.invalid,"aria-readonly":d,checked:n.value===m,className:`aria-readonly:opacity-50 data-[state=checked]:border-info-foreground data-[state=checked]:bg-info-foreground data-[state=checked]:text-white dark:data-[state=checked]:border-info-foreground dark:data-[state=checked]:bg-info-foreground`,disabled:n.disabled,id:o,name:n.name,onBlur:n.onBlur,onCheckedChange:e=>{d||(n.onChange(e===!0?m:p),l&&l(e,n))},ref:n.ref,value:m}),M(`div`,{className:`grid gap-1.5 font-normal`,children:[j(`p`,{className:`text-sm leading-none font-medium`,children:c}),f?j(`p`,{className:`text-sm text-muted-foreground`,children:f}):e,j(Z,{error:r.error})]})]})})})}function pe(e){let t=k(29);if(t[0]!==`aef79d6bb8014bb7e50376596fc0ae9e5294086f70390531e20fce8a0095eeca`){for(let e=0;e<29;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`aef79d6bb8014bb7e50376596fc0ae9e5294086f70390531e20fce8a0095eeca`}let r,i,s,l,u,d,f,p,m,h,g;t[1]===e?(r=t[2],i=t[3],s=t[4],l=t[5],u=t[6],d=t[7],f=t[8],p=t[9],m=t[10],h=t[11],g=t[12]):({autoComplete:r,control:i,description:s,disabled:l,inputId:u,inputName:d,label:f,options:p,placeholder:m,setValue:g,...h}=e,t[1]=e,t[2]=r,t[3]=i,t[4]=s,t[5]=l,t[6]=u,t[7]=d,t[8]=f,t[9]=p,t[10]=m,t[11]=h,t[12]=g);let{t:_}=A(),b;t[13]!==r||t[14]!==s||t[15]!==u||t[16]!==d||t[17]!==f||t[18]!==p||t[19]!==m||t[20]!==h||t[21]!==g||t[22]!==_?(b=e=>{let{field:t,fieldState:i}=e;return M(a,{"data-invalid":i.invalid,...h,children:[f&&j(c,{htmlFor:u??d,children:f}),M(`div`,{className:`flex items-end gap-4`,children:[M(v,{autoComplete:r,disabled:t.disabled,name:t.name,onValueChange:t.onChange,value:t.value,children:[j(x,{"aria-invalid":i.invalid,className:`flex-1 overflow-hidden`,id:u??(f?d:void 0),children:j(S,{placeholder:m})}),j(y,{children:p.map(me)})]}),j(n,{"aria-label":_($),className:`flex-none`,onClick:()=>g(d,``),type:`button`,variant:`outline`,children:j(z,{})})]}),s&&j(o,{children:s}),j(Z,{error:i.error})]})},t[13]=r,t[14]=s,t[15]=u,t[16]=d,t[17]=f,t[18]=p,t[19]=m,t[20]=h,t[21]=g,t[22]=_,t[23]=b):b=t[23];let C;return t[24]!==i||t[25]!==l||t[26]!==d||t[27]!==b?(C=j(D,{control:i,disabled:l,name:d,render:b}),t[24]=i,t[25]=l,t[26]=d,t[27]=b,t[28]=C):C=t[28],C}function $(e){return e.reset}function me(e){return j(b,{id:e.id,value:e.value,children:e.label},e.key??e.id??e.value)}function he(e,t,n,r,i){let a=Number(e);return isNaN(a)?``:(t?a+=n===void 0?1:n:a-=n===void 0?1:n,r!==void 0&&(a=Math.max(a,r)),i!==void 0&&(a=Math.min(a,i)),a.toString())}function ge({autoComplete:e,control:t,disabled:n,inputId:r,inputMode:i=`numeric`,inputName:o,label:s,placeholder:l,type:u,ui:h,...g}){let{t:_}=A();function v(e,t){h?.setValue&&h.setValue(o,he(e,t,h.step,h.min,h.max),{shouldValidate:!0})}return j(D,{control:t,disabled:n,name:o,render:({field:t,fieldState:y})=>M(a,{"data-invalid":y.invalid,...g,children:[s&&j(c,{htmlFor:r??o,children:s}),M(d,{children:[j(m,{"aria-invalid":y.invalid,autoComplete:e,id:r??(s?o:void 0),inputMode:i,placeholder:l,type:u,...t}),h&&M(f,{align:`inline-end`,children:[j(p,{"aria-label":_(e=>e.decrease),disabled:n,onClick:()=>v(t.value,!1),size:`icon-xs`,children:j(L,{})}),j(p,{"aria-label":_(e=>e.increase),disabled:n,onClick:()=>v(t.value,!0),size:`icon-xs`,children:j(R,{})})]})]}),j(Z,{error:y.error})]})})}function _e({autoComplete:e=`off`,type:t=`password`,...n}){return j(Q,{autoComplete:e,type:t,...n})}function ve(e){let t=k(26);if(t[0]!==`17d768ca562ec97c16bcafe5b5f4a7680b17a9911e26839427dd0f20be4d3e30`){for(let e=0;e<26;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`17d768ca562ec97c16bcafe5b5f4a7680b17a9911e26839427dd0f20be4d3e30`}let n,r,i,s,l,u,d,f,p,m;t[1]===e?(n=t[2],r=t[3],i=t[4],s=t[5],l=t[6],u=t[7],d=t[8],f=t[9],p=t[10],m=t[11]):({autoComplete:n,control:r,description:i,disabled:s,inputId:l,inputName:u,label:d,options:f,placeholder:p,...m}=e,t[1]=e,t[2]=n,t[3]=r,t[4]=i,t[5]=s,t[6]=l,t[7]=u,t[8]=d,t[9]=f,t[10]=p,t[11]=m);let h;t[12]!==n||t[13]!==i||t[14]!==l||t[15]!==u||t[16]!==d||t[17]!==f||t[18]!==p||t[19]!==m?(h=e=>{let{field:t,fieldState:r}=e;return M(a,{"data-invalid":r.invalid,...m,children:[d&&j(c,{htmlFor:l??u,children:d}),M(v,{autoComplete:n,disabled:t.disabled,name:t.name,onValueChange:t.onChange,value:t.value,children:[j(x,{"aria-invalid":r.invalid,id:l??(d?u:void 0),children:j(S,{placeholder:p})}),j(y,{children:f.map(ye)})]}),i&&j(o,{children:i}),j(Z,{error:r.error})]})},t[12]=n,t[13]=i,t[14]=l,t[15]=u,t[16]=d,t[17]=f,t[18]=p,t[19]=m,t[20]=h):h=t[20];let g;return t[21]!==r||t[22]!==s||t[23]!==u||t[24]!==h?(g=j(D,{control:r,disabled:s,name:u,render:h}),t[21]=r,t[22]=s,t[23]=u,t[24]=h,t[25]=g):g=t[25],g}function ye(e){return j(b,{id:e.id,value:e.value,children:e.label},e.key??e.id??e.value)}function be({label:e,loading:t=!1,type:r=`submit`,...i}){let{t:a}=A();return j(n,{disabled:t,type:r,...i,children:M(`div`,{className:`relative`,children:[j(`span`,{className:E({invisible:t}),children:e??a(e=>e.submit)}),j(C,{className:E(`trans absolute top-1/2 left-1/2 hidden -translate-x-1/2 -translate-y-1/2`,{block:t})})]})})}function xe({control:e,disabled:t,inputId:n,inputName:r,label:i,onCheckedChange:o,orientation:s=`horizontal`,readOnly:l,uncheckedValue:u=``,value:d=`true`,...f}){return j(D,{control:e,disabled:t,name:r,render:({field:e,fieldState:t})=>M(a,{"data-invalid":t.invalid,orientation:s,...f,children:[j(w,{"aria-invalid":t.invalid,"aria-readonly":l,checked:e.value===d,className:`aria-readonly:opacity-50`,disabled:e.disabled,id:n??(i?r:void 0),name:e.name,onBlur:e.onBlur,onCheckedChange:t=>{l||(e.onChange(t===!0?d:u),o&&o(t,e))},ref:e.ref,value:d}),i&&j(c,{htmlFor:n??r,children:i}),j(Z,{error:t.error})]})})}function Se({autoComplete:e=`on`,type:t=`text`,...n}){return j(Q,{autoComplete:e,type:t,...n})}function Ce({cacheMeasurements:e,control:t,inputId:n,inputName:r,label:i,maxRows:o,minRows:s,onHeightChange:l,placeholder:u,resize:d=`none`,...f}){return j(D,{name:r,control:t,render:({field:t,fieldState:p})=>M(a,{"data-invalid":p.invalid,...f,children:[i&&j(c,{htmlFor:n??r,children:i}),j(T,{"aria-invalid":p.invalid,autoComplete:`off`,cacheMeasurements:e,className:E({resize:d===`both`,"resize-none":d===`none`,"resize-x":d===`x`,"resize-y":d===`y`}),id:n??(i?r:void 0),maxRows:o,minRows:s,onHeightChange:l,placeholder:u,...t}),j(Z,{error:p.error})]})})}export{ae as CalendarField,oe as CheckboxField,se as EmailField,Z as ErrorMonitor,ce as FancyRadioField,ue as Form,de as HiddenField,fe as InfoCheckboxField,B as InputCheckboxRule,V as InputColorRule,H as InputEmailRule,Q as InputField,U as InputNumberRule,W as InputRule,G as InputSelectRule,K as InputTextRule,q as Message,pe as NullableSelectField,ge as NumericField,_e as PasswordField,J as Schema,ve as SelectField,be as Submit,xe as SwitchField,Se as TextField,Ce as TextareaField,Y as i18n,re as useTsvResolver};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["error","label","autoComplete","placeholder","readOnly","type","control","disabled","inputName","label","description","defaultValue","control","disabled","inputName","label","autoComplete","placeholder","description","control","disabled","inputName","$","label","autoComplete","placeholder","description","control","disabled","inputName"],"sources":["../src/i18n.ts","../src/lib/utils.ts","../src/components/error-monitor.tsx","../src/components/calendar-field.tsx","../src/components/checkbox-field.tsx","../src/components/input-field.tsx","../src/components/email-field.tsx","../src/components/fancy-radio-field.tsx","../src/components/form.tsx","../src/components/hidden-field.tsx","../src/components/info-checkbox-field.tsx","../src/components/nullable-select-field.tsx","../src/components/numeric-field.tsx","../src/components/password-field.tsx","../src/components/select-field.tsx","../src/components/submit.tsx","../src/components/switch-field.tsx","../src/components/text-field.tsx","../src/components/textarea-field.tsx"],"sourcesContent":["import { type i18n as Ti18n, createInstance } from 'i18next'\nimport en from '@/locales/en'\n\nconst i18n: Ti18n = createInstance({\n fallbackLng: 'en',\n interpolation: { escapeValue: false },\n resources: { en }\n})\n\nvoid i18n.init()\n\nexport default i18n\n","/**\n * Convert a javascript `Date` object to a string with the format `aaaa-mm-dd`.\n */\nexport function dateToString(date: Date): string {\n return `${date.getFullYear()}-${(date.getMonth() + 1 + '').padStart(2, '0')}-${(date.getDate() + '').padStart(2, '0')}`\n}\n\n/**\n * Convert a string to a javascript `Date` object or undefined if the string is\n * not a valid date.\n */\nexport function stringToDate(string: string | undefined): Date | undefined {\n if (!string) {\n return undefined\n }\n\n const date = new Date(string)\n\n if (isNaN(date.getFullYear())) {\n return undefined\n }\n\n return date\n}\n","import type { ErrorData } from '@/types'\nimport { FieldError } from '@gmcode/react-ui'\nimport { useTranslation } from 'react-i18next'\n\nexport function ErrorMonitor({ error }: { error?: ErrorData }) {\n // i18n\n const { t } = useTranslation()\n\n if (!error?.message) {\n return null\n }\n\n if (t) {\n // @ts-expect-error: assert error.message to be a translation key\n return <FieldError errors={{ message: t(error.message, error.params) }} />\n }\n\n return <FieldError errors={error} />\n}\n","import { Calendar, Field, FieldLabel } from '@gmcode/react-ui'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { DayPickerLocale, Matcher } from 'react-day-picker'\nimport {\n dateToString as defaultDateToString,\n stringToDate as defaultStringToDate\n} from '@/lib/utils'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\n\nexport function CalendarField<TFieldValues extends FieldValues = FieldValues>({\n control,\n dateToString = defaultDateToString,\n disabled,\n inputId,\n inputName,\n label,\n locale,\n stringToDate = defaultStringToDate,\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n dateToString?: (date: Date) => string\n disabled?: Matcher | Matcher[]\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n locale?: Partial<DayPickerLocale>\n stringToDate?: (string: string | undefined) => Date | undefined\n}) {\n return (\n <Controller\n name={inputName}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <Calendar\n aria-invalid={fieldState.invalid}\n className=\"w-full rounded-md border\"\n disabled={disabled}\n fixedWeeks={true}\n id={inputId ?? (label ? inputName : undefined)}\n locale={locale}\n mode=\"single\"\n onSelect={(date) => field.onChange(date ? dateToString(date) : '')}\n selected={stringToDate(field.value)}\n />\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import { Checkbox, Field, FieldLabel } from '@gmcode/react-ui'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { ControllerRenderProps, FieldValues } from 'react-hook-form'\nimport type { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\n\nexport function CheckboxField<TFieldValues extends FieldValues = FieldValues>({\n control,\n disabled,\n inputId,\n inputName,\n label,\n onCheckedChange,\n orientation = 'horizontal',\n readOnly,\n uncheckedValue = '',\n value = 'true',\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n onCheckedChange?: (\n checked: CheckboxPrimitive.CheckedState,\n field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>\n ) => void\n readOnly?: boolean\n uncheckedValue?: string\n value?: string\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n orientation={orientation}\n {...props}\n >\n <Checkbox\n aria-invalid={fieldState.invalid}\n aria-readonly={readOnly}\n checked={field.value === value}\n className=\"aria-readonly:opacity-50\"\n disabled={field.disabled}\n id={inputId ?? (label ? inputName : undefined)}\n name={field.name}\n onBlur={field.onBlur}\n onCheckedChange={(checked) => {\n if (!readOnly) {\n field.onChange(checked === true ? value : uncheckedValue)\n if (onCheckedChange) onCheckedChange(checked, field)\n }\n }}\n ref={field.ref}\n value={value}\n />\n\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport { Field, FieldLabel, Input } from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\n\nexport function InputField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete,\n control,\n disabled,\n inputId,\n inputName,\n label,\n placeholder,\n readOnly,\n type,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n placeholder?: string\n readOnly?: boolean\n type?: HTMLInputTypeAttribute\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <Input\n aria-invalid={fieldState.invalid}\n autoComplete={autoComplete}\n id={inputId ?? (label ? inputName : undefined)}\n placeholder={placeholder}\n readOnly={readOnly}\n type={type}\n {...field}\n />\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\n\nexport function EmailField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'on',\n type = 'email',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n type={type}\n {...props}\n />\n )\n}\n","import type { ComponentProps, FC, SVGProps } from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport {\n FieldDescription,\n FieldLabel,\n FieldSet,\n Label,\n RadioGroup,\n RadioGroupItem\n} from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\nimport type { Option } from '@/types'\n\nexport function FancyRadioField<\n TFieldValues extends FieldValues = FieldValues\n>({\n control,\n defaultValue,\n description,\n disabled,\n groupId,\n inputName,\n label,\n options,\n ...props\n}: ComponentProps<typeof FieldSet> & {\n control: Control<TFieldValues>\n defaultValue: string\n description?: string\n disabled?: boolean\n groupId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n options: Array<Option & { Icon?: FC<SVGProps<SVGSVGElement>> }>\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <FieldSet\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={groupId ?? inputName}>{label}</FieldLabel>\n )}\n\n {description && <FieldDescription>{description}</FieldDescription>}\n\n <ErrorMonitor error={fieldState.error} />\n\n <RadioGroup\n defaultValue={defaultValue}\n disabled={field.disabled}\n id={groupId ?? (label ? inputName : undefined)}\n name={field.name}\n onBlur={field.onBlur}\n onValueChange={field.onChange}\n ref={field.ref}\n >\n {options.map((option) => (\n <Label\n className=\"rounded-md border ring-ring/50 transition-all hover:bg-accent/50 has-focus-visible:ring-[3px]\"\n data-slot=\"field-label\"\n key={option.key ?? option.id ?? option.value}\n >\n <div className=\"flex w-full items-center gap-3 rounded-md p-3 transition-all has-aria-checked:border-l-8 has-aria-checked:border-ring\">\n <RadioGroupItem\n className=\"sr-only\"\n id={option.id}\n value={option.value}\n />\n {option.Icon && <option.Icon />}\n {option.label}\n </div>\n </Label>\n ))}\n </RadioGroup>\n </FieldSet>\n )}\n />\n )\n}\n","import type {\n CancelTokenCallback,\n Errors,\n FormDataErrors,\n GlobalEventCallback,\n Page,\n RequestPayload,\n SharedPageProps\n} from '@inertiajs/core'\nimport type {\n DefaultValues,\n FieldValues,\n Path,\n UseFormReturn\n} from 'react-hook-form'\nimport type { ErrorData, Method, RouteDefinition } from '@/types'\nimport { type InferSchema, useTsvResolver } from '@gmcode/tsv-hookform'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { cn, flash } from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport { I18nextProvider } from 'react-i18next'\nimport type { Ruleset } from '@gmcode/tsv-input'\nimport type { Schema } from '@/index'\nimport i18n from '@/i18n'\nimport { useForm as useInertiaForm } from '@inertiajs/react'\nimport { useForm as userReactForm } from 'react-hook-form'\n\ntype RenderFN<TValues extends FieldValues> = ({\n errors,\n form,\n loading\n}: {\n errors: FormDataErrors<object>\n form: UseFormReturn<TValues>\n loading: boolean\n}) => ReactNode\n\nexport function Form<\n TRuleset extends Ruleset,\n TSchema extends Schema<TRuleset>,\n TValues extends InferSchema<TSchema>\n>({\n children,\n className,\n defaults = {},\n rootError: displayRootError = 'flash',\n onBefore,\n onBeforeUpdate,\n onCancel,\n onCancelToken,\n onError,\n onFinish,\n onFlash,\n onPrefetched,\n onPrefetching,\n onProgress,\n onStart,\n onSuccess,\n preserveScroll = true,\n resetOnSuccess = true,\n route,\n schema,\n setDefaultsOnSuccess = false\n}: {\n children: RenderFN<TValues>\n className?: string\n defaults?: Partial<DefaultValues<TValues>>\n /**\n * How to display the root error from inertia.\n *\n * - `flash` - use the Toaster component\n * - `monitor` - use the ErrorMonitor component\n * - `none` - don't display the root error\n *\n * @defaultValue `flash`\n */\n rootError?: 'flash' | 'monitor' | 'none'\n onBefore?: GlobalEventCallback<'before', RequestPayload>\n onBeforeUpdate?: GlobalEventCallback<'beforeUpdate', RequestPayload>\n onCancel?: GlobalEventCallback<'cancel', RequestPayload>\n onCancelToken?: CancelTokenCallback\n onError?: GlobalEventCallback<'error', RequestPayload>\n onFinish?: GlobalEventCallback<'finish', RequestPayload>\n onFlash?: GlobalEventCallback<'flash', RequestPayload>\n onPrefetched?: GlobalEventCallback<'prefetched', RequestPayload>\n onPrefetching?: GlobalEventCallback<'prefetching', RequestPayload>\n onProgress?: GlobalEventCallback<'progress', RequestPayload>\n onStart?: GlobalEventCallback<'start', RequestPayload>\n onSuccess?: GlobalEventCallback<'success', RequestPayload>\n preserveScroll?: boolean\n resetOnSuccess?: boolean\n route: RouteDefinition<Method>\n schema: Schema<TRuleset>\n setDefaultsOnSuccess?: boolean\n}) {\n const [rootError, setRootError] = useState<ErrorData>()\n\n const defaultValues = Object.fromEntries(\n Object.keys(schema.ruleset).map((field) => [field, defaults[field] ?? ''])\n ) as DefaultValues<TValues>\n\n // React Hook Form\n const reactForm = userReactForm<TValues>({\n defaultValues,\n resolver: useTsvResolver(schema)\n })\n\n // Inertia\n const inertiaForm = useInertiaForm<object>(defaultValues)\n\n function onErrorWithToast(errors: Errors) {\n if (errors.root) {\n if (displayRootError === 'flash') {\n flash({ level: 'error', title: errors.root })\n } else if (displayRootError === 'monitor') {\n setRootError({ message: errors.root })\n }\n }\n\n if (onError) {\n onError(errors)\n }\n }\n\n function onSuccessWithReset(page: Page<SharedPageProps>) {\n if (setDefaultsOnSuccess) {\n inertiaForm.setDefaults()\n reactForm.reset(reactForm.getValues())\n }\n\n if (resetOnSuccess) {\n inertiaForm.reset()\n reactForm.reset()\n }\n\n if (onSuccess) {\n onSuccess(page)\n }\n }\n\n // Submit handler\n function onSubmit(values: TValues) {\n inertiaForm.transform(() => values)\n inertiaForm[route.method](route.url, {\n onBefore,\n onBeforeUpdate,\n onCancel,\n onCancelToken,\n onError: onErrorWithToast,\n onFinish,\n onFlash,\n onPrefetched,\n onPrefetching,\n onProgress,\n onStart,\n onSuccess: onSuccessWithReset,\n preserveScroll\n })\n }\n\n // Add inertia (server) errors to react form.\n useEffect(() => {\n for (const [key, error] of Object.entries(inertiaForm.errors)) {\n if (error) {\n reactForm.setError(key as Path<TValues>, {\n message: error as string,\n type: 'inertia'\n })\n }\n }\n }, [inertiaForm.errors, reactForm])\n\n return (\n <I18nextProvider i18n={i18n}>\n <form\n action={route.url}\n className={cn('grid gap-6', className)}\n method={route.method}\n onSubmit={reactForm.handleSubmit(onSubmit)}\n >\n <>\n {children({\n errors: inertiaForm.errors,\n form: reactForm,\n loading: inertiaForm.processing\n })}\n </>\n\n {displayRootError === 'monitor' && <ErrorMonitor error={rootError} />}\n </form>\n </I18nextProvider>\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\nimport { cn } from '@gmcode/react-ui'\n\nexport function HiddenField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'off',\n className,\n type = 'hidden',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n className={cn('hidden', className)}\n type={type}\n {...props}\n />\n )\n}\n","import { Checkbox, Field, Label, cn } from '@gmcode/react-ui'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { ControllerRenderProps, FieldValues } from 'react-hook-form'\nimport type { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\n\nexport function InfoCheckboxField<\n TFieldValues extends FieldValues = FieldValues\n>({\n children,\n className,\n control,\n disabled,\n inputId,\n inputName,\n label,\n onCheckedChange,\n orientation = 'horizontal',\n readOnly,\n text,\n uncheckedValue = '',\n value = 'true',\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n onCheckedChange?: (\n checked: CheckboxPrimitive.CheckedState,\n field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>\n ) => void\n readOnly?: boolean\n text?: string\n uncheckedValue?: string\n value?: string\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n className={cn('block', className)}\n data-invalid={fieldState.invalid}\n orientation={orientation}\n {...props}\n >\n <Label\n className=\"flex items-start gap-3 rounded-lg border p-3 hover:bg-accent/50 has-aria-checked:border-info-foreground has-aria-checked:bg-info\"\n data-slot=\"field-label\"\n >\n <Checkbox\n aria-invalid={fieldState.invalid}\n aria-readonly={readOnly}\n checked={field.value === value}\n className=\"aria-readonly:opacity-50 data-[state=checked]:border-info-foreground data-[state=checked]:bg-info-foreground data-[state=checked]:text-white dark:data-[state=checked]:border-info-foreground dark:data-[state=checked]:bg-info-foreground\"\n disabled={field.disabled}\n id={inputId}\n name={field.name}\n onBlur={field.onBlur}\n onCheckedChange={(checked) => {\n if (!readOnly) {\n field.onChange(checked === true ? value : uncheckedValue)\n if (onCheckedChange) onCheckedChange(checked, field)\n }\n }}\n ref={field.ref}\n value={value}\n />\n\n <div className=\"grid gap-1.5 font-normal\">\n <p className=\"text-sm leading-none font-medium\">{label}</p>\n {text ? (\n <p className=\"text-sm text-muted-foreground\">{text}</p>\n ) : (\n children\n )}\n <ErrorMonitor error={fieldState.error} />\n </div>\n </Label>\n </Field>\n )}\n />\n )\n}\n","import {\n Button,\n Field,\n FieldDescription,\n FieldLabel,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from '@gmcode/react-ui'\nimport type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type {\n FieldPathValue,\n FieldValues,\n UseFormSetValue\n} from 'react-hook-form'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { Option } from '@/types'\nimport { X } from 'lucide-react'\nimport { useTranslation } from 'react-i18next'\n\nexport function NullableSelectField<\n TFieldValues extends FieldValues = FieldValues\n>({\n autoComplete,\n control,\n description,\n disabled,\n inputId,\n inputName,\n label,\n options,\n placeholder,\n setValue,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n description?: string\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n options: Option[]\n placeholder?: string\n setValue: UseFormSetValue<TFieldValues>\n type?: HTMLInputTypeAttribute\n}) {\n // i18n\n const { t } = useTranslation()\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <div className=\"flex items-end gap-4\">\n <Select\n autoComplete={autoComplete}\n disabled={field.disabled}\n name={field.name}\n onValueChange={field.onChange}\n value={field.value}\n >\n <SelectTrigger\n aria-invalid={fieldState.invalid}\n className=\"flex-1 overflow-hidden\"\n id={inputId ?? (label ? inputName : undefined)}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n id={option.id}\n key={option.key ?? option.id ?? option.value}\n value={option.value}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Button\n aria-label={t(($) => $.reset)}\n className=\"flex-none\"\n onClick={() =>\n setValue(\n inputName,\n '' as FieldPathValue<TFieldValues, FieldPath<TFieldValues>>\n )\n }\n type=\"button\"\n variant=\"outline\"\n >\n <X />\n </Button>\n </div>\n\n {description && <FieldDescription>{description}</FieldDescription>}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport {\n Field,\n FieldLabel,\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput\n} from '@gmcode/react-ui'\nimport type {\n FieldPathValue,\n FieldValues,\n UseFormSetValue\n} from 'react-hook-form'\nimport { Minus, Plus } from 'lucide-react'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport { useTranslation } from 'react-i18next'\n\nfunction stepInput(\n original: string,\n add: boolean,\n step?: number,\n min?: number,\n max?: number\n) {\n let parsed = Number(original)\n\n if (isNaN(parsed)) {\n return ''\n }\n\n if (add) {\n parsed += step === undefined ? 1 : step\n } else {\n parsed -= step === undefined ? 1 : step\n }\n\n if (min !== undefined) {\n parsed = Math.max(parsed, min)\n }\n\n if (max !== undefined) {\n parsed = Math.min(parsed, max)\n }\n\n return parsed.toString()\n}\n\nexport function NumericField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete,\n control,\n disabled,\n inputId,\n inputMode = 'numeric',\n inputName,\n label,\n placeholder,\n type,\n ui,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputMode?: 'decimal' | 'numeric'\n inputName: FieldPath<TFieldValues>\n label?: string\n placeholder?: string\n type?: HTMLInputTypeAttribute\n ui?: {\n max?: number\n min?: number\n setValue: UseFormSetValue<TFieldValues>\n step?: number\n }\n}) {\n // i18n\n const { t } = useTranslation()\n\n function stepValue(value: string, add: boolean) {\n if (ui?.setValue) {\n ui.setValue(\n inputName,\n stepInput(value, add, ui.step, ui.min, ui.max) as FieldPathValue<\n TFieldValues,\n FieldPath<TFieldValues>\n >,\n { shouldValidate: true }\n )\n }\n }\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <InputGroup>\n <InputGroupInput\n aria-invalid={fieldState.invalid}\n autoComplete={autoComplete}\n id={inputId ?? (label ? inputName : undefined)}\n inputMode={inputMode}\n placeholder={placeholder}\n type={type}\n {...field}\n />\n\n {ui && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n aria-label={t(($) => $.decrease)}\n disabled={disabled}\n onClick={() => stepValue(field.value, false)}\n size=\"icon-xs\"\n >\n <Minus />\n </InputGroupButton>\n\n <InputGroupButton\n aria-label={t(($) => $.increase)}\n disabled={disabled}\n onClick={() => stepValue(field.value, true)}\n size=\"icon-xs\"\n >\n <Plus />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\n\nexport function PasswordField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'off',\n type = 'password',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n type={type}\n {...props}\n />\n )\n}\n","import type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport {\n Field,\n FieldDescription,\n FieldLabel,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\nimport type { Option } from '@/types'\n\nexport function SelectField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete,\n control,\n description,\n disabled,\n inputId,\n inputName,\n label,\n options,\n placeholder,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n description?: string\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n options: Option[]\n placeholder?: string\n type?: HTMLInputTypeAttribute\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <Select\n autoComplete={autoComplete}\n disabled={field.disabled}\n name={field.name}\n onValueChange={field.onChange}\n value={field.value}\n >\n <SelectTrigger\n aria-invalid={fieldState.invalid}\n id={inputId ?? (label ? inputName : undefined)}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n id={option.id}\n key={option.key ?? option.id ?? option.value}\n value={option.value}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {description && <FieldDescription>{description}</FieldDescription>}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import { Button, Spinner, cn } from '@gmcode/react-ui'\nimport type { ComponentProps } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nexport function Submit({\n label,\n loading = false,\n type = 'submit',\n ...props\n}: ComponentProps<typeof Button> & {\n label?: string\n loading?: boolean\n}) {\n // i18n\n const { t } = useTranslation()\n\n return (\n <Button\n disabled={loading}\n type={type}\n {...props}\n >\n <div className=\"relative\">\n <span className={cn({ invisible: loading })}>\n {label ?? t(($) => $.submit)}\n </span>\n <Spinner\n className={cn(\n 'trans absolute top-1/2 left-1/2 hidden -translate-x-1/2 -translate-y-1/2',\n { block: loading }\n )}\n />\n </div>\n </Button>\n )\n}\n","import { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { ControllerRenderProps, FieldValues } from 'react-hook-form'\nimport { Field, FieldLabel, Switch } from '@gmcode/react-ui'\nimport type { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\n\nexport function SwitchField<TFieldValues extends FieldValues = FieldValues>({\n control,\n disabled,\n inputId,\n inputName,\n label,\n onCheckedChange,\n orientation = 'horizontal',\n readOnly,\n uncheckedValue = '',\n value = 'true',\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n onCheckedChange?: (\n checked: CheckboxPrimitive.CheckedState,\n field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>\n ) => void\n readOnly?: boolean\n uncheckedValue?: string\n value?: string\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n orientation={orientation}\n {...props}\n >\n <Switch\n aria-invalid={fieldState.invalid}\n aria-readonly={readOnly}\n checked={field.value === value}\n className=\"aria-readonly:opacity-50\"\n disabled={field.disabled}\n id={inputId ?? (label ? inputName : undefined)}\n name={field.name}\n onBlur={field.onBlur}\n onCheckedChange={(checked) => {\n if (!readOnly) {\n field.onChange(checked === true ? value : uncheckedValue)\n if (onCheckedChange) onCheckedChange(checked, field)\n }\n }}\n ref={field.ref}\n value={value}\n />\n\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\n\nexport function TextField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'on',\n type = 'text',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n type={type}\n {...props}\n />\n )\n}\n","import { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport { Field, FieldLabel, TextareaAutosize, cn } from '@gmcode/react-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\nimport type { TextareaHeightChangeMeta } from 'react-textarea-autosize'\n\nexport function TextareaField<TFieldValues extends FieldValues = FieldValues>({\n cacheMeasurements,\n control,\n inputId,\n inputName,\n label,\n maxRows,\n minRows,\n onHeightChange,\n placeholder,\n resize = 'none',\n ...props\n}: ComponentProps<typeof Field> & {\n cacheMeasurements?: boolean\n control: Control<TFieldValues>\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n maxRows?: number\n minRows?: number\n onHeightChange?: (height: number, meta: TextareaHeightChangeMeta) => void\n placeholder?: string\n resize?: 'both' | 'none' | 'x' | 'y'\n}) {\n return (\n <Controller\n name={inputName}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <TextareaAutosize\n aria-invalid={fieldState.invalid}\n autoComplete=\"off\"\n cacheMeasurements={cacheMeasurements}\n className={cn({\n resize: resize === 'both',\n 'resize-none': resize === 'none',\n 'resize-x': resize === 'x',\n 'resize-y': resize === 'y'\n })}\n id={inputId ?? (label ? inputName : undefined)}\n maxRows={maxRows}\n minRows={minRows}\n onHeightChange={onHeightChange}\n placeholder={placeholder}\n {...field}\n />\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["error","label","autoComplete","placeholder","readOnly","type","control","disabled","inputName","label","description","defaultValue","control","disabled","inputName","label","autoComplete","placeholder","description","control","disabled","inputName","$","label","autoComplete","placeholder","description","control","disabled","inputName"],"sources":["../src/i18n.ts","../src/lib/utils.ts","../src/components/error-monitor.tsx","../src/components/calendar-field.tsx","../src/components/checkbox-field.tsx","../src/components/input-field.tsx","../src/components/email-field.tsx","../src/components/fancy-radio-field.tsx","../src/components/form.tsx","../src/components/hidden-field.tsx","../src/components/info-checkbox-field.tsx","../src/components/nullable-select-field.tsx","../src/components/numeric-field.tsx","../src/components/password-field.tsx","../src/components/select-field.tsx","../src/components/submit.tsx","../src/components/switch-field.tsx","../src/components/text-field.tsx","../src/components/textarea-field.tsx"],"sourcesContent":["import { type i18n as Ti18n, createInstance } from 'i18next'\nimport en from '@/locales/en'\n\nconst i18n: Ti18n = createInstance({\n fallbackLng: 'en',\n interpolation: { escapeValue: false },\n resources: { en }\n})\n\nvoid i18n.init()\n\nexport default i18n\n","/**\n * Convert a javascript `Date` object to a string with the format `aaaa-mm-dd`.\n */\nexport function dateToString(date: Date): string {\n return `${date.getFullYear()}-${(date.getMonth() + 1 + '').padStart(2, '0')}-${(date.getDate() + '').padStart(2, '0')}`\n}\n\n/**\n * Convert a string to a javascript `Date` object or undefined if the string is\n * not a valid date.\n */\nexport function stringToDate(string: string | undefined): Date | undefined {\n if (!string) {\n return undefined\n }\n\n const date = new Date(string)\n\n if (isNaN(date.getFullYear())) {\n return undefined\n }\n\n return date\n}\n","import type { ErrorData } from '@/types'\nimport { FieldError } from '@gmcode/react-ui'\nimport { useTranslation } from 'react-i18next'\n\nexport function ErrorMonitor({ error }: { error?: ErrorData }) {\n // i18n\n const { t } = useTranslation()\n\n if (!error?.message) {\n return null\n }\n\n if (t.name === 'notReadyT') {\n return <FieldError errors={error} />\n }\n\n // @ts-expect-error: assert error.message to be a translation key\n return <FieldError errors={{ message: t(error.message, error.params) }} />\n}\n","import { Calendar, Field, FieldLabel } from '@gmcode/react-ui'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { DayPickerLocale, Matcher } from 'react-day-picker'\nimport {\n dateToString as defaultDateToString,\n stringToDate as defaultStringToDate\n} from '@/lib/utils'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\n\nexport function CalendarField<TFieldValues extends FieldValues = FieldValues>({\n control,\n dateToString = defaultDateToString,\n disabled,\n inputId,\n inputName,\n label,\n locale,\n stringToDate = defaultStringToDate,\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n dateToString?: (date: Date) => string\n disabled?: Matcher | Matcher[]\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n locale?: Partial<DayPickerLocale>\n stringToDate?: (string: string | undefined) => Date | undefined\n}) {\n return (\n <Controller\n name={inputName}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <Calendar\n aria-invalid={fieldState.invalid}\n className=\"w-full rounded-md border\"\n disabled={disabled}\n fixedWeeks={true}\n id={inputId ?? (label ? inputName : undefined)}\n locale={locale}\n mode=\"single\"\n onSelect={(date) => field.onChange(date ? dateToString(date) : '')}\n selected={stringToDate(field.value)}\n />\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import { Checkbox, Field, FieldLabel } from '@gmcode/react-ui'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { ControllerRenderProps, FieldValues } from 'react-hook-form'\nimport type { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\n\nexport function CheckboxField<TFieldValues extends FieldValues = FieldValues>({\n control,\n disabled,\n inputId,\n inputName,\n label,\n onCheckedChange,\n orientation = 'horizontal',\n readOnly,\n uncheckedValue = '',\n value = 'true',\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n onCheckedChange?: (\n checked: CheckboxPrimitive.CheckedState,\n field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>\n ) => void\n readOnly?: boolean\n uncheckedValue?: string\n value?: string\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n orientation={orientation}\n {...props}\n >\n <Checkbox\n aria-invalid={fieldState.invalid}\n aria-readonly={readOnly}\n checked={field.value === value}\n className=\"aria-readonly:opacity-50\"\n disabled={field.disabled}\n id={inputId ?? (label ? inputName : undefined)}\n name={field.name}\n onBlur={field.onBlur}\n onCheckedChange={(checked) => {\n if (!readOnly) {\n field.onChange(checked === true ? value : uncheckedValue)\n if (onCheckedChange) onCheckedChange(checked, field)\n }\n }}\n ref={field.ref}\n value={value}\n />\n\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport { Field, FieldLabel, Input } from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\n\nexport function InputField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete,\n control,\n disabled,\n inputId,\n inputName,\n label,\n placeholder,\n readOnly,\n type,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n placeholder?: string\n readOnly?: boolean\n type?: HTMLInputTypeAttribute\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <Input\n aria-invalid={fieldState.invalid}\n autoComplete={autoComplete}\n id={inputId ?? (label ? inputName : undefined)}\n placeholder={placeholder}\n readOnly={readOnly}\n type={type}\n {...field}\n />\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\n\nexport function EmailField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'on',\n type = 'email',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n type={type}\n {...props}\n />\n )\n}\n","import type { ComponentProps, FC, SVGProps } from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport {\n FieldDescription,\n FieldLabel,\n FieldSet,\n Label,\n RadioGroup,\n RadioGroupItem\n} from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\nimport type { Option } from '@/types'\n\nexport function FancyRadioField<\n TFieldValues extends FieldValues = FieldValues\n>({\n control,\n defaultValue,\n description,\n disabled,\n groupId,\n inputName,\n label,\n options,\n ...props\n}: ComponentProps<typeof FieldSet> & {\n control: Control<TFieldValues>\n defaultValue: string\n description?: string\n disabled?: boolean\n groupId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n options: Array<Option & { Icon?: FC<SVGProps<SVGSVGElement>> }>\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <FieldSet\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={groupId ?? inputName}>{label}</FieldLabel>\n )}\n\n {description && <FieldDescription>{description}</FieldDescription>}\n\n <ErrorMonitor error={fieldState.error} />\n\n <RadioGroup\n defaultValue={defaultValue}\n disabled={field.disabled}\n id={groupId ?? (label ? inputName : undefined)}\n name={field.name}\n onBlur={field.onBlur}\n onValueChange={field.onChange}\n ref={field.ref}\n >\n {options.map((option) => (\n <Label\n className=\"rounded-md border ring-ring/50 transition-all hover:bg-accent/50 has-focus-visible:ring-[3px]\"\n data-slot=\"field-label\"\n key={option.key ?? option.id ?? option.value}\n >\n <div className=\"flex w-full items-center gap-3 rounded-md p-3 transition-all has-aria-checked:border-l-8 has-aria-checked:border-ring\">\n <RadioGroupItem\n className=\"sr-only\"\n id={option.id}\n value={option.value}\n />\n {option.Icon && <option.Icon />}\n {option.label}\n </div>\n </Label>\n ))}\n </RadioGroup>\n </FieldSet>\n )}\n />\n )\n}\n","import type {\n CancelTokenCallback,\n Errors,\n FormDataErrors,\n GlobalEventCallback,\n Page,\n RequestPayload,\n SharedPageProps\n} from '@inertiajs/core'\nimport type {\n DefaultValues,\n FieldValues,\n Path,\n UseFormReturn\n} from 'react-hook-form'\nimport type { ErrorData, Method, RouteDefinition } from '@/types'\nimport { type InferSchema, useTsvResolver } from '@gmcode/tsv-hookform'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { cn, flash } from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport { I18nextProvider } from 'react-i18next'\nimport type { Ruleset } from '@gmcode/tsv-input'\nimport type { Schema } from '@/index'\nimport i18n from '@/i18n'\nimport { useForm as useInertiaForm } from '@inertiajs/react'\nimport { useForm as userReactForm } from 'react-hook-form'\n\ntype RenderFN<TValues extends FieldValues> = ({\n errors,\n form,\n loading\n}: {\n errors: FormDataErrors<object>\n form: UseFormReturn<TValues>\n loading: boolean\n}) => ReactNode\n\nexport function Form<\n TRuleset extends Ruleset,\n TSchema extends Schema<TRuleset>,\n TValues extends InferSchema<TSchema>\n>({\n children,\n className,\n defaults = {},\n rootError: displayRootError = 'flash',\n onBefore,\n onBeforeUpdate,\n onCancel,\n onCancelToken,\n onError,\n onFinish,\n onFlash,\n onPrefetched,\n onPrefetching,\n onProgress,\n onStart,\n onSuccess,\n preserveScroll = true,\n resetOnSuccess = true,\n route,\n schema,\n setDefaultsOnSuccess = false\n}: {\n children: RenderFN<TValues>\n className?: string\n defaults?: Partial<DefaultValues<TValues>>\n /**\n * How to display the root error from inertia.\n *\n * - `\"flash\"` - use the Toaster component\n * - `\"monitor\"` - use the ErrorMonitor component\n * - `\"none\"` - don't display the root error\n *\n * @defaultValue `\"flash\"`\n */\n rootError?: 'flash' | 'monitor' | 'none'\n onBefore?: GlobalEventCallback<'before', RequestPayload>\n onBeforeUpdate?: GlobalEventCallback<'beforeUpdate', RequestPayload>\n onCancel?: GlobalEventCallback<'cancel', RequestPayload>\n onCancelToken?: CancelTokenCallback\n onError?: GlobalEventCallback<'error', RequestPayload>\n onFinish?: GlobalEventCallback<'finish', RequestPayload>\n onFlash?: GlobalEventCallback<'flash', RequestPayload>\n onPrefetched?: GlobalEventCallback<'prefetched', RequestPayload>\n onPrefetching?: GlobalEventCallback<'prefetching', RequestPayload>\n onProgress?: GlobalEventCallback<'progress', RequestPayload>\n onStart?: GlobalEventCallback<'start', RequestPayload>\n onSuccess?: GlobalEventCallback<'success', RequestPayload>\n preserveScroll?: boolean\n /**\n * Reset input values to their defaults on success.\n *\n * @defaultValue `true`\n */\n resetOnSuccess?: boolean\n route: RouteDefinition<Method>\n schema: Schema<TRuleset>\n /**\n * Set the submitted values as default values on success.\n *\n * @defaultValue `false`\n */\n setDefaultsOnSuccess?: boolean\n}) {\n const [rootError, setRootError] = useState<ErrorData>()\n\n const defaultValues = Object.fromEntries(\n Object.keys(schema.ruleset).map((field) => [field, defaults[field] ?? ''])\n ) as DefaultValues<TValues>\n\n // React Hook Form\n const reactForm = userReactForm<TValues>({\n defaultValues,\n resolver: useTsvResolver(schema)\n })\n\n // Inertia\n const inertiaForm = useInertiaForm<object>(defaultValues)\n\n function onErrorWithToast(errors: Errors) {\n if (errors.root) {\n if (displayRootError === 'flash') {\n flash({ level: 'error', title: errors.root })\n } else if (displayRootError === 'monitor') {\n setRootError({ message: errors.root })\n }\n }\n\n if (onError) {\n onError(errors)\n }\n }\n\n function onSuccessWithReset(page: Page<SharedPageProps>) {\n if (setDefaultsOnSuccess) {\n inertiaForm.setDefaults()\n reactForm.reset(reactForm.getValues())\n }\n\n if (resetOnSuccess) {\n inertiaForm.reset()\n reactForm.reset()\n }\n\n if (onSuccess) {\n onSuccess(page)\n }\n }\n\n // Submit handler\n function onSubmit(values: TValues) {\n inertiaForm.transform(() => values)\n inertiaForm[route.method](route.url, {\n onBefore,\n onBeforeUpdate,\n onCancel,\n onCancelToken,\n onError: onErrorWithToast,\n onFinish,\n onFlash,\n onPrefetched,\n onPrefetching,\n onProgress,\n onStart,\n onSuccess: onSuccessWithReset,\n preserveScroll\n })\n }\n\n // Add inertia (server) errors to react form.\n useEffect(() => {\n for (const [key, error] of Object.entries(inertiaForm.errors)) {\n if (error) {\n reactForm.setError(key as Path<TValues>, {\n message: error as string,\n type: 'inertia'\n })\n }\n }\n }, [inertiaForm.errors, reactForm])\n\n return (\n <I18nextProvider i18n={i18n}>\n <form\n action={route.url}\n className={cn('grid gap-6', className)}\n method={route.method}\n onSubmit={reactForm.handleSubmit(onSubmit)}\n >\n <>\n {children({\n errors: inertiaForm.errors,\n form: reactForm,\n loading: inertiaForm.processing\n })}\n </>\n\n {displayRootError === 'monitor' && <ErrorMonitor error={rootError} />}\n </form>\n </I18nextProvider>\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\nimport { cn } from '@gmcode/react-ui'\n\nexport function HiddenField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'off',\n className,\n type = 'hidden',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n className={cn('hidden', className)}\n type={type}\n {...props}\n />\n )\n}\n","import { Checkbox, Field, Label, cn } from '@gmcode/react-ui'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { ControllerRenderProps, FieldValues } from 'react-hook-form'\nimport type { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\n\nexport function InfoCheckboxField<\n TFieldValues extends FieldValues = FieldValues\n>({\n children,\n className,\n control,\n disabled,\n inputId,\n inputName,\n label,\n onCheckedChange,\n orientation = 'horizontal',\n readOnly,\n text,\n uncheckedValue = '',\n value = 'true',\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n onCheckedChange?: (\n checked: CheckboxPrimitive.CheckedState,\n field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>\n ) => void\n readOnly?: boolean\n text?: string\n uncheckedValue?: string\n value?: string\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n className={cn('block', className)}\n data-invalid={fieldState.invalid}\n orientation={orientation}\n {...props}\n >\n <Label\n className=\"flex items-start gap-3 rounded-lg border p-3 hover:bg-accent/50 has-aria-checked:border-info-foreground has-aria-checked:bg-info\"\n data-slot=\"field-label\"\n >\n <Checkbox\n aria-invalid={fieldState.invalid}\n aria-readonly={readOnly}\n checked={field.value === value}\n className=\"aria-readonly:opacity-50 data-[state=checked]:border-info-foreground data-[state=checked]:bg-info-foreground data-[state=checked]:text-white dark:data-[state=checked]:border-info-foreground dark:data-[state=checked]:bg-info-foreground\"\n disabled={field.disabled}\n id={inputId}\n name={field.name}\n onBlur={field.onBlur}\n onCheckedChange={(checked) => {\n if (!readOnly) {\n field.onChange(checked === true ? value : uncheckedValue)\n if (onCheckedChange) onCheckedChange(checked, field)\n }\n }}\n ref={field.ref}\n value={value}\n />\n\n <div className=\"grid gap-1.5 font-normal\">\n <p className=\"text-sm leading-none font-medium\">{label}</p>\n {text ? (\n <p className=\"text-sm text-muted-foreground\">{text}</p>\n ) : (\n children\n )}\n <ErrorMonitor error={fieldState.error} />\n </div>\n </Label>\n </Field>\n )}\n />\n )\n}\n","import {\n Button,\n Field,\n FieldDescription,\n FieldLabel,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from '@gmcode/react-ui'\nimport type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type {\n FieldPathValue,\n FieldValues,\n UseFormSetValue\n} from 'react-hook-form'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { Option } from '@/types'\nimport { X } from 'lucide-react'\nimport { useTranslation } from 'react-i18next'\n\nexport function NullableSelectField<\n TFieldValues extends FieldValues = FieldValues\n>({\n autoComplete,\n control,\n description,\n disabled,\n inputId,\n inputName,\n label,\n options,\n placeholder,\n setValue,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n description?: string\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n options: Option[]\n placeholder?: string\n setValue: UseFormSetValue<TFieldValues>\n type?: HTMLInputTypeAttribute\n}) {\n // i18n\n const { t } = useTranslation()\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <div className=\"flex items-end gap-4\">\n <Select\n autoComplete={autoComplete}\n disabled={field.disabled}\n name={field.name}\n onValueChange={field.onChange}\n value={field.value}\n >\n <SelectTrigger\n aria-invalid={fieldState.invalid}\n className=\"flex-1 overflow-hidden\"\n id={inputId ?? (label ? inputName : undefined)}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n id={option.id}\n key={option.key ?? option.id ?? option.value}\n value={option.value}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Button\n aria-label={t(($) => $.reset)}\n className=\"flex-none\"\n onClick={() =>\n setValue(\n inputName,\n '' as FieldPathValue<TFieldValues, FieldPath<TFieldValues>>\n )\n }\n type=\"button\"\n variant=\"outline\"\n >\n <X />\n </Button>\n </div>\n\n {description && <FieldDescription>{description}</FieldDescription>}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport {\n Field,\n FieldLabel,\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput\n} from '@gmcode/react-ui'\nimport type {\n FieldPathValue,\n FieldValues,\n UseFormSetValue\n} from 'react-hook-form'\nimport { Minus, Plus } from 'lucide-react'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport { useTranslation } from 'react-i18next'\n\nfunction stepInput(\n original: string,\n add: boolean,\n step?: number,\n min?: number,\n max?: number\n) {\n let parsed = Number(original)\n\n if (isNaN(parsed)) {\n return ''\n }\n\n if (add) {\n parsed += step === undefined ? 1 : step\n } else {\n parsed -= step === undefined ? 1 : step\n }\n\n if (min !== undefined) {\n parsed = Math.max(parsed, min)\n }\n\n if (max !== undefined) {\n parsed = Math.min(parsed, max)\n }\n\n return parsed.toString()\n}\n\nexport function NumericField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete,\n control,\n disabled,\n inputId,\n inputMode = 'numeric',\n inputName,\n label,\n placeholder,\n type,\n ui,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputMode?: 'decimal' | 'numeric'\n inputName: FieldPath<TFieldValues>\n label?: string\n placeholder?: string\n type?: HTMLInputTypeAttribute\n ui?: {\n max?: number\n min?: number\n setValue: UseFormSetValue<TFieldValues>\n step?: number\n }\n}) {\n // i18n\n const { t } = useTranslation()\n\n function stepValue(value: string, add: boolean) {\n if (ui?.setValue) {\n ui.setValue(\n inputName,\n stepInput(value, add, ui.step, ui.min, ui.max) as FieldPathValue<\n TFieldValues,\n FieldPath<TFieldValues>\n >,\n { shouldValidate: true }\n )\n }\n }\n\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <InputGroup>\n <InputGroupInput\n aria-invalid={fieldState.invalid}\n autoComplete={autoComplete}\n id={inputId ?? (label ? inputName : undefined)}\n inputMode={inputMode}\n placeholder={placeholder}\n type={type}\n {...field}\n />\n\n {ui && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n aria-label={t(($) => $.decrease)}\n disabled={disabled}\n onClick={() => stepValue(field.value, false)}\n size=\"icon-xs\"\n >\n <Minus />\n </InputGroupButton>\n\n <InputGroupButton\n aria-label={t(($) => $.increase)}\n disabled={disabled}\n onClick={() => stepValue(field.value, true)}\n size=\"icon-xs\"\n >\n <Plus />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\n\nexport function PasswordField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'off',\n type = 'password',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n type={type}\n {...props}\n />\n )\n}\n","import type {\n ComponentProps,\n HTMLInputAutoCompleteAttribute,\n HTMLInputTypeAttribute\n} from 'react'\nimport { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport {\n Field,\n FieldDescription,\n FieldLabel,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue\n} from '@gmcode/react-ui'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\nimport type { Option } from '@/types'\n\nexport function SelectField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete,\n control,\n description,\n disabled,\n inputId,\n inputName,\n label,\n options,\n placeholder,\n ...props\n}: ComponentProps<typeof Field> & {\n autoComplete?: HTMLInputAutoCompleteAttribute\n control: Control<TFieldValues>\n description?: string\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n options: Option[]\n placeholder?: string\n type?: HTMLInputTypeAttribute\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <Select\n autoComplete={autoComplete}\n disabled={field.disabled}\n name={field.name}\n onValueChange={field.onChange}\n value={field.value}\n >\n <SelectTrigger\n aria-invalid={fieldState.invalid}\n id={inputId ?? (label ? inputName : undefined)}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem\n id={option.id}\n key={option.key ?? option.id ?? option.value}\n value={option.value}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {description && <FieldDescription>{description}</FieldDescription>}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import { Button, Spinner, cn } from '@gmcode/react-ui'\nimport type { ComponentProps } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nexport function Submit({\n label,\n loading = false,\n type = 'submit',\n ...props\n}: ComponentProps<typeof Button> & {\n label?: string\n loading?: boolean\n}) {\n // i18n\n const { t } = useTranslation()\n\n return (\n <Button\n disabled={loading}\n type={type}\n {...props}\n >\n <div className=\"relative\">\n <span className={cn({ invisible: loading })}>\n {label ?? t(($) => $.submit)}\n </span>\n <Spinner\n className={cn(\n 'trans absolute top-1/2 left-1/2 hidden -translate-x-1/2 -translate-y-1/2',\n { block: loading }\n )}\n />\n </div>\n </Button>\n )\n}\n","import { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport type { ControllerRenderProps, FieldValues } from 'react-hook-form'\nimport { Field, FieldLabel, Switch } from '@gmcode/react-ui'\nimport type { Checkbox as CheckboxPrimitive } from 'radix-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\n\nexport function SwitchField<TFieldValues extends FieldValues = FieldValues>({\n control,\n disabled,\n inputId,\n inputName,\n label,\n onCheckedChange,\n orientation = 'horizontal',\n readOnly,\n uncheckedValue = '',\n value = 'true',\n ...props\n}: ComponentProps<typeof Field> & {\n control: Control<TFieldValues>\n disabled?: boolean\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n onCheckedChange?: (\n checked: CheckboxPrimitive.CheckedState,\n field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>\n ) => void\n readOnly?: boolean\n uncheckedValue?: string\n value?: string\n}) {\n return (\n <Controller\n control={control}\n disabled={disabled}\n name={inputName}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n orientation={orientation}\n {...props}\n >\n <Switch\n aria-invalid={fieldState.invalid}\n aria-readonly={readOnly}\n checked={field.value === value}\n className=\"aria-readonly:opacity-50\"\n disabled={field.disabled}\n id={inputId ?? (label ? inputName : undefined)}\n name={field.name}\n onBlur={field.onBlur}\n onCheckedChange={(checked) => {\n if (!readOnly) {\n field.onChange(checked === true ? value : uncheckedValue)\n if (onCheckedChange) onCheckedChange(checked, field)\n }\n }}\n ref={field.ref}\n value={value}\n />\n\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n","import type { ComponentProps } from 'react'\nimport type { FieldValues } from 'react-hook-form'\nimport { InputField } from '@/components/input-field'\n\nexport function TextField<TFieldValues extends FieldValues = FieldValues>({\n autoComplete = 'on',\n type = 'text',\n ...props\n}: ComponentProps<typeof InputField<TFieldValues>>) {\n return (\n <InputField\n autoComplete={autoComplete}\n type={type}\n {...props}\n />\n )\n}\n","import { type Control, Controller, type FieldPath } from 'react-hook-form'\nimport { Field, FieldLabel, TextareaAutosize, cn } from '@gmcode/react-ui'\nimport type { ComponentProps } from 'react'\nimport { ErrorMonitor } from '@/components/error-monitor'\nimport type { FieldValues } from 'react-hook-form'\nimport type { TextareaHeightChangeMeta } from 'react-textarea-autosize'\n\nexport function TextareaField<TFieldValues extends FieldValues = FieldValues>({\n cacheMeasurements,\n control,\n inputId,\n inputName,\n label,\n maxRows,\n minRows,\n onHeightChange,\n placeholder,\n resize = 'none',\n ...props\n}: ComponentProps<typeof Field> & {\n cacheMeasurements?: boolean\n control: Control<TFieldValues>\n inputId?: string\n inputName: FieldPath<TFieldValues>\n label?: string\n maxRows?: number\n minRows?: number\n onHeightChange?: (height: number, meta: TextareaHeightChangeMeta) => void\n placeholder?: string\n resize?: 'both' | 'none' | 'x' | 'y'\n}) {\n return (\n <Controller\n name={inputName}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n data-invalid={fieldState.invalid}\n {...props}\n >\n {label && (\n <FieldLabel htmlFor={inputId ?? inputName}>{label}</FieldLabel>\n )}\n\n <TextareaAutosize\n aria-invalid={fieldState.invalid}\n autoComplete=\"off\"\n cacheMeasurements={cacheMeasurements}\n className={cn({\n resize: resize === 'both',\n 'resize-none': resize === 'none',\n 'resize-x': resize === 'x',\n 'resize-y': resize === 'y'\n })}\n id={inputId ?? (label ? inputName : undefined)}\n maxRows={maxRows}\n minRows={minRows}\n onHeightChange={onHeightChange}\n placeholder={placeholder}\n {...field}\n />\n\n <ErrorMonitor error={fieldState.error} />\n </Field>\n )}\n />\n )\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmcode/forms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "Fully functional inertia react forms with client side validations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"i18next",
|
|
@@ -32,36 +32,28 @@
|
|
|
32
32
|
"./package.json": "./package.json"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@gmcode/react-ui": "^0.3.
|
|
36
|
-
"@gmcode/tsv-hookform": "^0.1.
|
|
37
|
-
"@gmcode/tsv-input": "^0.2.
|
|
35
|
+
"@gmcode/react-ui": "^0.3.4",
|
|
36
|
+
"@gmcode/tsv-hookform": "^0.1.3",
|
|
37
|
+
"@gmcode/tsv-input": "^0.2.4",
|
|
38
38
|
"i18next": "^26.3.4",
|
|
39
39
|
"lucide-react": "^1.16.0",
|
|
40
40
|
"radix-ui": "^1.4.3",
|
|
41
41
|
"react-day-picker": "^10.0.1",
|
|
42
42
|
"react-hook-form": "^7.71.2",
|
|
43
43
|
"react-i18next": "^17.0.8",
|
|
44
|
-
"react-textarea-autosize": "^8.5.9"
|
|
45
|
-
"tailwindcss": "^4.3.0"
|
|
44
|
+
"react-textarea-autosize": "^8.5.9"
|
|
46
45
|
},
|
|
47
46
|
"devDependencies": {
|
|
48
|
-
"@babel/core": "^8.0.1",
|
|
49
|
-
"@rolldown/plugin-babel": "^0.2.3",
|
|
50
|
-
"@tailwindcss/vite": "^4.3.1",
|
|
51
|
-
"@types/babel__core": "^7.20.5",
|
|
52
47
|
"@types/react": "^19.2.17",
|
|
53
48
|
"@types/react-dom": "^19.2.3",
|
|
54
|
-
"@vitejs/plugin-react": "^6.0.2",
|
|
55
|
-
"@vitest/coverage-istanbul": "^4.1.10",
|
|
56
|
-
"babel-plugin-react-compiler": "^1.0.0",
|
|
57
49
|
"msw": "^2.15.0",
|
|
58
|
-
"playwright": "^1.60.0",
|
|
59
|
-
"tw-animate-css": "^1.4.0",
|
|
60
50
|
"typescript": "^6.0.3",
|
|
61
|
-
"vite": "^8.1.4",
|
|
62
51
|
"vite-plus": "^0.2.4",
|
|
63
|
-
"vitest": "^
|
|
64
|
-
"
|
|
52
|
+
"vitest-browser-react": "^2.2.0",
|
|
53
|
+
"@repo/badge": "0.0.1",
|
|
54
|
+
"@repo/typescript": "0.0.1",
|
|
55
|
+
"@repo/themes": "0.0.1",
|
|
56
|
+
"@repo/mock-inertia": "3.5.0"
|
|
65
57
|
},
|
|
66
58
|
"peerDependencies": {
|
|
67
59
|
"@inertiajs/core": "^3.5.0",
|
|
@@ -76,6 +68,7 @@
|
|
|
76
68
|
},
|
|
77
69
|
"scripts": {
|
|
78
70
|
"build": "vp pack",
|
|
79
|
-
"test": "vp test run --coverage &&
|
|
71
|
+
"test": "vp test run --coverage && badge",
|
|
72
|
+
"test:ui": "vp test watch --browser.headless=false"
|
|
80
73
|
}
|
|
81
74
|
}
|