bianic-ui 2.7.0 → 2.8.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -49
- package/dist/cjs/index.js +384 -98
- 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 +14 -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 +10 -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/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
- package/dist/esm/index.js +384 -98
- 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 +14 -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 +10 -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/stories/Form/DatePicker/RangeDatepickerSimulation.stories.d.ts +13 -0
- package/dist/index.d.ts +7 -5
- package/package.json +141 -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);
|
|
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,213 @@ var useCalendarLogic = function (selectedDate, minDate, maxDate) {
|
|
|
3334
3452
|
yearDisplayRange: yearDisplayRange,
|
|
3335
3453
|
isPrevDisabled: isPrevDisabled,
|
|
3336
3454
|
isNextDisabled: isNextDisabled,
|
|
3455
|
+
getDisplayDays: getDisplayDays,
|
|
3337
3456
|
};
|
|
3338
3457
|
};
|
|
3339
3458
|
|
|
3459
|
+
var PickerContent = function (_a) {
|
|
3460
|
+
var selectedDate = _a.selectedDate, onDateSelect = _a.onDateSelect, initialViewMonth = _a.initialViewMonth, initialViewYear = _a.initialViewYear, minDate = _a.minDate, maxDate = _a.maxDate, onPrevMonth = _a.onPrevMonth, onNextMonth = _a.onNextMonth, onMonthSelect = _a.onMonthSelect;
|
|
3461
|
+
var _b = useCalendarLogic(
|
|
3462
|
+
// use first selectedDate if array
|
|
3463
|
+
Array.isArray(selectedDate)
|
|
3464
|
+
? selectedDate[0]
|
|
3465
|
+
: selectedDate, minDate, maxDate), pickerMode = _b.pickerMode, viewMonthValue = _b.viewMonthValue, viewYearValue = _b.viewYearValue, yearDisplayRange = _b.yearDisplayRange, isPrevDisabled = _b.isPrevDisabled, isNextDisabled = _b.isNextDisabled, internalHandlePrevMonth = _b.handlePrevMonth, handlePrevYear = _b.handlePrevYear, handlePrevDecade = _b.handlePrevDecade, internalHandleNextMonth = _b.handleNextMonth, handleNextYear = _b.handleNextYear, handleNextDecade = _b.handleNextDecade, handlePickerMode = _b.handlePickerMode, getDisplayDays = _b.getDisplayDays, setViewMonthValue = _b.setViewMonthValue, setViewYearValue = _b.setViewYearValue, maxDateValue = _b.maxDateValue, minDateValue = _b.minDateValue;
|
|
3466
|
+
useEffect(function () {
|
|
3467
|
+
if (typeof initialViewMonth === 'number') {
|
|
3468
|
+
setViewMonthValue(initialViewMonth);
|
|
3469
|
+
}
|
|
3470
|
+
if (typeof initialViewYear === 'number') {
|
|
3471
|
+
setViewYearValue(initialViewYear);
|
|
3472
|
+
}
|
|
3473
|
+
}, [initialViewMonth, initialViewYear]);
|
|
3474
|
+
// Use custom handlers for range mode, fall back to internal for single mode
|
|
3475
|
+
var handlePrevMonth = onPrevMonth || internalHandlePrevMonth;
|
|
3476
|
+
var handleNextMonth = onNextMonth || internalHandleNextMonth;
|
|
3477
|
+
var days = getDisplayDays(viewMonthValue, viewYearValue);
|
|
3478
|
+
return (React.createElement("div", { className: "picker-body flex w-[250px] flex-col gap-[15px]" },
|
|
3479
|
+
React.createElement(PickerHeader, { pickerMode: pickerMode, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange, isPrevDisabled: isPrevDisabled, isNextDisabled: isNextDisabled, handlePrevMonth: handlePrevMonth, handlePrevYear: handlePrevYear, handlePrevDecade: handlePrevDecade, handleNextMonth: handleNextMonth, handleNextYear: handleNextYear, handleNextDecade: handleNextDecade, handlePickerMode: handlePickerMode }),
|
|
3480
|
+
pickerMode === 'date' && (React.createElement(DateDisplay, { displayDays: days, maxDateValue: maxDateValue, minDateValue: minDateValue, onDateSelect: onDateSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue })),
|
|
3481
|
+
pickerMode === 'month' && (React.createElement(MonthDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onMonthSelect: function (m) {
|
|
3482
|
+
if (onMonthSelect)
|
|
3483
|
+
onMonthSelect(m);
|
|
3484
|
+
else
|
|
3485
|
+
setViewMonthValue(m);
|
|
3486
|
+
handlePickerMode('date');
|
|
3487
|
+
}, selectedDate: selectedDate, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue })),
|
|
3488
|
+
pickerMode === 'year' && (React.createElement(YearDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onYearSelect: function (y) {
|
|
3489
|
+
setViewYearValue(y);
|
|
3490
|
+
handlePickerMode('month');
|
|
3491
|
+
}, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))));
|
|
3492
|
+
};
|
|
3493
|
+
|
|
3494
|
+
var SinglePicker = function (_a) {
|
|
3495
|
+
var selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, minDate = _a.minDate, maxDate = _a.maxDate;
|
|
3496
|
+
var handleDateSelect = function (date) {
|
|
3497
|
+
onDateChange(dateToInputString(date));
|
|
3498
|
+
};
|
|
3499
|
+
return (React.createElement("div", { className: "single-picker picker-body" },
|
|
3500
|
+
React.createElement(PickerContent, { selectedDate: selectedDate !== null && selectedDate !== void 0 ? selectedDate : null, onDateSelect: handleDateSelect, minDate: minDate, maxDate: maxDate })));
|
|
3501
|
+
};
|
|
3502
|
+
|
|
3503
|
+
var RangePicker = function (_a) {
|
|
3504
|
+
var
|
|
3505
|
+
// pickerMode,
|
|
3506
|
+
selectedDate = _a.selectedDate, onDateChange = _a.onDateChange, onClose = _a.onClose, minDate = _a.minDate, maxDate = _a.maxDate;
|
|
3507
|
+
// compute initial view month/year for left and right panels from current selection
|
|
3508
|
+
var leftInitDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
|
|
3509
|
+
var leftInitMonth = leftInitDate.getMonth();
|
|
3510
|
+
var leftInitYear = leftInitDate.getFullYear();
|
|
3511
|
+
var rightInitMonth = leftInitMonth === 11 ? 0 : leftInitMonth + 1;
|
|
3512
|
+
var rightInitYear = leftInitMonth === 11 ? leftInitYear + 1 : leftInitYear;
|
|
3513
|
+
// State to track left and right panel month/year
|
|
3514
|
+
var _b = useState(leftInitMonth), leftMonth = _b[0], setLeftMonth = _b[1];
|
|
3515
|
+
var _c = useState(leftInitYear), leftYear = _c[0], setLeftYear = _c[1];
|
|
3516
|
+
var _d = useState(rightInitMonth), rightMonth = _d[0], setRightMonth = _d[1];
|
|
3517
|
+
var _e = useState(rightInitYear), rightYear = _e[0], setRightYear = _e[1];
|
|
3518
|
+
var _f = useState(selectedDate || []), tempSelectedDate = _f[0], setTempSelectedDate = _f[1];
|
|
3519
|
+
// Sync state when initial selection changes
|
|
3520
|
+
useEffect(function () {
|
|
3521
|
+
var initDate = selectedDate && selectedDate[0] ? new Date(selectedDate[0]) : new Date();
|
|
3522
|
+
var initMonth = initDate.getMonth();
|
|
3523
|
+
var initYear = initDate.getFullYear();
|
|
3524
|
+
var nextMonth = initMonth === 11 ? 0 : initMonth + 1;
|
|
3525
|
+
var nextYear = initMonth === 11 ? initYear + 1 : initYear;
|
|
3526
|
+
setLeftMonth(initMonth);
|
|
3527
|
+
setLeftYear(initYear);
|
|
3528
|
+
setRightMonth(nextMonth);
|
|
3529
|
+
setRightYear(nextYear);
|
|
3530
|
+
}, [selectedDate]);
|
|
3531
|
+
var isAdjacent = useMemo(function () { return areMonthsAdjacent(leftMonth, leftYear, rightMonth, rightYear); }, [leftMonth, leftYear, rightMonth, rightYear]);
|
|
3532
|
+
var handleLeftPrevMonth = function () {
|
|
3533
|
+
if (leftMonth === 0) {
|
|
3534
|
+
setLeftMonth(11);
|
|
3535
|
+
setLeftYear(function (prev) { return prev - 1; });
|
|
3536
|
+
}
|
|
3537
|
+
else {
|
|
3538
|
+
setLeftMonth(function (prev) { return prev - 1; });
|
|
3539
|
+
}
|
|
3540
|
+
};
|
|
3541
|
+
var handleLeftNextMonth = function () {
|
|
3542
|
+
if (isAdjacent) {
|
|
3543
|
+
// If adjacent, move both panels forward by 2 months
|
|
3544
|
+
if (leftMonth === 11) {
|
|
3545
|
+
setLeftMonth(1);
|
|
3546
|
+
setLeftYear(function (prev) { return prev + 2; });
|
|
3547
|
+
}
|
|
3548
|
+
else {
|
|
3549
|
+
setLeftMonth(function (prev) { return prev + 2; });
|
|
3550
|
+
}
|
|
3551
|
+
if (rightMonth === 11) {
|
|
3552
|
+
setRightMonth(1);
|
|
3553
|
+
setRightYear(function (prev) { return prev + 2; });
|
|
3554
|
+
}
|
|
3555
|
+
else {
|
|
3556
|
+
setRightMonth(function (prev) { return prev + 2; });
|
|
3557
|
+
}
|
|
3558
|
+
}
|
|
3559
|
+
else {
|
|
3560
|
+
// If not adjacent, move left panel forward by 1 month
|
|
3561
|
+
if (leftMonth === 11) {
|
|
3562
|
+
setLeftMonth(0);
|
|
3563
|
+
setLeftYear(function (prev) { return prev + 1; });
|
|
3564
|
+
}
|
|
3565
|
+
else {
|
|
3566
|
+
setLeftMonth(function (prev) { return prev + 1; });
|
|
3567
|
+
}
|
|
3568
|
+
}
|
|
3569
|
+
};
|
|
3570
|
+
var handleRightPrevMonth = function () {
|
|
3571
|
+
if (isAdjacent) {
|
|
3572
|
+
// If adjacent, move both panels backward by 2 months
|
|
3573
|
+
if (leftMonth === 0) {
|
|
3574
|
+
setLeftMonth(10);
|
|
3575
|
+
setLeftYear(function (prev) { return prev - 1; });
|
|
3576
|
+
}
|
|
3577
|
+
else {
|
|
3578
|
+
setLeftMonth(function (prev) { return prev - 2; });
|
|
3579
|
+
}
|
|
3580
|
+
if (rightMonth === 0) {
|
|
3581
|
+
setRightMonth(10);
|
|
3582
|
+
setRightYear(function (prev) { return prev - 1; });
|
|
3583
|
+
}
|
|
3584
|
+
else {
|
|
3585
|
+
setRightMonth(function (prev) { return prev - 2; });
|
|
3586
|
+
}
|
|
3587
|
+
}
|
|
3588
|
+
else {
|
|
3589
|
+
// If not adjacent, move right panel backward by 1 month
|
|
3590
|
+
if (rightMonth === 0) {
|
|
3591
|
+
setRightMonth(11);
|
|
3592
|
+
setRightYear(function (prev) { return prev - 1; });
|
|
3593
|
+
}
|
|
3594
|
+
else {
|
|
3595
|
+
setRightMonth(function (prev) { return prev - 1; });
|
|
3596
|
+
}
|
|
3597
|
+
}
|
|
3598
|
+
};
|
|
3599
|
+
var handleRightNextMonth = function () {
|
|
3600
|
+
if (rightMonth === 11) {
|
|
3601
|
+
setRightMonth(0);
|
|
3602
|
+
setRightYear(function (prev) { return prev + 1; });
|
|
3603
|
+
}
|
|
3604
|
+
else {
|
|
3605
|
+
setRightMonth(function (prev) { return prev + 1; });
|
|
3606
|
+
}
|
|
3607
|
+
};
|
|
3608
|
+
var handleDateSelect = function (date) {
|
|
3609
|
+
if (tempSelectedDate.length >= 2) {
|
|
3610
|
+
setTempSelectedDate([dateToInputString(date)]);
|
|
3611
|
+
}
|
|
3612
|
+
else {
|
|
3613
|
+
setTempSelectedDate(__spreadArray(__spreadArray([], tempSelectedDate, true), [dateToInputString(date)], false));
|
|
3614
|
+
}
|
|
3615
|
+
};
|
|
3616
|
+
var handleMonthSelect = function (setMonth, dateIndex, initYear) {
|
|
3617
|
+
return function (val) {
|
|
3618
|
+
var selectedDates = Array.isArray(selectedDate)
|
|
3619
|
+
? selectedDate
|
|
3620
|
+
: selectedDate
|
|
3621
|
+
? [selectedDate]
|
|
3622
|
+
: [];
|
|
3623
|
+
var isMonthAlreadySelected = selectedDates.some(function (date) {
|
|
3624
|
+
var dateYear = parseInt(date.slice(0, 4));
|
|
3625
|
+
var dateMonth = parseInt(date.slice(5, 7)) - 1;
|
|
3626
|
+
return dateYear === initYear && dateMonth === val;
|
|
3627
|
+
});
|
|
3628
|
+
if (isMonthAlreadySelected) {
|
|
3629
|
+
if (!selectedDates[dateIndex]) {
|
|
3630
|
+
return;
|
|
3631
|
+
}
|
|
3632
|
+
var selectedMonth = parseInt(selectedDates[dateIndex].slice(5, 7)) - 1;
|
|
3633
|
+
if (val === selectedMonth) {
|
|
3634
|
+
setMonth(selectedMonth);
|
|
3635
|
+
}
|
|
3636
|
+
else {
|
|
3637
|
+
return;
|
|
3638
|
+
}
|
|
3639
|
+
}
|
|
3640
|
+
else {
|
|
3641
|
+
setMonth(val);
|
|
3642
|
+
}
|
|
3643
|
+
};
|
|
3644
|
+
};
|
|
3645
|
+
return (React.createElement("div", { className: "space-y-[30px]" },
|
|
3646
|
+
React.createElement("div", { className: "range-picker picker-body flex gap-x-[22px]" },
|
|
3647
|
+
React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: leftMonth, initialViewYear: leftYear, onPrevMonth: handleLeftPrevMonth, onNextMonth: handleLeftNextMonth, onMonthSelect: handleMonthSelect(setLeftMonth, 0, leftInitYear) }),
|
|
3648
|
+
React.createElement(PickerContent, { selectedDate: tempSelectedDate, minDate: minDate, maxDate: maxDate, onDateSelect: handleDateSelect, initialViewMonth: rightMonth, initialViewYear: rightYear, onPrevMonth: handleRightPrevMonth, onNextMonth: handleRightNextMonth, onMonthSelect: handleMonthSelect(setRightMonth, 1, rightInitYear) })),
|
|
3649
|
+
React.createElement("div", { className: "flex justify-between" },
|
|
3650
|
+
React.createElement(Button, { label: "Reset", size: "sm", variant: "primary-outlined", iconLeft: React.createElement(TbRefresh, { className: "text-bia-blue", size: 14 }), onClick: function () { return setTempSelectedDate([]); } }),
|
|
3651
|
+
React.createElement("div", { className: "flex gap-x-2.5" },
|
|
3652
|
+
React.createElement(Button, { label: "Cancel", size: "sm", variant: "subtle", onClick: onClose }),
|
|
3653
|
+
React.createElement(Button, { label: "Done", size: "sm", iconLeft: React.createElement(TbCheck, { className: "text-bia-white", size: 14 }), variant: "primary", onClick: function () {
|
|
3654
|
+
onDateChange(tempSelectedDate.length ? tempSelectedDate : null);
|
|
3655
|
+
onClose();
|
|
3656
|
+
} })))));
|
|
3657
|
+
};
|
|
3658
|
+
|
|
3340
3659
|
var PickerCalendar = function (_a) {
|
|
3341
|
-
var _b = _a.zIndex, zIndex = _b === void 0 ? 100 : _b, anchorRef = _a.anchorRef, maxDate = _a.maxDate, minDate = _a.minDate, onDateChange = _a.onDateChange; _a.ref; var _c = _a.selectedDate, selectedDate = _c === void 0 ? null : _c, _d = _a.isOpen, isOpen = _d === void 0 ? false : _d, _e = _a.onClose, onClose = _e === void 0 ? function () { } : _e, props = __rest(_a, ["zIndex", "anchorRef", "maxDate", "minDate", "onDateChange", "ref", "selectedDate", "isOpen", "onClose"]);
|
|
3660
|
+
var _b = _a.zIndex, zIndex = _b === void 0 ? 100 : _b, anchorRef = _a.anchorRef, maxDate = _a.maxDate, minDate = _a.minDate, onDateChange = _a.onDateChange; _a.ref; var _c = _a.selectedDate, selectedDate = _c === void 0 ? null : _c, _d = _a.isOpen, isOpen = _d === void 0 ? false : _d, _e = _a.onClose, onClose = _e === void 0 ? function () { } : _e, _f = _a.pickerVariant, pickerVariant = _f === void 0 ? 'range' : _f, props = __rest(_a, ["zIndex", "anchorRef", "maxDate", "minDate", "onDateChange", "ref", "selectedDate", "isOpen", "onClose", "pickerVariant"]);
|
|
3342
3661
|
// Hooks & States
|
|
3343
|
-
var _f = useCalendarLogic(selectedDate, minDate, maxDate), displayDays = _f.displayDays, handleNextDecade = _f.handleNextDecade, handleNextMonth = _f.handleNextMonth, handleNextYear = _f.handleNextYear, handlePickerMode = _f.handlePickerMode, handlePrevDecade = _f.handlePrevDecade, handlePrevMonth = _f.handlePrevMonth, handlePrevYear = _f.handlePrevYear, handleSetSelectedDate = _f.handleSetSelectedDate, isNextDisabled = _f.isNextDisabled, isPrevDisabled = _f.isPrevDisabled, maxDateValue = _f.maxDateValue, minDateValue = _f.minDateValue, pickerMode = _f.pickerMode, setViewMonthValue = _f.setViewMonthValue, setViewYearValue = _f.setViewYearValue, viewMonthValue = _f.viewMonthValue, viewYearValue = _f.viewYearValue, yearDisplayRange = _f.yearDisplayRange;
|
|
3344
3662
|
var pickerCalendarRef = useRef(null);
|
|
3345
3663
|
var _g = useDetectOutsideClick(anchorRef, false, pickerCalendarRef), isPickerOpen = _g[0], setIsPickerOpen = _g[1];
|
|
3346
3664
|
var style = props.style, className = props.className, restProps = __rest(props, ["style", "className"]);
|
|
@@ -3348,56 +3666,17 @@ var PickerCalendar = function (_a) {
|
|
|
3348
3666
|
useEffect(function () {
|
|
3349
3667
|
setIsPickerOpen(isOpen);
|
|
3350
3668
|
}, [isOpen]);
|
|
3669
|
+
return createPortal(React.createElement("div", __assign({ className: "bianic-datepicker-calendar absolute rounded-b-radius-sm bg-bia-white px-1.5 pb-[17px] pt-[15px] text-bia-black shadow-md ".concat(className), ref: pickerCalendarRef, style: __assign(__assign({ zIndex: zIndex, display: isPickerOpen ? 'flex' : 'none' }, positionStyle), style) }, restProps),
|
|
3670
|
+
React.createElement(PickerBody, { selectedDate: selectedDate, minDate: minDate, maxDate: maxDate, onDateChange: onDateChange, isPickerOpen: isPickerOpen, pickerVariant: pickerVariant, onClose: onClose })), document.body);
|
|
3671
|
+
};
|
|
3672
|
+
var PickerBody = function (_a) {
|
|
3673
|
+
var selectedDate = _a.selectedDate, minDate = _a.minDate, maxDate = _a.maxDate, onDateChange = _a.onDateChange, isPickerOpen = _a.isPickerOpen, _b = _a.pickerVariant, pickerVariant = _b === void 0 ? 'range' : _b, onClose = _a.onClose;
|
|
3351
3674
|
useEffect(function () {
|
|
3352
3675
|
if (!isPickerOpen) {
|
|
3353
3676
|
onClose();
|
|
3354
|
-
handlePickerMode('date');
|
|
3355
3677
|
}
|
|
3356
3678
|
}, [isPickerOpen]);
|
|
3357
|
-
|
|
3358
|
-
var handleDateSelect = function (date) {
|
|
3359
|
-
handleSetSelectedDate(date, onDateChange);
|
|
3360
|
-
};
|
|
3361
|
-
var handleMonthSelect = function (month) {
|
|
3362
|
-
setViewMonthValue(month);
|
|
3363
|
-
handlePickerMode('date');
|
|
3364
|
-
};
|
|
3365
|
-
var handleYearSelect = function (year) {
|
|
3366
|
-
setViewYearValue(year);
|
|
3367
|
-
handlePickerMode('month');
|
|
3368
|
-
};
|
|
3369
|
-
return createPortal(React.createElement("div", __assign({ className: "bianic-datepicker-calendar absolute flex w-[250px] flex-col gap-[15px] rounded-b-radius-sm bg-bia-white px-1.5 pb-[17px] pt-[15px] text-bia-black shadow-md ".concat(className), ref: pickerCalendarRef, style: __assign(__assign({ zIndex: zIndex, display: isPickerOpen ? 'block' : 'none' }, positionStyle), style) }, restProps),
|
|
3370
|
-
React.createElement("div", { className: "bianic-datepicker-calendar-controller flex w-full items-center justify-between" },
|
|
3371
|
-
React.createElement("button", { className: "bianic-datepicker-calendar-prev-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isPrevDisabled(), onClick: pickerMode === 'date'
|
|
3372
|
-
? handlePrevMonth
|
|
3373
|
-
: pickerMode === 'month'
|
|
3374
|
-
? handlePrevYear
|
|
3375
|
-
: handlePrevDecade },
|
|
3376
|
-
React.createElement(TbChevronLeft, { size: 18 })),
|
|
3377
|
-
React.createElement("div", { className: "bianic-datepicker-calendar-current-month flex items-center justify-center gap-1" },
|
|
3378
|
-
React.createElement("button", { className: pickerMode === 'date' ? '' : 'hidden', onClick: function (e) {
|
|
3379
|
-
e.stopPropagation();
|
|
3380
|
-
handlePickerMode('month');
|
|
3381
|
-
} },
|
|
3382
|
-
React.createElement(Text, { variant: "normal-text-semibold" },
|
|
3383
|
-
MONTH_MAP[viewMonthValue],
|
|
3384
|
-
' ')),
|
|
3385
|
-
React.createElement("button", { className: pickerMode === 'date' || pickerMode === 'month' ? '' : 'hidden', onClick: function (e) {
|
|
3386
|
-
e.stopPropagation();
|
|
3387
|
-
handlePickerMode('year');
|
|
3388
|
-
} },
|
|
3389
|
-
React.createElement(Text, { variant: "normal-text" }, viewYearValue)),
|
|
3390
|
-
React.createElement("button", { className: pickerMode === 'year' ? '' : 'hidden' },
|
|
3391
|
-
React.createElement(Text, { variant: "normal-text" }, "".concat(yearDisplayRange[1], " - ").concat(yearDisplayRange[10])))),
|
|
3392
|
-
React.createElement("button", { className: "bianic-datepicker-calendar-next-button text-bia-coolgrey disabled:text-bia-coolgrey-light-50", disabled: isNextDisabled(), onClick: pickerMode === 'date'
|
|
3393
|
-
? handleNextMonth
|
|
3394
|
-
: pickerMode === 'month'
|
|
3395
|
-
? handleNextYear
|
|
3396
|
-
: handleNextDecade },
|
|
3397
|
-
React.createElement(TbChevronRight, { size: 18 }))),
|
|
3398
|
-
pickerMode === 'date' && (React.createElement(DateDisplay, { displayDays: displayDays, maxDateValue: maxDateValue, minDateValue: minDateValue, onDateSelect: handleDateSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue })),
|
|
3399
|
-
pickerMode === 'month' && (React.createElement(MonthDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onMonthSelect: handleMonthSelect, selectedDate: selectedDate, viewMonthValue: viewMonthValue, viewYearValue: viewYearValue })),
|
|
3400
|
-
pickerMode === 'year' && (React.createElement(YearDisplay, { maxDateValue: maxDateValue, minDateValue: minDateValue, onYearSelect: handleYearSelect, viewYearValue: viewYearValue, yearDisplayRange: yearDisplayRange }))), document.body);
|
|
3679
|
+
return (React.createElement("div", { className: "picker-body flex gap-x-5" }, pickerVariant === 'single' ? (React.createElement(SinglePicker, { selectedDate: selectedDate, onDateChange: onDateChange, minDate: minDate, maxDate: maxDate })) : (React.createElement(RangePicker, { selectedDate: selectedDate, onDateChange: onDateChange, minDate: minDate, maxDate: maxDate, onClose: onClose }))));
|
|
3401
3680
|
};
|
|
3402
3681
|
|
|
3403
3682
|
var monthMap = [
|
|
@@ -3416,12 +3695,22 @@ var monthMap = [
|
|
|
3416
3695
|
];
|
|
3417
3696
|
var DateInputDisplay = forwardRef(function (_a, ref) {
|
|
3418
3697
|
var value = _a.value, setValue = _a.setValue, _b = _a.placeholder, placeholder = _b === void 0 ? 'YYYY-MM-DD' : _b, label = _a.label, required = _a.required, id = _a.id, _c = _a.size, size = _c === void 0 ? 'sm' : _c, className = _a.className, _d = _a.disabled, disabled = _d === void 0 ? false : _d, buttonAction = _a.buttonAction, nullDisplay = _a.nullDisplay, props = __rest(_a, ["value", "setValue", "placeholder", "label", "required", "id", "size", "className", "disabled", "buttonAction", "nullDisplay"]);
|
|
3698
|
+
var inputValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
|
|
3699
|
+
? Array.isArray(value)
|
|
3700
|
+
? "".concat(value[0], " ").concat(value[1] ? "- ".concat(value[1]) : '')
|
|
3701
|
+
: value
|
|
3702
|
+
: '';
|
|
3703
|
+
var viewValue = value || (value === null || value === void 0 ? void 0 : value.length) > 0
|
|
3704
|
+
? Array.isArray(value)
|
|
3705
|
+
? "".concat(displayDateFormatter(new Date(value[0])), " ").concat(value[1] ? "- ".concat(displayDateFormatter(new Date(value[1]))) : '')
|
|
3706
|
+
: displayDateFormatter(new Date(value))
|
|
3707
|
+
: nullDisplay || placeholder;
|
|
3419
3708
|
var _e = useState(false), isEditing = _e[0], setIsEditing = _e[1];
|
|
3420
|
-
var _f = useState(
|
|
3709
|
+
var _f = useState(inputValue), dateString = _f[0], setDateString = _f[1];
|
|
3421
3710
|
var _g = styleConfig['text'], fieldStyle = _g.fieldStyle;
|
|
3422
3711
|
var _h = sizeConfig$c[size], iconSize = _h.iconSize, fieldSize = _h.fieldSize, iconPosition = _h.iconPosition;
|
|
3423
3712
|
var borderStyle = 'border border-bia-grey-dark-10 bg-primary-white';
|
|
3424
|
-
var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
|
|
3713
|
+
var extendedInputClassName = "w-full ".concat(fieldStyle, " ").concat(fieldSize, " ").concat(borderStyle, " ").concat(className);
|
|
3425
3714
|
var labelStatus = props.readOnly ? 'read-only:pointer-events-none' : '';
|
|
3426
3715
|
var handleTextChange = function (event) {
|
|
3427
3716
|
var rawValue = event.target.value;
|
|
@@ -3442,51 +3731,45 @@ var DateInputDisplay = forwardRef(function (_a, ref) {
|
|
|
3442
3731
|
};
|
|
3443
3732
|
var handleBlur = function () {
|
|
3444
3733
|
setIsEditing(false);
|
|
3445
|
-
setDateString(
|
|
3734
|
+
setDateString(inputValue);
|
|
3446
3735
|
};
|
|
3447
|
-
var input = isEditing || disabled ? (React.createElement(TextInput, { type: "text", value: dateString !== null && dateString !== void 0 ? dateString : '', onChange: handleTextChange, onBlur: handleBlur, placeholder: placeholder, size: size, inputClassName:
|
|
3736
|
+
var input = isEditing || disabled ? (React.createElement(TextInput, { type: "text", value: dateString !== null && dateString !== void 0 ? dateString : '', onChange: handleTextChange, onBlur: handleBlur, placeholder: placeholder, size: size, inputClassName: extendedInputClassName, autoFocus: true, disabled: disabled, actionElement: React.createElement("button", { className: "bianic-datepicker-toggle-button text-bia-coolgrey disabled:cursor-not-allowed", disabled: disabled, onClick: function () {
|
|
3448
3737
|
buttonAction && buttonAction();
|
|
3449
3738
|
} },
|
|
3450
3739
|
React.createElement(TbCalendar, { size: iconSize })) })) : (React.createElement(React.Fragment, null,
|
|
3451
|
-
React.createElement("div", { role: "button", onClick: function () { return setIsEditing(true); }, className: "bianic-text-input bianic-fgc-target w-full
|
|
3452
|
-
? displayDateFormatter(new Date(value))
|
|
3453
|
-
: nullDisplay || placeholder),
|
|
3740
|
+
React.createElement("div", { role: "button", onClick: function () { return setIsEditing(true); }, className: "bianic-text-input bianic-fgc-target w-full rounded hover:rounded-b-none hover:border-b-bia-blue focus:rounded-b-none focus-visible:outline-none disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-80 disabled:text-bia-grey-active ".concat(extendedInputClassName, " ").concat(inputValue || nullDisplay ? 'text-bia-black' : 'text-bia-coolgrey') }, viewValue),
|
|
3454
3741
|
React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 text-bia-coolgrey ".concat(iconPosition) },
|
|
3455
3742
|
React.createElement("button", { className: "bianic-datepicker-toggle-button", disabled: disabled, onClick: function () { return buttonAction && buttonAction(); } },
|
|
3456
3743
|
React.createElement(TbCalendar, { size: iconSize })))));
|
|
3457
3744
|
useEffect(function () {
|
|
3458
3745
|
// Only update dateString if we are NOT currently editing.
|
|
3459
3746
|
if (!isEditing)
|
|
3460
|
-
setDateString(
|
|
3461
|
-
}, [
|
|
3747
|
+
setDateString(inputValue !== null && inputValue !== void 0 ? inputValue : '');
|
|
3748
|
+
}, [inputValue, isEditing]);
|
|
3462
3749
|
return (React.createElement("div", { className: "bianic-date-input-container bianic-fgc-container flex w-full flex-col gap-y-2 text-bia-black" },
|
|
3463
3750
|
label && (React.createElement("label", { htmlFor: id, className: "bianic-text-input-label text-xs font-semibold ".concat(labelStatus) },
|
|
3464
3751
|
label,
|
|
3465
3752
|
required && React.createElement("span", { className: "p-1 text-bia-red" }, "*"))),
|
|
3466
3753
|
React.createElement("div", { className: "relative w-full", ref: ref }, input)));
|
|
3467
3754
|
});
|
|
3468
|
-
var dateToInputString = function (dateObj) {
|
|
3469
|
-
if (!(dateObj instanceof Date) || isNaN(dateObj))
|
|
3470
|
-
return ''; // Return empty string for invalid dates
|
|
3471
|
-
// Use local time methods for consistent display/input
|
|
3472
|
-
var year = dateObj.getFullYear();
|
|
3473
|
-
var month = String(dateObj.getMonth() + 1).padStart(2, '0');
|
|
3474
|
-
var day = String(dateObj.getDate()).padStart(2, '0');
|
|
3475
|
-
return "".concat(year, "-").concat(month, "-").concat(day);
|
|
3476
|
-
};
|
|
3477
3755
|
var displayDateFormatter = function (date) {
|
|
3756
|
+
if (!isDate(date))
|
|
3757
|
+
return '';
|
|
3478
3758
|
return "".concat(date.getDate(), " ").concat(monthMap[date.getMonth()].slice(0, 3), " '").concat(date.getFullYear().toString().slice(2, 4));
|
|
3479
3759
|
};
|
|
3760
|
+
function isDate(val) {
|
|
3761
|
+
return val instanceof Date && !isNaN(val);
|
|
3762
|
+
}
|
|
3480
3763
|
|
|
3481
3764
|
function DatePicker(_a) {
|
|
3482
|
-
var _b = _a.zIndexCalendar, zIndexCalendar = _b === void 0 ? 100 : _b, value = _a.value, onChange = _a.onChange, size = _a.size, disabled = _a.disabled
|
|
3765
|
+
var _b = _a.zIndexCalendar, zIndexCalendar = _b === void 0 ? 100 : _b, value = _a.value, onChange = _a.onChange, _c = _a.variant, variant = _c === void 0 ? 'single' : _c, size = _a.size, disabled = _a.disabled, _d = _a.placeholder, placeholder = _d === void 0 ? '"YYYY-MM-DD"' : _d, label = _a.label, minDate = _a.minDate, maxDate = _a.maxDate, required = _a.required, nullDisplay = _a.nullDisplay, inputClassName = _a.inputClassName, containerClassName = _a.containerClassName;
|
|
3483
3766
|
// State and Ref
|
|
3484
3767
|
var inputRef = useRef(null);
|
|
3485
|
-
var
|
|
3768
|
+
var _e = useState(false), isPickerOpen = _e[0], setIsPickerOpen = _e[1];
|
|
3486
3769
|
return (React.createElement("div", { className: "bianic-datepicker-container relative ".concat(containerClassName) },
|
|
3487
3770
|
React.createElement("div", { className: "bianic-datepicker-field-container" },
|
|
3488
|
-
React.createElement(DateInputDisplay, {
|
|
3489
|
-
React.createElement(PickerCalendar, { zIndex: zIndexCalendar, anchorRef: inputRef, selectedDate: value, onDateChange: onChange, minDate: minDate, maxDate: maxDate, isOpen: isPickerOpen, onClose: function () { return setIsPickerOpen(false); } })));
|
|
3771
|
+
React.createElement(DateInputDisplay, { className: inputClassName, value: value, setValue: onChange, placeholder: placeholder, nullDisplay: nullDisplay, size: size, label: label, required: required, buttonAction: function () { return setIsPickerOpen(!isPickerOpen); }, ref: inputRef, disabled: disabled })),
|
|
3772
|
+
React.createElement(PickerCalendar, { zIndex: zIndexCalendar, anchorRef: inputRef, selectedDate: value, pickerVariant: variant, onDateChange: onChange, minDate: minDate, maxDate: maxDate, isOpen: isPickerOpen, onClose: function () { return setIsPickerOpen(false); } })));
|
|
3490
3773
|
}
|
|
3491
3774
|
|
|
3492
3775
|
var AlertRoundedSquare = function (_a) {
|
|
@@ -3769,7 +4052,7 @@ function PaginationBar(_a) {
|
|
|
3769
4052
|
var size = _a.size, position = _a.position, currentPage = _a.currentPage, totalPages = _a.totalPages, onPageChange = _a.onPageChange;
|
|
3770
4053
|
var totalRange = Array.from({ length: totalPages }, function (_, i) { return i + 1; });
|
|
3771
4054
|
var PAGE_SIZE = 5;
|
|
3772
|
-
var _b = useState(
|
|
4055
|
+
var _b = useState((currentPage || 1) - 1), startIndex = _b[0], setStartIndex = _b[1];
|
|
3773
4056
|
var _c = useState(totalRange.slice(startIndex, PAGE_SIZE)), showedPages = _c[0], setShowedPages = _c[1];
|
|
3774
4057
|
var buttonSizingStyle = size === 'sm' ? 31 : 38;
|
|
3775
4058
|
var iconSize = size === 'sm' ? 14 : 18;
|
|
@@ -3777,13 +4060,6 @@ function PaginationBar(_a) {
|
|
|
3777
4060
|
if (page >= 1 && page <= totalPages)
|
|
3778
4061
|
onPageChange(page);
|
|
3779
4062
|
};
|
|
3780
|
-
var handleNextRange = function () {
|
|
3781
|
-
var newStartIndex = startIndex + PAGE_SIZE;
|
|
3782
|
-
if (newStartIndex < totalPages)
|
|
3783
|
-
setStartIndex(newStartIndex);
|
|
3784
|
-
else
|
|
3785
|
-
setStartIndex(totalPages - PAGE_SIZE);
|
|
3786
|
-
};
|
|
3787
4063
|
var handlePrevRange = function () {
|
|
3788
4064
|
var newStartIndex = startIndex - PAGE_SIZE;
|
|
3789
4065
|
if (newStartIndex >= 0)
|
|
@@ -3791,6 +4067,13 @@ function PaginationBar(_a) {
|
|
|
3791
4067
|
else
|
|
3792
4068
|
setStartIndex(0);
|
|
3793
4069
|
};
|
|
4070
|
+
var handleNextRange = function () {
|
|
4071
|
+
var newStartIndex = startIndex + PAGE_SIZE;
|
|
4072
|
+
if (newStartIndex < totalPages)
|
|
4073
|
+
setStartIndex(newStartIndex);
|
|
4074
|
+
else
|
|
4075
|
+
setStartIndex(totalPages - PAGE_SIZE);
|
|
4076
|
+
};
|
|
3794
4077
|
useEffect(function () {
|
|
3795
4078
|
var start = Math.max(0, Math.min(startIndex, totalPages - PAGE_SIZE));
|
|
3796
4079
|
var newPages = Array.from({ length: totalPages }, function (_, i) { return i + 1; }).slice(start, start + PAGE_SIZE);
|
|
@@ -3802,6 +4085,8 @@ function PaginationBar(_a) {
|
|
|
3802
4085
|
handlePageChange(currentPage - 1);
|
|
3803
4086
|
if (showedPages[0] === currentPage)
|
|
3804
4087
|
setStartIndex(function (old) { return old - 1; });
|
|
4088
|
+
if (!showedPages.includes(currentPage))
|
|
4089
|
+
setStartIndex(currentPage - 2);
|
|
3805
4090
|
}, className: currentPage === 1 ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronLeft, { size: iconSize }), disabled: currentPage === 1 }),
|
|
3806
4091
|
showedPages.map(function (page) {
|
|
3807
4092
|
if (page === currentPage) {
|
|
@@ -3813,9 +4098,10 @@ function PaginationBar(_a) {
|
|
|
3813
4098
|
}),
|
|
3814
4099
|
React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: function () {
|
|
3815
4100
|
handlePageChange(currentPage + 1);
|
|
3816
|
-
if (showedPages[4] === currentPage)
|
|
4101
|
+
if (showedPages[4] === currentPage)
|
|
3817
4102
|
setStartIndex(function (old) { return old + 1; });
|
|
3818
|
-
|
|
4103
|
+
if (!showedPages.includes(currentPage))
|
|
4104
|
+
setStartIndex(currentPage - 4);
|
|
3819
4105
|
}, className: currentPage === totalPages ? '' : 'cursor-pointer', iconLeft: React.createElement(TbChevronRight, { size: iconSize }), disabled: currentPage === totalPages }),
|
|
3820
4106
|
totalPages > 5 && (React.createElement(Button, { variant: "subtle", size: size, type: "button", onClick: handleNextRange, className: showedPages[showedPages.length - 1] === totalPages
|
|
3821
4107
|
? ''
|