bianic-ui 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +49 -49
  2. package/dist/cjs/index.js +457 -104
  3. package/dist/cjs/lib.css +1 -1
  4. package/dist/cjs/types/components/Forms/DatePicker/DateInputDisplay.d.ts +2 -2
  5. package/dist/cjs/types/components/Forms/DatePicker/DatePicker.d.ts +4 -3
  6. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/DateDisplay.d.ts +1 -1
  7. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/MonthDisplay.d.ts +1 -1
  8. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/PickerContent.d.ts +15 -0
  9. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/PickerHeader.d.ts +18 -0
  10. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/RangePicker.d.ts +11 -0
  11. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/SinglePicker.d.ts +9 -0
  12. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/components/index.d.ts +4 -0
  13. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/helpers/dateUtils.d.ts +10 -1
  14. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/hooks/useCalendarLogic.d.ts +1 -0
  15. package/dist/cjs/types/components/Forms/DatePicker/PickerCalendar/types/types.d.ts +3 -2
  16. package/dist/cjs/types/components/Forms/DatePicker/RangeDatePickerSimulation.d.ts +3 -0
  17. package/dist/cjs/types/components/Modal/ModalNonCloseable.d.ts +2 -0
  18. package/dist/cjs/types/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
  19. package/dist/cjs/types/stories/Modal/ModalNonCloseable.stories.d.ts +13 -0
  20. package/dist/esm/index.js +457 -104
  21. package/dist/esm/lib.css +1 -1
  22. package/dist/esm/types/components/Forms/DatePicker/DateInputDisplay.d.ts +2 -2
  23. package/dist/esm/types/components/Forms/DatePicker/DatePicker.d.ts +4 -3
  24. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/DateDisplay.d.ts +1 -1
  25. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/MonthDisplay.d.ts +1 -1
  26. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/PickerContent.d.ts +15 -0
  27. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/PickerHeader.d.ts +18 -0
  28. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/RangePicker.d.ts +11 -0
  29. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/SinglePicker.d.ts +9 -0
  30. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/components/index.d.ts +4 -0
  31. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/helpers/dateUtils.d.ts +10 -1
  32. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/hooks/useCalendarLogic.d.ts +1 -0
  33. package/dist/esm/types/components/Forms/DatePicker/PickerCalendar/types/types.d.ts +3 -2
  34. package/dist/esm/types/components/Forms/DatePicker/RangeDatePickerSimulation.d.ts +3 -0
  35. package/dist/esm/types/components/Modal/ModalNonCloseable.d.ts +2 -0
  36. package/dist/esm/types/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
  37. package/dist/esm/types/stories/Modal/ModalNonCloseable.stories.d.ts +13 -0
  38. package/dist/index.d.ts +7 -5
  39. package/package.json +142 -141
  40. package/src/style/color.css +650 -650
  41. package/src/style/scrollbar.css +78 -78
  42. package/tailwind.config.js +574 -574
package/dist/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) && selectedDate.length === 2;
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,277 @@ 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, onYearSelect = _a.onYearSelect;
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
+ if (onYearSelect)
3492
+ onYearSelect(y);
3493
+ else
3494
+ setViewYearValue(y);
3495
+ handlePickerMode('month');
3496
+ }, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))));
3497
+ };
3498
+
3499
+ var SinglePicker = function (_a) {
3500
+ var selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, minDate = _a.minDate, maxDate = _a.maxDate;
3501
+ var handleDateSelect = function (date) {
3502
+ onDateChange(dateToInputString(date));
3503
+ };
3504
+ return (React.createElement("div", { className: "single-picker picker-body" },
3505
+ React.createElement(PickerContent, { selectedDate: selectedDate !== null && selectedDate !== void 0 ? selectedDate : null, onDateSelect: handleDateSelect, minDate: minDate, maxDate: maxDate })));
3506
+ };
3507
+
3508
+ var RangePicker = function (_a) {
3509
+ var
3510
+ // pickerMode,
3511
+ selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, onClose = _a.onClose, minDate = _a.minDate, maxDate = _a.maxDate, isPickerOpen = _a.isPickerOpen;
3512
+ // compute initial view month/year for left and right panels from current selection
3513
+ var leftInitDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
3514
+ var rightInitDate = selectedDate && selectedDate[1] ? new Date(selectedDate[1]) : new Date();
3515
+ var leftInitMonth = leftInitDate.getMonth();
3516
+ var leftInitYear = leftInitDate.getFullYear();
3517
+ var rightInitMonth = rightInitDate
3518
+ ? rightInitDate.getMonth()
3519
+ : leftInitMonth === 11
3520
+ ? 0
3521
+ : leftInitMonth + 1;
3522
+ var rightInitYear = rightInitDate
3523
+ ? rightInitDate.getFullYear()
3524
+ : leftInitMonth === 11
3525
+ ? leftInitYear + 1
3526
+ : leftInitYear;
3527
+ // State to track left and right panel month/year
3528
+ var _b = React.useState(leftInitMonth), leftMonth = _b[0], setLeftMonth = _b[1];
3529
+ var _c = React.useState(leftInitYear), leftYear = _c[0], setLeftYear = _c[1];
3530
+ var _d = React.useState(rightInitMonth), rightMonth = _d[0], setRightMonth = _d[1];
3531
+ var _e = React.useState(rightInitYear), rightYear = _e[0], setRightYear = _e[1];
3532
+ var _f = React.useState(selectedDate || []), tempSelectedDate = _f[0], setTempSelectedDate = _f[1];
3533
+ React.useEffect(function () {
3534
+ // If both dates are in the same month/year, advance right picker to next month
3535
+ if (rightMonth === leftMonth && rightYear === leftYear) {
3536
+ var tempRightMonth = leftMonth === 11 ? 0 : leftMonth + 1;
3537
+ var tempRightYear = leftMonth === 11 ? leftYear + 1 : leftYear;
3538
+ setRightMonth(tempRightMonth);
3539
+ setRightYear(tempRightYear);
3540
+ }
3541
+ }, [leftMonth, leftYear, rightMonth, rightYear]);
3542
+ React.useEffect(function () {
3543
+ if (!isPickerOpen)
3544
+ setTempSelectedDate(selectedDate || []);
3545
+ }, [isPickerOpen]);
3546
+ var isAdjacent = React.useMemo(function () { return areMonthsAdjacent(leftMonth, leftYear, rightMonth, rightYear); }, [leftMonth, leftYear, rightMonth, rightYear]);
3547
+ // Helper function to ensure left picker is always smaller than right picker
3548
+ var ensureOrderedPickers = function (newLeftMonth, newLeftYear, newRightMonth, newRightYear) {
3549
+ // If left year is greater than right year, swap them
3550
+ if (newLeftYear > newRightYear) {
3551
+ setLeftMonth(newRightMonth);
3552
+ setLeftYear(newRightYear);
3553
+ setRightMonth(newLeftMonth);
3554
+ setRightYear(newLeftYear);
3555
+ }
3556
+ // If years are equal and left month is greater than or equal to right month, swap months
3557
+ else if (newLeftYear === newRightYear && newLeftMonth >= newRightMonth) {
3558
+ setLeftMonth(newRightMonth);
3559
+ setRightMonth(newLeftMonth);
3560
+ }
3561
+ // Otherwise, keep the order as is
3562
+ else {
3563
+ setLeftMonth(newLeftMonth);
3564
+ setLeftYear(newLeftYear);
3565
+ setRightMonth(newRightMonth);
3566
+ setRightYear(newRightYear);
3567
+ }
3568
+ };
3569
+ var handleLeftPrevMonth = function () {
3570
+ if (leftMonth === 0) {
3571
+ ensureOrderedPickers(11, leftYear - 1, rightMonth, rightYear);
3572
+ }
3573
+ else {
3574
+ ensureOrderedPickers(leftMonth - 1, leftYear, rightMonth, rightYear);
3575
+ }
3576
+ };
3577
+ var handleLeftNextMonth = function () {
3578
+ var newLeftMonth = leftMonth;
3579
+ var newLeftYear = leftYear;
3580
+ var newRightMonth = rightMonth;
3581
+ var newRightYear = rightYear;
3582
+ if (isAdjacent) {
3583
+ // If adjacent, move both panels forward
3584
+ if (leftMonth === 11) {
3585
+ newLeftMonth = 0;
3586
+ newLeftYear = leftYear + 1;
3587
+ }
3588
+ else {
3589
+ newLeftMonth = leftMonth + 1;
3590
+ }
3591
+ if (rightMonth === 11) {
3592
+ newRightMonth = 0;
3593
+ newRightYear = rightYear + 1;
3594
+ }
3595
+ else {
3596
+ newRightMonth = rightMonth + 1;
3597
+ }
3598
+ }
3599
+ else {
3600
+ if (leftMonth === 11) {
3601
+ newLeftMonth = 0;
3602
+ newLeftYear = leftYear + 1;
3603
+ }
3604
+ else {
3605
+ newLeftMonth = leftMonth + 1;
3606
+ }
3607
+ }
3608
+ ensureOrderedPickers(newLeftMonth, newLeftYear, newRightMonth, newRightYear);
3609
+ };
3610
+ var handleRightPrevMonth = function () {
3611
+ var newLeftMonth = leftMonth;
3612
+ var newLeftYear = leftYear;
3613
+ var newRightMonth = rightMonth;
3614
+ var newRightYear = rightYear;
3615
+ if (isAdjacent) {
3616
+ // If adjacent, move both panels backward
3617
+ if (leftMonth === 0) {
3618
+ newLeftMonth = 11;
3619
+ newLeftYear = leftYear - 1;
3620
+ }
3621
+ else {
3622
+ newLeftMonth = leftMonth - 1;
3623
+ }
3624
+ if (rightMonth === 0) {
3625
+ newRightMonth = 11;
3626
+ newRightYear = rightYear - 1;
3627
+ }
3628
+ else {
3629
+ newRightMonth = rightMonth - 1;
3630
+ }
3631
+ }
3632
+ else {
3633
+ if (rightMonth === 0) {
3634
+ newRightMonth = 11;
3635
+ newRightYear = rightYear - 1;
3636
+ }
3637
+ else {
3638
+ newRightMonth = rightMonth - 1;
3639
+ }
3640
+ }
3641
+ ensureOrderedPickers(newLeftMonth, newLeftYear, newRightMonth, newRightYear);
3642
+ };
3643
+ var handleRightNextMonth = function () {
3644
+ var newRightMonth = rightMonth;
3645
+ var newRightYear = rightYear;
3646
+ if (rightMonth === 11) {
3647
+ newRightMonth = 0;
3648
+ newRightYear = rightYear + 1;
3649
+ }
3650
+ else {
3651
+ newRightMonth = rightMonth + 1;
3652
+ }
3653
+ ensureOrderedPickers(leftMonth, leftYear, newRightMonth, newRightYear);
3654
+ };
3655
+ var handleYearSelectLeft = function (year) {
3656
+ ensureOrderedPickers(leftMonth, year, rightMonth, rightYear);
3657
+ };
3658
+ var handleYearSelectRight = function (year) {
3659
+ ensureOrderedPickers(leftMonth, leftYear, rightMonth, year);
3660
+ };
3661
+ var handleDateSelect = function (date) {
3662
+ if (tempSelectedDate.length >= 2) {
3663
+ setTempSelectedDate([dateToInputString(date)]);
3664
+ }
3665
+ else {
3666
+ var newDates = __spreadArray(__spreadArray([], tempSelectedDate, true), [dateToInputString(date)], false);
3667
+ if (newDates.length === 2)
3668
+ newDates.sort();
3669
+ setTempSelectedDate(newDates);
3670
+ }
3671
+ };
3672
+ var handleMonthSelect = function (dateIndex, initYear) {
3673
+ return function (val) {
3674
+ var selectedDates = Array.isArray(selectedDate)
3675
+ ? selectedDate
3676
+ : selectedDate
3677
+ ? [selectedDate]
3678
+ : [];
3679
+ var isMonthAlreadySelected = selectedDates.some(function (date) {
3680
+ var dateYear = parseInt(date.slice(0, 4));
3681
+ var dateMonth = parseInt(date.slice(5, 7)) - 1;
3682
+ return dateYear === initYear && dateMonth === val;
3683
+ });
3684
+ if (isMonthAlreadySelected) {
3685
+ if (!selectedDates[dateIndex]) {
3686
+ return;
3687
+ }
3688
+ var selectedMonth = parseInt(selectedDates[dateIndex].slice(5, 7)) - 1;
3689
+ if (val === selectedMonth) {
3690
+ if (dateIndex === 0) {
3691
+ ensureOrderedPickers(selectedMonth, initYear, rightMonth, rightYear);
3692
+ }
3693
+ else {
3694
+ ensureOrderedPickers(leftMonth, leftYear, selectedMonth, initYear);
3695
+ }
3696
+ }
3697
+ else {
3698
+ return;
3699
+ }
3700
+ }
3701
+ else {
3702
+ if (dateIndex === 0) {
3703
+ ensureOrderedPickers(val, initYear, rightMonth, rightYear);
3704
+ }
3705
+ else {
3706
+ ensureOrderedPickers(leftMonth, leftYear, val, initYear);
3707
+ }
3708
+ }
3709
+ };
3710
+ };
3711
+ return (React.createElement("div", { className: "space-y-[30px]" },
3712
+ React.createElement("div", { className: "range-picker picker-body flex gap-x-[22px]" },
3713
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: leftMonth, initialViewYear: leftYear, onPrevMonth: handleLeftPrevMonth, onNextMonth: handleLeftNextMonth, onMonthSelect: handleMonthSelect(0, leftYear), onYearSelect: handleYearSelectLeft }),
3714
+ React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: rightMonth, initialViewYear: rightYear, onPrevMonth: handleRightPrevMonth, onNextMonth: handleRightNextMonth, onMonthSelect: handleMonthSelect(1, rightYear), onYearSelect: handleYearSelectRight })),
3715
+ React.createElement("div", { className: "flex justify-between" },
3716
+ React.createElement(Button, { label: "Reset", size: "sm", variant: "primary-outlined", iconLeft: React.createElement(TbRefresh, { className: "text-bia-blue", size: 14 }), onClick: function () { return setTempSelectedDate([]); } }),
3717
+ React.createElement("div", { className: "flex gap-x-2.5" },
3718
+ React.createElement(Button, { label: "Cancel", size: "sm", variant: "subtle", onClick: onClose }),
3719
+ React.createElement(Button, { label: "Done", size: "sm", iconLeft: React.createElement(TbCheck, { className: "text-bia-white", size: 14 }), variant: "primary", onClick: function () {
3720
+ onDateChange(tempSelectedDate.length ? tempSelectedDate : null);
3721
+ onClose();
3722
+ } })))));
3723
+ };
3724
+
3342
3725
  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"]);
3726
+ 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
3727
  // 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
3728
  var pickerCalendarRef = React.useRef(null);
3347
3729
  var _g = useDetectOutsideClick(anchorRef, false, pickerCalendarRef), isPickerOpen = _g[0], setIsPickerOpen = _g[1];
3348
3730
  var style = props.style, className = props.className, restProps = __rest(props, ["style", "className"]);
@@ -3350,56 +3732,17 @@ var PickerCalendar = function (_a) {
3350
3732
  React.useEffect(function () {
3351
3733
  setIsPickerOpen(isOpen);
3352
3734
  }, [isOpen]);
3735
+ 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),
3736
+ React.createElement(PickerBody, { selectedDate: selectedDate, minDate: minDate, maxDate: maxDate, onDateChange: onDateChange, isPickerOpen: isPickerOpen, pickerVariant: pickerVariant, onClose: onClose, isOpen: isOpen })), document.body);
3737
+ };
3738
+ var PickerBody = function (_a) {
3739
+ var selectedDate = _a.selectedDate, minDate = _a.minDate, maxDate = _a.maxDate, onDateChange = _a.onDateChange, isPickerOpen = _a.isPickerOpen, _b = _a.pickerVariant, pickerVariant = _b === void 0 ? 'range' : _b, onClose = _a.onClose, isOpen = _a.isOpen;
3353
3740
  React.useEffect(function () {
3354
3741
  if (!isPickerOpen) {
3355
3742
  onClose();
3356
- handlePickerMode('date');
3357
3743
  }
3358
3744
  }, [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);
3745
+ return (React.createElement("div", { className: "picker-body flex gap-x-5" }, pickerVariant === 'single' ? (React.createElement(SinglePicker, { selectedDate: selectedDate, onDateChange: onDateChange, minDate: minDate, maxDate: maxDate })) : (React.createElement(RangePicker, { selectedDate: selectedDate, onDateChange: onDateChange, minDate: minDate, maxDate: maxDate, onClose: onClose, isPickerOpen: isOpen }))));
3403
3746
  };
3404
3747
 
3405
3748
  var monthMap = [
@@ -3418,12 +3761,22 @@ var monthMap = [
3418
3761
  ];
3419
3762
  var DateInputDisplay = React.forwardRef(function (_a, ref) {
3420
3763
  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"]);
3764
+ var inputValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3765
+ ? Array.isArray(value)
3766
+ ? "".concat(value[0], " ").concat(value[1] ? "- ".concat(value[1]) : '')
3767
+ : value
3768
+ : '';
3769
+ var viewValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
3770
+ ? Array.isArray(value)
3771
+ ? "".concat(displayDateFormatter(new Date(value[0])), " ").concat(value[1] ? "- ".concat(displayDateFormatter(new Date(value[1]))) : '')
3772
+ : displayDateFormatter(new Date(value))
3773
+ : nullDisplay || placeholder;
3421
3774
  var _e = React.useState(false), isEditing = _e[0], setIsEditing = _e[1];
3422
- var _f = React.useState(value), dateString = _f[0], setDateString = _f[1];
3775
+ var _f = React.useState(inputValue), dateString = _f[0], setDateString = _f[1];
3423
3776
  var _g = styleConfig['text'], fieldStyle = _g.fieldStyle;
3424
3777
  var _h = sizeConfig$c[size], iconSize = _h.iconSize, fieldSize = _h.fieldSize, iconPosition = _h.iconPosition;
3425
3778
  var borderStyle = 'border border-bia-grey-dark-10 bg-primary-white';
3426
- var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3779
+ var extendedInputClassName = "w-full ".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
3427
3780
  var labelStatus = props.readOnly ? 'read-only:pointer-events-none' : '';
3428
3781
  var handleTextChange = function (event) {
3429
3782
  var rawValue = event.target.value;
@@ -3444,51 +3797,45 @@ var DateInputDisplay = React.forwardRef(function (_a, ref) {
3444
3797
  };
3445
3798
  var handleBlur = function () {
3446
3799
  setIsEditing(false);
3447
- setDateString(value);
3800
+ setDateString(inputValue);
3448
3801
  };
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 () {
3802
+ 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
3803
  buttonAction && buttonAction();
3451
3804
  } },
3452
3805
  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),
3806
+ 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
3807
  React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 text-bia-coolgrey ".concat(iconPosition) },
3457
3808
  React.createElement("button", { className: "bianic-datepicker-toggle-button", disabled: disabled, onClick: function () { return buttonAction && buttonAction(); } },
3458
3809
  React.createElement(TbCalendar, { size: iconSize })))));
3459
3810
  React.useEffect(function () {
3460
3811
  // Only update dateString if we are NOT currently editing.
3461
3812
  if (!isEditing)
3462
- setDateString(value ? dateToInputString(new Date(value)) : '');
3463
- }, [value, isEditing]);
3813
+ setDateString(inputValue !== null && inputValue !== void 0 ? inputValue : '');
3814
+ }, [inputValue, isEditing]);
3464
3815
  return (React.createElement("div", { className: "bianic-date-input-container bianic-fgc-container flex w-full flex-col gap-y-2 text-bia-black" },
3465
3816
  label && (React.createElement("label", { htmlFor: id, className: "bianic-text-input-label text-xs font-semibold ".concat(labelStatus) },
3466
3817
  label,
3467
3818
  required && React.createElement("span", { className: "p-1 text-bia-red" }, "*"))),
3468
3819
  React.createElement("div", { className: "relative w-full", ref: ref }, input)));
3469
3820
  });
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
3821
  var displayDateFormatter = function (date) {
3822
+ if (!isDate(date))
3823
+ return '';
3480
3824
  return "".concat(date.getDate(), " ").concat(monthMap[date.getMonth()].slice(0, 3), " '").concat(date.getFullYear().toString().slice(2, 4));
3481
3825
  };
3826
+ function isDate(val) {
3827
+ return val instanceof Date && !isNaN(val);
3828
+ }
3482
3829
 
3483
3830
  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;
3831
+ 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
3832
  // State and Ref
3486
3833
  var inputRef = React.useRef(null);
3487
- var _d = React.useState(false), isPickerOpen = _d[0], setIsPickerOpen = _d[1];
3834
+ var _e = React.useState(false), isPickerOpen = _e[0], setIsPickerOpen = _e[1];
3488
3835
  return (React.createElement("div", { className: "bianic-datepicker-container relative ".concat(containerClassName) },
3489
3836
  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); } })));
3837
+ 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 })),
3838
+ 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
3839
  }
3493
3840
 
3494
3841
  var AlertRoundedSquare = function (_a) {
@@ -3719,7 +4066,10 @@ function Modal(_a) {
3719
4066
  modalSize = 'w-[540px]';
3720
4067
  }
3721
4068
  var handleClose = function (e) {
3722
- if (e && e.target && e.target.id === 'wrapper') {
4069
+ if (onClose &&
4070
+ e &&
4071
+ e.target &&
4072
+ e.target.id === 'wrapper') {
3723
4073
  onClose();
3724
4074
  }
3725
4075
  };
@@ -3730,7 +4080,7 @@ function Modal(_a) {
3730
4080
  React.createElement("div", { className: "bianic-modal flex flex-col gap-[20px] rounded-[5px] bg-white p-[20px] ".concat(modalSize), onClick: onClick },
3731
4081
  React.createElement("div", { className: "bianic-modal-header flex justify-between" },
3732
4082
  React.createElement("div", { className: " text-wrap text-left font-humnst777 text-[18px] font-bold leading-[21.85px] text-primary-black" }, title),
3733
- React.createElement(Button, { variant: "subtle", radius: "full-rounded", iconLeft: React.createElement(TbX, { size: 14 }), size: "tn", onClick: function () { return onClose(); } })),
4083
+ onClose && (React.createElement(Button, { variant: "subtle", radius: "full-rounded", iconLeft: React.createElement(TbX, { size: 14 }), size: "tn", onClick: function () { return onClose(); } }))),
3734
4084
  React.createElement("div", { className: "bianic-modal-content flex w-full flex-col items-start gap-[20px]" }, rest.children))), document.body));
3735
4085
  }
3736
4086
  return null;
@@ -3771,7 +4121,7 @@ function PaginationBar(_a) {
3771
4121
  var size = _a.size, position = _a.position, currentPage = _a.currentPage, totalPages = _a.totalPages, onPageChange = _a.onPageChange;
3772
4122
  var totalRange = Array.from({ length: totalPages }, function (_, i) { return i + 1; });
3773
4123
  var PAGE_SIZE = 5;
3774
- var _b = React.useState(0), startIndex = _b[0], setStartIndex = _b[1];
4124
+ var _b = React.useState((currentPage || 1) - 1), startIndex = _b[0], setStartIndex = _b[1];
3775
4125
  var _c = React.useState(totalRange.slice(startIndex, PAGE_SIZE)), showedPages = _c[0], setShowedPages = _c[1];
3776
4126
  var buttonSizingStyle = size === 'sm' ? 31 : 38;
3777
4127
  var iconSize = size === 'sm' ? 14 : 18;
@@ -3779,13 +4129,6 @@ function PaginationBar(_a) {
3779
4129
  if (page >= 1 && page <= totalPages)
3780
4130
  onPageChange(page);
3781
4131
  };
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
4132
  var handlePrevRange = function () {
3790
4133
  var newStartIndex = startIndex - PAGE_SIZE;
3791
4134
  if (newStartIndex >= 0)
@@ -3793,18 +4136,27 @@ function PaginationBar(_a) {
3793
4136
  else
3794
4137
  setStartIndex(0);
3795
4138
  };
4139
+ var handleNextRange = function () {
4140
+ var newStartIndex = startIndex + PAGE_SIZE;
4141
+ if (newStartIndex < totalPages)
4142
+ setStartIndex(newStartIndex);
4143
+ else
4144
+ setStartIndex(totalPages - PAGE_SIZE);
4145
+ };
3796
4146
  React.useEffect(function () {
3797
4147
  var start = Math.max(0, Math.min(startIndex, totalPages - PAGE_SIZE));
3798
4148
  var newPages = Array.from({ length: totalPages }, function (_, i) { return i + 1; }).slice(start, start + PAGE_SIZE);
3799
4149
  setShowedPages(newPages);
3800
4150
  }, [startIndex, totalPages]);
3801
4151
  return (React.createElement("div", { className: "flex ".concat(positionConfig[position], " gap-[5px]") },
3802
- totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handlePrevRange, className: showedPages[0] === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronsLeft, { size: iconSize }), disabled: showedPages[0] === 1 })),
4152
+ totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handlePrevRange, className: showedPages[0] === 1 ? ' cursor-not-allowed' : 'cursor-pointer', iconLeft: React.createElement(TbChevronsLeft, { size: iconSize }), disabled: showedPages[0] === 1 })),
3803
4153
  React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
3804
4154
  handlePageChange(currentPage - 1);
3805
4155
  if (showedPages[0] === currentPage)
3806
4156
  setStartIndex(function (old) { return old - 1; });
3807
- }, className: currentPage === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
4157
+ if (!showedPages.includes(currentPage))
4158
+ setStartIndex(currentPage - 2);
4159
+ }, className: currentPage === 1 ? 'cursor-not-allowed' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
3808
4160
  showedPages.map(function (page) {
3809
4161
  if (page === currentPage) {
3810
4162
  return React.createElement(SelectedPage, { key: page, label: page.toString(), size: size });
@@ -3815,12 +4167,13 @@ function PaginationBar(_a) {
3815
4167
  }),
3816
4168
  React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
3817
4169
  handlePageChange(currentPage + 1);
3818
- if (showedPages[4] === currentPage) {
4170
+ if (showedPages[4] === currentPage)
3819
4171
  setStartIndex(function (old) { return old + 1; });
3820
- }
3821
- }, className: currentPage === totalPages ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
4172
+ if (!showedPages.includes(currentPage))
4173
+ setStartIndex(currentPage - 4);
4174
+ }, className: currentPage === totalPages ? 'cursor-not-allowed' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
3822
4175
  totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handleNextRange, className: showedPages[showedPages.length - 1] === totalPages
3823
- ? ''
4176
+ ? 'cursor-not-allowed'
3824
4177
  : 'cursor-pointer', iconLeft: React.createElement(TbChevronsRight, { size: iconSize }), disabled: showedPages[showedPages.length - 1] === totalPages }))));
3825
4178
  }
3826
4179