@ttoss/forms 0.31.4 → 0.31.6

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.
@@ -0,0 +1,972 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ var __defProp = Object.defineProperty;
3
+ var __name = (target, value) => __defProp(target, "name", {
4
+ value,
5
+ configurable: true
6
+ });
7
+
8
+ // src/Form.tsx
9
+ import { Box } from "@ttoss/ui";
10
+ import * as React2 from "react";
11
+ import { FormProvider } from "react-hook-form";
12
+ var Form = /* @__PURE__ */__name(({
13
+ children,
14
+ onSubmit,
15
+ sx,
16
+ ...formMethods
17
+ }) => {
18
+ return /* @__PURE__ */React2.createElement(FormProvider, formMethods, /* @__PURE__ */React2.createElement(Box, {
19
+ as: "form",
20
+ variant: "forms.form",
21
+ onSubmit: formMethods.handleSubmit(data => {
22
+ return onSubmit?.(data);
23
+ }),
24
+ sx
25
+ }, children));
26
+ }, "Form");
27
+
28
+ // src/FormErrorMessage.tsx
29
+ import { ErrorMessage } from "@hookform/error-message";
30
+ import { FormattedMessage } from "@ttoss/react-i18n";
31
+ import { HelpText } from "@ttoss/ui";
32
+ import { useFormContext } from "react-hook-form";
33
+ var isMessageDescriptor = /* @__PURE__ */__name(possibleMessageDescriptor => {
34
+ return possibleMessageDescriptor !== void 0 && possibleMessageDescriptor.defaultMessage !== void 0;
35
+ }, "isMessageDescriptor");
36
+ var FormErrorMessage = /* @__PURE__ */__name(({
37
+ name,
38
+ disabled
39
+ }) => {
40
+ const {
41
+ formState: {
42
+ errors
43
+ }
44
+ } = useFormContext();
45
+ return /* @__PURE__ */React.createElement(ErrorMessage, {
46
+ name,
47
+ errors,
48
+ render: /* @__PURE__ */__name(({
49
+ message
50
+ }) => {
51
+ return /* @__PURE__ */React.createElement(HelpText, {
52
+ negative: true,
53
+ disabled
54
+ }, (() => {
55
+ if (typeof message === "string") {
56
+ return message;
57
+ }
58
+ if (isMessageDescriptor(message)) {
59
+ return /* @__PURE__ */React.createElement(FormattedMessage, message);
60
+ }
61
+ return JSON.stringify(message);
62
+ })());
63
+ }, "render")
64
+ });
65
+ }, "FormErrorMessage");
66
+
67
+ // src/FormField.tsx
68
+ import { Checkbox, Flex, Label, Switch, Tooltip } from "@ttoss/ui";
69
+ import * as React3 from "react";
70
+ import { useController, useFormContext as useFormContext2 } from "react-hook-form";
71
+ var FormField = /* @__PURE__ */__name(({
72
+ label,
73
+ id: idProp,
74
+ name,
75
+ defaultValue,
76
+ disabled,
77
+ tooltip,
78
+ inputTooltip,
79
+ sx,
80
+ css,
81
+ render,
82
+ warning
83
+ }) => {
84
+ const controllerReturn = useController({
85
+ name,
86
+ defaultValue
87
+ });
88
+ const {
89
+ formState: {
90
+ errors
91
+ }
92
+ } = useFormContext2();
93
+ const hasError = !!errors[name];
94
+ const uniqueId = React3.useId();
95
+ const id = idProp || `form-field-${name}-${uniqueId}`;
96
+ const tooltipId = `${id}-tooltip`;
97
+ const [showInputTooltip, setShowInputTooltip] = React3.useState(false);
98
+ const inputRef = React3.useRef(null);
99
+ React3.useEffect(() => {
100
+ if (!inputTooltip) return;
101
+ const handleClickOutside = /* @__PURE__ */__name(event => {
102
+ if (inputRef.current && !inputRef.current.contains(event.target)) {
103
+ setShowInputTooltip(false);
104
+ }
105
+ }, "handleClickOutside");
106
+ const handleEscapeKey = /* @__PURE__ */__name(event => {
107
+ if (event.key === "Escape") {
108
+ setShowInputTooltip(false);
109
+ }
110
+ }, "handleEscapeKey");
111
+ if (showInputTooltip) {
112
+ document.addEventListener("mousedown", handleClickOutside);
113
+ document.addEventListener("keydown", handleEscapeKey);
114
+ }
115
+ return () => {
116
+ document.removeEventListener("mousedown", handleClickOutside);
117
+ document.removeEventListener("keydown", handleEscapeKey);
118
+ };
119
+ }, [showInputTooltip, inputTooltip]);
120
+ const memoizedRender = React3.useMemo(() => {
121
+ return React3.Children.map(render(controllerReturn), child => {
122
+ if (! /* @__PURE__ */React3.isValidElement(child)) {
123
+ return null;
124
+ }
125
+ const childProps = child.props;
126
+ const inputProps = {
127
+ ...childProps,
128
+ ref: inputRef,
129
+ onClick: /* @__PURE__ */__name(e => {
130
+ childProps.onClick?.(e);
131
+ if (inputTooltip) {
132
+ setShowInputTooltip(true);
133
+ }
134
+ }, "onClick"),
135
+ onFocus: /* @__PURE__ */__name(e => {
136
+ childProps.onFocus?.(e);
137
+ if (inputTooltip && !inputTooltip.openOnClick) {
138
+ setShowInputTooltip(true);
139
+ }
140
+ }, "onFocus"),
141
+ onBlur: /* @__PURE__ */__name(e => {
142
+ childProps.onBlur?.(e);
143
+ if (inputTooltip && !inputTooltip.openOnClick) {
144
+ setShowInputTooltip(false);
145
+ }
146
+ }, "onBlur"),
147
+ ...(inputTooltip && showInputTooltip ? {
148
+ "data-tooltip-id": tooltipId
149
+ } : {})
150
+ };
151
+ if (label && [Checkbox, Switch].some(component => {
152
+ return child.type === component;
153
+ })) {
154
+ return /* @__PURE__ */React3.createElement(React3.Fragment, null, /* @__PURE__ */React3.createElement(Label, {
155
+ "aria-disabled": disabled,
156
+ tooltip
157
+ }, /* @__PURE__ */React3.createElement(Flex, null, warning ? /* @__PURE__ */React3.createElement(child.type, {
158
+ id,
159
+ ...inputProps,
160
+ ...(warning ? {
161
+ trailingIcon: "warning-alt"
162
+ } : {})
163
+ }) : /* @__PURE__ */React3.createElement(child.type, {
164
+ id,
165
+ ...inputProps
166
+ })), label), inputTooltip && showInputTooltip && /* @__PURE__ */React3.createElement(Flex, {
167
+ sx: {
168
+ width: "full",
169
+ fontSize: "sm"
170
+ }
171
+ }, /* @__PURE__ */React3.createElement(Tooltip, {
172
+ id: tooltipId,
173
+ place: inputTooltip.place,
174
+ clickable: inputTooltip.clickable,
175
+ isOpen: showInputTooltip,
176
+ variant: inputTooltip.variant
177
+ }, inputTooltip.render)));
178
+ }
179
+ return /* @__PURE__ */React3.createElement(Flex, {
180
+ sx: {
181
+ width: "full",
182
+ flexDirection: "column",
183
+ gap: "2"
184
+ }
185
+ }, label && /* @__PURE__ */React3.createElement(Label, {
186
+ "aria-disabled": disabled,
187
+ htmlFor: id,
188
+ tooltip
189
+ }, label), warning ? /* @__PURE__ */React3.createElement(child.type, {
190
+ id,
191
+ ...inputProps,
192
+ ...(warning ? {
193
+ trailingIcon: "warning-alt"
194
+ } : {})
195
+ }) : /* @__PURE__ */React3.createElement(child.type, {
196
+ id,
197
+ ...inputProps
198
+ }), inputTooltip && showInputTooltip && /* @__PURE__ */React3.createElement(Flex, {
199
+ sx: {
200
+ width: "full",
201
+ fontSize: "sm"
202
+ }
203
+ }, /* @__PURE__ */React3.createElement(Tooltip, {
204
+ id: tooltipId,
205
+ place: inputTooltip.place,
206
+ clickable: inputTooltip.clickable,
207
+ isOpen: showInputTooltip,
208
+ variant: inputTooltip.variant,
209
+ sx: inputTooltip.sx
210
+ }, inputTooltip.render)));
211
+ });
212
+ }, [render, controllerReturn, label, disabled, id, tooltip, warning, inputTooltip, showInputTooltip, tooltipId]);
213
+ return /* @__PURE__ */React3.createElement(Flex, {
214
+ sx: {
215
+ flexDirection: "column",
216
+ width: "100%",
217
+ gap: "1",
218
+ ...sx
219
+ },
220
+ css
221
+ }, memoizedRender, /* @__PURE__ */React3.createElement(FormErrorMessage, {
222
+ name
223
+ }), warning && !hasError && /* @__PURE__ */React3.createElement(Flex, {
224
+ className: "warning",
225
+ sx: {
226
+ color: "feedback.text.caution.default",
227
+ fontSize: "sm",
228
+ gap: "2",
229
+ paddingBottom: "1",
230
+ alignItems: "center"
231
+ }
232
+ }, warning));
233
+ }, "FormField");
234
+
235
+ // src/FormFieldCheckbox.tsx
236
+ import { Checkbox as Checkbox2 } from "@ttoss/ui";
237
+ var FormFieldCheckbox = /* @__PURE__ */__name(({
238
+ label,
239
+ name,
240
+ sx,
241
+ tooltip,
242
+ ...checkboxProps
243
+ }) => {
244
+ return /* @__PURE__ */React.createElement(FormField, {
245
+ label,
246
+ name,
247
+ tooltip,
248
+ render: /* @__PURE__ */__name(({
249
+ field,
250
+ fieldState
251
+ }) => {
252
+ return /* @__PURE__ */React.createElement(Checkbox2, {
253
+ ...field,
254
+ ...checkboxProps,
255
+ "aria-invalid": !!fieldState.error,
256
+ sx
257
+ });
258
+ }, "render")
259
+ });
260
+ }, "FormFieldCheckbox");
261
+
262
+ // src/FormFieldPatternFormat.tsx
263
+ import { Input } from "@ttoss/ui";
264
+ import { PatternFormat } from "react-number-format";
265
+ var FormFieldPatternFormat = /* @__PURE__ */__name(({
266
+ label,
267
+ name,
268
+ warning,
269
+ inputTooltip,
270
+ ...patternFormatProps
271
+ }) => {
272
+ return /* @__PURE__ */React.createElement(FormField, {
273
+ name,
274
+ label,
275
+ warning,
276
+ inputTooltip,
277
+ render: /* @__PURE__ */__name(({
278
+ field,
279
+ fieldState
280
+ }) => {
281
+ return /* @__PURE__ */React.createElement(PatternFormat, {
282
+ name: field.name,
283
+ value: field.value,
284
+ onBlur: field.onBlur,
285
+ onValueChange: /* @__PURE__ */__name(values => {
286
+ field.onChange(values.value);
287
+ }, "onValueChange"),
288
+ customInput: Input,
289
+ "aria-invalid": Boolean(fieldState.error).valueOf(),
290
+ ...patternFormatProps
291
+ });
292
+ }, "render")
293
+ });
294
+ }, "FormFieldPatternFormat");
295
+
296
+ // src/FormFieldCreditCardNumber.tsx
297
+ var FormFieldCreditCardNumber = /* @__PURE__ */__name(({
298
+ label,
299
+ name,
300
+ ...formFieldPatternFormatProps
301
+ }) => {
302
+ return /* @__PURE__ */React.createElement(FormFieldPatternFormat, {
303
+ name,
304
+ label,
305
+ warning: formFieldPatternFormatProps.warning,
306
+ format: "#### #### #### ####",
307
+ placeholder: "1234 1234 1234 1234",
308
+ ...formFieldPatternFormatProps
309
+ });
310
+ }, "FormFieldCreditCardNumber");
311
+
312
+ // src/FormFieldNumericFormat.tsx
313
+ import { Input as Input2 } from "@ttoss/ui";
314
+ import * as React4 from "react";
315
+ import { NumericFormat } from "react-number-format";
316
+ var FormFieldNumericFormat = /* @__PURE__ */__name(({
317
+ label,
318
+ name,
319
+ warning,
320
+ tooltip,
321
+ inputTooltip,
322
+ ...numericFormatProps
323
+ }) => {
324
+ return /* @__PURE__ */React4.createElement(FormField, {
325
+ label,
326
+ name,
327
+ warning,
328
+ tooltip,
329
+ inputTooltip,
330
+ render: /* @__PURE__ */__name(({
331
+ field
332
+ }) => {
333
+ return /* @__PURE__ */React4.createElement(NumericFormat, {
334
+ name: field.name,
335
+ value: field.value,
336
+ onBlur: field.onBlur,
337
+ onValueChange: /* @__PURE__ */__name(values => {
338
+ field.onChange(values.floatValue);
339
+ }, "onValueChange"),
340
+ customInput: Input2,
341
+ ...numericFormatProps
342
+ });
343
+ }, "render")
344
+ });
345
+ }, "FormFieldNumericFormat");
346
+
347
+ // src/FormFieldCurrencyInput.tsx
348
+ var FormFieldCurrencyInput = /* @__PURE__ */__name(({
349
+ label,
350
+ name,
351
+ prefix,
352
+ decimalSeparator,
353
+ thousandSeparator,
354
+ ...formFieldNumericFormatProps
355
+ }) => {
356
+ return /* @__PURE__ */React.createElement(FormFieldNumericFormat, {
357
+ name,
358
+ label,
359
+ warning: formFieldNumericFormatProps.warning,
360
+ fixedDecimalScale: true,
361
+ decimalScale: 2,
362
+ prefix,
363
+ decimalSeparator,
364
+ thousandSeparator,
365
+ placeholder: `${prefix} 0${decimalSeparator}00`,
366
+ allowNegative: false,
367
+ ...formFieldNumericFormatProps
368
+ });
369
+ }, "FormFieldCurrencyInput");
370
+
371
+ // src/FormFieldInput.tsx
372
+ import { Input as Input3 } from "@ttoss/ui";
373
+ var FormFieldInput = /* @__PURE__ */__name(({
374
+ label,
375
+ name,
376
+ tooltip,
377
+ sx,
378
+ defaultValue = "",
379
+ ...inputProps
380
+ }) => {
381
+ return /* @__PURE__ */React.createElement(FormField, {
382
+ name,
383
+ label,
384
+ disabled: inputProps.disabled,
385
+ tooltip,
386
+ warning: inputProps.warning,
387
+ inputTooltip: inputProps.inputTooltip,
388
+ sx,
389
+ defaultValue,
390
+ render: /* @__PURE__ */__name(({
391
+ field,
392
+ fieldState
393
+ }) => {
394
+ return /* @__PURE__ */React.createElement(Input3, {
395
+ ...inputProps,
396
+ ...field,
397
+ "aria-invalid": fieldState.error ? "true" : void 0
398
+ });
399
+ }, "render")
400
+ });
401
+ }, "FormFieldInput");
402
+
403
+ // src/FormFieldPassword.tsx
404
+ import { InputPassword } from "@ttoss/ui";
405
+ var FormFieldPassword = /* @__PURE__ */__name(({
406
+ label,
407
+ name,
408
+ tooltip,
409
+ sx,
410
+ defaultValue = "",
411
+ ...inputProps
412
+ }) => {
413
+ return /* @__PURE__ */React.createElement(FormField, {
414
+ name,
415
+ label,
416
+ disabled: inputProps.disabled,
417
+ tooltip,
418
+ warning: inputProps.warning,
419
+ inputTooltip: inputProps.inputTooltip,
420
+ sx,
421
+ defaultValue,
422
+ render: /* @__PURE__ */__name(({
423
+ field,
424
+ fieldState
425
+ }) => {
426
+ return /* @__PURE__ */React.createElement(InputPassword, {
427
+ ...inputProps,
428
+ ...field,
429
+ "aria-invalid": fieldState.error ? "true" : void 0
430
+ });
431
+ }, "render")
432
+ });
433
+ }, "FormFieldPassword");
434
+
435
+ // src/FormFieldRadio.tsx
436
+ import { Flex as Flex2, Label as Label2, Radio } from "@ttoss/ui";
437
+ var FormFieldRadio = /* @__PURE__ */__name(({
438
+ label,
439
+ name,
440
+ sx,
441
+ options,
442
+ tooltip,
443
+ ...radioProps
444
+ }) => {
445
+ return /* @__PURE__ */React.createElement(FormField, {
446
+ label,
447
+ name,
448
+ sx,
449
+ tooltip,
450
+ render: /* @__PURE__ */__name(({
451
+ field
452
+ }) => {
453
+ return /* @__PURE__ */React.createElement(Flex2, {
454
+ sx: {
455
+ flexDirection: "column",
456
+ gap: "1"
457
+ }
458
+ }, options.map(option => {
459
+ const key = `form-field-radio-${name}-${option.value}`;
460
+ return /* @__PURE__ */React.createElement(Label2, {
461
+ key,
462
+ sx: {
463
+ fontSize: "md"
464
+ }
465
+ }, /* @__PURE__ */React.createElement(Radio, {
466
+ ref: field.ref,
467
+ onChange: field.onChange,
468
+ onBlur: field.onBlur,
469
+ value: option.value,
470
+ checked: field.value === option.value,
471
+ name,
472
+ ...radioProps
473
+ }), option.label);
474
+ }));
475
+ }, "render")
476
+ });
477
+ }, "FormFieldRadio");
478
+
479
+ // src/FormFieldRadioCard.tsx
480
+ import { Box as Box2, Flex as Flex3, Label as Label3, Radio as Radio2, Text } from "@ttoss/ui";
481
+ var FormFieldRadioCard = /* @__PURE__ */__name(({
482
+ label,
483
+ name,
484
+ direction = "column",
485
+ width = "full",
486
+ sx,
487
+ options,
488
+ tooltip,
489
+ ...radioProps
490
+ }) => {
491
+ return /* @__PURE__ */React.createElement(FormField, {
492
+ label,
493
+ name,
494
+ sx,
495
+ tooltip,
496
+ render: /* @__PURE__ */__name(({
497
+ field
498
+ }) => {
499
+ return /* @__PURE__ */React.createElement(Flex3, {
500
+ sx: {
501
+ flexDirection: direction,
502
+ gap: "4"
503
+ }
504
+ }, options.map(option => {
505
+ const key = `form-field-radio-${name}-${option.value}`;
506
+ return /* @__PURE__ */React.createElement(Box2, {
507
+ key,
508
+ sx: {
509
+ gap: "2",
510
+ width,
511
+ border: "md",
512
+ borderColor: "display.border.muted.default",
513
+ borderRadius: "md"
514
+ }
515
+ }, /* @__PURE__ */React.createElement(Label3, {
516
+ sx: {
517
+ fontSize: "md",
518
+ width: "100%",
519
+ padding: "4"
520
+ }
521
+ }, /* @__PURE__ */React.createElement(Radio2, {
522
+ ref: field.ref,
523
+ onChange: field.onChange,
524
+ onBlur: field.onBlur,
525
+ value: option.value,
526
+ checked: field.value === option.value,
527
+ name,
528
+ ...radioProps
529
+ }), /* @__PURE__ */React.createElement(Flex3, {
530
+ sx: {
531
+ flexDirection: "column",
532
+ gap: "1"
533
+ }
534
+ }, option.label && /* @__PURE__ */React.createElement(Text, null, option.label), option.description && /* @__PURE__ */React.createElement(Text, {
535
+ sx: {
536
+ fontSize: "sm"
537
+ }
538
+ }, option.description))));
539
+ }));
540
+ }, "render")
541
+ });
542
+ }, "FormFieldRadioCard");
543
+
544
+ // src/FormFieldRadioCardIcony.tsx
545
+ import { Box as Box3, Flex as Flex4, Text as Text2 } from "@ttoss/ui";
546
+ import * as React5 from "react";
547
+ var FormFieldRadioCardIcony = /* @__PURE__ */__name(({
548
+ label,
549
+ name,
550
+ direction = "row",
551
+ width = "full",
552
+ sx,
553
+ options,
554
+ tooltip
555
+ }) => {
556
+ return /* @__PURE__ */React5.createElement(FormField, {
557
+ label,
558
+ name,
559
+ sx,
560
+ tooltip,
561
+ render: /* @__PURE__ */__name(({
562
+ field
563
+ }) => {
564
+ const handleOptionClick = /* @__PURE__ */__name(optionValue => {
565
+ field.onChange(optionValue);
566
+ field.onBlur();
567
+ }, "handleOptionClick");
568
+ return /* @__PURE__ */React5.createElement(Flex4, {
569
+ sx: {
570
+ flexDirection: direction,
571
+ gap: "4"
572
+ }
573
+ }, options.map(option => {
574
+ const key = `form-field-radio-card-${name}-${option.value}`;
575
+ const isSelected = field.value === option.value;
576
+ const IconComponent = option.icon;
577
+ return /* @__PURE__ */React5.createElement(Box3, {
578
+ key,
579
+ onClick: /* @__PURE__ */__name(() => {
580
+ return handleOptionClick(option.value);
581
+ }, "onClick"),
582
+ sx: {
583
+ width,
584
+ padding: "6",
585
+ border: isSelected ? "lg" : "md",
586
+ borderColor: isSelected ? "input.background.accent.default" : "input.border.muted.default",
587
+ borderRadius: "md",
588
+ backgroundColor: "transparent",
589
+ display: "flex",
590
+ flexDirection: "column",
591
+ alignItems: "center",
592
+ justifyContent: "center",
593
+ textAlign: "center",
594
+ cursor: "pointer",
595
+ transition: "all 0.2s ease-in-out"
596
+ }
597
+ }, IconComponent && /* @__PURE__ */React5.createElement(Box3, {
598
+ sx: {
599
+ marginBottom: "2",
600
+ color: "text.primary"
601
+ }
602
+ }, /* @__PURE__ */React5.createElement(IconComponent, {
603
+ size: 24
604
+ })), /* @__PURE__ */React5.createElement(Flex4, {
605
+ sx: {
606
+ flexDirection: "column",
607
+ gap: "1"
608
+ }
609
+ }, option.label && /* @__PURE__ */React5.createElement(Text2, {
610
+ sx: {
611
+ fontSize: "lg",
612
+ fontWeight: "semibold",
613
+ color: "text.primary"
614
+ }
615
+ }, option.label), option.description && /* @__PURE__ */React5.createElement(Text2, {
616
+ sx: {
617
+ fontSize: "md",
618
+ color: "text.secondary"
619
+ }
620
+ }, option.description)));
621
+ }));
622
+ }, "render")
623
+ });
624
+ }, "FormFieldRadioCardIcony");
625
+
626
+ // src/FormFieldSelect.tsx
627
+ import { Select } from "@ttoss/ui";
628
+ var FormFieldSelect = /* @__PURE__ */__name(({
629
+ label,
630
+ name,
631
+ id,
632
+ defaultValue,
633
+ sx,
634
+ css,
635
+ disabled,
636
+ tooltip,
637
+ ...selectProps
638
+ }) => {
639
+ return /* @__PURE__ */React.createElement(FormField, {
640
+ name,
641
+ label,
642
+ id,
643
+ defaultValue,
644
+ disabled,
645
+ tooltip,
646
+ inputTooltip: selectProps.inputTooltip,
647
+ warning: selectProps.warning,
648
+ sx,
649
+ css,
650
+ render: /* @__PURE__ */__name(({
651
+ field,
652
+ fieldState
653
+ }) => {
654
+ return /* @__PURE__ */React.createElement(Select, {
655
+ ...selectProps,
656
+ ...field,
657
+ isDisabled: disabled,
658
+ "aria-invalid": fieldState.error ? "true" : void 0
659
+ });
660
+ }, "render")
661
+ });
662
+ }, "FormFieldSelect");
663
+
664
+ // src/FormFieldSwitch.tsx
665
+ import { Switch as Switch2 } from "@ttoss/ui";
666
+ var FormFieldSwitch = /* @__PURE__ */__name(({
667
+ label,
668
+ name,
669
+ sx,
670
+ tooltip,
671
+ ...switchProps
672
+ }) => {
673
+ return /* @__PURE__ */React.createElement(FormField, {
674
+ label,
675
+ name,
676
+ tooltip,
677
+ render: /* @__PURE__ */__name(({
678
+ field,
679
+ fieldState
680
+ }) => {
681
+ return /* @__PURE__ */React.createElement(Switch2, {
682
+ ...field,
683
+ ...switchProps,
684
+ "aria-invalid": !!fieldState.error,
685
+ sx
686
+ });
687
+ }, "render")
688
+ });
689
+ }, "FormFieldSwitch");
690
+
691
+ // src/FormFieldTextarea.tsx
692
+ import { Textarea } from "@ttoss/ui";
693
+ var FormFieldTextarea = /* @__PURE__ */__name(({
694
+ label,
695
+ name,
696
+ warning,
697
+ inputTooltip,
698
+ sx,
699
+ ...textareaProps
700
+ }) => {
701
+ const id = `form-field-textarea-${name}`;
702
+ return /* @__PURE__ */React.createElement(FormField, {
703
+ label,
704
+ name,
705
+ id,
706
+ sx,
707
+ warning,
708
+ inputTooltip,
709
+ render: /* @__PURE__ */__name(({
710
+ field,
711
+ fieldState
712
+ }) => {
713
+ return /* @__PURE__ */React.createElement(Textarea, {
714
+ ...field,
715
+ ...textareaProps,
716
+ "aria-invalid": fieldState.error ? "true" : void 0
717
+ });
718
+ }, "render")
719
+ });
720
+ }, "FormFieldTextarea");
721
+
722
+ // src/FormGroup.tsx
723
+ import { Box as Box4, Flex as Flex5, Text as Text3 } from "@ttoss/ui";
724
+ import * as React6 from "react";
725
+ var FormGroupLevelsManagerContext = /* @__PURE__ */React6.createContext({
726
+ levelsLength: 1,
727
+ registerChild: /* @__PURE__ */__name(() => {
728
+ return null;
729
+ }, "registerChild")
730
+ });
731
+ var FormGroupLevelsManager = /* @__PURE__ */__name(({
732
+ children
733
+ }) => {
734
+ const [levelsLength, setLevelsLength] = React6.useState(0);
735
+ const registerChild = React6.useCallback(level => {
736
+ if (level + 1 > levelsLength) {
737
+ setLevelsLength(level + 1);
738
+ }
739
+ }, [levelsLength]);
740
+ return /* @__PURE__ */React6.createElement(FormGroupLevelsManagerContext.Provider, {
741
+ value: {
742
+ levelsLength,
743
+ registerChild
744
+ }
745
+ }, children);
746
+ }, "FormGroupLevelsManager");
747
+ var FormGroupContext = /* @__PURE__ */React6.createContext({});
748
+ var useFormGroup = /* @__PURE__ */__name(() => {
749
+ const {
750
+ parentLevel
751
+ } = React6.useContext(FormGroupContext);
752
+ const {
753
+ levelsLength
754
+ } = React6.useContext(FormGroupLevelsManagerContext);
755
+ return {
756
+ level: parentLevel,
757
+ levelsLength
758
+ };
759
+ }, "useFormGroup");
760
+ var FormGroupWrapper = /* @__PURE__ */__name(({
761
+ title,
762
+ direction,
763
+ children,
764
+ name,
765
+ ...boxProps
766
+ }) => {
767
+ const {
768
+ level
769
+ } = useFormGroup();
770
+ const {
771
+ registerChild
772
+ } = React6.useContext(FormGroupLevelsManagerContext);
773
+ React6.useEffect(() => {
774
+ if (typeof level === "number") {
775
+ registerChild(level);
776
+ }
777
+ }, [level, registerChild]);
778
+ const childrenContainerSx = {
779
+ flexDirection: direction || "column",
780
+ gap: "1",
781
+ width: "100%"
782
+ };
783
+ return /* @__PURE__ */React6.createElement(Box4, {
784
+ "aria-level": level,
785
+ ...boxProps,
786
+ sx: {
787
+ marginTop: level === 0 ? "none" : "4",
788
+ marginBottom: "4",
789
+ ...boxProps.sx
790
+ }
791
+ }, title && /* @__PURE__ */React6.createElement(Box4, {
792
+ sx: {
793
+ marginBottom: "2"
794
+ }
795
+ }, /* @__PURE__ */React6.createElement(Text3, {
796
+ sx: {
797
+ fontSize: "2xl",
798
+ fontWeight: "bold"
799
+ }
800
+ }, title)), /* @__PURE__ */React6.createElement(Flex5, {
801
+ sx: childrenContainerSx
802
+ }, children), name && /* @__PURE__ */React6.createElement(FormErrorMessage, {
803
+ name
804
+ }));
805
+ }, "FormGroupWrapper");
806
+ var FormGroup = /* @__PURE__ */__name(props => {
807
+ const {
808
+ level
809
+ } = useFormGroup();
810
+ const currentLevel = level === void 0 ? 0 : level + 1;
811
+ return /* @__PURE__ */React6.createElement(FormGroupContext.Provider, {
812
+ value: {
813
+ parentLevel: currentLevel
814
+ }
815
+ }, currentLevel === 0 ? /* @__PURE__ */React6.createElement(FormGroupLevelsManager, null, /* @__PURE__ */React6.createElement(FormGroupWrapper, props)) : /* @__PURE__ */React6.createElement(FormGroupWrapper, props));
816
+ }, "FormGroup");
817
+
818
+ // src/yup/i18n.ts
819
+ import { defineMessage } from "@ttoss/react-i18n";
820
+ import { setLocale } from "yup";
821
+ setLocale({
822
+ mixed: {
823
+ required: defineMessage({
824
+ id: "MfWGyg",
825
+ defaultMessage: [{
826
+ "type": 0,
827
+ "value": "Field is required"
828
+ }]
829
+ }),
830
+ notType: /* @__PURE__ */__name(({
831
+ type
832
+ }) => {
833
+ return {
834
+ ...defineMessage({
835
+ id: "ZhaPt0",
836
+ defaultMessage: [{
837
+ "type": 0,
838
+ "value": "Invalid Value for Field of type "
839
+ }, {
840
+ "type": 1,
841
+ "value": "type"
842
+ }]
843
+ }),
844
+ values: {
845
+ type
846
+ }
847
+ };
848
+ }, "notType")
849
+ },
850
+ string: {
851
+ min: /* @__PURE__ */__name(({
852
+ min
853
+ }) => {
854
+ return {
855
+ ...defineMessage({
856
+ id: "D1C6fR",
857
+ defaultMessage: [{
858
+ "type": 0,
859
+ "value": "Field must be at least "
860
+ }, {
861
+ "type": 1,
862
+ "value": "min"
863
+ }, {
864
+ "type": 0,
865
+ "value": " characters"
866
+ }]
867
+ }),
868
+ values: {
869
+ min
870
+ }
871
+ };
872
+ }, "min")
873
+ }
874
+ });
875
+
876
+ // src/yup/schema.ts
877
+ import * as yup from "yup";
878
+
879
+ // src/Brazil/FormFieldCNPJ.tsx
880
+ import { Input as Input4 } from "@ttoss/ui";
881
+ import { PatternFormat as PatternFormat2 } from "react-number-format";
882
+ var isCnpjValid = /* @__PURE__ */__name(cnpj => {
883
+ if (cnpj?.length != 14) {
884
+ return false;
885
+ }
886
+ if (cnpj == "00000000000000" || cnpj == "11111111111111" || cnpj == "22222222222222" || cnpj == "33333333333333" || cnpj == "44444444444444" || cnpj == "55555555555555" || cnpj == "66666666666666" || cnpj == "77777777777777" || cnpj == "88888888888888" || cnpj == "99999999999999") {
887
+ return false;
888
+ }
889
+ let size = cnpj.length - 2;
890
+ let numbers = cnpj.substring(0, size);
891
+ const digits = cnpj.substring(size);
892
+ let soma = 0;
893
+ let pos = size - 7;
894
+ for (let i = size; i >= 1; i--) {
895
+ soma += numbers.charAt(size - i) * pos--;
896
+ if (pos < 2) {
897
+ pos = 9;
898
+ }
899
+ }
900
+ let result = soma % 11 < 2 ? 0 : 11 - soma % 11;
901
+ if (result != digits.charAt(0)) {
902
+ return false;
903
+ }
904
+ size = size + 1;
905
+ numbers = cnpj.substring(0, size);
906
+ soma = 0;
907
+ pos = size - 7;
908
+ for (let i = size; i >= 1; i--) {
909
+ soma += numbers.charAt(size - i) * pos--;
910
+ if (pos < 2) {
911
+ pos = 9;
912
+ }
913
+ }
914
+ result = soma % 11 < 2 ? 0 : 11 - soma % 11;
915
+ if (result != digits.charAt(1)) {
916
+ return false;
917
+ }
918
+ return true;
919
+ }, "isCnpjValid");
920
+ var FormFieldCNPJ = /* @__PURE__ */__name(({
921
+ label,
922
+ name,
923
+ ...patternFormatProps
924
+ }) => {
925
+ return /* @__PURE__ */React.createElement(FormField, {
926
+ name,
927
+ label,
928
+ warning: patternFormatProps.warning,
929
+ inputTooltip: patternFormatProps.inputTooltip,
930
+ render: /* @__PURE__ */__name(({
931
+ field
932
+ }) => {
933
+ return /* @__PURE__ */React.createElement(PatternFormat2, {
934
+ name: field.name,
935
+ value: field.value,
936
+ onBlur: field.onBlur,
937
+ onValueChange: /* @__PURE__ */__name(values => {
938
+ field.onChange(values.value);
939
+ }, "onValueChange"),
940
+ format: "##.###.###/####-##",
941
+ customInput: Input4,
942
+ placeholder: "12.345.678/0000-00",
943
+ ...patternFormatProps
944
+ });
945
+ }, "render")
946
+ });
947
+ }, "FormFieldCNPJ");
948
+
949
+ // src/yup/schema.ts
950
+ yup.addMethod(yup.string, "cnpj", function () {
951
+ return this.test("valid-cnpj", "Invalid CNPJ", value => {
952
+ return isCnpjValid(value);
953
+ });
954
+ });
955
+ yup.addMethod(yup.string, "password", function ({
956
+ required
957
+ } = {}) {
958
+ const schema = this.trim();
959
+ if (required) {
960
+ schema.required("Password is required");
961
+ }
962
+ return schema.min(8, "Password must be at least 8 characters long");
963
+ });
964
+
965
+ // src/yup/yup.ts
966
+ import * as yup2 from "yup";
967
+
968
+ // src/index.ts
969
+ import { yupResolver } from "@hookform/resolvers/yup";
970
+ import { Controller, FormProvider as FormProvider2, useController as useController2, useFieldArray, useForm, useFormContext as useFormContext3, useFormState, useWatch } from "react-hook-form";
971
+ export * from "react-hook-form";
972
+ export { __name, Form, FormErrorMessage, FormField, FormFieldCheckbox, FormFieldPatternFormat, FormFieldCreditCardNumber, FormFieldNumericFormat, FormFieldCurrencyInput, FormFieldInput, FormFieldPassword, FormFieldRadio, FormFieldRadioCard, FormFieldRadioCardIcony, FormFieldSelect, FormFieldSwitch, FormFieldTextarea, useFormGroup, FormGroup, isCnpjValid, FormFieldCNPJ, yup2 as yup, yupResolver, Controller, FormProvider2 as FormProvider, useController2 as useController, useFieldArray, useForm, useFormContext3 as useFormContext, useFormState, useWatch };