bianic-ui 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +49 -49
  2. package/dist/cjs/index.js +457 -104
  3. package/dist/cjs/lib.css +1 -1
  4. package/dist/cjs/types/components/Forms/DatePicker/DateInputDisplay.d.ts +2 -2
  5. package/dist/cjs/types/components/Forms/DatePicker/DatePicker.d.ts +4 -3
  6. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/DateDisplay.d.ts +1 -1
  7. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/MonthDisplay.d.ts +1 -1
  8. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/PickerContent.d.ts +15 -0
  9. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/PickerHeader.d.ts +18 -0
  10. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/RangePicker.d.ts +11 -0
  11. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/SinglePicker.d.ts +9 -0
  12. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/index.d.ts +4 -0
  13. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/helpers/dateUtils.d.ts +10 -1
  14. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/hooks/useCalendarLogic.d.ts +1 -0
  15. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/types/types.d.ts +3 -2
  16. package/dist/cjs/types/components/Forms/DatePicker/RangeDatePickerSimulation.d.ts +3 -0
  17. package/dist/cjs/types/components/Modal/ModalNonCloseable.d.ts +2 -0
  18. package/dist/cjs/types/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
  19. package/dist/cjs/types/stories/Modal/ModalNonCloseable.stories.d.ts +13 -0
  20. package/dist/esm/index.js +457 -104
  21. package/dist/esm/lib.css +1 -1
  22. package/dist/esm/types/components/Forms/DatePicker/DateInputDisplay.d.ts +2 -2
  23. package/dist/esm/types/components/Forms/DatePicker/DatePicker.d.ts +4 -3
  24. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/DateDisplay.d.ts +1 -1
  25. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/MonthDisplay.d.ts +1 -1
  26. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/PickerContent.d.ts +15 -0
  27. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/PickerHeader.d.ts +18 -0
  28. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/RangePicker.d.ts +11 -0
  29. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/SinglePicker.d.ts +9 -0
  30. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/index.d.ts +4 -0
  31. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/helpers/dateUtils.d.ts +10 -1
  32. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/hooks/useCalendarLogic.d.ts +1 -0
  33. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/types/types.d.ts +3 -2
  34. package/dist/esm/types/components/Forms/DatePicker/RangeDatePickerSimulation.d.ts +3 -0
  35. package/dist/esm/types/components/Modal/ModalNonCloseable.d.ts +2 -0
  36. package/dist/esm/types/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
  37. package/dist/esm/types/stories/Modal/ModalNonCloseable.stories.d.ts +13 -0
  38. package/dist/index.d.ts +7 -5
  39. package/package.json +142 -141
  40. package/src/style/color.css +650 -650
  41. package/src/style/scrollbar.css +78 -78
  42. package/tailwind.config.js +574 -574
package/dist/esm/index.js CHANGED
@@ -117,6 +117,8 @@ function TbCircleCheckFilled (props) {
117
117
  return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M12 3a9 9 0 1 0 9 9"},"child":[]}]})(props);
118
118
  }function TbPlaystationX (props) {
119
119
  return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M12 21a9 9 0 0 0 9 -9a9 9 0 0 0 -9 -9a9 9 0 0 0 -9 9a9 9 0 0 0 9 9z"},"child":[]},{"tag":"path","attr":{"d":"M8.5 8.5l7 7"},"child":[]},{"tag":"path","attr":{"d":"M8.5 15.5l7 -7"},"child":[]}]})(props);
120
+ }function TbRefresh (props) {
121
+ return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"},"child":[]},{"tag":"path","attr":{"d":"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"},"child":[]}]})(props);
120
122
  }function TbX (props) {
121
123
  return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M18 6l-12 12"},"child":[]},{"tag":"path","attr":{"d":"M6 6l12 12"},"child":[]}]})(props);
122
124
  }function TbXboxX (props) {
@@ -372,6 +374,16 @@ function __rest(s, e) {
372
374
  return t;
373
375
  }
374
376
 
377
+ function __spreadArray(to, from, pack) {
378
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
379
+ if (ar || !(i in from)) {
380
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
381
+ ar[i] = from[i];
382
+ }
383
+ }
384
+ return to.concat(ar || Array.prototype.slice.call(from));
385
+ }
386
+
375
387
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
376
388
  var e = new Error(message);
377
389
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -3106,7 +3118,7 @@ var checkIsValidDate = function (dateString) {
3106
3118
  date.getUTCMonth() === month - 1 &&
3107
3119
  date.getUTCDate() === day);
3108
3120
  };
3109
- var dateToInputString$1 = function (dateObj) {
3121
+ var dateToInputString = function (dateObj) {
3110
3122
  if (!(dateObj instanceof Date) || isNaN(dateObj.getTime()))
3111
3123
  return '';
3112
3124
  var year = dateObj.getFullYear();
@@ -3114,9 +3126,31 @@ var dateToInputString$1 = function (dateObj) {
3114
3126
  var day = String(dateObj.getDate()).padStart(2, '0');
3115
3127
  return "".concat(year, "-").concat(month, "-").concat(day);
3116
3128
  };
3129
+ /**
3130
+ * Check if two months are adjacent (consecutive)
3131
+ * @param leftMonth - Month number (0-11) of left panel
3132
+ * @param leftYear - Year of left panel
3133
+ * @param rightMonth - Month number (0-11) of right panel
3134
+ * @param rightYear - Year of right panel
3135
+ * @returns true if months are adjacent
3136
+ */
3137
+ var areMonthsAdjacent = function (leftMonth, leftYear, rightMonth, rightYear) {
3138
+ // Check if right is exactly one month after left
3139
+ if (leftMonth === 11) {
3140
+ // December + 1 month = January of next year
3141
+ return rightMonth === 0 && rightYear === leftYear + 1;
3142
+ }
3143
+ else {
3144
+ // Any other month + 1 month
3145
+ return rightMonth === leftMonth + 1 && rightYear === leftYear;
3146
+ }
3147
+ };
3117
3148
 
3118
3149
  var DateDisplay = function (_a) {
3119
3150
  var displayDays = _a.displayDays, viewMonthValue = _a.viewMonthValue, selectedDate = _a.selectedDate, onDateSelect = _a.onDateSelect, minDateValue = _a.minDateValue, maxDateValue = _a.maxDateValue;
3151
+ var isRangeMode = Array.isArray(selectedDate) && selectedDate.length === 2;
3152
+ var startRangeDate = isRangeMode && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate[0]) ? new Date(selectedDate[0]) : null;
3153
+ var endRangeDate = isRangeMode && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate[1]) ? new Date(selectedDate[1]) : null;
3120
3154
  return (React.createElement("div", null,
3121
3155
  React.createElement("div", { className: "bianic-datepicker-calendar-days-grid-header grid grid-cols-7 gap-[3px] pb-1.5" }, DAYS_MAP.map(function (day) { return (React.createElement("div", { key: day, className: "bianic-datepicker-calendar-day flex h-[18px] w-[31px] items-center justify-center" },
3122
3156
  React.createElement(Text, { variant: "small-text", extended: "text-bia-coolgrey" }, day.slice(0, 3)))); })),
@@ -3124,16 +3158,43 @@ var DateDisplay = function (_a) {
3124
3158
  var isOutOfRange = !!((minDateValue && date < minDateValue) ||
3125
3159
  (maxDateValue && date > maxDateValue));
3126
3160
  var isOutOfMonth = date.getMonth() !== viewMonthValue;
3161
+ var isStartRange = isRangeMode && checkDateEquals(date, startRangeDate);
3162
+ var isEndRange = isRangeMode && checkDateEquals(date, endRangeDate);
3127
3163
  var isSelected = selectedDate
3128
- ? checkDateEquals(date, new Date(selectedDate))
3164
+ ? isRangeMode
3165
+ ? isStartRange || isEndRange
3166
+ : checkDateEquals(date, new Date(selectedDate))
3167
+ : false;
3168
+ var isBetween = isRangeMode && startRangeDate && endRangeDate
3169
+ ? (function () {
3170
+ var start = startRangeDate;
3171
+ var end = endRangeDate;
3172
+ if (start > end) {
3173
+ var t = start;
3174
+ start = end;
3175
+ end = t;
3176
+ }
3177
+ return date > start && date < end;
3178
+ })()
3129
3179
  : false;
3130
3180
  var isToday = checkDateEquals(date, new Date(TODAY_VALUE));
3131
- return (React.createElement("button", { key: date.toString(), className: "bianic-datepicker-calendar-day flex h-[31px] w-[31px] items-center justify-center rounded-full ".concat(isSelected
3181
+ var customClassname = isRangeMode && (isBetween || isStartRange || isEndRange)
3182
+ ? isBetween
3183
+ ? 'w-full'
3184
+ : isStartRange
3185
+ ? 'w-full rounded-l-full'
3186
+ : 'rounded-r-full'
3187
+ : 'w-[31px] rounded-full';
3188
+ return (React.createElement("button", { key: date.toString(), className: "bianic-datepicker-calendar-day flex h-[31px] items-center justify-center ".concat(customClassname, " ").concat(isSelected
3132
3189
  ? 'border border-bia-blue-dark-10 bg-bia-blue-dark-10'
3133
- : isToday && !isOutOfRange
3134
- ? 'border border-bia-blue-light-50 bg-bia-blue-pastel'
3135
- : 'hover:bg-bia-blue-pastel'), disabled: isOutOfRange, onClick: function () { return onDateSelect(date); } },
3136
- React.createElement(Text, { variant: "small-text", extended: isSelected
3190
+ : isBetween
3191
+ ? isOutOfMonth
3192
+ ? 'border border-bia-blue-light-50 bg-bia-blue-light-50'
3193
+ : 'border border-bia-blue-light-10 bg-bia-blue-light-10'
3194
+ : isToday && !isOutOfRange
3195
+ ? 'border border-bia-blue-light-50 bg-bia-blue-pastel'
3196
+ : 'hover:bg-bia-blue-pastel'), disabled: isOutOfRange, onClick: function () { return onDateSelect(date); } },
3197
+ React.createElement(Text, { variant: "small-text", extended: isSelected || isBetween
3137
3198
  ? 'text-bia-white'
3138
3199
  : isOutOfRange
3139
3200
  ? 'text-bia-coolgrey-light-50'
@@ -3144,7 +3205,19 @@ var DateDisplay = function (_a) {
3144
3205
  };
3145
3206
 
3146
3207
  var MonthDisplay = function (_a) {
3147
- var viewYearValue = _a.viewYearValue, selectedDate = _a.selectedDate, viewMonthValue = _a.viewMonthValue, minDateValue = _a.minDateValue, maxDateValue = _a.maxDateValue, onMonthSelect = _a.onMonthSelect;
3208
+ var viewYearValue = _a.viewYearValue, selectedDate = _a.selectedDate; _a.viewMonthValue; var minDateValue = _a.minDateValue, maxDateValue = _a.maxDateValue, onMonthSelect = _a.onMonthSelect;
3209
+ var selectedDates = Array.isArray(selectedDate)
3210
+ ? selectedDate
3211
+ : selectedDate
3212
+ ? [selectedDate]
3213
+ : [];
3214
+ var isMonthAlreadySelected = function (monthIndex) {
3215
+ return selectedDates.some(function (date) {
3216
+ var dateYear = parseInt(date.slice(0, 4));
3217
+ var dateMonth = parseInt(date.slice(5, 7)) - 1;
3218
+ return dateYear === viewYearValue && dateMonth === monthIndex;
3219
+ });
3220
+ };
3148
3221
  return (React.createElement("div", { className: "bianic-datepicker-calendar-month-grid grid grid-cols-3 gap-y-1.5" }, MONTH_MAP.map(function (month, index) {
3149
3222
  var isOutOfRange = !!((minDateValue &&
3150
3223
  minDateValue.getFullYear() <= viewYearValue &&
@@ -3158,16 +3231,25 @@ var MonthDisplay = function (_a) {
3158
3231
  (maxDateValue.getFullYear() === viewYearValue
3159
3232
  ? maxDateValue.getMonth()
3160
3233
  : 11)));
3234
+ var isAlreadySelected = isMonthAlreadySelected(index);
3161
3235
  var isSelected = selectedDate &&
3162
- viewYearValue === parseInt(selectedDate.slice(0, 4)) &&
3163
- index === viewMonthValue;
3236
+ (Array.isArray(selectedDate) ? selectedDate[0] : selectedDate) &&
3237
+ viewYearValue ===
3238
+ parseInt((Array.isArray(selectedDate)
3239
+ ? selectedDate[0]
3240
+ : selectedDate).slice(0, 4)) &&
3241
+ index ===
3242
+ parseInt((Array.isArray(selectedDate)
3243
+ ? selectedDate[0]
3244
+ : selectedDate).slice(5, 7)) -
3245
+ 1;
3164
3246
  return (React.createElement("button", { key: month, onClick: function (e) {
3165
3247
  e.stopPropagation();
3166
3248
  onMonthSelect(index);
3167
- }, disabled: isOutOfRange, className: "bianic-datepicker-calendar-month mx-[15px] flex h-[31px] items-center justify-center rounded-full ".concat(isSelected
3249
+ }, disabled: isOutOfRange, className: "bianic-datepicker-calendar-month mx-[15px] flex h-[31px] items-center justify-center rounded-full ".concat(isSelected || isAlreadySelected
3168
3250
  ? 'border border-bia-blue-dark-10 bg-bia-blue-dark-10'
3169
3251
  : 'enabled:hover:bg-bia-blue-pastel') },
3170
- React.createElement(Text, { variant: "small-text", extended: isSelected
3252
+ React.createElement(Text, { variant: "small-text", extended: isSelected || isAlreadySelected
3171
3253
  ? 'text-bia-white'
3172
3254
  : isOutOfRange
3173
3255
  ? 'text-bia-coolgrey-light-50'
@@ -3198,6 +3280,38 @@ var YearDisplay = function (_a) {
3198
3280
  })));
3199
3281
  };
3200
3282
 
3283
+ var PickerHeader = function (_a) {
3284
+ var pickerMode = _a.pickerMode, viewMonthValue = _a.viewMonthValue, viewYearValue = _a.viewYearValue, yearDisplayRange = _a.yearDisplayRange, isPrevDisabled = _a.isPrevDisabled, isNextDisabled = _a.isNextDisabled, handlePrevMonth = _a.handlePrevMonth, handlePrevYear = _a.handlePrevYear, handlePrevDecade = _a.handlePrevDecade, handleNextMonth = _a.handleNextMonth, handleNextYear = _a.handleNextYear, handleNextDecade = _a.handleNextDecade, handlePickerMode = _a.handlePickerMode;
3285
+ return (React.createElement("div", { className: "bianic-datepicker-calendar-controller flex w-full items-center justify-between" },
3286
+ React.createElement("button", { className: "bianic-datepicker-calendar-prev-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isPrevDisabled(), onClick: pickerMode === 'date'
3287
+ ? handlePrevMonth
3288
+ : pickerMode === 'month'
3289
+ ? handlePrevYear
3290
+ : handlePrevDecade },
3291
+ React.createElement(TbChevronLeft, { size: 18 })),
3292
+ React.createElement("div", { className: "bianic-datepicker-calendar-current-month flex items-center justify-center gap-1" },
3293
+ React.createElement("button", { className: pickerMode === 'date' ? '' : 'hidden', onClick: function (e) {
3294
+ e.stopPropagation();
3295
+ handlePickerMode('month');
3296
+ } },
3297
+ React.createElement(Text, { variant: "normal-text-semibold" },
3298
+ MONTH_MAP[viewMonthValue],
3299
+ " ")),
3300
+ React.createElement("button", { className: pickerMode === 'date' || pickerMode === 'month' ? '' : 'hidden', onClick: function (e) {
3301
+ e.stopPropagation();
3302
+ handlePickerMode('year');
3303
+ } },
3304
+ React.createElement(Text, { variant: "normal-text" }, viewYearValue)),
3305
+ React.createElement("button", { className: pickerMode === 'year' ? '' : 'hidden' },
3306
+ React.createElement(Text, { variant: "normal-text" }, "".concat(yearDisplayRange[1], " - ").concat(yearDisplayRange[10])))),
3307
+ React.createElement("button", { className: "bianic-datepicker-calendar-next-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isNextDisabled(), onClick: pickerMode === 'date'
3308
+ ? handleNextMonth
3309
+ : pickerMode === 'month'
3310
+ ? handleNextYear
3311
+ : handleNextDecade },
3312
+ React.createElement(TbChevronRight, { size: 18 }))));
3313
+ };
3314
+
3201
3315
  var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3202
3316
  var _a = useState('date'), pickerMode = _a[0], setPickerMode = _a[1];
3203
3317
  var _b = useState('date'), prevMode = _b[0], setPrevMode = _b[1];
@@ -3238,12 +3352,16 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3238
3352
  setViewDecadeValue(function (prev) { return prev + 10; });
3239
3353
  };
3240
3354
  useEffect(function () {
3241
- var monthStartDay = new Date("".concat(viewYearValue, "-").concat(viewMonthValue + 1, "-01")).getDay() === 0
3355
+ var calculatedDisplayDays = getDisplayDays(viewMonthValue, viewYearValue);
3356
+ setDisplayDays(calculatedDisplayDays);
3357
+ }, [viewMonthValue, viewYearValue, selectedDate]);
3358
+ var getDisplayDays = function (month, year) {
3359
+ var monthStartDay = new Date("".concat(year, "-").concat(month + 1, "-01")).getDay() === 0
3242
3360
  ? 6
3243
- : new Date("".concat(viewYearValue, "-").concat(viewMonthValue + 1, "-01")).getDay() - 1;
3244
- var monthTotalDate = new Date(viewYearValue, viewMonthValue + 1, 0).getDate();
3361
+ : new Date("".concat(year, "-").concat(month + 1, "-01")).getDay() - 1;
3362
+ var monthTotalDate = new Date(year, month + 1, 0).getDate();
3245
3363
  var monthCalenderView = monthTotalDate + monthStartDay > 35 ? 42 : 35;
3246
- var viewFirstDate = new Date("".concat(viewYearValue, "-").concat(viewMonthValue + 1, "-01"));
3364
+ var viewFirstDate = new Date("".concat(year, "-").concat(month + 1, "-01"));
3247
3365
  viewFirstDate.setDate(viewFirstDate.getDate() - monthStartDay);
3248
3366
  var viewLastDate = new Date(viewFirstDate);
3249
3367
  viewLastDate.setDate(viewLastDate.getDate() + monthCalenderView - 1);
@@ -3251,8 +3369,8 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3251
3369
  for (var d = new Date(viewFirstDate); d <= viewLastDate; d.setDate(d.getDate() + 1)) {
3252
3370
  tempDisplayDays.push(new Date(d));
3253
3371
  }
3254
- setDisplayDays(tempDisplayDays);
3255
- }, [viewMonthValue, viewYearValue, selectedDate]);
3372
+ return tempDisplayDays;
3373
+ };
3256
3374
  var handleSetSelectedDate = function (date, onDateChange) {
3257
3375
  if (date.getMonth() !== viewMonthValue) {
3258
3376
  // if the date is not in the current view month, update the view month and year
@@ -3260,7 +3378,7 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3260
3378
  setViewYearValue(date.getFullYear());
3261
3379
  }
3262
3380
  if (onDateChange) {
3263
- onDateChange(dateToInputString$1(date));
3381
+ onDateChange(dateToInputString(date));
3264
3382
  }
3265
3383
  };
3266
3384
  var handlePickerMode = function (mode) {
@@ -3334,13 +3452,277 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3334
3452
  yearDisplayRange: yearDisplayRange,
3335
3453
  isPrevDisabled: isPrevDisabled,
3336
3454
  isNextDisabled: isNextDisabled,
3455
+ getDisplayDays: getDisplayDays,
3337
3456
  };
3338
3457
  };
3339
3458
 
3459
+ var PickerContent = function (_a) {
3460
+ var selectedDate = _a.selectedDate, onDateSelect = _a.onDateSelect, initialViewMonth = _a.initialViewMonth, initialViewYear = _a.initialViewYear, minDate = _a.minDate, maxDate = _a.maxDate, onPrevMonth = _a.onPrevMonth, onNextMonth = _a.onNextMonth, onMonthSelect = _a.onMonthSelect, onYearSelect = _a.onYearSelect;
3461
+ var _b = useCalendarLogic(
3462
+ // use first selectedDate if array
3463
+ Array.isArray(selectedDate)
3464
+ ? selectedDate[0]
3465
+ : selectedDate, minDate, maxDate), pickerMode = _b.pickerMode, viewMonthValue = _b.viewMonthValue, viewYearValue = _b.viewYearValue, yearDisplayRange = _b.yearDisplayRange, isPrevDisabled = _b.isPrevDisabled, isNextDisabled = _b.isNextDisabled, internalHandlePrevMonth = _b.handlePrevMonth, handlePrevYear = _b.handlePrevYear, handlePrevDecade = _b.handlePrevDecade, internalHandleNextMonth = _b.handleNextMonth, handleNextYear = _b.handleNextYear, handleNextDecade = _b.handleNextDecade, handlePickerMode = _b.handlePickerMode, getDisplayDays = _b.getDisplayDays, setViewMonthValue = _b.setViewMonthValue, setViewYearValue = _b.setViewYearValue, maxDateValue = _b.maxDateValue, minDateValue = _b.minDateValue;
3466
+ useEffect(function () {
3467
+ if (typeof initialViewMonth === 'number') {
3468
+ setViewMonthValue(initialViewMonth);
3469
+ }
3470
+ if (typeof initialViewYear === 'number') {
3471
+ setViewYearValue(initialViewYear);
3472
+ }
3473
+ }, [initialViewMonth, initialViewYear]);
3474
+ // Use custom handlers for range mode, fall back to internal for single mode
3475
+ var handlePrevMonth = onPrevMonth || internalHandlePrevMonth;
3476
+ var handleNextMonth = onNextMonth || internalHandleNextMonth;
3477
+ var days = getDisplayDays(viewMonthValue, viewYearValue);
3478
+ return (React.createElement("div", { className: "picker-body flex w-[250px] flex-col gap-[15px]" },
3479
+ React.createElement(PickerHeader, { pickerMode: pickerMode, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange, isPrevDisabled: isPrevDisabled, isNextDisabled: isNextDisabled, handlePrevMonth: handlePrevMonth, handlePrevYear: handlePrevYear, handlePrevDecade: handlePrevDecade, handleNextMonth: handleNextMonth, handleNextYear: handleNextYear, handleNextDecade: handleNextDecade, handlePickerMode: handlePickerMode }),
3480
+ pickerMode === 'date' && (React.createElement(DateDisplay, { displayDays: days, maxDateValue: maxDateValue, minDateValue: minDateValue, onDateSelect: onDateSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue })),
3481
+ pickerMode === 'month' && (React.createElement(MonthDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onMonthSelect: function (m) {
3482
+ if (onMonthSelect)
3483
+ onMonthSelect(m);
3484
+ else
3485
+ setViewMonthValue(m);
3486
+ handlePickerMode('date');
3487
+ }, selectedDate: selectedDate, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue })),
3488
+ pickerMode === 'year' && (React.createElement(YearDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onYearSelect: function (y) {
3489
+ if (onYearSelect)
3490
+ onYearSelect(y);
3491
+ else
3492
+ setViewYearValue(y);
3493
+ handlePickerMode('month');
3494
+ }, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))));
3495
+ };
3496
+
3497
+ var SinglePicker = function (_a) {
3498
+ var selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, minDate = _a.minDate, maxDate = _a.maxDate;
3499
+ var handleDateSelect = function (date) {
3500
+ onDateChange(dateToInputString(date));
3501
+ };
3502
+ return (React.createElement("div", { className: "single-picker picker-body" },
3503
+ React.createElement(PickerContent, { selectedDate: selectedDate !== null && selectedDate !== void 0 ? selectedDate : null, onDateSelect: handleDateSelect, minDate: minDate, maxDate: maxDate })));
3504
+ };
3505
+
3506
+ var RangePicker = function (_a) {
3507
+ var
3508
+ // pickerMode,
3509
+ selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, onClose = _a.onClose, minDate = _a.minDate, maxDate = _a.maxDate, isPickerOpen = _a.isPickerOpen;
3510
+ // compute initial view month/year for left and right panels from current selection
3511
+ var leftInitDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
3512
+ var rightInitDate = selectedDate && selectedDate[1] ? new Date(selectedDate[1]) : new Date();
3513
+ var leftInitMonth = leftInitDate.getMonth();
3514
+ var leftInitYear = leftInitDate.getFullYear();
3515
+ var rightInitMonth = rightInitDate
3516
+ ? rightInitDate.getMonth()
3517
+ : leftInitMonth === 11
3518
+ ? 0
3519
+ : leftInitMonth + 1;
3520
+ var rightInitYear = rightInitDate
3521
+ ? rightInitDate.getFullYear()
3522
+ : leftInitMonth === 11
3523
+ ? leftInitYear + 1
3524
+ : leftInitYear;
3525
+ // State to track left and right panel month/year
3526
+ var _b = useState(leftInitMonth), leftMonth = _b[0], setLeftMonth = _b[1];
3527
+ var _c = useState(leftInitYear), leftYear = _c[0], setLeftYear = _c[1];
3528
+ var _d = useState(rightInitMonth), rightMonth = _d[0], setRightMonth = _d[1];
3529
+ var _e = useState(rightInitYear), rightYear = _e[0], setRightYear = _e[1];
3530
+ var _f = useState(selectedDate || []), tempSelectedDate = _f[0], setTempSelectedDate = _f[1];
3531
+ useEffect(function () {
3532
+ // If both dates are in the same month/year, advance right picker to next month
3533
+ if (rightMonth === leftMonth && rightYear === leftYear) {
3534
+ var tempRightMonth = leftMonth === 11 ? 0 : leftMonth + 1;
3535
+ var tempRightYear = leftMonth === 11 ? leftYear + 1 : leftYear;
3536
+ setRightMonth(tempRightMonth);
3537
+ setRightYear(tempRightYear);
3538
+ }
3539
+ }, [leftMonth, leftYear, rightMonth, rightYear]);
3540
+ useEffect(function () {
3541
+ if (!isPickerOpen)
3542
+ setTempSelectedDate(selectedDate || []);
3543
+ }, [isPickerOpen]);
3544
+ var isAdjacent = useMemo(function () { return areMonthsAdjacent(leftMonth, leftYear, rightMonth, rightYear); }, [leftMonth, leftYear, rightMonth, rightYear]);
3545
+ // Helper function to ensure left picker is always smaller than right picker
3546
+ var ensureOrderedPickers = function (newLeftMonth, newLeftYear, newRightMonth, newRightYear) {
3547
+ // If left year is greater than right year, swap them
3548
+ if (newLeftYear > newRightYear) {
3549
+ setLeftMonth(newRightMonth);
3550
+ setLeftYear(newRightYear);
3551
+ setRightMonth(newLeftMonth);
3552
+ setRightYear(newLeftYear);
3553
+ }
3554
+ // If years are equal and left month is greater than or equal to right month, swap months
3555
+ else if (newLeftYear === newRightYear && newLeftMonth >= newRightMonth) {
3556
+ setLeftMonth(newRightMonth);
3557
+ setRightMonth(newLeftMonth);
3558
+ }
3559
+ // Otherwise, keep the order as is
3560
+ else {
3561
+ setLeftMonth(newLeftMonth);
3562
+ setLeftYear(newLeftYear);
3563
+ setRightMonth(newRightMonth);
3564
+ setRightYear(newRightYear);
3565
+ }
3566
+ };
3567
+ var handleLeftPrevMonth = function () {
3568
+ if (leftMonth === 0) {
3569
+ ensureOrderedPickers(11, leftYear - 1, rightMonth, rightYear);
3570
+ }
3571
+ else {
3572
+ ensureOrderedPickers(leftMonth - 1, leftYear, rightMonth, rightYear);
3573
+ }
3574
+ };
3575
+ var handleLeftNextMonth = function () {
3576
+ var newLeftMonth = leftMonth;
3577
+ var newLeftYear = leftYear;
3578
+ var newRightMonth = rightMonth;
3579
+ var newRightYear = rightYear;
3580
+ if (isAdjacent) {
3581
+ // If adjacent, move both panels forward
3582
+ if (leftMonth === 11) {
3583
+ newLeftMonth = 0;
3584
+ newLeftYear = leftYear + 1;
3585
+ }
3586
+ else {
3587
+ newLeftMonth = leftMonth + 1;
3588
+ }
3589
+ if (rightMonth === 11) {
3590
+ newRightMonth = 0;
3591
+ newRightYear = rightYear + 1;
3592
+ }
3593
+ else {
3594
+ newRightMonth = rightMonth + 1;
3595
+ }
3596
+ }
3597
+ else {
3598
+ if (leftMonth === 11) {
3599
+ newLeftMonth = 0;
3600
+ newLeftYear = leftYear + 1;
3601
+ }
3602
+ else {
3603
+ newLeftMonth = leftMonth + 1;
3604
+ }
3605
+ }
3606
+ ensureOrderedPickers(newLeftMonth, newLeftYear, newRightMonth, newRightYear);
3607
+ };
3608
+ var handleRightPrevMonth = function () {
3609
+ var newLeftMonth = leftMonth;
3610
+ var newLeftYear = leftYear;
3611
+ var newRightMonth = rightMonth;
3612
+ var newRightYear = rightYear;
3613
+ if (isAdjacent) {
3614
+ // If adjacent, move both panels backward
3615
+ if (leftMonth === 0) {
3616
+ newLeftMonth = 11;
3617
+ newLeftYear = leftYear - 1;
3618
+ }
3619
+ else {
3620
+ newLeftMonth = leftMonth - 1;
3621
+ }
3622
+ if (rightMonth === 0) {
3623
+ newRightMonth = 11;
3624
+ newRightYear = rightYear - 1;
3625
+ }
3626
+ else {
3627
+ newRightMonth = rightMonth - 1;
3628
+ }
3629
+ }
3630
+ else {
3631
+ if (rightMonth === 0) {
3632
+ newRightMonth = 11;
3633
+ newRightYear = rightYear - 1;
3634
+ }
3635
+ else {
3636
+ newRightMonth = rightMonth - 1;
3637
+ }
3638
+ }
3639
+ ensureOrderedPickers(newLeftMonth, newLeftYear, newRightMonth, newRightYear);
3640
+ };
3641
+ var handleRightNextMonth = function () {
3642
+ var newRightMonth = rightMonth;
3643
+ var newRightYear = rightYear;
3644
+ if (rightMonth === 11) {
3645
+ newRightMonth = 0;
3646
+ newRightYear = rightYear + 1;
3647
+ }
3648
+ else {
3649
+ newRightMonth = rightMonth + 1;
3650
+ }
3651
+ ensureOrderedPickers(leftMonth, leftYear, newRightMonth, newRightYear);
3652
+ };
3653
+ var handleYearSelectLeft = function (year) {
3654
+ ensureOrderedPickers(leftMonth, year, rightMonth, rightYear);
3655
+ };
3656
+ var handleYearSelectRight = function (year) {
3657
+ ensureOrderedPickers(leftMonth, leftYear, rightMonth, year);
3658
+ };
3659
+ var handleDateSelect = function (date) {
3660
+ if (tempSelectedDate.length >= 2) {
3661
+ setTempSelectedDate([dateToInputString(date)]);
3662
+ }
3663
+ else {
3664
+ var newDates = __spreadArray(__spreadArray([], tempSelectedDate, true), [dateToInputString(date)], false);
3665
+ if (newDates.length === 2)
3666
+ newDates.sort();
3667
+ setTempSelectedDate(newDates);
3668
+ }
3669
+ };
3670
+ var handleMonthSelect = function (dateIndex, initYear) {
3671
+ return function (val) {
3672
+ var selectedDates = Array.isArray(selectedDate)
3673
+ ? selectedDate
3674
+ : selectedDate
3675
+ ? [selectedDate]
3676
+ : [];
3677
+ var isMonthAlreadySelected = selectedDates.some(function (date) {
3678
+ var dateYear = parseInt(date.slice(0, 4));
3679
+ var dateMonth = parseInt(date.slice(5, 7)) - 1;
3680
+ return dateYear === initYear && dateMonth === val;
3681
+ });
3682
+ if (isMonthAlreadySelected) {
3683
+ if (!selectedDates[dateIndex]) {
3684
+ return;
3685
+ }
3686
+ var selectedMonth = parseInt(selectedDates[dateIndex].slice(5, 7)) - 1;
3687
+ if (val === selectedMonth) {
3688
+ if (dateIndex === 0) {
3689
+ ensureOrderedPickers(selectedMonth, initYear, rightMonth, rightYear);
3690
+ }
3691
+ else {
3692
+ ensureOrderedPickers(leftMonth, leftYear, selectedMonth, initYear);
3693
+ }
3694
+ }
3695
+ else {
3696
+ return;
3697
+ }
3698
+ }
3699
+ else {
3700
+ if (dateIndex === 0) {
3701
+ ensureOrderedPickers(val, initYear, rightMonth, rightYear);
3702
+ }
3703
+ else {
3704
+ ensureOrderedPickers(leftMonth, leftYear, val, initYear);
3705
+ }
3706
+ }
3707
+ };
3708
+ };
3709
+ return (React.createElement("div", { className: "space-y-[30px]" },
3710
+ React.createElement("div", { className: "range-picker picker-body flex gap-x-[22px]" },
3711
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: leftMonth, initialViewYear: leftYear, onPrevMonth: handleLeftPrevMonth, onNextMonth: handleLeftNextMonth, onMonthSelect: handleMonthSelect(0, leftYear), onYearSelect: handleYearSelectLeft }),
3712
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: rightMonth, initialViewYear: rightYear, onPrevMonth: handleRightPrevMonth, onNextMonth: handleRightNextMonth, onMonthSelect: handleMonthSelect(1, rightYear), onYearSelect: handleYearSelectRight })),
3713
+ React.createElement("div", { className: "flex justify-between" },
3714
+ React.createElement(Button, { label: "Reset", size: "sm", variant: "primary-outlined", iconLeft: React.createElement(TbRefresh, { className: "text-bia-blue", size: 14 }), onClick: function () { return setTempSelectedDate([]); } }),
3715
+ React.createElement("div", { className: "flex gap-x-2.5" },
3716
+ React.createElement(Button, { label: "Cancel", size: "sm", variant: "subtle", onClick: onClose }),
3717
+ React.createElement(Button, { label: "Done", size: "sm", iconLeft: React.createElement(TbCheck, { className: "text-bia-white", size: 14 }), variant: "primary", onClick: function () {
3718
+ onDateChange(tempSelectedDate.length ? tempSelectedDate : null);
3719
+ onClose();
3720
+ } })))));
3721
+ };
3722
+
3340
3723
  var PickerCalendar = function (_a) {
3341
- var _b = _a.zIndex, zIndex = _b === void 0 ? 100 : _b, anchorRef = _a.anchorRef, maxDate = _a.maxDate, minDate = _a.minDate, onDateChange = _a.onDateChange; _a.ref; var _c = _a.selectedDate, selectedDate = _c === void 0 ? null : _c, _d = _a.isOpen, isOpen = _d === void 0 ? false : _d, _e = _a.onClose, onClose = _e === void 0 ? function () { } : _e, props = __rest(_a, ["zIndex", "anchorRef", "maxDate", "minDate", "onDateChange", "ref", "selectedDate", "isOpen", "onClose"]);
3724
+ var _b = _a.zIndex, zIndex = _b === void 0 ? 100 : _b, anchorRef = _a.anchorRef, maxDate = _a.maxDate, minDate = _a.minDate, onDateChange = _a.onDateChange; _a.ref; var _c = _a.selectedDate, selectedDate = _c === void 0 ? null : _c, _d = _a.isOpen, isOpen = _d === void 0 ? false : _d, _e = _a.onClose, onClose = _e === void 0 ? function () { } : _e, _f = _a.pickerVariant, pickerVariant = _f === void 0 ? 'range' : _f, props = __rest(_a, ["zIndex", "anchorRef", "maxDate", "minDate", "onDateChange", "ref", "selectedDate", "isOpen", "onClose", "pickerVariant"]);
3342
3725
  // Hooks & States
3343
- var _f = useCalendarLogic(selectedDate, minDate, maxDate), displayDays = _f.displayDays, handleNextDecade = _f.handleNextDecade, handleNextMonth = _f.handleNextMonth, handleNextYear = _f.handleNextYear, handlePickerMode = _f.handlePickerMode, handlePrevDecade = _f.handlePrevDecade, handlePrevMonth = _f.handlePrevMonth, handlePrevYear = _f.handlePrevYear, handleSetSelectedDate = _f.handleSetSelectedDate, isNextDisabled = _f.isNextDisabled, isPrevDisabled = _f.isPrevDisabled, maxDateValue = _f.maxDateValue, minDateValue = _f.minDateValue, pickerMode = _f.pickerMode, setViewMonthValue = _f.setViewMonthValue, setViewYearValue = _f.setViewYearValue, viewMonthValue = _f.viewMonthValue, viewYearValue = _f.viewYearValue, yearDisplayRange = _f.yearDisplayRange;
3344
3726
  var pickerCalendarRef = useRef(null);
3345
3727
  var _g = useDetectOutsideClick(anchorRef, false, pickerCalendarRef), isPickerOpen = _g[0], setIsPickerOpen = _g[1];
3346
3728
  var style = props.style, className = props.className, restProps = __rest(props, ["style", "className"]);
@@ -3348,56 +3730,17 @@ var PickerCalendar = function (_a) {
3348
3730
  useEffect(function () {
3349
3731
  setIsPickerOpen(isOpen);
3350
3732
  }, [isOpen]);
3733
+ return createPortal(React.createElement("div", __assign({ className: "bianic-datepicker-calendar absolute rounded-b-radius-sm bg-bia-white px-1.5 pb-[17px] pt-[15px] text-bia-black shadow-md ".concat(className), ref: pickerCalendarRef, style: __assign(__assign({ zIndex: zIndex, display: isPickerOpen ? 'flex' : 'none' }, positionStyle), style) }, restProps),
3734
+ React.createElement(PickerBody, { selectedDate: selectedDate, minDate: minDate, maxDate: maxDate, onDateChange: onDateChange, isPickerOpen: isPickerOpen, pickerVariant: pickerVariant, onClose: onClose, isOpen: isOpen })), document.body);
3735
+ };
3736
+ var PickerBody = function (_a) {
3737
+ var selectedDate = _a.selectedDate, minDate = _a.minDate, maxDate = _a.maxDate, onDateChange = _a.onDateChange, isPickerOpen = _a.isPickerOpen, _b = _a.pickerVariant, pickerVariant = _b === void 0 ? 'range' : _b, onClose = _a.onClose, isOpen = _a.isOpen;
3351
3738
  useEffect(function () {
3352
3739
  if (!isPickerOpen) {
3353
3740
  onClose();
3354
- handlePickerMode('date');
3355
3741
  }
3356
3742
  }, [isPickerOpen]);
3357
- // Event Handlers
3358
- var handleDateSelect = function (date) {
3359
- handleSetSelectedDate(date, onDateChange);
3360
- };
3361
- var handleMonthSelect = function (month) {
3362
- setViewMonthValue(month);
3363
- handlePickerMode('date');
3364
- };
3365
- var handleYearSelect = function (year) {
3366
- setViewYearValue(year);
3367
- handlePickerMode('month');
3368
- };
3369
- return createPortal(React.createElement("div", __assign({ className: "bianic-datepicker-calendar absolute flex w-[250px] flex-col gap-[15px] rounded-b-radius-sm bg-bia-white px-1.5 pb-[17px] pt-[15px] text-bia-black shadow-md ".concat(className), ref: pickerCalendarRef, style: __assign(__assign({ zIndex: zIndex, display: isPickerOpen ? 'block' : 'none' }, positionStyle), style) }, restProps),
3370
- React.createElement("div", { className: "bianic-datepicker-calendar-controller flex w-full items-center justify-between" },
3371
- React.createElement("button", { className: "bianic-datepicker-calendar-prev-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isPrevDisabled(), onClick: pickerMode === 'date'
3372
- ? handlePrevMonth
3373
- : pickerMode === 'month'
3374
- ? handlePrevYear
3375
- : handlePrevDecade },
3376
- React.createElement(TbChevronLeft, { size: 18 })),
3377
- React.createElement("div", { className: "bianic-datepicker-calendar-current-month flex items-center justify-center gap-1" },
3378
- React.createElement("button", { className: pickerMode === 'date' ? '' : 'hidden', onClick: function (e) {
3379
- e.stopPropagation();
3380
- handlePickerMode('month');
3381
- } },
3382
- React.createElement(Text, { variant: "normal-text-semibold" },
3383
- MONTH_MAP[viewMonthValue],
3384
- ' ')),
3385
- React.createElement("button", { className: pickerMode === 'date' || pickerMode === 'month' ? '' : 'hidden', onClick: function (e) {
3386
- e.stopPropagation();
3387
- handlePickerMode('year');
3388
- } },
3389
- React.createElement(Text, { variant: "normal-text" }, viewYearValue)),
3390
- React.createElement("button", { className: pickerMode === 'year' ? '' : 'hidden' },
3391
- React.createElement(Text, { variant: "normal-text" }, "".concat(yearDisplayRange[1], " - ").concat(yearDisplayRange[10])))),
3392
- React.createElement("button", { className: "bianic-datepicker-calendar-next-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isNextDisabled(), onClick: pickerMode === 'date'
3393
- ? handleNextMonth
3394
- : pickerMode === 'month'
3395
- ? handleNextYear
3396
- : handleNextDecade },
3397
- React.createElement(TbChevronRight, { size: 18 }))),
3398
- pickerMode === 'date' && (React.createElement(DateDisplay, { displayDays: displayDays, maxDateValue: maxDateValue, minDateValue: minDateValue, onDateSelect: handleDateSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue })),
3399
- pickerMode === 'month' && (React.createElement(MonthDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onMonthSelect: handleMonthSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue })),
3400
- pickerMode === 'year' && (React.createElement(YearDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onYearSelect: handleYearSelect, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))), document.body);
3743
+ return (React.createElement("div", { className: "picker-body flex gap-x-5" }, pickerVariant === 'single' ? (React.createElement(SinglePicker, { selectedDate: selectedDate, onDateChange: onDateChange, minDate: minDate, maxDate: maxDate })) : (React.createElement(RangePicker, { selectedDate: selectedDate, onDateChange: onDateChange, minDate: minDate, maxDate: maxDate, onClose: onClose, isPickerOpen: isOpen }))));
3401
3744
  };
3402
3745
 
3403
3746
  var monthMap = [
@@ -3416,12 +3759,22 @@ var monthMap = [
3416
3759
  ];
3417
3760
  var DateInputDisplay = forwardRef(function (_a, ref) {
3418
3761
  var value = _a.value, setValue = _a.setValue, _b = _a.placeholder, placeholder = _b === void 0 ? 'YYYY-MM-DD' : _b, label = _a.label, required = _a.required, id = _a.id, _c = _a.size, size = _c === void 0 ? 'sm' : _c, className = _a.className, _d = _a.disabled, disabled = _d === void 0 ? false : _d, buttonAction = _a.buttonAction, nullDisplay = _a.nullDisplay, props = __rest(_a, ["value", "setValue", "placeholder", "label", "required", "id", "size", "className", "disabled", "buttonAction", "nullDisplay"]);
3762
+ var inputValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3763
+ ? Array.isArray(value)
3764
+ ? "".concat(value[0], " ").concat(value[1] ? "- ".concat(value[1]) : '')
3765
+ : value
3766
+ : '';
3767
+ var viewValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3768
+ ? Array.isArray(value)
3769
+ ? "".concat(displayDateFormatter(new Date(value[0])), " ").concat(value[1] ? "- ".concat(displayDateFormatter(new Date(value[1]))) : '')
3770
+ : displayDateFormatter(new Date(value))
3771
+ : nullDisplay || placeholder;
3419
3772
  var _e = useState(false), isEditing = _e[0], setIsEditing = _e[1];
3420
- var _f = useState(value), dateString = _f[0], setDateString = _f[1];
3773
+ var _f = useState(inputValue), dateString = _f[0], setDateString = _f[1];
3421
3774
  var _g = styleConfig['text'], fieldStyle = _g.fieldStyle;
3422
3775
  var _h = sizeConfig$c[size], iconSize = _h.iconSize, fieldSize = _h.fieldSize, iconPosition = _h.iconPosition;
3423
3776
  var borderStyle = 'border border-bia-grey-dark-10 bg-primary-white';
3424
- var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3777
+ var extendedInputClassName = "w-full ".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3425
3778
  var labelStatus = props.readOnly ? 'read-only:pointer-events-none' : '';
3426
3779
  var handleTextChange = function (event) {
3427
3780
  var rawValue = event.target.value;
@@ -3442,51 +3795,45 @@ var DateInputDisplay = forwardRef(function (_a, ref) {
3442
3795
  };
3443
3796
  var handleBlur = function () {
3444
3797
  setIsEditing(false);
3445
- setDateString(value);
3798
+ setDateString(inputValue);
3446
3799
  };
3447
- var input = isEditing || disabled ? (React.createElement(TextInput, { type: "text", value: dateString !== null && dateString !== void 0 ? dateString : '', onChange: handleTextChange, onBlur: handleBlur, placeholder: placeholder, size: size, inputClassName: className, autoFocus: true, disabled: disabled, actionElement: React.createElement("button", { className: "bianic-datepicker-toggle-button text-bia-coolgrey disabled:cursor-not-allowed", disabled: disabled, onClick: function () {
3800
+ var input = isEditing || disabled ? (React.createElement(TextInput, { type: "text", value: dateString !== null && dateString !== void 0 ? dateString : '', onChange: handleTextChange, onBlur: handleBlur, placeholder: placeholder, size: size, inputClassName: extendedInputClassName, autoFocus: true, disabled: disabled, actionElement: React.createElement("button", { className: "bianic-datepicker-toggle-button text-bia-coolgrey disabled:cursor-not-allowed", disabled: disabled, onClick: function () {
3448
3801
  buttonAction && buttonAction();
3449
3802
  } },
3450
3803
  React.createElement(TbCalendar, { size: iconSize })) })) : (React.createElement(React.Fragment, null,
3451
- React.createElement("div", { role: "button", onClick: function () { return setIsEditing(true); }, className: "bianic-text-input bianic-fgc-target w-full min-w-[185px] rounded hover:rounded-b-none hover:border-b-bia-blue focus:rounded-b-none focus-visible:outline-none disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-80 disabled:text-bia-grey-active ".concat(extendedInputClassName, " ").concat(value || nullDisplay ? 'text-bia-black' : 'text-bia-coolgrey', " ").concat(className) }, value
3452
- ? displayDateFormatter(new Date(value))
3453
- : nullDisplay || placeholder),
3804
+ React.createElement("div", { role: "button", onClick: function () { return setIsEditing(true); }, className: "bianic-text-input bianic-fgc-target w-full rounded hover:rounded-b-none hover:border-b-bia-blue focus:rounded-b-none focus-visible:outline-none disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-80 disabled:text-bia-grey-active ".concat(extendedInputClassName, " ").concat(inputValue || nullDisplay ? 'text-bia-black' : 'text-bia-coolgrey') }, viewValue),
3454
3805
  React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 text-bia-coolgrey ".concat(iconPosition) },
3455
3806
  React.createElement("button", { className: "bianic-datepicker-toggle-button", disabled: disabled, onClick: function () { return buttonAction && buttonAction(); } },
3456
3807
  React.createElement(TbCalendar, { size: iconSize })))));
3457
3808
  useEffect(function () {
3458
3809
  // Only update dateString if we are NOT currently editing.
3459
3810
  if (!isEditing)
3460
- setDateString(value ? dateToInputString(new Date(value)) : '');
3461
- }, [value, isEditing]);
3811
+ setDateString(inputValue !== null && inputValue !== void 0 ? inputValue : '');
3812
+ }, [inputValue, isEditing]);
3462
3813
  return (React.createElement("div", { className: "bianic-date-input-container bianic-fgc-container flex w-full flex-col gap-y-2 text-bia-black" },
3463
3814
  label && (React.createElement("label", { htmlFor: id, className: "bianic-text-input-label text-xs font-semibold ".concat(labelStatus) },
3464
3815
  label,
3465
3816
  required && React.createElement("span", { className: "p-1 text-bia-red" }, "*"))),
3466
3817
  React.createElement("div", { className: "relative w-full", ref: ref }, input)));
3467
3818
  });
3468
- var dateToInputString = function (dateObj) {
3469
- if (!(dateObj instanceof Date) || isNaN(dateObj))
3470
- return ''; // Return empty string for invalid dates
3471
- // Use local time methods for consistent display/input
3472
- var year = dateObj.getFullYear();
3473
- var month = String(dateObj.getMonth() + 1).padStart(2, '0');
3474
- var day = String(dateObj.getDate()).padStart(2, '0');
3475
- return "".concat(year, "-").concat(month, "-").concat(day);
3476
- };
3477
3819
  var displayDateFormatter = function (date) {
3820
+ if (!isDate(date))
3821
+ return '';
3478
3822
  return "".concat(date.getDate(), " ").concat(monthMap[date.getMonth()].slice(0, 3), " '").concat(date.getFullYear().toString().slice(2, 4));
3479
3823
  };
3824
+ function isDate(val) {
3825
+ return val instanceof Date && !isNaN(val);
3826
+ }
3480
3827
 
3481
3828
  function DatePicker(_a) {
3482
- var _b = _a.zIndexCalendar, zIndexCalendar = _b === void 0 ? 100 : _b, value = _a.value, onChange = _a.onChange, size = _a.size, disabled = _a.disabled; _a.placeholder; var label = _a.label, minDate = _a.minDate, maxDate = _a.maxDate, required = _a.required, nullDisplay = _a.nullDisplay, inputclassName = _a.inputclassName, containerClassName = _a.containerClassName;
3829
+ var _b = _a.zIndexCalendar, zIndexCalendar = _b === void 0 ? 100 : _b, value = _a.value, onChange = _a.onChange, _c = _a.variant, variant = _c === void 0 ? 'single' : _c, size = _a.size, disabled = _a.disabled, _d = _a.placeholder, placeholder = _d === void 0 ? '"YYYY-MM-DD"' : _d, label = _a.label, minDate = _a.minDate, maxDate = _a.maxDate, required = _a.required, nullDisplay = _a.nullDisplay, inputClassName = _a.inputClassName, containerClassName = _a.containerClassName;
3483
3830
  // State and Ref
3484
3831
  var inputRef = useRef(null);
3485
- var _d = useState(false), isPickerOpen = _d[0], setIsPickerOpen = _d[1];
3832
+ var _e = useState(false), isPickerOpen = _e[0], setIsPickerOpen = _e[1];
3486
3833
  return (React.createElement("div", { className: "bianic-datepicker-container relative ".concat(containerClassName) },
3487
3834
  React.createElement("div", { className: "bianic-datepicker-field-container" },
3488
- React.createElement(DateInputDisplay, { inputClassName: inputclassName, value: value, setValue: onChange, placeholder: "YYYY-MM-DD", nullDisplay: nullDisplay, size: size, label: label, required: required, buttonAction: function () { return setIsPickerOpen(!isPickerOpen); }, ref: inputRef, disabled: disabled })),
3489
- React.createElement(PickerCalendar, { zIndex: zIndexCalendar, anchorRef: inputRef, selectedDate: value, onDateChange: onChange, minDate: minDate, maxDate: maxDate, isOpen: isPickerOpen, onClose: function () { return setIsPickerOpen(false); } })));
3835
+ React.createElement(DateInputDisplay, { className: inputClassName, value: value, setValue: onChange, placeholder: placeholder, nullDisplay: nullDisplay, size: size, label: label, required: required, buttonAction: function () { return setIsPickerOpen(!isPickerOpen); }, ref: inputRef, disabled: disabled })),
3836
+ React.createElement(PickerCalendar, { zIndex: zIndexCalendar, anchorRef: inputRef, selectedDate: value, pickerVariant: variant, onDateChange: onChange, minDate: minDate, maxDate: maxDate, isOpen: isPickerOpen, onClose: function () { return setIsPickerOpen(false); } })));
3490
3837
  }
3491
3838
 
3492
3839
  var AlertRoundedSquare = function (_a) {
@@ -3717,7 +4064,10 @@ function Modal(_a) {
3717
4064
  modalSize = 'w-[540px]';
3718
4065
  }
3719
4066
  var handleClose = function (e) {
3720
- if (e && e.target && e.target.id === 'wrapper') {
4067
+ if (onClose &&
4068
+ e &&
4069
+ e.target &&
4070
+ e.target.id === 'wrapper') {
3721
4071
  onClose();
3722
4072
  }
3723
4073
  };
@@ -3728,7 +4078,7 @@ function Modal(_a) {
3728
4078
  React.createElement("div", { className: "bianic-modal flex flex-col gap-[20px] rounded-[5px] bg-white p-[20px] ".concat(modalSize), onClick: onClick },
3729
4079
  React.createElement("div", { className: "bianic-modal-header flex justify-between" },
3730
4080
  React.createElement("div", { className: " text-wrap text-left font-humnst777 text-[18px] font-bold leading-[21.85px] text-primary-black" }, title),
3731
- React.createElement(Button, { variant: "subtle", radius: "full-rounded", iconLeft: React.createElement(TbX, { size: 14 }), size: "tn", onClick: function () { return onClose(); } })),
4081
+ onClose && (React.createElement(Button, { variant: "subtle", radius: "full-rounded", iconLeft: React.createElement(TbX, { size: 14 }), size: "tn", onClick: function () { return onClose(); } }))),
3732
4082
  React.createElement("div", { className: "bianic-modal-content flex w-full flex-col items-start gap-[20px]" }, rest.children))), document.body));
3733
4083
  }
3734
4084
  return null;
@@ -3769,7 +4119,7 @@ function PaginationBar(_a) {
3769
4119
  var size = _a.size, position = _a.position, currentPage = _a.currentPage, totalPages = _a.totalPages, onPageChange = _a.onPageChange;
3770
4120
  var totalRange = Array.from({ length: totalPages }, function (_, i) { return i + 1; });
3771
4121
  var PAGE_SIZE = 5;
3772
- var _b = useState(0), startIndex = _b[0], setStartIndex = _b[1];
4122
+ var _b = useState((currentPage || 1) - 1), startIndex = _b[0], setStartIndex = _b[1];
3773
4123
  var _c = useState(totalRange.slice(startIndex, PAGE_SIZE)), showedPages = _c[0], setShowedPages = _c[1];
3774
4124
  var buttonSizingStyle = size === 'sm' ? 31 : 38;
3775
4125
  var iconSize = size === 'sm' ? 14 : 18;
@@ -3777,13 +4127,6 @@ function PaginationBar(_a) {
3777
4127
  if (page >= 1 && page <= totalPages)
3778
4128
  onPageChange(page);
3779
4129
  };
3780
- var handleNextRange = function () {
3781
- var newStartIndex = startIndex + PAGE_SIZE;
3782
- if (newStartIndex < totalPages)
3783
- setStartIndex(newStartIndex);
3784
- else
3785
- setStartIndex(totalPages - PAGE_SIZE);
3786
- };
3787
4130
  var handlePrevRange = function () {
3788
4131
  var newStartIndex = startIndex - PAGE_SIZE;
3789
4132
  if (newStartIndex >= 0)
@@ -3791,18 +4134,27 @@ function PaginationBar(_a) {
3791
4134
  else
3792
4135
  setStartIndex(0);
3793
4136
  };
4137
+ var handleNextRange = function () {
4138
+ var newStartIndex = startIndex + PAGE_SIZE;
4139
+ if (newStartIndex < totalPages)
4140
+ setStartIndex(newStartIndex);
4141
+ else
4142
+ setStartIndex(totalPages - PAGE_SIZE);
4143
+ };
3794
4144
  useEffect(function () {
3795
4145
  var start = Math.max(0, Math.min(startIndex, totalPages - PAGE_SIZE));
3796
4146
  var newPages = Array.from({ length: totalPages }, function (_, i) { return i + 1; }).slice(start, start + PAGE_SIZE);
3797
4147
  setShowedPages(newPages);
3798
4148
  }, [startIndex, totalPages]);
3799
4149
  return (React.createElement("div", { className: "flex ".concat(positionConfig[position], " gap-[5px]") },
3800
- totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handlePrevRange, className: showedPages[0] === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronsLeft, { size: iconSize }), disabled: showedPages[0] === 1 })),
4150
+ totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handlePrevRange, className: showedPages[0] === 1 ? ' cursor-not-allowed' : 'cursor-pointer', iconLeft: React.createElement(TbChevronsLeft, { size: iconSize }), disabled: showedPages[0] === 1 })),
3801
4151
  React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
3802
4152
  handlePageChange(currentPage - 1);
3803
4153
  if (showedPages[0] === currentPage)
3804
4154
  setStartIndex(function (old) { return old - 1; });
3805
- }, className: currentPage === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
4155
+ if (!showedPages.includes(currentPage))
4156
+ setStartIndex(currentPage - 2);
4157
+ }, className: currentPage === 1 ? 'cursor-not-allowed' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
3806
4158
  showedPages.map(function (page) {
3807
4159
  if (page === currentPage) {
3808
4160
  return React.createElement(SelectedPage, { key: page, label: page.toString(), size: size });
@@ -3813,12 +4165,13 @@ function PaginationBar(_a) {
3813
4165
  }),
3814
4166
  React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
3815
4167
  handlePageChange(currentPage + 1);
3816
- if (showedPages[4] === currentPage) {
4168
+ if (showedPages[4] === currentPage)
3817
4169
  setStartIndex(function (old) { return old + 1; });
3818
- }
3819
- }, className: currentPage === totalPages ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
4170
+ if (!showedPages.includes(currentPage))
4171
+ setStartIndex(currentPage - 4);
4172
+ }, className: currentPage === totalPages ? 'cursor-not-allowed' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
3820
4173
  totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handleNextRange, className: showedPages[showedPages.length - 1] === totalPages
3821
- ? ''
4174
+ ? 'cursor-not-allowed'
3822
4175
  : 'cursor-pointer', iconLeft: React.createElement(TbChevronsRight, { size: iconSize }), disabled: showedPages[showedPages.length - 1] === totalPages }))));
3823
4176
  }
3824
4177