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/cjs/index.js CHANGED
@@ -119,6 +119,8 @@ function TbCircleCheckFilled (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 3a9 9 0 1 0 9 9"},"child":[]}]})(props);
120
120
  }function TbPlaystationX (props) {
121
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":"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);
122
+ }function TbRefresh (props) {
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":"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);
122
124
  }function TbX (props) {
123
125
  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);
124
126
  }function TbXboxX (props) {
@@ -374,6 +376,16 @@ function __rest(s, e) {
374
376
  return t;
375
377
  }
376
378
 
379
+ function __spreadArray(to, from, pack) {
380
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
381
+ if (ar || !(i in from)) {
382
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
383
+ ar[i] = from[i];
384
+ }
385
+ }
386
+ return to.concat(ar || Array.prototype.slice.call(from));
387
+ }
388
+
377
389
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
378
390
  var e = new Error(message);
379
391
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -3108,7 +3120,7 @@ var checkIsValidDate = function (dateString) {
3108
3120
  date.getUTCMonth() === month - 1 &&
3109
3121
  date.getUTCDate() === day);
3110
3122
  };
3111
- var dateToInputString$1 = function (dateObj) {
3123
+ var dateToInputString = function (dateObj) {
3112
3124
  if (!(dateObj instanceof Date) || isNaN(dateObj.getTime()))
3113
3125
  return '';
3114
3126
  var year = dateObj.getFullYear();
@@ -3116,9 +3128,31 @@ var dateToInputString$1 = function (dateObj) {
3116
3128
  var day = String(dateObj.getDate()).padStart(2, '0');
3117
3129
  return "".concat(year, "-").concat(month, "-").concat(day);
3118
3130
  };
3131
+ /**
3132
+ * Check if two months are adjacent (consecutive)
3133
+ * @param leftMonth - Month number (0-11) of left panel
3134
+ * @param leftYear - Year of left panel
3135
+ * @param rightMonth - Month number (0-11) of right panel
3136
+ * @param rightYear - Year of right panel
3137
+ * @returns true if months are adjacent
3138
+ */
3139
+ var areMonthsAdjacent = function (leftMonth, leftYear, rightMonth, rightYear) {
3140
+ // Check if right is exactly one month after left
3141
+ if (leftMonth === 11) {
3142
+ // December + 1 month = January of next year
3143
+ return rightMonth === 0 && rightYear === leftYear + 1;
3144
+ }
3145
+ else {
3146
+ // Any other month + 1 month
3147
+ return rightMonth === leftMonth + 1 && rightYear === leftYear;
3148
+ }
3149
+ };
3119
3150
 
3120
3151
  var DateDisplay = function (_a) {
3121
3152
  var displayDays = _a.displayDays, viewMonthValue = _a.viewMonthValue, selectedDate = _a.selectedDate, onDateSelect = _a.onDateSelect, minDateValue = _a.minDateValue, maxDateValue = _a.maxDateValue;
3153
+ var isRangeMode = Array.isArray(selectedDate);
3154
+ var startRangeDate = isRangeMode && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate[0]) ? new Date(selectedDate[0]) : null;
3155
+ var endRangeDate = isRangeMode && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate[1]) ? new Date(selectedDate[1]) : null;
3122
3156
  return (React.createElement("div", null,
3123
3157
  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" },
3124
3158
  React.createElement(Text, { variant: "small-text", extended: "text-bia-coolgrey" }, day.slice(0, 3)))); })),
@@ -3126,16 +3160,43 @@ var DateDisplay = function (_a) {
3126
3160
  var isOutOfRange = !!((minDateValue && date < minDateValue) ||
3127
3161
  (maxDateValue && date > maxDateValue));
3128
3162
  var isOutOfMonth = date.getMonth() !== viewMonthValue;
3163
+ var isStartRange = isRangeMode && checkDateEquals(date, startRangeDate);
3164
+ var isEndRange = isRangeMode && checkDateEquals(date, endRangeDate);
3129
3165
  var isSelected = selectedDate
3130
- ? checkDateEquals(date, new Date(selectedDate))
3166
+ ? isRangeMode
3167
+ ? isStartRange || isEndRange
3168
+ : checkDateEquals(date, new Date(selectedDate))
3169
+ : false;
3170
+ var isBetween = isRangeMode && startRangeDate && endRangeDate
3171
+ ? (function () {
3172
+ var start = startRangeDate;
3173
+ var end = endRangeDate;
3174
+ if (start > end) {
3175
+ var t = start;
3176
+ start = end;
3177
+ end = t;
3178
+ }
3179
+ return date > start && date < end;
3180
+ })()
3131
3181
  : false;
3132
3182
  var isToday = checkDateEquals(date, new Date(TODAY_VALUE));
3133
- 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
3183
+ var customClassname = isRangeMode && (isBetween || isStartRange || isEndRange)
3184
+ ? isBetween
3185
+ ? 'w-full'
3186
+ : isStartRange
3187
+ ? 'w-full rounded-l-full'
3188
+ : 'rounded-r-full'
3189
+ : 'w-[31px] rounded-full';
3190
+ return (React.createElement("button", { key: date.toString(), className: "bianic-datepicker-calendar-day flex h-[31px] items-center justify-center ".concat(customClassname, " ").concat(isSelected
3134
3191
  ? 'border border-bia-blue-dark-10 bg-bia-blue-dark-10'
3135
- : isToday && !isOutOfRange
3136
- ? 'border border-bia-blue-light-50 bg-bia-blue-pastel'
3137
- : 'hover:bg-bia-blue-pastel'), disabled: isOutOfRange, onClick: function () { return onDateSelect(date); } },
3138
- React.createElement(Text, { variant: "small-text", extended: isSelected
3192
+ : isBetween
3193
+ ? isOutOfMonth
3194
+ ? 'border border-bia-blue-light-50 bg-bia-blue-light-50'
3195
+ : 'border border-bia-blue-light-10 bg-bia-blue-light-10'
3196
+ : isToday && !isOutOfRange
3197
+ ? 'border border-bia-blue-light-50 bg-bia-blue-pastel'
3198
+ : 'hover:bg-bia-blue-pastel'), disabled: isOutOfRange, onClick: function () { return onDateSelect(date); } },
3199
+ React.createElement(Text, { variant: "small-text", extended: isSelected || isBetween
3139
3200
  ? 'text-bia-white'
3140
3201
  : isOutOfRange
3141
3202
  ? 'text-bia-coolgrey-light-50'
@@ -3146,7 +3207,19 @@ var DateDisplay = function (_a) {
3146
3207
  };
3147
3208
 
3148
3209
  var MonthDisplay = function (_a) {
3149
- var viewYearValue = _a.viewYearValue, selectedDate = _a.selectedDate, viewMonthValue = _a.viewMonthValue, minDateValue = _a.minDateValue, maxDateValue = _a.maxDateValue, onMonthSelect = _a.onMonthSelect;
3210
+ var viewYearValue = _a.viewYearValue, selectedDate = _a.selectedDate; _a.viewMonthValue; var minDateValue = _a.minDateValue, maxDateValue = _a.maxDateValue, onMonthSelect = _a.onMonthSelect;
3211
+ var selectedDates = Array.isArray(selectedDate)
3212
+ ? selectedDate
3213
+ : selectedDate
3214
+ ? [selectedDate]
3215
+ : [];
3216
+ var isMonthAlreadySelected = function (monthIndex) {
3217
+ return selectedDates.some(function (date) {
3218
+ var dateYear = parseInt(date.slice(0, 4));
3219
+ var dateMonth = parseInt(date.slice(5, 7)) - 1;
3220
+ return dateYear === viewYearValue && dateMonth === monthIndex;
3221
+ });
3222
+ };
3150
3223
  return (React.createElement("div", { className: "bianic-datepicker-calendar-month-grid grid grid-cols-3 gap-y-1.5" }, MONTH_MAP.map(function (month, index) {
3151
3224
  var isOutOfRange = !!((minDateValue &&
3152
3225
  minDateValue.getFullYear() <= viewYearValue &&
@@ -3160,16 +3233,25 @@ var MonthDisplay = function (_a) {
3160
3233
  (maxDateValue.getFullYear() === viewYearValue
3161
3234
  ? maxDateValue.getMonth()
3162
3235
  : 11)));
3236
+ var isAlreadySelected = isMonthAlreadySelected(index);
3163
3237
  var isSelected = selectedDate &&
3164
- viewYearValue === parseInt(selectedDate.slice(0, 4)) &&
3165
- index === viewMonthValue;
3238
+ (Array.isArray(selectedDate) ? selectedDate[0] : selectedDate) &&
3239
+ viewYearValue ===
3240
+ parseInt((Array.isArray(selectedDate)
3241
+ ? selectedDate[0]
3242
+ : selectedDate).slice(0, 4)) &&
3243
+ index ===
3244
+ parseInt((Array.isArray(selectedDate)
3245
+ ? selectedDate[0]
3246
+ : selectedDate).slice(5, 7)) -
3247
+ 1;
3166
3248
  return (React.createElement("button", { key: month, onClick: function (e) {
3167
3249
  e.stopPropagation();
3168
3250
  onMonthSelect(index);
3169
- }, disabled: isOutOfRange, className: "bianic-datepicker-calendar-month mx-[15px] flex h-[31px] items-center justify-center rounded-full ".concat(isSelected
3251
+ }, disabled: isOutOfRange, className: "bianic-datepicker-calendar-month mx-[15px] flex h-[31px] items-center justify-center rounded-full ".concat(isSelected || isAlreadySelected
3170
3252
  ? 'border border-bia-blue-dark-10 bg-bia-blue-dark-10'
3171
3253
  : 'enabled:hover:bg-bia-blue-pastel') },
3172
- React.createElement(Text, { variant: "small-text", extended: isSelected
3254
+ React.createElement(Text, { variant: "small-text", extended: isSelected || isAlreadySelected
3173
3255
  ? 'text-bia-white'
3174
3256
  : isOutOfRange
3175
3257
  ? 'text-bia-coolgrey-light-50'
@@ -3200,6 +3282,38 @@ var YearDisplay = function (_a) {
3200
3282
  })));
3201
3283
  };
3202
3284
 
3285
+ var PickerHeader = function (_a) {
3286
+ 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;
3287
+ return (React.createElement("div", { className: "bianic-datepicker-calendar-controller flex w-full items-center justify-between" },
3288
+ React.createElement("button", { className: "bianic-datepicker-calendar-prev-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isPrevDisabled(), onClick: pickerMode === 'date'
3289
+ ? handlePrevMonth
3290
+ : pickerMode === 'month'
3291
+ ? handlePrevYear
3292
+ : handlePrevDecade },
3293
+ React.createElement(TbChevronLeft, { size: 18 })),
3294
+ React.createElement("div", { className: "bianic-datepicker-calendar-current-month flex items-center justify-center gap-1" },
3295
+ React.createElement("button", { className: pickerMode === 'date' ? '' : 'hidden', onClick: function (e) {
3296
+ e.stopPropagation();
3297
+ handlePickerMode('month');
3298
+ } },
3299
+ React.createElement(Text, { variant: "normal-text-semibold" },
3300
+ MONTH_MAP[viewMonthValue],
3301
+ " ")),
3302
+ React.createElement("button", { className: pickerMode === 'date' || pickerMode === 'month' ? '' : 'hidden', onClick: function (e) {
3303
+ e.stopPropagation();
3304
+ handlePickerMode('year');
3305
+ } },
3306
+ React.createElement(Text, { variant: "normal-text" }, viewYearValue)),
3307
+ React.createElement("button", { className: pickerMode === 'year' ? '' : 'hidden' },
3308
+ React.createElement(Text, { variant: "normal-text" }, "".concat(yearDisplayRange[1], " - ").concat(yearDisplayRange[10])))),
3309
+ React.createElement("button", { className: "bianic-datepicker-calendar-next-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isNextDisabled(), onClick: pickerMode === 'date'
3310
+ ? handleNextMonth
3311
+ : pickerMode === 'month'
3312
+ ? handleNextYear
3313
+ : handleNextDecade },
3314
+ React.createElement(TbChevronRight, { size: 18 }))));
3315
+ };
3316
+
3203
3317
  var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3204
3318
  var _a = React.useState('date'), pickerMode = _a[0], setPickerMode = _a[1];
3205
3319
  var _b = React.useState('date'), prevMode = _b[0], setPrevMode = _b[1];
@@ -3240,12 +3354,16 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3240
3354
  setViewDecadeValue(function (prev) { return prev + 10; });
3241
3355
  };
3242
3356
  React.useEffect(function () {
3243
- var monthStartDay = new Date("".concat(viewYearValue, "-").concat(viewMonthValue + 1, "-01")).getDay() === 0
3357
+ var calculatedDisplayDays = getDisplayDays(viewMonthValue, viewYearValue);
3358
+ setDisplayDays(calculatedDisplayDays);
3359
+ }, [viewMonthValue, viewYearValue, selectedDate]);
3360
+ var getDisplayDays = function (month, year) {
3361
+ var monthStartDay = new Date("".concat(year, "-").concat(month + 1, "-01")).getDay() === 0
3244
3362
  ? 6
3245
- : new Date("".concat(viewYearValue, "-").concat(viewMonthValue + 1, "-01")).getDay() - 1;
3246
- var monthTotalDate = new Date(viewYearValue, viewMonthValue + 1, 0).getDate();
3363
+ : new Date("".concat(year, "-").concat(month + 1, "-01")).getDay() - 1;
3364
+ var monthTotalDate = new Date(year, month + 1, 0).getDate();
3247
3365
  var monthCalenderView = monthTotalDate + monthStartDay > 35 ? 42 : 35;
3248
- var viewFirstDate = new Date("".concat(viewYearValue, "-").concat(viewMonthValue + 1, "-01"));
3366
+ var viewFirstDate = new Date("".concat(year, "-").concat(month + 1, "-01"));
3249
3367
  viewFirstDate.setDate(viewFirstDate.getDate() - monthStartDay);
3250
3368
  var viewLastDate = new Date(viewFirstDate);
3251
3369
  viewLastDate.setDate(viewLastDate.getDate() + monthCalenderView - 1);
@@ -3253,8 +3371,8 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3253
3371
  for (var d = new Date(viewFirstDate); d <= viewLastDate; d.setDate(d.getDate() + 1)) {
3254
3372
  tempDisplayDays.push(new Date(d));
3255
3373
  }
3256
- setDisplayDays(tempDisplayDays);
3257
- }, [viewMonthValue, viewYearValue, selectedDate]);
3374
+ return tempDisplayDays;
3375
+ };
3258
3376
  var handleSetSelectedDate = function (date, onDateChange) {
3259
3377
  if (date.getMonth() !== viewMonthValue) {
3260
3378
  // if the date is not in the current view month, update the view month and year
@@ -3262,7 +3380,7 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3262
3380
  setViewYearValue(date.getFullYear());
3263
3381
  }
3264
3382
  if (onDateChange) {
3265
- onDateChange(dateToInputString$1(date));
3383
+ onDateChange(dateToInputString(date));
3266
3384
  }
3267
3385
  };
3268
3386
  var handlePickerMode = function (mode) {
@@ -3336,13 +3454,213 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
3336
3454
  yearDisplayRange: yearDisplayRange,
3337
3455
  isPrevDisabled: isPrevDisabled,
3338
3456
  isNextDisabled: isNextDisabled,
3457
+ getDisplayDays: getDisplayDays,
3339
3458
  };
3340
3459
  };
3341
3460
 
3461
+ var PickerContent = function (_a) {
3462
+ 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;
3463
+ var _b = useCalendarLogic(
3464
+ // use first selectedDate if array
3465
+ Array.isArray(selectedDate)
3466
+ ? selectedDate[0]
3467
+ : 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;
3468
+ React.useEffect(function () {
3469
+ if (typeof initialViewMonth === 'number') {
3470
+ setViewMonthValue(initialViewMonth);
3471
+ }
3472
+ if (typeof initialViewYear === 'number') {
3473
+ setViewYearValue(initialViewYear);
3474
+ }
3475
+ }, [initialViewMonth, initialViewYear]);
3476
+ // Use custom handlers for range mode, fall back to internal for single mode
3477
+ var handlePrevMonth = onPrevMonth || internalHandlePrevMonth;
3478
+ var handleNextMonth = onNextMonth || internalHandleNextMonth;
3479
+ var days = getDisplayDays(viewMonthValue, viewYearValue);
3480
+ return (React.createElement("div", { className: "picker-body flex w-[250px] flex-col gap-[15px]" },
3481
+ 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 }),
3482
+ pickerMode === 'date' && (React.createElement(DateDisplay, { displayDays: days, maxDateValue: maxDateValue, minDateValue: minDateValue, onDateSelect: onDateSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue })),
3483
+ pickerMode === 'month' && (React.createElement(MonthDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onMonthSelect: function (m) {
3484
+ if (onMonthSelect)
3485
+ onMonthSelect(m);
3486
+ else
3487
+ setViewMonthValue(m);
3488
+ handlePickerMode('date');
3489
+ }, selectedDate: selectedDate, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue })),
3490
+ pickerMode === 'year' && (React.createElement(YearDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onYearSelect: function (y) {
3491
+ setViewYearValue(y);
3492
+ handlePickerMode('month');
3493
+ }, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))));
3494
+ };
3495
+
3496
+ var SinglePicker = function (_a) {
3497
+ var selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, minDate = _a.minDate, maxDate = _a.maxDate;
3498
+ var handleDateSelect = function (date) {
3499
+ onDateChange(dateToInputString(date));
3500
+ };
3501
+ return (React.createElement("div", { className: "single-picker picker-body" },
3502
+ React.createElement(PickerContent, { selectedDate: selectedDate !== null && selectedDate !== void 0 ? selectedDate : null, onDateSelect: handleDateSelect, minDate: minDate, maxDate: maxDate })));
3503
+ };
3504
+
3505
+ var RangePicker = function (_a) {
3506
+ var
3507
+ // pickerMode,
3508
+ selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, onClose = _a.onClose, minDate = _a.minDate, maxDate = _a.maxDate;
3509
+ // compute initial view month/year for left and right panels from current selection
3510
+ var leftInitDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
3511
+ var leftInitMonth = leftInitDate.getMonth();
3512
+ var leftInitYear = leftInitDate.getFullYear();
3513
+ var rightInitMonth = leftInitMonth === 11 ? 0 : leftInitMonth + 1;
3514
+ var rightInitYear = leftInitMonth === 11 ? leftInitYear + 1 : leftInitYear;
3515
+ // State to track left and right panel month/year
3516
+ var _b = React.useState(leftInitMonth), leftMonth = _b[0], setLeftMonth = _b[1];
3517
+ var _c = React.useState(leftInitYear), leftYear = _c[0], setLeftYear = _c[1];
3518
+ var _d = React.useState(rightInitMonth), rightMonth = _d[0], setRightMonth = _d[1];
3519
+ var _e = React.useState(rightInitYear), rightYear = _e[0], setRightYear = _e[1];
3520
+ var _f = React.useState(selectedDate || []), tempSelectedDate = _f[0], setTempSelectedDate = _f[1];
3521
+ // Sync state when initial selection changes
3522
+ React.useEffect(function () {
3523
+ var initDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
3524
+ var initMonth = initDate.getMonth();
3525
+ var initYear = initDate.getFullYear();
3526
+ var nextMonth = initMonth === 11 ? 0 : initMonth + 1;
3527
+ var nextYear = initMonth === 11 ? initYear + 1 : initYear;
3528
+ setLeftMonth(initMonth);
3529
+ setLeftYear(initYear);
3530
+ setRightMonth(nextMonth);
3531
+ setRightYear(nextYear);
3532
+ }, [selectedDate]);
3533
+ var isAdjacent = React.useMemo(function () { return areMonthsAdjacent(leftMonth, leftYear, rightMonth, rightYear); }, [leftMonth, leftYear, rightMonth, rightYear]);
3534
+ var handleLeftPrevMonth = function () {
3535
+ if (leftMonth === 0) {
3536
+ setLeftMonth(11);
3537
+ setLeftYear(function (prev) { return prev - 1; });
3538
+ }
3539
+ else {
3540
+ setLeftMonth(function (prev) { return prev - 1; });
3541
+ }
3542
+ };
3543
+ var handleLeftNextMonth = function () {
3544
+ if (isAdjacent) {
3545
+ // If adjacent, move both panels forward by 2 months
3546
+ if (leftMonth === 11) {
3547
+ setLeftMonth(1);
3548
+ setLeftYear(function (prev) { return prev + 2; });
3549
+ }
3550
+ else {
3551
+ setLeftMonth(function (prev) { return prev + 2; });
3552
+ }
3553
+ if (rightMonth === 11) {
3554
+ setRightMonth(1);
3555
+ setRightYear(function (prev) { return prev + 2; });
3556
+ }
3557
+ else {
3558
+ setRightMonth(function (prev) { return prev + 2; });
3559
+ }
3560
+ }
3561
+ else {
3562
+ // If not adjacent, move left panel forward by 1 month
3563
+ if (leftMonth === 11) {
3564
+ setLeftMonth(0);
3565
+ setLeftYear(function (prev) { return prev + 1; });
3566
+ }
3567
+ else {
3568
+ setLeftMonth(function (prev) { return prev + 1; });
3569
+ }
3570
+ }
3571
+ };
3572
+ var handleRightPrevMonth = function () {
3573
+ if (isAdjacent) {
3574
+ // If adjacent, move both panels backward by 2 months
3575
+ if (leftMonth === 0) {
3576
+ setLeftMonth(10);
3577
+ setLeftYear(function (prev) { return prev - 1; });
3578
+ }
3579
+ else {
3580
+ setLeftMonth(function (prev) { return prev - 2; });
3581
+ }
3582
+ if (rightMonth === 0) {
3583
+ setRightMonth(10);
3584
+ setRightYear(function (prev) { return prev - 1; });
3585
+ }
3586
+ else {
3587
+ setRightMonth(function (prev) { return prev - 2; });
3588
+ }
3589
+ }
3590
+ else {
3591
+ // If not adjacent, move right panel backward by 1 month
3592
+ if (rightMonth === 0) {
3593
+ setRightMonth(11);
3594
+ setRightYear(function (prev) { return prev - 1; });
3595
+ }
3596
+ else {
3597
+ setRightMonth(function (prev) { return prev - 1; });
3598
+ }
3599
+ }
3600
+ };
3601
+ var handleRightNextMonth = function () {
3602
+ if (rightMonth === 11) {
3603
+ setRightMonth(0);
3604
+ setRightYear(function (prev) { return prev + 1; });
3605
+ }
3606
+ else {
3607
+ setRightMonth(function (prev) { return prev + 1; });
3608
+ }
3609
+ };
3610
+ var handleDateSelect = function (date) {
3611
+ if (tempSelectedDate.length >= 2) {
3612
+ setTempSelectedDate([dateToInputString(date)]);
3613
+ }
3614
+ else {
3615
+ setTempSelectedDate(__spreadArray(__spreadArray([], tempSelectedDate, true), [dateToInputString(date)], false));
3616
+ }
3617
+ };
3618
+ var handleMonthSelect = function (setMonth, dateIndex, initYear) {
3619
+ return function (val) {
3620
+ var selectedDates = Array.isArray(selectedDate)
3621
+ ? selectedDate
3622
+ : selectedDate
3623
+ ? [selectedDate]
3624
+ : [];
3625
+ var isMonthAlreadySelected = selectedDates.some(function (date) {
3626
+ var dateYear = parseInt(date.slice(0, 4));
3627
+ var dateMonth = parseInt(date.slice(5, 7)) - 1;
3628
+ return dateYear === initYear && dateMonth === val;
3629
+ });
3630
+ if (isMonthAlreadySelected) {
3631
+ if (!selectedDates[dateIndex]) {
3632
+ return;
3633
+ }
3634
+ var selectedMonth = parseInt(selectedDates[dateIndex].slice(5, 7)) - 1;
3635
+ if (val === selectedMonth) {
3636
+ setMonth(selectedMonth);
3637
+ }
3638
+ else {
3639
+ return;
3640
+ }
3641
+ }
3642
+ else {
3643
+ setMonth(val);
3644
+ }
3645
+ };
3646
+ };
3647
+ return (React.createElement("div", { className: "space-y-[30px]" },
3648
+ React.createElement("div", { className: "range-picker picker-body flex gap-x-[22px]" },
3649
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: leftMonth, initialViewYear: leftYear, onPrevMonth: handleLeftPrevMonth, onNextMonth: handleLeftNextMonth, onMonthSelect: handleMonthSelect(setLeftMonth, 0, leftInitYear) }),
3650
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: rightMonth, initialViewYear: rightYear, onPrevMonth: handleRightPrevMonth, onNextMonth: handleRightNextMonth, onMonthSelect: handleMonthSelect(setRightMonth, 1, rightInitYear) })),
3651
+ React.createElement("div", { className: "flex justify-between" },
3652
+ React.createElement(Button, { label: "Reset", size: "sm", variant: "primary-outlined", iconLeft: React.createElement(TbRefresh, { className: "text-bia-blue", size: 14 }), onClick: function () { return setTempSelectedDate([]); } }),
3653
+ React.createElement("div", { className: "flex gap-x-2.5" },
3654
+ React.createElement(Button, { label: "Cancel", size: "sm", variant: "subtle", onClick: onClose }),
3655
+ React.createElement(Button, { label: "Done", size: "sm", iconLeft: React.createElement(TbCheck, { className: "text-bia-white", size: 14 }), variant: "primary", onClick: function () {
3656
+ onDateChange(tempSelectedDate.length ? tempSelectedDate : null);
3657
+ onClose();
3658
+ } })))));
3659
+ };
3660
+
3342
3661
  var PickerCalendar = function (_a) {
3343
- 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"]);
3662
+ 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"]);
3344
3663
  // Hooks & States
3345
- 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;
3346
3664
  var pickerCalendarRef = React.useRef(null);
3347
3665
  var _g = useDetectOutsideClick(anchorRef, false, pickerCalendarRef), isPickerOpen = _g[0], setIsPickerOpen = _g[1];
3348
3666
  var style = props.style, className = props.className, restProps = __rest(props, ["style", "className"]);
@@ -3350,56 +3668,17 @@ var PickerCalendar = function (_a) {
3350
3668
  React.useEffect(function () {
3351
3669
  setIsPickerOpen(isOpen);
3352
3670
  }, [isOpen]);
3671
+ return reactDom.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),
3672
+ React.createElement(PickerBody, { selectedDate: selectedDate, minDate: minDate, maxDate: maxDate, onDateChange: onDateChange, isPickerOpen: isPickerOpen, pickerVariant: pickerVariant, onClose: onClose })), document.body);
3673
+ };
3674
+ var PickerBody = function (_a) {
3675
+ 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;
3353
3676
  React.useEffect(function () {
3354
3677
  if (!isPickerOpen) {
3355
3678
  onClose();
3356
- handlePickerMode('date');
3357
3679
  }
3358
3680
  }, [isPickerOpen]);
3359
- // Event Handlers
3360
- var handleDateSelect = function (date) {
3361
- handleSetSelectedDate(date, onDateChange);
3362
- };
3363
- var handleMonthSelect = function (month) {
3364
- setViewMonthValue(month);
3365
- handlePickerMode('date');
3366
- };
3367
- var handleYearSelect = function (year) {
3368
- setViewYearValue(year);
3369
- handlePickerMode('month');
3370
- };
3371
- return reactDom.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),
3372
- React.createElement("div", { className: "bianic-datepicker-calendar-controller flex w-full items-center justify-between" },
3373
- React.createElement("button", { className: "bianic-datepicker-calendar-prev-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isPrevDisabled(), onClick: pickerMode === 'date'
3374
- ? handlePrevMonth
3375
- : pickerMode === 'month'
3376
- ? handlePrevYear
3377
- : handlePrevDecade },
3378
- React.createElement(TbChevronLeft, { size: 18 })),
3379
- React.createElement("div", { className: "bianic-datepicker-calendar-current-month flex items-center justify-center gap-1" },
3380
- React.createElement("button", { className: pickerMode === 'date' ? '' : 'hidden', onClick: function (e) {
3381
- e.stopPropagation();
3382
- handlePickerMode('month');
3383
- } },
3384
- React.createElement(Text, { variant: "normal-text-semibold" },
3385
- MONTH_MAP[viewMonthValue],
3386
- ' ')),
3387
- React.createElement("button", { className: pickerMode === 'date' || pickerMode === 'month' ? '' : 'hidden', onClick: function (e) {
3388
- e.stopPropagation();
3389
- handlePickerMode('year');
3390
- } },
3391
- React.createElement(Text, { variant: "normal-text" }, viewYearValue)),
3392
- React.createElement("button", { className: pickerMode === 'year' ? '' : 'hidden' },
3393
- React.createElement(Text, { variant: "normal-text" }, "".concat(yearDisplayRange[1], " - ").concat(yearDisplayRange[10])))),
3394
- React.createElement("button", { className: "bianic-datepicker-calendar-next-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isNextDisabled(), onClick: pickerMode === 'date'
3395
- ? handleNextMonth
3396
- : pickerMode === 'month'
3397
- ? handleNextYear
3398
- : handleNextDecade },
3399
- React.createElement(TbChevronRight, { size: 18 }))),
3400
- pickerMode === 'date' && (React.createElement(DateDisplay, { displayDays: displayDays, maxDateValue: maxDateValue, minDateValue: minDateValue, onDateSelect: handleDateSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue })),
3401
- pickerMode === 'month' && (React.createElement(MonthDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onMonthSelect: handleMonthSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue })),
3402
- pickerMode === 'year' && (React.createElement(YearDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onYearSelect: handleYearSelect, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))), document.body);
3681
+ 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 }))));
3403
3682
  };
3404
3683
 
3405
3684
  var monthMap = [
@@ -3418,12 +3697,22 @@ var monthMap = [
3418
3697
  ];
3419
3698
  var DateInputDisplay = React.forwardRef(function (_a, ref) {
3420
3699
  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"]);
3700
+ var inputValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3701
+ ? Array.isArray(value)
3702
+ ? "".concat(value[0], " ").concat(value[1] ? "- ".concat(value[1]) : '')
3703
+ : value
3704
+ : '';
3705
+ var viewValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3706
+ ? Array.isArray(value)
3707
+ ? "".concat(displayDateFormatter(new Date(value[0])), " ").concat(value[1] ? "- ".concat(displayDateFormatter(new Date(value[1]))) : '')
3708
+ : displayDateFormatter(new Date(value))
3709
+ : nullDisplay || placeholder;
3421
3710
  var _e = React.useState(false), isEditing = _e[0], setIsEditing = _e[1];
3422
- var _f = React.useState(value), dateString = _f[0], setDateString = _f[1];
3711
+ var _f = React.useState(inputValue), dateString = _f[0], setDateString = _f[1];
3423
3712
  var _g = styleConfig['text'], fieldStyle = _g.fieldStyle;
3424
3713
  var _h = sizeConfig$c[size], iconSize = _h.iconSize, fieldSize = _h.fieldSize, iconPosition = _h.iconPosition;
3425
3714
  var borderStyle = 'border border-bia-grey-dark-10 bg-primary-white';
3426
- var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3715
+ var extendedInputClassName = "w-full ".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3427
3716
  var labelStatus = props.readOnly ? 'read-only:pointer-events-none' : '';
3428
3717
  var handleTextChange = function (event) {
3429
3718
  var rawValue = event.target.value;
@@ -3444,51 +3733,45 @@ var DateInputDisplay = React.forwardRef(function (_a, ref) {
3444
3733
  };
3445
3734
  var handleBlur = function () {
3446
3735
  setIsEditing(false);
3447
- setDateString(value);
3736
+ setDateString(inputValue);
3448
3737
  };
3449
- 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 () {
3738
+ 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 () {
3450
3739
  buttonAction && buttonAction();
3451
3740
  } },
3452
3741
  React.createElement(TbCalendar, { size: iconSize })) })) : (React.createElement(React.Fragment, null,
3453
- 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
3454
- ? displayDateFormatter(new Date(value))
3455
- : nullDisplay || placeholder),
3742
+ 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),
3456
3743
  React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 text-bia-coolgrey ".concat(iconPosition) },
3457
3744
  React.createElement("button", { className: "bianic-datepicker-toggle-button", disabled: disabled, onClick: function () { return buttonAction && buttonAction(); } },
3458
3745
  React.createElement(TbCalendar, { size: iconSize })))));
3459
3746
  React.useEffect(function () {
3460
3747
  // Only update dateString if we are NOT currently editing.
3461
3748
  if (!isEditing)
3462
- setDateString(value ? dateToInputString(new Date(value)) : '');
3463
- }, [value, isEditing]);
3749
+ setDateString(inputValue !== null && inputValue !== void 0 ? inputValue : '');
3750
+ }, [inputValue, isEditing]);
3464
3751
  return (React.createElement("div", { className: "bianic-date-input-container bianic-fgc-container flex w-full flex-col gap-y-2 text-bia-black" },
3465
3752
  label && (React.createElement("label", { htmlFor: id, className: "bianic-text-input-label text-xs font-semibold ".concat(labelStatus) },
3466
3753
  label,
3467
3754
  required && React.createElement("span", { className: "p-1 text-bia-red" }, "*"))),
3468
3755
  React.createElement("div", { className: "relative w-full", ref: ref }, input)));
3469
3756
  });
3470
- var dateToInputString = function (dateObj) {
3471
- if (!(dateObj instanceof Date) || isNaN(dateObj))
3472
- return ''; // Return empty string for invalid dates
3473
- // Use local time methods for consistent display/input
3474
- var year = dateObj.getFullYear();
3475
- var month = String(dateObj.getMonth() + 1).padStart(2, '0');
3476
- var day = String(dateObj.getDate()).padStart(2, '0');
3477
- return "".concat(year, "-").concat(month, "-").concat(day);
3478
- };
3479
3757
  var displayDateFormatter = function (date) {
3758
+ if (!isDate(date))
3759
+ return '';
3480
3760
  return "".concat(date.getDate(), " ").concat(monthMap[date.getMonth()].slice(0, 3), " '").concat(date.getFullYear().toString().slice(2, 4));
3481
3761
  };
3762
+ function isDate(val) {
3763
+ return val instanceof Date && !isNaN(val);
3764
+ }
3482
3765
 
3483
3766
  function DatePicker(_a) {
3484
- 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;
3767
+ 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;
3485
3768
  // State and Ref
3486
3769
  var inputRef = React.useRef(null);
3487
- var _d = React.useState(false), isPickerOpen = _d[0], setIsPickerOpen = _d[1];
3770
+ var _e = React.useState(false), isPickerOpen = _e[0], setIsPickerOpen = _e[1];
3488
3771
  return (React.createElement("div", { className: "bianic-datepicker-container relative ".concat(containerClassName) },
3489
3772
  React.createElement("div", { className: "bianic-datepicker-field-container" },
3490
- 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 })),
3491
- React.createElement(PickerCalendar, { zIndex: zIndexCalendar, anchorRef: inputRef, selectedDate: value, onDateChange: onChange, minDate: minDate, maxDate: maxDate, isOpen: isPickerOpen, onClose: function () { return setIsPickerOpen(false); } })));
3773
+ 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 })),
3774
+ React.createElement(PickerCalendar, { zIndex: zIndexCalendar, anchorRef: inputRef, selectedDate: value, pickerVariant: variant, onDateChange: onChange, minDate: minDate, maxDate: maxDate, isOpen: isPickerOpen, onClose: function () { return setIsPickerOpen(false); } })));
3492
3775
  }
3493
3776
 
3494
3777
  var AlertRoundedSquare = function (_a) {
@@ -3771,7 +4054,7 @@ function PaginationBar(_a) {
3771
4054
  var size = _a.size, position = _a.position, currentPage = _a.currentPage, totalPages = _a.totalPages, onPageChange = _a.onPageChange;
3772
4055
  var totalRange = Array.from({ length: totalPages }, function (_, i) { return i + 1; });
3773
4056
  var PAGE_SIZE = 5;
3774
- var _b = React.useState(0), startIndex = _b[0], setStartIndex = _b[1];
4057
+ var _b = React.useState((currentPage || 1) - 1), startIndex = _b[0], setStartIndex = _b[1];
3775
4058
  var _c = React.useState(totalRange.slice(startIndex, PAGE_SIZE)), showedPages = _c[0], setShowedPages = _c[1];
3776
4059
  var buttonSizingStyle = size === 'sm' ? 31 : 38;
3777
4060
  var iconSize = size === 'sm' ? 14 : 18;
@@ -3779,13 +4062,6 @@ function PaginationBar(_a) {
3779
4062
  if (page >= 1 && page <= totalPages)
3780
4063
  onPageChange(page);
3781
4064
  };
3782
- var handleNextRange = function () {
3783
- var newStartIndex = startIndex + PAGE_SIZE;
3784
- if (newStartIndex < totalPages)
3785
- setStartIndex(newStartIndex);
3786
- else
3787
- setStartIndex(totalPages - PAGE_SIZE);
3788
- };
3789
4065
  var handlePrevRange = function () {
3790
4066
  var newStartIndex = startIndex - PAGE_SIZE;
3791
4067
  if (newStartIndex >= 0)
@@ -3793,6 +4069,13 @@ function PaginationBar(_a) {
3793
4069
  else
3794
4070
  setStartIndex(0);
3795
4071
  };
4072
+ var handleNextRange = function () {
4073
+ var newStartIndex = startIndex + PAGE_SIZE;
4074
+ if (newStartIndex < totalPages)
4075
+ setStartIndex(newStartIndex);
4076
+ else
4077
+ setStartIndex(totalPages - PAGE_SIZE);
4078
+ };
3796
4079
  React.useEffect(function () {
3797
4080
  var start = Math.max(0, Math.min(startIndex, totalPages - PAGE_SIZE));
3798
4081
  var newPages = Array.from({ length: totalPages }, function (_, i) { return i + 1; }).slice(start, start + PAGE_SIZE);
@@ -3804,6 +4087,8 @@ function PaginationBar(_a) {
3804
4087
  handlePageChange(currentPage - 1);
3805
4088
  if (showedPages[0] === currentPage)
3806
4089
  setStartIndex(function (old) { return old - 1; });
4090
+ if (!showedPages.includes(currentPage))
4091
+ setStartIndex(currentPage - 2);
3807
4092
  }, className: currentPage === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
3808
4093
  showedPages.map(function (page) {
3809
4094
  if (page === currentPage) {
@@ -3815,9 +4100,10 @@ function PaginationBar(_a) {
3815
4100
  }),
3816
4101
  React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
3817
4102
  handlePageChange(currentPage + 1);
3818
- if (showedPages[4] === currentPage) {
4103
+ if (showedPages[4] === currentPage)
3819
4104
  setStartIndex(function (old) { return old + 1; });
3820
- }
4105
+ if (!showedPages.includes(currentPage))
4106
+ setStartIndex(currentPage - 4);
3821
4107
  }, className: currentPage === totalPages ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
3822
4108
  totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handleNextRange, className: showedPages[showedPages.length - 1] === totalPages
3823
4109
  ? ''