@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.
@@ -1,6 +1,6 @@
1
1
 
2
2
 
3
- > @lets-events/react@12.8.0 build
3
+ > @lets-events/react@12.8.2 build
4
4
  > tsup src/index.tsx --format esm,cjs --dts --external react
5
5
 
6
6
  CLI Building entry: src/index.tsx
@@ -10,12 +10,12 @@
10
10
  CLI Target: es6
11
11
  ESM Build start
12
12
  CJS Build start
13
- CJS dist/index.js 409.09 KB
14
- CJS ⚡️ Build success in 613ms
15
- ESM dist/index.mjs 393.73 KB
16
- ESM ⚡️ Build success in 616ms
13
+ CJS dist/index.js 410.67 KB
14
+ CJS ⚡️ Build success in 289ms
15
+ ESM dist/index.mjs 395.31 KB
16
+ ESM ⚡️ Build success in 291ms
17
17
  DTS Build start
18
- DTS ⚡️ Build success in 11472ms
19
- DTS dist/index.d.mts 403.74 KB
20
- DTS dist/index.d.ts 403.74 KB
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
  ⠙
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @lets-events/react
2
2
 
3
+ ## 12.8.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Calendar maxDate propo
8
+
9
+ ## 12.8.1
10
+
11
+ ### Patch Changes
12
+
13
+ - TimePicker Initial Value
14
+
3
15
  ## 12.8.0
4
16
 
5
17
  ### Minor Changes
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
- maxYearsFromNow = 20
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 maxDate = addYears(today, maxYearsFromNow);
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: allowPastDates ? void 0 : { before: today },
8191
+ disabled: disabledDays.length > 0 ? disabledDays : void 0,
8179
8192
  startMonth: allowPastDates ? void 0 : today,
8180
- endMonth: maxDate
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 maxDate = addYears(today, maxYearsFromNow);
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: allowPastDates ? void 0 : { before: today },
8314
+ disabled: disabledDays.length > 0 ? disabledDays : void 0,
8293
8315
  fromMonth: allowPastDates ? void 0 : today,
8294
- toMonth: maxDate
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
- maxYearsFromNow = 20
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 maxDate = addYears(today, maxYearsFromNow);
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: allowPastDates ? void 0 : { before: today },
8075
+ disabled: disabledDays.length > 0 ? disabledDays : void 0,
8063
8076
  startMonth: allowPastDates ? void 0 : today,
8064
- endMonth: maxDate
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 maxDate = addYears(today, maxYearsFromNow);
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: allowPastDates ? void 0 : { before: today },
8198
+ disabled: disabledDays.length > 0 ? disabledDays : void 0,
8177
8199
  fromMonth: allowPastDates ? void 0 : today,
8178
- toMonth: maxDate
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 useEffect6 } from "react";
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
- useEffect6(() => {
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 useEffect7, useState as useState9 } from "react";
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
- useEffect7(() => {
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 useEffect9, useState as useState11 } from "react";
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 useEffect8, useCallback as useCallback4 } from "react";
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
- useEffect8(() => {
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
- useEffect8(() => {
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
- useEffect8(() => {
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
- useEffect8(() => {
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
- useEffect9(() => {
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
  {
2
2
  "name": "@lets-events/react",
3
- "version": "12.8.0",
3
+ "version": "12.8.2",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -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
- maxYearsFromNow = 20,
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 maxDate = addYears(today, maxYearsFromNow);
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={allowPastDates ? undefined : { before: today }}
135
+ disabled={disabledDays.length > 0 ? disabledDays : undefined}
121
136
  startMonth={allowPastDates ? undefined : today}
122
- endMonth={maxDate}
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 maxDate = addYears(today, maxYearsFromNow);
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={allowPastDates ? undefined : { before: today }}
132
+ disabled={disabledDays.length > 0 ? disabledDays : undefined}
121
133
  fromMonth={allowPastDates ? undefined : today}
122
- toMonth={maxDate}
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") {