@ttoss/forms 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +137 -89
- package/dist/index.d.mts +37 -31
- package/dist/index.d.ts +37 -31
- package/dist/index.js +149 -95
- package/package.json +9 -10
- package/src/FormField.tsx +25 -25
- package/src/FormFieldCreditCardNumber.tsx +25 -0
- package/src/FormFieldCurrencyInput.tsx +36 -0
- package/src/FormFieldPatternFormat.tsx +36 -0
- package/src/FormFieldSelect.tsx +32 -85
- package/src/index.ts +3 -0
package/dist/index.js
CHANGED
|
@@ -42,9 +42,12 @@ __export(src_exports, {
|
|
|
42
42
|
Form: () => Form,
|
|
43
43
|
FormField: () => FormField,
|
|
44
44
|
FormFieldCheckbox: () => FormFieldCheckbox,
|
|
45
|
+
FormFieldCreditCardNumber: () => FormFieldCreditCardNumber,
|
|
46
|
+
FormFieldCurrencyInput: () => FormFieldCurrencyInput,
|
|
45
47
|
FormFieldInput: () => FormFieldInput,
|
|
46
48
|
FormFieldNumericFormat: () => FormFieldNumericFormat,
|
|
47
49
|
FormFieldPassword: () => FormFieldPassword,
|
|
50
|
+
FormFieldPatternFormat: () => FormFieldPatternFormat,
|
|
48
51
|
FormFieldRadio: () => FormFieldRadio,
|
|
49
52
|
FormFieldSelect: () => FormFieldSelect,
|
|
50
53
|
FormFieldTextarea: () => FormFieldTextarea,
|
|
@@ -178,9 +181,12 @@ var FormField = ({
|
|
|
178
181
|
id: idProp,
|
|
179
182
|
name,
|
|
180
183
|
defaultValue,
|
|
184
|
+
disabled,
|
|
185
|
+
tooltip,
|
|
186
|
+
onTooltipClick,
|
|
181
187
|
sx,
|
|
182
|
-
|
|
183
|
-
|
|
188
|
+
css,
|
|
189
|
+
render
|
|
184
190
|
}) => {
|
|
185
191
|
const controllerReturn = (0, import_react_hook_form3.useController)({
|
|
186
192
|
name,
|
|
@@ -191,10 +197,10 @@ var FormField = ({
|
|
|
191
197
|
return React2.Children.map(render(controllerReturn), child => {
|
|
192
198
|
return /* @__PURE__ */(0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, {
|
|
193
199
|
children: [label && /* @__PURE__ */(0, import_jsx_runtime3.jsx)(import_ui3.Label, {
|
|
194
|
-
"aria-disabled":
|
|
200
|
+
"aria-disabled": disabled,
|
|
195
201
|
htmlFor: id,
|
|
196
|
-
tooltip
|
|
197
|
-
onTooltipClick
|
|
202
|
+
tooltip,
|
|
203
|
+
onTooltipClick,
|
|
198
204
|
children: label
|
|
199
205
|
}), React2.createElement(child.type, {
|
|
200
206
|
id,
|
|
@@ -202,7 +208,7 @@ var FormField = ({
|
|
|
202
208
|
})]
|
|
203
209
|
});
|
|
204
210
|
});
|
|
205
|
-
}, [controllerReturn,
|
|
211
|
+
}, [controllerReturn, disabled, onTooltipClick, tooltip, id, label, render]);
|
|
206
212
|
return /* @__PURE__ */(0, import_jsx_runtime3.jsxs)(import_ui3.Flex, {
|
|
207
213
|
sx: {
|
|
208
214
|
flexDirection: "column",
|
|
@@ -210,6 +216,7 @@ var FormField = ({
|
|
|
210
216
|
gap: "md",
|
|
211
217
|
...sx
|
|
212
218
|
},
|
|
219
|
+
css,
|
|
213
220
|
children: [memoizedRender, /* @__PURE__ */(0, import_jsx_runtime3.jsx)(ErrorMessage, {
|
|
214
221
|
name
|
|
215
222
|
})]
|
|
@@ -272,38 +279,109 @@ var FormFieldCheckbox = ({
|
|
|
272
279
|
});
|
|
273
280
|
};
|
|
274
281
|
|
|
275
|
-
// src/
|
|
282
|
+
// src/FormFieldPatternFormat.tsx
|
|
276
283
|
var import_ui5 = require("@ttoss/ui");
|
|
277
284
|
var import_react_number_format = require("react-number-format");
|
|
278
285
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
286
|
+
var FormFieldPatternFormat = ({
|
|
287
|
+
label,
|
|
288
|
+
name,
|
|
289
|
+
...patternFormatProps
|
|
290
|
+
}) => {
|
|
291
|
+
return /* @__PURE__ */(0, import_jsx_runtime5.jsx)(FormField, {
|
|
292
|
+
name,
|
|
293
|
+
label,
|
|
294
|
+
render: ({
|
|
295
|
+
field,
|
|
296
|
+
fieldState
|
|
297
|
+
}) => {
|
|
298
|
+
return /* @__PURE__ */(0, import_jsx_runtime5.jsx)(import_react_number_format.PatternFormat, {
|
|
299
|
+
name: field.name,
|
|
300
|
+
value: field.value,
|
|
301
|
+
onBlur: field.onBlur,
|
|
302
|
+
onValueChange: values => {
|
|
303
|
+
field.onChange(values.value);
|
|
304
|
+
},
|
|
305
|
+
customInput: import_ui5.Input,
|
|
306
|
+
"aria-invalid": Boolean(fieldState.error).valueOf(),
|
|
307
|
+
...patternFormatProps
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
// src/FormFieldCreditCardNumber.tsx
|
|
314
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
315
|
+
var FormFieldCreditCardNumber = ({
|
|
316
|
+
label,
|
|
317
|
+
name,
|
|
318
|
+
...formFieldPatternFormatProps
|
|
319
|
+
}) => {
|
|
320
|
+
return /* @__PURE__ */(0, import_jsx_runtime6.jsx)(FormFieldPatternFormat, {
|
|
321
|
+
name,
|
|
322
|
+
label,
|
|
323
|
+
format: "#### #### #### ####",
|
|
324
|
+
placeholder: "1234 1234 1234 1234",
|
|
325
|
+
...formFieldPatternFormatProps
|
|
326
|
+
});
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
// src/FormFieldNumericFormat.tsx
|
|
330
|
+
var import_ui6 = require("@ttoss/ui");
|
|
331
|
+
var import_react_number_format2 = require("react-number-format");
|
|
332
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
279
333
|
var FormFieldNumericFormat = ({
|
|
280
334
|
label,
|
|
281
335
|
name,
|
|
282
336
|
...numericFormatProps
|
|
283
337
|
}) => {
|
|
284
|
-
return /* @__PURE__ */(0,
|
|
338
|
+
return /* @__PURE__ */(0, import_jsx_runtime7.jsx)(FormField, {
|
|
285
339
|
label,
|
|
286
340
|
name,
|
|
287
341
|
render: ({
|
|
288
342
|
field
|
|
289
343
|
}) => {
|
|
290
|
-
return /* @__PURE__ */(0,
|
|
344
|
+
return /* @__PURE__ */(0, import_jsx_runtime7.jsx)(import_react_number_format2.NumericFormat, {
|
|
291
345
|
name: field.name,
|
|
292
346
|
value: field.value,
|
|
293
347
|
onBlur: field.onBlur,
|
|
294
348
|
onValueChange: values => {
|
|
295
349
|
field.onChange(values.floatValue);
|
|
296
350
|
},
|
|
297
|
-
customInput:
|
|
351
|
+
customInput: import_ui6.Input,
|
|
298
352
|
...numericFormatProps
|
|
299
353
|
});
|
|
300
354
|
}
|
|
301
355
|
});
|
|
302
356
|
};
|
|
303
357
|
|
|
358
|
+
// src/FormFieldCurrencyInput.tsx
|
|
359
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
360
|
+
var FormFieldCurrencyInput = ({
|
|
361
|
+
label,
|
|
362
|
+
name,
|
|
363
|
+
prefix,
|
|
364
|
+
decimalSeparator,
|
|
365
|
+
thousandSeparator,
|
|
366
|
+
...formFieldNumericFormatProps
|
|
367
|
+
}) => {
|
|
368
|
+
return /* @__PURE__ */(0, import_jsx_runtime8.jsx)(FormFieldNumericFormat, {
|
|
369
|
+
name,
|
|
370
|
+
label,
|
|
371
|
+
fixedDecimalScale: true,
|
|
372
|
+
decimalScale: 2,
|
|
373
|
+
prefix,
|
|
374
|
+
decimalSeparator,
|
|
375
|
+
thousandSeparator,
|
|
376
|
+
placeholder: `${prefix} 0${decimalSeparator}00`,
|
|
377
|
+
allowNegative: false,
|
|
378
|
+
...formFieldNumericFormatProps
|
|
379
|
+
});
|
|
380
|
+
};
|
|
381
|
+
|
|
304
382
|
// src/FormFieldInput.tsx
|
|
305
|
-
var
|
|
306
|
-
var
|
|
383
|
+
var import_ui7 = require("@ttoss/ui");
|
|
384
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
307
385
|
var FormFieldInput = ({
|
|
308
386
|
label,
|
|
309
387
|
name,
|
|
@@ -313,7 +391,7 @@ var FormFieldInput = ({
|
|
|
313
391
|
defaultValue = "",
|
|
314
392
|
...inputProps
|
|
315
393
|
}) => {
|
|
316
|
-
return /* @__PURE__ */(0,
|
|
394
|
+
return /* @__PURE__ */(0, import_jsx_runtime9.jsx)(FormField, {
|
|
317
395
|
name,
|
|
318
396
|
label,
|
|
319
397
|
disabled: inputProps.disabled,
|
|
@@ -325,7 +403,7 @@ var FormFieldInput = ({
|
|
|
325
403
|
field,
|
|
326
404
|
fieldState
|
|
327
405
|
}) => {
|
|
328
|
-
return /* @__PURE__ */(0,
|
|
406
|
+
return /* @__PURE__ */(0, import_jsx_runtime9.jsx)(import_ui7.Input, {
|
|
329
407
|
...inputProps,
|
|
330
408
|
...field,
|
|
331
409
|
"aria-invalid": fieldState.error ? "true" : void 0
|
|
@@ -335,8 +413,8 @@ var FormFieldInput = ({
|
|
|
335
413
|
};
|
|
336
414
|
|
|
337
415
|
// src/FormFieldPassword.tsx
|
|
338
|
-
var
|
|
339
|
-
var
|
|
416
|
+
var import_ui8 = require("@ttoss/ui");
|
|
417
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
340
418
|
var FormFieldPassword = ({
|
|
341
419
|
label,
|
|
342
420
|
name,
|
|
@@ -346,7 +424,7 @@ var FormFieldPassword = ({
|
|
|
346
424
|
defaultValue = "",
|
|
347
425
|
...inputProps
|
|
348
426
|
}) => {
|
|
349
|
-
return /* @__PURE__ */(0,
|
|
427
|
+
return /* @__PURE__ */(0, import_jsx_runtime10.jsx)(FormField, {
|
|
350
428
|
name,
|
|
351
429
|
label,
|
|
352
430
|
disabled: inputProps.disabled,
|
|
@@ -358,7 +436,7 @@ var FormFieldPassword = ({
|
|
|
358
436
|
field,
|
|
359
437
|
fieldState
|
|
360
438
|
}) => {
|
|
361
|
-
return /* @__PURE__ */(0,
|
|
439
|
+
return /* @__PURE__ */(0, import_jsx_runtime10.jsx)(import_ui8.InputPassword, {
|
|
362
440
|
...inputProps,
|
|
363
441
|
...field,
|
|
364
442
|
"aria-invalid": fieldState.error ? "true" : void 0
|
|
@@ -368,9 +446,9 @@ var FormFieldPassword = ({
|
|
|
368
446
|
};
|
|
369
447
|
|
|
370
448
|
// src/FormFieldRadio.tsx
|
|
371
|
-
var
|
|
449
|
+
var import_ui9 = require("@ttoss/ui");
|
|
372
450
|
var import_react_hook_form5 = require("react-hook-form");
|
|
373
|
-
var
|
|
451
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
374
452
|
var FormFieldRadio = ({
|
|
375
453
|
label,
|
|
376
454
|
name,
|
|
@@ -389,23 +467,23 @@ var FormFieldRadio = ({
|
|
|
389
467
|
name,
|
|
390
468
|
defaultValue: ""
|
|
391
469
|
});
|
|
392
|
-
return /* @__PURE__ */(0,
|
|
470
|
+
return /* @__PURE__ */(0, import_jsx_runtime11.jsxs)(import_ui9.Flex, {
|
|
393
471
|
sx: {
|
|
394
472
|
flexDirection: "column",
|
|
395
473
|
width: "100%",
|
|
396
474
|
...sx
|
|
397
475
|
},
|
|
398
|
-
children: [label && /* @__PURE__ */(0,
|
|
476
|
+
children: [label && /* @__PURE__ */(0, import_jsx_runtime11.jsx)(import_ui9.Label, {
|
|
399
477
|
sx: {
|
|
400
478
|
marginBottom: "md"
|
|
401
479
|
},
|
|
402
480
|
children: label
|
|
403
|
-
}), /* @__PURE__ */(0,
|
|
481
|
+
}), /* @__PURE__ */(0, import_jsx_runtime11.jsx)(import_ui9.Box, {
|
|
404
482
|
children: options.map(option => {
|
|
405
483
|
const id = `form-field-radio-${name}-${option.value}`;
|
|
406
|
-
return /* @__PURE__ */(0,
|
|
484
|
+
return /* @__PURE__ */(0, import_jsx_runtime11.jsxs)(import_ui9.Label, {
|
|
407
485
|
htmlFor: id,
|
|
408
|
-
children: [/* @__PURE__ */(0,
|
|
486
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime11.jsx)(import_ui9.Radio, {
|
|
409
487
|
ref,
|
|
410
488
|
onChange,
|
|
411
489
|
onBlur,
|
|
@@ -417,91 +495,64 @@ var FormFieldRadio = ({
|
|
|
417
495
|
}), option.label]
|
|
418
496
|
}, id);
|
|
419
497
|
})
|
|
420
|
-
}), /* @__PURE__ */(0,
|
|
498
|
+
}), /* @__PURE__ */(0, import_jsx_runtime11.jsx)(ErrorMessage, {
|
|
421
499
|
name
|
|
422
500
|
})]
|
|
423
501
|
});
|
|
424
502
|
};
|
|
425
503
|
|
|
426
504
|
// src/FormFieldSelect.tsx
|
|
427
|
-
var
|
|
428
|
-
var
|
|
429
|
-
var checkDefaultValue = ({
|
|
430
|
-
options,
|
|
431
|
-
defaultValue,
|
|
432
|
-
placeholder
|
|
433
|
-
}) => {
|
|
434
|
-
if (defaultValue) {
|
|
435
|
-
return defaultValue;
|
|
436
|
-
}
|
|
437
|
-
const hasEmptyValue = options.some(opt => {
|
|
438
|
-
return opt.value === "" || opt.value === 0;
|
|
439
|
-
});
|
|
440
|
-
const EMPTY_VALUE = "";
|
|
441
|
-
if (placeholder && hasEmptyValue) {
|
|
442
|
-
return EMPTY_VALUE;
|
|
443
|
-
}
|
|
444
|
-
if (placeholder && !hasEmptyValue) {
|
|
445
|
-
options.unshift({
|
|
446
|
-
label: placeholder,
|
|
447
|
-
value: ""
|
|
448
|
-
});
|
|
449
|
-
return EMPTY_VALUE;
|
|
450
|
-
}
|
|
451
|
-
if (!placeholder && defaultValue) return EMPTY_VALUE;
|
|
452
|
-
if (options.length === 0) return EMPTY_VALUE;
|
|
453
|
-
return options?.[0]?.value;
|
|
454
|
-
};
|
|
505
|
+
var import_ui10 = require("@ttoss/ui");
|
|
506
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
455
507
|
var FormFieldSelect = ({
|
|
456
508
|
label,
|
|
457
509
|
name,
|
|
458
|
-
|
|
510
|
+
id,
|
|
511
|
+
defaultValue,
|
|
459
512
|
sx,
|
|
513
|
+
css,
|
|
514
|
+
disabled,
|
|
515
|
+
tooltip,
|
|
516
|
+
onTooltipClick,
|
|
460
517
|
...selectProps
|
|
461
518
|
}) => {
|
|
462
|
-
|
|
463
|
-
defaultValue,
|
|
464
|
-
placeholder
|
|
465
|
-
} = selectProps;
|
|
466
|
-
const checkedDefaultValue = checkDefaultValue({
|
|
467
|
-
options,
|
|
468
|
-
defaultValue,
|
|
469
|
-
placeholder
|
|
470
|
-
});
|
|
471
|
-
return /* @__PURE__ */(0, import_jsx_runtime9.jsx)(FormField, {
|
|
519
|
+
return /* @__PURE__ */(0, import_jsx_runtime12.jsx)(FormField, {
|
|
472
520
|
name,
|
|
473
521
|
label,
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
522
|
+
id,
|
|
523
|
+
defaultValue,
|
|
524
|
+
disabled,
|
|
525
|
+
tooltip,
|
|
526
|
+
onTooltipClick,
|
|
477
527
|
sx,
|
|
478
|
-
|
|
528
|
+
css,
|
|
479
529
|
render: ({
|
|
480
530
|
field,
|
|
481
531
|
fieldState
|
|
482
532
|
}) => {
|
|
483
|
-
|
|
533
|
+
const value = selectProps.options?.find(option => {
|
|
534
|
+
if ("value" in option) {
|
|
535
|
+
return option.value === field.value;
|
|
536
|
+
}
|
|
537
|
+
return false;
|
|
538
|
+
});
|
|
539
|
+
return /* @__PURE__ */(0, import_jsx_runtime12.jsx)(import_ui10.Select, {
|
|
484
540
|
...selectProps,
|
|
485
541
|
...field,
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
542
|
+
defaultValue: value,
|
|
543
|
+
value,
|
|
544
|
+
onChange: value2 => {
|
|
545
|
+
field.onChange(value2?.value);
|
|
489
546
|
},
|
|
490
|
-
"aria-invalid": fieldState.error ? "true" : void 0
|
|
491
|
-
children: options.map(option => {
|
|
492
|
-
return /* @__PURE__ */(0, import_jsx_runtime9.jsx)("option", {
|
|
493
|
-
value: option.value,
|
|
494
|
-
children: option.label
|
|
495
|
-
}, option.label);
|
|
496
|
-
})
|
|
547
|
+
"aria-invalid": fieldState.error ? "true" : void 0
|
|
497
548
|
});
|
|
498
549
|
}
|
|
499
550
|
});
|
|
500
551
|
};
|
|
501
552
|
|
|
502
553
|
// src/FormFieldTextarea.tsx
|
|
503
|
-
var
|
|
504
|
-
var
|
|
554
|
+
var import_ui11 = require("@ttoss/ui");
|
|
555
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
505
556
|
var FormFieldTextarea = ({
|
|
506
557
|
label,
|
|
507
558
|
name,
|
|
@@ -509,7 +560,7 @@ var FormFieldTextarea = ({
|
|
|
509
560
|
...textareaProps
|
|
510
561
|
}) => {
|
|
511
562
|
const id = `form-field-textarea-${name}`;
|
|
512
|
-
return /* @__PURE__ */(0,
|
|
563
|
+
return /* @__PURE__ */(0, import_jsx_runtime13.jsx)(FormField, {
|
|
513
564
|
label,
|
|
514
565
|
name,
|
|
515
566
|
id,
|
|
@@ -518,7 +569,7 @@ var FormFieldTextarea = ({
|
|
|
518
569
|
field,
|
|
519
570
|
fieldState
|
|
520
571
|
}) => {
|
|
521
|
-
return /* @__PURE__ */(0,
|
|
572
|
+
return /* @__PURE__ */(0, import_jsx_runtime13.jsx)(import_ui11.Textarea, {
|
|
522
573
|
...field,
|
|
523
574
|
...textareaProps,
|
|
524
575
|
"aria-invalid": fieldState.error ? "true" : void 0
|
|
@@ -529,8 +580,8 @@ var FormFieldTextarea = ({
|
|
|
529
580
|
|
|
530
581
|
// src/FormGroup.tsx
|
|
531
582
|
var React3 = __toESM(require("react"));
|
|
532
|
-
var
|
|
533
|
-
var
|
|
583
|
+
var import_ui12 = require("@ttoss/ui");
|
|
584
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
534
585
|
var FormGroupLevelsManagerContext = React3.createContext({
|
|
535
586
|
levelsLength: 1,
|
|
536
587
|
registerChild: () => {
|
|
@@ -546,7 +597,7 @@ var FormGroupLevelsManager = ({
|
|
|
546
597
|
setLevelsLength(level + 1);
|
|
547
598
|
}
|
|
548
599
|
}, [levelsLength]);
|
|
549
|
-
return /* @__PURE__ */(0,
|
|
600
|
+
return /* @__PURE__ */(0, import_jsx_runtime14.jsx)(FormGroupLevelsManagerContext.Provider, {
|
|
550
601
|
value: {
|
|
551
602
|
levelsLength,
|
|
552
603
|
registerChild
|
|
@@ -589,7 +640,7 @@ var FormGroupWrapper = ({
|
|
|
589
640
|
gap: "md",
|
|
590
641
|
width: "100%"
|
|
591
642
|
};
|
|
592
|
-
return /* @__PURE__ */(0,
|
|
643
|
+
return /* @__PURE__ */(0, import_jsx_runtime14.jsxs)(import_ui12.Box, {
|
|
593
644
|
"aria-level": level,
|
|
594
645
|
...boxProps,
|
|
595
646
|
sx: {
|
|
@@ -597,18 +648,18 @@ var FormGroupWrapper = ({
|
|
|
597
648
|
marginBottom: "lg",
|
|
598
649
|
...boxProps.sx
|
|
599
650
|
},
|
|
600
|
-
children: [title && /* @__PURE__ */(0,
|
|
651
|
+
children: [title && /* @__PURE__ */(0, import_jsx_runtime14.jsx)(import_ui12.Box, {
|
|
601
652
|
sx: {
|
|
602
653
|
marginBottom: "md"
|
|
603
654
|
},
|
|
604
|
-
children: /* @__PURE__ */(0,
|
|
655
|
+
children: /* @__PURE__ */(0, import_jsx_runtime14.jsx)(import_ui12.Text, {
|
|
605
656
|
sx: {
|
|
606
657
|
fontSize: "2xl",
|
|
607
658
|
fontWeight: "bold"
|
|
608
659
|
},
|
|
609
660
|
children: title
|
|
610
661
|
})
|
|
611
|
-
}), /* @__PURE__ */(0,
|
|
662
|
+
}), /* @__PURE__ */(0, import_jsx_runtime14.jsx)(import_ui12.Flex, {
|
|
612
663
|
sx: childrenContainerSx,
|
|
613
664
|
children
|
|
614
665
|
})]
|
|
@@ -619,15 +670,15 @@ var FormGroup = props => {
|
|
|
619
670
|
level
|
|
620
671
|
} = useFormGroup();
|
|
621
672
|
const currentLevel = level === void 0 ? 0 : level + 1;
|
|
622
|
-
return /* @__PURE__ */(0,
|
|
673
|
+
return /* @__PURE__ */(0, import_jsx_runtime14.jsx)(FormGroupContext.Provider, {
|
|
623
674
|
value: {
|
|
624
675
|
parentLevel: currentLevel
|
|
625
676
|
},
|
|
626
|
-
children: currentLevel === 0 ? /* @__PURE__ */(0,
|
|
627
|
-
children: /* @__PURE__ */(0,
|
|
677
|
+
children: currentLevel === 0 ? /* @__PURE__ */(0, import_jsx_runtime14.jsx)(FormGroupLevelsManager, {
|
|
678
|
+
children: /* @__PURE__ */(0, import_jsx_runtime14.jsx)(FormGroupWrapper, {
|
|
628
679
|
...props
|
|
629
680
|
})
|
|
630
|
-
}) : /* @__PURE__ */(0,
|
|
681
|
+
}) : /* @__PURE__ */(0, import_jsx_runtime14.jsx)(FormGroupWrapper, {
|
|
631
682
|
...props
|
|
632
683
|
})
|
|
633
684
|
});
|
|
@@ -637,9 +688,12 @@ var FormGroup = props => {
|
|
|
637
688
|
Form,
|
|
638
689
|
FormField,
|
|
639
690
|
FormFieldCheckbox,
|
|
691
|
+
FormFieldCreditCardNumber,
|
|
692
|
+
FormFieldCurrencyInput,
|
|
640
693
|
FormFieldInput,
|
|
641
694
|
FormFieldNumericFormat,
|
|
642
695
|
FormFieldPassword,
|
|
696
|
+
FormFieldPatternFormat,
|
|
643
697
|
FormFieldRadio,
|
|
644
698
|
FormFieldSelect,
|
|
645
699
|
FormFieldTextarea,
|
package/package.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ttoss/forms",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"license": "UNLICENSED",
|
|
3
|
+
"version": "0.21.0",
|
|
5
4
|
"author": "ttoss",
|
|
6
5
|
"contributors": [
|
|
7
6
|
"Pedro Arantes <pedro@arantespp.com> (https://arantespp.com/contact)"
|
|
@@ -21,31 +20,31 @@
|
|
|
21
20
|
"typings": "dist/index.d.ts",
|
|
22
21
|
"dependencies": {
|
|
23
22
|
"@hookform/error-message": "^2.0.1",
|
|
24
|
-
"@hookform/resolvers": "^3.
|
|
25
|
-
"react-hook-form": "^7.
|
|
23
|
+
"@hookform/resolvers": "^3.3.2",
|
|
24
|
+
"react-hook-form": "^7.48.2",
|
|
26
25
|
"react-number-format": "^5.3.1",
|
|
27
|
-
"yup": "^1.2
|
|
26
|
+
"yup": "^1.3.2"
|
|
28
27
|
},
|
|
29
28
|
"peerDependencies": {
|
|
30
29
|
"react": ">=16.8.0",
|
|
31
30
|
"@ttoss/react-i18n": "^1.25.1",
|
|
32
|
-
"@ttoss/ui": "^
|
|
31
|
+
"@ttoss/ui": "^4.0.0"
|
|
33
32
|
},
|
|
34
33
|
"devDependencies": {
|
|
35
34
|
"@types/jest": "^29.5.5",
|
|
36
35
|
"@types/react": "^18.2.29",
|
|
37
36
|
"jest": "^29.7.0",
|
|
38
37
|
"react": "^18.2.0",
|
|
39
|
-
"react-error-boundary": "^4.0.
|
|
40
|
-
"react-hook-form": "^7.
|
|
38
|
+
"react-error-boundary": "^4.0.11",
|
|
39
|
+
"react-hook-form": "^7.48.2",
|
|
41
40
|
"theme-ui": "^0.16.1",
|
|
42
41
|
"tsup": "^7.2.0",
|
|
43
|
-
"yup": "^1.2
|
|
42
|
+
"yup": "^1.3.2",
|
|
44
43
|
"@ttoss/config": "^1.31.0",
|
|
45
44
|
"@ttoss/i18n-cli": "^0.7.0",
|
|
46
45
|
"@ttoss/react-i18n": "^1.25.1",
|
|
47
46
|
"@ttoss/test-utils": "^1.24.1",
|
|
48
|
-
"@ttoss/ui": "^
|
|
47
|
+
"@ttoss/ui": "^4.0.0"
|
|
49
48
|
},
|
|
50
49
|
"publishConfig": {
|
|
51
50
|
"access": "public",
|
package/src/FormField.tsx
CHANGED
|
@@ -7,39 +7,44 @@ import {
|
|
|
7
7
|
UseControllerReturn,
|
|
8
8
|
useController,
|
|
9
9
|
} from 'react-hook-form';
|
|
10
|
-
import { Flex, type
|
|
10
|
+
import { Flex, Label, type SxProp } from '@ttoss/ui';
|
|
11
11
|
|
|
12
|
-
export type FormFieldProps
|
|
13
|
-
|
|
12
|
+
export type FormFieldProps<
|
|
13
|
+
TFieldValues extends FieldValues = FieldValues,
|
|
14
|
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
15
|
+
> = {
|
|
16
|
+
label?: string;
|
|
17
|
+
id?: string;
|
|
18
|
+
name: TName;
|
|
19
|
+
defaultValue?: FieldPathValue<TFieldValues, TName>;
|
|
14
20
|
disabled?: boolean;
|
|
15
21
|
tooltip?: boolean;
|
|
16
22
|
onTooltipClick?: () => void;
|
|
17
|
-
};
|
|
23
|
+
} & SxProp;
|
|
18
24
|
|
|
19
25
|
type FormFieldCompleteProps<
|
|
20
26
|
TFieldValues extends FieldValues = FieldValues,
|
|
21
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues
|
|
27
|
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
22
28
|
> = {
|
|
23
|
-
label?: string;
|
|
24
|
-
id?: string;
|
|
25
|
-
name: TName;
|
|
26
|
-
defaultValue?: FieldPathValue<TFieldValues, TName>;
|
|
27
29
|
render: (
|
|
28
30
|
props: UseControllerReturn<TFieldValues, TName>
|
|
29
31
|
) => React.ReactElement;
|
|
30
|
-
} & FormFieldProps
|
|
32
|
+
} & FormFieldProps<TFieldValues, TName>;
|
|
31
33
|
|
|
32
34
|
export const FormField = <
|
|
33
35
|
TFieldValues extends FieldValues = FieldValues,
|
|
34
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues
|
|
36
|
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
35
37
|
>({
|
|
36
38
|
label,
|
|
37
39
|
id: idProp,
|
|
38
40
|
name,
|
|
39
41
|
defaultValue,
|
|
42
|
+
disabled,
|
|
43
|
+
tooltip,
|
|
44
|
+
onTooltipClick,
|
|
40
45
|
sx,
|
|
46
|
+
css,
|
|
41
47
|
render,
|
|
42
|
-
...formFieldProps
|
|
43
48
|
}: FormFieldCompleteProps<TFieldValues, TName>) => {
|
|
44
49
|
const controllerReturn = useController<TFieldValues, TName>({
|
|
45
50
|
name,
|
|
@@ -54,10 +59,10 @@ export const FormField = <
|
|
|
54
59
|
<>
|
|
55
60
|
{label && (
|
|
56
61
|
<Label
|
|
57
|
-
aria-disabled={
|
|
62
|
+
aria-disabled={disabled}
|
|
58
63
|
htmlFor={id}
|
|
59
|
-
tooltip={
|
|
60
|
-
onTooltipClick={
|
|
64
|
+
tooltip={tooltip}
|
|
65
|
+
onTooltipClick={onTooltipClick}
|
|
61
66
|
>
|
|
62
67
|
{label}
|
|
63
68
|
</Label>
|
|
@@ -67,18 +72,13 @@ export const FormField = <
|
|
|
67
72
|
</>
|
|
68
73
|
);
|
|
69
74
|
});
|
|
70
|
-
}, [
|
|
71
|
-
controllerReturn,
|
|
72
|
-
formFieldProps.disabled,
|
|
73
|
-
formFieldProps.onTooltipClick,
|
|
74
|
-
formFieldProps.tooltip,
|
|
75
|
-
id,
|
|
76
|
-
label,
|
|
77
|
-
render,
|
|
78
|
-
]);
|
|
75
|
+
}, [controllerReturn, disabled, onTooltipClick, tooltip, id, label, render]);
|
|
79
76
|
|
|
80
77
|
return (
|
|
81
|
-
<Flex
|
|
78
|
+
<Flex
|
|
79
|
+
sx={{ flexDirection: 'column', width: '100%', gap: 'md', ...sx }}
|
|
80
|
+
css={css}
|
|
81
|
+
>
|
|
82
82
|
{memoizedRender}
|
|
83
83
|
<ErrorMessage name={name} />
|
|
84
84
|
</Flex>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FormFieldPatternFormat,
|
|
3
|
+
FormFieldPatternFormatProps,
|
|
4
|
+
} from './FormFieldPatternFormat';
|
|
5
|
+
|
|
6
|
+
export type FormFieldCreditCardNumberProps = {
|
|
7
|
+
label: string;
|
|
8
|
+
name: string;
|
|
9
|
+
} & Partial<FormFieldPatternFormatProps>;
|
|
10
|
+
|
|
11
|
+
export const FormFieldCreditCardNumber = ({
|
|
12
|
+
label,
|
|
13
|
+
name,
|
|
14
|
+
...formFieldPatternFormatProps
|
|
15
|
+
}: FormFieldCreditCardNumberProps) => {
|
|
16
|
+
return (
|
|
17
|
+
<FormFieldPatternFormat
|
|
18
|
+
name={name}
|
|
19
|
+
label={label}
|
|
20
|
+
format="#### #### #### ####"
|
|
21
|
+
placeholder="1234 1234 1234 1234"
|
|
22
|
+
{...formFieldPatternFormatProps}
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FormFieldNumericFormat,
|
|
3
|
+
FormFieldNumericFormatProps,
|
|
4
|
+
} from './FormFieldNumericFormat';
|
|
5
|
+
|
|
6
|
+
export type FormFieldCurrencyInputProps = {
|
|
7
|
+
label?: string;
|
|
8
|
+
name: string;
|
|
9
|
+
prefix: string;
|
|
10
|
+
decimalSeparator: string;
|
|
11
|
+
thousandSeparator: string;
|
|
12
|
+
} & FormFieldNumericFormatProps;
|
|
13
|
+
|
|
14
|
+
export const FormFieldCurrencyInput = ({
|
|
15
|
+
label,
|
|
16
|
+
name,
|
|
17
|
+
prefix,
|
|
18
|
+
decimalSeparator,
|
|
19
|
+
thousandSeparator,
|
|
20
|
+
...formFieldNumericFormatProps
|
|
21
|
+
}: FormFieldCurrencyInputProps) => {
|
|
22
|
+
return (
|
|
23
|
+
<FormFieldNumericFormat
|
|
24
|
+
name={name}
|
|
25
|
+
label={label}
|
|
26
|
+
fixedDecimalScale
|
|
27
|
+
decimalScale={2}
|
|
28
|
+
prefix={prefix}
|
|
29
|
+
decimalSeparator={decimalSeparator}
|
|
30
|
+
thousandSeparator={thousandSeparator}
|
|
31
|
+
placeholder={`${prefix} 0${decimalSeparator}00`}
|
|
32
|
+
allowNegative={false}
|
|
33
|
+
{...formFieldNumericFormatProps}
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
};
|