@lets-events/react 12.8.0 → 12.8.2
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/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +12 -0
- package/dist/index.d.mts +10 -5
- package/dist/index.d.ts +10 -5
- package/dist/index.js +66 -13
- package/dist/index.mjs +78 -25
- package/package.json +1 -1
- package/src/components/Calendar/index.tsx +20 -5
- package/src/components/DoubleCalendar/index.tsx +16 -4
- package/src/components/FormFields/CalendarFormField.tsx +3 -0
- package/src/components/FormFields/DateAndTimeFormField.tsx +3 -0
- package/src/components/FormFields/DoubleCalendarFormField.tsx +3 -0
- package/src/components/TimePicker.tsx +27 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @lets-events/react@12.8.
|
|
3
|
+
> @lets-events/react@12.8.2 build
|
|
4
4
|
> tsup src/index.tsx --format esm,cjs --dts --external react
|
|
5
5
|
|
|
6
6
|
[1G[0K[34mCLI[39m Building entry: src/index.tsx
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
[34mCLI[39m Target: es6
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
|
-
[32mCJS[39m [1mdist/index.js [22m[
|
|
14
|
-
[32mCJS[39m ⚡️ Build success in
|
|
15
|
-
[32mESM[39m [1mdist/index.mjs [22m[
|
|
16
|
-
[32mESM[39m ⚡️ Build success in
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m410.67 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 289ms
|
|
15
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m395.31 KB[39m
|
|
16
|
+
[32mESM[39m ⚡️ Build success in 291ms
|
|
17
17
|
DTS Build start
|
|
18
|
-
DTS ⚡️ Build success in
|
|
19
|
-
DTS dist/index.d.mts 403.
|
|
20
|
-
DTS dist/index.d.ts 403.
|
|
18
|
+
DTS ⚡️ Build success in 6018ms
|
|
19
|
+
DTS dist/index.d.mts 403.89 KB
|
|
20
|
+
DTS dist/index.d.ts 403.89 KB
|
|
21
21
|
[1G[0K⠙[1G[0K
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -4725,9 +4725,10 @@ type CalendarProps = ComponentProps<typeof CalendarStyled> & {
|
|
|
4725
4725
|
hasError?: boolean;
|
|
4726
4726
|
expand?: boolean;
|
|
4727
4727
|
allowPastDates?: boolean;
|
|
4728
|
+
maxDate?: Date;
|
|
4728
4729
|
maxYearsFromNow?: number;
|
|
4729
4730
|
};
|
|
4730
|
-
declare function Calendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxYearsFromNow, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
4731
|
+
declare function Calendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxDate, maxYearsFromNow, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
4731
4732
|
|
|
4732
4733
|
type DateRange = {
|
|
4733
4734
|
from?: Date;
|
|
@@ -4744,9 +4745,10 @@ type DoubleCalendarProps = ComponentProps<typeof CalendarStyled> & {
|
|
|
4744
4745
|
expand?: boolean;
|
|
4745
4746
|
allowPastDates?: boolean;
|
|
4746
4747
|
maxYearsFromNow?: number;
|
|
4748
|
+
maxDate?: Date;
|
|
4747
4749
|
disabled?: boolean;
|
|
4748
4750
|
};
|
|
4749
|
-
declare function DoubleCalendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxYearsFromNow, disabled, ...props }: DoubleCalendarProps): react_jsx_runtime.JSX.Element;
|
|
4751
|
+
declare function DoubleCalendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxYearsFromNow, maxDate, disabled, ...props }: DoubleCalendarProps): react_jsx_runtime.JSX.Element;
|
|
4750
4752
|
|
|
4751
4753
|
declare const DrawerOverlayStyled: _stitches_react_types_styled_component.StyledComponent<"div", {
|
|
4752
4754
|
open?: boolean | "false" | "true" | undefined;
|
|
@@ -15325,8 +15327,9 @@ type CalendarFormFieldProps = Omit<CalendarProps, "selected" | "setSelected"> &
|
|
|
15325
15327
|
rules?: Omit<RegisterOptions<FieldValues, string>, "valueAsNumber" | "valueAsDate" | "setValueAs" | "disabled">;
|
|
15326
15328
|
allowPastDates?: boolean;
|
|
15327
15329
|
maxYearsFromNow?: number;
|
|
15330
|
+
maxDate?: Date;
|
|
15328
15331
|
};
|
|
15329
|
-
declare const CalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, onChange, allowPastDates, maxYearsFromNow, ...calendarProps }: CalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15332
|
+
declare const CalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, onChange, allowPastDates, maxYearsFromNow, maxDate, ...calendarProps }: CalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15330
15333
|
|
|
15331
15334
|
type DoubleCalendarFormFieldProps = Omit<DoubleCalendarProps, "selected" | "setSelected"> & {
|
|
15332
15335
|
name: string;
|
|
@@ -15338,8 +15341,9 @@ type DoubleCalendarFormFieldProps = Omit<DoubleCalendarProps, "selected" | "setS
|
|
|
15338
15341
|
disabled?: boolean;
|
|
15339
15342
|
allowPastDates?: boolean;
|
|
15340
15343
|
maxYearsFromNow?: number;
|
|
15344
|
+
maxDate?: Date;
|
|
15341
15345
|
};
|
|
15342
|
-
declare const DoubleCalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, disabled, ...calendarProps }: DoubleCalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15346
|
+
declare const DoubleCalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, maxDate, disabled, ...calendarProps }: DoubleCalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15343
15347
|
|
|
15344
15348
|
type TimePickerFormFieldProps = Omit<TimePickerProps, "selected" | "setSelected"> & {
|
|
15345
15349
|
name: string;
|
|
@@ -15360,8 +15364,9 @@ type DateAndTimeFormFieldProps = Omit<CalendarProps, "selected" | "setSelected">
|
|
|
15360
15364
|
rules?: Omit<RegisterOptions<FieldValues, string>, "valueAsNumber" | "valueAsDate" | "setValueAs" | "disabled">;
|
|
15361
15365
|
allowPastDates?: boolean;
|
|
15362
15366
|
maxYearsFromNow?: number;
|
|
15367
|
+
maxDate?: Date;
|
|
15363
15368
|
};
|
|
15364
|
-
declare const DateAndTimeFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, ...props }: DateAndTimeFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15369
|
+
declare const DateAndTimeFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, maxDate, ...props }: DateAndTimeFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15365
15370
|
|
|
15366
15371
|
interface UploadConfig {
|
|
15367
15372
|
apiUrl: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -4725,9 +4725,10 @@ type CalendarProps = ComponentProps<typeof CalendarStyled> & {
|
|
|
4725
4725
|
hasError?: boolean;
|
|
4726
4726
|
expand?: boolean;
|
|
4727
4727
|
allowPastDates?: boolean;
|
|
4728
|
+
maxDate?: Date;
|
|
4728
4729
|
maxYearsFromNow?: number;
|
|
4729
4730
|
};
|
|
4730
|
-
declare function Calendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxYearsFromNow, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
4731
|
+
declare function Calendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxDate, maxYearsFromNow, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
4731
4732
|
|
|
4732
4733
|
type DateRange = {
|
|
4733
4734
|
from?: Date;
|
|
@@ -4744,9 +4745,10 @@ type DoubleCalendarProps = ComponentProps<typeof CalendarStyled> & {
|
|
|
4744
4745
|
expand?: boolean;
|
|
4745
4746
|
allowPastDates?: boolean;
|
|
4746
4747
|
maxYearsFromNow?: number;
|
|
4748
|
+
maxDate?: Date;
|
|
4747
4749
|
disabled?: boolean;
|
|
4748
4750
|
};
|
|
4749
|
-
declare function DoubleCalendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxYearsFromNow, disabled, ...props }: DoubleCalendarProps): react_jsx_runtime.JSX.Element;
|
|
4751
|
+
declare function DoubleCalendar({ action, actionText, calendarLayout, selected, setSelected, position, hasError, expand, allowPastDates, maxYearsFromNow, maxDate, disabled, ...props }: DoubleCalendarProps): react_jsx_runtime.JSX.Element;
|
|
4750
4752
|
|
|
4751
4753
|
declare const DrawerOverlayStyled: _stitches_react_types_styled_component.StyledComponent<"div", {
|
|
4752
4754
|
open?: boolean | "false" | "true" | undefined;
|
|
@@ -15325,8 +15327,9 @@ type CalendarFormFieldProps = Omit<CalendarProps, "selected" | "setSelected"> &
|
|
|
15325
15327
|
rules?: Omit<RegisterOptions<FieldValues, string>, "valueAsNumber" | "valueAsDate" | "setValueAs" | "disabled">;
|
|
15326
15328
|
allowPastDates?: boolean;
|
|
15327
15329
|
maxYearsFromNow?: number;
|
|
15330
|
+
maxDate?: Date;
|
|
15328
15331
|
};
|
|
15329
|
-
declare const CalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, onChange, allowPastDates, maxYearsFromNow, ...calendarProps }: CalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15332
|
+
declare const CalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, onChange, allowPastDates, maxYearsFromNow, maxDate, ...calendarProps }: CalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15330
15333
|
|
|
15331
15334
|
type DoubleCalendarFormFieldProps = Omit<DoubleCalendarProps, "selected" | "setSelected"> & {
|
|
15332
15335
|
name: string;
|
|
@@ -15338,8 +15341,9 @@ type DoubleCalendarFormFieldProps = Omit<DoubleCalendarProps, "selected" | "setS
|
|
|
15338
15341
|
disabled?: boolean;
|
|
15339
15342
|
allowPastDates?: boolean;
|
|
15340
15343
|
maxYearsFromNow?: number;
|
|
15344
|
+
maxDate?: Date;
|
|
15341
15345
|
};
|
|
15342
|
-
declare const DoubleCalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, disabled, ...calendarProps }: DoubleCalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15346
|
+
declare const DoubleCalendarFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, maxDate, disabled, ...calendarProps }: DoubleCalendarFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15343
15347
|
|
|
15344
15348
|
type TimePickerFormFieldProps = Omit<TimePickerProps, "selected" | "setSelected"> & {
|
|
15345
15349
|
name: string;
|
|
@@ -15360,8 +15364,9 @@ type DateAndTimeFormFieldProps = Omit<CalendarProps, "selected" | "setSelected">
|
|
|
15360
15364
|
rules?: Omit<RegisterOptions<FieldValues, string>, "valueAsNumber" | "valueAsDate" | "setValueAs" | "disabled">;
|
|
15361
15365
|
allowPastDates?: boolean;
|
|
15362
15366
|
maxYearsFromNow?: number;
|
|
15367
|
+
maxDate?: Date;
|
|
15363
15368
|
};
|
|
15364
|
-
declare const DateAndTimeFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, ...props }: DateAndTimeFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15369
|
+
declare const DateAndTimeFormField: ({ name, label, required, validate, validationErrorMessage, rules, allowPastDates, maxYearsFromNow, maxDate, ...props }: DateAndTimeFormFieldProps) => react_jsx_runtime.JSX.Element;
|
|
15365
15370
|
|
|
15366
15371
|
interface UploadConfig {
|
|
15367
15372
|
apiUrl: string;
|
package/dist/index.js
CHANGED
|
@@ -8101,7 +8101,8 @@ function Calendar(_a) {
|
|
|
8101
8101
|
hasError,
|
|
8102
8102
|
expand,
|
|
8103
8103
|
allowPastDates = false,
|
|
8104
|
-
|
|
8104
|
+
maxDate,
|
|
8105
|
+
maxYearsFromNow
|
|
8105
8106
|
} = _b, props = __objRest(_b, [
|
|
8106
8107
|
"action",
|
|
8107
8108
|
"actionText",
|
|
@@ -8112,6 +8113,7 @@ function Calendar(_a) {
|
|
|
8112
8113
|
"hasError",
|
|
8113
8114
|
"expand",
|
|
8114
8115
|
"allowPastDates",
|
|
8116
|
+
"maxDate",
|
|
8115
8117
|
"maxYearsFromNow"
|
|
8116
8118
|
]);
|
|
8117
8119
|
const [inputValue, setInputValue] = (0, import_react8.useState)("");
|
|
@@ -8121,7 +8123,14 @@ function Calendar(_a) {
|
|
|
8121
8123
|
setShowCalendar(false);
|
|
8122
8124
|
});
|
|
8123
8125
|
const today = /* @__PURE__ */ new Date();
|
|
8124
|
-
const
|
|
8126
|
+
const resolvedMaxDate = maxDate != null ? maxDate : typeof maxYearsFromNow === "number" ? addYears(today, maxYearsFromNow) : void 0;
|
|
8127
|
+
const disabledDays = [];
|
|
8128
|
+
if (!allowPastDates) {
|
|
8129
|
+
disabledDays.push({ before: today });
|
|
8130
|
+
}
|
|
8131
|
+
if (resolvedMaxDate) {
|
|
8132
|
+
disabledDays.push({ after: resolvedMaxDate });
|
|
8133
|
+
}
|
|
8125
8134
|
(0, import_react8.useEffect)(() => {
|
|
8126
8135
|
if (selected) {
|
|
8127
8136
|
setInputValue(format2(selected, "dd/MM/yyyy"));
|
|
@@ -8138,6 +8147,10 @@ function Calendar(_a) {
|
|
|
8138
8147
|
console.warn("Datas passadas n\xE3o s\xE3o permitidas:", masked);
|
|
8139
8148
|
return;
|
|
8140
8149
|
}
|
|
8150
|
+
if (resolvedMaxDate && parsed > resolvedMaxDate) {
|
|
8151
|
+
console.warn("Data maior que o limite m\xE1ximo permitido:", masked);
|
|
8152
|
+
return;
|
|
8153
|
+
}
|
|
8141
8154
|
setSelected(parsed);
|
|
8142
8155
|
} else {
|
|
8143
8156
|
console.warn("Data inv\xE1lida inserida no input:", masked);
|
|
@@ -8175,9 +8188,9 @@ function Calendar(_a) {
|
|
|
8175
8188
|
onSelect: setSelected,
|
|
8176
8189
|
required: true,
|
|
8177
8190
|
locale: ptBR,
|
|
8178
|
-
disabled:
|
|
8191
|
+
disabled: disabledDays.length > 0 ? disabledDays : void 0,
|
|
8179
8192
|
startMonth: allowPastDates ? void 0 : today,
|
|
8180
|
-
endMonth:
|
|
8193
|
+
endMonth: resolvedMaxDate
|
|
8181
8194
|
}
|
|
8182
8195
|
) }) }),
|
|
8183
8196
|
action && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(CalendarFooterStyled, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
@@ -8214,6 +8227,7 @@ function DoubleCalendar(_a) {
|
|
|
8214
8227
|
expand,
|
|
8215
8228
|
allowPastDates = false,
|
|
8216
8229
|
maxYearsFromNow = 20,
|
|
8230
|
+
maxDate,
|
|
8217
8231
|
disabled = false
|
|
8218
8232
|
} = _b, props = __objRest(_b, [
|
|
8219
8233
|
"action",
|
|
@@ -8226,6 +8240,7 @@ function DoubleCalendar(_a) {
|
|
|
8226
8240
|
"expand",
|
|
8227
8241
|
"allowPastDates",
|
|
8228
8242
|
"maxYearsFromNow",
|
|
8243
|
+
"maxDate",
|
|
8229
8244
|
"disabled"
|
|
8230
8245
|
]);
|
|
8231
8246
|
const [startValue, setStartValue] = (0, import_react9.useState)("");
|
|
@@ -8237,7 +8252,14 @@ function DoubleCalendar(_a) {
|
|
|
8237
8252
|
setShowCalendar(false);
|
|
8238
8253
|
});
|
|
8239
8254
|
const today = /* @__PURE__ */ new Date();
|
|
8240
|
-
const
|
|
8255
|
+
const resolvedMaxDate = maxDate != null ? maxDate : typeof maxYearsFromNow === "number" ? addYears(today, maxYearsFromNow) : void 0;
|
|
8256
|
+
const disabledDays = [];
|
|
8257
|
+
if (!allowPastDates) {
|
|
8258
|
+
disabledDays.push({ before: today });
|
|
8259
|
+
}
|
|
8260
|
+
if (resolvedMaxDate) {
|
|
8261
|
+
disabledDays.push({ after: resolvedMaxDate });
|
|
8262
|
+
}
|
|
8241
8263
|
(0, import_react9.useEffect)(() => {
|
|
8242
8264
|
if (selected && selected.from) {
|
|
8243
8265
|
setStartValue(format2(selected.from, "dd/MM/yyyy"));
|
|
@@ -8289,9 +8311,9 @@ function DoubleCalendar(_a) {
|
|
|
8289
8311
|
onSelect: setSelected,
|
|
8290
8312
|
required: true,
|
|
8291
8313
|
locale: ptBR,
|
|
8292
|
-
disabled:
|
|
8314
|
+
disabled: disabledDays.length > 0 ? disabledDays : void 0,
|
|
8293
8315
|
fromMonth: allowPastDates ? void 0 : today,
|
|
8294
|
-
toMonth:
|
|
8316
|
+
toMonth: resolvedMaxDate
|
|
8295
8317
|
}
|
|
8296
8318
|
) }) }),
|
|
8297
8319
|
action && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(CalendarFooterStyled, { children: [
|
|
@@ -8616,6 +8638,21 @@ var TimePickerIconButton = styled(Button, {
|
|
|
8616
8638
|
padding: "0 !important"
|
|
8617
8639
|
});
|
|
8618
8640
|
var pad = (num) => String(num).padStart(2, "0");
|
|
8641
|
+
var parseTime = (value) => {
|
|
8642
|
+
if (!value) {
|
|
8643
|
+
return {
|
|
8644
|
+
parsedHours: "00",
|
|
8645
|
+
parsedMinutes: "00"
|
|
8646
|
+
};
|
|
8647
|
+
}
|
|
8648
|
+
const [hours, minutes] = value.split(":");
|
|
8649
|
+
const nextHours = Math.min(Math.max(parseInt(hours || "0", 10), 0), 23);
|
|
8650
|
+
const nextMinutes = Math.min(Math.max(parseInt(minutes || "0", 10), 0), 59);
|
|
8651
|
+
return {
|
|
8652
|
+
parsedHours: Number.isNaN(nextHours) ? "00" : pad(nextHours),
|
|
8653
|
+
parsedMinutes: Number.isNaN(nextMinutes) ? "00" : pad(nextMinutes)
|
|
8654
|
+
};
|
|
8655
|
+
};
|
|
8619
8656
|
function TimePicker({
|
|
8620
8657
|
selected,
|
|
8621
8658
|
setSelected,
|
|
@@ -8630,6 +8667,13 @@ function TimePicker({
|
|
|
8630
8667
|
const [isOpen, setIsOpen] = (0, import_react11.useState)(false);
|
|
8631
8668
|
const dropdownRef = (0, import_react11.useRef)(null);
|
|
8632
8669
|
useOnClickOutside(dropdownRef, () => setIsOpen(false));
|
|
8670
|
+
(0, import_react11.useEffect)(() => {
|
|
8671
|
+
const { parsedHours, parsedMinutes } = parseTime(selected);
|
|
8672
|
+
setHours(parsedHours);
|
|
8673
|
+
setMinutes(parsedMinutes);
|
|
8674
|
+
setRawHours(parsedHours);
|
|
8675
|
+
setRawMinutes(parsedMinutes);
|
|
8676
|
+
}, [selected]);
|
|
8633
8677
|
const handleIncrement = (0, import_react11.useCallback)(
|
|
8634
8678
|
(type) => {
|
|
8635
8679
|
if (type === "hours") {
|
|
@@ -13044,7 +13088,8 @@ var CalendarFormField = (_a) => {
|
|
|
13044
13088
|
rules,
|
|
13045
13089
|
onChange,
|
|
13046
13090
|
allowPastDates,
|
|
13047
|
-
maxYearsFromNow = 20
|
|
13091
|
+
maxYearsFromNow = 20,
|
|
13092
|
+
maxDate
|
|
13048
13093
|
} = _b, calendarProps = __objRest(_b, [
|
|
13049
13094
|
"name",
|
|
13050
13095
|
"label",
|
|
@@ -13054,7 +13099,8 @@ var CalendarFormField = (_a) => {
|
|
|
13054
13099
|
"rules",
|
|
13055
13100
|
"onChange",
|
|
13056
13101
|
"allowPastDates",
|
|
13057
|
-
"maxYearsFromNow"
|
|
13102
|
+
"maxYearsFromNow",
|
|
13103
|
+
"maxDate"
|
|
13058
13104
|
]);
|
|
13059
13105
|
const handleValidate = (0, import_react25.useCallback)(
|
|
13060
13106
|
(value) => {
|
|
@@ -13102,6 +13148,7 @@ var CalendarFormField = (_a) => {
|
|
|
13102
13148
|
},
|
|
13103
13149
|
hasError: haveError,
|
|
13104
13150
|
allowPastDates,
|
|
13151
|
+
maxDate,
|
|
13105
13152
|
maxYearsFromNow
|
|
13106
13153
|
}, calendarProps)
|
|
13107
13154
|
),
|
|
@@ -13123,6 +13170,7 @@ var DoubleCalendarFormField = (_a) => {
|
|
|
13123
13170
|
rules,
|
|
13124
13171
|
allowPastDates,
|
|
13125
13172
|
maxYearsFromNow = 20,
|
|
13173
|
+
maxDate,
|
|
13126
13174
|
disabled
|
|
13127
13175
|
} = _b, calendarProps = __objRest(_b, [
|
|
13128
13176
|
"name",
|
|
@@ -13133,6 +13181,7 @@ var DoubleCalendarFormField = (_a) => {
|
|
|
13133
13181
|
"rules",
|
|
13134
13182
|
"allowPastDates",
|
|
13135
13183
|
"maxYearsFromNow",
|
|
13184
|
+
"maxDate",
|
|
13136
13185
|
"disabled"
|
|
13137
13186
|
]);
|
|
13138
13187
|
const handleValidate = (0, import_react26.useCallback)(
|
|
@@ -13174,7 +13223,8 @@ var DoubleCalendarFormField = (_a) => {
|
|
|
13174
13223
|
disabled,
|
|
13175
13224
|
hasError: haveError,
|
|
13176
13225
|
allowPastDates,
|
|
13177
|
-
maxYearsFromNow
|
|
13226
|
+
maxYearsFromNow,
|
|
13227
|
+
maxDate
|
|
13178
13228
|
}, calendarProps)
|
|
13179
13229
|
),
|
|
13180
13230
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ErrorFormMessage, { message: errorMsg })
|
|
@@ -13265,7 +13315,8 @@ var DateAndTimeFormField = (_a) => {
|
|
|
13265
13315
|
validationErrorMessage = "Este campo \xE9 obrigat\xF3rio.",
|
|
13266
13316
|
rules,
|
|
13267
13317
|
allowPastDates,
|
|
13268
|
-
maxYearsFromNow = 20
|
|
13318
|
+
maxYearsFromNow = 20,
|
|
13319
|
+
maxDate
|
|
13269
13320
|
} = _b, props = __objRest(_b, [
|
|
13270
13321
|
"name",
|
|
13271
13322
|
"label",
|
|
@@ -13274,7 +13325,8 @@ var DateAndTimeFormField = (_a) => {
|
|
|
13274
13325
|
"validationErrorMessage",
|
|
13275
13326
|
"rules",
|
|
13276
13327
|
"allowPastDates",
|
|
13277
|
-
"maxYearsFromNow"
|
|
13328
|
+
"maxYearsFromNow",
|
|
13329
|
+
"maxDate"
|
|
13278
13330
|
]);
|
|
13279
13331
|
const handleValidate = (0, import_react28.useCallback)(
|
|
13280
13332
|
(value) => {
|
|
@@ -13354,7 +13406,8 @@ var DateAndTimeFormField = (_a) => {
|
|
|
13354
13406
|
},
|
|
13355
13407
|
hasError: haveError,
|
|
13356
13408
|
allowPastDates,
|
|
13357
|
-
maxYearsFromNow
|
|
13409
|
+
maxYearsFromNow,
|
|
13410
|
+
maxDate
|
|
13358
13411
|
}, props)
|
|
13359
13412
|
) }),
|
|
13360
13413
|
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Flex, { direction: "column", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
package/dist/index.mjs
CHANGED
|
@@ -7985,7 +7985,8 @@ function Calendar(_a) {
|
|
|
7985
7985
|
hasError,
|
|
7986
7986
|
expand,
|
|
7987
7987
|
allowPastDates = false,
|
|
7988
|
-
|
|
7988
|
+
maxDate,
|
|
7989
|
+
maxYearsFromNow
|
|
7989
7990
|
} = _b, props = __objRest(_b, [
|
|
7990
7991
|
"action",
|
|
7991
7992
|
"actionText",
|
|
@@ -7996,6 +7997,7 @@ function Calendar(_a) {
|
|
|
7996
7997
|
"hasError",
|
|
7997
7998
|
"expand",
|
|
7998
7999
|
"allowPastDates",
|
|
8000
|
+
"maxDate",
|
|
7999
8001
|
"maxYearsFromNow"
|
|
8000
8002
|
]);
|
|
8001
8003
|
const [inputValue, setInputValue] = useState2("");
|
|
@@ -8005,7 +8007,14 @@ function Calendar(_a) {
|
|
|
8005
8007
|
setShowCalendar(false);
|
|
8006
8008
|
});
|
|
8007
8009
|
const today = /* @__PURE__ */ new Date();
|
|
8008
|
-
const
|
|
8010
|
+
const resolvedMaxDate = maxDate != null ? maxDate : typeof maxYearsFromNow === "number" ? addYears(today, maxYearsFromNow) : void 0;
|
|
8011
|
+
const disabledDays = [];
|
|
8012
|
+
if (!allowPastDates) {
|
|
8013
|
+
disabledDays.push({ before: today });
|
|
8014
|
+
}
|
|
8015
|
+
if (resolvedMaxDate) {
|
|
8016
|
+
disabledDays.push({ after: resolvedMaxDate });
|
|
8017
|
+
}
|
|
8009
8018
|
useEffect3(() => {
|
|
8010
8019
|
if (selected) {
|
|
8011
8020
|
setInputValue(format2(selected, "dd/MM/yyyy"));
|
|
@@ -8022,6 +8031,10 @@ function Calendar(_a) {
|
|
|
8022
8031
|
console.warn("Datas passadas n\xE3o s\xE3o permitidas:", masked);
|
|
8023
8032
|
return;
|
|
8024
8033
|
}
|
|
8034
|
+
if (resolvedMaxDate && parsed > resolvedMaxDate) {
|
|
8035
|
+
console.warn("Data maior que o limite m\xE1ximo permitido:", masked);
|
|
8036
|
+
return;
|
|
8037
|
+
}
|
|
8025
8038
|
setSelected(parsed);
|
|
8026
8039
|
} else {
|
|
8027
8040
|
console.warn("Data inv\xE1lida inserida no input:", masked);
|
|
@@ -8059,9 +8072,9 @@ function Calendar(_a) {
|
|
|
8059
8072
|
onSelect: setSelected,
|
|
8060
8073
|
required: true,
|
|
8061
8074
|
locale: ptBR,
|
|
8062
|
-
disabled:
|
|
8075
|
+
disabled: disabledDays.length > 0 ? disabledDays : void 0,
|
|
8063
8076
|
startMonth: allowPastDates ? void 0 : today,
|
|
8064
|
-
endMonth:
|
|
8077
|
+
endMonth: resolvedMaxDate
|
|
8065
8078
|
}
|
|
8066
8079
|
) }) }),
|
|
8067
8080
|
action && /* @__PURE__ */ jsx15(CalendarFooterStyled, { children: /* @__PURE__ */ jsx15(
|
|
@@ -8098,6 +8111,7 @@ function DoubleCalendar(_a) {
|
|
|
8098
8111
|
expand,
|
|
8099
8112
|
allowPastDates = false,
|
|
8100
8113
|
maxYearsFromNow = 20,
|
|
8114
|
+
maxDate,
|
|
8101
8115
|
disabled = false
|
|
8102
8116
|
} = _b, props = __objRest(_b, [
|
|
8103
8117
|
"action",
|
|
@@ -8110,6 +8124,7 @@ function DoubleCalendar(_a) {
|
|
|
8110
8124
|
"expand",
|
|
8111
8125
|
"allowPastDates",
|
|
8112
8126
|
"maxYearsFromNow",
|
|
8127
|
+
"maxDate",
|
|
8113
8128
|
"disabled"
|
|
8114
8129
|
]);
|
|
8115
8130
|
const [startValue, setStartValue] = useState3("");
|
|
@@ -8121,7 +8136,14 @@ function DoubleCalendar(_a) {
|
|
|
8121
8136
|
setShowCalendar(false);
|
|
8122
8137
|
});
|
|
8123
8138
|
const today = /* @__PURE__ */ new Date();
|
|
8124
|
-
const
|
|
8139
|
+
const resolvedMaxDate = maxDate != null ? maxDate : typeof maxYearsFromNow === "number" ? addYears(today, maxYearsFromNow) : void 0;
|
|
8140
|
+
const disabledDays = [];
|
|
8141
|
+
if (!allowPastDates) {
|
|
8142
|
+
disabledDays.push({ before: today });
|
|
8143
|
+
}
|
|
8144
|
+
if (resolvedMaxDate) {
|
|
8145
|
+
disabledDays.push({ after: resolvedMaxDate });
|
|
8146
|
+
}
|
|
8125
8147
|
useEffect4(() => {
|
|
8126
8148
|
if (selected && selected.from) {
|
|
8127
8149
|
setStartValue(format2(selected.from, "dd/MM/yyyy"));
|
|
@@ -8173,9 +8195,9 @@ function DoubleCalendar(_a) {
|
|
|
8173
8195
|
onSelect: setSelected,
|
|
8174
8196
|
required: true,
|
|
8175
8197
|
locale: ptBR,
|
|
8176
|
-
disabled:
|
|
8198
|
+
disabled: disabledDays.length > 0 ? disabledDays : void 0,
|
|
8177
8199
|
fromMonth: allowPastDates ? void 0 : today,
|
|
8178
|
-
toMonth:
|
|
8200
|
+
toMonth: resolvedMaxDate
|
|
8179
8201
|
}
|
|
8180
8202
|
) }) }),
|
|
8181
8203
|
action && /* @__PURE__ */ jsxs8(CalendarFooterStyled, { children: [
|
|
@@ -8384,7 +8406,7 @@ function Drawer({
|
|
|
8384
8406
|
}
|
|
8385
8407
|
|
|
8386
8408
|
// src/components/TimePicker.tsx
|
|
8387
|
-
import { useCallback, useRef as useRef6, useState as useState4 } from "react";
|
|
8409
|
+
import { useCallback, useEffect as useEffect6, useRef as useRef6, useState as useState4 } from "react";
|
|
8388
8410
|
import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
8389
8411
|
var TimePickerStyled = styled("div", {
|
|
8390
8412
|
position: "relative",
|
|
@@ -8500,6 +8522,21 @@ var TimePickerIconButton = styled(Button, {
|
|
|
8500
8522
|
padding: "0 !important"
|
|
8501
8523
|
});
|
|
8502
8524
|
var pad = (num) => String(num).padStart(2, "0");
|
|
8525
|
+
var parseTime = (value) => {
|
|
8526
|
+
if (!value) {
|
|
8527
|
+
return {
|
|
8528
|
+
parsedHours: "00",
|
|
8529
|
+
parsedMinutes: "00"
|
|
8530
|
+
};
|
|
8531
|
+
}
|
|
8532
|
+
const [hours, minutes] = value.split(":");
|
|
8533
|
+
const nextHours = Math.min(Math.max(parseInt(hours || "0", 10), 0), 23);
|
|
8534
|
+
const nextMinutes = Math.min(Math.max(parseInt(minutes || "0", 10), 0), 59);
|
|
8535
|
+
return {
|
|
8536
|
+
parsedHours: Number.isNaN(nextHours) ? "00" : pad(nextHours),
|
|
8537
|
+
parsedMinutes: Number.isNaN(nextMinutes) ? "00" : pad(nextMinutes)
|
|
8538
|
+
};
|
|
8539
|
+
};
|
|
8503
8540
|
function TimePicker({
|
|
8504
8541
|
selected,
|
|
8505
8542
|
setSelected,
|
|
@@ -8514,6 +8551,13 @@ function TimePicker({
|
|
|
8514
8551
|
const [isOpen, setIsOpen] = useState4(false);
|
|
8515
8552
|
const dropdownRef = useRef6(null);
|
|
8516
8553
|
useOnClickOutside(dropdownRef, () => setIsOpen(false));
|
|
8554
|
+
useEffect6(() => {
|
|
8555
|
+
const { parsedHours, parsedMinutes } = parseTime(selected);
|
|
8556
|
+
setHours(parsedHours);
|
|
8557
|
+
setMinutes(parsedMinutes);
|
|
8558
|
+
setRawHours(parsedHours);
|
|
8559
|
+
setRawMinutes(parsedMinutes);
|
|
8560
|
+
}, [selected]);
|
|
8517
8561
|
const handleIncrement = useCallback(
|
|
8518
8562
|
(type) => {
|
|
8519
8563
|
if (type === "hours") {
|
|
@@ -9247,7 +9291,7 @@ function Card(_a) {
|
|
|
9247
9291
|
|
|
9248
9292
|
// src/components/TextareaField.tsx
|
|
9249
9293
|
import { TextArea as TextAreaRadix } from "@radix-ui/themes";
|
|
9250
|
-
import React9, { useRef as useRef7, useState as useState5, useEffect as
|
|
9294
|
+
import React9, { useRef as useRef7, useState as useState5, useEffect as useEffect7 } from "react";
|
|
9251
9295
|
import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
9252
9296
|
var TextareaFieldStyle = styled(TextAreaRadix, {
|
|
9253
9297
|
display: "flex",
|
|
@@ -9302,7 +9346,7 @@ var TextareaField = React9.forwardRef((_a, forwardedRef) => {
|
|
|
9302
9346
|
var _b = _a, { maxLength, color, top = "-1.75rem" } = _b, props = __objRest(_b, ["maxLength", "color", "top"]);
|
|
9303
9347
|
const inputRef = useRef7(null);
|
|
9304
9348
|
const [remaining, setRemaining] = useState5(maxLength);
|
|
9305
|
-
|
|
9349
|
+
useEffect7(() => {
|
|
9306
9350
|
var _a2;
|
|
9307
9351
|
if (maxLength && inputRef.current) {
|
|
9308
9352
|
setRemaining(maxLength - ((_a2 = inputRef.current.value.length) != null ? _a2 : 0));
|
|
@@ -10938,7 +10982,7 @@ function StateFormField({
|
|
|
10938
10982
|
}
|
|
10939
10983
|
|
|
10940
10984
|
// src/components/FormFields/AddressFormFields/CityFormField.tsx
|
|
10941
|
-
import { useEffect as
|
|
10985
|
+
import { useEffect as useEffect8, useState as useState9 } from "react";
|
|
10942
10986
|
import { useFormContext as useFormContext5, Controller as Controller2 } from "react-hook-form";
|
|
10943
10987
|
import { Fragment as Fragment4, jsx as jsx46 } from "react/jsx-runtime";
|
|
10944
10988
|
function CityFormField({
|
|
@@ -10953,7 +10997,7 @@ function CityFormField({
|
|
|
10953
10997
|
const selectedState = watch(stateName);
|
|
10954
10998
|
const [cities, setCities] = useState9([]);
|
|
10955
10999
|
const [loading, setLoading] = useState9(false);
|
|
10956
|
-
|
|
11000
|
+
useEffect8(() => {
|
|
10957
11001
|
if (!isBrazil) {
|
|
10958
11002
|
setCities([]);
|
|
10959
11003
|
return;
|
|
@@ -11338,10 +11382,10 @@ var EmailFormField = ({
|
|
|
11338
11382
|
import { useController as useController3 } from "react-hook-form";
|
|
11339
11383
|
|
|
11340
11384
|
// src/components/RichEditor/RichEditor.tsx
|
|
11341
|
-
import { useEffect as
|
|
11385
|
+
import { useEffect as useEffect10, useState as useState11 } from "react";
|
|
11342
11386
|
|
|
11343
11387
|
// src/components/RichEditor/QuillComponent.tsx
|
|
11344
|
-
import { useState as useState10, useRef as useRef9, useEffect as
|
|
11388
|
+
import { useState as useState10, useRef as useRef9, useEffect as useEffect9, useCallback as useCallback4 } from "react";
|
|
11345
11389
|
import { useQuill } from "react-quilljs";
|
|
11346
11390
|
|
|
11347
11391
|
// src/utils/uploadService.ts
|
|
@@ -12521,7 +12565,7 @@ var QuillComponent = ({
|
|
|
12521
12565
|
}),
|
|
12522
12566
|
[disabled, quill, addToast, removeToast, uploadConfig, onChange]
|
|
12523
12567
|
);
|
|
12524
|
-
|
|
12568
|
+
useEffect9(() => {
|
|
12525
12569
|
if (quill && value) {
|
|
12526
12570
|
const currentContent = quill.root.innerHTML;
|
|
12527
12571
|
if (currentContent !== value) {
|
|
@@ -12535,7 +12579,7 @@ var QuillComponent = ({
|
|
|
12535
12579
|
}
|
|
12536
12580
|
}
|
|
12537
12581
|
}, [quill, value]);
|
|
12538
|
-
|
|
12582
|
+
useEffect9(() => {
|
|
12539
12583
|
if (quill) {
|
|
12540
12584
|
quill.on("text-change", (delta, oldDelta, source) => {
|
|
12541
12585
|
if (source === "user") {
|
|
@@ -12590,7 +12634,7 @@ var QuillComponent = ({
|
|
|
12590
12634
|
}, 2e3);
|
|
12591
12635
|
}
|
|
12592
12636
|
}, [quill, onChange, handleImageUpload, onCharacterCountChange]);
|
|
12593
|
-
|
|
12637
|
+
useEffect9(() => {
|
|
12594
12638
|
if (quill) {
|
|
12595
12639
|
quill.enable(!disabled);
|
|
12596
12640
|
if (!disabled) {
|
|
@@ -12657,7 +12701,7 @@ var QuillComponent = ({
|
|
|
12657
12701
|
setVideoUrl("");
|
|
12658
12702
|
setShowVideoModal(false);
|
|
12659
12703
|
}, [videoUrl, quill]);
|
|
12660
|
-
|
|
12704
|
+
useEffect9(() => {
|
|
12661
12705
|
const handleClickOutside = (event) => {
|
|
12662
12706
|
if (showVideoModal && videoModalRef.current && !videoModalRef.current.contains(event.target)) {
|
|
12663
12707
|
handleVideoCancel();
|
|
@@ -12820,7 +12864,7 @@ var QuillComponent_default = QuillComponent;
|
|
|
12820
12864
|
import { jsx as jsx53 } from "react/jsx-runtime";
|
|
12821
12865
|
var RichEditor = (props) => {
|
|
12822
12866
|
const [isClient, setIsClient] = useState11(false);
|
|
12823
|
-
|
|
12867
|
+
useEffect10(() => {
|
|
12824
12868
|
setIsClient(typeof window !== "undefined");
|
|
12825
12869
|
}, []);
|
|
12826
12870
|
if (!isClient) return null;
|
|
@@ -12937,7 +12981,8 @@ var CalendarFormField = (_a) => {
|
|
|
12937
12981
|
rules,
|
|
12938
12982
|
onChange,
|
|
12939
12983
|
allowPastDates,
|
|
12940
|
-
maxYearsFromNow = 20
|
|
12984
|
+
maxYearsFromNow = 20,
|
|
12985
|
+
maxDate
|
|
12941
12986
|
} = _b, calendarProps = __objRest(_b, [
|
|
12942
12987
|
"name",
|
|
12943
12988
|
"label",
|
|
@@ -12947,7 +12992,8 @@ var CalendarFormField = (_a) => {
|
|
|
12947
12992
|
"rules",
|
|
12948
12993
|
"onChange",
|
|
12949
12994
|
"allowPastDates",
|
|
12950
|
-
"maxYearsFromNow"
|
|
12995
|
+
"maxYearsFromNow",
|
|
12996
|
+
"maxDate"
|
|
12951
12997
|
]);
|
|
12952
12998
|
const handleValidate = useCallback5(
|
|
12953
12999
|
(value) => {
|
|
@@ -12995,6 +13041,7 @@ var CalendarFormField = (_a) => {
|
|
|
12995
13041
|
},
|
|
12996
13042
|
hasError: haveError,
|
|
12997
13043
|
allowPastDates,
|
|
13044
|
+
maxDate,
|
|
12998
13045
|
maxYearsFromNow
|
|
12999
13046
|
}, calendarProps)
|
|
13000
13047
|
),
|
|
@@ -13016,6 +13063,7 @@ var DoubleCalendarFormField = (_a) => {
|
|
|
13016
13063
|
rules,
|
|
13017
13064
|
allowPastDates,
|
|
13018
13065
|
maxYearsFromNow = 20,
|
|
13066
|
+
maxDate,
|
|
13019
13067
|
disabled
|
|
13020
13068
|
} = _b, calendarProps = __objRest(_b, [
|
|
13021
13069
|
"name",
|
|
@@ -13026,6 +13074,7 @@ var DoubleCalendarFormField = (_a) => {
|
|
|
13026
13074
|
"rules",
|
|
13027
13075
|
"allowPastDates",
|
|
13028
13076
|
"maxYearsFromNow",
|
|
13077
|
+
"maxDate",
|
|
13029
13078
|
"disabled"
|
|
13030
13079
|
]);
|
|
13031
13080
|
const handleValidate = useCallback6(
|
|
@@ -13067,7 +13116,8 @@ var DoubleCalendarFormField = (_a) => {
|
|
|
13067
13116
|
disabled,
|
|
13068
13117
|
hasError: haveError,
|
|
13069
13118
|
allowPastDates,
|
|
13070
|
-
maxYearsFromNow
|
|
13119
|
+
maxYearsFromNow,
|
|
13120
|
+
maxDate
|
|
13071
13121
|
}, calendarProps)
|
|
13072
13122
|
),
|
|
13073
13123
|
/* @__PURE__ */ jsx57(ErrorFormMessage, { message: errorMsg })
|
|
@@ -13158,7 +13208,8 @@ var DateAndTimeFormField = (_a) => {
|
|
|
13158
13208
|
validationErrorMessage = "Este campo \xE9 obrigat\xF3rio.",
|
|
13159
13209
|
rules,
|
|
13160
13210
|
allowPastDates,
|
|
13161
|
-
maxYearsFromNow = 20
|
|
13211
|
+
maxYearsFromNow = 20,
|
|
13212
|
+
maxDate
|
|
13162
13213
|
} = _b, props = __objRest(_b, [
|
|
13163
13214
|
"name",
|
|
13164
13215
|
"label",
|
|
@@ -13167,7 +13218,8 @@ var DateAndTimeFormField = (_a) => {
|
|
|
13167
13218
|
"validationErrorMessage",
|
|
13168
13219
|
"rules",
|
|
13169
13220
|
"allowPastDates",
|
|
13170
|
-
"maxYearsFromNow"
|
|
13221
|
+
"maxYearsFromNow",
|
|
13222
|
+
"maxDate"
|
|
13171
13223
|
]);
|
|
13172
13224
|
const handleValidate = useCallback8(
|
|
13173
13225
|
(value) => {
|
|
@@ -13247,7 +13299,8 @@ var DateAndTimeFormField = (_a) => {
|
|
|
13247
13299
|
},
|
|
13248
13300
|
hasError: haveError,
|
|
13249
13301
|
allowPastDates,
|
|
13250
|
-
maxYearsFromNow
|
|
13302
|
+
maxYearsFromNow,
|
|
13303
|
+
maxDate
|
|
13251
13304
|
}, props)
|
|
13252
13305
|
) }),
|
|
13253
13306
|
/* @__PURE__ */ jsx59(Flex, { direction: "column", children: /* @__PURE__ */ jsx59(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { ComponentProps, useRef, useEffect, useState } from "react";
|
|
2
2
|
import { useOnClickOutside } from "../../hooks/useOnClickOutside";
|
|
3
|
-
import { DayPicker } from "react-day-picker";
|
|
3
|
+
import { DayPicker, Matcher } from "react-day-picker";
|
|
4
4
|
import { ptBR } from "date-fns/locale";
|
|
5
5
|
import { parse, isValid, format, addYears } from "date-fns";
|
|
6
6
|
import { Button } from "../Button";
|
|
@@ -25,6 +25,7 @@ export type CalendarProps = ComponentProps<typeof CalendarStyled> & {
|
|
|
25
25
|
hasError?: boolean;
|
|
26
26
|
expand?: boolean;
|
|
27
27
|
allowPastDates?: boolean;
|
|
28
|
+
maxDate?: Date;
|
|
28
29
|
maxYearsFromNow?: number;
|
|
29
30
|
};
|
|
30
31
|
|
|
@@ -46,7 +47,8 @@ export function Calendar({
|
|
|
46
47
|
hasError,
|
|
47
48
|
expand,
|
|
48
49
|
allowPastDates = false,
|
|
49
|
-
|
|
50
|
+
maxDate,
|
|
51
|
+
maxYearsFromNow,
|
|
50
52
|
...props
|
|
51
53
|
}: CalendarProps) {
|
|
52
54
|
const [inputValue, setInputValue] = useState("");
|
|
@@ -58,7 +60,16 @@ export function Calendar({
|
|
|
58
60
|
setShowCalendar(false);
|
|
59
61
|
});
|
|
60
62
|
const today = new Date();
|
|
61
|
-
const
|
|
63
|
+
const resolvedMaxDate =
|
|
64
|
+
maxDate ?? (typeof maxYearsFromNow === "number" ? addYears(today, maxYearsFromNow) : undefined);
|
|
65
|
+
const disabledDays: Matcher[] = [];
|
|
66
|
+
|
|
67
|
+
if (!allowPastDates) {
|
|
68
|
+
disabledDays.push({ before: today });
|
|
69
|
+
}
|
|
70
|
+
if (resolvedMaxDate) {
|
|
71
|
+
disabledDays.push({ after: resolvedMaxDate });
|
|
72
|
+
}
|
|
62
73
|
|
|
63
74
|
useEffect(() => {
|
|
64
75
|
if (selected) {
|
|
@@ -78,6 +89,10 @@ export function Calendar({
|
|
|
78
89
|
console.warn("Datas passadas não são permitidas:", masked);
|
|
79
90
|
return;
|
|
80
91
|
}
|
|
92
|
+
if (resolvedMaxDate && parsed > resolvedMaxDate) {
|
|
93
|
+
console.warn("Data maior que o limite máximo permitido:", masked);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
81
96
|
setSelected(parsed);
|
|
82
97
|
} else {
|
|
83
98
|
console.warn("Data inválida inserida no input:", masked);
|
|
@@ -117,9 +132,9 @@ export function Calendar({
|
|
|
117
132
|
onSelect={setSelected}
|
|
118
133
|
required
|
|
119
134
|
locale={ptBR}
|
|
120
|
-
disabled={
|
|
135
|
+
disabled={disabledDays.length > 0 ? disabledDays : undefined}
|
|
121
136
|
startMonth={allowPastDates ? undefined : today}
|
|
122
|
-
endMonth={
|
|
137
|
+
endMonth={resolvedMaxDate}
|
|
123
138
|
/>
|
|
124
139
|
</DayPickerWrapperStyled>
|
|
125
140
|
</Box>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { ComponentProps, useRef, useEffect, useState } from "react";
|
|
2
2
|
import { useOnClickOutside } from "../../hooks/useOnClickOutside";
|
|
3
|
-
import { DayPicker } from "react-day-picker";
|
|
3
|
+
import { DayPicker, Matcher } from "react-day-picker";
|
|
4
4
|
import { ptBR } from "date-fns/locale";
|
|
5
5
|
import { format, addYears } from "date-fns";
|
|
6
6
|
import { Button } from "../Button";
|
|
@@ -28,6 +28,7 @@ export type DoubleCalendarProps = ComponentProps<typeof CalendarStyled> & {
|
|
|
28
28
|
expand?: boolean;
|
|
29
29
|
allowPastDates?: boolean;
|
|
30
30
|
maxYearsFromNow?: number;
|
|
31
|
+
maxDate?: Date;
|
|
31
32
|
disabled?: boolean;
|
|
32
33
|
};
|
|
33
34
|
|
|
@@ -42,6 +43,7 @@ export function DoubleCalendar({
|
|
|
42
43
|
expand,
|
|
43
44
|
allowPastDates = false,
|
|
44
45
|
maxYearsFromNow = 20,
|
|
46
|
+
maxDate,
|
|
45
47
|
disabled = false,
|
|
46
48
|
...props
|
|
47
49
|
}: DoubleCalendarProps) {
|
|
@@ -56,7 +58,17 @@ export function DoubleCalendar({
|
|
|
56
58
|
setShowCalendar(false);
|
|
57
59
|
});
|
|
58
60
|
const today = new Date();
|
|
59
|
-
const
|
|
61
|
+
const resolvedMaxDate =
|
|
62
|
+
maxDate ??
|
|
63
|
+
(typeof maxYearsFromNow === "number" ? addYears(today, maxYearsFromNow) : undefined);
|
|
64
|
+
const disabledDays: Matcher[] = [];
|
|
65
|
+
|
|
66
|
+
if (!allowPastDates) {
|
|
67
|
+
disabledDays.push({ before: today });
|
|
68
|
+
}
|
|
69
|
+
if (resolvedMaxDate) {
|
|
70
|
+
disabledDays.push({ after: resolvedMaxDate });
|
|
71
|
+
}
|
|
60
72
|
|
|
61
73
|
useEffect(() => {
|
|
62
74
|
if (selected && selected.from) {
|
|
@@ -117,9 +129,9 @@ export function DoubleCalendar({
|
|
|
117
129
|
onSelect={setSelected}
|
|
118
130
|
required
|
|
119
131
|
locale={ptBR}
|
|
120
|
-
disabled={
|
|
132
|
+
disabled={disabledDays.length > 0 ? disabledDays : undefined}
|
|
121
133
|
fromMonth={allowPastDates ? undefined : today}
|
|
122
|
-
toMonth={
|
|
134
|
+
toMonth={resolvedMaxDate}
|
|
123
135
|
/>
|
|
124
136
|
</DayPickerWrapperStyled>
|
|
125
137
|
</Box>
|
|
@@ -21,6 +21,7 @@ export type CalendarFormFieldProps = Omit<
|
|
|
21
21
|
>;
|
|
22
22
|
allowPastDates?: boolean;
|
|
23
23
|
maxYearsFromNow?: number;
|
|
24
|
+
maxDate?: Date;
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
export const CalendarFormField = ({
|
|
@@ -33,6 +34,7 @@ export const CalendarFormField = ({
|
|
|
33
34
|
onChange,
|
|
34
35
|
allowPastDates,
|
|
35
36
|
maxYearsFromNow = 20,
|
|
37
|
+
maxDate,
|
|
36
38
|
...calendarProps
|
|
37
39
|
}: CalendarFormFieldProps) => {
|
|
38
40
|
const handleValidate = useCallback(
|
|
@@ -85,6 +87,7 @@ export const CalendarFormField = ({
|
|
|
85
87
|
}}
|
|
86
88
|
hasError={haveError}
|
|
87
89
|
allowPastDates={allowPastDates}
|
|
90
|
+
maxDate={maxDate}
|
|
88
91
|
maxYearsFromNow={maxYearsFromNow}
|
|
89
92
|
{...calendarProps}
|
|
90
93
|
/>
|
|
@@ -24,6 +24,7 @@ export type DateAndTimeFormFieldProps = Omit<
|
|
|
24
24
|
>;
|
|
25
25
|
allowPastDates?: boolean;
|
|
26
26
|
maxYearsFromNow?: number;
|
|
27
|
+
maxDate?: Date;
|
|
27
28
|
};
|
|
28
29
|
|
|
29
30
|
export const DateAndTimeFormField = ({
|
|
@@ -35,6 +36,7 @@ export const DateAndTimeFormField = ({
|
|
|
35
36
|
rules,
|
|
36
37
|
allowPastDates,
|
|
37
38
|
maxYearsFromNow = 20,
|
|
39
|
+
maxDate,
|
|
38
40
|
...props
|
|
39
41
|
}: DateAndTimeFormFieldProps) => {
|
|
40
42
|
const handleValidate = useCallback(
|
|
@@ -129,6 +131,7 @@ export const DateAndTimeFormField = ({
|
|
|
129
131
|
hasError={haveError}
|
|
130
132
|
allowPastDates={allowPastDates}
|
|
131
133
|
maxYearsFromNow={maxYearsFromNow}
|
|
134
|
+
maxDate={maxDate}
|
|
132
135
|
{...(props as Omit<CalendarProps, "selected" | "setSelected">)}
|
|
133
136
|
/>
|
|
134
137
|
</Flex>
|
|
@@ -21,6 +21,7 @@ export type DoubleCalendarFormFieldProps = Omit<
|
|
|
21
21
|
disabled?: boolean;
|
|
22
22
|
allowPastDates?: boolean;
|
|
23
23
|
maxYearsFromNow?: number;
|
|
24
|
+
maxDate?: Date;
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
export const DoubleCalendarFormField = ({
|
|
@@ -32,6 +33,7 @@ export const DoubleCalendarFormField = ({
|
|
|
32
33
|
rules,
|
|
33
34
|
allowPastDates,
|
|
34
35
|
maxYearsFromNow = 20,
|
|
36
|
+
maxDate,
|
|
35
37
|
disabled,
|
|
36
38
|
...calendarProps
|
|
37
39
|
}: DoubleCalendarFormFieldProps) => {
|
|
@@ -82,6 +84,7 @@ export const DoubleCalendarFormField = ({
|
|
|
82
84
|
hasError={haveError}
|
|
83
85
|
allowPastDates={allowPastDates}
|
|
84
86
|
maxYearsFromNow={maxYearsFromNow}
|
|
87
|
+
maxDate={maxDate}
|
|
85
88
|
{...calendarProps}
|
|
86
89
|
/>
|
|
87
90
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback, useRef, useState } from "react";
|
|
1
|
+
import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
import { Box } from "./Box";
|
|
3
3
|
import { Button } from "./Button";
|
|
4
4
|
import { TextField, TextFieldSlot } from "./TextField";
|
|
@@ -134,6 +134,24 @@ export type TimePickerProps = {
|
|
|
134
134
|
};
|
|
135
135
|
const pad = (num: number) => String(num).padStart(2, "0");
|
|
136
136
|
|
|
137
|
+
const parseTime = (value?: string) => {
|
|
138
|
+
if (!value) {
|
|
139
|
+
return {
|
|
140
|
+
parsedHours: "00",
|
|
141
|
+
parsedMinutes: "00",
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const [hours, minutes] = value.split(":");
|
|
146
|
+
const nextHours = Math.min(Math.max(parseInt(hours || "0", 10), 0), 23);
|
|
147
|
+
const nextMinutes = Math.min(Math.max(parseInt(minutes || "0", 10), 0), 59);
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
parsedHours: Number.isNaN(nextHours) ? "00" : pad(nextHours),
|
|
151
|
+
parsedMinutes: Number.isNaN(nextMinutes) ? "00" : pad(nextMinutes),
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
|
|
137
155
|
export function TimePicker({
|
|
138
156
|
selected,
|
|
139
157
|
setSelected,
|
|
@@ -150,6 +168,14 @@ export function TimePicker({
|
|
|
150
168
|
|
|
151
169
|
useOnClickOutside(dropdownRef, () => setIsOpen(false));
|
|
152
170
|
|
|
171
|
+
useEffect(() => {
|
|
172
|
+
const { parsedHours, parsedMinutes } = parseTime(selected);
|
|
173
|
+
setHours(parsedHours);
|
|
174
|
+
setMinutes(parsedMinutes);
|
|
175
|
+
setRawHours(parsedHours);
|
|
176
|
+
setRawMinutes(parsedMinutes);
|
|
177
|
+
}, [selected]);
|
|
178
|
+
|
|
153
179
|
const handleIncrement = useCallback(
|
|
154
180
|
(type: "hours" | "minutes") => {
|
|
155
181
|
if (type === "hours") {
|