@gmcode/forms 0.0.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Marco Girometta
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # @gmcode/forms
2
+
3
+ Form and input components with validations, i18n, tailwind theming and built-in inertia form.
4
+
5
+ ## Requirements
6
+
7
+ - React and react-dom 19+
8
+ - Inertia React 3+
9
+ - Tailwind CSS 4+
10
+ - i18next (26+) and react-i18next (17+)
11
+
12
+ ## Installation
13
+
14
+ ```
15
+ npm install @gmcode/forms
16
+ ```
17
+
18
+ ## i18n setup
19
+
20
+ ```ts
21
+ import { i18n as formsI18n } from '@gmcode/forms'
22
+ import { it } from '@gmcode/forms/locales'
23
+
24
+ // App i18n
25
+ i18n.use(initReactI18next).init({})
26
+
27
+ // Add a locale
28
+ formsI18n.addResourceBundle('it', 'translation', it, true)
29
+
30
+ // Set the initial language
31
+ formsI18n.changeLanguage(i18n.language)
32
+
33
+ // Keep language synched
34
+ i18n.on('languageChanged', (language) => formsI18n.changeLanguage(language))
35
+ ```
36
+
37
+ ## Tailwind setup
38
+
39
+ ```css
40
+ /* app.css */
41
+ @source '../path/to/node_modules/@gmcode/forms';
42
+ @source '../path/to/node_modules/@gmcode/react-ui';
43
+ ```
44
+
45
+ ## Usage
46
+
47
+ ```tsx
48
+ import { Form, InputTextRule, Schema, Submit, TextField } from '@gmcode/forms'
49
+
50
+ const schema = new Schema({
51
+ username: new InputTextRule({
52
+ maxChars: 20,
53
+ minChars: 4
54
+ })
55
+ })
56
+
57
+ function Page() {
58
+ return (
59
+ <Form
60
+ defaults={{ username: '' }}
61
+ schema={schema}
62
+ route={{
63
+ method: 'post',
64
+ url: 'https://endpoint'
65
+ }}
66
+ >
67
+ {({ form, loading }) => (
68
+ <>
69
+ <TextField
70
+ control={form.control}
71
+ inputName="username"
72
+ label="Username"
73
+ />
74
+
75
+ <Submit loading={loading} />
76
+ </>
77
+ )}
78
+ </Form>
79
+ )
80
+ }
81
+ ```
82
+
83
+ ## CSS themes
84
+
85
+ - [Default](https://github.com/GiromettaMarco/forms/blob/master/tooling/themes/default.css)
86
+
87
+ ## Code Snippet
88
+
89
+ ```json
90
+ {
91
+ "Form": {
92
+ "prefix": "form",
93
+ "description": "Form component to manage submission with Inertia and React Hook Form.",
94
+ "scope": "javascriptreact,typescriptreact",
95
+ "body": [
96
+ "<Form$1",
97
+ " defaults={{$4}}",
98
+ " route={$2}",
99
+ " schema={$3}",
100
+ ">",
101
+ " {({ form, loading }) => (",
102
+ " <>",
103
+ " $5",
104
+ " </>",
105
+ " )}",
106
+ "</Form>"
107
+ ]
108
+ }
109
+ }
110
+ ```
@@ -0,0 +1,2 @@
1
+ var e={translation:{array:`The field must be an array.`,date:`The field must be a valid date`,decrease:`Decrease`,email:`The field must be a valid email address.`,increase:`Increase`,integer:`The field must be an integer.`,maxChars:`The field must not be greater than {{max}} characters.`,maxValue:`The field must not be greater than {{max}}.`,minChars:`The field must be at least {{min}} characters.`,minValue:`The field must be at least {{min}}.`,missing:`The value is not supported.`,number:`The field must be a number.`,numeric:`The field must be a number.`,required:`The field is required.`,reset:`Reset`,string:`The field must be a string.`,submit:`Submit`}};export{e as t};
2
+ //# sourceMappingURL=en-CnkPOj-4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en-CnkPOj-4.mjs","names":[],"sources":["../src/locales/en.ts"],"sourcesContent":["import type { Resource } from 'i18next'\n\nexport default {\n translation: {\n array: 'The field must be an array.',\n date: 'The field must be a valid date',\n decrease: 'Decrease',\n email: 'The field must be a valid email address.',\n increase: 'Increase',\n integer: 'The field must be an integer.',\n maxChars: 'The field must not be greater than {{max}} characters.',\n maxValue: 'The field must not be greater than {{max}}.',\n minChars: 'The field must be at least {{min}} characters.',\n minValue: 'The field must be at least {{min}}.',\n missing: 'The value is not supported.',\n number: 'The field must be a number.',\n numeric: 'The field must be a number.',\n required: 'The field is required.',\n reset: 'Reset',\n string: 'The field must be a string.',\n submit: 'Submit'\n }\n} satisfies Resource\n"],"mappings":"AAEA,IAAA,EAAe,CACb,YAAa,CACX,MAAO,8BACP,KAAM,iCACN,SAAU,WACV,MAAO,2CACP,SAAU,WACV,QAAS,gCACT,SAAU,yDACV,SAAU,8CACV,SAAU,iDACV,SAAU,sCACV,QAAS,8BACT,OAAQ,8BACR,QAAS,8BACT,SAAU,yBACV,MAAO,QACP,OAAQ,8BACR,OAAQ,QACV,CACF"}
@@ -0,0 +1,460 @@
1
+ import { i18n as i18n$1 } from "i18next";
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";
5
+ import { ComponentProps, FC, HTMLInputAutoCompleteAttribute, HTMLInputTypeAttribute, ReactNode, SVGProps } from "react";
6
+ import { DayPickerLocale, Matcher } from "react-day-picker";
7
+ import { Checkbox as Checkbox$1 } from "radix-ui";
8
+ import { CancelTokenCallback, FormDataErrors, GlobalEventCallback, RequestPayload } from "@inertiajs/core";
9
+ import { TextareaHeightChangeMeta } from "react-textarea-autosize";
10
+ export * from "@gmcode/tsv-input";
11
+
12
+ //#region \0rolldown/runtime.js
13
+ //#endregion
14
+ //#region src/i18n.d.ts
15
+ declare const i18n: i18n$1;
16
+ //#endregion
17
+ //#region ../../node_modules/.pnpm/@gmcode+tsv-core@0.1.2/node_modules/@gmcode/tsv-core/dist/index.d.mts
18
+ //#region src/types.d.ts
19
+ type Ruleset = Record<string, BasicRule>;
20
+ interface MessageParams {
21
+ [key: string]: number | string;
22
+ } //#endregion
23
+ //#region src/message.d.ts
24
+ declare class Message {
25
+ /**
26
+ * The message text. Usually a translation key.
27
+ */
28
+ text: string;
29
+ /**
30
+ * Parameters for a translation function.
31
+ */
32
+ params?: MessageParams;
33
+ constructor(text: string, params?: MessageParams);
34
+ } //#endregion
35
+ //#region src/basic-rule.d.ts
36
+ /**
37
+ * Validation rule base class.
38
+ */
39
+ declare abstract class BasicRule<S = unknown> {
40
+ /**
41
+ * Manipulate value before testing.
42
+ */
43
+ sanitize?(value: unknown): unknown;
44
+ /**
45
+ * Validation function.
46
+ *
47
+ * @returns `true` if the validation is passed or a `Message` object in case of error.
48
+ */
49
+ abstract test(value: unknown): true | Message;
50
+ /**
51
+ * Sanitize and validate the value with error messages.
52
+ */
53
+ validate(value: unknown): {
54
+ sanitized: S;
55
+ success: true;
56
+ message?: undefined;
57
+ } | {
58
+ message: Message;
59
+ success: false;
60
+ sanitized?: undefined;
61
+ };
62
+ } //#endregion
63
+ //#region src/regex.d.ts
64
+ //#endregion
65
+ //#region src/types/index.d.ts
66
+ type Method = 'get' | 'post' | 'put' | 'delete' | 'patch';
67
+ type RouteDefinition<TMethod extends Method | Method[]> = {
68
+ url: string;
69
+ } & (TMethod extends Method[] ? {
70
+ methods: TMethod;
71
+ } : {
72
+ method: TMethod;
73
+ });
74
+ interface Option {
75
+ id?: string;
76
+ key?: string | number;
77
+ label: ReactNode;
78
+ value: string;
79
+ }
80
+ interface ErrorData {
81
+ message?: string;
82
+ params?: MessageParams;
83
+ }
84
+ //#endregion
85
+ //#region src/components/calendar-field.d.ts
86
+ declare function CalendarField<TFieldValues extends FieldValues = FieldValues>({
87
+ control,
88
+ dateToString,
89
+ disabled,
90
+ inputId,
91
+ inputName,
92
+ label,
93
+ locale,
94
+ stringToDate,
95
+ ...props
96
+ }: ComponentProps<typeof Field> & {
97
+ control: Control<TFieldValues>;
98
+ dateToString?: (date: Date) => string;
99
+ disabled?: Matcher | Matcher[];
100
+ inputId?: string;
101
+ inputName: FieldPath<TFieldValues>;
102
+ label?: string;
103
+ locale?: Partial<DayPickerLocale>;
104
+ stringToDate?: (string: string | undefined) => Date | undefined;
105
+ }): import("react").JSX.Element;
106
+ //#endregion
107
+ //#region src/components/checkbox-field.d.ts
108
+ declare function CheckboxField<TFieldValues extends FieldValues = FieldValues>({
109
+ control,
110
+ disabled,
111
+ inputId,
112
+ inputName,
113
+ label,
114
+ onCheckedChange,
115
+ orientation,
116
+ readOnly,
117
+ uncheckedValue,
118
+ value,
119
+ ...props
120
+ }: ComponentProps<typeof Field> & {
121
+ control: Control<TFieldValues>;
122
+ disabled?: boolean;
123
+ inputId?: string;
124
+ inputName: FieldPath<TFieldValues>;
125
+ label?: string;
126
+ onCheckedChange?: (checked: Checkbox$1.CheckedState, field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>) => void;
127
+ readOnly?: boolean;
128
+ uncheckedValue?: string;
129
+ value?: string;
130
+ }): import("react").JSX.Element;
131
+ //#endregion
132
+ //#region src/components/input-field.d.ts
133
+ declare function InputField<TFieldValues extends FieldValues = FieldValues>({
134
+ autoComplete,
135
+ control,
136
+ disabled,
137
+ inputId,
138
+ inputName,
139
+ label,
140
+ placeholder,
141
+ readOnly,
142
+ type,
143
+ ...props
144
+ }: ComponentProps<typeof Field> & {
145
+ autoComplete?: HTMLInputAutoCompleteAttribute;
146
+ control: Control<TFieldValues>;
147
+ disabled?: boolean;
148
+ inputId?: string;
149
+ inputName: FieldPath<TFieldValues>;
150
+ label?: string;
151
+ placeholder?: string;
152
+ readOnly?: boolean;
153
+ type?: HTMLInputTypeAttribute;
154
+ }): import("react").JSX.Element;
155
+ //#endregion
156
+ //#region src/components/email-field.d.ts
157
+ declare function EmailField<TFieldValues extends FieldValues = FieldValues>({
158
+ autoComplete,
159
+ type,
160
+ ...props
161
+ }: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
162
+ //#endregion
163
+ //#region src/components/error-monitor.d.ts
164
+ declare function ErrorMonitor({
165
+ error
166
+ }: {
167
+ error?: ErrorData;
168
+ }): import("react").JSX.Element | null;
169
+ //#endregion
170
+ //#region src/components/fancy-radio-field.d.ts
171
+ declare function FancyRadioField<TFieldValues extends FieldValues = FieldValues>({
172
+ control,
173
+ defaultValue,
174
+ description,
175
+ disabled,
176
+ groupId,
177
+ inputName,
178
+ label,
179
+ options,
180
+ ...props
181
+ }: ComponentProps<typeof FieldSet> & {
182
+ control: Control<TFieldValues>;
183
+ defaultValue: string;
184
+ description?: string;
185
+ disabled?: boolean;
186
+ groupId?: string;
187
+ inputName: FieldPath<TFieldValues>;
188
+ label?: string;
189
+ options: Array<Option & {
190
+ Icon?: FC<SVGProps<SVGSVGElement>>;
191
+ }>;
192
+ }): import("react").JSX.Element;
193
+ //#endregion
194
+ //#region src/components/form.d.ts
195
+ type RenderFN<TValues extends FieldValues> = ({
196
+ errors,
197
+ form,
198
+ loading
199
+ }: {
200
+ errors: FormDataErrors<object>;
201
+ form: UseFormReturn<TValues>;
202
+ loading: boolean;
203
+ }) => ReactNode;
204
+ declare function Form<TRuleset extends Ruleset, TSchema extends index_d_exports.Schema<TRuleset>, TValues extends InferSchema<TSchema>>({
205
+ children,
206
+ className,
207
+ defaults,
208
+ rootError: displayRootError,
209
+ onBefore,
210
+ onBeforeUpdate,
211
+ onCancel,
212
+ onCancelToken,
213
+ onError,
214
+ onFinish,
215
+ onFlash,
216
+ onPrefetched,
217
+ onPrefetching,
218
+ onProgress,
219
+ onStart,
220
+ onSuccess,
221
+ preserveScroll,
222
+ resetOnSuccess,
223
+ route,
224
+ schema,
225
+ setDefaultsOnSuccess
226
+ }: {
227
+ children: RenderFN<TValues>;
228
+ className?: string;
229
+ defaults?: Partial<DefaultValues<TValues>>;
230
+ /**
231
+ * How to display the root error from inertia.
232
+ *
233
+ * - `flash` - use the Toaster component
234
+ * - `monitor` - use the ErrorMonitor component
235
+ * - `none` - don't display the root error
236
+ *
237
+ * @defaultValue `flash`
238
+ */
239
+ rootError?: 'flash' | 'monitor' | 'none';
240
+ onBefore?: GlobalEventCallback<'before', RequestPayload>;
241
+ onBeforeUpdate?: GlobalEventCallback<'beforeUpdate', RequestPayload>;
242
+ onCancel?: GlobalEventCallback<'cancel', RequestPayload>;
243
+ onCancelToken?: CancelTokenCallback;
244
+ onError?: GlobalEventCallback<'error', RequestPayload>;
245
+ onFinish?: GlobalEventCallback<'finish', RequestPayload>;
246
+ onFlash?: GlobalEventCallback<'flash', RequestPayload>;
247
+ onPrefetched?: GlobalEventCallback<'prefetched', RequestPayload>;
248
+ onPrefetching?: GlobalEventCallback<'prefetching', RequestPayload>;
249
+ onProgress?: GlobalEventCallback<'progress', RequestPayload>;
250
+ onStart?: GlobalEventCallback<'start', RequestPayload>;
251
+ onSuccess?: GlobalEventCallback<'success', RequestPayload>;
252
+ preserveScroll?: boolean;
253
+ resetOnSuccess?: boolean;
254
+ route: RouteDefinition<Method>;
255
+ schema: index_d_exports.Schema<TRuleset>;
256
+ setDefaultsOnSuccess?: boolean;
257
+ }): import("react").JSX.Element;
258
+ //#endregion
259
+ //#region src/components/hidden-field.d.ts
260
+ declare function HiddenField<TFieldValues extends FieldValues = FieldValues>({
261
+ autoComplete,
262
+ className,
263
+ type,
264
+ ...props
265
+ }: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
266
+ //#endregion
267
+ //#region src/components/info-checkbox-field.d.ts
268
+ declare function InfoCheckboxField<TFieldValues extends FieldValues = FieldValues>({
269
+ children,
270
+ className,
271
+ control,
272
+ disabled,
273
+ inputId,
274
+ inputName,
275
+ label,
276
+ onCheckedChange,
277
+ orientation,
278
+ readOnly,
279
+ text,
280
+ uncheckedValue,
281
+ value,
282
+ ...props
283
+ }: ComponentProps<typeof Field> & {
284
+ control: Control<TFieldValues>;
285
+ disabled?: boolean;
286
+ inputId?: string;
287
+ inputName: FieldPath<TFieldValues>;
288
+ label?: string;
289
+ onCheckedChange?: (checked: Checkbox$1.CheckedState, field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>) => void;
290
+ readOnly?: boolean;
291
+ text?: string;
292
+ uncheckedValue?: string;
293
+ value?: string;
294
+ }): import("react").JSX.Element;
295
+ //#endregion
296
+ //#region src/components/nullable-select-field.d.ts
297
+ declare function NullableSelectField<TFieldValues extends FieldValues = FieldValues>({
298
+ autoComplete,
299
+ control,
300
+ description,
301
+ disabled,
302
+ inputId,
303
+ inputName,
304
+ label,
305
+ options,
306
+ placeholder,
307
+ setValue,
308
+ ...props
309
+ }: ComponentProps<typeof Field> & {
310
+ autoComplete?: HTMLInputAutoCompleteAttribute;
311
+ control: Control<TFieldValues>;
312
+ description?: string;
313
+ disabled?: boolean;
314
+ inputId?: string;
315
+ inputName: FieldPath<TFieldValues>;
316
+ label?: string;
317
+ options: Option[];
318
+ placeholder?: string;
319
+ setValue: UseFormSetValue<TFieldValues>;
320
+ type?: HTMLInputTypeAttribute;
321
+ }): import("react").JSX.Element;
322
+ //#endregion
323
+ //#region src/components/numeric-field.d.ts
324
+ declare function NumericField<TFieldValues extends FieldValues = FieldValues>({
325
+ autoComplete,
326
+ control,
327
+ disabled,
328
+ inputId,
329
+ inputMode,
330
+ inputName,
331
+ label,
332
+ placeholder,
333
+ type,
334
+ ui,
335
+ ...props
336
+ }: ComponentProps<typeof Field> & {
337
+ autoComplete?: HTMLInputAutoCompleteAttribute;
338
+ control: Control<TFieldValues>;
339
+ disabled?: boolean;
340
+ inputId?: string;
341
+ inputMode?: 'decimal' | 'numeric';
342
+ inputName: FieldPath<TFieldValues>;
343
+ label?: string;
344
+ placeholder?: string;
345
+ type?: HTMLInputTypeAttribute;
346
+ ui?: {
347
+ max?: number;
348
+ min?: number;
349
+ setValue: UseFormSetValue<TFieldValues>;
350
+ step?: number;
351
+ };
352
+ }): import("react").JSX.Element;
353
+ //#endregion
354
+ //#region src/components/password-field.d.ts
355
+ declare function PasswordField<TFieldValues extends FieldValues = FieldValues>({
356
+ autoComplete,
357
+ type,
358
+ ...props
359
+ }: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
360
+ //#endregion
361
+ //#region src/components/select-field.d.ts
362
+ declare function SelectField<TFieldValues extends FieldValues = FieldValues>({
363
+ autoComplete,
364
+ control,
365
+ description,
366
+ disabled,
367
+ inputId,
368
+ inputName,
369
+ label,
370
+ options,
371
+ placeholder,
372
+ ...props
373
+ }: ComponentProps<typeof Field> & {
374
+ autoComplete?: HTMLInputAutoCompleteAttribute;
375
+ control: Control<TFieldValues>;
376
+ description?: string;
377
+ disabled?: boolean;
378
+ inputId?: string;
379
+ inputName: FieldPath<TFieldValues>;
380
+ label?: string;
381
+ options: Option[];
382
+ placeholder?: string;
383
+ type?: HTMLInputTypeAttribute;
384
+ }): import("react").JSX.Element;
385
+ //#endregion
386
+ //#region src/components/submit.d.ts
387
+ declare function Submit({
388
+ label,
389
+ loading,
390
+ type,
391
+ ...props
392
+ }: ComponentProps<typeof Button> & {
393
+ label?: string;
394
+ loading?: boolean;
395
+ }): import("react").JSX.Element;
396
+ //#endregion
397
+ //#region src/components/switch-field.d.ts
398
+ declare function SwitchField<TFieldValues extends FieldValues = FieldValues>({
399
+ control,
400
+ disabled,
401
+ inputId,
402
+ inputName,
403
+ label,
404
+ onCheckedChange,
405
+ orientation,
406
+ readOnly,
407
+ uncheckedValue,
408
+ value,
409
+ ...props
410
+ }: ComponentProps<typeof Field> & {
411
+ control: Control<TFieldValues>;
412
+ disabled?: boolean;
413
+ inputId?: string;
414
+ inputName: FieldPath<TFieldValues>;
415
+ label?: string;
416
+ onCheckedChange?: (checked: Checkbox$1.CheckedState, field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>) => void;
417
+ readOnly?: boolean;
418
+ uncheckedValue?: string;
419
+ value?: string;
420
+ }): import("react").JSX.Element;
421
+ //#endregion
422
+ //#region src/components/text-field.d.ts
423
+ declare function TextField<TFieldValues extends FieldValues = FieldValues>({
424
+ autoComplete,
425
+ type,
426
+ ...props
427
+ }: ComponentProps<typeof InputField<TFieldValues>>): import("react").JSX.Element;
428
+ //#endregion
429
+ //#region src/components/textarea-field.d.ts
430
+ declare function TextareaField<TFieldValues extends FieldValues = FieldValues>({
431
+ cacheMeasurements,
432
+ control,
433
+ inputId,
434
+ inputName,
435
+ label,
436
+ maxRows,
437
+ minRows,
438
+ onHeightChange,
439
+ placeholder,
440
+ resize,
441
+ ...props
442
+ }: ComponentProps<typeof Field> & {
443
+ cacheMeasurements?: boolean;
444
+ control: Control<TFieldValues>;
445
+ inputId?: string;
446
+ inputName: FieldPath<TFieldValues>;
447
+ label?: string;
448
+ maxRows?: number;
449
+ minRows?: number;
450
+ onHeightChange?: (height: number, meta: TextareaHeightChangeMeta) => void;
451
+ placeholder?: string;
452
+ resize?: 'both' | 'none' | 'x' | 'y';
453
+ }): import("react").JSX.Element;
454
+ declare namespace index_d_exports {
455
+ export { CalendarField, CheckboxField, EmailField, ErrorData, ErrorMonitor, FancyRadioField, Form, HiddenField, InfoCheckboxField, InputField, Method, NullableSelectField, NumericField, Option, PasswordField, RouteDefinition, SelectField, Submit, SwitchField, TextField, TextareaField, i18n };
456
+ }
457
+ import * as import__gmcode_tsv_input from "@gmcode/tsv-input";
458
+ //#endregion
459
+ export { CalendarField, CheckboxField, EmailField, type ErrorData, ErrorMonitor, FancyRadioField, Form, HiddenField, InfoCheckboxField, InputField, type Method, NullableSelectField, NumericField, type Option, PasswordField, type RouteDefinition, SelectField, Submit, SwitchField, TextField, TextareaField, i18n };
460
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":["Record","BasicRule","T","S","Ruleset","R","Sanitized","errors","sanitized","success","P","Message","ResultSuccess","ResultError","addTo","callback","SanitizedValues","values","postValidation","SchemaRule","key","text","params","MessageParams","constructor","sanitize","value","test","validate","message","RegExp","ruleset","SchemaOptions","options","SchemaValues","FormData","ValidationResult","TMethod","Method","url","methods","method","id","key","label","ReactNode","value","message","params","MessageParams"],"sources":["../src/i18n.ts","../../../node_modules/.pnpm/@gmcode+tsv-core@0.1.2/node_modules/@gmcode/tsv-core/dist/index.d.mts","../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","../src/index.ts"],"x_google_ignoreList":[1],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +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 D}from"@gmcode/react-ui";import{Controller as O,useForm as k}from"react-hook-form";import{c as A}from"react/compiler-runtime";import{I18nextProvider as ee,useTranslation as j}from"react-i18next";import{Fragment as M,jsx as N,jsxs as P}from"react/jsx-runtime";import{useTsvResolver as F}from"@gmcode/tsv-hookform";import{useEffect as I,useState as L}from"react";import{useForm as R}from"@inertiajs/react";import{Minus as z,Plus as B,X as V}from"lucide-react";export*from"@gmcode/tsv-input";const H=t({fallbackLng:`en`,interpolation:{escapeValue:!1},resources:{en:e}});H.init();function U(e){return`${e.getFullYear()}-${(e.getMonth()+1+``).padStart(2,`0`)}-${(e.getDate()+``).padStart(2,`0`)}`}function W(e){if(!e)return;let t=new Date(e);if(!isNaN(t.getFullYear()))return t}function G(e){let t=A(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}=j();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=N(s,{errors:{message:e}}),t[5]=e,t[6]=i),i}let i;return t[7]===n?i=t[8]:(i=N(s,{errors:n}),t[7]=n,t[8]=i),i}function K({control:e,dateToString:t=U,disabled:n,inputId:i,inputName:o,label:s,locale:l,stringToDate:u=W,...d}){return N(O,{name:o,control:e,render:({field:e,fieldState:f})=>P(a,{"data-invalid":f.invalid,...d,children:[s&&N(c,{htmlFor:i??o,children:s}),N(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)}),N(G,{error:f.error})]})})}function q({control:e,disabled:t,inputId:n,inputName:r,label:o,onCheckedChange:s,orientation:l=`horizontal`,readOnly:u,uncheckedValue:d=``,value:f=`true`,...p}){return N(O,{control:e,disabled:t,name:r,render:({field:e,fieldState:t})=>P(a,{"data-invalid":t.invalid,orientation:l,...p,children:[N(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&&N(c,{htmlFor:n??r,children:o}),N(G,{error:t.error})]})})}function J(e){let t=A(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 P(a,{"data-invalid":r.invalid,...f,children:[l&&N(c,{htmlFor:o??s,children:l}),N(u,{"aria-invalid":r.invalid,autoComplete:n,id:o??(l?s:void 0),placeholder:d,readOnly:p,type:m,...t}),N(G,{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=N(O,{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 Y({autoComplete:e=`on`,type:t=`email`,...n}){return N(J,{autoComplete:e,type:t,...n})}function X(e){let t=A(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 P(l,{"data-invalid":n.invalid,...p,children:[d&&N(c,{htmlFor:s??u,children:d}),i&&N(o,{children:i}),N(G,{error:n.error}),N(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(Z)})]})},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=N(O,{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 Z(e){return N(h,{className:`rounded-md border ring-ring/50 transition-all hover:bg-accent/50 has-focus-visible:ring-[3px]`,"data-slot":`field-label`,children:P(`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:[N(_,{className:`sr-only`,id:e.id,value:e.value}),e.Icon&&N(e.Icon,{}),e.label]})},e.key??e.id??e.value)}function Q({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]=L(),C=Object.fromEntries(Object.keys(y.ruleset).map(e=>[e,n[e]??``])),w=k({defaultValues:C,resolver:F(y)}),T=R(C);function O(e){e.root&&(r===`flash`?D({level:`error`,title:e.root}):r===`monitor`&&S({message:e.root})),c&&c(e)}function A(e){b&&(T.setDefaults(),w.reset(w.getValues())),_&&(T.reset(),w.reset()),h&&h(e)}function j(e){T.transform(()=>e),T[v.method](v.url,{onBefore:i,onBeforeUpdate:a,onCancel:o,onCancelToken:s,onError:O,onFinish:l,onFlash:u,onPrefetched:d,onPrefetching:f,onProgress:p,onStart:m,onSuccess:A,preserveScroll:g})}return I(()=>{for(let[e,t]of Object.entries(T.errors))t&&w.setError(e,{message:t,type:`inertia`})},[T.errors,w]),N(ee,{i18n:H,children:P(`form`,{action:v.url,className:E(`grid gap-6`,t),method:v.method,onSubmit:w.handleSubmit(j),children:[N(M,{children:e({errors:T.errors,form:w,loading:T.processing})}),r===`monitor`&&N(G,{error:x})]})})}function te({autoComplete:e=`off`,className:t,type:n=`hidden`,...r}){return N(J,{autoComplete:e,className:E(`hidden`,t),type:n,...r})}function ne({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 N(O,{control:n,disabled:r,name:s,render:({field:n,fieldState:r})=>N(a,{className:E(`block`,t),"data-invalid":r.invalid,orientation:u,...g,children:P(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:[N(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}),P(`div`,{className:`grid gap-1.5 font-normal`,children:[N(`p`,{className:`text-sm leading-none font-medium`,children:c}),f?N(`p`,{className:`text-sm text-muted-foreground`,children:f}):e,N(G,{error:r.error})]})]})})})}function re(e){let t=A(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:_}=j(),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 P(a,{"data-invalid":i.invalid,...h,children:[f&&N(c,{htmlFor:u??d,children:f}),P(`div`,{className:`flex items-end gap-4`,children:[P(v,{autoComplete:r,disabled:t.disabled,name:t.name,onValueChange:t.onChange,value:t.value,children:[N(x,{"aria-invalid":i.invalid,className:`flex-1 overflow-hidden`,id:u??(f?d:void 0),children:N(S,{placeholder:m})}),N(y,{children:p.map(ae)})]}),N(n,{"aria-label":_(ie),className:`flex-none`,onClick:()=>g(d,``),type:`button`,variant:`outline`,children:N(V,{})})]}),s&&N(o,{children:s}),N(G,{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=N(O,{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 ie(e){return e.reset}function ae(e){return N(b,{id:e.id,value:e.value,children:e.label},e.key??e.id??e.value)}function oe(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 $({autoComplete:e,control:t,disabled:n,inputId:r,inputMode:i=`numeric`,inputName:o,label:s,placeholder:l,type:u,ui:h,...g}){let{t:_}=j();function v(e,t){h?.setValue&&h.setValue(o,oe(e,t,h.step,h.min,h.max),{shouldValidate:!0})}return N(O,{control:t,disabled:n,name:o,render:({field:t,fieldState:y})=>P(a,{"data-invalid":y.invalid,...g,children:[s&&N(c,{htmlFor:r??o,children:s}),P(d,{children:[N(m,{"aria-invalid":y.invalid,autoComplete:e,id:r??(s?o:void 0),inputMode:i,placeholder:l,type:u,...t}),h&&P(f,{align:`inline-end`,children:[N(p,{"aria-label":_(e=>e.decrease),disabled:n,onClick:()=>v(t.value,!1),size:`icon-xs`,children:N(z,{})}),N(p,{"aria-label":_(e=>e.increase),disabled:n,onClick:()=>v(t.value,!0),size:`icon-xs`,children:N(B,{})})]})]}),N(G,{error:y.error})]})})}function se({autoComplete:e=`off`,type:t=`password`,...n}){return N(J,{autoComplete:e,type:t,...n})}function ce(e){let t=A(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 P(a,{"data-invalid":r.invalid,...m,children:[d&&N(c,{htmlFor:l??u,children:d}),P(v,{autoComplete:n,disabled:t.disabled,name:t.name,onValueChange:t.onChange,value:t.value,children:[N(x,{"aria-invalid":r.invalid,id:l??(d?u:void 0),children:N(S,{placeholder:p})}),N(y,{children:f.map(le)})]}),i&&N(o,{children:i}),N(G,{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=N(O,{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 le(e){return N(b,{id:e.id,value:e.value,children:e.label},e.key??e.id??e.value)}function ue({label:e,loading:t=!1,type:r=`submit`,...i}){let{t:a}=j();return N(n,{disabled:t,type:r,...i,children:P(`div`,{className:`relative`,children:[N(`span`,{className:E({invisible:t}),children:e??a(e=>e.submit)}),N(C,{className:E(`trans absolute top-1/2 left-1/2 hidden -translate-x-1/2 -translate-y-1/2`,{block:t})})]})})}function de({control:e,disabled:t,inputId:n,inputName:r,label:i,onCheckedChange:o,orientation:s=`horizontal`,readOnly:l,uncheckedValue:u=``,value:d=`true`,...f}){return N(O,{control:e,disabled:t,name:r,render:({field:e,fieldState:t})=>P(a,{"data-invalid":t.invalid,orientation:s,...f,children:[N(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&&N(c,{htmlFor:n??r,children:i}),N(G,{error:t.error})]})})}function fe({autoComplete:e=`on`,type:t=`text`,...n}){return N(J,{autoComplete:e,type:t,...n})}function pe({cacheMeasurements:e,control:t,inputId:n,inputName:r,label:i,maxRows:o,minRows:s,onHeightChange:l,placeholder:u,resize:d=`none`,...f}){return N(O,{name:r,control:t,render:({field:t,fieldState:p})=>P(a,{"data-invalid":p.invalid,...f,children:[i&&N(c,{htmlFor:n??r,children:i}),N(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}),N(G,{error:p.error})]})})}export{K as CalendarField,q as CheckboxField,Y as EmailField,G as ErrorMonitor,X as FancyRadioField,Q as Form,te as HiddenField,ne as InfoCheckboxField,J as InputField,re as NullableSelectField,$ as NumericField,se as PasswordField,ce as SelectField,ue as Submit,de as SwitchField,fe as TextField,pe as TextareaField,H as i18n};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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-core'\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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"}
@@ -0,0 +1,42 @@
1
+ //#region src/locales/index.d.ts
2
+ declare const en: {
3
+ array: string;
4
+ date: string;
5
+ decrease: string;
6
+ email: string;
7
+ increase: string;
8
+ integer: string;
9
+ maxChars: string;
10
+ maxValue: string;
11
+ minChars: string;
12
+ minValue: string;
13
+ missing: string;
14
+ number: string;
15
+ numeric: string;
16
+ required: string;
17
+ reset: string;
18
+ string: string;
19
+ submit: string;
20
+ };
21
+ declare const it: {
22
+ array: string;
23
+ date: string;
24
+ decrease: string;
25
+ email: string;
26
+ increase: string;
27
+ integer: string;
28
+ maxChars: string;
29
+ maxValue: string;
30
+ minChars: string;
31
+ minValue: string;
32
+ missing: string;
33
+ number: string;
34
+ numeric: string;
35
+ required: string;
36
+ reset: string;
37
+ string: string;
38
+ submit: string;
39
+ };
40
+ //#endregion
41
+ export { en, it };
42
+ //# sourceMappingURL=locales.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.d.mts","names":[],"sources":["../src/locales/index.ts"],"mappings":";cAGM,EAAA;;;;;;;;;;;;;;;;;;;cACA,EAAA"}
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./en-CnkPOj-4.mjs";var t={translation:{array:`Il campo deve essere un array.`,date:`Il campo deve essere una data valida`,decrease:`Diminuisci`,email:`Il campo deve essere un indirizzo email valido.`,increase:`Aumenta`,integer:`Il campo deve essere un numero intero.`,maxChars:`Il campo non può contenere più di {{max}} caratteri.`,maxValue:`Il campo non può essere superiore a {{max}}.`,minChars:`Il campo deve contenere almeno {{min}} caratteri.`,minValue:`Il campo deve essere almeno {{min}}.`,missing:`Il valore non è supportato.`,number:`Il campo deve essere un numero.`,numeric:`Il campo deve essere un numero.`,required:`Il campo è obbligatorio.`,reset:`Reset`,string:`Il campo deve essere una stringa.`,submit:`Invia`}};const n=e.translation,r=t.translation;export{n as en,r as it};
2
+ //# sourceMappingURL=locales.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.mjs","names":["enResource","itResource"],"sources":["../src/locales/it.ts","../src/locales/index.ts"],"sourcesContent":["import type en from '@/locales/en'\n\nexport default {\n translation: {\n array: 'Il campo deve essere un array.',\n date: 'Il campo deve essere una data valida',\n decrease: 'Diminuisci',\n email: 'Il campo deve essere un indirizzo email valido.',\n increase: 'Aumenta',\n integer: 'Il campo deve essere un numero intero.',\n maxChars: 'Il campo non può contenere più di {{max}} caratteri.',\n maxValue: 'Il campo non può essere superiore a {{max}}.',\n minChars: 'Il campo deve contenere almeno {{min}} caratteri.',\n minValue: 'Il campo deve essere almeno {{min}}.',\n missing: 'Il valore non è supportato.',\n number: 'Il campo deve essere un numero.',\n numeric: 'Il campo deve essere un numero.',\n required: 'Il campo è obbligatorio.',\n reset: 'Reset',\n string: 'Il campo deve essere una stringa.',\n submit: 'Invia'\n }\n} satisfies typeof en\n","import enResource from './en'\nimport itResource from './it'\n\nconst en = enResource.translation\nconst it = itResource.translation\n\nexport { en, it }\n"],"mappings":"sCAEA,IAAA,EAAe,CACb,YAAa,CACX,MAAO,iCACP,KAAM,uCACN,SAAU,aACV,MAAO,kDACP,SAAU,UACV,QAAS,yCACT,SAAU,uDACV,SAAU,+CACV,SAAU,oDACV,SAAU,uCACV,QAAS,8BACT,OAAQ,kCACR,QAAS,kCACT,SAAU,2BACV,MAAO,QACP,OAAQ,oCACR,OAAQ,OACV,CACF,ECnBA,MAAM,EAAKA,EAAW,YAChB,EAAKC,EAAW"}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@gmcode/forms",
3
+ "version": "0.0.3",
4
+ "description": "Fully functional inertia react forms with client side validations.",
5
+ "keywords": [
6
+ "i18next",
7
+ "inertia",
8
+ "react",
9
+ "shadcn",
10
+ "tailwind",
11
+ "typescript",
12
+ "validations"
13
+ ],
14
+ "homepage": "https://github.com/GiromettaMarco/forms#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/GiromettaMarco/forms/issues"
17
+ },
18
+ "license": "MIT",
19
+ "author": "Girometta Marco",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/GiromettaMarco/forms.git"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "type": "module",
28
+ "sideEffects": false,
29
+ "exports": {
30
+ ".": "./dist/index.mjs",
31
+ "./locales": "./dist/locales.mjs",
32
+ "./package.json": "./package.json"
33
+ },
34
+ "dependencies": {
35
+ "@gmcode/react-ui": "^0.3.1",
36
+ "@gmcode/tsv-hookform": "^0.1.2",
37
+ "@gmcode/tsv-input": "^0.2.0",
38
+ "i18next": "^26.3.4",
39
+ "lucide-react": "^1.16.0",
40
+ "radix-ui": "^1.4.3",
41
+ "react-day-picker": "^10.0.1",
42
+ "react-hook-form": "^7.71.2",
43
+ "react-i18next": "^17.0.8",
44
+ "react-textarea-autosize": "^8.5.9",
45
+ "tailwindcss": "^4.3.0"
46
+ },
47
+ "devDependencies": {
48
+ "@babel/core": "^8.0.1",
49
+ "@gmcode/tsv-core": "^0.1.2",
50
+ "@rolldown/plugin-babel": "^0.2.3",
51
+ "@tailwindcss/vite": "^4.3.1",
52
+ "@types/babel__core": "^7.20.5",
53
+ "@types/react": "^19.2.17",
54
+ "@types/react-dom": "^19.2.3",
55
+ "@vitejs/plugin-react": "^6.0.2",
56
+ "@vitest/coverage-istanbul": "^4.1.10",
57
+ "babel-plugin-react-compiler": "^1.0.0",
58
+ "msw": "^2.15.0",
59
+ "playwright": "^1.60.0",
60
+ "tw-animate-css": "^1.4.0",
61
+ "typescript": "^6.0.3",
62
+ "vite": "^8.1.4",
63
+ "vite-plus": "^0.2.4",
64
+ "vitest": "^4.1.10",
65
+ "vitest-browser-react": "^2.2.0"
66
+ },
67
+ "peerDependencies": {
68
+ "@inertiajs/core": "^3.5.0",
69
+ "@inertiajs/react": "^3.5.0",
70
+ "react": "^19.2.7",
71
+ "react-dom": "^19.2.7"
72
+ },
73
+ "inlinedDependencies": {
74
+ "@gmcode/tsv-core": "0.1.2"
75
+ },
76
+ "msw": {
77
+ "workerDirectory": [
78
+ "public"
79
+ ]
80
+ },
81
+ "scripts": {
82
+ "build": "vp pack",
83
+ "test": "vp test run --coverage && node ../../tooling/scripts/badge.ts"
84
+ }
85
+ }