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/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
|
|
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
|
-
?
|
|
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
|
-
|
|
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
|
-
:
|
|
3136
|
-
?
|
|
3137
|
-
|
|
3138
|
-
|
|
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
|
|
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
|
-
|
|
3165
|
-
|
|
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
|
|
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(
|
|
3246
|
-
var monthTotalDate = new Date(
|
|
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(
|
|
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
|
-
|
|
3257
|
-
}
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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:
|
|
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
|
|
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(
|
|
3463
|
-
}, [
|
|
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
|
|
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
|
|
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, {
|
|
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 (
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|