@ikatec/nebula-react 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -591,8 +591,9 @@ interface InputDatePickerSingleProps extends Omit<InputTextProps, 'onChange' | '
591
591
  numberOfMonths?: CalendarProps['numberOfMonths'];
592
592
  portal?: PopoverContentProps['portal'];
593
593
  placeholder?: string;
594
- className: InputTextProps['className'];
594
+ className?: string;
595
595
  disabledDates?: CalendarProps['disabled'];
596
+ onClean?: VoidFunction;
596
597
  }
597
598
  declare const dateIsAvailable: (inputDate?: Date | null, disabledDates?: InputDatePickerSingleProps["disabledDates"]) => boolean;
598
599
  declare const InputDatePickerSingle: ({ portal, placeholder, className, value, onChange, numberOfMonths, onClean, disabledDates, ...rest }: InputDatePickerSingleProps) => react_jsx_runtime.JSX.Element;
@@ -603,8 +604,9 @@ interface InputDateTimePickerSingleProps extends Omit<InputTextProps, 'onChange'
603
604
  numberOfMonths?: CalendarProps['numberOfMonths'];
604
605
  portal?: PopoverContentProps['portal'];
605
606
  placeholder?: string;
606
- className: InputTextProps['className'];
607
+ className?: string;
607
608
  disabledDates?: CalendarProps['disabled'];
609
+ onClean?: VoidFunction;
608
610
  }
609
611
  declare const InputDateTimePickerSingle: ({ portal, placeholder, className, value, onChange, numberOfMonths, onClean, disabledDates, ...rest }: InputDateTimePickerSingleProps) => react_jsx_runtime.JSX.Element;
610
612
 
package/dist/index.d.ts CHANGED
@@ -591,8 +591,9 @@ interface InputDatePickerSingleProps extends Omit<InputTextProps, 'onChange' | '
591
591
  numberOfMonths?: CalendarProps['numberOfMonths'];
592
592
  portal?: PopoverContentProps['portal'];
593
593
  placeholder?: string;
594
- className: InputTextProps['className'];
594
+ className?: string;
595
595
  disabledDates?: CalendarProps['disabled'];
596
+ onClean?: VoidFunction;
596
597
  }
597
598
  declare const dateIsAvailable: (inputDate?: Date | null, disabledDates?: InputDatePickerSingleProps["disabledDates"]) => boolean;
598
599
  declare const InputDatePickerSingle: ({ portal, placeholder, className, value, onChange, numberOfMonths, onClean, disabledDates, ...rest }: InputDatePickerSingleProps) => react_jsx_runtime.JSX.Element;
@@ -603,8 +604,9 @@ interface InputDateTimePickerSingleProps extends Omit<InputTextProps, 'onChange'
603
604
  numberOfMonths?: CalendarProps['numberOfMonths'];
604
605
  portal?: PopoverContentProps['portal'];
605
606
  placeholder?: string;
606
- className: InputTextProps['className'];
607
+ className?: string;
607
608
  disabledDates?: CalendarProps['disabled'];
609
+ onClean?: VoidFunction;
608
610
  }
609
611
  declare const InputDateTimePickerSingle: ({ portal, placeholder, className, value, onChange, numberOfMonths, onClean, disabledDates, ...rest }: InputDateTimePickerSingleProps) => react_jsx_runtime.JSX.Element;
610
612
 
package/dist/index.js CHANGED
@@ -27,6 +27,7 @@ var flags = require('react-phone-number-input/flags');
27
27
  var dateFns = require('date-fns');
28
28
  var reactDayPicker = require('react-day-picker');
29
29
  var locale = require('react-day-picker/locale');
30
+ var mask = require('@react-input/mask');
30
31
 
31
32
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
32
33
 
@@ -3913,10 +3914,6 @@ function dateFormatIsValid(dateStr, locale) {
3913
3914
  const regex = locale === "en-US" ? regexUS : regexBR;
3914
3915
  return regex.test(dateStr);
3915
3916
  }
3916
- function timeFormatIsValid(timeStr) {
3917
- const regex = /^(?:[01]\d|2[0-3]):[0-5]\d$/;
3918
- return regex.test(timeStr);
3919
- }
3920
3917
  var formatDateToSubmit = (dateStr, timeFallback = "23:59") => {
3921
3918
  try {
3922
3919
  if (!dateStr) return;
@@ -4056,6 +4053,11 @@ var InputDatePickerSingle = ({
4056
4053
  React8.useEffect(() => {
4057
4054
  if (innerDate) setMonth(innerDate);
4058
4055
  }, [innerDate]);
4056
+ const maskOptions = {
4057
+ mask: "__/__/____",
4058
+ replacement: { _: /\d/ }
4059
+ };
4060
+ const inputRef = mask.useMask(maskOptions);
4059
4061
  return /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: popoverIsOpen, onOpenChange: setPopoverIsOpen, children: [
4060
4062
  /* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { className, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4061
4063
  "div",
@@ -4065,6 +4067,7 @@ var InputDatePickerSingle = ({
4065
4067
  children: /* @__PURE__ */ jsxRuntime.jsx(
4066
4068
  InputText,
4067
4069
  {
4070
+ ref: inputRef,
4068
4071
  placeholder,
4069
4072
  value,
4070
4073
  className,
@@ -4191,6 +4194,7 @@ var InputTime = React8.forwardRef(
4191
4194
  }
4192
4195
  );
4193
4196
  InputTime.displayName = "InputTime";
4197
+ var DATA_TIME_SEPARATOR = " - ";
4194
4198
  var InputDateTimePickerSingle = ({
4195
4199
  portal,
4196
4200
  placeholder,
@@ -4202,8 +4206,12 @@ var InputDateTimePickerSingle = ({
4202
4206
  disabledDates,
4203
4207
  ...rest
4204
4208
  }) => {
4205
- const [innerTimeValue, setInnerTimeValue] = React8.useState();
4206
- const formattedDateByLanguage = formatDateToSubmit(value ?? "");
4209
+ const [innerTimeValue, setInnerTimeValue] = React8.useState(
4210
+ value?.split?.(DATA_TIME_SEPARATOR)?.at?.(-1) ?? ""
4211
+ );
4212
+ const formattedDateByLanguage = formatDateToSubmit(
4213
+ value?.split(DATA_TIME_SEPARATOR)?.at(0) ?? ""
4214
+ );
4207
4215
  const [innerDate, setInnerDate] = React8.useState(
4208
4216
  formattedDateByLanguage ? new Date(formattedDateByLanguage) : void 0
4209
4217
  );
@@ -4217,8 +4225,7 @@ var InputDateTimePickerSingle = ({
4217
4225
  setMonth(/* @__PURE__ */ new Date());
4218
4226
  };
4219
4227
  const handleInnerInputChange = (text) => {
4220
- const dateSlice = text.substring(0, 11).trim();
4221
- let hourSlice = text.substring(11).trim();
4228
+ const [dateSlice = "", hourSlice = ""] = text.split(DATA_TIME_SEPARATOR);
4222
4229
  if (!text) {
4223
4230
  onChange?.(text);
4224
4231
  handleClearValue();
@@ -4235,22 +4242,31 @@ var InputDateTimePickerSingle = ({
4235
4242
  handleClearValue();
4236
4243
  return;
4237
4244
  }
4238
- if (!timeFormatIsValid(hourSlice)) {
4239
- hourSlice = "";
4240
- setInnerTimeValue("");
4241
- } else {
4242
- setInnerTimeValue(hourSlice);
4243
- }
4244
- onChange?.(text, date, hourSlice);
4245
+ const [hour, minutes] = hourSlice.split(":");
4246
+ const normalizedTime = [
4247
+ hour ? Math.min(Math.max(+hour, 0), 23).toString() : "",
4248
+ minutes ? Math.min(Math.max(+minutes, 0), 59).toString() : ""
4249
+ ].filter(Boolean).join(":");
4250
+ setInnerTimeValue(normalizedTime);
4251
+ const [dateStr] = text.split(DATA_TIME_SEPARATOR);
4252
+ onChange?.(
4253
+ [dateStr, normalizedTime].filter(Boolean).join(DATA_TIME_SEPARATOR),
4254
+ date,
4255
+ normalizedTime
4256
+ );
4245
4257
  setInnerDate(date);
4246
4258
  };
4247
4259
  const handleOnChangeTime = (newTime) => {
4248
- const [date = ""] = value?.split(" ") ?? [];
4260
+ const [date = ""] = value?.split(DATA_TIME_SEPARATOR) ?? [];
4249
4261
  setInnerTimeValue(newTime);
4250
4262
  if (date && !dateFormatIsValid(date, locale)) {
4251
4263
  handleClearValue();
4252
4264
  }
4253
- onChange?.(date + " " + newTime, innerDate, newTime);
4265
+ onChange?.(
4266
+ date + (newTime ? DATA_TIME_SEPARATOR + newTime : ""),
4267
+ innerDate,
4268
+ newTime
4269
+ );
4254
4270
  };
4255
4271
  const handleKeyDown = (e) => {
4256
4272
  if ((e.altKey || e.ctrlKey || e.metaKey) && e.key !== "z") return;
@@ -4278,7 +4294,7 @@ var InputDateTimePickerSingle = ({
4278
4294
  }).format(date);
4279
4295
  setInnerDate(date);
4280
4296
  onChange?.(
4281
- [dateToStr, innerTimeValue].filter(Boolean).join(" "),
4297
+ [dateToStr, innerTimeValue].filter(Boolean).join(DATA_TIME_SEPARATOR),
4282
4298
  date,
4283
4299
  innerTimeValue
4284
4300
  );
@@ -4292,6 +4308,11 @@ var InputDateTimePickerSingle = ({
4292
4308
  React8.useEffect(() => {
4293
4309
  if (innerDate) setMonth(innerDate);
4294
4310
  }, [innerDate]);
4311
+ const maskOptions = {
4312
+ mask: "__/__/____ - __:__",
4313
+ replacement: { _: /\d/ }
4314
+ };
4315
+ const inputRef = mask.useMask(maskOptions);
4295
4316
  return /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: popoverIsOpen, onOpenChange: setPopoverIsOpen, children: [
4296
4317
  /* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { className, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
4297
4318
  "div",
@@ -4301,6 +4322,7 @@ var InputDateTimePickerSingle = ({
4301
4322
  children: /* @__PURE__ */ jsxRuntime.jsx(
4302
4323
  InputText,
4303
4324
  {
4325
+ ref: inputRef,
4304
4326
  placeholder,
4305
4327
  value,
4306
4328
  className,
@@ -4326,7 +4348,6 @@ var InputDateTimePickerSingle = ({
4326
4348
  setPopoverIsOpen(true);
4327
4349
  }
4328
4350
  },
4329
- maxLength: 16,
4330
4351
  onClean: onClean ? () => {
4331
4352
  onClean();
4332
4353
  handleClearValue();
@@ -4363,7 +4384,7 @@ var InputDateTimePickerSingle = ({
4363
4384
  /* @__PURE__ */ jsxRuntime.jsx(
4364
4385
  InputTime,
4365
4386
  {
4366
- placeholder: "00:00",
4387
+ placeholder: "hh:mm",
4367
4388
  value: innerTimeValue,
4368
4389
  onChange: handleOnChangeTime,
4369
4390
  ref: inputTimeRef,
package/dist/index.mjs CHANGED
@@ -26,6 +26,7 @@ import flags from 'react-phone-number-input/flags';
26
26
  import { formatDate, isValid, addMonths, isSameDay, isBefore, isAfter } from 'date-fns';
27
27
  import { DayPicker } from 'react-day-picker';
28
28
  import { ptBR, enUS, es } from 'react-day-picker/locale';
29
+ import { useMask } from '@react-input/mask';
29
30
 
30
31
  // src/button.tsx
31
32
 
@@ -3873,10 +3874,6 @@ function dateFormatIsValid(dateStr, locale) {
3873
3874
  const regex = locale === "en-US" ? regexUS : regexBR;
3874
3875
  return regex.test(dateStr);
3875
3876
  }
3876
- function timeFormatIsValid(timeStr) {
3877
- const regex = /^(?:[01]\d|2[0-3]):[0-5]\d$/;
3878
- return regex.test(timeStr);
3879
- }
3880
3877
  var formatDateToSubmit = (dateStr, timeFallback = "23:59") => {
3881
3878
  try {
3882
3879
  if (!dateStr) return;
@@ -4016,6 +4013,11 @@ var InputDatePickerSingle = ({
4016
4013
  useEffect(() => {
4017
4014
  if (innerDate) setMonth(innerDate);
4018
4015
  }, [innerDate]);
4016
+ const maskOptions = {
4017
+ mask: "__/__/____",
4018
+ replacement: { _: /\d/ }
4019
+ };
4020
+ const inputRef = useMask(maskOptions);
4019
4021
  return /* @__PURE__ */ jsxs(Popover, { open: popoverIsOpen, onOpenChange: setPopoverIsOpen, children: [
4020
4022
  /* @__PURE__ */ jsx(PopoverTrigger, { className, asChild: true, children: /* @__PURE__ */ jsx(
4021
4023
  "div",
@@ -4025,6 +4027,7 @@ var InputDatePickerSingle = ({
4025
4027
  children: /* @__PURE__ */ jsx(
4026
4028
  InputText,
4027
4029
  {
4030
+ ref: inputRef,
4028
4031
  placeholder,
4029
4032
  value,
4030
4033
  className,
@@ -4151,6 +4154,7 @@ var InputTime = forwardRef(
4151
4154
  }
4152
4155
  );
4153
4156
  InputTime.displayName = "InputTime";
4157
+ var DATA_TIME_SEPARATOR = " - ";
4154
4158
  var InputDateTimePickerSingle = ({
4155
4159
  portal,
4156
4160
  placeholder,
@@ -4162,8 +4166,12 @@ var InputDateTimePickerSingle = ({
4162
4166
  disabledDates,
4163
4167
  ...rest
4164
4168
  }) => {
4165
- const [innerTimeValue, setInnerTimeValue] = useState();
4166
- const formattedDateByLanguage = formatDateToSubmit(value ?? "");
4169
+ const [innerTimeValue, setInnerTimeValue] = useState(
4170
+ value?.split?.(DATA_TIME_SEPARATOR)?.at?.(-1) ?? ""
4171
+ );
4172
+ const formattedDateByLanguage = formatDateToSubmit(
4173
+ value?.split(DATA_TIME_SEPARATOR)?.at(0) ?? ""
4174
+ );
4167
4175
  const [innerDate, setInnerDate] = useState(
4168
4176
  formattedDateByLanguage ? new Date(formattedDateByLanguage) : void 0
4169
4177
  );
@@ -4177,8 +4185,7 @@ var InputDateTimePickerSingle = ({
4177
4185
  setMonth(/* @__PURE__ */ new Date());
4178
4186
  };
4179
4187
  const handleInnerInputChange = (text) => {
4180
- const dateSlice = text.substring(0, 11).trim();
4181
- let hourSlice = text.substring(11).trim();
4188
+ const [dateSlice = "", hourSlice = ""] = text.split(DATA_TIME_SEPARATOR);
4182
4189
  if (!text) {
4183
4190
  onChange?.(text);
4184
4191
  handleClearValue();
@@ -4195,22 +4202,31 @@ var InputDateTimePickerSingle = ({
4195
4202
  handleClearValue();
4196
4203
  return;
4197
4204
  }
4198
- if (!timeFormatIsValid(hourSlice)) {
4199
- hourSlice = "";
4200
- setInnerTimeValue("");
4201
- } else {
4202
- setInnerTimeValue(hourSlice);
4203
- }
4204
- onChange?.(text, date, hourSlice);
4205
+ const [hour, minutes] = hourSlice.split(":");
4206
+ const normalizedTime = [
4207
+ hour ? Math.min(Math.max(+hour, 0), 23).toString() : "",
4208
+ minutes ? Math.min(Math.max(+minutes, 0), 59).toString() : ""
4209
+ ].filter(Boolean).join(":");
4210
+ setInnerTimeValue(normalizedTime);
4211
+ const [dateStr] = text.split(DATA_TIME_SEPARATOR);
4212
+ onChange?.(
4213
+ [dateStr, normalizedTime].filter(Boolean).join(DATA_TIME_SEPARATOR),
4214
+ date,
4215
+ normalizedTime
4216
+ );
4205
4217
  setInnerDate(date);
4206
4218
  };
4207
4219
  const handleOnChangeTime = (newTime) => {
4208
- const [date = ""] = value?.split(" ") ?? [];
4220
+ const [date = ""] = value?.split(DATA_TIME_SEPARATOR) ?? [];
4209
4221
  setInnerTimeValue(newTime);
4210
4222
  if (date && !dateFormatIsValid(date, locale)) {
4211
4223
  handleClearValue();
4212
4224
  }
4213
- onChange?.(date + " " + newTime, innerDate, newTime);
4225
+ onChange?.(
4226
+ date + (newTime ? DATA_TIME_SEPARATOR + newTime : ""),
4227
+ innerDate,
4228
+ newTime
4229
+ );
4214
4230
  };
4215
4231
  const handleKeyDown = (e) => {
4216
4232
  if ((e.altKey || e.ctrlKey || e.metaKey) && e.key !== "z") return;
@@ -4238,7 +4254,7 @@ var InputDateTimePickerSingle = ({
4238
4254
  }).format(date);
4239
4255
  setInnerDate(date);
4240
4256
  onChange?.(
4241
- [dateToStr, innerTimeValue].filter(Boolean).join(" "),
4257
+ [dateToStr, innerTimeValue].filter(Boolean).join(DATA_TIME_SEPARATOR),
4242
4258
  date,
4243
4259
  innerTimeValue
4244
4260
  );
@@ -4252,6 +4268,11 @@ var InputDateTimePickerSingle = ({
4252
4268
  useEffect(() => {
4253
4269
  if (innerDate) setMonth(innerDate);
4254
4270
  }, [innerDate]);
4271
+ const maskOptions = {
4272
+ mask: "__/__/____ - __:__",
4273
+ replacement: { _: /\d/ }
4274
+ };
4275
+ const inputRef = useMask(maskOptions);
4255
4276
  return /* @__PURE__ */ jsxs(Popover, { open: popoverIsOpen, onOpenChange: setPopoverIsOpen, children: [
4256
4277
  /* @__PURE__ */ jsx(PopoverTrigger, { className, asChild: true, children: /* @__PURE__ */ jsx(
4257
4278
  "div",
@@ -4261,6 +4282,7 @@ var InputDateTimePickerSingle = ({
4261
4282
  children: /* @__PURE__ */ jsx(
4262
4283
  InputText,
4263
4284
  {
4285
+ ref: inputRef,
4264
4286
  placeholder,
4265
4287
  value,
4266
4288
  className,
@@ -4286,7 +4308,6 @@ var InputDateTimePickerSingle = ({
4286
4308
  setPopoverIsOpen(true);
4287
4309
  }
4288
4310
  },
4289
- maxLength: 16,
4290
4311
  onClean: onClean ? () => {
4291
4312
  onClean();
4292
4313
  handleClearValue();
@@ -4323,7 +4344,7 @@ var InputDateTimePickerSingle = ({
4323
4344
  /* @__PURE__ */ jsx(
4324
4345
  InputTime,
4325
4346
  {
4326
- placeholder: "00:00",
4347
+ placeholder: "hh:mm",
4327
4348
  value: innerTimeValue,
4328
4349
  onChange: handleOnChangeTime,
4329
4350
  ref: inputTimeRef,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikatec/nebula-react",
3
- "version": "1.0.19",
3
+ "version": "1.0.21",
4
4
  "description": "React components",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -50,18 +50,20 @@
50
50
  "@radix-ui/react-tabs": "^1.1.12",
51
51
  "@radix-ui/react-toggle": "^1.1.8",
52
52
  "@radix-ui/react-tooltip": "^1.2.6",
53
+ "@react-input/mask": "^2.0.4",
53
54
  "class-variance-authority": "^0.7.1",
55
+ "date-fns": "^4.1.0",
54
56
  "react-day-picker": "^9.8.1",
55
57
  "react-phone-number-input": "^3.4.12",
56
58
  "react-select": "^5.10.1",
57
59
  "sonner": "^2.0.5",
58
- "tailwind-merge": "^2.6.0",
59
- "date-fns": "^4.1.0"
60
+ "tailwind-merge": "^2.6.0"
60
61
  },
61
62
  "peerDependencies": {
62
- "react": "^18.3.1",
63
- "react-dom": "18.3.1",
63
+ "@react-input/mask": "^2.0.4",
64
64
  "date-fns": "^4.1.0",
65
- "lucide-react": "^0.454.0"
65
+ "lucide-react": "^0.454.0",
66
+ "react": "^18.3.1",
67
+ "react-dom": "18.3.1"
66
68
  }
67
69
  }