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