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