@addsign/moje-agenda-shared-lib 0.0.60 → 0.0.62
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/dist/assets/tailwind.css
CHANGED
|
@@ -638,9 +638,15 @@ video {
|
|
|
638
638
|
.z-\[100000\] {
|
|
639
639
|
z-index: 100000;
|
|
640
640
|
}
|
|
641
|
+
.col-span-1 {
|
|
642
|
+
grid-column: span 1 / span 1;
|
|
643
|
+
}
|
|
641
644
|
.col-span-12 {
|
|
642
645
|
grid-column: span 12 / span 12;
|
|
643
646
|
}
|
|
647
|
+
.col-span-2 {
|
|
648
|
+
grid-column: span 2 / span 2;
|
|
649
|
+
}
|
|
644
650
|
.float-right {
|
|
645
651
|
float: right;
|
|
646
652
|
}
|
|
@@ -876,12 +882,12 @@ video {
|
|
|
876
882
|
.cursor-pointer {
|
|
877
883
|
cursor: pointer;
|
|
878
884
|
}
|
|
885
|
+
.grid-cols-12 {
|
|
886
|
+
grid-template-columns: repeat(12, minmax(0, 1fr));
|
|
887
|
+
}
|
|
879
888
|
.grid-cols-3 {
|
|
880
889
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
881
890
|
}
|
|
882
|
-
.grid-cols-7 {
|
|
883
|
-
grid-template-columns: repeat(7, minmax(0, 1fr));
|
|
884
|
-
}
|
|
885
891
|
.flex-col {
|
|
886
892
|
flex-direction: column;
|
|
887
893
|
}
|
|
@@ -994,6 +1000,9 @@ video {
|
|
|
994
1000
|
.border-b-2 {
|
|
995
1001
|
border-bottom-width: 2px;
|
|
996
1002
|
}
|
|
1003
|
+
.border-l {
|
|
1004
|
+
border-left-width: 1px;
|
|
1005
|
+
}
|
|
997
1006
|
.border-t {
|
|
998
1007
|
border-top-width: 1px;
|
|
999
1008
|
}
|
|
@@ -1074,6 +1083,10 @@ video {
|
|
|
1074
1083
|
--tw-bg-opacity: 1;
|
|
1075
1084
|
background-color: rgb(243 244 246 / var(--tw-bg-opacity));
|
|
1076
1085
|
}
|
|
1086
|
+
.bg-gray-150 {
|
|
1087
|
+
--tw-bg-opacity: 1;
|
|
1088
|
+
background-color: rgb(238 240 243 / var(--tw-bg-opacity));
|
|
1089
|
+
}
|
|
1077
1090
|
.bg-gray-200 {
|
|
1078
1091
|
--tw-bg-opacity: 1;
|
|
1079
1092
|
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
|
|
@@ -1090,9 +1103,6 @@ video {
|
|
|
1090
1103
|
--tw-bg-opacity: 1;
|
|
1091
1104
|
background-color: rgb(238 242 255 / var(--tw-bg-opacity));
|
|
1092
1105
|
}
|
|
1093
|
-
.bg-primary {
|
|
1094
|
-
background-color: var(--color-primary);
|
|
1095
|
-
}
|
|
1096
1106
|
.bg-red-100 {
|
|
1097
1107
|
--tw-bg-opacity: 1;
|
|
1098
1108
|
background-color: rgb(254 226 226 / var(--tw-bg-opacity));
|
|
@@ -1193,8 +1203,8 @@ video {
|
|
|
1193
1203
|
padding-top: 1px;
|
|
1194
1204
|
padding-bottom: 1px;
|
|
1195
1205
|
}
|
|
1196
|
-
.pb-
|
|
1197
|
-
padding-bottom:
|
|
1206
|
+
.pb-0 {
|
|
1207
|
+
padding-bottom: 0px;
|
|
1198
1208
|
}
|
|
1199
1209
|
.pb-5 {
|
|
1200
1210
|
padding-bottom: 1.25rem;
|
|
@@ -3,7 +3,8 @@ import React__default, { useState, useEffect, useCallback } from "react";
|
|
|
3
3
|
import { F as FaChevronLeft, a as FaChevronRight } from "../index-DUTU8Jwr.js";
|
|
4
4
|
const Calendar = ({
|
|
5
5
|
items,
|
|
6
|
-
startingDate
|
|
6
|
+
startingDate,
|
|
7
|
+
publicHolidays
|
|
7
8
|
}) => {
|
|
8
9
|
const [currentMonth, setCurrentMonth] = useState(
|
|
9
10
|
startingDate ? startingDate.getMonth() : (/* @__PURE__ */ new Date()).getMonth()
|
|
@@ -12,11 +13,6 @@ const Calendar = ({
|
|
|
12
13
|
startingDate ? startingDate.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear()
|
|
13
14
|
);
|
|
14
15
|
useEffect(() => {
|
|
15
|
-
console.log(
|
|
16
|
-
"%clibcomponentsCalendar.tsx:36 startingDate",
|
|
17
|
-
"color: #007acc;",
|
|
18
|
-
startingDate
|
|
19
|
-
);
|
|
20
16
|
if (startingDate) {
|
|
21
17
|
setCurrentMonth(startingDate.getMonth());
|
|
22
18
|
setCurrentYear(startingDate.getFullYear());
|
|
@@ -43,8 +39,8 @@ const Calendar = ({
|
|
|
43
39
|
"Středa",
|
|
44
40
|
"Čtvrtek",
|
|
45
41
|
"Pátek",
|
|
46
|
-
"
|
|
47
|
-
"
|
|
42
|
+
"So",
|
|
43
|
+
"Ne"
|
|
48
44
|
];
|
|
49
45
|
const isLeapYear = (year) => year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
|
|
50
46
|
const daysInMonth = useCallback((month, year) => {
|
|
@@ -99,7 +95,7 @@ const Calendar = ({
|
|
|
99
95
|
const date = new Date(year, month, day);
|
|
100
96
|
return items.filter((item) => date >= item.from && date <= item.to);
|
|
101
97
|
};
|
|
102
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col bg-white shadow-lg flex-grow text-xs rounded-lg border", children: [
|
|
98
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col bg-white shadow-lg flex-grow text-xs rounded-lg border overflow-hidden ", children: [
|
|
103
99
|
/* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center text-black p-2", children: [
|
|
104
100
|
/* @__PURE__ */ jsx(
|
|
105
101
|
"div",
|
|
@@ -123,21 +119,29 @@ const Calendar = ({
|
|
|
123
119
|
}
|
|
124
120
|
)
|
|
125
121
|
] }),
|
|
126
|
-
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-
|
|
122
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-12 pb-0 ", children: [
|
|
127
123
|
dayNames.map((day, index) => /* @__PURE__ */ jsx(
|
|
128
124
|
"div",
|
|
129
125
|
{
|
|
130
|
-
className: "py-1 px-4 text-center font-semibold border-t",
|
|
126
|
+
className: "py-1 px-4 text-center font-semibold border-t " + (index > 4 ? " bg-gray-100 col-span-1 " : " col-span-2 "),
|
|
131
127
|
children: day
|
|
132
128
|
},
|
|
133
129
|
index
|
|
134
130
|
)),
|
|
135
131
|
calendarData.map((week, weekIndex) => /* @__PURE__ */ jsx(React__default.Fragment, { children: week.map((day, dayIndex) => {
|
|
136
132
|
const itemsForDay = day ? findItemsForDay(day, currentMonth, currentYear) : [];
|
|
133
|
+
const date = new Date(
|
|
134
|
+
currentYear,
|
|
135
|
+
currentMonth,
|
|
136
|
+
day + 1
|
|
137
|
+
);
|
|
138
|
+
const isPublicHoliday = publicHolidays == null ? void 0 : publicHolidays.includes(
|
|
139
|
+
date.toISOString().split("T")[0]
|
|
140
|
+
);
|
|
137
141
|
return /* @__PURE__ */ jsxs(
|
|
138
142
|
"div",
|
|
139
143
|
{
|
|
140
|
-
className: "p-0 align-middle justify-center text-center border-t hover:bg-gray-150 " + (dayIndex > 4 ? "bg-gray-100" : ""),
|
|
144
|
+
className: "p-0 align-middle justify-center text-center border-t hover:bg-gray-150 " + (dayIndex > 4 ? "bg-gray-100 col-span-1 " : " col-span-2 ") + (isPublicHoliday ? " bg-gray-150 " : "") + (dayIndex !== 0 ? " border-l " : ""),
|
|
141
145
|
children: [
|
|
142
146
|
day && /* @__PURE__ */ jsxs("div", { className: "py-1", children: [
|
|
143
147
|
day,
|
|
@@ -146,10 +150,10 @@ const Calendar = ({
|
|
|
146
150
|
itemsForDay.map((item, itemIndex) => /* @__PURE__ */ jsx(
|
|
147
151
|
"div",
|
|
148
152
|
{
|
|
149
|
-
className: "dataItem w-full py-1
|
|
153
|
+
className: "dataItem w-full py-1 text-white text-center mt-0 -pr-1 ",
|
|
150
154
|
style: {
|
|
151
|
-
backgroundColor: item.background,
|
|
152
|
-
color: item.color
|
|
155
|
+
backgroundColor: isPublicHoliday || dayIndex > 4 ? "gray" : item.background,
|
|
156
|
+
color: isPublicHoliday || dayIndex > 4 ? "white" : item.color
|
|
153
157
|
},
|
|
154
158
|
"data-tooltip-target": "tooltip-" + item.id,
|
|
155
159
|
title: item.tooltip,
|
|
@@ -162,8 +166,7 @@ const Calendar = ({
|
|
|
162
166
|
dayIndex
|
|
163
167
|
);
|
|
164
168
|
}) }, weekIndex))
|
|
165
|
-
] })
|
|
166
|
-
" "
|
|
169
|
+
] })
|
|
167
170
|
] });
|
|
168
171
|
};
|
|
169
172
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","sources":["../../lib/components/Calendar.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\r\n\r\nexport interface ICalendarItem {\r\n id: number;\r\n label?: string;\r\n from: Date;\r\n to: Date;\r\n background?: string;\r\n color?: string;\r\n tooltip?: string;\r\n}\r\n\r\ntype ICalendarProps = {\r\n items: ICalendarItem[];\r\n startingDate?: Date;\r\n};\r\n\r\n// Check if a day is within any item's date range\r\n\r\nconst Calendar: React.FunctionComponent<ICalendarProps> = ({\r\n items,\r\n startingDate,\r\n}) => {\r\n const [currentMonth, setCurrentMonth] = useState(\r\n startingDate ? startingDate.getMonth() : new Date().getMonth()\r\n );\r\n\r\n const [currentYear, setCurrentYear] = useState(\r\n startingDate ? startingDate.getFullYear() : new Date().getFullYear()\r\n );\r\n\r\n // ... rest of your code\r\n\r\n useEffect(() => {\r\n console.log(\r\n \"%clibcomponentsCalendar.tsx:36 startingDate\",\r\n \"color: #007acc;\",\r\n startingDate\r\n );\r\n if (startingDate) {\r\n setCurrentMonth(startingDate.getMonth());\r\n setCurrentYear(startingDate.getFullYear());\r\n }\r\n }, [startingDate]);\r\n const [calendarData, setCalendarData] = useState<(string | number)[][]>([]);\r\n\r\n const monthNames: string[] = [\r\n \"Leden\",\r\n \"Únor\",\r\n \"Březen\",\r\n \"Duben\",\r\n \"Květen\",\r\n \"Červen\",\r\n \"Červenec\",\r\n \"Srpen\",\r\n \"Září\",\r\n \"Říjen\",\r\n \"Listopad\",\r\n \"Prosinec\",\r\n ];\r\n const dayNames: string[] = [\r\n \"Pondělí\",\r\n \"Úterý\",\r\n \"Středa\",\r\n \"Čtvrtek\",\r\n \"Pátek\",\r\n \"Sobota\",\r\n \"Neděle\",\r\n ];\r\n\r\n // Leap year check\r\n const isLeapYear = (year: number) =>\r\n (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n\r\n // Days in each month\r\n const daysInMonth = useCallback((month: number, year: number) => {\r\n if (month === 1) {\r\n // February\r\n return isLeapYear(year) ? 29 : 28;\r\n }\r\n if ([0, 2, 4, 6, 7, 9, 11].includes(month)) {\r\n // Months with 31 days\r\n\r\n return 31;\r\n }\r\n\r\n return 30; // Months with 30 days\r\n }, []);\r\n\r\n // Generate days for a month\r\n const generateMonthDays = useCallback(\r\n (month: number, year: number) => {\r\n const days = [];\r\n // const firstDayOfMonth = new Date(year, month, 1).getDay()\r\n\r\n // Adjusted to make week start from Monday\r\n let firstDayOfMonth = new Date(year, month, 1).getDay() - 1;\r\n if (firstDayOfMonth === -1) firstDayOfMonth = 6; // Sunday becomes 6 instead of -1\r\n\r\n let dayCounter = 1;\r\n\r\n for (let week = 0; week < 6; week++) {\r\n const weekDays = [];\r\n for (let day = 0; day < 7; day++) {\r\n if (week === 0 && day < firstDayOfMonth) {\r\n weekDays.push(\"\");\r\n } else if (dayCounter > daysInMonth(month, year)) {\r\n weekDays.push(\"\");\r\n } else {\r\n weekDays.push(dayCounter++);\r\n }\r\n }\r\n days.push(weekDays);\r\n }\r\n return days;\r\n },\r\n [daysInMonth]\r\n );\r\n\r\n useEffect(() => {\r\n setCalendarData(generateMonthDays(currentMonth, currentYear));\r\n }, [currentMonth, currentYear, generateMonthDays]);\r\n\r\n // Navigation handlers\r\n const goToNextMonth = () => {\r\n setCurrentMonth((prev) => (prev === 11 ? 0 : prev + 1));\r\n if (currentMonth === 11) {\r\n setCurrentYear((prev) => prev + 1);\r\n }\r\n };\r\n\r\n const goToPreviousMonth = () => {\r\n setCurrentMonth((prev) => (prev === 0 ? 11 : prev - 1));\r\n if (currentMonth === 0) {\r\n setCurrentYear((prev) => prev - 1);\r\n }\r\n };\r\n const findItemsForDay = (\r\n day: number,\r\n month: number,\r\n year: number\r\n ): ICalendarItem[] => {\r\n const date = new Date(year, month, day);\r\n return items.filter((item) => date >= item.from && date <= item.to);\r\n };\r\n return (\r\n <div className=\"flex flex-col bg-white shadow-lg flex-grow text-xs rounded-lg border\">\r\n <div className=\"flex justify-between items-center text-black p-2\">\r\n <div\r\n onClick={goToPreviousMonth}\r\n className=\"mr-5 px-8 py-4 cursor-pointer hover:bg-gray-100 rounded-xl text-sm\"\r\n >\r\n <FaChevronLeft />\r\n </div>\r\n <h2 className=\"font-semibold text-base\">\r\n {monthNames[currentMonth]} {currentYear}\r\n </h2>\r\n\r\n <div\r\n onClick={goToNextMonth}\r\n className=\"px-8 py-4 cursor-pointer hover:bg-gray-100 rounded-xl text-sm\"\r\n >\r\n <FaChevronRight />\r\n </div>\r\n </div>\r\n <div className=\"grid grid-cols-7 pb-4\">\r\n {dayNames.map((day, index) => (\r\n <div\r\n key={index}\r\n className=\"py-1 px-4 text-center font-semibold border-t\"\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n {calendarData.map((week, weekIndex) => (\r\n <React.Fragment key={weekIndex}>\r\n {week.map((day, dayIndex) => {\r\n const itemsForDay = day\r\n ? findItemsForDay(day as number, currentMonth, currentYear)\r\n : [];\r\n return (\r\n <div\r\n key={dayIndex}\r\n className={\r\n \"p-0 align-middle justify-center text-center border-t hover:bg-gray-150 \" +\r\n (dayIndex > 4 ? \"bg-gray-100\" : \"\")\r\n }\r\n >\r\n {day && <div className=\"py-1\">{day} </div>}\r\n {itemsForDay.map((item, itemIndex) => (\r\n <div\r\n key={itemIndex}\r\n className=\"dataItem w-full py-1 bg-primary text-white text-center mt-0 -pr-1\"\r\n style={{\r\n backgroundColor: item.background,\r\n color: item.color,\r\n }}\r\n data-tooltip-target={\"tooltip-\" + item.id}\r\n title={item.tooltip}\r\n >\r\n {item.label}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </React.Fragment>\r\n ))}\r\n </div>{\" \"}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Calendar;\r\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../../lib/components/Calendar.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\r\n\r\nexport interface ICalendarItem {\r\n id: number;\r\n label?: string;\r\n from: Date;\r\n to: Date;\r\n background?: string;\r\n color?: string;\r\n tooltip?: string;\r\n}\r\n\r\ntype ICalendarProps = {\r\n items: ICalendarItem[];\r\n startingDate?: Date;\r\n publicHolidays?: string[];\r\n};\r\n\r\n// Check if a day is within any item's date range\r\n\r\nconst Calendar: React.FunctionComponent<ICalendarProps> = ({\r\n items,\r\n startingDate,\r\n publicHolidays,\r\n}) => {\r\n const [currentMonth, setCurrentMonth] = useState(\r\n startingDate ? startingDate.getMonth() : new Date().getMonth()\r\n );\r\n\r\n const [currentYear, setCurrentYear] = useState(\r\n startingDate ? startingDate.getFullYear() : new Date().getFullYear()\r\n );\r\n\r\n useEffect(() => {\r\n if (startingDate) {\r\n setCurrentMonth(startingDate.getMonth());\r\n setCurrentYear(startingDate.getFullYear());\r\n }\r\n }, [startingDate]);\r\n const [calendarData, setCalendarData] = useState<\r\n (string | number | JSX.Element)[][]\r\n >([]);\r\n\r\n const monthNames: string[] = [\r\n \"Leden\",\r\n \"Únor\",\r\n \"Březen\",\r\n \"Duben\",\r\n \"Květen\",\r\n \"Červen\",\r\n \"Červenec\",\r\n \"Srpen\",\r\n \"Září\",\r\n \"Říjen\",\r\n \"Listopad\",\r\n \"Prosinec\",\r\n ];\r\n const dayNames: string[] = [\r\n \"Pondělí\",\r\n \"Úterý\",\r\n \"Středa\",\r\n \"Čtvrtek\",\r\n \"Pátek\",\r\n \"So\",\r\n \"Ne\",\r\n ];\r\n\r\n // Leap year check\r\n const isLeapYear = (year: number) =>\r\n (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n\r\n // Days in each month\r\n const daysInMonth = useCallback((month: number, year: number) => {\r\n if (month === 1) {\r\n // February\r\n return isLeapYear(year) ? 29 : 28;\r\n }\r\n if ([0, 2, 4, 6, 7, 9, 11].includes(month)) {\r\n // Months with 31 days\r\n\r\n return 31;\r\n }\r\n\r\n return 30; // Months with 30 days\r\n }, []);\r\n\r\n // Generate days for a month\r\n const generateMonthDays = useCallback(\r\n (month: number, year: number) => {\r\n const days = [];\r\n // const firstDayOfMonth = new Date(year, month, 1).getDay()\r\n\r\n // Adjusted to make week start from Monday\r\n let firstDayOfMonth = new Date(year, month, 1).getDay() - 1;\r\n if (firstDayOfMonth === -1) firstDayOfMonth = 6; // Sunday becomes 6 instead of -1\r\n\r\n let dayCounter = 1;\r\n\r\n for (let week = 0; week < 6; week++) {\r\n const weekDays = [];\r\n for (let day = 0; day < 7; day++) {\r\n if (week === 0 && day < firstDayOfMonth) {\r\n weekDays.push(\"\");\r\n } else if (dayCounter > daysInMonth(month, year)) {\r\n weekDays.push(\"\");\r\n } else {\r\n weekDays.push(dayCounter++);\r\n }\r\n }\r\n days.push(weekDays);\r\n }\r\n return days;\r\n },\r\n [daysInMonth]\r\n );\r\n\r\n useEffect(() => {\r\n setCalendarData(generateMonthDays(currentMonth, currentYear));\r\n }, [currentMonth, currentYear, generateMonthDays]);\r\n\r\n // Navigation handlers\r\n const goToNextMonth = () => {\r\n setCurrentMonth((prev) => (prev === 11 ? 0 : prev + 1));\r\n if (currentMonth === 11) {\r\n setCurrentYear((prev) => prev + 1);\r\n }\r\n };\r\n\r\n const goToPreviousMonth = () => {\r\n setCurrentMonth((prev) => (prev === 0 ? 11 : prev - 1));\r\n if (currentMonth === 0) {\r\n setCurrentYear((prev) => prev - 1);\r\n }\r\n };\r\n const findItemsForDay = (\r\n day: number,\r\n month: number,\r\n year: number\r\n ): ICalendarItem[] => {\r\n const date = new Date(year, month, day);\r\n\r\n return items.filter((item) => date >= item.from && date <= item.to);\r\n };\r\n return (\r\n <div className=\"flex flex-col bg-white shadow-lg flex-grow text-xs rounded-lg border overflow-hidden \">\r\n <div className=\"flex justify-between items-center text-black p-2\">\r\n <div\r\n onClick={goToPreviousMonth}\r\n className=\"mr-5 px-8 py-4 cursor-pointer hover:bg-gray-100 rounded-xl text-sm\"\r\n >\r\n <FaChevronLeft />\r\n </div>\r\n <h2 className=\"font-semibold text-base\">\r\n {monthNames[currentMonth]} {currentYear}\r\n </h2>\r\n\r\n <div\r\n onClick={goToNextMonth}\r\n className=\"px-8 py-4 cursor-pointer hover:bg-gray-100 rounded-xl text-sm\"\r\n >\r\n <FaChevronRight />\r\n </div>\r\n </div>\r\n <div className=\"grid grid-cols-12 pb-0 \">\r\n {dayNames.map((day, index) => (\r\n <div\r\n key={index}\r\n className={\r\n \"py-1 px-4 text-center font-semibold border-t \" +\r\n (index > 4 ? \" bg-gray-100 col-span-1 \" : \" col-span-2 \")\r\n }\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n {calendarData.map((week, weekIndex) => (\r\n <React.Fragment key={weekIndex}>\r\n {week.map((day, dayIndex) => {\r\n const itemsForDay = day\r\n ? findItemsForDay(day as number, currentMonth, currentYear)\r\n : [];\r\n\r\n const date = new Date(\r\n currentYear,\r\n currentMonth,\r\n (day as number) + 1\r\n );\r\n const isPublicHoliday = publicHolidays?.includes(\r\n date.toISOString().split(\"T\")[0]\r\n );\r\n\r\n return (\r\n <div\r\n key={dayIndex}\r\n className={\r\n \"p-0 align-middle justify-center text-center border-t hover:bg-gray-150 \" +\r\n (dayIndex > 4\r\n ? \"bg-gray-100 col-span-1 \"\r\n : \" col-span-2 \") +\r\n (isPublicHoliday ? \" bg-gray-150 \" : \"\") +\r\n (dayIndex !== 0 ? \" border-l \" : \"\")\r\n }\r\n >\r\n {day && <div className=\"py-1\">{day} </div>}\r\n {itemsForDay.map((item, itemIndex) => (\r\n <div\r\n key={itemIndex}\r\n className={\r\n \"dataItem w-full py-1 text-white text-center mt-0 -pr-1 \"\r\n }\r\n style={{\r\n backgroundColor:\r\n isPublicHoliday || dayIndex > 4\r\n ? \"gray\"\r\n : item.background,\r\n color:\r\n isPublicHoliday || dayIndex > 4\r\n ? \"white\"\r\n : item.color,\r\n }}\r\n data-tooltip-target={\"tooltip-\" + item.id}\r\n title={item.tooltip}\r\n >\r\n {item.label}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Calendar;\r\n"],"names":["React"],"mappings":"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"}
|