bianic-ui 2.7.0 → 2.8.0-alpha.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 (38) hide show
  1. package/README.md +49 -49
  2. package/dist/cjs/index.js +384 -98
  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 +14 -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 +10 -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/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
  18. package/dist/esm/index.js +384 -98
  19. package/dist/esm/lib.css +1 -1
  20. package/dist/esm/types/components/Forms/DatePicker/DateInputDisplay.d.ts +2 -2
  21. package/dist/esm/types/components/Forms/DatePicker/DatePicker.d.ts +4 -3
  22. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/DateDisplay.d.ts +1 -1
  23. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/MonthDisplay.d.ts +1 -1
  24. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/PickerContent.d.ts +14 -0
  25. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/PickerHeader.d.ts +18 -0
  26. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/RangePicker.d.ts +10 -0
  27. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/SinglePicker.d.ts +9 -0
  28. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/index.d.ts +4 -0
  29. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/helpers/dateUtils.d.ts +10 -1
  30. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/hooks/useCalendarLogic.d.ts +1 -0
  31. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/types/types.d.ts +3 -2
  32. package/dist/esm/types/components/Forms/DatePicker/RangeDatePickerSimulation.d.ts +3 -0
  33. package/dist/esm/types/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
  34. package/dist/index.d.ts +7 -5
  35. package/package.json +141 -141
  36. package/src/style/color.css +650 -650
  37. package/src/style/scrollbar.css +78 -78
  38. 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);
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,213 @@ 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;
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
+ setViewYearValue(y);
3490
+ handlePickerMode('month');
3491
+ }, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))));
3492
+ };
3493
+
3494
+ var SinglePicker = function (_a) {
3495
+ var selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, minDate = _a.minDate, maxDate = _a.maxDate;
3496
+ var handleDateSelect = function (date) {
3497
+ onDateChange(dateToInputString(date));
3498
+ };
3499
+ return (React.createElement("div", { className: "single-picker picker-body" },
3500
+ React.createElement(PickerContent, { selectedDate: selectedDate !== null && selectedDate !== void 0 ? selectedDate : null, onDateSelect: handleDateSelect, minDate: minDate, maxDate: maxDate })));
3501
+ };
3502
+
3503
+ var RangePicker = function (_a) {
3504
+ var
3505
+ // pickerMode,
3506
+ selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, onClose = _a.onClose, minDate = _a.minDate, maxDate = _a.maxDate;
3507
+ // compute initial view month/year for left and right panels from current selection
3508
+ var leftInitDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
3509
+ var leftInitMonth = leftInitDate.getMonth();
3510
+ var leftInitYear = leftInitDate.getFullYear();
3511
+ var rightInitMonth = leftInitMonth === 11 ? 0 : leftInitMonth + 1;
3512
+ var rightInitYear = leftInitMonth === 11 ? leftInitYear + 1 : leftInitYear;
3513
+ // State to track left and right panel month/year
3514
+ var _b = useState(leftInitMonth), leftMonth = _b[0], setLeftMonth = _b[1];
3515
+ var _c = useState(leftInitYear), leftYear = _c[0], setLeftYear = _c[1];
3516
+ var _d = useState(rightInitMonth), rightMonth = _d[0], setRightMonth = _d[1];
3517
+ var _e = useState(rightInitYear), rightYear = _e[0], setRightYear = _e[1];
3518
+ var _f = useState(selectedDate || []), tempSelectedDate = _f[0], setTempSelectedDate = _f[1];
3519
+ // Sync state when initial selection changes
3520
+ useEffect(function () {
3521
+ var initDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
3522
+ var initMonth = initDate.getMonth();
3523
+ var initYear = initDate.getFullYear();
3524
+ var nextMonth = initMonth === 11 ? 0 : initMonth + 1;
3525
+ var nextYear = initMonth === 11 ? initYear + 1 : initYear;
3526
+ setLeftMonth(initMonth);
3527
+ setLeftYear(initYear);
3528
+ setRightMonth(nextMonth);
3529
+ setRightYear(nextYear);
3530
+ }, [selectedDate]);
3531
+ var isAdjacent = useMemo(function () { return areMonthsAdjacent(leftMonth, leftYear, rightMonth, rightYear); }, [leftMonth, leftYear, rightMonth, rightYear]);
3532
+ var handleLeftPrevMonth = function () {
3533
+ if (leftMonth === 0) {
3534
+ setLeftMonth(11);
3535
+ setLeftYear(function (prev) { return prev - 1; });
3536
+ }
3537
+ else {
3538
+ setLeftMonth(function (prev) { return prev - 1; });
3539
+ }
3540
+ };
3541
+ var handleLeftNextMonth = function () {
3542
+ if (isAdjacent) {
3543
+ // If adjacent, move both panels forward by 2 months
3544
+ if (leftMonth === 11) {
3545
+ setLeftMonth(1);
3546
+ setLeftYear(function (prev) { return prev + 2; });
3547
+ }
3548
+ else {
3549
+ setLeftMonth(function (prev) { return prev + 2; });
3550
+ }
3551
+ if (rightMonth === 11) {
3552
+ setRightMonth(1);
3553
+ setRightYear(function (prev) { return prev + 2; });
3554
+ }
3555
+ else {
3556
+ setRightMonth(function (prev) { return prev + 2; });
3557
+ }
3558
+ }
3559
+ else {
3560
+ // If not adjacent, move left panel forward by 1 month
3561
+ if (leftMonth === 11) {
3562
+ setLeftMonth(0);
3563
+ setLeftYear(function (prev) { return prev + 1; });
3564
+ }
3565
+ else {
3566
+ setLeftMonth(function (prev) { return prev + 1; });
3567
+ }
3568
+ }
3569
+ };
3570
+ var handleRightPrevMonth = function () {
3571
+ if (isAdjacent) {
3572
+ // If adjacent, move both panels backward by 2 months
3573
+ if (leftMonth === 0) {
3574
+ setLeftMonth(10);
3575
+ setLeftYear(function (prev) { return prev - 1; });
3576
+ }
3577
+ else {
3578
+ setLeftMonth(function (prev) { return prev - 2; });
3579
+ }
3580
+ if (rightMonth === 0) {
3581
+ setRightMonth(10);
3582
+ setRightYear(function (prev) { return prev - 1; });
3583
+ }
3584
+ else {
3585
+ setRightMonth(function (prev) { return prev - 2; });
3586
+ }
3587
+ }
3588
+ else {
3589
+ // If not adjacent, move right panel backward by 1 month
3590
+ if (rightMonth === 0) {
3591
+ setRightMonth(11);
3592
+ setRightYear(function (prev) { return prev - 1; });
3593
+ }
3594
+ else {
3595
+ setRightMonth(function (prev) { return prev - 1; });
3596
+ }
3597
+ }
3598
+ };
3599
+ var handleRightNextMonth = function () {
3600
+ if (rightMonth === 11) {
3601
+ setRightMonth(0);
3602
+ setRightYear(function (prev) { return prev + 1; });
3603
+ }
3604
+ else {
3605
+ setRightMonth(function (prev) { return prev + 1; });
3606
+ }
3607
+ };
3608
+ var handleDateSelect = function (date) {
3609
+ if (tempSelectedDate.length >= 2) {
3610
+ setTempSelectedDate([dateToInputString(date)]);
3611
+ }
3612
+ else {
3613
+ setTempSelectedDate(__spreadArray(__spreadArray([], tempSelectedDate, true), [dateToInputString(date)], false));
3614
+ }
3615
+ };
3616
+ var handleMonthSelect = function (setMonth, dateIndex, initYear) {
3617
+ return function (val) {
3618
+ var selectedDates = Array.isArray(selectedDate)
3619
+ ? selectedDate
3620
+ : selectedDate
3621
+ ? [selectedDate]
3622
+ : [];
3623
+ var isMonthAlreadySelected = selectedDates.some(function (date) {
3624
+ var dateYear = parseInt(date.slice(0, 4));
3625
+ var dateMonth = parseInt(date.slice(5, 7)) - 1;
3626
+ return dateYear === initYear && dateMonth === val;
3627
+ });
3628
+ if (isMonthAlreadySelected) {
3629
+ if (!selectedDates[dateIndex]) {
3630
+ return;
3631
+ }
3632
+ var selectedMonth = parseInt(selectedDates[dateIndex].slice(5, 7)) - 1;
3633
+ if (val === selectedMonth) {
3634
+ setMonth(selectedMonth);
3635
+ }
3636
+ else {
3637
+ return;
3638
+ }
3639
+ }
3640
+ else {
3641
+ setMonth(val);
3642
+ }
3643
+ };
3644
+ };
3645
+ return (React.createElement("div", { className: "space-y-[30px]" },
3646
+ React.createElement("div", { className: "range-picker picker-body flex gap-x-[22px]" },
3647
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: leftMonth, initialViewYear: leftYear, onPrevMonth: handleLeftPrevMonth, onNextMonth: handleLeftNextMonth, onMonthSelect: handleMonthSelect(setLeftMonth, 0, leftInitYear) }),
3648
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: rightMonth, initialViewYear: rightYear, onPrevMonth: handleRightPrevMonth, onNextMonth: handleRightNextMonth, onMonthSelect: handleMonthSelect(setRightMonth, 1, rightInitYear) })),
3649
+ React.createElement("div", { className: "flex justify-between" },
3650
+ React.createElement(Button, { label: "Reset", size: "sm", variant: "primary-outlined", iconLeft: React.createElement(TbRefresh, { className: "text-bia-blue", size: 14 }), onClick: function () { return setTempSelectedDate([]); } }),
3651
+ React.createElement("div", { className: "flex gap-x-2.5" },
3652
+ React.createElement(Button, { label: "Cancel", size: "sm", variant: "subtle", onClick: onClose }),
3653
+ React.createElement(Button, { label: "Done", size: "sm", iconLeft: React.createElement(TbCheck, { className: "text-bia-white", size: 14 }), variant: "primary", onClick: function () {
3654
+ onDateChange(tempSelectedDate.length ? tempSelectedDate : null);
3655
+ onClose();
3656
+ } })))));
3657
+ };
3658
+
3340
3659
  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"]);
3660
+ 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
3661
  // 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
3662
  var pickerCalendarRef = useRef(null);
3345
3663
  var _g = useDetectOutsideClick(anchorRef, false, pickerCalendarRef), isPickerOpen = _g[0], setIsPickerOpen = _g[1];
3346
3664
  var style = props.style, className = props.className, restProps = __rest(props, ["style", "className"]);
@@ -3348,56 +3666,17 @@ var PickerCalendar = function (_a) {
3348
3666
  useEffect(function () {
3349
3667
  setIsPickerOpen(isOpen);
3350
3668
  }, [isOpen]);
3669
+ 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),
3670
+ React.createElement(PickerBody, { selectedDate: selectedDate, minDate: minDate, maxDate: maxDate, onDateChange: onDateChange, isPickerOpen: isPickerOpen, pickerVariant: pickerVariant, onClose: onClose })), document.body);
3671
+ };
3672
+ var PickerBody = function (_a) {
3673
+ 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;
3351
3674
  useEffect(function () {
3352
3675
  if (!isPickerOpen) {
3353
3676
  onClose();
3354
- handlePickerMode('date');
3355
3677
  }
3356
3678
  }, [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);
3679
+ 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 }))));
3401
3680
  };
3402
3681
 
3403
3682
  var monthMap = [
@@ -3416,12 +3695,22 @@ var monthMap = [
3416
3695
  ];
3417
3696
  var DateInputDisplay = forwardRef(function (_a, ref) {
3418
3697
  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"]);
3698
+ var inputValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3699
+ ? Array.isArray(value)
3700
+ ? "".concat(value[0], " ").concat(value[1] ? "- ".concat(value[1]) : '')
3701
+ : value
3702
+ : '';
3703
+ var viewValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3704
+ ? Array.isArray(value)
3705
+ ? "".concat(displayDateFormatter(new Date(value[0])), " ").concat(value[1] ? "- ".concat(displayDateFormatter(new Date(value[1]))) : '')
3706
+ : displayDateFormatter(new Date(value))
3707
+ : nullDisplay || placeholder;
3419
3708
  var _e = useState(false), isEditing = _e[0], setIsEditing = _e[1];
3420
- var _f = useState(value), dateString = _f[0], setDateString = _f[1];
3709
+ var _f = useState(inputValue), dateString = _f[0], setDateString = _f[1];
3421
3710
  var _g = styleConfig['text'], fieldStyle = _g.fieldStyle;
3422
3711
  var _h = sizeConfig$c[size], iconSize = _h.iconSize, fieldSize = _h.fieldSize, iconPosition = _h.iconPosition;
3423
3712
  var borderStyle = 'border border-bia-grey-dark-10 bg-primary-white';
3424
- var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3713
+ var extendedInputClassName = "w-full ".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3425
3714
  var labelStatus = props.readOnly ? 'read-only:pointer-events-none' : '';
3426
3715
  var handleTextChange = function (event) {
3427
3716
  var rawValue = event.target.value;
@@ -3442,51 +3731,45 @@ var DateInputDisplay = forwardRef(function (_a, ref) {
3442
3731
  };
3443
3732
  var handleBlur = function () {
3444
3733
  setIsEditing(false);
3445
- setDateString(value);
3734
+ setDateString(inputValue);
3446
3735
  };
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 () {
3736
+ 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
3737
  buttonAction && buttonAction();
3449
3738
  } },
3450
3739
  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),
3740
+ 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
3741
  React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 text-bia-coolgrey ".concat(iconPosition) },
3455
3742
  React.createElement("button", { className: "bianic-datepicker-toggle-button", disabled: disabled, onClick: function () { return buttonAction && buttonAction(); } },
3456
3743
  React.createElement(TbCalendar, { size: iconSize })))));
3457
3744
  useEffect(function () {
3458
3745
  // Only update dateString if we are NOT currently editing.
3459
3746
  if (!isEditing)
3460
- setDateString(value ? dateToInputString(new Date(value)) : '');
3461
- }, [value, isEditing]);
3747
+ setDateString(inputValue !== null && inputValue !== void 0 ? inputValue : '');
3748
+ }, [inputValue, isEditing]);
3462
3749
  return (React.createElement("div", { className: "bianic-date-input-container bianic-fgc-container flex w-full flex-col gap-y-2 text-bia-black" },
3463
3750
  label && (React.createElement("label", { htmlFor: id, className: "bianic-text-input-label text-xs font-semibold ".concat(labelStatus) },
3464
3751
  label,
3465
3752
  required && React.createElement("span", { className: "p-1 text-bia-red" }, "*"))),
3466
3753
  React.createElement("div", { className: "relative w-full", ref: ref }, input)));
3467
3754
  });
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
3755
  var displayDateFormatter = function (date) {
3756
+ if (!isDate(date))
3757
+ return '';
3478
3758
  return "".concat(date.getDate(), " ").concat(monthMap[date.getMonth()].slice(0, 3), " '").concat(date.getFullYear().toString().slice(2, 4));
3479
3759
  };
3760
+ function isDate(val) {
3761
+ return val instanceof Date && !isNaN(val);
3762
+ }
3480
3763
 
3481
3764
  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;
3765
+ 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
3766
  // State and Ref
3484
3767
  var inputRef = useRef(null);
3485
- var _d = useState(false), isPickerOpen = _d[0], setIsPickerOpen = _d[1];
3768
+ var _e = useState(false), isPickerOpen = _e[0], setIsPickerOpen = _e[1];
3486
3769
  return (React.createElement("div", { className: "bianic-datepicker-container relative ".concat(containerClassName) },
3487
3770
  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); } })));
3771
+ 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 })),
3772
+ 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
3773
  }
3491
3774
 
3492
3775
  var AlertRoundedSquare = function (_a) {
@@ -3769,7 +4052,7 @@ function PaginationBar(_a) {
3769
4052
  var size = _a.size, position = _a.position, currentPage = _a.currentPage, totalPages = _a.totalPages, onPageChange = _a.onPageChange;
3770
4053
  var totalRange = Array.from({ length: totalPages }, function (_, i) { return i + 1; });
3771
4054
  var PAGE_SIZE = 5;
3772
- var _b = useState(0), startIndex = _b[0], setStartIndex = _b[1];
4055
+ var _b = useState((currentPage || 1) - 1), startIndex = _b[0], setStartIndex = _b[1];
3773
4056
  var _c = useState(totalRange.slice(startIndex, PAGE_SIZE)), showedPages = _c[0], setShowedPages = _c[1];
3774
4057
  var buttonSizingStyle = size === 'sm' ? 31 : 38;
3775
4058
  var iconSize = size === 'sm' ? 14 : 18;
@@ -3777,13 +4060,6 @@ function PaginationBar(_a) {
3777
4060
  if (page >= 1 && page <= totalPages)
3778
4061
  onPageChange(page);
3779
4062
  };
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
4063
  var handlePrevRange = function () {
3788
4064
  var newStartIndex = startIndex - PAGE_SIZE;
3789
4065
  if (newStartIndex >= 0)
@@ -3791,6 +4067,13 @@ function PaginationBar(_a) {
3791
4067
  else
3792
4068
  setStartIndex(0);
3793
4069
  };
4070
+ var handleNextRange = function () {
4071
+ var newStartIndex = startIndex + PAGE_SIZE;
4072
+ if (newStartIndex < totalPages)
4073
+ setStartIndex(newStartIndex);
4074
+ else
4075
+ setStartIndex(totalPages - PAGE_SIZE);
4076
+ };
3794
4077
  useEffect(function () {
3795
4078
  var start = Math.max(0, Math.min(startIndex, totalPages - PAGE_SIZE));
3796
4079
  var newPages = Array.from({ length: totalPages }, function (_, i) { return i + 1; }).slice(start, start + PAGE_SIZE);
@@ -3802,6 +4085,8 @@ function PaginationBar(_a) {
3802
4085
  handlePageChange(currentPage - 1);
3803
4086
  if (showedPages[0] === currentPage)
3804
4087
  setStartIndex(function (old) { return old - 1; });
4088
+ if (!showedPages.includes(currentPage))
4089
+ setStartIndex(currentPage - 2);
3805
4090
  }, className: currentPage === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
3806
4091
  showedPages.map(function (page) {
3807
4092
  if (page === currentPage) {
@@ -3813,9 +4098,10 @@ function PaginationBar(_a) {
3813
4098
  }),
3814
4099
  React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
3815
4100
  handlePageChange(currentPage + 1);
3816
- if (showedPages[4] === currentPage) {
4101
+ if (showedPages[4] === currentPage)
3817
4102
  setStartIndex(function (old) { return old + 1; });
3818
- }
4103
+ if (!showedPages.includes(currentPage))
4104
+ setStartIndex(currentPage - 4);
3819
4105
  }, className: currentPage === totalPages ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
3820
4106
  totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handleNextRange, className: showedPages[showedPages.length - 1] === totalPages
3821
4107
  ? ''